blob: df3eaf3a0e69b133529d4d55b30443cad27315c5 [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
33 dadurch auch den Aufruf von sonst durch "static", "protected" oder
34 "private" vor externem Aufruf geschuetzten Kommando-Funktionen.
35
36 Kommandos mit oeffentlichen Kommandofunktionen (also damit alle mit
37 AddCmd definierten Kommandos) koennen auch durch command()(E)
38 von aussen ausgeloest werden.
39
40BEMERKUNGEN:
41 - beruecksichtigt Aliase, d.h. wenn man Aliase eines Spielers
42 ignorieren will, muss man ein \\ (fuer ein \ im Eingabestring)
43 vor den Befehl stellen
44 - fuer objektinterne Kommandos funktioniert also auch command()(E)
45
46BEISPIEL
47--------
48::
49
50 (Code des Testraum ist in /doc/beispiele/testobjekte/command_me_testraum)
51 // #1: Testraum, zwinge Spieler bei "schleiche heran" zum Furzen
52 // command_me() ist hier noetig, da das Furzen eine geschuetzte
53 // Kommandofunktion hat
54 inherit "/std/room";
55
56 void create() {
57 ::create();
58 AddCmd("schleiche&heran|herum", "action_schleichen");
59 }
60
61
62
63 void init() {
64 ::init();
65 add_action("action_kriechen", "kriech", 1);
66 }
67
68 static int action_schleichen(string str) {
69 string tmp = this_player()->QueryProp(P_RACE);
70 // ...
71 if(tmp[<1]=='e') tmp=tmp[0..<2];
72 write(break_string("Du versuchst leise zu schleichen, dabei passiert "
73 "dir aber ein allzu "+
74 (tmp=="Mensch"?"menschliches":lower_case(tmp)+"isches")+
75 " Missgeschick. Verflucht!", 78));
76 this_player()->command_me("\\furze");
77 return 1;
78 }
79
80
81
82 static int action_kriechen(string str) {
83 write(break_string("Deine Knie tun zu sehr weh dafuer.", 78));
84 tell_room(this_object(), break_string(this_player()->Name(WER)+
85 " knackt mit den Knien.", 78));
86 return 1;
87 }
88
89
90
91 // #2 (in obigem Raum): zwinge Spieler in Raum zu obigem Kommando
92 // Beide Kommandos gelingen, da Kommando mit AddCmd definiert.
93 find_player("naddl")->command_me("schleiche herum")
94 command("schleiche herum", find_player("naddl"));
95
96 // #3 (in obigem Raum): zwinge Spieler in Raum zu obigem Kommando
97 find_player("naddl")->command_me("krieche")
98 // Folgendes Kommando schlaegt fehl, da Kommandofunktion static ist.
99 command("krieche", find_player("naddl"));
100
101
102
103SIEHE AUCH
104----------
105::
106
107 enable_commands(E), command(E)
108
10906 Sep 2012 Gloinson
110