blob: 0e8913bfeb38f7136814ae5e7eaeea19d9cb8df4 [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001AddAction()
2===========
3
Zesstra18626972017-01-31 10:38:27 +01004FUNKTION
5--------
Zesstra18626972017-01-31 10:38:27 +01006
7 varargs void AddAction(mixed fun, mixed cmd, int flag, int lvl);
8
9DEFINIERT IN
10------------
Zesstra18626972017-01-31 10:38:27 +010011
12 /std/player/command.c
13
14ARGUMENTE
15---------
Zesstra18626972017-01-31 10:38:27 +010016
Zesstrad183f302019-01-07 20:59:54 +010017 fun
18 zu rufende Methode im Spieler oder eine Closure
19 cmd
20 ausloesendes Kommandoverb
21 flag
22 unscharf ausfuehren
23 lvl
24 ab welchem (Magierlevel) funktioniert das Kommando
Zesstra18626972017-01-31 10:38:27 +010025
26BESCHREIBUNG
27------------
Zesstra4ab6ee52018-12-10 21:21:19 +010028
29 Vorweg: Da es keine (risikolose) Moeglichkeit gibt, ein so definiertes
30 Kommando auch wieder zu entfernen, wird von der Verwendung eher
31 abgeraten. Es sei denn, ihr wisst, dass euer Kommando nicht wieder (ohne
32 ende/reboot) entfernt werden soll.
Zesstra18626972017-01-31 10:38:27 +010033
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
51BEMERKUNGEN
52-----------
Zesstra18626972017-01-31 10:38:27 +010053
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---------
Zesstrad183f302019-01-07 20:59:54 +010062
63.. code-block:: pike
Zesstra18626972017-01-31 10:38:27 +010064
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 ...
Zesstra18626972017-01-31 10:38:27 +010072 // 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
Zesstrad183f302019-01-07 20:59:54 +010093
Zesstra18626972017-01-31 10:38:27 +010094SIEHE AUCH
95----------
Zesstra18626972017-01-31 10:38:27 +010096
Zesstrad183f302019-01-07 20:59:54 +010097 Properties:
98 :doc:`../props/P_LOCALCMDS`
99 Fehlermeldungen:
100 :doc:`../efun/notify_fail`, :doc:`../sefun/_notify_fail`
101 Argumentstring:
102 :doc:`../efun/query_verb`, :doc:`_unparsed_args`
103 Sonstiges:
104 :doc:`../sefun/replace_personal`, :doc:`../efun/enable_commands`
105 Alternativen:
106 :doc:`AddCmd`, :doc:`../efun/add_action`
Zesstra18626972017-01-31 10:38:27 +0100107
10824. Maerz 2004 Gloinson
109