FUNKTION:
varargs public int Wield(object waffe, int force, int silent)
DEFINIERT IN:
/std/living/combat.c
ARGUMENTE:
mixed waffe - die zu zueckende Waffe oder der zu zueckende
Schild (object o. string)
int force - wenn gesetzt, wird der ET_WIELD-Event mit
EM_NO_CANCEL gesendet
int silent - es wird keine Zueck-Meldung ausgegeben
RÜCKGABEWERT:
0 - wenn das Zuecken erfolglos verlaufen ist
1 - wenn das Zuecken erfolgreich war
BESCHREIBUNG:
Wield ruft ET_WIELD mit waffe als data[E_WIELD_WEAPON] auf. Wenn force
gesetzt wird, kann der Event nicht abgebrochen werden. Die Benutzung
von force ist mit einem Erzmagier abzusprechen!
Bitte beachten: Schilde werden wie Waffen behandelt.
Wird die Waffe als String angegeben, so wird versucht ein Objekt
dieses Pfades zu clonen, in das aufrufende Lebewesen zu moven und
anschliessend anzuziehen. Klappt das Moven nicht, wird das
geclonte Objekt wieder zerstoert. Klappt nur das Anziehen nicht,
bleibt es im Inv des Lebewesens.
Befindet sich das Waffenobjekt nicht im Inventar des aufrufenden
Lebewesens, gibt Wield(L) einen Fehler zurueck.
BEISPIELE:
Ein NPC soll (immer, wenn er geclont wird) eine bestimmte Waffe
bekommen und gleich zuecken:
// normales NPC create(A) mit Wield(L)
void create()
{
if (!clonep()) return;
::create();
...
Wield("/obj/messer"); // einfaches Messer clonen und zuecken
}
Ein NPC soll bei einer Frage nach 'waffe' in seinem Inventar nach
einer Waffe suchen und die erstbeste zuecken und im naechsten Reset
wieder zurueckstecken.
// Hilfsfunktion
string waffeinfo()
{
object waffe;
// nichts tun, wenn bereits Waffe gezueckt
if (sizeof(QueryProp(P_WEAPONS)))
return "Ja, ich habe bereits eine gezueckt!";
// sonst Waffe im Inventar suchen
waffe = present("waffe", this_object());
// wenn gefunden, versuchen Waffe zu zuecken
if (waffe && Wield(waffe))
return "Meinst Du vielleicht sowas?";
// wenn das nicht geklappt hat anderer Text
return "Leider habe ich keine bei mir.";
}
// normales NPC create mit entsprechendem AddInfo(L)
void create()
{
if (!clonep()) return;
::create();
...
AddInfo("waffe", #'waffeninfo, "antwortet:");
}
// im Reset eine Waffe zurueckstecken
void reset()
{
::reset();
// der Einfachheit halber nur die erste Waffe zurueckstecken
if (sizeof(QueryProp(P_WEAPONS)))
UnWield(QueryProp(P_WEAPONS)[0]);
}
SIEHE AUCH:
ET_WIELD(WL), ET_UNWIELD(WL), ET_WEAR(WL),
ET_UNWEAR(WL), Wear(L), UnWear(L), UnWield(L),
P_ARMOUR_RESTRICTIONS, P_WEAPON_RESTRICTIONS
|