Funktion zur Detektion und Loggen von Angriffen von Spielern auf Spieler. Mehr ...
#include <defines.h>#include <commands.h>#include <wizlevels.h>#include <player/base.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | RNAME(x) capitalize(getuid(x)) |
Funktionen | |
| nomask int | CheckArenaFight (object victim) |
| Ist victim in einer Arena oder Schattenwelt? | |
| nomask protected int | CheckPlayerAttack (object attacker, object victim, string angriffsmsg) |
Funktion zur Detektion und Loggen von Angriffen von Spielern auf Spieler.
Definiert in Datei pklog.c.
| nomask int CheckArenaFight | ( | object | victim | ) |
Ist victim in einer Arena oder Schattenwelt?
Definiert in Zeile 26 der Datei pklog.c.
Wird benutzt von CheckPlayerAttack().

| nomask protected int CheckPlayerAttack | ( | object | attacker, | |
| object | victim, | |||
| string | angriffsmsg | |||
| ) |
Definiert in Zeile 30 der Datei pklog.c.
Benutzt CheckArenaFight(), CMD_ORIGIN, CMD_PLAYER, CMD_TEXT, CountUp(), IS_DEPUTY, IS_LEARNER, IS_LORD, log_file, ME, P_TESTPLAYER, RNAME, strftime() und wiz.
Wird benutzt von Kill() und TryAttackSpell().
00032 { 00033 // falls mal jemand ne Closure auf diese Funktion in die Finger bekommt und 00034 // protected umgeht. 00035 if (extern_call()) 00036 raise_error(sprintf("Extern Call to CheckPlayerAttack in %O!\n",ME)); 00037 00038 // nur Spieler sind interessant. 00039 if ( query_once_interactive(attacker) && query_once_interactive(victim) 00040 && !( IS_LEARNER(attacker) && IS_LEARNER(victim) ) ) { 00041 string filemessage, wizshout; 00042 int arena; 00043 00044 // Arena- oder Schattenweltkampf? 00045 arena=CheckArenaFight(attacker); 00046 00047 wizshout = sprintf("\n**** %s greift %s an. (%s) ***\n", 00048 RNAME(attacker), RNAME(victim), object_name(ME)); 00049 filemessage = sprintf("\n[%s] %s greift %s an. (%s) %s %s\n", 00050 strftime("%d%m%y-%H:%M:%S",time()), RNAME(attacker), 00051 RNAME(victim), object_name(this_object()), 00052 (arena ? "(ARENA)" : ""), 00053 (victim->QueryProp(P_TESTPLAYER) ? "(Testspieler)" : "")); 00054 00055 // Angriffsmsg vom Aufrufer anhaengen. 00056 if (stringp(angriffsmsg) && strlen(angriffsmsg)) { 00057 wizshout += angriffsmsg; 00058 filemessage += angriffsmsg; 00059 } 00060 // ggf. echten TI anhaengen oder warnen, falls keiner existiert. 00061 if ( this_interactive() != attacker ) { 00062 if ( this_interactive() ) { 00063 wizshout += "ACHTUNG: TI = " + getuid(this_interactive()) 00064 +"\n"; 00065 filemessage += "ACHTUNG: TI = "+getuid(this_interactive()) 00066 +"\n"; 00067 } 00068 else { 00069 filemessage += " ACHTUNG: Kein TI vorhanden!\n"; 00070 wizshout += " ACHTUNG: Kein TI vorhanden!\n"; 00071 } 00072 } 00073 // caller_stack() mitloggen (aber nicht Magier vollscrollen). 00074 filemessage += "Callerstack: " + CountUp(map(caller_stack(1), 00075 function string (object po) {return to_string(po);}), 00076 ", ", ", ") + "\n"; 00077 // Commandstack anhaengen 00078 mixed cstack = command_stack(); 00079 filemessage += "Commandstack: " + CountUp(map(cstack, 00080 function string (mixed arr) { 00081 return sprintf("({Original-TP: %O, TP: %O, Kommando: %s})", 00082 arr[CMD_ORIGIN],arr[CMD_PLAYER],arr[CMD_TEXT] || ""); 00083 },", ",", ")) + "\n"; 00084 // fuer Magier originaeren Befehl anhaengen: 00085 if (sizeof(cstack)) 00086 wizshout += sprintf("Kommando: %s\n", 00087 cstack[0][CMD_TEXT] || "<unbekannt>"); 00088 00089 wizshout += "\n"; 00090 00091 // erstmal loggen 00092 if ( arena ) 00093 log_file("ATTACKS_ARENA", filemessage); 00094 else 00095 log_file("ATTACKS", filemessage); 00096 00097 // dann Magiern bescheidgeben 00098 if ( !arena && !(victim->QueryProp(P_TESTPLAYER)) ) { 00099 foreach(object wiz: users()) { 00100 if ( IS_LORD(wiz) || IS_DEPUTY(wiz) ) 00101 tell_object(wiz, wizshout); 00102 } 00103 } 00104 return 1; // Spieler-Spielerkampf 00105 } 00106 return 0; // kein Spieler-Spielerkampf 00107 }


1.6.3