#include <combat.h>#include <new_skills.h>#include <properties.h>#include <break_string.h>#include <player/base.h>
gehe zum Quellcode dieser Datei
Makrodefinitionen | |
| #define | NEED_PROTOTYPES |
Funktionen | |
| protected void | create () |
| public mapping | GetDeactivatedSkills () |
| public int | is_deactivated_skill (string sname, string guild) |
| private void | set_weapon_skills () |
| protected void | InitSkills () |
| private void | FixSkillV0 (string skillname, mixed sinfo) |
| protected void | FixSkills () |
| protected mapping | ShortRangeSkill (object me, string sname, mapping sinfo) |
| protected mapping | LongRangeSkill (object me, string sname, mapping sinfo, int dam) |
| protected mapping | StdSkill_Fight_axe (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Fight_club (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Fight_knife (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Fight_spear (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Fight_sword (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Fight_whip (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Fight_staff (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Shoot_arrow (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Shoot_bolt (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Shoot_dart (object me, string sname, mapping sinfo) |
| protected mapping | StdSkill_Shoot_stone (object me, string sname, mapping sinfo) |
| protected string * | _query_localcmds () |
| public varargs int | SetSpellFatigue (int duration, string key) |
| Speichert eine Spellfatigue von <duration> Sekunden fuer <key>. | |
| public int | enable_spell_fatigue_compat (string cmd) |
| Befehlsfunktion fuer Spieler um den Spellfatigue-Kompatibilitaetsmodus umzuschalten. | |
| protected void | heart_beat () |
| Speichert die Zeit des letztes Heartbeats. | |
Variablen | |
| inherit std living | skills |
| nosave mapping | deactivated_skills = ([]) |
| int | spell_fatigue_compat_mode |
| protected string* _query_localcmds | ( | ) |
| protected void create | ( | ) |
Definiert in Zeile 39 der Datei skills.c.
Benutzt create(), deactivated_skills, dtime(), F_MODE_AD, F_MODE_AS, guild, GUILDMASTER, log_file, P_GUILD_DEACTIVATE_SKILLS, P_NEXT_SPELL_TIME, P_SKILLSVERSION, P_VALID_GUILDS, SAVE, SECURED und Set().
00040 { 00041 mapping act; 00042 00043 ::create(); 00044 00045 // Wir holen die Gilden aus dem Gildenmaster 00046 foreach(string guild: 00047 (string *)call_other(GUILDMASTER,"QueryProp",P_VALID_GUILDS)) 00048 { 00049 if(catch(act=call_other("/gilden/"+guild,"QueryProp", 00050 P_GUILD_DEACTIVATE_SKILLS); publish )) 00051 log_file("WEAPON_SKILLS", sprintf ("%s: Gilde nicht ladbar: " 00052 +"TP: %O, TI: %O, PO: %O, Gilde: %s\n", dtime(time()), 00053 this_player(), this_interactive(), previous_object(), guild)); 00054 else if (act) // wenn act, ins Mapping aufnehmen. 00055 deactivated_skills+=([guild:act]); 00056 } 00057 // keine echte Prop mehr, Save-Modus unnoetig. 00058 Set(P_NEXT_SPELL_TIME,SAVE,F_MODE_AD); 00059 00060 Set(P_SKILLSVERSION, SAVE|SECURED, F_MODE_AS); 00061 }

| public int enable_spell_fatigue_compat | ( | string | cmd | ) |
Befehlsfunktion fuer Spieler um den Spellfatigue-Kompatibilitaetsmodus umzuschalten.
Definiert in Zeile 418 der Datei skills.c.
Benutzt break_string(), BS_LEAVE_MY_LFS, notify_fail(), P_LAST_COMBAT_TIME, QueryProp() und spell_fatigue_compat_mode.
00418 { 00419 if (QueryProp(P_LAST_COMBAT_TIME) + 600 > time()) { 00420 write(break_string( 00421 "Im Kampf oder kurz nach einem Kampf kannst Du nicht zwischen " 00422 "alter und neuer Spruchermuedung umschalten.\n" 00423 "Momentan benutzt Du die " 00424 + (spell_fatigue_compat_mode ? "alte (ungenauere)" : "neue (normale)") 00425 + " Spruchermuedung.",78,0,BS_LEAVE_MY_LFS)); 00426 return 1; 00427 } 00428 00429 if (cmd=="alt") { 00430 spell_fatigue_compat_mode=time(); 00431 write(break_string( 00432 "Alte Spruchermuedung wurde eingeschaltet. Alle Ermuedungspausen " 00433 "zwischen Spruechen werden auf Vielfache von 2s aufgerundet und " 00434 "beginnen in der Regel am Anfang Deiner Kampfrunde.")); 00435 return 1; 00436 } 00437 else if (cmd=="neu" || cmd=="normal") { 00438 spell_fatigue_compat_mode=0; 00439 write(break_string( 00440 "Normale Spruchermuedung wurde eingeschaltet. Alle Ermuedungspausen " 00441 "zwischen Spruechen werden sekundengenau berechnet.")); 00442 return 1; 00443 } 00444 00445 notify_fail(break_string( 00446 "Moechtest Du die alte oder die neue Spruchermuedung?\n" 00447 "Momentan benutzt Du die " 00448 + (spell_fatigue_compat_mode ? "alte (ungenauere)" : "neue (normale)") 00449 + " Spruchermuedung.",78,0,BS_LEAVE_MY_LFS)); 00450 return 0; 00451 }

| protected void FixSkills | ( | ) |
Definiert in Zeile 143 der Datei skills.c.
00143 { 00144 /* 00145 // nur bei genug rechenzeit loslegen 00146 if (get_eval_cost() < 1300000) { 00147 call_out(#'FixSkills, 2); 00148 return; 00149 } 00150 // wenn gar keine Skills da (?): InitSkills() rufen. 00151 mapping allskills = Query(P_NEWSKILLS, F_VALUE); 00152 if (!mappingp(allskills) || !sizeof(allskills)) { 00153 InitSkills(); 00154 return; 00155 } 00156 // bei Version 0 00157 if (QueryProp(P_SKILLSVERSION) == 0) { 00158 foreach(string gilde, mapping skills: allskills) { 00159 walk_mapping(skills, #'FixSkillV0); 00160 } 00161 // Waffenskills aktivieren 00162 set_weapon_skills(); 00163 // Speicherflag fuer die Versionsprop muss noch gesetzt werden. 00164 Set(P_SKILLSVERSION, SAVE|SECURED, F_MODE_AS); 00165 // Versionszaehlen um eins auf 1 erhoehen. 00166 SetProp(P_SKILLSVERSION, 1); 00167 } 00168 00169 // Falls noch nicht auf der aktuellen Version angekommen, neuer callout 00170 if (QueryProp(P_SKILLSVERSION) != CURRENT_SKILL_VERSION) 00171 call_out(#'FixSkills, 2); 00172 */ 00173 }
| private void FixSkillV0 | ( | string | skillname, | |
| mixed | sinfo | |||
| ) |
Definiert in Zeile 118 der Datei skills.c.
Benutzt SI_SKILLABILITY, SI_SPELL, SI_SPELLBOOK und SP_NAME.
00118 { 00119 // alte Skills auf mapping normieren 00120 if (intp(sinfo)) { 00121 sinfo = ([SI_SKILLABILITY: sinfo ]); 00122 } 00123 // wenn ein Spellbook vermerkt ist, ist es wohl ein Spell, sonst wird von 00124 // Skill ausgegangen. Bei Skills: hier Abbruch 00125 if (!sinfo[SI_SPELLBOOK]) 00126 return; 00127 00128 // Fuer Spells ggf. SI_SPELL erstellen 00129 if (!mappingp(sinfo[SI_SPELL])) 00130 sinfo[SI_SPELL] = ([]); 00131 // SP_NAME vermerken 00132 if (!sinfo[SP_NAME] && !sinfo[SI_SPELL][SP_NAME]) { 00133 sinfo[SP_NAME] = skillname; 00134 sinfo[SI_SPELL][SP_NAME] = skillname; 00135 } 00136 else if (sinfo[SP_NAME] && !sinfo[SI_SPELL][SP_NAME]) 00137 sinfo[SI_SPELL][SP_NAME] = sinfo[SP_NAME]; 00138 else if (!sinfo[SP_NAME] && sinfo[SI_SPELL][SP_NAME]) 00139 sinfo[SP_NAME] = sinfo[SI_SPELL][SP_NAME]; 00140 }
| public mapping GetDeactivatedSkills | ( | ) |
Definiert in Zeile 65 der Datei skills.c.
Benutzt deactivated_skills.
00066 { 00067 return copy(deactivated_skills); 00068 }
| protected void heart_beat | ( | ) |
Speichert die Zeit des letztes Heartbeats.
Definiert in Zeile 455 der Datei skills.c.
Benutzt spell_fatigue_compat_mode.
00455 { 00456 if (spell_fatigue_compat_mode) 00457 spell_fatigue_compat_mode = time(); 00458 }
| protected void InitSkills | ( | ) |
Definiert in Zeile 103 der Datei skills.c.
Benutzt CURRENT_SKILL_VERSION, F_MODE_AS, F_VALUE, P_NEWSKILLS, P_SKILLSVERSION, Query(), SAVE, SECURED, Set(), set_weapon_skills() und SetProp().
00103 { 00104 mapping ski; 00105 // schonmal initialisiert? 00106 if (mappingp(ski=Query(P_NEWSKILLS, F_VALUE)) && sizeof(ski)) 00107 return; 00108 00109 // allg. Waffenskills aktivieren 00110 set_weapon_skills(); 00111 00112 // Version setzen 00113 SetProp(P_SKILLSVERSION, CURRENT_SKILL_VERSION); 00114 Set(P_SKILLSVERSION, SAVE|SECURED, F_MODE_AS); 00115 }

| public int is_deactivated_skill | ( | string | sname, | |
| string | guild | |||
| ) |
Definiert in Zeile 71 der Datei skills.c.
Benutzt deactivated_skills.
00072 { 00073 if (deactivated_skills[guild]) 00074 return deactivated_skills[guild][sname]; 00075 return 0; 00076 }
| protected mapping LongRangeSkill | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo, | |||
| int | dam | |||
| ) |
Definiert in Zeile 290 der Datei skills.c.
Benutzt LearnSkill(), MAX_ABILITY, OFFSET, P_SHOOTING_WC, P_WEAPON, QueryProp(), QuerySkillAttribute(), SA_DAMAGE, SI_SKILLABILITY und SI_SKILLDAMAGE.
Wird benutzt von StdSkill_Shoot_arrow(), StdSkill_Shoot_bolt(), StdSkill_Shoot_dart() und StdSkill_Shoot_stone().
00291 { int abil,val; 00292 00293 if (!mappingp(sinfo) || !dam || !objectp(sinfo[P_WEAPON]) || 00294 (sinfo[P_WEAPON]->QueryProp(P_SHOOTING_WC))<5) 00295 return 0; 00296 00297 abil=sinfo[SI_SKILLABILITY]+OFFSET(sinfo[SI_SKILLABILITY]); 00298 val=dam*abil/MAX_ABILITY; 00299 val=val/2+random(val/2+1); 00300 val=(val*QuerySkillAttribute(SA_DAMAGE))/100; 00301 sinfo[SI_SKILLDAMAGE]+=val; 00302 00303 if (random(MAX_ABILITY+1)>sinfo[SI_SKILLABILITY] && random(50)==42) 00304 LearnSkill(sname, 1, 150); 00305 00306 return sinfo; 00307 }


| private void set_weapon_skills | ( | ) |
Definiert in Zeile 83 der Datei skills.c.
Benutzt FIGHT, ModifySkill(), QuerySkillAbility(), SI_SKILLABILITY, WT_AXE, WT_CLUB, WT_KNIFE, WT_SPEAR, WT_STAFF, WT_SWORD und WT_WHIP.
Wird benutzt von InitSkills().
00083 { 00084 00085 if (QuerySkillAbility(FIGHT(WT_SWORD))<=0) 00086 ModifySkill(FIGHT(WT_SWORD),([SI_SKILLABILITY:0]),150,"ANY"); 00087 if (QuerySkillAbility(FIGHT(WT_AXE))<=0) 00088 ModifySkill(FIGHT(WT_AXE),([SI_SKILLABILITY:0]),150,"ANY"); 00089 if (QuerySkillAbility(FIGHT(WT_SPEAR))<=0) 00090 ModifySkill(FIGHT(WT_SPEAR),([SI_SKILLABILITY:0]),150,"ANY"); 00091 if (QuerySkillAbility(FIGHT(WT_WHIP))<=0) 00092 ModifySkill(FIGHT(WT_WHIP),([SI_SKILLABILITY:0]),150,"ANY"); 00093 if (QuerySkillAbility(FIGHT(WT_KNIFE))<=0) 00094 ModifySkill(FIGHT(WT_KNIFE),([SI_SKILLABILITY:0]),150,"ANY"); 00095 if (QuerySkillAbility(FIGHT(WT_CLUB))<=0) 00096 ModifySkill(FIGHT(WT_CLUB),([SI_SKILLABILITY:0]),150,"ANY"); 00097 if (QuerySkillAbility(FIGHT(WT_STAFF))<=0) 00098 ModifySkill(FIGHT(WT_STAFF),([SI_SKILLABILITY:0]),150,"ANY"); 00099 }


| public varargs int SetSpellFatigue | ( | int | duration, | |
| string | key | |||
| ) |
Speichert eine Spellfatigue von <duration> Sekunden fuer <key>.
Ist hier nur fuer den Spellfatigue-Compat-mode. <key> darf 0 sein und bezeichnet das globale Spellfatigue. Rueckgabewert: Ablaufzeit der gesetzten Sperre -1, wenn noch eine nicht-abgelaufene Sperre auf dem <key> lag. 0, wenn duration 0 ist.
Definiert in Zeile 390 der Datei skills.c.
Benutzt SetSpellFatigue() und spell_fatigue_compat_mode.
00390 { 00391 00392 // 0 sollte nie eine Sperre bewirken, auch nicht im compat mode. 00393 if (!duration) return 0; 00394 00395 if (spell_fatigue_compat_mode) { 00396 // Spell-Fatigues auf HBs synchronisieren (2s-Alarmzeit-Emulation). 00397 // Aufrunden auf ganzzahlige Vielfache von __HEART_BEAT_INTERVAL__ 00398 if (duration % __HEART_BEAT_INTERVAL__) 00399 ++duration; 00400 00401 // Startpunkt des Delay soll Beginn der aktuellen Kampfrunde (HB-Zyklus) 00402 // sein, ggf. um max. eine Sekunde zurueckdatieren. 00403 // (spell_fatigue_compat_mode hat die Zeit des letzten HB-Aufrufs) 00404 // Falls durch irgendein Problem (z.B. sehr hohe Last), der letzte HB 00405 // laenger als 1s zurueckliegt, funktioniert das natuerlich nicht, aber 00406 // bei fatigue+=spell_fatigue_compat_mode kann der Spieler zuviel Zeit 00407 // einsparen. 00408 if (time() > spell_fatigue_compat_mode) 00409 --duration; //1s zurueckdatieren 00410 } 00411 00412 return ::SetSpellFatigue(duration, key); 00413 }

| protected mapping ShortRangeSkill | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 177 der Datei skills.c.
Benutzt A_DEX, A_STR, dtime(), find_player(), LearnSkill(), log_file, MAX_ABILITY, P_WC, P_WEAPON, P_WEAPON_TEACHER, P_WEAPON_TYPE, P_XP, QueryAttribute(), QueryProp(), SI_ENEMY, SI_SKILLABILITY, SI_SKILLDAMAGE, WT_AXE, WT_CLUB, WT_KNIFE, WT_SPEAR, WT_STAFF, WT_SWORD und WT_WHIP.
Wird benutzt von StdSkill_Fight_axe(), StdSkill_Fight_club(), StdSkill_Fight_knife(), StdSkill_Fight_spear(), StdSkill_Fight_staff(), StdSkill_Fight_sword() und StdSkill_Fight_whip().
00178 { 00179 int val, w; 00180 object enemy; 00181 00182 if (!mappingp(sinfo) || !objectp(sinfo[P_WEAPON])) 00183 return 0; 00184 00185 w = ([WT_KNIFE : 8, 00186 WT_SWORD : 5, 00187 WT_AXE : 4, 00188 WT_SPEAR : 6, 00189 WT_CLUB : 1, 00190 WT_WHIP : 9, 00191 WT_STAFF : 7])[sinfo[P_WEAPON]->QueryProp(P_WEAPON_TYPE)]; 00192 00193 00194 val = sinfo[SI_SKILLABILITY]*(sinfo[P_WEAPON]->QueryProp(P_WC)* 00195 (w*QueryAttribute(A_DEX)+ 00196 (10-w)*QueryAttribute(A_STR))/800) 00197 /MAX_ABILITY; 00198 00199 if (val > 75) { 00200 log_file("WEAPON_SKILLS", sprintf("%s: Zu hoher Schaden von: " 00201 +"TO: %O, TI: %O, PO: %O, val: %d, A_DEX: %d, A_STR: %d, " 00202 +"P_WEAPON: %O, P_WC: %d\n", dtime(time()), 00203 this_object(), this_interactive(), 00204 previous_object(), val, 00205 QueryAttribute(A_DEX), 00206 QueryAttribute(A_STR), sinfo[P_WEAPON], 00207 sinfo[P_WEAPON]->QueryProp(P_WC))); 00208 val = 75; 00209 } 00210 00211 /* 00212 Der zusätzliche Schaden der allgemeinen Waffenskills berechnet 00213 sich wie folgt: 00214 00215 sinfo[SI_SKILLABILITY)* (P_WC * ( X ) / 800) / MAX_ABILITY 00216 00217 Dabei beruecksichtigt X je nach Waffentyp in unterschiedlicher 00218 Gewichtung die Werte fuer Geschicklichkeit und Staerke. 00219 00220 X == 00221 00222 Messer : 8*A_DEX + 2*A_STR 00223 Schwert : 5*A_DEX + 5*A_STR 00224 Axt : 4*A_DEX + 6*A_STR 00225 Speer : 6*A_DEX + 4*A_STR 00226 Keule : 1*A_DEX + 9*A_STR 00227 Peitsche : 9*A_DEX + 1*A_STR 00228 */ 00229 00230 sinfo[SI_SKILLDAMAGE]+=val; 00231 00232 00233 /* Lernen: Wird immer schwieriger, nur bei jedem 20. Schlag im Schnitt, 00234 * und nur dann, wenn der Gegner auch XP gibt. */ 00235 if (random(MAX_ABILITY+1)>sinfo[SI_SKILLABILITY] && !random(20)) 00236 { 00237 enemy=sinfo[SI_ENEMY]; 00238 if (objectp(enemy) && (enemy->QueryProp(P_XP)>0)) 00239 { 00240 object ausbilder; 00241 // log_file("humni/log_wurm","Haut: %s und zwar %s, mit xp %d\n",geteuid(this_object()),to_string(enemy),enemy->QueryProp(P_XP)); 00242 LearnSkill(sname, random(5), 150); 00243 // Gibt es einen Ausbilder? 00244 if (QueryProp(P_WEAPON_TEACHER) && 00245 ausbilder=find_player(QueryProp(P_WEAPON_TEACHER))) 00246 { 00247 // Ist der Ausbilder anwesend? 00248 if (present(ausbilder,environment())) 00249 { 00250 // Ausbilder und Azubi muessen dieselbe Waffe haben. 00251 //string wt_aus,wt_azu; 00252 object waf_aus,waf_azu; 00253 00254 waf_azu=QueryProp(P_WEAPON); 00255 waf_aus=call_other(ausbilder,"QueryProp",P_WEAPON); 00256 00257 //wt_azu=call_other(waf_azu,"QueryProp",P_WEAPON_TYPE); 00258 //wt_aus=call_other(waf_aus,"QueryProp",P_WEAPON_TYPE); 00259 //if (wt_azu==wt_aus) 00260 if (objectp(waf_aus) && objectp(waf_azu) && 00261 (string)waf_aus->QueryProp(P_WEAPON_TYPE) 00262 == (string)waf_azu->QueryProp(P_WEAPON_TYPE)) 00263 { 00264 // Bonus von bis zu 5 Punkten 00265 //log_file("humni/log_azubi", 00266 // sprintf("Azubi %O und Ausbilder %O : Waffentypen %s und %s, gelernt\n",this_object(), 00267 // ausbilder, wt_azu, wt_aus)); 00268 LearnSkill(sname,random(6),150); 00269 } 00270 } 00271 } 00272 } 00273 } 00274 00275 /* 00276 Die Schwierigkeit liegt bei 150, so dass 00277 ein Lvl. 1 Spieler maximal 15% Skill 00278 usw... 00279 lernen kann. (Genaue Tabelle in /std/living/skills bei LimitAbility) 00280 */ 00281 00282 return sinfo; 00283 }


| protected mapping StdSkill_Fight_axe | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 313 der Datei skills.c.
Benutzt ShortRangeSkill().
00314 { 00315 return ShortRangeSkill(me, sname, sinfo); 00316 }

| protected mapping StdSkill_Fight_club | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 318 der Datei skills.c.
Benutzt ShortRangeSkill().
00319 { 00320 return ShortRangeSkill(me, sname, sinfo); 00321 }

| protected mapping StdSkill_Fight_knife | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 323 der Datei skills.c.
Benutzt ShortRangeSkill().
00324 { 00325 return ShortRangeSkill(me, sname, sinfo); 00326 }

| protected mapping StdSkill_Fight_spear | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 328 der Datei skills.c.
Benutzt ShortRangeSkill().
00329 { 00330 return ShortRangeSkill(me, sname, sinfo); 00331 }

| protected mapping StdSkill_Fight_staff | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 343 der Datei skills.c.
Benutzt ShortRangeSkill().
00344 { 00345 return ShortRangeSkill(me, sname, sinfo); 00346 }

| protected mapping StdSkill_Fight_sword | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 333 der Datei skills.c.
Benutzt ShortRangeSkill().
00334 { 00335 return ShortRangeSkill(me, sname, sinfo); 00336 }

| protected mapping StdSkill_Fight_whip | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 338 der Datei skills.c.
Benutzt ShortRangeSkill().
00339 { 00340 return ShortRangeSkill(me, sname, sinfo); 00341 }

| protected mapping StdSkill_Shoot_arrow | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 355 der Datei skills.c.
Benutzt LongRangeSkill().
00356 { 00357 return LongRangeSkill(me, sname, sinfo, 40); 00358 }

| protected mapping StdSkill_Shoot_bolt | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 360 der Datei skills.c.
Benutzt LongRangeSkill().
00361 { 00362 return LongRangeSkill(me, sname, sinfo, 40); 00363 }

| protected mapping StdSkill_Shoot_dart | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 365 der Datei skills.c.
Benutzt LongRangeSkill().
00366 { 00367 return LongRangeSkill(me, sname, sinfo, 20); 00368 }

| protected mapping StdSkill_Shoot_stone | ( | object | me, | |
| string | sname, | |||
| mapping | sinfo | |||
| ) |
Definiert in Zeile 370 der Datei skills.c.
Benutzt LongRangeSkill().
00371 { 00372 return LongRangeSkill(me, sname, sinfo, 40); 00373 }

| nosave mapping deactivated_skills = ([]) |
Definiert in Zeile 29 der Datei skills.c.
Wird benutzt von create(), GetDeactivatedSkills() und is_deactivated_skill().
Definiert in Zeile 35 der Datei skills.c.
Wird benutzt von enable_spell_fatigue_compat(), heart_beat() und SetSpellFatigue().
1.6.3