QuerySkillBonus()
=================

FUNKTION
--------
::

     int QuerySkillBonus(object caster, object target, mapping sinfo)

DEFINIERT IN
------------
::

     beliebigen Objekten

ARGUMENTE
---------
::

     object caster
          der Benutzer eines Skills/Spells (Lebewesen)
     object target
          das Ziel eines Skills/Spells (beliebiges Objekt oder 0)
     mapping sinfo
          das Skillinfomapping

BESCHREIBUNG
------------
::

     Diese Funktion wird von der Gilde des Casters im Environment und ggf.
     auch im Ziel eines Skills/Spells gerufen.
     Die Gilde uebergibt neben Caster und Ziel ein Mapping mit Skillinfos (s.
     SI Konstanten aus new_skills.h fuer Details), welches alle wesentlichen
     Informationen ueber den benutzten Skill/Spell enthaelt.

     QuerySkillBonus() liefert einen Bonus (oder Malus) zurueck, den der
     Aufrufer als Faktor in der Berechnung des Effekts des Skills
     beruecksichtigen kann (aber nicht muss).
     Der Bonus/Malus wird hierbei als ganzzahliger 0.01-Prozentwert aufgefasst
     (10000 == 100% == keine Veraenderung, 1 == 0.01%).

     Diese Funktion kann in beliebigen Objekten (re-)definiert werden. Im
     Falle mobiler Objekte oder anhaltender Effekte ist jedoch eine
     Balancegenehmigung erforderlich, sofern kampfrelevante Skills beeinflusst
     werden.
     Eine flaechendeckende Reduzierung von Skills/Gildenfaehigkeiten ist
     explizit _nicht_ erwuenscht und soll auf einzelne Raeume und Objekte
     beschraenkt sein.

BEMERKUNGEN
-----------
::

     Das Mapping <sinfo> kann in dieser Funktion geaendert werden. Dieses kann
     allerdings sehr weitreichende Folgen haben, speziell bei mangelnden
     Kenntnissen ueber Interna des Skillsystems. Daher bitte von Aenderungen
     absehen bzw. vorher mit dem jeweiligen Gildenmagier und/oder der
     Gildenbalance abklaeren.
     Die Bedeutung der Werte in <sinfo> kann je nach Gilde variieren. Im
     Zweifelsfall bitte bei den jeweiligen Gildenmagiern nachfragen. 
     Die Gilde kann diese Funktion rufen, muss aber nicht. Ebenso kann sie das
     Ergebnis beruecksichtigen, muss aber nicht.

BEISPIELE
---------
::

     In einem Raum sollen Heilzauber besonders effizient sein:
     int QuerySkillBonus(object caster, object target, mapping sinfo) {
        if (pointerp(sinfo[SI_MAGIC_TYPE])
            && member(sinfo[SI_MAGIC_TYPE], MT_HEILUNG) > -1)
        {
            return 12000 + random(3000); // bonus von 120-150%
        }
        return 10000;
     }

SIEHE AUCH
----------
::

     gilden-doku
     <new_skills.h>

LETZTE AeNDERUNG
----------------
::

19.08.2013, Zesstra

