blob: 462e78f28287c45151bcedf2e3586a027a2dfe44 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001AddAction()
2===========
3
4AddAction(L)
5------------
6::
7
8FUNKTION
9--------
10::
11
12 varargs void AddAction(mixed fun, mixed cmd, int flag, int lvl);
13
14DEFINIERT IN
15------------
16::
17
18 /std/player/command.c
19
20ARGUMENTE
21---------
22::
23
24 fun zu rufende Methode im Spieler oder eine Closure
25 cmd ausloesendes Kommandoverb
26 flag unscharf ausfuehren
27 lvl ab welchem (Magierlevel) funktioniert das Kommando
28
29BESCHREIBUNG
30------------
31::
Zesstra4ab6ee52018-12-10 21:21:19 +010032
33 Vorweg: Da es keine (risikolose) Moeglichkeit gibt, ein so definiertes
34 Kommando auch wieder zu entfernen, wird von der Verwendung eher
35 abgeraten. Es sei denn, ihr wisst, dass euer Kommando nicht wieder (ohne
36 ende/reboot) entfernt werden soll.
Zesstra18626972017-01-31 10:38:27 +010037
38 Dem Spieler wird ein neues Kommando definiert. Dieses kann eine Methode
39 in ihm sein, so wie bei allen Spielerkommandos ueblich, kann aber auch
40 eine Closure (Lfun-Closure oder Lambda) enthalten.
41
42 Mittels "flag" kann man die Kommandoerkennung unscharf halten, d.h. wie
43 bei AddCmd(L) und add_action(E) wird ein 'cmd' bei 'flag = 1' auch
44 schon von Praefix-Strings (hier ohne Leerzeichen) getriggert:
45 AddAction([...], "muh", 1, 0) wird zB auch von 'muhtens' oder 'muh4'
46 ausgeloest.
47
48 Mit "lvl" begrenzt man die Ausfuehrbarkeit. Spieler haben ein
49 Magierlevel von 0, Seher von 1.
50
51 Das Kommando wird in P_LOCALCMDS eingetragen. Diese Property wird
52 nicht gespeichert! Effektiv kann man mit AddAction() ein kommando-
53 gebendes Objekt im Spieler einsparen.
54
55BEMERKUNGEN
56-----------
57::
58
59 - es gibt _noch_ kein RemoveAction! Per Hand in P_LOCALCMDS editieren
60 kann zu ernsten Fehlern fuehren.
61 - echte Spielerkommandos kann man damit _nicht_ ueberschreiben,
62 ein AddAction(...,"sag",1,0); funktioniert nicht
63 - ein generelles AddAction(...,"",1,0); geht nicht
64
65BEISPIELE
66---------
67::
68
69 ...
70 this_player()->AddAction(symbol_function("zeige_mysterium",
71 find_object(".../mystzeiger")),
72 "knorfula",0,0);
73 write(break_string("Wann immer du jetzt das Kommando \"knorfula\" "
74 "eingibst, werden dir Mysterien enthuellt!",78));
75 ...
76
77 // im Objekt "knorfula" ...
78 int zeige_mysterium(string str) {
79 string myst;
80 myst=environment(TP)->QueryMysterium(str);
81 if(myst) {
82 write("Du hast ein Mysterium entdeckt!\n");
83 write(break_string(myst,78));
84 say(break_string(
85 TP->Name(WER)+" scheint nach kurzer Konzentration etwas "
86 "entdeckt zu haben!",78));
87 } else {
88 write(break_string(
89 "Leider entdeckst du trotz deiner magischen Faehigkeit "
90 "kein Mysterium in deiner Umgebung.",78));
91 say(break_string(
92 TP->Name(WER)+" konzentriert sich sichtbar, sieht dann "
93 "jedoch etwas enttaeuscht aus.",78));
94 }
95 return 1;
96 }
97
98SIEHE AUCH
99----------
100::
101
102 P_LOCALCMDS
103 Fehlermeldungen: notify_fail(E), _notify_fail(E)
104 Argumentstring: query_verb(E), _unparsed_args(L)
105 Sonstiges: replace_personal(E), enable_commands(E)
106 Alternativen: AddCmd(L), add_action(E)
107
10824. Maerz 2004 Gloinson
109