PROPERTY:
P_INVINCIBLE
DEFINIERT ALS:
"invincible"
DEFINIERT IN:
/sys/properties.h
WERTE:
0, 1, Closure, String oder ein zweidimensionales Array
aus gemischten Werten.
BESCHREIBUNG:
Mit dieser Property kann man NPCs markieren, die nicht
angegriffen werden koennen. Dadurch soll das
Ueberschreiben Der Defend-Funktionen vermieden werden.
Die internen Skills, die in jeder Kampfrunde
automatisch durchgefuehrt werden, erlernt man dabei nur,
Wenn der Gegner angreifbar ist.
Die Property kann eine Vielzahl an Werten annehmen.
Statt QueryProp(P_INVINCIBLE) sollte die Lfun
mixed IsInvincible(object enemy) benutzt werden.
BEISPIELE:
SetProp(P_INVINCIBLE, 0)
--> Es kommt ein normaler Angriff (Default).
SetProp(P_INVINCIBLE, 1)
oder SetProp(P_INVINCIBLE, ({1}))
oder SetProp(P_INVINCIBLE, ({1,1}))
--> Der Angriff wird abgeblockt,
Standardmeldung an den Angreifer,
Standardmeldung an den Raum
SetProp(P_INVINCIBLE, ({1,0}))
--> Der Angriff wird abgeblockt,
Standardmeldung an den Angreifer,
Keine Meldung an den Raum
SetProp(P_INVINCIBLE, ({0,1}))
--> Der Angriff wird abgeblockt,
Keine Meldung an den Angreifer,
Standardmeldung an den Raum
SetProp(P_INVINCIBLE, ({"Du hast keine Chance.",
"&&WER&& hat keine Chance."}))
--> Der Angriff wird abgeblockt,
"Du hast keine Chance." an den Angreifer,
"Bongo hat keine Chance." an den Raum.
SetProp(P_INVINCIBLE, #'func1)
oder SetProp(P_INVINCIBLE, ({#'func1}))
--> Der Angriff wird abgeblockt,
Funktion func1 wird EINMAL ausgewertet und der
Rueckgabewert bestimmt die Meldung
(ret=1: Standardmeldung, ret=0: Keine Meldung,
stringp(ret: ret als Meldung).
Dann wird die Meldung sowohl an den Angreifer als
auch an den Raum ausgegeben.
SetProp(P_INVINCIBLE, ({#'func1,#'func1}))
--> Der Angriff wird abgeblockt,
gleiches Verhalten wie bei
SetProp(P_INVINCIBLE, #'func1), nur mit dem
Unterschied, dass func1 ZWEIMAL ausgewertet wird.
SetProp(P_INVINCIBLE, ({1,#'func1}))
--> Der Angriff wird abgeblockt,
Standardmeldung an den Angreifer,
func1 wird ausgewertet und Meldung an den Raum
Die Rueckgabewerte der Funktionen bestimmen die Art der Ausgabe.
Wird ein Integer zurueckgegeben, kommt entweder keine Meldung
oder aber eine Standardmeldung. Wird ein String zurueckgegeben,
so wird dieser als Meldung ausgegeben. Der Rueckgabestring wird
auch zusaetzlich noch durch parse_mess() bearbeitet.
Die erhaltenen Texte werden mit break_string umgebrochen. Es sind
also keine Umbrueche noetig, aber moeglich. Moechte man selber
break_string verwenden (wie im Beispiel unten), dann ist darauf
zu achten, dass man mit dem in /sys/defines.h definierten
BS_STDLEN umbricht.
Im NPC (/players/bongo/tester.c):
mixed func1();
create()
{
...
::create();
...
...
...
SetProp(P_INVINCIBLE, ({#'func1,
"&&WESSEN&& Angriff wird abgewehrt."})
...
...
...
}
mixed func1()
{
string text;
object player;
player = this_player();
if (player->QueryProp(P_GENDER)==FEMALE)
{
text = "schwache Henne";
player->SetProp(P_TITLE, "ist eine "+text);
}
else
{
text = "Schwaechling";
player->SetProp(P_TITLE, "ist ein "+text);
}
return break_string("Was willst Du "+text+" denn von mir. "
+"Verschwinde. Ich habe heute besseres zu tun als Dir "
+"Manieren beizubringen.",BS_STDLEN, "Der Tester hoehnt: ");
}
Bei einem Angriff wird nun der Titel des Angreifers gesetzt und
folgende Meldungen ausgegeben:
- An den Angreifer:
Der Tester hoehnt: Was willst Du Schwaechling denn von mir. "
Verschwinde. Ich habe heute besseres zu "
tun als Dir Manieren beizubringen.
- An den Raum:
Bongos Angriff wird abgewehrt.
SIEHE AUCH:
parse_mess(S), Defend(L), IsInvincible(L)
|