pklog.c-Dateireferenz

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>
Include-Abhängigkeitsdiagramm für pklog.c:

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)

Ausführliche Beschreibung

Funktion zur Detektion und Loggen von Angriffen von Spielern auf Spieler.

Autor:
Zesstra
Datum:
12.08.2008
Version:
$Id$

Definiert in Datei pklog.c.


Makro-Dokumentation

#define RNAME ( x   )     capitalize(getuid(x))

Definiert in Zeile 22 der Datei pklog.c.


Dokumentation der Funktionen

nomask int CheckArenaFight ( object  victim  ) 

Ist victim in einer Arena oder Schattenwelt?

Definiert in Zeile 26 der Datei pklog.c.

Wird benutzt von CheckPlayerAttack().

00026                                           {
00027   return (object_name(environment(victim))[0..14]=="/d/schattenwelt");
00028 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

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 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

Erzeugt am Thu Jun 3 14:42:52 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3