| // MorgenGrauen MUDlib |
| // |
| // player/soulhelp.c -- Hilfe zu den Soulkommandos |
| // |
| // $Id: soulhelp.c 7423 2010-02-07 22:56:38Z Zesstra $ |
| |
| #pragma strong_types,save_types |
| |
| #include <wizlevels.h> |
| #ifdef WECKE |
| #undef WECKE |
| #endif |
| #define WECKE |
| |
| static string *wizcmds, *plrcmds, *ghostcmds; |
| static mapping help; |
| |
| private string HelpVerb(string v); |
| private string* SortIt(string *arr); |
| |
| |
| /** |
| Initialisierung |
| */ |
| void create() { |
| plrcmds=({ |
| "zuck", "schmieg", "antworte", "applaudiere", |
| "betaste", "cls", "drehe (daeumchen)", "danke", |
| "druecke", "erroete", "flippe", "frage", |
| "furze", "gaehne", "gluckse", "grinse", |
| "guck", "haetschel", "hickse", "huepfe", |
| "huste", "keuche", "kichere", "klatsche", |
| "knabbere", "knickse", "knirsche", "knurre", |
| "knutsche", "kotze", "kuesse", "lache", |
| "laechle", "liebe", "nicke", "niese", |
| "gib", "pfeife", "ruelpse", "runzle", |
| "schmolle", "schmunzle", "schnippe", "schnarche", |
| "schnurre", "schreie", "schuettle", "seufze", |
| "singe", "sniefe/schniefe", "spucke", "starre", |
| "staune", "stiere", "stoehne", "stosse", |
| "streichle", "tanze", "tritt", "troeste", |
| "umarme", "verneige", "wackle", "waelze", |
| "weine", "winke", "zwinkere", "verben", |
| "aechze", "erbleiche", "fluche", "verfluche", |
| "kitzle", "nein", "deute", // "zeige", |
| "denke [text]", "knuddle", "taetschel", "wuschel", |
| "strecke ... [die] zunge raus", "kratz", |
| "grummel", "jubel / juble ... [zu]", "wuerg", |
| "gratuliere / beglueckwuensche", "raeusper", |
| "argl", "rotfl", "grunz", "kuschel", "atme ... auf", |
| "freue", "sniff", "grueble", "bohre ... [in der nase]", |
| "putze [nase]", "bibbere", "quietsche/quieke", "schluchze", |
| "schnaufe", "schnaube", "philosophiere", "sabbere", |
| "stimme [...] zu", "krieche", "mustere", "schaeme", |
| "schnalze ... [zunge]", "stampfe ... [auf]", "zitiere", "lobe", |
| "quake", "reibe ... [die] Augen|Haende", "stutze", "schweige", |
| "klopfe", "wundere", "stupse", "brummel", "entschuldige", |
| "mopper", "zeige", "traeume", "begruesse","jammer", |
| }); |
| #ifdef WECKE |
| plrcmds+=({"wecke"}); |
| #endif |
| wizcmds=({ |
| "kick", "splash", "flame", |
| }); |
| ghostcmds=({ |
| "rassel/rassle", "heule", "erschrecke", |
| }); |
| // Aufbau des help-mappings: |
| // key : Verb, wie es in soul.c in CHECK_HELP geschrieben ist |
| // entry 1: &n = [<Name>] &a = [<Adverb>] &t=[<Text>} |
| // ! danach heisst noetige Angabe, also ohne [] |
| // entry 2: &g = Verhaelt sich bei Geistern anders |
| // &a = Man kann "alle" als Ziel angeben |
| // &d = Defaultadverb; muss am Ende angegeben werden |
| help=([ |
| "zuck" : "&a [[mit [den]] schultern]"; "Gibt man nicht mindestens " |
| +"\"schultern\" an, so zuckt man zusammen. Das Defaultadverb gilt " |
| +"nur fuer das Schulterzucken.&dratlos", |
| "schmieg" : "&n &a"; "", |
| "antwort" : "&n &t!"; "", |
| "applaudier" : "&n &a"; "&g&a", |
| "begruess" : "&n! &a"; "", |
| "betast" : "&n! &a"; "", |
| "bibber" : "&a"; "", |
| "bohr" : "&a [[in [der]] nase]"; "", |
| "brummel" : "&a | &t"; "", |
| "cls" : ""; "Loescht den Bildschirm auf vt100-kompatiblen Terminals.", |
| "dreh" : "&a [daeumchen | daumen]"; "", |
| "dank" : "&n! &a"; "", |
| "drueck" : "&n! &a"; "&g&a&dzaertlich", |
| "entschuldig" : "&n &a"; "", |
| "erroet" : "&a"; "&g", |
| "erschreck" : "&n! &a"; "&g&dfuerchterlich", |
| "flipp" : "&a"; "&dtotal", |
| "frag" : "&n![|]&t!"; "", |
| "freu" : "&n &a"; "", |
| "furz" : "&a"; "&gHinterlaesst eine duftige Erinnerung im Raum.", |
| "gaehn" : "&a"; "&g", |
| "glucks" : "&a"; "&dwie ein Huhn", |
| "gratulier" : "&n! &a"; "", |
| "grins" : "&n &a"; "&g&a", |
| "gruebel" : "&a"; "", |
| "grummel" : "&a"; "", |
| "guck" : "&a"; "", |
| "haetschel" : "&n! &a"; "&g&a", |
| "hicks" : "&a"; "&g", |
| "huepf" : "&n &a"; "&g", |
| "hust" : "&n &a"; "&g", |
| "jubel" : "&n &a"; "", |
| "jammer" : "&a"; "", |
| "keuch" : "&a"; "&g&dvor Anstrengung", |
| "kicher" : "&n &a"; "", |
| "klatsch" : "&a"; "&g", |
| "klopf" : "&n! &a"; "", |
| "knabber" : "&n! &a"; "&g", |
| "knicks" : "&n &a"; "&g&a", |
| "knirsch" : "&a"; "&g", |
| "knurr" : "&n &a"; "&a", |
| "knutsch" : "&n! &a"; "&g", |
| "kotz" : "&n &a"; "&g", |
| "kriech" : "&n &a"; "", |
| "kuess" : "&n! &a"; "&gKann ausserdem bei bestimmten Gelegenheiten " |
| +"gewisse Nebeneffekte haben.", |
| "lach" : "&n &a"; "&g&a", |
| "laechel" : "&n &a"; "&g&a", |
| "lieb" : "&n! &a"; "", |
| "lob" : "{&n! &a} | &t!"; "Kann einen Nebeneffekt haben.", |
| "mopper" : "&a"; "", |
| "muster" : "&n! &a"; "", |
| "nick" : "&n &a"; "&a&dzustimmend", |
| "nies" : "&a"; "&g", |
| "gib" : "&n! &a [[eine] ohrfeige]"; "&g&a", |
| "pfeif" : "&n &a [nach]"; "&g&danerkennend", |
| "philosophier" : "&a | &t"; "", |
| "putz" : "&a [[die] nase]"; "", |
| "quak" : "&a"; "Geht als Frosch wesentlich besser.", |
| "quiek" : "&a"; "&dvergnuegt", |
| "raeusper" : "&a"; "", |
| "reib" : "&a [[die] Augen] | [[die] Haende]"; "Ohne weitere Angabe reibt " |
| +"man sich die Augen;&dmuede bzw. vergnuegt", |
| "ruelps" : "&a"; "&g", |
| "runzel" : "&a"; "&g", |
| "sabber" : "&n &a"; "", |
| "schaem" : "&a"; "", |
| "schluchz" : "&a"; "&dherzzerreissend", |
| "schmoll" : "&a"; "&g", |
| "schmunzel" : "&a"; "", |
| "schnalz" : "&a [[mit [der]] zunge]"; "", |
| "schnaub" : "&a"; "&dentruestet", |
| "schnauf" : "&a"; "&dvor Anstrengung", |
| "schnipp" : "&a"; "&g", |
| "schnarch" : "&a"; "&g&dlaut", |
| "schnief" : "&a"; "&g", |
| "schnurr" : "&a"; "&dzufrieden", |
| "schrei" : "&n &a"; "&g", |
| "schuettel" : "&n &a"; "&g&aHat einen Unterschied, je nachdem, ob ein Name" |
| +" angegeben wurde oder nicht.", |
| "schweig" : "&a"; "", |
| "seufz" : "&a"; "&g", |
| "sing" : "&a | &t"; "", |
| "sniff" : "&n &a"; "&dtraurig", |
| "spuck" : "&n &a"; "&g", |
| "stampf" : "&a"; "", |
| "starr" : "&n &a"; "Standardadverb gilt hier nur bei Angabe eines Namens." |
| +"&dvertraeumt", |
| "staun" : "&n &a"; "", |
| "stier" : "&n &a"; "&g", |
| "stimm" : "&n &a"; "", |
| "stoehn" : "&a"; "&g", |
| "stoss" : "&n! &a"; "&g", |
| "streichel" : "&n! &a"; "&g&a", |
| "stups" : "&n! &a"; "", |
| "stutz" : "&a"; "", |
| "tanz" : "&n &a"; "&g", |
| "traeum" : "{&n &a} | &t"; "Es koennen Probleme auftreten, wenn ein Adverb" |
| +" in freiem Text erkannt wird. Text wird genau so an \"traeum(s)t\" " |
| +"angehaengt, wie er angegeben wurde.", |
| "tritt" : "&n &a"; "&g&a", |
| "troest" : "&n! &a"; "", |
| "umarm" : "&n! &a"; "&g&a", |
| "verneig" : "&n &a"; "&g&a", |
| "wackel" : "&a [mit &t!]"; "&gMan kann mit allem moeglichem wackeln.", |
| "waelz" : "&a"; "&dvor Lachen", |
| "wart" : "&n &a"; "Man kann auf alles moegliche warten (warte alles " |
| +"moegliche)", |
| "weck" : "&n {&a | &t}"; "Piepst <Name> an und sendet ihm ggf. den Text.", |
| "wein" : "&n &a"; "&g", |
| "wink" : "&n &a"; "&a", |
| "wuerg" : "&n &a"; "", |
| "wunder" : "&n &a"; "", |
| "zeig" : "<Objekt-ID>"; "&aZeigt das Objekt (Langbeschreibung).", |
| "zitier" : "&n &a"; "Hier uebernimmt das Adverb ggf. die Stelle des " |
| +"zitierten, wenn dieser nicht anwesend ist (zitiere Ja /Jof)", |
| "zitter" : "&a"; "", |
| "zwinker" : "&n &a"; "&g", |
| "aechz" : "&a"; "", |
| "argl" : "&a"; "", |
| "atm" : "&a"; "&derleichtert", |
| "bewunder" : "&n! &a"; "", |
| "erbleich" : "&a"; "&g", |
| "fluch" : "&a"; "&g", |
| "grunz" : "&a"; "", |
| "kuschel" : "&n! &a"; "&g", |
| "rotfl" : "&a"; "", |
| "verfluch" : "{&n &a} | &t!"; "", |
| "kitzel" : "&n! &a"; "&g", |
| "nein" : "&a"; "&g", |
| "deut" : "&n! &a"; "&a", |
| "denk" : "&a | &t"; "&g", |
| "knuddel" : "&n! &a"; "&g&a", |
| "kratz" : "&a"; "", |
| "streck" : "&n &a [[die] zunge raus"; "&g", |
| "taetschel" : "&n! &a"; "&g", |
| "wuschel" : "&n! &a"; "", |
| "rassel" : "&a"; "&g&dfuerchterlich", |
| "heul" : "&a"; "&g&dschauerlich", |
| "kick" : "&n &a"; "&g&a", |
| "splash" : "&n! &a"; "&a", |
| "flame" : "&n! &a"; "&g&a", |
| "rknuddel" : "&n! &a"; "Nur fuer Ferngebrauch gedacht.", |
| "rwink" : "&n! &a"; "Nur fuer Ferngebrauch gedacht.", |
| "verb" : ""; "Listet alle derzeit moeglichen Verben auf.", |
| "adverb" : "[# | $ | {? <Abkuerzung>} | <Abkuerzung> [<Adverb>]]"; |
| "Genauere Hilfe mit \"adverb ?\"", |
| ]); |
| } |
| |
| /** |
| Gibt die Hilfe zu einem Verb oder die Verbenuebersicht zurueck |
| \param verb "string" Ein Verb dessen Hilfe angezeigt werden soll. |
| 0 oder "" Ueberblicksseite |
| \return String der an den Spieler ausgegeben werden kann. |
| */ |
| string Help(string verb) { |
| string out; |
| if (verb && verb!="") |
| return HelpVerb(verb); |
| out=""; |
| out+=break_string("Standardverben:\n"+implode(SortIt(plrcmds), ", ") |
| +".", 78, 0, 1); |
| if (IS_WIZARD(this_player())) |
| out+="\n"+break_string("Magierverben:\n"+implode(SortIt(wizcmds), ", ") |
| +".", 78, 0, 1); |
| if (this_player()->ghost()) |
| out+="\n"+break_string("Geisterverben:\n"+implode(SortIt(ghostcmds), ", ") |
| +".", 78, 0, 1); |
| out+=break_string("\nAdverbien koennen entweder in der Abkuerzung (bei " |
| +"bereits definierten Adverbien) oder mit \"/<Text>\" angegeben werden. " |
| +"Bei der zweiten Methode wird <Text> so, wie er angegeben wurde, an " |
| +"Stelle des Adverbs eingesetzt.", 78, 0, 1); |
| out+="\n"+break_string("Eine kurze Hilfe zu einem Verb bekommst du mit einem der " |
| +"Befehle \"<Verb> -?\", \"<Verb> /?\", \"<Verb> -h\", \"<Verb> /h\" oder " |
| +"\"<Verb> hilfe\". (Da war jemand wirklich fleissig).", 78); |
| return out+"\n"+break_string("Einige Befehle reagieren auch auf leicht " |
| +"unterschiedliche Schreibweise. Diese Befehlsliste kann sich mit Deinem " |
| +"Zustand aendern.", 78); |
| } |
| |
| /** |
| Sortiert ein array of string alphabetisch. |
| \param arr Das zu sortierende Array |
| \return Sortierte Kopie des Arrays |
| */ |
| private string* |
| SortIt(string *arr) { |
| return sort_array(arr, |
| function int (string x, string y){ |
| return lower_case(x) > lower_case(y) ; |
| } |
| ); |
| } |
| |
| #define NO_MORE_E ({"cls","flipp","gruebel","grummel","guck","haetschel",\ |
| "jubel","laechel","gib","runzel","schmunzel","schuettel","sniff",\ |
| "streichel","tritt", "wackel","argl","rotfl","kuschel","kitzel","knuddel",\ |
| "taetschel","wuschel","rassel","kick","splash","flame","verb","adverb",\ |
| "nein","brummel","mopper",}) |
| |
| /** |
| Gibt die Hilfe zu einem Verb |
| \param v Ein Verb dessen Hilfe angezeigt werden soll. |
| \return Hilfe zum Verb in Form eines Strings |
| */ |
| private string |
| HelpVerb(string v) { |
| string h,t; |
| if (member(m_indices(help),v)<0) |
| return "Dazu ist keine Hilfe vorhanden.\n"; |
| h="Syntax:\n* "+v; |
| if (member(NO_MORE_E, v)<0) |
| h+="e"; |
| h+=" "; |
| t=help[v,0]; |
| t=implode(explode(t,"&t!"), "<Text>"); |
| t=implode(explode(t,"&n!"), "<Name>"); |
| t=implode(explode(t,"&t"), "[<Text>]"); |
| t=implode(explode(t,"&n"), "[<Name>]"); |
| t=implode(explode(t,"&a"), "[<Adverb>]"); |
| h+=t; |
| t=help[v,1]; |
| if (t!="") { |
| h+="\nBemerkungen:"; |
| if ((explode(t,"&"))[0]!="") |
| t="\n"+break_string((explode(t,"&"))[0], 76, "* ", 1)[0..<2] |
| +"&"+implode((explode(t,"&"))[1..<1],"&"); |
| t=implode(explode(t,"&g"), "\n* Verhaelt sich bei Geistern anders " |
| +"als sonst."); |
| t=implode(explode(t,"&a"), "\n* Bei diesem Verb geht alle(n) als " |
| +"Zielangabe."); |
| if (strstr(t,"&d")>=0) { |
| t=implode(explode(t,"&d"), "\n* Standardadverb ist "); |
| t+="."; |
| } |
| } |
| return break_string(h+t, 78, 2, 1); |
| } |