DefendOther()

FUNKTION

public <int|string*|mapping|object>* DefendOther(int dam,
string* dam_type, int|mapping si_spell, object enemy)

DEFINIERT IN

/std/living/combat.c

ARGUMENTE

int dam
Der Schaden, der voraussichtlich beim zu verteidigenden Lebewesen verursacht werden soll.
string* dam_type
Der Schadenstyp (oder die Schadenstypen), der beim zu verteidigenden Lebewesen verursacht werden sollen.
mapping si_spell
Mapping mit zusaetzlichen Informationen zum Angriff Alte Objekte uebergeben manchmal einen Integer (0 fuer physikalischen Angriff, 1 fuer Zauber.
object enemy
Der Feind, der ein zu verteidigendes Lebewesen angegriffen hat.

RUeCKGABEWERT

Array mit den Eintraegen der gegebenenfalls veraenderten
uebergebenen Parameter:
        (1) dam      [Typ int],
        (2) dam_type [Typ string*],
        (3) spell    [Typ mapping].

BESCHREIBUNG

Es ist moeglich, dass Objekte Angriffe auf Lebewesen abwehren oder umwandeln, sofern diese Objekte bei dem angegriffenen Lebewesen mittels AddDefender() angemeldet wurden und sich der selben Umgebung befinden. Zumeist wird es sich bei den Objekten natuerlich ebenfalls um andere Lebewesen handeln, die das Lebewesen, bei dem sie angemeldet sind, verteidigen sollen.

Bei einem Angriff auf das Lebewesen koennen alle Objekte per Aufruf von DefendOther() in einen Angriff eingreifen, wobei die Schadensstaerke, der Schadenstyp (die Schadenstypen), Zusatzinformationen fuer Angriffsspells und der Angreifer als Parameter uebergeben werden.

Des weiteren ist zu beachten, dass bei als physikalisch markierten Angriffen in einem Team nur Verteidiger aus der ersten Reihe beruecksichtigt werden und dass bei einem Angriff zufaellig aus allen moeglichen Verteidigern ausgewaehlt wird.

Standardmaessig ist diese Funktion in Lebewesen bereits definiert, wobei der Skill SK_DEFEND_OTHER, sofern vorhanden, aufgerufen wird.

BEISPIEL

Sehr beliebt sind in Gilden NPCs, die den Beschwoerer begleiten und
verteidigen, z.B. beschworene Daemonen:

inherit "/std/npc";

include <properties.h>

object owner;

void create() {
  ::create();
  SetProp(P_NAME,"Daemon");
  ...
}

// nach Clonen des Daemons folgende Funktion mit Beschwoerer als
// Parameter aufrufen
void Identify(object caster) {
  if (!objectp(caster))
    call_out(#'remove,0);
  owner = caster;
  owner->AddDefender(this_object());
}

// der Daemon wehrt jeden Angriff mit Feuer voll ab, man muss zuerst
// den Verteidiger umbringen, um den Beschwoerer toeten zu koennen
public <int|string*|mapping>* DefendOther(int dam,
    string|string* dt, int|mapping spell, object enemy) {
  if (sizeof(dt) && member(dt, DT_FIRE) != -1)
    dam = 0;
  return ({dam, dam_type, spell});
}

Soll der Daemon sich auch in ein Team einordnen, in welchem sich der
Beschwoerer eventuell befindet, so ist zusaetzlich AssocMember() in
diesem Beschwoerer aufzurufen, wobei der Daemon als Parameter
uebergeben wird.

SIEHE AUCH

Last modified: 2019-Aug-26, Arathorn