ModifySkill()

FUNKTION

public varargs void ModifySkill(string sname, mixed val,
                                int diff, string gilde)

DEFINIERT IN

/std/living/skills.c

ARGUMENTE

string sname     der zu aendernde Skill
mixed val        Aenderungswert: int fuer SI_SKILLABILITY, sonst mapping
int diff         Schwierigkeit (optional: default ist existierendes diff)
string gilde     Gilde (optional: default ist eigene Gilde)

BESCHREIBUNG

Mit der Methode kann man die Werte eines Skills/Spells veraendern. Dabei
wird ein Skill immer in ein Mapping umgewandelt (Skills/Spells koennen
auch einfach nur ihren Skillwert enthalten, diese ist aequivalent zu
einem Mapping mit ([SI_SKILLABILITY:<Skillwert>]).

Ist 'val' ein int, wird dieses als SI_SKILLABILITY gesetzt. Falls der
Skill nur ein int war, wird ein 'diff'!=0 als SI_DIFFICULTY gesetzt.

Ist 'val' ein Mapping, wird dieses zum Skillmapping addiert.



Etwaige SI_SKILLABILITY-Aenderungen laufen danach noch durch LimitAbility.

BEISPIELE

// #1a: Lerne einen Spell/Skill (einer Gilde)
caster->ModifySkill("feuerball", MAX_ABILITY, 100, "abenteurer")
// #1b: ... oder ...
caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100,
                    "abenteurer")
// #1c: ... oder fuer einen Abenteurer ...
caster->ModifySkill("feuerball", ([SI_SKILLABILITY: MAX_ABILITY]), 100);



// #2: Setze eine Skill-Funktion fuer einen Kampfskill des Klerus
this_player()->ModifySkill(FIGHT(WT_CLUB),
                           ([SI_SKILLFUNC: "Keulenkampf",
                             SI_DIFFICULTY: 100]),
                           100, "klerus");

// #3: Speichere im Skill (also Spieler) eine Option fuer diesen Skill
// Vorteil: dieser Eintrag wird dem Spell immer uebergeben
caster->ModifySkill("blitz", (["klerus_spell_option": 2]));

(Code in /doc/beispiele/testobjekte/modifyskillspell_test)
// #4: Lerne einen unabhaengigen Spell: ACHTUNG
// dieser Spell funktioniert nur solange, wie die Closure existiert,
// SI_SKILLABILITY und Spell bleiben jedoch im Spieler gespeichert (!)
this_player()->ModifySkill("fnrx",
  ([SI_CLOSURE:
      function int (object caster, string skill, mapping sinf) {
        caster->LearnSkill("fnrx", 1);
        tell_object(caster, "Peng! Dein Skillwert steigt auf "+
                            caster->QuerySkillAbility("fnrx")+".\n");
        return ERFOLG;
      },
    SI_SKILLABILITY: 8432]),
  100,
  "ANY");

SIEHE AUCH

Skills Lernen:  LearnSkill, LimitAbility
* Nutzung:      UseSpell, UseSkill
* Abfragen:     QuerySkill, QuerySkillAbility
* Modifikation: ModifySkillAttribute, QuerySkillAttribute,
                QuerySkillAttributeModifier, RemoveSkillAttributeModifier
  * Properties: P_SKILL_ATTRIBUTES, P_SKILL_ATTRIBUTE_OFFSETS
* sonstig:      spruchermuedung
* Properties:   P_NEWSKILLS
  1. Okt 2011 Gloinson