combat.c-Dateireferenz

#include <thing/properties.h>
#include <wizlevels.h>
#include <combat.h>
#include <new_skills.h>
Include-Abhängigkeitsdiagramm für combat.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define ME   this_object()
#define STATMASTER   "/p/service/rochus/guildstat/master"
#define CLASS_MASK   0x1fffffff

Funktionen

protected void create ()
public int RegisterHelperNPC (object npc, int flags)
 registriert den NPC als Helfer von diesem Spieler.
public int UnregisterHelperNPC (object npc)
 de-registriert den NPC als Helfer von diesem Spieler.
public int QueryPlAttacked (object pl)
 Hat dieser Spieler den Spieler pl angegriffen?.
public int Kill (object ob)
 kill - Kampf starten.
int Defend (int dam, mixed dam_type, mixed spell, object enemy)
static mixed _query_no_attack ()

Variablen

inherit std living combat
inherit std player pklog
private nosave closure mod_def_stat
private nosave string * plAttacked = ({})

Makro-Dokumentation

#define CLASS_MASK   0x1fffffff

Definiert in Zeile 38 der Datei combat.c.

Wird benutzt von RegisterHelperNPC().

#define ME   this_object()

Definiert in Zeile 21 der Datei combat.c.

#define STATMASTER   "/p/service/rochus/guildstat/master"

Definiert in Zeile 22 der Datei combat.c.


Dokumentation der Funktionen

static mixed _query_no_attack (  )  [static]

Definiert in Zeile 186 der Datei combat.c.

Benutzt P_GHOST, P_NO_ATTACK, Query() und QueryProp().

00187 {
00188     if ( QueryProp(P_GHOST) )
00189         return 1;
00190 
00191     return Query(P_NO_ATTACK);
00192 }

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

protected void create (  ) 

Definiert in Zeile 27 der Datei combat.c.

Benutzt create(), F_MODE, F_MODE_AS, NOSETMETHOD, P_HELPER_NPC, P_NO_ATTACK, PROTECTED, SECURED, Set() und SetProp().

00027                         {
00028   combat::create();
00029   // P_NO_ATTACK ist nicht fuer Spieler gedacht. Ausnahme: Spieler ist
00030   // Geist, dann setzt das Spielerobjekt aber selber.
00031   Set(P_NO_ATTACK, SECURED|NOSETMETHOD, F_MODE_AS);
00032   
00033   Set(P_HELPER_NPC, PROTECTED, F_MODE);
00034   SetProp(P_HELPER_NPC, ([]) );
00035 }

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

int Defend ( int  dam,
mixed  dam_type,
mixed  spell,
object  enemy 
)

Definiert in Zeile 149 der Datei combat.c.

Benutzt Defend(), IS_LEARNER, ME, mod_def_stat, P_GUILD, P_GUILD_LEVEL, P_HP, QueryProp() und STATMASTER.

00149                                                                {
00150   int delta_hp,res;
00151 
00152   if (query_once_interactive(ME)
00153       && !IS_LEARNER(ME)
00154       && !objectp(get_type_info(mod_def_stat,2))) {
00155     object ma;
00156     if (!objectp(ma=find_object(STATMASTER)))
00157       return ::Defend(dam,dam_type,spell,enemy);
00158     // Statistik nur aufrufen falls Master geladen
00159     mod_def_stat=symbol_function("ModifyDefendStat",ma);
00160   }
00161 
00162   if (closurep(mod_def_stat))
00163     delta_hp=QueryProp(P_HP);
00164 
00165   res=::Defend(dam,dam_type,spell,enemy);
00166 
00167   if (closurep(mod_def_stat)) {
00168     delta_hp-=QueryProp(P_HP);
00169     if (delta_hp<0)
00170       delta_hp=0;
00171     funcall(mod_def_stat,
00172             QueryProp(P_GUILD),
00173             QueryProp(P_GUILD_LEVEL),
00174             dam-10*delta_hp,
00175             dam_type,
00176             spell);
00177   }
00178 
00179   return res;
00180 }

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

public int Kill ( object  ob  ) 

kill - Kampf starten.

Fuegt ob der Feindesliste hinzu.

Definiert in Zeile 126 der Datei combat.c.

Benutzt CheckPlayerAttack(), IsEnemy(), Kill(), ME, plAttacked und QueryPlAttacked().

00126                            {
00127 
00128   if (!objectp(ob)) return 0;
00129 
00130   // dies dient nur dazu, das plAttacked mapping zu bereinigen.
00131   // TODO: besser machen. ;-)
00132   if ( query_once_interactive(ob) && !IsEnemy(ob)) {
00133     QueryPlAttacked(ME);
00134     ob->QueryPlAttacked(ob); // aktualisieren ...
00135   }
00136 
00137   int res = combat::Kill(ob);
00138 
00139   // falls Feind neu eingetragen wurde, pruefen, ob es ein
00140   // Spieler-Spieler-Angriff ist.
00141   // TODO: Weg finden, dies in InsertEnemy() zu tun. Schwierigkeit ist, zu
00142   // TODO::ermitteln, von welchem Spieler der urspruengliche Angriff ausging.
00143   if (res==1 && CheckPlayerAttack(ME, ob, 0))
00144     plAttacked += ({ getuid(ob) });
00145 
00146   return res;
00147 }

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

public int QueryPlAttacked ( object  pl  ) 

Hat dieser Spieler den Spieler pl angegriffen?.

Parameter:
[in] pl object zu pruefender Spieler
Rückgabe:
int 1, falls dieser Spieler pl angegriffen hat.
Achtung:
Nebeneffekt: bereinigt den internen Speicher von UIDs von zerstoerten Spielern und solchen, die keine Feinde mehr sind.

Definiert in Zeile 109 der Datei combat.c.

Benutzt find_netdead(), find_player(), IsEnemy(), ME, ob() und plAttacked.

Wird benutzt von Kill().

00109                                       {
00110   object ob;
00111 
00112   if ( !objectp(pl) )
00113     return 0;
00114 
00115   foreach(string plname: plAttacked) {
00116     if ( !( ob=(find_player(plname)||find_netdead(plname)) )
00117         || ( !IsEnemy(ob) && !(ob->IsEnemy(ME)) ) )
00118       plAttacked -= ({plname}); // ja, das geht. ;-)
00119   }
00120   return (member( plAttacked, getuid(pl) ) >= 0);
00121 }

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

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

public int RegisterHelperNPC ( object  npc,
int  flags 
)

registriert den NPC als Helfer von diesem Spieler.

Parameter:
[in] npc object Helfer-NPC
[in] flags int Bitfeld von Flags
Rückgabe:
int 1, falls der Helfer-NPC registriert wurde und noch nicht registriert war.
Achtung:
Nutzt aus, dass QueryProp(P_HELPER_NPC) _keine_ Kopie des Mappings in der Prop liefert.

Definiert in Zeile 47 der Datei combat.c.

Benutzt CLASS_MASK, EXCLUSIVE_HELPER, P_HELPER_NPC und QueryProp().

00047                                                     {
00048   if (!objectp(npc))
00049     raise_error(sprintf( "Wrong argument 1 in RegisterHelperNPC(). "
00050           "Expected <object>, got %.100O\n", npc));
00051   if (!intp(flags) || flags < 1)
00052      raise_error(sprintf( "Wrong argument 2 in RegisterHelperNPC(). "
00053           "Expected positive <int>, got %O\n", flags));
00054   
00055   mapping helpers = QueryProp(P_HELPER_NPC);
00056   
00057   // schon registrierte sind witzlos.
00058   if (member(helpers, npc))
00059     return 0;
00060   
00061   // auf exklusive Helfer pruefen.
00062   foreach(object helper, int fl: helpers) {
00063     // flags identisch? Dann Klasse und Exklusivitaet identisch
00064     if (fl == flags)
00065       return 0;
00066     // oder einer von beiden exklusiv und beide in der gleichen Klasse?
00067     else if ( ((fl & EXCLUSIVE_HELPER) || (flags & EXCLUSIVE_HELPER))
00068               && ((fl & CLASS_MASK) == (flags & CLASS_MASK)) )
00069       return 0;
00070   }
00071   // scheint wohl ok zu sein. Registrieren und Prop im NPC setzen.
00072   helpers += ([ npc: flags ]);
00073   npc->SetProp(P_HELPER_NPC, ({ this_object(), flags }) );
00074   // momentan unnoetig, da helpers keine Kopie ist.
00075   // SetProp(P_HELPER_NPC, helpers);
00076 
00077   return 1;
00078 }

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

public int UnregisterHelperNPC ( object  npc  ) 

de-registriert den NPC als Helfer von diesem Spieler.

Parameter:
[in] npc object Helfer-NPC
Rückgabe:
int 1, falls der Helfer-NPC registriert war und entfernt wurde.
Achtung:
Nutzt aus, dass QueryProp(P_HELPER_NPC) _keine_ Kopie des Mappings in der Prop liefert.

Definiert in Zeile 87 der Datei combat.c.

Benutzt m_delete(), P_HELPER_NPC und QueryProp().

00087                                            {
00088   if (!objectp(npc))
00089     raise_error(sprintf("Wrong argument in UnregisterHelpernNPC(). "
00090           "Expected <object>, got %.100O\n", npc));
00091 
00092   mapping helpers = QueryProp(P_HELPER_NPC);
00093   if (member(helpers, npc)) {
00094     efun::m_delete(helpers, npc);
00095     // momentan unnoetig, da helpers keine Kopie ist.
00096     // SetProp(P_HELPER_NPC, helpers);
00097     npc->SetProp(P_HELPER_NPC, 0);
00098     return 1;
00099   }
00100   return 0;
00101 }

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


Variablen-Dokumentation

inherit std living combat

Definiert in Zeile 12 der Datei combat.c.

private nosave closure mod_def_stat

Definiert in Zeile 24 der Datei combat.c.

Wird benutzt von Defend().

inherit std player pklog

Definiert in Zeile 13 der Datei combat.c.

private nosave string* plAttacked = ({})

Definiert in Zeile 25 der Datei combat.c.

Wird benutzt von Kill() und QueryPlAttacked().

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