blob: 27a48f97d2b6bb65ed10a404a226209b08690d95 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001// MorgenGrauen MUDlib
2//
3// player/soulhelp.c -- Hilfe zu den Soulkommandos
4//
5// $Id: soulhelp.c 7423 2010-02-07 22:56:38Z Zesstra $
6
7#pragma strong_types,save_types
8
9#include <wizlevels.h>
10#ifdef WECKE
11#undef WECKE
12#endif
13#define WECKE
14
15static string *wizcmds, *plrcmds, *ghostcmds;
16static mapping help;
17
18private string HelpVerb(string v);
19private string* SortIt(string *arr);
20
21
22/**
23 Initialisierung
24*/
25void create() {
26 plrcmds=({
27 "zuck", "schmieg", "antworte", "applaudiere",
28 "betaste", "cls", "drehe (daeumchen)", "danke",
29 "druecke", "erroete", "flippe", "frage",
30 "furze", "gaehne", "gluckse", "grinse",
31 "guck", "haetschel", "hickse", "huepfe",
32 "huste", "keuche", "kichere", "klatsche",
33 "knabbere", "knickse", "knirsche", "knurre",
34 "knutsche", "kotze", "kuesse", "lache",
35 "laechle", "liebe", "nicke", "niese",
36 "gib", "pfeife", "ruelpse", "runzle",
37 "schmolle", "schmunzle", "schnippe", "schnarche",
38 "schnurre", "schreie", "schuettle", "seufze",
39 "singe", "sniefe/schniefe", "spucke", "starre",
40 "staune", "stiere", "stoehne", "stosse",
41 "streichle", "tanze", "tritt", "troeste",
42 "umarme", "verneige", "wackle", "waelze",
43 "weine", "winke", "zwinkere", "verben",
44 "aechze", "erbleiche", "fluche", "verfluche",
45 "kitzle", "nein", "deute", // "zeige",
46 "denke [text]", "knuddle", "taetschel", "wuschel",
47 "strecke ... [die] zunge raus", "kratz",
48 "grummel", "jubel / juble ... [zu]", "wuerg",
49 "gratuliere / beglueckwuensche", "raeusper",
50 "argl", "rotfl", "grunz", "kuschel", "atme ... auf",
51 "freue", "sniff", "grueble", "bohre ... [in der nase]",
52 "putze [nase]", "bibbere", "quietsche/quieke", "schluchze",
53 "schnaufe", "schnaube", "philosophiere", "sabbere",
54 "stimme [...] zu", "krieche", "mustere", "schaeme",
55 "schnalze ... [zunge]", "stampfe ... [auf]", "zitiere", "lobe",
56 "quake", "reibe ... [die] Augen|Haende", "stutze", "schweige",
57 "klopfe", "wundere", "stupse", "brummel", "entschuldige",
58 "mopper", "zeige", "traeume", "begruesse","jammer",
59 });
60#ifdef WECKE
61 plrcmds+=({"wecke"});
62#endif
63 wizcmds=({
64 "kick", "splash", "flame",
65 });
66 ghostcmds=({
67 "rassel/rassle", "heule", "erschrecke",
68 });
69 // Aufbau des help-mappings:
70 // key : Verb, wie es in soul.c in CHECK_HELP geschrieben ist
71 // entry 1: &n = [<Name>] &a = [<Adverb>] &t=[<Text>}
72 // ! danach heisst noetige Angabe, also ohne []
73 // entry 2: &g = Verhaelt sich bei Geistern anders
74 // &a = Man kann "alle" als Ziel angeben
75 // &d = Defaultadverb; muss am Ende angegeben werden
76 help=([
77 "zuck" : "&a [[mit [den]] schultern]"; "Gibt man nicht mindestens "
78 +"\"schultern\" an, so zuckt man zusammen. Das Defaultadverb gilt "
79 +"nur fuer das Schulterzucken.&dratlos",
80 "schmieg" : "&n &a"; "",
81 "antwort" : "&n &t!"; "",
82 "applaudier" : "&n &a"; "&g&a",
83 "begruess" : "&n! &a"; "",
84 "betast" : "&n! &a"; "",
85 "bibber" : "&a"; "",
86 "bohr" : "&a [[in [der]] nase]"; "",
87 "brummel" : "&a | &t"; "",
88 "cls" : ""; "Loescht den Bildschirm auf vt100-kompatiblen Terminals.",
89 "dreh" : "&a [daeumchen | daumen]"; "",
90 "dank" : "&n! &a"; "",
91 "drueck" : "&n! &a"; "&g&a&dzaertlich",
92 "entschuldig" : "&n &a"; "",
93 "erroet" : "&a"; "&g",
94 "erschreck" : "&n! &a"; "&g&dfuerchterlich",
95 "flipp" : "&a"; "&dtotal",
96 "frag" : "&n![|]&t!"; "",
97 "freu" : "&n &a"; "",
98 "furz" : "&a"; "&gHinterlaesst eine duftige Erinnerung im Raum.",
99 "gaehn" : "&a"; "&g",
100 "glucks" : "&a"; "&dwie ein Huhn",
101 "gratulier" : "&n! &a"; "",
102 "grins" : "&n &a"; "&g&a",
103 "gruebel" : "&a"; "",
104 "grummel" : "&a"; "",
105 "guck" : "&a"; "",
106 "haetschel" : "&n! &a"; "&g&a",
107 "hicks" : "&a"; "&g",
108 "huepf" : "&n &a"; "&g",
109 "hust" : "&n &a"; "&g",
110 "jubel" : "&n &a"; "",
111 "jammer" : "&a"; "",
112 "keuch" : "&a"; "&g&dvor Anstrengung",
113 "kicher" : "&n &a"; "",
114 "klatsch" : "&a"; "&g",
115 "klopf" : "&n! &a"; "",
116 "knabber" : "&n! &a"; "&g",
117 "knicks" : "&n &a"; "&g&a",
118 "knirsch" : "&a"; "&g",
119 "knurr" : "&n &a"; "&a",
120 "knutsch" : "&n! &a"; "&g",
121 "kotz" : "&n &a"; "&g",
122 "kriech" : "&n &a"; "",
123 "kuess" : "&n! &a"; "&gKann ausserdem bei bestimmten Gelegenheiten "
124 +"gewisse Nebeneffekte haben.",
125 "lach" : "&n &a"; "&g&a",
126 "laechel" : "&n &a"; "&g&a",
127 "lieb" : "&n! &a"; "",
128 "lob" : "{&n! &a} | &t!"; "Kann einen Nebeneffekt haben.",
129 "mopper" : "&a"; "",
130 "muster" : "&n! &a"; "",
131 "nick" : "&n &a"; "&a&dzustimmend",
132 "nies" : "&a"; "&g",
133 "gib" : "&n! &a [[eine] ohrfeige]"; "&g&a",
134 "pfeif" : "&n &a [nach]"; "&g&danerkennend",
135 "philosophier" : "&a | &t"; "",
136 "putz" : "&a [[die] nase]"; "",
137 "quak" : "&a"; "Geht als Frosch wesentlich besser.",
138 "quiek" : "&a"; "&dvergnuegt",
139 "raeusper" : "&a"; "",
140 "reib" : "&a [[die] Augen] | [[die] Haende]"; "Ohne weitere Angabe reibt "
141 +"man sich die Augen;&dmuede bzw. vergnuegt",
142 "ruelps" : "&a"; "&g",
143 "runzel" : "&a"; "&g",
144 "sabber" : "&n &a"; "",
145 "schaem" : "&a"; "",
146 "schluchz" : "&a"; "&dherzzerreissend",
147 "schmoll" : "&a"; "&g",
148 "schmunzel" : "&a"; "",
149 "schnalz" : "&a [[mit [der]] zunge]"; "",
150 "schnaub" : "&a"; "&dentruestet",
151 "schnauf" : "&a"; "&dvor Anstrengung",
152 "schnipp" : "&a"; "&g",
153 "schnarch" : "&a"; "&g&dlaut",
154 "schnief" : "&a"; "&g",
155 "schnurr" : "&a"; "&dzufrieden",
156 "schrei" : "&n &a"; "&g",
157 "schuettel" : "&n &a"; "&g&aHat einen Unterschied, je nachdem, ob ein Name"
158 +" angegeben wurde oder nicht.",
159 "schweig" : "&a"; "",
160 "seufz" : "&a"; "&g",
161 "sing" : "&a | &t"; "",
162 "sniff" : "&n &a"; "&dtraurig",
163 "spuck" : "&n &a"; "&g",
164 "stampf" : "&a"; "",
165 "starr" : "&n &a"; "Standardadverb gilt hier nur bei Angabe eines Namens."
166 +"&dvertraeumt",
167 "staun" : "&n &a"; "",
168 "stier" : "&n &a"; "&g",
169 "stimm" : "&n &a"; "",
170 "stoehn" : "&a"; "&g",
171 "stoss" : "&n! &a"; "&g",
172 "streichel" : "&n! &a"; "&g&a",
173 "stups" : "&n! &a"; "",
174 "stutz" : "&a"; "",
175 "tanz" : "&n &a"; "&g",
176 "traeum" : "{&n &a} | &t"; "Es koennen Probleme auftreten, wenn ein Adverb"
177 +" in freiem Text erkannt wird. Text wird genau so an \"traeum(s)t\" "
178 +"angehaengt, wie er angegeben wurde.",
179 "tritt" : "&n &a"; "&g&a",
180 "troest" : "&n! &a"; "",
181 "umarm" : "&n! &a"; "&g&a",
182 "verneig" : "&n &a"; "&g&a",
183 "wackel" : "&a [mit &t!]"; "&gMan kann mit allem moeglichem wackeln.",
184 "waelz" : "&a"; "&dvor Lachen",
185 "wart" : "&n &a"; "Man kann auf alles moegliche warten (warte alles "
186 +"moegliche)",
187 "weck" : "&n {&a | &t}"; "Piepst <Name> an und sendet ihm ggf. den Text.",
188 "wein" : "&n &a"; "&g",
189 "wink" : "&n &a"; "&a",
190 "wuerg" : "&n &a"; "",
191 "wunder" : "&n &a"; "",
192 "zeig" : "<Objekt-ID>"; "&aZeigt das Objekt (Langbeschreibung).",
193 "zitier" : "&n &a"; "Hier uebernimmt das Adverb ggf. die Stelle des "
194 +"zitierten, wenn dieser nicht anwesend ist (zitiere Ja /Jof)",
195 "zitter" : "&a"; "",
196 "zwinker" : "&n &a"; "&g",
197 "aechz" : "&a"; "",
198 "argl" : "&a"; "",
199 "atm" : "&a"; "&derleichtert",
200 "bewunder" : "&n! &a"; "",
201 "erbleich" : "&a"; "&g",
202 "fluch" : "&a"; "&g",
203 "grunz" : "&a"; "",
204 "kuschel" : "&n! &a"; "&g",
205 "rotfl" : "&a"; "",
206 "verfluch" : "{&n &a} | &t!"; "",
207 "kitzel" : "&n! &a"; "&g",
208 "nein" : "&a"; "&g",
209 "deut" : "&n! &a"; "&a",
210 "denk" : "&a | &t"; "&g",
211 "knuddel" : "&n! &a"; "&g&a",
212 "kratz" : "&a"; "",
213 "streck" : "&n &a [[die] zunge raus"; "&g",
214 "taetschel" : "&n! &a"; "&g",
215 "wuschel" : "&n! &a"; "",
216 "rassel" : "&a"; "&g&dfuerchterlich",
217 "heul" : "&a"; "&g&dschauerlich",
218 "kick" : "&n &a"; "&g&a",
219 "splash" : "&n! &a"; "&a",
220 "flame" : "&n! &a"; "&g&a",
221 "rknuddel" : "&n! &a"; "Nur fuer Ferngebrauch gedacht.",
222 "rwink" : "&n! &a"; "Nur fuer Ferngebrauch gedacht.",
223 "verb" : ""; "Listet alle derzeit moeglichen Verben auf.",
224 "adverb" : "[# | $ | {? <Abkuerzung>} | <Abkuerzung> [<Adverb>]]";
225 "Genauere Hilfe mit \"adverb ?\"",
226 ]);
227}
228
229/**
230 Gibt die Hilfe zu einem Verb oder die Verbenuebersicht zurueck
231 \param verb "string" Ein Verb dessen Hilfe angezeigt werden soll.
232 0 oder "" Ueberblicksseite
233 \return String der an den Spieler ausgegeben werden kann.
234*/
235string Help(string verb) {
236 string out;
237 if (verb && verb!="")
238 return HelpVerb(verb);
239 out="";
240 out+=break_string("Standardverben:\n"+implode(SortIt(plrcmds), ", ")
241 +".", 78, 0, 1);
242 if (IS_WIZARD(this_player()))
243 out+="\n"+break_string("Magierverben:\n"+implode(SortIt(wizcmds), ", ")
244 +".", 78, 0, 1);
245 if (this_player()->ghost())
246 out+="\n"+break_string("Geisterverben:\n"+implode(SortIt(ghostcmds), ", ")
247 +".", 78, 0, 1);
248 out+=break_string("\nAdverbien koennen entweder in der Abkuerzung (bei "
249 +"bereits definierten Adverbien) oder mit \"/<Text>\" angegeben werden. "
250 +"Bei der zweiten Methode wird <Text> so, wie er angegeben wurde, an "
251 +"Stelle des Adverbs eingesetzt.", 78, 0, 1);
252 out+="\n"+break_string("Eine kurze Hilfe zu einem Verb bekommst du mit einem der "
253 +"Befehle \"<Verb> -?\", \"<Verb> /?\", \"<Verb> -h\", \"<Verb> /h\" oder "
254 +"\"<Verb> hilfe\". (Da war jemand wirklich fleissig).", 78);
255 return out+"\n"+break_string("Einige Befehle reagieren auch auf leicht "
256 +"unterschiedliche Schreibweise. Diese Befehlsliste kann sich mit Deinem "
257 +"Zustand aendern.", 78);
258}
259
260/**
261 Sortiert ein array of string alphabetisch.
262 \param arr Das zu sortierende Array
263 \return Sortierte Kopie des Arrays
264*/
265private string*
266SortIt(string *arr) {
267 return sort_array(arr,
268 function int (string x, string y){
269 return lower_case(x) > lower_case(y) ;
270 }
271 );
272}
273
274#define NO_MORE_E ({"cls","flipp","gruebel","grummel","guck","haetschel",\
275 "jubel","laechel","gib","runzel","schmunzel","schuettel","sniff",\
276 "streichel","tritt", "wackel","argl","rotfl","kuschel","kitzel","knuddel",\
277 "taetschel","wuschel","rassel","kick","splash","flame","verb","adverb",\
278 "nein","brummel","mopper",})
279
280/**
281 Gibt die Hilfe zu einem Verb
282 \param v Ein Verb dessen Hilfe angezeigt werden soll.
283 \return Hilfe zum Verb in Form eines Strings
284*/
285private string
286HelpVerb(string v) {
287 string h,t;
288 if (member(m_indices(help),v)<0)
289 return "Dazu ist keine Hilfe vorhanden.\n";
290 h="Syntax:\n* "+v;
291 if (member(NO_MORE_E, v)<0)
292 h+="e";
293 h+=" ";
294 t=help[v,0];
295 t=implode(explode(t,"&t!"), "<Text>");
296 t=implode(explode(t,"&n!"), "<Name>");
297 t=implode(explode(t,"&t"), "[<Text>]");
298 t=implode(explode(t,"&n"), "[<Name>]");
299 t=implode(explode(t,"&a"), "[<Adverb>]");
300 h+=t;
301 t=help[v,1];
302 if (t!="") {
303 h+="\nBemerkungen:";
304 if ((explode(t,"&"))[0]!="")
305 t="\n"+break_string((explode(t,"&"))[0], 76, "* ", 1)[0..<2]
306 +"&"+implode((explode(t,"&"))[1..<1],"&");
307 t=implode(explode(t,"&g"), "\n* Verhaelt sich bei Geistern anders "
308 +"als sonst.");
309 t=implode(explode(t,"&a"), "\n* Bei diesem Verb geht alle(n) als "
310 +"Zielangabe.");
311 if (strstr(t,"&d")>=0) {
312 t=implode(explode(t,"&d"), "\n* Standardadverb ist ");
313 t+=".";
314 }
315 }
316 return break_string(h+t, 78, 2, 1);
317}