| Gilden |
| ******* |
| |
| Gilden sind dazu da, Spielern besondere Faehigkeiten zu verleihen. Dies |
| koennen Zaubersprueche (Spells) sein, es kann aber auch andere Faehigkeiten |
| (Skills) geben. Als Spell gilt jede Faehigkeit, die ein Spieler mit einem |
| Befehl direkt aufrufen muss. Damit auch andere Gilden die gleichen |
| Zaubersprueche verwenden koennen, muessen die Sprueche in eigenen |
| Spellbooks abgelegt werden. Eine Gilde kann Sprueche aus beliebigen |
| Spellbooks verwenden und diese ggf. leicht modifizieren. |
| |
| Gildenobjekt |
| ============= |
| |
| Eine Gilde muss ein Objekt haben, bei dem der Spieler der Gilde beitreten |
| bzw. austreten und die Faehigkeiten der Gilde erwerben kann. Gewoehnlich |
| ist dies ein Raum, der "/std/gilden_room" inheritet, es kann aber auch ein |
| anderes Objekt sein, fuer diesen Fall ist "/std/gilden_ob" vorgesehen. |
| |
| Die Beitrittsbedingungen fuer die Gilde werden in Form eines |
| Restriction-Mappings in der Property P_GILDEN_RESTRICTIONS |
| abgelegt. |
| |
| Das Spellbook, in dem die Spells der Gilde stehen, muss in |
| P_GUILD_DEFAULT_SPELLBOOK genannt sein. Es wird automatisch |
| "/spellbooks/" vorne an den Namen angefuegt. Die Spells, die aus diesem |
| Spellbook verwendet werden sollen, koennen dann einfach mit |
| AddSpell(name) ausgewaehlt werden. Wenn ein Spruch modifiziert werden |
| soll so kann ein Mapping mit zusaetzlichen Informationen als zweites |
| Argument angegeben werden. In diesem kann man dann auch ein anderes |
| Spellbook als das Default-Spellbook mit ([SI_SPELLBOOK:name]) |
| angeben. In P_GLOBAL_SKILLPROPS kann ein Mapping angegeben |
| werden, das alle Spells und Skills modifiziert. P_GLOBAL_SKILLPROPS |
| und P_GILDEN_DEFAULT_SPELLBOOK muessen uebrigens gesetzt |
| werden bevor mit AddSpell/Skill Spells oder Skills hinzugefuegt werden. |
| |
| Fuer andere Faehigkeiten sind AddSkill und LearnSkill vorgesehen. |
| LearnSkill wird im Gegensatz zu LearnSpell jedoch nicht automatisch vom |
| /std/gilden_room mit "lerne" aufgerufen, weil i.A. diese Faehigkeiten auf |
| andere Art erworben werden, z.B. beim Gildeneintritt oder durch |
| Trainingsstunden. Mit LearnSkill kann man nur solche Faehigkeiten |
| erwerben, die mit AddSkill angefuegt wurden. |
| |
| Skills werden ueblicherweise durch den Aufruf von UseSkill im Spieler |
| verwendet. Wenn der Spieler in einer Gilde ist und eine Funktion unter |
| SI_SKILLFUNC zu finden ist, so wird diese im Gildenobjekt aufgerufen, |
| sonst wird versucht StdSkill_Name im Spieler aufzurufen. Wenn auch das |
| fehlschlaegt wird nur der Wert unter SI_ABILITY zurueckgegeben. |
| |
| Es stehen folgende Funktionen zur Benutzung zur Verfuegung: |
| |
| o QuerySpell(name) |
| Liefert die Informationen zu diesem Spell |
| o QuerySkill(name) |
| Liefert die Informationen zu dieser Faehigkeit |
| o AddSpell(name,info) |
| Spell wird hinzugefuegt |
| o AddSkill(name,info) |
| Faehigkeit wird zugefuegt |
| o LearnSpell(name) |
| Spieler lernt den angegebenen Spell, falls moeglich. Liste der Spells |
| wird ausgegeben, falls keiner angegeben ist. |
| o LearnSkill(name) |
| Spieler erwirbt diese Faehigkeit, falls moeglich. Liste aller |
| Faehigkeiten wird ausgegeben, falls keine angegeben ist. |
| o GildenName() |
| Liefert den Namen dieser Gilde. |
| o InitialSkillAbility(info,spieler) |
| Rechnet den Anfangswert fuer SI_SKILLABILITY aus. |
| o SkillListe(x) |
| Es wird angezeigt, welche Spells/Skills der Spieler lernen kann. |
| Dabei bedeutet x: |
| o 1: Nur Spells anzeigen |
| o 2: Nur Skills anzeigen |
| o 3: Beides anzeigen |
| |
| Von diesen Funktionen stehen in /std/gilden_room automatisch |
| bei_oder_austreten und LearnSpell dem Spieler zur Verfuegung. |
| |
| Spellbook |
| ========== |
| |
| Spellbooks stellen die Spells zur Verfuegung, die Spieler oder Monster |
| verwenden koennen. Alle Spellbooks sollten /std/spellbook inheriten. In der |
| einfachsten Form kann ein Spell wie folgt hinzugefuegt werden: |
| AddSpell(verb,kosten,level) |
| Dabei ist "verb" sowohl der Name des Verbs, mit dem der Spruch |
| aufgerufen werden soll, wie auch der Name der Funktion, die dabei |
| aufgerufen wird. "kosten" sind die Magiepunkte, die fuer den Spruch |
| benoetigt werden und "level" ist der Spielerlevel, der noetig ist, um diesen |
| Spruch zu lernen. |
| |
| In der flexibleren Form werden Spells mit |
| AddSpell(verb,kosten,info) |
| hinzugefuegt. Dabei ist "info" ein Mapping, in dem alle anderen |
| Spell-Informationen stehen. Dabei kann z.B. eine andere Funktion als das |
| Verb als Eintrag |
| SI_SKILLFUNC:name |
| angegeben werden. Wenn zum Lernen eine bestimmte Stufe erforderlich ist |
| so muss |
| SI_SKILLRESTR_LEARN:([P_LEVEL:level]) |
| eingetragen sein. Es sollten alle Werte, von denen ein Spell abhaengt, in dem |
| Mapping eingetragen sein. Dadurch haben Gilden die Moeglichkeit, Spells |
| mit Offsets und Faktoren zu modifizieren. |
| |
| In P_GLOBAL_SKILLPROPS kann ein Mapping stehen, dass bei jedem |
| Spell zum Info addiert wird. Dieses sollte gesetzt werden, bevor die Spells |
| mit AddSpell hinzugefuegt werden. |
| |
| Die Benutzung von Spells laeuft wie folgt ab: |
| |
| o Zuerst wird ueberprueft, ob der Spieler den Spruch verwenden darf. |
| Dazu wird die Funktion CanTrySpell aufgerufen. Diese prueft |
| normalerweise, ob der Spieler kein Geist ist und ob er die |
| Einschraenkungen erfuellt, die als SI_SKILLRESTR_USE |
| angegeben sind. |
| o Als naechstes wird geprueft, ob der Spieler noch genug Magiepunkte |
| hat. Diese stehen im Mapping unter SI_SPELLCOST. |
| o Als letztes wird geprueft, ob der Spieler noch erschoepft ist von |
| seinem letzten Spruch. |
| o Nun wird die eigentliche Funktion des Spells aufgerufen, wenn es die |
| Umgebung zulaesst. Die Funktion muss einen positiven Wert |
| zurueckgeben, wenn der Spruch gelungen ist, und einen negativen, |
| wenn er misslungen ist. Falls der Spruch aus irgend einem Grund |
| nicht anwendbar ist soll 0 zurueckgegeben werden. |
| o Bei Erfolg oder Misserfolg werden die Magiepunkte abgezogen und |
| der Spieler ist fuer die naechste Zeit erschoepft. Die Zeitspanne ist |
| im Mapping unter SI_SPELLFATIGUE zu finden. |
| o Bei Erfolg wird die Funktion "Erfolg" aufgerufen, bei Misserfolg |
| die Funktion "Misserfolg" |
| o Die Funktion "Misserfolg" ruft normalerweise die Funktion "Learn" |
| auf, damit der Spieler aus seinen Fehlern lernt. |
| |
| Die eigentliche Spellfunktion sollte, falls der Spell anwendbar ist, mit |
| SpellSuccess pruefen, ob er erfolgreich ist oder nicht. Dabei gelten Werte |
| groesser Null als Erfolg. In der Spellfunktion sollten, falls moeglich, |
| SkillAttribute des Spielers sowie Faktoren und Offsets beruecksichtigt |
| werden. Fuer beides stehen einfach zu handhabende Funktionen zur |
| Verfuegung. Dies ist zwar etwas mehr Arbeit, dafuer geschehen dann Dinge |
| wie Interaktionen zwischen den Spells fast automatisch. |
| |
| Folgende Funktionen stellt das Standard-Spellbook zur Verfuegung: |
| |
| o QuerySpell(name) |
| Liefert Informations-Mapping zu diesem Spell. |
| o AddSpell(name,kosten,info) |
| Fuegt Spell mit angegebenen Kosten und dem |
| Informations-Mapping ins Spellbook ein. |
| o TryAttackSpell(opfer,schaden,typen,is_spell,caster,info) |
| Versucht den Angriffs-Spruch auf den Gegner anzuwenden. Die |
| mittleren 4 Werte sind die, die auch bei Defend uebergeben werden. |
| Dabei wird die Abwehrfaehigkeit des Gegners gegen Magie und das |
| Skill-Attribut SA_DAMAGE automatisch beruecksichtigt. |
| o TryDefaultAttackSpell(opfer,caster,info,is_spell) |
| Wie TryAttackSpell, nur werden Schaden und Schadenstypen |
| automatisch aus dem Informations-Mapping entnommen. Bei beiden |
| Funktionen sollte als is_spell uebrigens ein String stehen, z.B. |
| "Feuerball", damit es leichter moeglich ist, Monster zu schreiben, die |
| auf diese reagieren. |
| o SpellSuccess(caster,info) |
| Ermittelt, ob der Spell funktioniert oder fehlschlaegt. Dabei wird |
| auch eine evtl. vorhandene Spellcasting-Faehigkeit (SK_CASTING) |
| beruecksichtigt. Ohne Spellcasting-Faehigkeit liegt das Ergebnis |
| zwischen -MAX_ABILITY und +MAX_ABILITY, mit dieser |
| Faehigkeit koennen die Werte zwischen -2*MAX_ABILITY und |
| +2*MAX_ABILITY liegen. Werte kleiner oder gleich Null sollen |
| als Fehlschlag interpretiert werden. |
| Wer will, kann Werte ueber +MAX_ABILITY als besonders gut |
| gelungene Spells interpretieren und bei Werten unter |
| -MAX_ABILITY unangenehme Wirkungen ausloesen, z.B. kann |
| sich der Spell dann gegen den Spieler richten... |
| Wenn ein Spieler die Spellcasting-Faehigkeit hat und ein Spruch |
| besonders gut gelingt, so freut er sich und verbessert diese |
| Faehigkeit. |
| o CanTrySpell(caster,info) |
| Ermittelt, ob der Spieler den Spruch anwenden darf. Normalerweise |
| ist diese der Fall, wenn er kein Geist ist und die Bedingungen |
| erfuellt, die unter SI_SKILLRESTR_USE im Mapping eingetragen |
| sind. |
| o Learn(caster,spell,info) |
| Diese Funktion wird normalerweise bei Misserfolg aufgerufen, |
| damit der Spieler aus seinen Fehlern lernt. Dabei wird |
| ueblicherweise die Intelligenz des Spielers beruecksichtigt. Fuer je 2 |
| Stufen A_INT bekommt der Spieler SI_SKILLLEARN hinzu. |
| |
| Moechte man ein anderes Attribut zum lernen verwenden kann man dies |
| in Form eines Mappings in SI_LEARN_ATTRIBUTE tun. |
| |
| SI_LEARN_ATTRIBUTE:([A_STR:1]) macht das Lernen rein staerkeabhaengig, |
| SI_LEARN_ATTRIBUTE:([A_STR:1,A_INT:2]) bildet den gewichteten Mittelwert |
| von STR und zweifacher INT. |
| |
| o Erfolg(caster,spell,info) |
| Diese Funktion wird bei Erfolg aufgerufen. |
| o Misserfolg (caster,spell,info) |
| Diese Funktion wird bei Misserfolg aufgerufen. |
| o FindVictim(wen,spieler,msg) |
| "wen" wird in der Umgebung des Spielers gesucht. Falls diese |
| Variable Null ist wird zufaellig ein Feind ausgewaehlt. Falls |
| niemand gefunden wird, so wird "msg" ausgegeben. |
| o FindLivingVictim(wen,spieler,msg) |
| Wie FindVictim, nur wird zusaetzlich ueberprueft, ob es ein |
| Lebewesen ist. |
| o FindEnemyVictim(wen,spieler,msg) |
| Wie FindLivingVictim, nur der Spieler selbst wird ausgenommen |
| und wenn es vorher noch kein Feind war, so wird Kill aufgerufen |
| damit es hinterher garantiert einer ist. |
| o FindGroup(spieler,wen) |
| Bei Spielern findet die Funktion alle Monster im Raum, wenn "wen" |
| negativ ist, alle Spieler wenn "wen" positiv ist und alle Lebewesen |
| wenn "wen" Null ist. Bei Monstern ist es genau umgekehrt. Es sollte |
| jedoch FindGroupP mit 100% verwendet werden. |
| o FindGroupN(spieler,wen,n) |
| Wie FindGroup, jedoch maximal n Personen. Das Skill-Attribut |
| SA_EXTENSION wird automatisch beruecksichtigt. |
| o FindGroupP(spieler,wen,prozent) |
| Wie FindGroup, jedoch jede Person mit der angegebenen |
| Wahrscheinlichkeit. Das Skill-Attribut SA_EXTENSION wird |
| automatisch beruecksichtigt. |
| |
| Neue Funktionen im Living |
| ========================== |
| |
| o QuerySkillAttribute(name) |
| Hiermit kann das Skill-Attribut mit dem angegebenen Namen |
| abgefragt werden. |
| o SetSkillAttribute(caster,name,wert,dauer,func) |
| Hiermit kann das angegebene Skill-Attribut vom caster fuer die |
| angegebene Dauer auf einen Wert gesetzt werden. Es kann eine |
| Funktion angegeben werden, die den Wert statt dessen liefern soll. |
| o QuerySkill(name) |
| Dies liefert die spielerspezifischen Skill-Informationen. |
| o QuerySkillAbility(name) |
| Dies liefert von den Skill-Informationen nur SI_ABILITY. |
| o ModifySkill(name,info,diff) |
| Modifiziert die Skill-Informationen. Wenn "info" ein Mapping ist, |
| so wird es zu dem alten Mapping "addiert" (also die angegebenen |
| Werte geaendert), wenn nur ein Wert angegeben ist, wird |
| angenommen dass es sich dabei um SI_ABILITY handelt. |
| o LearnSkill(name,add,diff) |
| Addiert den angegebenen Wert zu SI_ABILITY. Dabei ist "diff" der |
| Schwierigkeitsgrad von diesem Spell/Skill. Durch den |
| Schwierigkeitsgrad SI_ABILITY abhaengig vom Level begrenzt. |
| o UseSpell(arg,spell) |
| Das Lebewesen benutzt den Spell mit den angegebenen Argumenten. |
| Wenn kein Spell angegeben ist, so wird query_verb() verwendet. |
| o UseSkill(skill,arg) |
| Das Lebewesen benutzt die Faehigkeit. |
| |
| Neue Properties/Funktionen in Living/Combat |
| ============================================ |
| |
| Einige Sprueche erfordern es, das Verhalten bei Attack und Defend ziemlich |
| weitreichend zu aendern. Dafuer wurden folgende Properties und |
| Funktionen eingebaut: |
| |
| o P_TMP_ATTACK_HOOK |
| Hier kann ein Array der Form ({Endzeitpunkt,Objekt,Funktion}) |
| stehen. Solange der Endzeitpunkt noch nicht ueberschritten wurde |
| und das angegebene Objekt existiert, wird anstelle von Attack die |
| Funktion in dem Objekt aufgerufen. Wenn die Funktion 0 liefert |
| wird der Rest von Attack nicht mehr ausgefuehrt. |
| o P_TMP_DEFEND_HOOK |
| Wie P_ATTACK_HOOK, nur mit Defend. Damit sind z.B. |
| Sprueche moeglich, die fuer kurze Zeit eine magische Schutzhuelle |
| erschaffen. Wenn die Funktion 0 liefert wird der Rest von Defend |
| nicht mehr ausgefuehrt. Wenn es ein Array der Form |
| ({damage,dt,is_spell}) ergibt wird es wie bei DefendOther |
| interpretiert. |
| o P_DEFENDERS |
| Liste von Lebewesen, die mit InformDefend(enemy) informiert |
| werden sollen, sobald ein neuer Feind hinzukommt. Bei einem |
| zufaellig ausgewaehltem Lebewesen aus dieser Liste wird ausserdem |
| DefendOther mit den Argumenten von Defend aufgerufen. |
| o AddDefender(friend) |
| Fuegt Lebewesen in P_DEFENDERS ein, wenn es noch nicht in der |
| Liste ist. |
| o InformDefend(enemy) |
| Siehe oben. |
| o DefendOther(dam,dt,is_spell,enemy) |
| Mit dieser Funktion kann man Lebewesen erschaffen, die Schaden |
| von anderen abwenden oder modifizieren. Wenn diese Funktion ein |
| Array ({dam,dt,is_spell}) zurueckgibt so werden bei dem zu |
| verteidigenden Lebewesen diese Werte genommen anstelle der alten. |
| Man kann also z.B. ein Monster erschaffen, das ein |
| feuerempfindliches anderes Monster verteidigt, indem es z.B. |
| Feuerbaelle in Eishagel verwandelt. |
| |
| Standard-Skills |
| ================ |
| |
| Folgende Faehigkeiten werden schon beruecksichtigt und sind auch |
| vordefiniert. Wenn sie unveraendert uebernommen werden sollen muss nur |
| SI_ABILITY gesetzt werden. |
| |
| o SK_SWORDFIGHTING |
| Schwertkampf. Bis zu 33+A_STR+A_DEX Aufschlag bei |
| Schwertern, wenn jemand diese Faehigkeit zu 100% hat. |
| o SK_WEAPONLESS |
| Kampf mit blossen Haenden. Bis zu 100+A_STR+3*A_DEX |
| Aufschlag. |
| o SK_TWOHANDED |
| Kampf mit zweihaendigen Waffen. Bis zu 33+A_STR Aufschlag. |
| o SK_NIGHTVISION |
| Wer diese Faehigkeit zu 100% hat braucht 20 Sekunden pro |
| fehlendem Lichtlevel um sich an die Dunkelheit zu gewoehnen. |
| o SK_BOOZE |
| Mit 100% dieser Faehigkeit wird bei jedem alkoholischen Getraenk |
| 80% vom Alkoholgehalt abgezogen. |
| |
| Folgende Faehigkeiten werden beruecksichtigt, sind aber nicht vordefiniert: |
| |
| o SK_MAGIC_ATTACK |
| Wenn diese Faehigkeit vorhanden ist, wird die Funktion unter |
| SI_SKILLFUNC im Gildenobjekt aufgerufen, falls der Spieler sonst |
| mit blossen Haenden angreifen wuerde. Wenn dabei ein Mapping |
| zurueckgegeben wird, so werden die Werte von |
| SI_SKILLDAMAGE, SI_SKILLDAMAGE_TYPE und |
| SI_SKILLDAMAGE_MSG genommen anstelle der Werte in |
| P_HANDS. |
| o SK_MAGIC_DEFENSE |
| Wenn hier unter SI_SKILLFUNC eine Funktion eingetragen ist, so |
| wird sie bei Defend im Gildenobjekt aufgerufen und bekommt im |
| Informations-Mapping SI_SKILLDAMAGE, |
| SI_SKILLDAMAGE_TYPE und SI_SPELL uebergeben. Wenn sie |
| ein Mapping zurueckgibt werden hieraus SI_SKILLDAMAGE und |
| SI_SKILLDAMAGE_TYPE entnommen und ersetzen die alten |
| Werte von "dam" und "dam_type". |
| o FIGHT(Waffentyp) |
| Falls diese Faehigkeit vorhanden ist wird der entsprechenden |
| Funktion in SI_SKILLDAMAGE der bisherige Schaden uebergeben. |
| Falls sie ein Mapping zurueckliefert wird an dieser Stelle auch der |
| neue Schaden erwartet. |
| o SK_FIGHT |
| Wie Fight(Waffentyp), nur wird diese Faehigkeit, falls vorhanden, |
| bei jeder Waffe benutzt und kann auch zusaetzlich andere Werte fuer |
| SI_SKILLDAMAGE_TYPE ergeben. Waffe und Waffentyp werden |
| uebrigens in SI_WEAPON und SI_WEAPON_TYPE uebergeben. |
| o SK_CASTING |
| Spellcasting. Die Wahrscheinlichkeit, dass der Spell gelingt, steigt |
| bei 100% dieser Faehigkeit auf das Doppelte. Nur mit dieser |
| Faehigkeit ist es moeglich, ueber die Maximalgrenzen zu kommen, |
| so dass dann auch Spells besonders gut gelingen koennen. |
| |
| Temporaere Property-Aenderungen |
| ================================ |
| |
| Oft muessen Spells irgendwo Properties fuer kurze Zeit veraendern, wie |
| z.B. P_LIGHT oder P_NOMAGIC in Raeumen. Fuer diesen Zweck kann |
| man in /obj/tmp_prop_master die Funktion SetTmpProp aufrufen. Diese |
| Funktion erwartet das Objekt, in dem die Property zu setzen ist, den Namen |
| der Property, den zeitweiligen Wert und den Zeitpunkt, bis zu dem diese |
| Aenderung gelten soll. |
| |
| Skill Informationen |
| ++++++++++++++++++++ |
| |
| In den Informationsmappings zu den Spells/Skills sollten alle (zusaetzlich) |
| noetigen Informationen stehen, denn nur wenn z.B. ein Feuerball in einem |
| Spellbook als Schaden 300 eingetragen hat und diesen Wert dem Mapping |
| entnimmt, kann eine andere Gilde diesen Spruch recyclen und mit Schaden |
| 400 anbieten, natuerlich sollte er dann auch in der Gilde mehr kosten. |
| |
| SIEHE AUCH: skill_info_liste |
| |
| Faktoren und Offsets |
| --------------------- |
| |
| Man kann in dem Informations-Mapping zu jedem numerischen Wert |
| "Name" noch zwei zusaetzliche Werte FACTOR("Name") und |
| OFFSET("Name") eintragen und diese Werte automatisch zur eigentlichen |
| Wertbestimmung beruecksichtigen. Mit folgenden Funktionen sollte man |
| im Spellbook dem Mapping Werte entnehmen: |
| |
| o GetValue(name,map,spieler) |
| o GetOffset(name,map,spieler) |
| OFFSET(name). |
| o GetFactor(name,map,spieler) |
| Ergibt FACTOR(name), falls ungleich Null, sonst 100. |
| o GetFValue(name,map,spieler) |
| Ergibt (Wert*Faktor)/100. |
| o GetValueO(name,map,spieler) |
| Ergibt Wert+Offset. |
| o GetFValueO(name,map,spieler) |
| Ergibt (Wert*Faktor)/100+Offset. |
| |
| Nach Moeglichkeit sollte man davon im Spellbook GetFValueO benutzen, |
| wenn es angebracht ist. Auf jeden Fall sollten von den drei Werten |
| moeglicht viele auf eine angemessene Weise beruecksichtigt werden, denn |
| dadurch bekommt das Gildenobjekt feinere Kontrollmoeglichkeiten, wenn |
| ein Spruch modifiziert werden soll. Es ist dann fuer die Gilde aeusserst |
| einfach festzulegen, dass z.B. Zwerge bei allen Angriffsspruechen 20% |
| mehr Schaden verursachen und beim Feuerball Elfen einen hoeheren |
| garantierten Wert hinzubekommen. |
| |
| Funktionen |
| ----------- |
| |
| Wenn ein Spellbook eine der oben angesprochenen Funktionen benutz, um |
| einen numerischen Wert zu ermitteln und anstelle des Wertes steht etwas, |
| das als Funktion interprtiert werden kann, so wird diese Funktion |
| ausgewertet und das Ergebnis als Wert genommen. Als Funktion |
| interpretiert werden kann: |
| |
| o Eine Closure |
| o Ein Array ({objekt,funktionsname}) oder ({objektname,funktionsname}) |
| o Ein Funktionsname. Hierbei sollte man sich jedoch darueber im |
| klaren sein, in welchem Objekt versucht wird die Funktion |
| aufzurufen. Ueblicherweise geschieht dies im Spellbook, jedoch |
| werden SI_DIFFICULTY, SI_SKILLLEARN und SI_SPELLCOST |
| auch beim Lernen benoetigt und dies geschieht vom Gildenobjekt |
| aus. Wenn bei diesen 3 Eintraegen eine Funktion den Wert liefern |
| soll, so muss sie in eine der drei anderen Formen eingetragen werden, |
| damit das richtige Objekt ermittelt werden kann. |
| |
| SIEHE AUCH: execute_anything |
| |
| Fuer nicht-numerische Werte kann man GetData verwenden. Dabei werden |
| jedoch nur closures automatisch ausgewertet. |
| |
| Skill Attribute |
| ++++++++++++++++ |
| |
| Skill-Attribute sind Attribute, die alle anderen Skills beeinflussen koennen. |
| Normalerweise sind alle Skill-Attribute 100%, sie koennen jedoch fuer |
| kurze Zeit auf andere Werte zwischen 10% und 1000% gesetzt werden. Bei |
| der Abfrage der Attribute werden 3 Werte beruecksichtigt: |
| |
| o Wert, der vom Lebewesen selbst gesetzt wurde. |
| o Wert, der von einem anderen unter 100% gesetzt wurde. Wenn |
| mehrere andere Lebewesen den Wert unter 100% gesetzt haben so |
| gilt die Aenderung von dem mit dem hoechsten Level. Eine solche |
| Aenderung wird ueblicherweise von einem Gegner veranlasst. |
| o Wert, der von einem anderen ueber 100% gesetzt wurde. Auch hier |
| gilt die Aenderung von dem Lebewesen mit dem hoechsten Level. |
| |
| Wenn z.B. ein Spieler seine Geschwindigkeit fuer zwei Minuten auf 200% |
| und ein Monster sie fuer eine Minute auf 25% setzt, so ist sie eine Minute |
| lang 50% und die naechste Minute 200% bevor sie wieder auf 100% gesetzt |
| wird. |
| |
| SIEHE AUCH: ModifySkillAttribute |
| |
| Restriction Mappings |
| +++++++++++++++++++++ |
| |
| Mit Restriction Mappings koennen Einschraenkungen auesserst einfach |
| angegeben werden. In dem Mapping wird einfach nur angegeben, was durch |
| welchen Wert eingeschraenkt werden soll. Wenn z.B. mindestens Level 15 |
| und Intelligenz 10 verlangt wird, so ist das Mapping |
| ([P_LEVEL:15,A_INT:10]). Folgende Einschraenkungen koennen verlangt |
| werden: |
| |
| SIEHE AUCH: check_restrictions |
| |
| Einschraenkungen werden mit check_restrictions(spieler,mapping) |
| ueberprueft. Die Funktion liefert 0 zurueck wenn der Spieler alle |
| Einschraenkungen erfuellt und einen String mit der Begruendung, falls eine |
| Einschraenkung nicht erfuellt ist. |
| |
| Programmierrichtlinien |
| ======================= |
| |
| o In Spellbooks moeglichst oft Faktoren und Offsets beruecksichtigen. |
| o Die Skill-Attribute beruecksichtigen, falls moeglich. |
| o Alles Spells muessen eine Verzoegerungszeit haben, in der kein |
| weiterer Spell anwendbar ist. Hiervon kann es Ausnahmen geben, wenn |
| das Gildenkonzept es anders vorsieht (z.B. bei den Kaempfern) oder |
| sonst reguliert. |
| o Kostenlose Spells sollte es nicht geben. Falls doch, dann nur mit sehr |
| hoher Verzoegerungszeit, sonst lassen die Leute nur ihr Frontend |
| spielen. |
| o Jeder Skill sollte eine levelabhaengige maximale Faehigkeit haben. |
| D.h., wenn SI_DIFFICULTY gesetzt ist sollte der Wert groesser als |
| -100 sein. |
| o Spells duerfen nicht Monster beliebig hoher Staerke einfach |
| umhauen. Es sollte nur bis zu einer Maximalstaerke moeglich sein. |
| o Der Schaden, den ein Spruch bewirkt, darf von der Staerke nicht |
| groesser sein, als der, den eine Waffe mit WC 25*SP bewirken |
| wuerde. Auch hier sollte man ein wenig gesunden Menschenverstand |
| spielen lassen - es kommt auch immer drauf an, ob ein Angriff |
| magisch ist oder physikalisch. |
| o Die Heilung sollte nicht die dafuer noetigen SP ueberschreiten. |
| Ausnahmen fuer explizite Heilgilden (Klerus) kann es geben. |
| |
| Auswirkung von SI_DIFFICULTY |
| ----------------------------- |
| |
| Folgende Maximalwerte sind fuer SI_ABILITY bei den angegebenen Leveln |
| moeglich, wenn SI_DIFFICULTY auf den Wert in der linken Spalte gesetzt |
| ist. |
| |
| SIEHE AUCH: LimitAbility oder /std/living/skills::LimitAbility |
| |
| 5. Okt 2011 Gloinson |
| |