blob: 0e8913bfeb38f7136814ae5e7eaeea19d9cb8df4 [file] [log] [blame]
AddAction()
===========
FUNKTION
--------
varargs void AddAction(mixed fun, mixed cmd, int flag, int lvl);
DEFINIERT IN
------------
/std/player/command.c
ARGUMENTE
---------
fun
zu rufende Methode im Spieler oder eine Closure
cmd
ausloesendes Kommandoverb
flag
unscharf ausfuehren
lvl
ab welchem (Magierlevel) funktioniert das Kommando
BESCHREIBUNG
------------
Vorweg: Da es keine (risikolose) Moeglichkeit gibt, ein so definiertes
Kommando auch wieder zu entfernen, wird von der Verwendung eher
abgeraten. Es sei denn, ihr wisst, dass euer Kommando nicht wieder (ohne
ende/reboot) entfernt werden soll.
Dem Spieler wird ein neues Kommando definiert. Dieses kann eine Methode
in ihm sein, so wie bei allen Spielerkommandos ueblich, kann aber auch
eine Closure (Lfun-Closure oder Lambda) enthalten.
Mittels "flag" kann man die Kommandoerkennung unscharf halten, d.h. wie
bei AddCmd(L) und add_action(E) wird ein 'cmd' bei 'flag = 1' auch
schon von Praefix-Strings (hier ohne Leerzeichen) getriggert:
AddAction([...], "muh", 1, 0) wird zB auch von 'muhtens' oder 'muh4'
ausgeloest.
Mit "lvl" begrenzt man die Ausfuehrbarkeit. Spieler haben ein
Magierlevel von 0, Seher von 1.
Das Kommando wird in P_LOCALCMDS eingetragen. Diese Property wird
nicht gespeichert! Effektiv kann man mit AddAction() ein kommando-
gebendes Objekt im Spieler einsparen.
BEMERKUNGEN
-----------
- es gibt _noch_ kein RemoveAction! Per Hand in P_LOCALCMDS editieren
kann zu ernsten Fehlern fuehren.
- echte Spielerkommandos kann man damit _nicht_ ueberschreiben,
ein AddAction(...,"sag",1,0); funktioniert nicht
- ein generelles AddAction(...,"",1,0); geht nicht
BEISPIELE
---------
.. code-block:: pike
...
this_player()->AddAction(symbol_function("zeige_mysterium",
find_object(".../mystzeiger")),
"knorfula",0,0);
write(break_string("Wann immer du jetzt das Kommando \"knorfula\" "
"eingibst, werden dir Mysterien enthuellt!",78));
...
// im Objekt "knorfula" ...
int zeige_mysterium(string str) {
string myst;
myst=environment(TP)->QueryMysterium(str);
if(myst) {
write("Du hast ein Mysterium entdeckt!\n");
write(break_string(myst,78));
say(break_string(
TP->Name(WER)+" scheint nach kurzer Konzentration etwas "
"entdeckt zu haben!",78));
} else {
write(break_string(
"Leider entdeckst du trotz deiner magischen Faehigkeit "
"kein Mysterium in deiner Umgebung.",78));
say(break_string(
TP->Name(WER)+" konzentriert sich sichtbar, sieht dann "
"jedoch etwas enttaeuscht aus.",78));
}
return 1;
}
SIEHE AUCH
----------
Properties:
:doc:`../props/P_LOCALCMDS`
Fehlermeldungen:
:doc:`../efun/notify_fail`, :doc:`../sefun/_notify_fail`
Argumentstring:
:doc:`../efun/query_verb`, :doc:`_unparsed_args`
Sonstiges:
:doc:`../sefun/replace_personal`, :doc:`../efun/enable_commands`
Alternativen:
:doc:`AddCmd`, :doc:`../efun/add_action`
24. Maerz 2004 Gloinson