blob: dcafe7630a64a4f1b69913cd5318687af9035b3f [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001command_me()
2============
3
4FUNKTION
5--------
6::
7
8 int command_me(string str)
9
10ARGUMENTE
11---------
12::
13
14 string str - auszufuehrendes Kommando
15
16DEFINIERT IN
17------------
18::
19
20 /std/npc.c, /std/player/command.c
21
22BESCHREIBUNG
23------------
24::
25
26 Fuehrt 'str' wie ein Kommando aus, welches direkt vom Living
27 abgegeben wurde.
28
29 Der Rueckgabewert ist >=1 fuer Erfolg und 0 fuer Misserfolg.
30 Rueckgabewert ist im Erfolgsfall die Hoehe der EvalCost in Ticks.
31
32 command_me() leitet den Befehl an command()(E) weiter und erlaubt
Zesstrab65314f2019-03-16 13:24:48 +010033 dadurch auch den Aufruf von sonst durch "static" vor externem Aufruf
34 geschuetzten Kommando-Funktionen.
35
Zesstra18626972017-01-31 10:38:27 +010036 Kommandos mit oeffentlichen Kommandofunktionen (also damit alle mit
37 AddCmd definierten Kommandos) koennen auch durch command()(E)
38 von aussen ausgeloest werden.
39
Zesstrab65314f2019-03-16 13:24:48 +010040
41BEMERKUNGEN
42-----------
43::
44
Zesstra18626972017-01-31 10:38:27 +010045 - beruecksichtigt Aliase, d.h. wenn man Aliase eines Spielers
46 ignorieren will, muss man ein \\ (fuer ein \ im Eingabestring)
47 vor den Befehl stellen
48 - fuer objektinterne Kommandos funktioniert also auch command()(E)
49
50BEISPIEL
51--------
52::
53
54 (Code des Testraum ist in /doc/beispiele/testobjekte/command_me_testraum)
55 // #1: Testraum, zwinge Spieler bei "schleiche heran" zum Furzen
56 // command_me() ist hier noetig, da das Furzen eine geschuetzte
57 // Kommandofunktion hat
58 inherit "/std/room";
59
60 void create() {
61 ::create();
62 AddCmd("schleiche&heran|herum", "action_schleichen");
63 }
64
65
66
67 void init() {
68 ::init();
69 add_action("action_kriechen", "kriech", 1);
70 }
71
72 static int action_schleichen(string str) {
73 string tmp = this_player()->QueryProp(P_RACE);
74 // ...
75 if(tmp[<1]=='e') tmp=tmp[0..<2];
76 write(break_string("Du versuchst leise zu schleichen, dabei passiert "
77 "dir aber ein allzu "+
78 (tmp=="Mensch"?"menschliches":lower_case(tmp)+"isches")+
79 " Missgeschick. Verflucht!", 78));
80 this_player()->command_me("\\furze");
81 return 1;
82 }
83
84
85
86 static int action_kriechen(string str) {
87 write(break_string("Deine Knie tun zu sehr weh dafuer.", 78));
88 tell_room(this_object(), break_string(this_player()->Name(WER)+
89 " knackt mit den Knien.", 78));
90 return 1;
91 }
92
93
94
95 // #2 (in obigem Raum): zwinge Spieler in Raum zu obigem Kommando
96 // Beide Kommandos gelingen, da Kommando mit AddCmd definiert.
97 find_player("naddl")->command_me("schleiche herum")
98 command("schleiche herum", find_player("naddl"));
99
100 // #3 (in obigem Raum): zwinge Spieler in Raum zu obigem Kommando
101 find_player("naddl")->command_me("krieche")
102 // Folgendes Kommando schlaegt fehl, da Kommandofunktion static ist.
103 command("krieche", find_player("naddl"));
104
105
106
107SIEHE AUCH
108----------
109::
110
111 enable_commands(E), command(E)
112
11306 Sep 2012 Gloinson
114