MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | // 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 | |
| 15 | static string *wizcmds, *plrcmds, *ghostcmds; |
| 16 | static mapping help; |
| 17 | |
| 18 | private string HelpVerb(string v); |
| 19 | private string* SortIt(string *arr); |
| 20 | |
| 21 | |
| 22 | /** |
| 23 | Initialisierung |
| 24 | */ |
| 25 | void 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 | */ |
| 235 | string 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 | */ |
| 265 | private string* |
| 266 | SortIt(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 | */ |
| 285 | private string |
| 286 | HelpVerb(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 | } |