blob: 6791d4e03c043ec1f604725683f33118905ee3a6 [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::
32
33 Dem Spieler wird ein neues Kommando definiert. Dieses kann eine Methode
34 in ihm sein, so wie bei allen Spielerkommandos ueblich, kann aber auch
35 eine Closure (Lfun-Closure oder Lambda) enthalten.
36
37 Mittels "flag" kann man die Kommandoerkennung unscharf halten, d.h. wie
38 bei AddCmd(L) und add_action(E) wird ein 'cmd' bei 'flag = 1' auch
39 schon von Praefix-Strings (hier ohne Leerzeichen) getriggert:
40 AddAction([...], "muh", 1, 0) wird zB auch von 'muhtens' oder 'muh4'
41 ausgeloest.
42
43 Mit "lvl" begrenzt man die Ausfuehrbarkeit. Spieler haben ein
44 Magierlevel von 0, Seher von 1.
45
46 Das Kommando wird in P_LOCALCMDS eingetragen. Diese Property wird
47 nicht gespeichert! Effektiv kann man mit AddAction() ein kommando-
48 gebendes Objekt im Spieler einsparen.
49
50BEMERKUNGEN
51-----------
52::
53
54 - es gibt _noch_ kein RemoveAction! Per Hand in P_LOCALCMDS editieren
55 kann zu ernsten Fehlern fuehren.
56 - echte Spielerkommandos kann man damit _nicht_ ueberschreiben,
57 ein AddAction(...,"sag",1,0); funktioniert nicht
58 - ein generelles AddAction(...,"",1,0); geht nicht
59
60BEISPIELE
61---------
62::
63
64 ...
65 this_player()->AddAction(symbol_function("zeige_mysterium",
66 find_object(".../mystzeiger")),
67 "knorfula",0,0);
68 write(break_string("Wann immer du jetzt das Kommando \"knorfula\" "
69 "eingibst, werden dir Mysterien enthuellt!",78));
70 ...
71
72 // im Objekt "knorfula" ...
73 int zeige_mysterium(string str) {
74 string myst;
75 myst=environment(TP)->QueryMysterium(str);
76 if(myst) {
77 write("Du hast ein Mysterium entdeckt!\n");
78 write(break_string(myst,78));
79 say(break_string(
80 TP->Name(WER)+" scheint nach kurzer Konzentration etwas "
81 "entdeckt zu haben!",78));
82 } else {
83 write(break_string(
84 "Leider entdeckst du trotz deiner magischen Faehigkeit "
85 "kein Mysterium in deiner Umgebung.",78));
86 say(break_string(
87 TP->Name(WER)+" konzentriert sich sichtbar, sieht dann "
88 "jedoch etwas enttaeuscht aus.",78));
89 }
90 return 1;
91 }
92
93SIEHE AUCH
94----------
95::
96
97 P_LOCALCMDS
98 Fehlermeldungen: notify_fail(E), _notify_fail(E)
99 Argumentstring: query_verb(E), _unparsed_args(L)
100 Sonstiges: replace_personal(E), enable_commands(E)
101 Alternativen: AddCmd(L), add_action(E)
102
10324. Maerz 2004 Gloinson
104