#include <properties.h>#include <attributes.h>#include <new_skills.h>
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 |
| 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 }

| 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 }


| 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 }


| 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 }

| 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 }

| 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 }

| 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 }


| 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 }


| 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 }

| 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 }


| 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 }

| 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 }

| 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 }


| 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 }


| 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 }


| 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 }

| void NotifyGiveQuest | ( | object | pl, | |
| string | key | |||
| ) |
Definiert in Zeile 410 der Datei gilden_ob.c.
| 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 }


| 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 }


| 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 }


| 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 }


| 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 }


| inherit std restriction_checker |
Definiert in Zeile 13 der Datei gilden_ob.c.
1.6.3