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