Lpc Manpages

Im heart_beat wird Attack() aufgerufen.

func Attack(object enemy) =
----------------------------------------------------------
P_NOATTACK gesetzt ? Attack() abbrechen

P_TMP_ATTACK_HOOK '({ objekt, funktion, zeitpunkt })' gesetzt ?
    Bis zeitpunkt:
        Ergebnis = objekt->funktion(enemy)
        Ergebnis 0 ? Attack() abbrechen
    Ab zeitpunkt:
        P_TMP_ATTACK_HOOK loeschen

P_WEAPON 'objekt' gesetzt ?
    objekt->TakeFlaw()          // Abnutzung
    Schaden = objekt->QueryDamage(enemy)
    ------------------------------------------
    func QueryDamage(object enemy) =
    random( (2*WC + 10*Kraft)/3 ) + HitFunc(enemy)
    ------------------------------------------
    Waffe zweihaendig und Skill SK_TWOHANDED gesetzt ?
        Schaden = UseSkill(SK_TWOHANDED, Schaden)

P_WEAPON nicht gesetzt ?
    Skill SK_MAGIC_ATTACK gesetzt ?
        Schaden = UseSkill(SK_MAGIC_ATTACK, enemy)
    Skill SK_MAGIC_ATTACK nicht gesetzt ?
        Schaden = random( (2*Hands + 10*Kraft)/3 )

Waffeninfo = [enemy, Schaden, Schadenstyp, Waffentyp, Spell]

Skill FIGHT(Waffentyp) gesetzt ?
    Waffeninfo = UseSkill(FIGHT(Waffentyp), Waffeninfo)
Skill SK_FIGHT gesetzt ?
    Waffeninfo = UseSkill(SK_FIGHT, Waffeninfo)

P_TMP_ATTACK_MOD '({ objekt, funktion, zeitpunkt })' gesetzt ?
    Bis zeitpunkt:
        Ergebnis = objekt->funktion(Waffeninfo)
        Ergebnis = 0 ? Attack() abbrechen
    Ab zeitpunkt:
        P_TMP_ATTACK_MOD loeschen

enemy->Defend(Schaden, Schadenstyp, Spell, this_object())
----------------------------------------------------------

Erlaeuterungen:
Die Skills SK_TWOHANDED, SK_FIGHT, FIGHT(WT_SWORD) und FIGHT(WT_HANDS)
sind defaultmaessig (in /std/living/std_skills.c) mit StdSkill_Bihand,
StdSkill_Fight, StdSkill_Fight_sword und StdSkill_Fight_hands vorbesetzt
(diese Funktionen sind aber als 'Dummies' implementiert).
Allgemein wird, wenn keine Gilde angegeben ist, die Skillfunktion in
this_object()->StdSkill_+Skill gesucht.

func Defend(int dam, mixed dam_type, mixed spell, object enemy) =
----------------------------------------------------------

P_DEFENDERS 'objektarray' gesetzt ?
    Objekt aus objektarray im selben Raum ?
        Objekt->InformDefend(enemy)
    Objekt aus objektarray nicht im selben Raum ?
        Objekt aus objektarray loeschen
    Objekt = random(objektarray)
    Ergebnis = Objekt->DefendOther(dam, dam_type, spell, enemy)
    Ergebnis '({ dam, dam_type, spell })' ? neu setzen

P_TMP_DEFEND_HOOK '({ objekt, funktion, zeitpunkt })' gesetzt ?
    Bis zeitpunkt:
        Ergebnis = objekt->funktion(dam, dam_type, spell, enemy)
        Ergebnis '({ dam, dam_type, spell, enemy })' ? neu setzen
        Ergebnis 0 ? Defend() abbrechen
    Ab zeitpunkt:
        P_TMP_DEFEND_HOOK loeschen

SP_CRITICAL_HIT 'wahrscheinlichkeit' NICHT gesetzt?

    P_ARMOURS 'objektarray' gesetzt ?
        Objekt = random(objektarray)
        Objekt->TakeFlaw(dam_type)          // Abnutzung

        Alle Objekte aus objektarray:
            Schutz = Objekt->QueryDefend(dam_type, spell, enemy)
            ----------------------------------------------------
            func QueryDefend(mixed dam_type, mixed spell, object enemy) =
            dam_type ist Ruestungsschutz ?
                random(AC+1) + DefendFunc(enemy)
            dam_type ist nicht Ruestungsschutz ?
                DefendFunc(enemy)
            ----------------------------------------------------
            Objekt-Typ = AT_SHIELD und Skill SK_SHIELD gesetzt ?
                Schutz = Schutz + UseSkill(SK_SHIELD, Schutz)
            spell[SP_REDUCE_ARMOUR] gesetzt ?
                Schutz = Schutz * SP_REDUCE_ARMOUR[Objekt-Typ]
            Schaden = dam - Schutz

Defendinfo = [Schaden, dam_type, spell, enemy]

Skill SK_MAGIC_DEFENSE gesetzt ?
    Defendinfo = UseSkill(SK_MAGIC_DEFENSE, Defendinfo)


SP_CRITICAL_HIT 'wahrscheinlichkeit' NICHT gesetzt?

    Schutz = random(Body + Geschick) - 1
    Alle Schadenstypen aus dam_type:
        Schutz = Schutz * P_BODY_RESISTANCE[Schadenstyp]
    spell[SP_REDUCE_ARMOUR][P_BODY] gesetzt ?
        Schutz = Schutz * SP_REDUCE_ARMOUR[P_BODY]
    Angriff ein echter Spell?
        Schutz = Schutz / 2
    Schaden = Schaden - Schutz

Schaden = Schaden / 10

Schadensausgabe an Lebewesen, Opfer und Umgebung

do_damage(Schaden, enemy)
----------------------------------------------------------