Lpc Manpages

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]));


    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("wassertrahl",
        ([ SI_CLOSURE:
           function int (object caster, string skill, mapping sinf)
            {
             caster->LearnSkill("wassertrahl",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_SKILLS
    Spellbook:      Learn, SpellSuccess

----------------------------------------------------------------------------
01.11.17, Torin