Start Info Community Spielen
 
 

Morgengrauner Dokumentation

Dateipfad: /home/mud/mudlib/doc//lfun/Defend

Defend()
********


FUNKTION
========

   public int Defend(int dam, string|string* dam_types,
      int|mapping si_spell, object enemy)


DEFINIERT IN
============

   /std/living/combat


ARGUMENTE
=========

   int dam
      Initiale Staerke des Angriffs (10 dam ~ 1 HP)

   string* dam_types
      Art des Schadens, der angerichtet werden soll Muss ein Array von
      Schadenstypen sein, alte Objekte uebergeben hier manchmal
      strings.

   mapping si_spell
      Mapping mit zusaetzlichen Informationen zum Angriff(Siehe unten)
      Alte Objekte uebergeben manchmal einen Integer (0 fuer
      Physikalischen Angriff, 1 fuer Zauber.

   object enemy
      Der Feind/Schadenverursacher


BESCHREIBUNG
============


Generell
--------

   Wenn das Lebewesen angegriffen wird, wird geprueft, wie stark die
   Ruestungen und koerpereigenen Abwehrkraefte sind und die Staerke
   des Schadens dementsprechend vermindert. Ggf. wird der Schaden
   zugefuegt und der Feind in  die Liste der Feinde aufgenommen. Der
   Schaden betraegt: (dam-
   Summe(Ruestungsstaerken)-random(P_BODY+A_DEX))*CheckResistance/10
   aber nicht unter 0.


Der Parameter 'si_spell'
------------------------

   Ist 'si_spell' 0, dann gilt der Angriff als normale physische
   Attacke Uebergibt man als 'si_spell'-Parameter ein Mapping, so gibt
   es dafuer diverse Flags, die das Ergebnis manipulieren (in
   new_skills.h enthalten). Nichtangabe eines Flags gilt als 0.

   * SP_PHYSICAL_ATTACK (int)
        1, wenn es ein physischer Angriff ist, d.h. Ruestungen wirken
        sollen, 0 sonst. Dies entspricht dem alten !spell (wenn Spell
        kein Mapping ist).

   * SP_NO_ENEMY (int)
        1, falls der Angriff nicht toedlich ist, es also keinen echten
        Gegner gibt. Es wird dann reduce_hit_points() gerufen statt
        do_damage()

   * SP_NO_ACTIVE_DEFENSE (int)
        1, falls aktive Abwehren (wie zurueckschlagende Amulette,
        Karateabwehren oder Ausweichmanoever) unterbleiben sollen, zB
        bei Kratzen durch Dornen oder Fall aus grosser Hoehe ist
        aktive Abwehr oder Ausweichen unlogisch

   * SP_RECURSIVE (int)
        1, falls der Spell aus einem Defend gerufen wurde (oder einer
        DefendFunc). Dies ist sehr wichtig, um unendliche Rekursionen
        zu vermeiden, wenn zwei zurueckschlagende Verteidigungen
        zusammentreffen.

   * SP_NAME (string)
        Name des Spells

   * SP_GLOBAL_ATTACK (int)
        1 bei Flaechenspells (die mehrere Ziele treffen koennen)

   * SP_REDUCE_ARMOUR (mapping) ------------
        Mapping: keys AT_X/P_BODY, values int>=0 Die Schutzwirkung
        durch P_AC/Magie einer Ruestung wird typabhaengig reduziert.
        Als Keys sind P_BODY und die AT_* erlaubt, die Werte muessen
        ints > 0 sein. Aufbau eines Mappings im Beispiel:

           ([AT_BOOTS: 0,  // Stiefel schuetzen gar nicht
             P_BODY:  50,  // Koerper zu 50%
             AT_BELT: 600  // Guertel zu 600%
           ])
           -> alle 'fehlenden' Eintraege wirken normal

   * SP_SHOW_DAMAGE (int or Array von Array)
        0 fuer keine Treffermeldung, 1 fuer Standardtreffermeldungen.
        Falls individuelle Treffermeldungen geschwuenscht sind,
        koennen aber auch in einem Array Ersatz-Treffermeldungen
        definiert werden. Das Format ist:

           ({
           ({ int lphit1, string mess_me, string mess_en, string mess_room }),
           ({ lphit2, mess_me, mess_en, mess_room }),
           ...
           ({ lphitn, mess_me, mess_en, mess_room }),
           })
           wobei lphit1=================================


// ein simpler Angriff: enem->Defend(100, ({DT_BLUDGEON}), ([SP_PHYSICAL_ATTACK:1]), this_object());

// ein magischer Angriff (ohne Treffermeldung): enem->Defend(100, ({DT_BLUDGEON, DT_FIRE}), ([SP_PHYSICAL_ATTACK:0, SP_SHOW_DAMAGE:0 ]),this_object());

// ein magischer Angriff mit Treffermeldung: enem->Defend(100, ({DT_BLUDGEON, DT_FIRE}), ([SP_PHYSICAL_ATTACK:0, SP_SHOW_DAMAGE:1]), this_object());



SIEHE AUCH ==========

Angriff: Attack(), P_NO_ATTACK, InsertEnemy()

Schaden: P_ENABLE_IN_ATTACK_OUT, P_LAST_MOVE, do_damage(), reduce_hit_points()

Schutz: P_DEFENDERS, InformDefend(), DefendOther(), P_ARMOURS, P_AC, P_DEFEND_FUNC, QueryDefend(), P_BODY

Daten: P_LAST_COMBAT_TIME, P_LAST_DAMTYPES, P_LAST_DAMTIME, P_LAST_DAMAGE, P_DAMAGE_MSG

Resistenz: P_RESISTANCE_STRENGTHS, CheckResistance()

Sonstiges: CheckSensitiveAttack(), InternalModifyDefend(), normalize_defend_args(), UseSkill(), DefendInfo()

Letzte Aenderung: 20.01.2019, Zesstra


zurück zur Übersicht

YOUTUBE | FACEBOOK | TWITTER | DISCORD | FEEDBACK | IMPRESSUM | DATENSCHUTZ 1992–2023 © MorgenGrauen.