zesstra | c34bfc1 | 2016-06-27 22:04:41 +0200 | [diff] [blame^] | 1 | // /p/service/mupfel/getkill.c |
| 2 | // Ermittelt, wenn in 'die' aufgerufen, den Killer, auch wenn |
| 3 | // mit Bumerang, Kampfdaemon o.ae. Hilfsmitteln getoetet wurde |
| 4 | // 22-07-1996 - Mupfel@MorgenGrauen - |
| 5 | // Jetzt wird auch ein Beistand (Schutzengel, Phoenix, etc) erkannt |
| 6 | // 06-07-1997 - Mupfel@MorgenGrauen - |
| 7 | // Args der Pflanzenkrieger hat ja auch die id "Beistand" ;( |
| 8 | // 09-01-2001 - Mupfel@MorgenGrauen - |
| 9 | // Immer neue Retrowaffen... jetzt wird auch Tsunamis Toga erkannt |
| 10 | // 04-01-2005 - Mupfel@MorgenGrauen - |
| 11 | // 21.11.2006 - Zesstra |
| 12 | // Der Bumerang ist umgezogen. Pfad aktualisiert |
| 13 | // 13.10.2013 - Zesstra |
| 14 | // Einmal auf Basis von P_KILLER neugebaut. |
| 15 | // 16.10.2013 - Zesstra |
| 16 | // Man muss es jetzt nicht mehr erben, sondern kann auch per Callother |
| 17 | // abfragen. Dann wird der Killer vom previous_object() ermittelt. |
| 18 | // 12.06.2016 - Mupfel |
| 19 | // Zesstra war fleissig und hat diese Kruecke ueberfluessig gemacht. |
| 20 | // Siehe Manpage zu "get_killing_player" |
| 21 | |
| 22 | #define NEED_PROTOTYPES |
| 23 | #include <thing/properties.h> |
| 24 | #undef NEED_PROTOTYPES |
| 25 | |
| 26 | #include <thing/language.h> |
| 27 | #include <properties.h> |
| 28 | |
| 29 | public mixed get_killer_data(int extern) |
| 30 | { |
| 31 | object killer; |
| 32 | // wenn von ausser gerufen und ein PO existiert, fragen wir P_KILLER darin |
| 33 | // ab. Dann muss man dieses Ding hier nicht unbedingt erben. |
| 34 | if ((extern || extern_call()) && previous_object()) |
| 35 | killer=previous_object()->QueryProp(P_KILLER); |
| 36 | else |
| 37 | killer=QueryProp(P_KILLER); |
| 38 | |
| 39 | // Eigentlich tritt dieser Fall nur bei Vergiftungen auf. |
| 40 | if (!objectp(killer)) |
| 41 | return ({0,"<unbekannt>"}); |
| 42 | |
| 43 | // Spieler selber? Ist ja einfach. |
| 44 | if (query_once_interactive(killer)) |
| 45 | return ({killer,killer->Name(WER)}); |
| 46 | |
| 47 | // Helfer-NPC? |
| 48 | mixed helperdata = killer->QueryProp(P_HELPER_NPC); |
| 49 | if (pointerp(helperdata) && objectp(helperdata[0])) |
| 50 | return ({helperdata[0], helperdata[0]->Name(WER) + " mit Helfer-NPC"}); |
| 51 | // Einige Gilden-NPC verweisen auf ihren Spieler. Diese wird natuerlich nur |
| 52 | // abgefragt, wenn die Gilde noch keinen Helfer-NPC registrieren. |
| 53 | else if (killer->id("\nchaos_gilden_daemon")) |
| 54 | { |
| 55 | killer=find_player(killer->QueryProp("chaos_daem_beschwoerer")); |
| 56 | return ({killer, killer->Name(WER)+" (mit Kampfdaemon)"}); |
| 57 | } |
| 58 | else if (killer->id("Beistand") && !killer->id("P-KRIEGER")) |
| 59 | { |
| 60 | killer = killer->QueryProp("klerus_owner"); |
| 61 | return ({killer, killer->Name(WER)+" (mit Beistand)"}); |
| 62 | } |
| 63 | |
| 64 | // Einige toetende Objekte gesondert behandeln und Spieler als Killer |
| 65 | // liefern. |
| 66 | switch(object_name(blueprint(killer))) |
| 67 | { |
| 68 | case "/d/ebene/obj/gring": |
| 69 | killer = killer->QueryProp(P_WORN); |
| 70 | return ({killer, killer->name(RAW)+" (mit Goblinring)"}); |
| 71 | case "/d/unterwelt/wurzel/dorf/shabz": |
| 72 | killer = killer->QueryProp(P_WORN); |
| 73 | return ({killer, killer->name(RAW)+" (mit Abzeichen)"}); |
| 74 | case "/d/wueste/tsunami/schule/rue/hex_toga2": |
| 75 | killer = killer->QueryProp(P_WORN); |
| 76 | return ({killer, killer->name(RAW)+" (mit Toga)"}); |
| 77 | case "/p/seher/laden/obj/bumerang": |
| 78 | killer = killer->query_werfer(); |
| 79 | return ({killer, killer->name(RAW)+" (mit Bumerang)"}); |
| 80 | } |
| 81 | // killer ist jedenfalls kein Spieler hier. |
| 82 | return ({killer, killer->name(RAW)}); |
| 83 | } |
| 84 | |
| 85 | // Name des Killers |
| 86 | public string get_killer() |
| 87 | { |
| 88 | return get_killer_data(extern_call())[1]; |
| 89 | } |
| 90 | // Objekt des Killers |
| 91 | public object get_killer_object() |
| 92 | { |
| 93 | return get_killer_data(extern_call())[0]; |
| 94 | } |
| 95 | |