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