gilden_ob.c-Dateireferenz

#include <properties.h>
#include <attributes.h>
#include <new_skills.h>
Include-Abhängigkeitsdiagramm für gilden_ob.c:

gehe zum Quellcode dieser Datei

Funktionen

void create ()
mapping _query_guild_skills ()
string GuildName ()
varargs int IsGuildMember (object pl)
int check_cond (mixed cond)
int can_advance ()
void adjust_title (object pl)
void do_advance ()
int try_advance ()
int beitreten ()
varargs int austreten (int loss)
int bei_oder_aus_treten (string str)
varargs int AddSkill (string sname, mapping ski)
varargs int AddSpell (string verb, mapping ski)
mapping QuerySkill (string skill)
mapping QuerySpell (string spell)
varargs int UseSpell (object caster, string spell, mapping sinfo)
static int InitialSkillAbility (mapping ski, object pl)
int SkillListe (int what)
varargs int LearnSpell (string spell, object pl)
int LearnSkill (string skill)
int GuildRating (object pl)
void NotifyGiveQuest (object pl, string key)

Variablen

inherit std restriction_checker

Dokumentation der Funktionen

mapping _query_guild_skills (  ) 

Definiert in Zeile 24 der Datei gilden_ob.c.

Benutzt P_GUILD_SKILLS und Query().

00024                               {
00025     // eine Kopie zurueckliefern, um versehentliche Aenderungen des
00026     // Originalmappings in der Gilde zu vermeiden.
00027     return(deep_copy(Query(P_GUILD_SKILLS)));
00028 }

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

varargs int AddSkill ( string  sname,
mapping  ski 
)

Definiert in Zeile 151 der Datei gilden_ob.c.

Benutzt AddSkillMappings(), P_GLOBAL_SKILLPROPS, P_GUILD_SKILLS, Query(), QueryProp(), SetProp(), SI_SKILLFUNC und skills.

Wird benutzt von AddSpell().

00151                                     {
00152   mapping skills;
00153 
00154   if (!sname)
00155     return 0;
00156 
00157   // per Query() abfragen, hier ist keine Kopie noetig.
00158   if (!mappingp(skills=Query(P_GUILD_SKILLS))) {
00159     skills=([]);
00160     SetProp(P_GUILD_SKILLS,skills);
00161   }
00162   
00163   if (!mappingp(ski))
00164       ski=([]);
00165   else
00166       //Zur Sicherheit Kopie erstellen, wer weiss, was der Eintragende noch
00167       //mit seinem Mapping macht...
00168       ski=deep_copy(ski);
00169 
00170   if (!stringp(ski[SI_SKILLFUNC]))
00171     // Wenn keine Funktion angegeben ist, Funktionsname=Skillname
00172     ski[SI_SKILLFUNC]=sname;
00173 
00174   // Gilden-Offsets addieren
00175   ski=AddSkillMappings(QueryProp(P_GLOBAL_SKILLPROPS),ski);
00176 
00177   // Skill setzen.
00178   skills[sname]=ski;
00179   //SetProp() unnoetig, da oben per Query() das Originalmapping erhalten
00180   //wurde.
00181   //SetProp(P_GUILD_SKILLS,skills);
00182   return 1;
00183 }

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

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

varargs int AddSpell ( string  verb,
mapping  ski 
)

Definiert in Zeile 187 der Datei gilden_ob.c.

Benutzt AddSkill(), P_GUILD_DEFAULT_SPELLBOOK, QueryProp(), SI_SPELLBOOK, skills und SPELLBOOK_DIR.

Wird benutzt von create().

00187                                    {
00188   mapping skills;
00189 
00190   if (!verb)
00191       return 0;
00192   if (!mappingp(ski))
00193       ski=([]);
00194 
00195   if (!stringp(ski[SI_SPELLBOOK]) &&
00196       !stringp(ski[SI_SPELLBOOK]=QueryProp(P_GUILD_DEFAULT_SPELLBOOK)))
00197     // Wenn kein Spellbook angegeben ist muss ein
00198     // Default-Spellbook angegeben sein, sonst Fehler
00199     return 0;
00200   if (file_size(SPELLBOOK_DIR+ski[SI_SPELLBOOK]+".c")<0)
00201     return 0; // Spellbook sollte auch existieren...
00202 
00203   return AddSkill(lower_case(verb),ski);
00204 }

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

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

void adjust_title ( object  pl  ) 

Definiert in Zeile 76 der Datei gilden_ob.c.

Benutzt FEMALE, lv(), MALE, P_GENDER, P_GUILD_FEMALE_TITLES, P_GUILD_LEVEL, P_GUILD_MALE_TITLES, P_GUILD_TITLE und QueryProp().

00076                              {
00077   int lv;
00078   mixed ti;
00079 
00080 
00081   if (!pl ||
00082       !(lv=(int)pl->QueryProp(P_GUILD_LEVEL)))
00083     return;
00084   switch((int)pl->QueryProp(P_GENDER)) {
00085   case MALE:
00086     ti=QueryProp(P_GUILD_MALE_TITLES);break;
00087   case FEMALE:
00088     ti=QueryProp(P_GUILD_FEMALE_TITLES);break;
00089   default:
00090     return;
00091   }
00092   if (mappingp(ti))
00093     ti=ti[lv];
00094   if (stringp(ti))
00095     pl->SetProp(P_GUILD_TITLE,ti);
00096 }

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

varargs int austreten ( int  loss  ) 

Definiert in Zeile 135 der Datei gilden_ob.c.

Benutzt GUILDMASTER.

00135                                 {
00136     return (int)GUILDMASTER->austreten(loss);
00137 }

int bei_oder_aus_treten ( string  str  ) 

Definiert in Zeile 139 der Datei gilden_ob.c.

Benutzt austreten() und beitreten().

00139                                     {
00140   if (!str) return 0;
00141   if (sizeof(regexp(({lower_case(str)}),
00142                     "\\<aus\\>.*gilde\\>.*\\<aus\\>")))
00143     return austreten();
00144   if (sizeof(regexp(({lower_case(str)}),
00145                      "(gilde\\>.*\\<bei\\>|\\<in\\>.*gilde\\>.*\\<ein\\>)")))
00146     return beitreten();
00147   return 0;
00148 }

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

int beitreten (  ) 

Definiert in Zeile 116 der Datei gilden_ob.c.

Benutzt check_restrictions(), GUILDMASTER, P_GUILD_LEVEL, P_GUILD_RESTRICTIONS, QueryProp() und try_advance().

00116                 {
00117   string res;
00118   int erg;
00119 
00120   if (res=check_restrictions(this_player(),QueryProp(P_GUILD_RESTRICTIONS))) {
00121     // Werden die Beitrittsbedingungen erfuellt?
00122     printf("Du kannst dieser Gilde nicht beitreten.\nGrund: %s",res);
00123     return -3;
00124   }
00125   if (erg=(int)GUILDMASTER->beitreten()) {
00126     if (erg<0)
00127       return erg;
00128     if (!(this_player()->QueryProp(P_GUILD_LEVEL)))
00129       try_advance(); // Level 1 wird sofort vergeben
00130     return 1;
00131   }
00132   return 0;
00133 }

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

int can_advance (  ) 

Definiert in Zeile 67 der Datei gilden_ob.c.

Benutzt check_cond(), lv(), P_GUILD_LEVEL, P_GUILD_LEVELS und QueryProp().

Wird benutzt von try_advance().

00067                   {
00068   int lv;
00069   mapping lvs;
00070 
00071   if (!(lv=(int)this_player()->QueryProp(P_GUILD_LEVEL))) return 1;
00072   if (!(lvs=QueryProp(P_GUILD_LEVELS))) return 0;
00073   return check_cond(lvs[lv+1]); // Bedingung fuer naechsten Level testen.
00074 }

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

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

int check_cond ( mixed  cond  ) 

Definiert in Zeile 50 der Datei gilden_ob.c.

Benutzt _notify_fail(), check_restrictions(), P_XP und QueryProp().

Wird benutzt von can_advance().

00050                            {
00051   string res;
00052 
00053   if (intp(cond)) {
00054     _notify_fail("Dir fehlt noch die noetige Erfahrung. "+
00055                 "Komm spaeter wieder.\n");
00056     return (this_player()->QueryProp(P_XP)>=cond);
00057   }
00058   if (mappingp(cond)) {
00059     res=check_restrictions(this_player(),cond);
00060     if (!stringp(res)) return 1;
00061     _notify_fail(res);
00062     return 0;
00063   }
00064   return 1;
00065 }

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

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

void create (  ) 

Definiert in Zeile 18 der Datei gilden_ob.c.

Benutzt F_MODE_AS, P_GUILD_SKILLS, PROTECTED, Set() und SetProp().

00018               {
00019     // P_GUILD_SKILLS sollte nicht direkt von aussen manipuliert werden...
00020     SetProp(P_GUILD_SKILLS,([]));
00021     Set(P_GUILD_SKILLS,PROTECTED,F_MODE_AS);
00022 }

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

void do_advance (  ) 

Definiert in Zeile 98 der Datei gilden_ob.c.

Benutzt adjust_title(), lv() und P_GUILD_LEVEL.

Wird benutzt von try_advance().

00098                   {
00099   int lv;
00100 
00101   lv=this_player()->QueryProp(P_GUILD_LEVEL)+1;
00102   if (lv<1) lv=1;
00103   this_player()->SetProp(P_GUILD_LEVEL,lv);
00104   adjust_title(this_player());
00105 }

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

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

string GuildName (  ) 

Definiert in Zeile 30 der Datei gilden_ob.c.

Wird benutzt von IsGuildMember().

00030                    {
00031   //Gilden muessen Blueprints sein, so. ;-)
00032   return object_name(this_object())[8..];
00033 }

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

int GuildRating ( object  pl  ) 

Definiert in Zeile 378 der Datei gilden_ob.c.

Benutzt cnt, i, IsGuildMember(), MAX_ABILITY, P_GUILD_RATING, P_GUILD_SKILLS, QueryProp() und sum.

00379 {
00380   mapping ski;
00381   string *sk;
00382   int i, cnt, sum;
00383   closure qsa;
00384   
00385   if (!IsGuildMember(pl)||!query_once_interactive(pl))
00386     return 0;
00387 
00388   if (!(ski = QueryProp(P_GUILD_SKILLS)) ||
00389       !(qsa = symbol_function("QuerySkillAbility",pl)))
00390     return 0;
00391 
00392   sk = m_indices(ski);
00393   cnt = sizeof(ski);
00394   
00395   for (i=cnt-1, sum=0; i>=0; i--)
00396     sum += funcall(qsa, sk[i]);
00397 
00398   sum = sum/cnt;
00399   if (sum < 0)
00400     sum = 0;
00401   else if (sum > MAX_ABILITY)
00402     sum = MAX_ABILITY;
00403   
00404   return (int)pl->SetProp(P_GUILD_RATING, sum);
00405 }

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

static int InitialSkillAbility ( mapping  ski,
object  pl 
) [static]

Definiert in Zeile 257 der Datei gilden_ob.c.

Benutzt A_INT, GetFactor(), GetOffset() und SI_SKILLLEARN.

Wird benutzt von LearnSkill() und LearnSpell().

00257                                             {
00258   if (!ski || !pl) return 0;
00259   return (300*GetOffset(SI_SKILLLEARN,ski,pl)+
00260           (200*(int)pl->QueryAttribute(A_INT)*
00261            GetFactor(SI_SKILLLEARN,ski,pl))/100);
00262 }

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

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

varargs int IsGuildMember ( object  pl  ) 

Definiert in Zeile 36 der Datei gilden_ob.c.

Benutzt _notify_fail(), GuildName() und P_GUILD.

Wird benutzt von adjust_title(), GuildRating(), LearnSkill(), LearnSpell() und try_advance().

00036                          {
00037   string plg;
00038 
00039   if (!pl && !(pl=this_player()))
00040     return 0;
00041   if (!(plg=(string)pl->QueryProp(P_GUILD)))
00042     return 0;
00043   if (GuildName()!=plg) {
00044     _notify_fail("Du gehoerst dieser Gilde nicht an!\n");
00045     return 0;
00046   }
00047   return 1;
00048 }

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

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

int LearnSkill ( string  skill  ) 

Definiert in Zeile 342 der Datei gilden_ob.c.

Benutzt _notify_fail(), check_restrictions(), GetFValueO(), InitialSkillAbility(), IsGuildMember(), MAX_ABILITY, pl, QuerySkill(), SI_DIFFICULTY, SI_SKILLRESTR_LEARN und SkillListe().

Wird benutzt von LongRangeSkill() und ShortRangeSkill().

00342                          {
00343   mapping ski,restr;
00344   object pl;
00345   string res;
00346   mixed learn_initfunc;
00347   int abil,diff;
00348 
00349   if (!IsGuildMember(pl=this_player())) {
00350     _notify_fail("Du gehoerst dieser Gilde nicht an!\n");
00351     return 0;
00352   }
00353   _notify_fail("Was moechtest Du lernen?\n");
00354   if (!skill)
00355     return SkillListe(0x02);
00356   skill=capitalize(skill);
00357   if (!(ski=QuerySkill(skill)))
00358     return 0;
00359   if (pl->QuerySkill(skill)) {
00360     _notify_fail("Du hast diese Faehigkeit doch schon!\n");
00361     return 0;
00362   }
00363   if ((restr=ski[SI_SKILLRESTR_LEARN])
00364       && (res=check_restrictions(pl,restr))) {
00365     printf("Du kannst diese Faehigkeit noch nicht erwerben.\nGrund: %s",res);
00366     return 1;
00367   }
00368   abil=InitialSkillAbility(ski,pl);
00369   if (!abil) abil=1;
00370   if (abil>MAX_ABILITY) abil=MAX_ABILITY;
00371   if (abil<-MAX_ABILITY) abil=-MAX_ABILITY;
00372   write("Du erwirbst eine neue Faehigkeit.\n");
00373   diff=GetFValueO(SI_DIFFICULTY,ski,pl);
00374   pl->ModifySkill(skill,abil,diff);
00375   return 1;
00376 }

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

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

varargs int LearnSpell ( string  spell,
object  pl 
)

Definiert in Zeile 302 der Datei gilden_ob.c.

Benutzt _notify_fail(), check_restrictions(), GetFValueO(), InitialSkillAbility(), IsGuildMember(), QuerySpell(), SI_DIFFICULTY, SI_SKILLRESTR_LEARN, SI_SPELLCOST und SkillListe().

00302                                    {
00303   mapping ski,restr;
00304   string res;
00305   mixed learn_initfunc;
00306   int abil,diff;
00307 
00308   // Wenn kein pl gesetzt ist, nehmen wir this_player(), das ist der
00309   // Normalfall.
00310   if (!pl)
00311                   pl=this_player();
00312   if (!IsGuildMember(pl)) {
00313     _notify_fail("Du gehoerst dieser Gilde nicht an!\n");
00314     return 0;
00315   }
00316   _notify_fail("Was moechtest Du lernen?\n");
00317   if (!spell)
00318     return SkillListe(0x01);
00319   spell=lower_case(spell);
00320   if (!(ski=QuerySpell(spell)))
00321     return 0;
00322   if (pl->QuerySkill(spell)) {
00323     _notify_fail("Du kannst diesen Spruch doch schon!\n");
00324     return 0;
00325   }
00326   if ((restr=ski[SI_SKILLRESTR_LEARN])
00327       && (res=check_restrictions(pl,restr))) {
00328     printf("Du kannst diesen Spruch noch nicht lernen.\nGrund: %s",res);
00329     return 1;
00330   }
00331   abil=InitialSkillAbility(ski,pl);
00332   if (abil<1) abil=1;
00333   if (abil>7500) abil=7500;
00334   write("Du lernst einen neuen Zauberspruch.\n");
00335   if (!(diff=GetFValueO(SI_DIFFICULTY,ski,pl)))
00336     diff=GetFValueO(SI_SPELLCOST,ski,pl);
00337   pl->ModifySkill(spell,abil,diff);
00338   return 1;
00339 }

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

void NotifyGiveQuest ( object  pl,
string  key 
)

Definiert in Zeile 410 der Datei gilden_ob.c.

00410 {  }

mapping QuerySkill ( string  skill  ) 

Definiert in Zeile 206 der Datei gilden_ob.c.

Benutzt F_VALUE, P_GUILD_SKILLS und Query().

Wird benutzt von CannotSee(), FinalSetup(), LearnSkill(), QuerySpell() und UseSpell().

00206                                  {
00207   mapping ski;
00208 
00209   // Abfrage per Query(), da vielleicht nur ein Skill gewuenscht
00210   // wird und daher die komplette Kopie des Spellmappings in der Query-Methode
00211   // unnoetig ist.
00212   if (!skill
00213       || !(ski=Query(P_GUILD_SKILLS, F_VALUE))
00214       || !(ski=ski[skill])) // Gildenspezifische Skilleigenschaften
00215     return 0;
00216   // hier aber dann natuerlich eine Kopie erstellen. ;-)
00217   return(deep_copy(ski));
00218 }

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

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

mapping QuerySpell ( string  spell  ) 

Definiert in Zeile 220 der Datei gilden_ob.c.

Benutzt AddSkillMappings(), QuerySkill(), SI_SKILLFUNC, SI_SPELLBOOK, spellbook und SPELLBOOK_DIR.

Wird benutzt von LearnSpell() und UseSpell().

00220                                  {
00221   mapping ski,ski2;
00222   string spellbook,sfunc;
00223 
00224   // QuerySkill() hier und QuerySpell() im Spellbook liefern Kopien der
00225   // Skillmappings zurueck, Kopieren hier daher unnoetig.
00226   if (!spell
00227       || !(ski=QuerySkill(spell))
00228       || !(spellbook=ski[SI_SPELLBOOK]))
00229     return 0;
00230   if (!(sfunc=ski[SI_SKILLFUNC]))
00231     sfunc=spell;
00232   spellbook=SPELLBOOK_DIR+spellbook;
00233   if (!(ski2=(mapping)(spellbook->QuerySpell(sfunc))))
00234     return 0;
00235   return AddSkillMappings(ski2,ski); // Reihenfolge wichtig!
00236   // Die Gilde kann Spelleigenschaften neu definieren!
00237 }

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

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

int SkillListe ( int  what  ) 

Definiert in Zeile 265 der Datei gilden_ob.c.

Benutzt i, info, P_GUILD_SKILLS, QueryProp(), SI_SKILLINFO, skills und log_buffer_s::sp.

Wird benutzt von LearnSkill() und LearnSpell().

00265                      {
00266   mapping skills;
00267   string *ind,*info,*info2,s,sp;
00268   int i,res;
00269   
00270   if (!mappingp(skills=QueryProp(P_GUILD_SKILLS))) return 0;
00271   if (!sizeof(ind=m_indices(skills))) return 0;
00272   info=({});info2=({});
00273   for (i=sizeof(ind)-1;i>=0;i--) {
00274     if (stringp(s=skills[sp=ind[i]][SI_SKILLINFO]))
00275       s=sprintf("%-20s (%s)",sp,s);
00276     else
00277       s=sp;
00278     if (capitalize(ind[i][0..0])!=ind[i][0..0])
00279       // Spells werden klein geschrieben, Skills gross
00280       info+=({s});
00281     else
00282       info2+=({s});
00283   }
00284   info=sort_array(info,#'>);info2=sort_array(info2,#'>);
00285   res=0;
00286   if ((what & 0x01) && (i=sizeof(info))) {
00287     write("Du kannst versuchen, folgende Zaubersprueche zu lernen:\n");
00288     for (--i;i>=0;i--)
00289       printf("   %s\n",capitalize(info[i]));
00290     res=1;
00291   }
00292   if ((what & 0x02) && (i=sizeof(info2))) {
00293     write("Du kannst versuchen, folgende Faehigkeiten zu erwerben:\n");
00294     for (--i;i>=0;i--)
00295       printf("   %s\n",capitalize(info2[i]));
00296     res=1;
00297   }
00298   return res;
00299 }

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

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

int try_advance (  ) 

Definiert in Zeile 107 der Datei gilden_ob.c.

Benutzt can_advance(), do_advance() und IsGuildMember().

Wird benutzt von advance() und beitreten().

00107                   {
00108   if (can_advance()) {
00109     if (IsGuildMember(this_player()))
00110       do_advance();
00111     return 1;
00112   }
00113   return 0;
00114 }

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

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

varargs int UseSpell ( object  caster,
string  spell,
mapping  sinfo 
)

Definiert in Zeile 240 der Datei gilden_ob.c.

Benutzt QuerySkill(), SI_SPELLBOOK, spellbook und SPELLBOOK_DIR.

Wird benutzt von heart_beat().

00240                                                      {
00241   mapping ski;
00242   string spellbook;
00243 
00244   if (!caster
00245       || !spell
00246       || !(ski=QuerySkill(spell)) // Existiert dieser Spell in dieser Gilde?
00247       || !(spellbook=ski[SI_SPELLBOOK])) // Spellbook muss bekannt sein
00248     return 0;
00249   if (sinfo)
00250     ski+=sinfo;
00251   spellbook=SPELLBOOK_DIR+spellbook;
00252   // printf("%O %O %O %O\n",spellbook,caster,spell,ski);
00253   return (int)spellbook->UseSpell(caster,spell,ski);
00254 }

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

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


Variablen-Dokumentation

inherit std restriction_checker

Definiert in Zeile 13 der Datei gilden_ob.c.

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