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