Dokumentation zu: DoAttackEvent(L)

HR Image


FUNKTION:
        nomask public varargs
        mixed DoAttackEvent(mixed enemy, int damage, mixed damage_type,
                            object weapon, mixed msgs, int spell)

IMPLEMENTIERT IN:
	/std/living/combat.c
	
ARGUMENTE:
	enemy  : Angriffsobjekt (living) oder
		 Array aus Objekten fuer "Flaechenangriffe" (experimentell)
	damage : Schadenswert des Angriffs analog Defend(E)
	damage_type : Der Schadenstyp des Angriffs als String oder Array aus
		 Schadenstypen analog Defend(E)
	weapon : (optional) Waffe die beim Angriff benutzt wird oder 0, wenn
	         der Angriff ohne Waffe erfolgt (etwa mit blossen Haenden)
	msgs   : (optional) Angriffsmessage als String im Stil von P_HANDS
	         (ohne fuehrendes Leerzeichen)
	         ODER Array aus 4 Strings oder 0 fuer die Standard-Texte.
	         Ist es ein Array, enthaelt das erste Element das 'Adverb' im
	         Sinne von P_HANDS, das zweite geht an den Angreifer, das
	         Dritte an das Opfer und das Vierte an alle anderen. Die
	         Strings haben ein Format analog den ET_SOUL Texten.
	spell  : (optional) Spelllevel des Angriffs, Standard 0.
	
RÜCKGABEWERT:
	Die Funktion liefert ein Array oder einen int-Fehlercode zurueck.
	
	Ist es ein Array, enthaelt es den tatsaechlich zugefuegten Schaden an
	den Zielobjekten in Lebenspunkten. Das Array hat daher mindestens die
	Groesse 1, wenn es nur ein 'enemy' Objekt gab. Richtet sich der An-
	griff gegen mehrere Ziele muss Groesse und Reihenfolge des Rueckgabe-
	arrays NICHT mit Groesse und Reihenfolge des Zielobjekt-Arrays ueber-
	einstimmen! Siehe unten SCHADENSZUORDNUNG.
	
	Ansonsten werden folgende Codes (aus sys/combat.h) zurueckgegeben:
	
	ATTACK_ERROR          (0) : Argumentfehler zu DoAttackEvent().
	ATTACK_FORBIDDEN      (-1): Angriff verboten.
	ATTACK_DISABLED       (-2): Angreifer ist gelaehmt.
	ATTACK_NOVICTIM       (-3): Angriffsziel existiert nicht.
	ATTACK_NOLIVING       (-4): Angriffsziel ist kein Lebewesen.
	ATTACK_NOTREACHABLE   (-5): Angriffsziel ist nicht im gleichen Raum.
	ATTACK_VIC_GHOST      (-6): Angriffsziel ist ein Geist.
	ATTACK_VIC_INVINCIBLE (-7): Angriffsziel ist unangreifbar (Text).
	ATTACK_CANCELLED     (-42): Event wurde abgebrochen (Text).

BESCHREIBUNG:
	Die Funktion erzeugt einen Angriff auf ein oder mehrere Lebewesen 
	(livings). Dabei wird ein ET_ATTACK Event erzeugt und ueber den
	combat-Handler ausgewertet. Die Funktion wird normalerweise im Living
	waehrend des Kampfes automatisch aufgerufen.
	
	Es ist aber auch moeglich (und erwuenscht) diese Funktion auch aus
	Spellbooks heraus aufzurufen. Der Vorteil ist dann, das der Angriff
	aus dem Spellbook wie jeder andere Angriff verarbeitet wird und als
	Event abgebrochen oder veraendert werden kann.
	
	Richtet sich der Angriff gegen mehrere Zielobjekte, dann werden nur
	die angegriffen, die tatsaechlich angegriffen werden koennen. Solange
	mindestens eines der Opfer angegriffen werden kann, wird der Event
	durchgefuehrt. Nur wenn kein Objekt angegriffen werden kann, wird
	ein Fehlercode zurueckgegeben, der die jeweils letzte Ursache nennt,
	warum der Angriff fehlschlug.

	Nicht angreifen kann ein Lebewesen wenn:
	        - der Angriff verboten ist (Sanktion, o. ae.)
	        - der Angreifer gelaehmt ist (P_DISABLE_ATTACK)
	        - ein Spieler, wenn er Geist ist

	Nicht angegriffen werden koennen folgende Objekte:
	        - Nicht-Lebewesen (Fackeln, andere Dinge)
	        - tote Lebewesen (P_GHOST gesetzt)
	        - unangreifbare Wesen (P_INVINCIBLE gesetzt)
	        - entfernte Wesen (nicht im gleichen Raum befindliche)

	Gecheckt wird zusaetzlich:
	        - das P_NOMAGIC des oder der Opfer (NICHT P_NOMAGIC im Raum)
	        - P_BLIND des Angreifers (halbiert den Schaden)
	        - P_GHOST bei Spielern, falls der Spieler im Event stirbt

	Ist der Angriff erfolgreich, werden die Meldungen ausgegeben. Wird
	der Angriff abgebrochen (ET_ATTACK gecancelt),  werden die Abbruch-
	meldungen ebenfalls ausgegeben. Wirkt ein P_NOMAGIC Schutz des Opfers,
	wird eine Standardmeldung ausgegeben, der Angriff wird aber zuende
	gefuehrt. Ist das Opfer unangreifbar, wird ebenfalls eine Meldung
	ausgegeben, in allen anderen Faellen NICHT.
	
	Richtet sich der Angriff gegen mehrere Opfer und stirbt der
	Angreifer waehrend des Angriffs, wird der Angriff normal zuende
	gefuehrt, es werden jedoch eventuell verbleibende Opfer nicht mehr
	getroffen.
	
	P_NOMAGIC im Raum wird derzeit nicht gecheckt. Das ist Sache des
	Aufrufers (z.B. macht das der Skillmaster fuer alle Spells).

	DoAttackEvent() soll in Zukunft die einzige Methode darstellen einen
	'Angriff' auf ein anderes Objekt durchzufuehren.
	
SCHADENSZUORDNUNG:
	Richtet sich der Angriff gegen mehrere Opfer (enemy ist ein Array aus
	Zielobjekten), dann ist das Rueckgabearray nicht zwangslaeufig gleich
	gross oder in der gleichen Reihenfolge, da alle Nicht-Angreifbaren
	Opfer bereits vorher aussortiert werden. Will man doch eine ganz
	genaue Zuordnung zwischen angegriffenem Objekt und Rueckgabewerten
	haben, muss man das 'enemy' Array als Referenz uebergeben. Dann er-
	haelt man das Array so, wie es vom ET_ATTACK Event verwendet wurde.
	Zu beachten ist dann allerdings, dass auch Nullen im 'enemy' Array
	sein koennen, wenn/falls durch den Angriff ein NPC gestorben ist.
	
BEMERKUNG:
	Die Funktion wird derzeit erprobt. Bitte aktuellen Status bei einem
	Erzmagier erfragen.
	
	Der Angriff auf mehrere Objekte ist experimentell.

BEISPIEL:
	monster->DoAttackEvent(opfer, 42, DT_SLASH, 0, "mit Schafskaese", 0);

	Erzeugt einen physischen (magielosen) Angriff vom Objekt 'monster' auf
	Objekt 'opfer' ohne Waffe mit der Angriffsmeldung "mit Schafskaese",
	Schaden 42, Schadenstyp DT_SLASH. Dabei wird ein ET_ATTACK Event aus-
	geloest und verarbeitet. Die Funktion gibt zurueck, wieviel Schaden
	der Angriff bei 'opfer' angerichtet wird, zum Beispiel:
	
	({3})
	
	oder warum der Angriff fehlgeschlagen ist, zum Beispiel:
	
	ATTACK_VIC_INVINCIBLE
	
	Weil 'opfer' unangreifbar ist. Die Meldungen wurden in diesem Fall
	bereits ausgegeben.

SIEHE AUCH:
	Defend(E), ET_ATTACK, P_HANDS, P_GHOST, P_BLIND, P_DISABLE_ATTACK,
	P_ATTACK_RATE


Start » Magierhandbuch » Docu » Lfun » DoAttackEvent Letzte Generierung: 25.04.2021, 01:58
Email an: mud@wl.mud.de
Valid HTML 4.01!