Added public files
Roughly added all public files. Probably missed some, though.
diff --git a/std/player/soul.c b/std/player/soul.c
new file mode 100644
index 0000000..438f2c6
--- /dev/null
+++ b/std/player/soul.c
@@ -0,0 +1,3218 @@
+// MorgenGrauen MUDlib
+//
+// player/soul.c -- Die Seele des Spielers
+//
+// $Id: soul.c 9527 2016-03-12 11:37:54Z Arathorn $
+
+// Letzte Aenderung vom 08.09.95 Wargon
+
+// Set TabStop to 2 characters
+
+/* Version 1.41 MG, September 95
+ - Bei "frage" und "antworte" Test auf P_PERM_STRING fuer Sprachflueche.
+ - bugfix bei "schweige" (nahm keine Adverbien an)
+ */
+
+/* Version 1.4 MG, August 95
+ - Hilfefunktion eingebaut, siehe auch soulhelp.c
+ - einige kleinere Aenderungen erst jetzt durch eine neue Version gewuerdigt
+ - neue Verben, wie eigentlich fast immer :>
+ - typos und bugs gefixed (und neue eingebaut...)
+ - Funktion zur Abfrage von Adverbien von aussen eingebaut (Hallo, Anthea :>)
+ - so schlimm kann das doch nicht sein, einen TabStop von 2 zu nehmen, fuer
+ dieses eine file, alles andere zerlegt meine Formatierung immer so :<
+ - koenntet ihr bitte mal oben das "Letzte Aenderung" aendern, wenn ihr
+ irgendwo was aendert?
+ */
+
+/* Version 1.35 MG, Dezember 94
+ - Verben
+ - Aenderung des Parsings der quoted adverbs
+ - rknuddel ignorieren wird vom normalen ignore uebernommen
+ */
+
+/* Version 1.32 MG, Juli 94
+ - einige Verben
+ - ignorieren des rknuddel
+ */
+
+/* Version 1.31 MG, Mai 94
+ - einige Verben
+ */
+
+/* Version 1.3 MG, Mai 94
+ - quoted adverbs GEHEN jetzt
+ - ParseRest / ParseRemote neu geschrieben
+ */
+
+/* Version 1.21 MG, April 94
+ - quoted adverbs
+ */
+
+/* Danke an Angus fuer den Text von "liebe" */
+
+/* Version 1.2 MG, Januar 94
+ - Umstellung der Feelings von vielen kleinen Funktionen auf eine grosse,
+ damit der Funktionsoverhead wegfaellt.
+ - neue Ausgabe der Adverbien, mit more und nur noch eines pro Zeile
+ - mal wieder neue Verben.
+ - und das neue Standardadverb "jofi" :)
+ */
+
+/* Version 1.1 MG, November 93
+ Aenderungen:
+ - Ich habe "alle(n)" eingebaut. Die Verwaltung steht, man kann jetzt
+ Verben die Moeglichkeit "alle" geben (Bsp. "wink alle").
+ - inzwischen wieder einige Verben mehr, aber muss ich das noch
+ erwaehnen?
+ - (HASS) Rumata hat mein schoenes System fuer die Ausgabestrings
+ verkompliziert. Statt &a steht da jetzt z.B. @@adverb@@, was in
+ einer weiteren unnoetigen Funktion resultierte. Naja.
+ Highlander ryn Tahar
+ */
+
+/*
+ Ha! Ich nehme jetzt die erste ganze Versionsnummer fuer mich in Anspruch :)
+ So, heute ist's geschafft (Ich auch...). Ich bin fertig - ich mach nur
+ noch neue Verben rein, wenn Ideen kommen.
+ Gegeben an Dienstag, dem 22. Juni 1993 im heimatlichen Horst.
+ Highlander ryn Tahar.
+ P.S.: Kopiere sich das Ding, wer will - unter folgenden Bedingungen:
+ - Den Goettern von MorgenGrauen und
+ - Highlander@TAPPMud Bescheid sagen und ausserdem
+ *seufz* nehmt Highlander hier in MorgenGrauen!! -HrT
+ Ha! Ihr koennt wieder TAPPMud nehmen :> Aber sagt's ruhig in MG. -HrT
+ - entweder den ganzen Schwall hier drinlassen oder mich mit einem
+ neuen Text erwaehnen.
+ Das Ganze unter der Voraussetzung, dass ueberhaupt mal jemand eine deutsche
+ Seele braucht und sie nicht selber schreiben will :-) (ersparts euch lieber)
+ Highlander ryn Tahar.
+
+ **Arbeit:
+ Einbau von Adverbien, andere Reaktionen bei Geistern als "Wie bitte?",
+ einige neue Verben, einige alte Verben rausgeschmissen.
+ Weil es Probleme mit dem autoloading der playeradverbs gab, wurde
+ ausserdem die soul vom Objekt zum inheritfile fuer die playershell.
+
+ **Ideen zum Weitermachen:
+ - (verb) alle, z.B. tritt alle -- Moeglichkeit eingebaut
+ - Geisterverben mit Adverb
+
+ Version 1.0 fuer MorgenGrauen Highlander Mai/Juni 93
+ */
+
+
+/* Hier ist sie nun, die DEUTSCHE version der soul,
+ viel Spass damit.
+ Poietix Mai 1992
+ Vers.: 0.4 fuer JRMud
+ P.S. bitte meckert nicht dran rum , sondern verbessert und
+ erweitert sie.
+
+ Olpp November 1992
+ Vers.: 0.5 fuer MorgenGrauen
+
+ He, Olpp, schreibt man nicht die neueste Aenderung UEBER die alten?
+ *grins*, Highlander
+ */
+#pragma strong_types
+#pragma save_types
+//#pragma range_check
+#pragma no_clone
+#pragma pedantic
+
+#define SOULHELP "/std/player/soulhelp"
+#define LF "\n"
+#define NOT_SELF 1
+#define NOT_DEAD 1
+
+#define QPP QueryPossPronoun
+#define RETURN return _notify_fail
+#define Return return 0||_notify_fail // netter Trick, muss ich mir merken -HrT
+#define GHOSTCHECK(sel,oth,vic) if (ghost()) { write(sel); say(oth,who||ME);\
+ if (vic) who->Message(vic); return 1; }
+#define HELPCHECK(x) if (str && (str=="-h" || str=="-?" || str=="/h" \
+ || str=="/?" || str=="hilfe"))\
+ { More(SOULHELP->Help(x)); return 1; }
+
+// "schau an" als nicht-Untersuchung. Klappt aber anscheinend nicht, weil
+// ich nicht gegen den GD ankomme. Also besser auskommentiert lassen.
+#ifdef SCHAU_AN
+#undef SCHAU_AN
+#endif
+
+// Anpiepsen mit Text. Im Moment erlaubt, bei Missfallen auskommentieren und
+// in der Hilfe auskommentieren.
+#ifdef WECKE
+#undef WECKE
+#endif
+
+#define WECKE
+
+#define NEED_PROTOTYPES
+#include <thing/description.h>
+#include <thing/properties.h>
+#include <player.h>
+#include <player/comm.h>
+#include <language.h>
+#undef NEED_PROTOTYPES
+
+#include <properties.h>
+
+#include <defines.h>
+#include <moving.h>
+#include <wizlevels.h>
+#include <class.h>
+
+static object who, ofoo;
+static int for_all, flag, ifoo;
+mapping plr_adverbs;
+static string out_sel, out_vic, out_oth, adverb, sfoo;
+
+private void ParseAdverb(string *words);
+private string convert_string(string str);
+varargs mixed More(string str, int fflag, string returnto);
+string MatchAdverb(string str);
+
+mapping
+QueryStdAdverbs() {
+ return ([
+ "unve" : "unverschaemt",
+ "gutg" : "gutgelaunt",
+ "gutm" : "gutmuetig",
+ "froh" : "froh",
+ "glue" : "gluecklich",
+ "wuet" : "wuetend",
+ "frec" : "frech",
+ "daem" : "daemonisch",
+ "boes" : "boese",
+ "ungl" : "ungluecklich",
+ "lang" : "langsam",
+ "schn" : "schnell",
+ "jamm" : "jammernd",
+ "freu" : "freundlich",
+ "shue" : "schuechtern",
+ "amue" : "amuesiert",
+ "aerg" : "aergerlich",
+ "aner" : "anerkennend",
+ "erst" : "erstaunt",
+ "bitt" : "bitter",
+ "brei" : "breit",
+ "vors" : "vorsichtig",
+ "char" : "charmant",
+ "kalt" : "kalt",
+ "verf" : "verfuehrerisch",
+ "zufr" : "zufrieden",
+ "tief" : "tief",
+ "verz" : "verzweifelt",
+ "drec" : "dreckig",
+ "vert" : "vertraeumt",
+ "uebe" : "ueberzeugt",
+ "frus" : "frustriert",
+ "stra" : "strahlend",
+ "hoff" : "hoffnungsvoll",
+ "unge" : "ungeduldig",
+ "unsi" : "unsinnigerweise",
+ "unsc" : "unschuldig",
+ "unwi" : "unwissend",
+ "iron" : "ironisch",
+ "wiss" : "wissend",
+ "gema" : "gemaechlich",
+ "sehn" : "sehnsuechtig",
+ "laut" : "laut",
+ "lieb" : "liebevoll",
+ "froe" : "froehlich",
+ "dank" : "dankbar",
+ "natu" : "natuerlich",
+ "gedu" : "geduldig",
+ "perf" : "perfekt",
+ "vers" : "verspielt",
+ "hoef" : "hoeflich",
+ "stol" : "stolz",
+ "frag" : "fragend",
+ "rupp" : "ruppig",
+ "trau" : "traurig",
+ "vera" : "veraechtlich",
+ "scha" : "schamlos",
+ "erns" : "ernst",
+ "schu" : "schuechtern",
+ "zaer" : "zaertlich",
+ "sanf" : "sanft",
+ "entg" : "entgeistert",
+ "heim" : "heimtueckisch",
+ "gela" : "gelangweilt",
+ "wild" : "wild",
+ "jofi" : "wie Jof, wenn er mal nicht idlet",
+ ]);
+}
+
+mapping
+QueryAdverbs() {
+ if (extern_call())
+ return deep_copy(plr_adverbs);
+ return plr_adverbs;
+}
+
+string
+MatchAdverb(string a) {
+ ParseAdverb(explode(a," "));
+ return adverb;
+}
+
+// Verwaltungsroutinen
+
+static void
+add_soul_commands() {
+ if (!plr_adverbs)
+ plr_adverbs=([]);
+ add_action("SoulComm", "", 1);
+}
+
+static int
+verben_liste() {
+ More(SOULHELP->Help());
+ return 1;
+}
+
+#define ghost() QueryProp(P_GHOST)
+#define frog() QueryProp(P_FROG)
+#define capname() capitalize(name())
+#define gname() (ghost()?(frog()?"Der Geist eines Frosches"\
+ :"Der Geist von "+capname())\
+ :capname())
+
+varargs private void
+ParseRest(string arg, mixed extra) {
+ string wer,wie,*words,quotea;
+ int num,bis;
+ who = for_all = adverb = 0;
+ if (!arg) return;
+ if (extra)
+ if (!pointerp(extra)) {
+ if (sscanf(arg, extra+" %s", wie)==1)
+ arg=wie;
+ }
+ else
+ for (bis=sizeof(extra),num=0; num<bis; num++)
+ if (sscanf(arg, extra[num]+" %s", wie)==1)
+ arg=wie;
+
+ if ((bis=strstr(arg, "/"))>=0)
+ quotea=arg[bis..],arg=arg[0..bis-1];
+ quotea=quotea||"",arg=arg||"";
+
+ words=explode(implode(explode(arg, ","), " und"), " ");
+ if (!sizeof(words)) return;
+ if (sizeof(words) && (words[0]=="alle" || words[0]=="allen"))
+ for_all=1,wer=words[0],words=words[1..];
+ if (!for_all) { /* noch kein Opfer */
+ wer=match_living(lower_case(words[0]));
+ if (stringp(wer)) who=present(wer, environment(ME));
+ if (!who) who=present(words[0], environment(ME));
+ if (who && who->QueryProp(P_INVIS)) who=0;
+ }
+ if (who && sizeof(words))
+ words=words[1..]; /* Opfer gefunden - wenn's eines gibt */
+ words+=explode(quotea, " ");
+ words-=({""});
+ if (sizeof(words)) ParseAdverb(words);
+}
+
+private int
+ParseRemote(string arg) {
+ string wer,*words;
+
+ adverb = 0; // Adverb vom letzten Mal keinesfalls wiederverwenden. ;-)
+
+ if (!stringp(arg) || !sizeof(arg)) return 0;
+
+ words=explode(arg," ");
+
+ mixed liv = match_living(lower_case(words[0]));
+ if (stringp(liv))
+ who=find_player(liv);
+
+ if (who) {
+ // Ziel ist ein Spieler.
+ if (!who->QueryProp(P_INVIS) || IS_WIZARD(ME))
+ {
+ // Spieler ist nicht Invis oder ich bin Magier.
+ string nam = (query_once_interactive(ME) ? getuid() :
+ lower_case(name(RAW)));
+ if (query_verb()[0..5]=="rknudd" &&
+ who->TestIgnore(nam+".rknuddel") )
+ {
+ // ich oder das Kommando werde ignoriert.
+ write(who->Name(WER)+" ignoriert Deinen Knuddelversuch.\n");
+ return 1;
+ }
+ }
+ else
+ // Spieler ist invis und ich bin kein Magier.
+ who = 0;
+ }
+ // kein eingeloggter und sichtbarer Spieler. Vielleicht ein NPC? (BTW: kein
+ // else if, weil im if fuer Spieler oben who genullt werden kann und dann
+ // nochmal nach nem NPC gesucht werden soll.)
+ if (!who) {
+ wer = match_living(lower_case(words[0]));
+ if(stringp(wer))
+ who=present(wer,environment(ME));
+ if (!who) who=present(words[0], environment(ME));
+ if (who && who->QueryProp(P_INVIS)) who=0;
+ }
+
+ if (!who || sizeof(words)==1) return 0;
+ words=words[1..];
+ ParseAdverb(words);
+ return(0);
+}
+
+/**
+ Gibt den passenden Adverb-Text zu einem key zurueck
+ \param s Danach wird in der Adverbien-Liste gesucht
+ \param fuzzy
+ \return Der gefundene Adverbientext oder 0
+ */
+varargs string GetPlayerAdverb( string s, int fuzzy ) {
+ int i, j;
+ string *search_pattern,
+ *search_result,
+ result;
+
+ // Erstmal gucken, ob der String direkt gefunden werden kann
+ // das geht am schnellsten
+ result = QueryStdAdverbs()[s] || plr_adverbs[s];
+
+ // Wenn noch kein Ergebnis gefunden, und man unscharf suchen will
+ if ( fuzzy && !result) {
+
+ // Suchmuster fuer das Intersect erzeugen
+ search_pattern=({s});
+
+ j = sizeof(s)-1;
+ for ( i=2; i < j ;i++) {
+ search_pattern += ({s[0..<i]});
+ }
+
+ // Intersect zwischen allen bekannten Abkuerzungen und Search-Pattern
+ // erzeugen. Dieses wird dann gleichzeitig nach Laenge sortiert
+ // genauester Treffer = String mit groesster Laenge
+ search_result = sort_array(
+ (m_indices(QueryStdAdverbs()) | m_indices(plr_adverbs))&search_pattern,
+ #'>);
+
+ // Adverb zum genauesten Treffer zurueckgeben
+ if (sizeof(search_result))
+ result = QueryStdAdverbs()[search_result[0]] ||
+ plr_adverbs[search_result[0]];
+ }
+
+ return result;
+}
+
+/**
+ Parst die Adverbienparameter fuer Verben und speichert die
+ passende Textausgabe in der globalen Variable "adverb"
+ \param words Array mit den zu parsenden Adverbien-Strings
+*/
+private void
+ParseAdverb(string *words) {
+ int num,andsign,bis;
+ string qadv,*adv,cnt;
+
+ adv=({});
+ qadv=0;
+
+ bis=sizeof(words);
+ // Sonderfall Gequotetes Adverb (alles nach dem Quote) speichern und aus
+ // Words rausschneiden.
+ for (num=0; num<bis; num++)
+ if (words[num][0..0]=="/") {
+ words[num]=words[num][1..];
+ qadv=implode(words[num..], " ");
+ words=words[0..num-1];
+ break;
+ }
+
+ // Es kann sein, dass vor dem Quote noch eine und steht. Das wird jetzt auch
+ // noch entfernt, muss aber spaeter wieder eingefuegt werden.
+ if (sizeof(words) && words[<1]=="und") {
+ words=words[0..<2];
+ andsign=1;
+ }
+
+ // Weitersuchen?
+ if (bis=sizeof(words))
+ for (num=0; num<bis; num+=2)
+ adv+=({GetPlayerAdverb(words[num], 1)});
+ cnt=CountUp(adv-({0}));
+
+ // Ausgabe zusammenbauen
+ if (andsign)
+ adverb=CountUp((sizeof(adv) ? adv : ({}))+(qadv ? ({qadv}) : ({})));
+ else if (sizeof(cnt) && sizeof(qadv))
+ adverb = cnt + " " + qadv;
+ else if (sizeof(qadv))
+ adverb = qadv;
+ else if (sizeof(cnt))
+ adverb = cnt;
+ if (adverb=="") adverb=0;
+}
+
+private mixed MixedOut(int casus) {
+ object *envs,*vics;
+ string *names,out,aufz;
+ int count,msg;
+
+ for_all=0;
+ vics=({});
+ names=({});
+ envs=all_inventory(environment())-({this_player()});
+ if (!(count=sizeof(envs)))
+ RETURN("Nichts und niemand da. Schau Dich naechstes Mal besser um.\n");
+ for ( ; count--; )
+ if (living(envs[count]) && !envs[count]->QueryProp(P_INVIS)) {
+ vics+=({envs[count]});
+ names+=({envs[count]->name(casus)});
+ }
+ if (!sizeof(vics))
+ RETURN("Keiner da. Schau Dich naechstes Mal besser um.\n");
+ aufz=CountUp(names);
+ for (count=sizeof(vics); count--;)
+ {
+ out=implode(explode(out_vic, "@@alle@@"),aufz);
+ out = regreplace( out, "\\<"+vics[count]->name(casus)+"\\>",
+ capitalize(vics[count]->QueryDu(casus)), 0 );
+
+ msg=vics[count]->ReceiveMsg(convert_string(out),MT_COMM,MA_EMOTE,
+ 0,this_object());
+ switch(msg)
+ {
+ case MSG_DELIVERED:
+ case MSG_BUFFERED:
+ break;
+ case MSG_IGNORED:
+ case MSG_VERB_IGN:
+ case MSG_MUD_IGN:
+ write(vics[count]->Name()+" ignoriert Dich oder diesen Befehl.\n");
+ break;
+ default:
+ write(vics[count]->Name()+" konnte Dich gerade nicht lesen.\n");
+ }
+ }
+ write(break_string(convert_string(implode(explode(out_sel,"@@alle@@"),aufz)
+ +LF), 78));
+ return 1;
+}
+
+varargs private int
+CheckLife(int no_self,int no_dead, string no_self_text, string no_dead_text) {
+ if (who && living(who) && who!=this_player()) return 0;
+ if (no_self && who && who==this_player()) {
+ if (no_self_text)
+ write(no_self_text+LF);
+ else
+ write("Mach das mit anderen, nicht mit Dir selber.\n");
+ return 1;
+ }
+ if (who && !living(who) && no_dead) {
+ if (no_dead_text)
+ write(no_dead_text+LF);
+ else
+ write("Das darfst Du nur mit Lebewesen.\n");
+ return 2;
+ }
+ if (!who) {
+ write("Schau Dich erst mal um - das angegebene Objekt ist nicht da.\n");
+ return 3;
+ }
+ return(0); //non-void. Fall-through, alles OK.
+}
+
+private string
+convert_string(string str) {
+ /* Ich bin unschuldig, ich hatte das viel einfacher und schoener :)
+ Rumata wollte das so ;) -HrT */
+ str = implode( explode( str, "@@name@@" ), capname() );
+ str = implode( explode( str, "@@gname@@" ), gname() );
+ str = implode( explode( str, "@@wer@@" ),
+ (who?capitalize(who->name(WER,2)||""):"" ));
+ str = implode( explode( str, "@@ wen@@" ),
+ (who?" "+who->name(WEN,2):""));
+ str = implode( explode( str, "@@ wem@@" ),
+ (who?" "+who->name(WEM,2):""));
+ str = implode( explode( str, "@@wen@@" ),
+ (who?who->name(WEN,2):""));
+ str = implode( explode( str, "@@wem@@" ),
+ (who?who->name(WEM,2):""));
+ str = implode( explode( str, "@@wessen@@" ),
+ (who?who->name(WESSEN,2):""));
+ str = implode( explode( str, "@@adverb@@" ),
+ (adverb?" "+adverb:"") );
+ return str;
+}
+
+private int
+FeelIt() {
+ int msg, flg;
+
+ flg = MSGFLAG_SOUL;
+ if (query_verb() && (query_verb()[0..3]=="frag" || query_verb()[0..3]=="antw"))
+ flg |= MSGFLAG_SAY;
+ if (query_verb() && (query_verb()[0..5]=="rknudd" || query_verb()=="rwink"))
+ flg |= MSGFLAG_REMOTE;
+
+ // NPC haben keine TM-Hist (comm.c). Leider erben aber div. Magier die Soul
+ // (trotzdem sie in /std/player/ liegt) in ihren NPC... *fluch*
+ if (query_once_interactive(ME))
+ _recv(who, break_string(convert_string(out_sel),78), flg);
+ else
+ tell_object(ME, break_string(convert_string(out_sel),78));
+
+ if (out_vic && who) {
+ if (query_once_interactive(who)) {
+ msg=who->Message( break_string(convert_string( out_vic ),78), flg);
+ if (msg==-1)
+ write(who->name()+" ignoriert Dich oder diesen Befehl.\n");
+ } else
+ tell_object(who,break_string(convert_string( out_vic ),78));
+ }
+ if (out_oth)
+ say( break_string(convert_string( out_oth ),78), ({who,this_player()}) );
+ out_sel=out_vic=out_oth=0;
+ return 1;
+}
+
+/**
+ Die Funktion stellt einen Hilfetext zur Verfuegung und listet die
+ definierten Adverbien auf.
+ \param mine 0 = alle Adverbien,
+ 1=nur selbst definierte Adverbien
+ 2=nur die vom System bereitgestellten
+ */
+private int zeige_adverbs(int mine) {
+ mapping adverb_list;
+ string out,s;
+
+ // Parameter auswerten
+ switch (mine){
+ case 1:
+ adverb_list=plr_adverbs;
+ out = "Du hast folgende Adverbien definiert:\n";
+ break;
+ case 2:
+ adverb_list=QueryStdAdverbs();
+ out = "Systemseitig sind folgende Adverbien definiert:\n";
+ break;
+ default:
+ adverb_list=QueryStdAdverbs()+plr_adverbs;
+ out = "Folgende Adverbien stehen Dir zur Verfuegung:\n";
+ }
+
+ out +=" Abk. Adverb\n ====== ======\n";
+
+ if ( sizeof(adverb_list) == 0)
+ out += " keine.\n";
+ else
+ // Ueber alle Elemente der indizies der Adverbienliste gehen
+ foreach ( s : sort_array(m_indices(adverb_list), #'> ) ) {
+ out += break_string(adverb_list[s],78,
+ sprintf(" %-6s ",s),BS_INDENT_ONCE);
+ }
+
+ More(out+"\nWie diese Adverbien benutzt werden ist in <hilfe adverb> "
+ "beschrieben.\n");
+
+ return 1;
+}
+
+varargs static int
+SoulComm(string str, string _verb) {
+ int t_g,t_n,flag;
+ string str1,str2,str3,*taenze,vb;
+ out_sel=out_vic=out_oth=who=0;
+// if (this_interactive()!=ME) return 0;
+ if (interactive(ME)) str=_unparsed_args(); // NPCs haben das nicht :(
+ if (str=="") str=0;
+ vb=_verb||query_verb();
+ if (sizeof(vb)>1 && vb[<1]=='e' && vb!="noe") vb=vb[0..<2];
+ sfoo = 0;
+ switch (vb) {
+ /**************** Aechzen ***************/
+ case "aechz":
+ HELPCHECK("aechz");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Aechze wie?\n");
+ out_sel="Du aechzt@@adverb@@.";
+ out_oth="@@gname@@ aechzt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Anschmiegen ***************/
+ case "schmieg":
+ HELPCHECK("schmieg");
+ ParseRest(str);
+ if (!who)
+ Return("An wen willst Du Dich anschmiegen?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Das geht doch nicht.",
+ "Nein, das macht keinen Spass. Lebt ja nicht mal."))
+ return 1;
+ out_sel="Du schmiegst Dich@@adverb@@ an@@ wen@@ an.";
+ out_vic="@@gname@@ schmiegt sich@@adverb@@ an Dich.";
+ out_oth="@@gname@@ schmiegt sich@@adverb@@ an@@ wen@@ an.";
+ return FeelIt();
+
+ /**************** Antworten ***************/
+ case "antwort":
+ HELPCHECK("antwort");
+ if (!str)
+ Return("Antworte [WEM] WAS?\n");
+ ParseRest(str);
+ if (!who)
+ str1=capitalize(str);
+ else
+ if (sscanf(str,"%s %s",str1,str1)!=2)
+ Return("Antworte was?\n");
+ else
+ str1=capitalize(str1);
+ out_sel="Du antwortest@@ wem@@: "+str1;
+ /* Sprachflueche beruecksichtigen -Wargon, 8. 9. 95 */
+ if (QueryProp(P_PERM_STRING))
+ str1 = call_other(QueryProp(P_PERM_STRING),"permutate_string",str1)||"";
+ if (who) out_vic="@@gname@@ antwortet Dir: "+str1;
+ out_oth="@@gname@@ antwortet@@ wem@@: "+str1;
+ return FeelIt();
+
+ /**************** Applaudieren ***************/
+ case "applaudier":
+ HELPCHECK("applaudier");
+ GHOSTCHECK("Deine Haende fahren durcheinander durch - war wohl nix.\n",
+ gname()+" will applaudieren, aber "+QPP(FEMALE,WER,PLURAL)
+ +" Haende sausen\ndurcheinander durch.\n", 0);
+ if (!str) {
+ out_sel="Du applaudierst von ganzem Herzen.";
+ out_oth="@@name@@ gibt eine Runde Applaus.";
+ }
+ else {
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du applaudierst @@alle@@@@adverb@@.";
+ out_vic="@@name@@ applaudiert @@alle@@@@adverb@@.";
+ return MixedOut(WEM);
+ }
+ if (!who && !adverb)
+ Return("Applaudiere wem oder wie oder so aehnlich.\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Nein, das gehoert sich nicht.",
+ "Sachen wird hier nicht applaudiert, OK?"))
+ return 1;
+ out_sel="Du applaudierst@@ wem@@@@adverb@@.";
+ if (who) out_vic="@@name@@ applaudiert Dir@@adverb@@.";
+ out_oth="@@name@@ applaudiert@@ wem@@@@adverb@@.";
+ }
+ return FeelIt();
+
+ /**************** Argln ***************/
+ case "argl":
+ HELPCHECK("argl");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Argle wie?\n");
+ out_sel="Du arglst"+(adverb ? "@@adverb@@." : " ein wenig vor Dich hin.");
+ out_oth="@@gname@@ arglt"
+ +(adverb ? "@@adverb@@." : " ein wenig vor sich hin.");
+ return FeelIt();
+
+ /**************** Aufatmen ***************/
+ case "atm":
+ HELPCHECK("atm");
+ if (!str || sscanf(str,"%sauf",str1)!=1)
+ Return("Atme wie auf?\n");
+ ParseRest(str1);
+ out_sel="Du atmest"+(adverb ? "@@adverb@@" : " erleichtert")+" auf.";
+ out_oth="@@gname@@ atmet"+(adverb ? "@@adverb@@" : " erleichtert")+" auf.";
+ return FeelIt();
+
+ /**************** Begruessen ***************/
+ case "hallo":
+ case "hi":
+ case "begruess":
+ HELPCHECK("begruess");
+ ParseRemote(str);
+ if (!who)
+ Return("Wen willst Du begruessen?\n");
+ if (present(who, environment())) {
+ out_sel="Du heisst @@wen@@@@adverb@@ willkommen.";
+ out_vic="@@gname@@ heisst Dich@@adverb@@ willkommen.";
+ out_oth="@@gname@@ heisst @@wen@@@@adverb@@ willkommen.";
+ }
+ else {
+ out_sel="Du heisst @@wen@@@@adverb@@ aus der Ferne willkommen.";
+ out_vic="@@gname@@ heisst Dich@@adverb@@ aus der Ferne willkommen.";
+ }
+ return FeelIt();
+
+ /**************** Betasten ***************/
+ case "betast":
+ HELPCHECK("betast");
+ ParseRest(str);
+ if (!who)
+ Return("Begrabsche wen?\n");
+ out_sel="Du grabbelst@@adverb@@ an "+who->name(WEM)+" herum.";
+ out_vic="@@gname@@ grabbelt@@adverb@@ an Dir herum.";
+ out_oth="@@gname@@ grabbelt@@adverb@@ an "+who->name(WEM)+" herum.";
+ return FeelIt();
+
+ /**************** Bewundern ***************/
+ case "bewunder":
+ HELPCHECK("bewunder");
+ ParseRest(str);
+ if (!who)
+ Return("Bewundere wen?\n");
+ out_sel="Du bewunderst @@wen@@@@adverb@@.";
+ out_vic="@@gname@@ bewundert Dich@@adverb@@.";
+ out_oth="@@gname@@ bewundert @@wen@@@@adverb@@.";
+ return FeelIt();
+
+ /**************** Bibbern ***************/
+ case "bibber":
+ HELPCHECK("bibber");
+ if (ghost())
+ Return("Als Geist fuehlst Du keine Kaelte.\n");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Bibbere wie?\n");
+ out_sel="Du bibberst@@adverb@@ vor Kaelte.";
+ out_oth="@@name@@ bibbert@@adverb@@ vor Kaelte.";
+ return FeelIt();
+
+ /**************** Bohre Nase ***************/
+ case "bohr":
+ HELPCHECK("bohr");
+ ParseRest(str, ({"nase","in der nase","in nase"}));
+ if (str && str!="nase" && str!="in nase" && str!="in der nase" && !adverb)
+ Return("Bohre wie Nase?\n");
+ out_sel="Du bohrst@@adverb@@ in Deiner Nase.";
+ out_oth="@@gname@@ bohrt@@adverb@@ in der Nase. Igitt! :)";
+ return FeelIt();
+
+ /**************** Brummeln ***************/
+ case "brummel":
+ HELPCHECK("brummel");
+ ParseRest(str);
+ out_sel="Du brummelst"
+ +(adverb ? "@@adverb@@." : (str ? " kaum verstaendlich: "+str+"." : "."));
+ out_oth="@@gname@@ brummelt"
+ +(adverb ? "@@adverb@@." : (str ? " kaum verstaendlich: "+str+"." : "."));
+ return FeelIt();
+
+ /**************** cls ***************/
+ case "cls":
+ HELPCHECK("cls");
+ write("[2J[H");
+ return 1;
+
+ /**************** Daeumchendrehen ***************/
+ case "dreh":
+ HELPCHECK("dreh");
+ if (!str)
+ Return("Drehe was?\n");
+ if(strstr(str,"daeumchen")<0 && strstr(str,"daumen")<0)
+ Return("Drehe was?\n");
+ ParseRest(str,({"daeumchen","daumen"}));
+ out_sel="Du drehst@@adverb@@ Daeumchen.";
+ out_oth="@@gname@@ dreht@@adverb@@ Daeumchen.";
+ return FeelIt();
+
+ /**************** Danken ***************/
+ case "dank":
+ HELPCHECK("dank");
+ ParseRest(str);
+ if (!who)
+ Return("Bei wem willst Du Dich bedanken?\n");
+ if (CheckLife(NOT_SELF, NOT_DEAD,
+ "Leidest Du jetzt schon an Persoenlickeitsspaltung? Ne, ne...",
+ "Keine Reaktion. Ist wohl befriedigender, sich bei Lebewesen zu "
+ +"bedanken."))
+ return 1;
+ out_sel="Du bedankst Dich@@adverb@@ bei@@ wem@@.";
+ out_vic="@@gname@@ bedankt sich@@adverb@@ bei Dir.";
+ out_oth="@@gname@@ bedankt sich@@adverb@@ bei@@ wem@@.";
+ return FeelIt();
+
+ /**************** Denken ***************/
+ case "denk":
+ HELPCHECK("denk");
+ if (ghost())
+ Return("Womit willst Du denn denken? Du hast keine grauen Zellen...\n");
+// ParseRest(str);
+ str2=old_explode(str||""," ")[0];
+ if (str
+ && (!adverb||((QueryStdAdverbs()[str2]||plr_adverbs[str2]))!=adverb)) {
+ out_sel="Du denkst . o O ("+str+")";
+ out_oth="@@name@@ denkt . o O ("+str+")";
+ out_vic="@@name@@ denkt . o O ("+str+")";
+ }
+ else {
+ out_sel="Du faengst@@adverb@@ an zu denken.\nKleine "
+ +"Rauchwoelkchen steigen auf...";
+ out_oth="@@name@@ faengt@@adverb@@ an zu denken.\nKleine "
+ +"Rauchwoelkchen steigen auf...";
+ }
+ return FeelIt();
+
+ /**************** Deuten ***************/
+ case "deut":
+ HELPCHECK("deut");
+ ParseRest(str,"auf");
+ if (for_all) {
+ out_sel="Du deutest@@adverb@@ auf @@alle@@.";
+ out_vic="@@gname@@ deutet@@adverb@@ auf @@alle@@.";
+ return MixedOut(WEN);
+ }
+ if (!who)
+ Return("Auf wen oder was willst Du deuten?\n");
+ out_sel="Du deutest@@adverb@@ auf"
+ +(who==this_object()?" Dich." : "@@ wen@@.");
+ if (who != this_object()) out_vic="@@gname@@ deutet@@adverb@@ auf Dich.";
+ out_oth="@@gname@@ deutet@@adverb@@ auf"
+ +(who==this_object() ? " sich selber.": "@@ wen@@.");
+ return FeelIt();
+
+ /**************** Druecken ***************/
+ case "drueck":
+ HELPCHECK("drueck");
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du drueckst @@alle@@"+(adverb ? "@@adverb@@" : " zaertlich")
+ +" an Dich.";
+ out_vic="@@gname@@ drueckt @@alle@@"+
+ (adverb ? "@@adverb@@" : " zaertlich")+" an sich.";
+ return MixedOut(WEN);
+ }
+ if (!who)
+ Return("Wen willst Du denn druecken?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Das macht doch keinen Spass.",
+ "Ich druecke nur jemanden, nicht etwas."))
+ return 1;
+ GHOSTCHECK("Du willst "+who->name(WEN)+" an Dich druecken - nur hast Du "
+ +"schon\nwieder nicht daran gedacht, dass so was als Geist nicht "
+ +"geht.\n",
+ gname()+" will "+who->name(WEN)+" an sich druecken - hat aber\n"
+ +"mal wieder nicht an die Nachteile des Geisterdaseins gedacht.\n",
+ gname()+" will Dich an sich druecken - hat aber mal wieder\n"
+ +"nicht an die Nachteile des Geisterdaseins gedacht.\n");
+ out_sel="Du drueckst @@wen@@"+(adverb ? "@@adverb@@" : " zaertlich")
+ +" an Dich.";
+ out_vic="@@name@@ drueckt Dich"+(adverb ? "@@adverb@@" : " zaertlich")
+ +" an sich.";
+ out_oth="@@name@@ drueckt @@wen@@"+(adverb ? "@@adverb@@" : " zaertlich")
+ +" an sich.";
+ return FeelIt();
+
+ /**************** Entschuldige ***************/
+ case "entschuldig":
+ HELPCHECK("entschuldig");
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Entschuldige Dich wie oder bei wem?\n");
+ out_sel="Du bittest"+(who ? " @@wen@@" : "")
+ +"@@adverb@@ um Entschuldigung.";
+ if (who) out_vic="@@gname@@ bittet Dich@@adverb@@ um Entschuldigung.";
+ out_oth="@@gname@@ bittet"+(who ? " @@wen@@" : "")
+ +"@@adverb@@ um Entschuldigung.";
+ return FeelIt();
+
+ /**************** Erbleichen ***************/
+ case "erbleich":
+ HELPCHECK("erbleich");
+ GHOSTCHECK("Ich weiss zwar nicht, wie Du das schaffst, aber Du wirst "
+ +"noch bleicher.\n",
+ break_string("Wie unwahrscheinlich das auch ist, aber "+gname()
+ +" schafft es tatsaechlich, noch bleicher zu werden.",78), 0 );
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Wie willst Du erbleichen?\n");
+ out_sel="Du erbleichst@@adverb@@.";
+ out_oth="@@name@@ erbleicht@@adverb@@.";
+ return FeelIt();
+
+ /**************** Erroeten ***************/
+ case "erroet":
+ HELPCHECK("erroet");
+ GHOSTCHECK("Du schaffst es nur bis zu einem blassen Rosa, aber immerhin.\n",
+ "Die Wangen des Geistes von "+capname()+" werden leicht rosa.\n", 0);
+ ParseRest(str);
+ if (!adverb && str)
+ Return("Erroete wie?\n");
+ out_sel="Deine Wangen gluehen@@adverb@@.";
+ out_oth="@@name@@ erroetet@@adverb@@.";
+ return FeelIt();
+
+ /**************** Erschrecken ***************/
+ case "erschreck":
+ case "erschrick":
+ if (!ghost())
+ Return("Du bist zu harmlos, Geist muesste man sein...\n");
+ HELPCHECK("erschreck");
+ ParseRest(str);
+ if (!who)
+ Return("Wen willst Du denn erschrecken?\n");
+ out_sel="Mit einem lauten BUH! erschreckst Du @@wen@@"
+ +(adverb ? "@@adverb@@." : " fuerchterlich.");
+ out_vic="BUH! Du zuckst vor Schreck zusammen. Muss dieser Geist von "
+ +"@@gname@@ Dich auch@@adverb@@ erschrecken.";
+ out_oth="BUH! @@gname@@ erschreckt @@wen@@"
+ +(adverb ? "@@adverb@@." : " fuerchterlich.");
+ return FeelIt();
+
+ /**************** Flippen ***************/
+ case "flipp":
+ HELPCHECK("flipp");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Ausflippen wollen wir also, so so. Und wie, wenn ich "
+ +"fragen darf?\n");
+ out_sel="Du flippst"+(adverb ? "@@adverb@@ aus." : " total aus.");
+ out_oth="@@gname@@ flippt"+(adverb ? "@@adverb@@ aus." : " total aus.");
+ return FeelIt();
+
+ /**************** Fluchen ***************/
+ case "fluch":
+ HELPCHECK("fluch");
+ GHOSTCHECK("Du faengst mangels Resonanzkoerper leise an zu fluchen.\n",
+ gname()+" faengt leise an zu fluchen. Laut kann er nicht,\n"
+ +"mangels Luft und Resonanzkoerper.\n", 0);
+ if (!str) {
+ out_sel="Du fluchst lautstark.";
+ out_oth="@@name@@ faengt an, fuerchterlich zu fluchen.";
+ }
+ else {
+ ParseRest(str);
+ if (!adverb)
+ Return("Wie willst Du fluchen?\n");
+ out_sel="Du fluchst@@adverb@@.";
+ out_oth="@@name@@ flucht auf einmal@@adverb@@.";
+ }
+ return FeelIt();
+
+ /**************** Fragen ***************/
+ case "frag":
+ HELPCHECK("frag");
+ if (!str)
+ Return("Frage wen was?\n");
+ ParseRest(str);
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du faengst zu gruebeln an...",
+ "Frage jemand, der lebt."))
+ return 1;
+ if (who)
+ sscanf(str,"%s %s", str1,str1);
+ else
+ str1=str;
+ if (!str1)
+ Return("Frage "+who->name(WEN)+" WAS?\n");
+ str1=capitalize(str1);
+ if (str1[<1] != '?')
+ str1 += "?";
+ out_sel="Du fragst@@ wen@@: "+str1;
+ /* Sprachfluch beruecksichtigen -Wargon, 8. 9. 95 */
+ if (objectp(QueryProp(P_PERM_STRING)))
+ str1 = call_other(QueryProp(P_PERM_STRING), "permutate_string", str1)||"";
+ if (who) out_vic=(ghost() ? "Der Geist von " : /* IS_LEARNER(ME) ?
+ QueryProp(P_PRESAY)||"" : */ "")+capname()+" fragt Dich: "+str1;
+ out_oth=(ghost() ? "Der Geist von " : /* IS_LEARNER(ME) ?
+ QueryProp(P_PRESAY)||"" : */ "")+capname()+" fragt@@ wen@@: "+str1;
+ return FeelIt();
+
+ /**************** Freuen ***************/
+ case "freu":
+ HELPCHECK("freu");
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Freue Dich wie?\n");
+ out_sel="Du "+(who ? "grinst @@wen@@ an und " : "")
+ +"freust Dich@@adverb@@.";
+ if (who) out_vic="@@gname@@ grinst Dich an und freut sich@@adverb@@.";
+ out_oth="@@gname@@ "+(who ? "grinst @@wen@@ an und " : "")
+ +"freut sich@@adverb@@.";
+ return FeelIt();
+
+ /**************** Furzen ***************/
+ case "furz":
+ HELPCHECK("furz");
+ GHOSTCHECK("Du laesst einen fahren - aber er riecht nach gar nix.\n",
+ gname()+" laesst einen fahren. Man riecht aber nix.\n", 0);
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Furze wie?\n");
+ out_sel="Du furzt"+(adverb ? "@@adverb@@." : " hemmungslos.");
+ out_oth="@@name@@ laesst@@adverb@@ einen Stinkefurz fahren.";
+ ofoo=clone_object("/items/furz");
+ ofoo->set_furzer(this_player());
+ ofoo->move(environment(this_player()));
+ return FeelIt();
+// DEBUG Furz testen!
+
+ /**************** Gaehnen ***************/
+ case "gaehn":
+ HELPCHECK("gaehn");
+ if (ghost())
+ Return("Als Geist wirst Du nicht muede - also nicht gaehnen.\n");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Wie willst Du gaehnen?\n");
+ if (!adverb)
+ out_sel="Kannst Du aber Dein(en) Mund/Maul/Schnabel weit aufreissen!";
+ else
+ out_sel="Du gaehnst@@adverb@@.";
+ out_oth="@@gname@@ gaehnt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Glucksen ***************/
+ case "glucks":
+ HELPCHECK("glucks");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Gluckse wie?\n");
+ out_sel="Du gluckst"+(adverb ? "@@adverb@@." : " wie ein Huhn.");
+ out_oth="@@gname@@ gluckst"+(adverb ? "@@adverb@@." : " wie ein Huhn.");
+ return FeelIt();
+
+ /**************** Gratulieren ***************/
+ case "gratulier":
+ case "beglueckwuensch":
+ HELPCHECK("gratulier");
+ ParseRest(str);
+ if (!who)
+ Return("Wem willst Du gratulieren?\n");
+ if (CheckLife(NOT_SELF, NOT_DEAD,
+ "Na, meinst Du nicht, dass Eigenlob stinkt?",
+ "Soll ich dem Ding vielleicht zum Totsein gratulieren? Nee nee."))
+ return 1;
+ out_sel="Du gratulierst @@wem@@@@adverb@@.";
+ out_vic="@@gname@@ gratuliert Dir@@adverb@@.";
+ out_oth="@@gname@@ gratuliert @@wem@@@@adverb@@.";
+ return FeelIt();
+
+ /**************** Grinsen ***************/
+ case "grins":
+ HELPCHECK("grins");
+ GHOSTCHECK("Als Du grinst, siehst Du regelrecht, wie die anderen eine "
+ +"Gaensehaut bekommen.\n",
+ "Du bekommst eine Gaensehaut, als der Geist von "+capname()
+ +" zu grinsen anfaengt.\n", 0);
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du grinst @@alle@@@@adverb@@ an.";
+ out_vic="@@name@@ grinst @@alle@@@@adverb@@ an.";
+ return MixedOut(WEN);
+ }
+ if (!who && !adverb && str)
+ Return("Grinsen - schoen und gut. Aber wen oder wie (an)grinsen?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du grinst Dir was, aber so, dass es kein anderer sieht.",
+ "Nicht mal einen Spiegel darf man hier angrinsen, nur Lebewesen!"))
+ return 1;
+ out_sel="Du grinst@@ wen@@@@adverb@@"+(who ? " an" : "")+".";
+ if (who) out_vic="@@name@@ grinst Dich@@adverb@@ an.";
+ out_oth="@@name@@ grinst@@ wen@@@@adverb@@"+(who ? " an" : "")+".";
+ return FeelIt();
+
+ /**************** Gruebeln ***************/
+ case "gruebel":
+ case "gruebl":
+ HELPCHECK("gruebel");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Grueble wie?\n");
+ out_sel="Du gruebelst@@adverb@@ eine Weile vor Dich hin.";
+ out_oth="@@gname@@ gruebelt@@adverb@@ eine Weile vor sich hin.";
+ return FeelIt();
+
+ /**************** Grummeln ***************/
+ case "grummel":
+ case "grumml":
+ HELPCHECK("grummel");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Grummle wie?\n");
+ out_sel="Du grummelst@@adverb@@.";
+ out_oth="@@gname@@ grummelt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Grunzen ***************/
+ case "grunz":
+ HELPCHECK("grunz");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Grunze wie?\n");
+ out_sel="Du grunzt@@adverb@@.";
+ out_oth="@@gname@@ grunzt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Gucken ***************/
+ case "guck":
+ HELPCHECK("guck");
+ ParseRest(str);
+ if (!adverb)
+ Return("Gucke wie aus der Waesche?\n");
+ out_sel="Du guckst@@adverb@@ aus der Waesche.";
+ out_oth="@@gname@@ guckt@@adverb@@ aus der Waesche.";
+ return FeelIt();
+
+ /**************** Jammern ***************/
+ case "jammer":
+ HELPCHECK("jammer");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Wie willst Du jammern?\n");
+ out_sel="Du jammerst@@adverb@@.";
+ out_oth="@@gname@@ jammert@@adverb@@.";
+ return FeelIt();
+
+ /**************** Haetscheln ***************/
+ case "haetschel":
+ case "haetschl":
+ HELPCHECK("haetschel");
+ GHOSTCHECK("Du ueberlegst es Dir anders - mit Deinen durchlaessigen "
+ +"Haenden...",
+ gname()+" will anscheinend jemand haetscheln, ueberlegt\n"
+ +"es sich nach einem kurzen Blick auf seine Haende anders.\n", 0);
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du haetschelst @@alle@@@@adverb@@.";
+ out_vic="@@name@@ haetschelt @@alle@@@@adverb@@.";
+ return MixedOut(WEN);
+ }
+ if (!str || !who)
+ Return("Wen willst Du haetscheln?\n");
+ if (who && CheckLife(NOT_SELF, NOT_DEAD,
+ "Das sieht viel zu albern aus - Du laesst es bleiben.",
+ "Ist da ueberhaupt was zu haetscheln? Nein, da lebt doch nix."))
+ return 1;
+ out_sel="Du haetschelst@@ wen@@@@adverb@@.";
+ out_vic="@@name@@ haetschelt Dich@@adverb@@.";
+ out_oth="@@name@@ haetschelt@@ wen@@@@adverb@@.";
+ return FeelIt();
+
+ /**************** Hicksen ***************/
+ case "hicks":
+ HELPCHECK("hicks");
+ GHOSTCHECK("Hoppla! Dieser Hickser zieht Dich ganz schoen zusammen!\n",
+ gname()+" hat anscheinend Schluckauf.\n"
+ +"Und was fuer einen! Fuer einen Moment zieht es "+QueryPronoun(WEN)
+ +" ziemlich zusammen.\n", 0);
+ if (!str) {
+ out_sel="Hicks!";
+ out_oth="@@name@@ muss hicksen. Wahrscheinlich zu viel Alkohol...";
+ }
+ else {
+ ParseRest(str);
+ if (!adverb)
+ Return("Hickse wie?\n");
+ out_sel="Du hickst@@adverb@@.";
+ out_oth="@@name@@ hickst@@adverb@@.";
+ }
+ return FeelIt();
+
+ /**************** Huepfen ***************/
+ case "huepf":
+ HELPCHECK("huepf");
+ GHOSTCHECK("Du schwebst durch die Gegend.\n",
+ gname()+" schwebt durch die Gegend.\n", 0);
+ if (!str) {
+ out_sel="B O I N G !! Du huepfst in der Gegend herum.";
+ out_oth="@@name@@ huepft in der Gegend herum.";
+ }
+ else {
+ ParseRest(str);
+ if (!who && !adverb)
+ Return("Huepfe wie oder um wen oder wie oder was oder haeh?\n");
+ out_sel="Du huepfst@@adverb@@"+(who ? " um@@ wen@@" : "")+" herum.";
+ if (who) out_vic="@@name@@ huepft@@adverb@@ um Dich herum.";
+ out_oth="@@name@@ huepft@@adverb@@"+(who ? " um@@ wen@@" : "")+" herum.";
+ }
+ return FeelIt();
+
+ /**************** Husten ***************/
+ case "hust":
+ HELPCHECK("hust");
+ GHOSTCHECK("Du verstreust ein paar Geisterbazillen im Raum.\n",
+ gname()+" macht ufff, ufff und verteilt ein paar Geister-\n"
+ +"bazillen im Raum.\n", 0);
+ if (!str) {
+ out_sel="Hust! Keuch! Halt dir doch wenigstens die Hand vor den Mund!";
+ out_oth="@@name@@ hustet sich fast die Seele aus dem Leib.";
+ }
+ else {
+ ParseRest(str);
+ if (!who && !adverb)
+ Return("Wenn Du schon was hinter huste tippst, dann bitte was "
+ +"vernuenftiges!\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Dir selber koennen nur andere was husten.",
+ "Bitte huste nur Lebewesen was."))
+ return 1;
+ out_sel="Du hustest@@ wem@@@@adverb@@"+(who? " was" : "")+".";
+ if (who) out_vic="@@name@@ hustet Dir@@adverb@@was.";
+ out_oth="@@name@@ hustet@@ wem@@@@adverb@@"+(who? " was" : "")+".";
+ }
+ return FeelIt();
+
+ /**************** Jubeln ***************/
+ case "jubel":
+ case "jubl":
+ HELPCHECK("jubel");
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Juble wie? Oder wem zu?\n");
+ out_sel="Du jubelst@@ wem@@@@adverb@@"+(who ? " zu." : ".");
+ if (who) out_vic="@@gname@@ jubelt Dir@@adverb@@ zu.";
+ out_oth="@@gname@@ jubelt@@ wem@@@@adverb@@"+(who ? " zu." : ".");
+ return FeelIt();
+
+ /**************** Keuchen ***************/
+ case "keuch":
+ HELPCHECK("keuch");
+ if (ghost())
+ Return("Als Geist strengt Dich nix an - also wird auch nicht "
+ +"gekeucht.\n");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Keuche wie?\n");
+ out_sel="Du keuchst"+(adverb ? "@@adverb@@." : " vor Anstrengung.");
+ out_oth="@@name@@ keucht"+(adverb ? "@@adverb@@." : " vor Anstrengung.");
+ return FeelIt();
+
+ /**************** Kichern ***************/
+ case "kicher":
+ HELPCHECK("kicher");
+ if (!str) {
+ out_sel="Du kicherst. (Wie albern von Dir)";
+ out_oth="@@gname@@ gibt ein albernes Kichern von sich.";
+ }
+ else {
+ ParseRest(str);
+ if (!who && !adverb)
+ Return("Das haut so nicht hin, gib vernuenftige Parameter.\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "In diesem Fall nimm bitte nur kicher.",
+ "Musst schon etwas Lebendes angeben, nichts Totes."))
+ return 1;
+ out_sel="Du kicherst@@adverb@@"+(who ? " hinter "+who->name(WESSEN)+
+ " Ruecken." : ".");
+ if (who) out_vic="Jemand kichert@@adverb@@ hinter deinem Ruecken.";
+ out_oth="@@gname@@ kichert@@adverb@@"+(who ? " hinter "+who->name(WESSEN)
+ +" Ruecken." : ".");
+ }
+ return FeelIt();
+
+ /**************** Kitzeln ***************/
+ case "kitzel":
+ case "kitzl":
+ HELPCHECK("kitzel");
+ GHOSTCHECK("Mit Deinen immateriellen Fingern schaffst Du das nicht.\n",
+ gname()+" muss gerade feststellen, dass man mit\n"
+ +"immateriellen Fingern nicht kitzeln kann.\n", 0);
+ ParseRest(str);
+ if (!who)
+ Return("Wen willst Du kitzeln?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du bist doch kein Masochist! Du laesst es bleiben.",
+ "Dinge sind so selten kitzlig. Lass es bleiben."))
+ return 1;
+ if (member(({"highlander","hobo"}), who->query_real_name())>-1)
+ switch (who->query_real_name()) {
+ case "highlander": str1="unter"; str2="Federn"; break;
+ case "hobo" : str1="an"; str2="Kinn"; break;
+ }
+ else if (who->QueryProp(P_RACE))
+ switch (lower_case(who->QueryProp(P_RACE))) {
+ case "drache" : str1="unter";str2="Schuppen";
+ t_g=FEMALE; t_n=PLURAL; break;
+ case "greif" : str1="unter";str2="Federn";
+ t_g=FEMALE; t_n=PLURAL; break;
+ default : str1="an"; str2="Kinn"; t_g=NEUTER; t_n=SINGULAR;
+ }
+ else {
+ str1="an"; str2="Kinn"; t_g=NEUTER; t_n=SINGULAR;
+ }
+ if (getuid(who)=="trest" || getuid(who)=="woelkchen") {
+ str1="an"; str2="Fuessen"; t_g=MALE; t_n=PLURAL;
+ }
+ out_sel="Du kitzelst@@ wen@@@@adverb@@ "+str1+" "+who->QPP(t_g,WEM,t_n)
+ +" "+str2+".\n@@wer@@ versucht, sich zu beherrschen, muss aber "
+ +"doch lachen.";
+ out_vic="@@name@@ kitzelt Dich@@adverb@@ "+str1+" Deine"
+ +(t_n ? "n" : (t_g==FEMALE ? "r" : "m"))+" "+str2
+ +".\nDu versuchst, Dich zu beherrschen, musst aber doch lachen.";
+ out_oth="@@name@@ kitzelt@@ wen@@@@adverb@@ "+str1+" "
+ +who->QPP(t_g,WEM,t_n)+" "+str2
+ +".\n@@wer@@ versucht, sich zu beherrschen, muss aber doch lachen.";
+ return FeelIt();
+
+ /**************** Klatschen ***************/
+ case "klatsch":
+ HELPCHECK("klatsch");
+ GHOSTCHECK("Deine Haende sausen durcheinander durch.\n",
+ gname()+" will in die Haende klatschen - aber sie\n"
+ +"sausen durcheinander durch.\n", 0);
+ ParseRest(str);
+ if (!adverb && str)
+ Return("Klatsche wie?\n");
+ out_sel="Du klatschst@@adverb@@ in die Haende.";
+ out_oth="@@name@@ klatscht@@adverb@@ in die Haende.";
+ return FeelIt();
+
+ /**************** Klopfen ***************/
+ case "klopf":
+ HELPCHECK("klopf");
+ if (!str||sscanf(str,"%s auf schulter",sfoo)!=1)
+ if (!str||sscanf(str,"%s auf die schulter",sfoo)!=1)
+ Return("Klopfe wie wem wieso was?\n");
+ if (ghost())
+ Return("Das geht leider nicht mit durchlaessigen Haenden.\n");
+ str=sfoo;
+ if (str=="") str=0;
+ ParseRest(str);
+ if (!who)
+ Return("Klopfe wem auf die Schulter?\n");
+ out_sel="Du klopfst @@wem@@@@adverb@@ auf die Schulter.";
+ out_vic="@@name@@ klopft Dir@@adverb@@ auf die Schulter.";
+ out_oth="@@name@@ klopft @@wem@@@@adverb@@ auf die Schulter.";
+ return FeelIt();
+
+ /**************** Knabbern ***************/
+ case "knabber":
+ HELPCHECK("knabber");
+ if (ghost())
+ Return("Sorry, aber dafuer fehlt Dir im Moment der noetige "
+ +"\"Biss\"...\n");
+ ParseRest(str);
+ if (!who)
+ Return("Knabbere wen an?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Du kommst nicht an dein eigenes Ohr ran...",
+ "Noe, noe, das schmeckt bestimmt nicht gut."))
+ return 1;
+ out_sel="Du knabberst@@adverb@@ an "+who->name(WESSEN)+" Ohr.";
+ out_vic="@@name@@ knabbert@@adverb@@ an Deinem Ohr.";
+ out_oth="@@name@@ knabbert@@adverb@@ an "+who->name(WESSEN)+" Ohr.";
+ return FeelIt();
+
+ /**************** Knicksen ***************/
+ case "knicks":
+ HELPCHECK("knicks");
+ GHOSTCHECK("Du knickst in der Mitte ab, kriegst Dich aber schnell wieder "
+ +"zusammen.\n",
+ gname()+" knick(s)t in der Mitte ab, kriegt sich aber\n"
+ +"zum Glueck schnell wieder zusammen.\n", 0);
+ if (!str) {
+ out_sel="Du machst einen anmutigen Knicks.";
+ out_oth="@@name@@ macht einen anmutigen Knicks.";
+ }
+ else {
+ ParseRest(str,"vor");
+ if (for_all) {
+ out_sel="Du knickst@@adverb@@ vor @@alle@@.";
+ out_vic="@@name@@ knickst@@adverb@@ vor @@alle@@.";
+ return MixedOut(WEM);
+ }
+ if (!who && !adverb)
+ Return("Knickse irgendwie oder vor jemandem.\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Wie willst Du das denn schaffen?",
+ "Vor Sachen wird hier nicht geknickst!"))
+ return 1;
+ out_sel="Du knickst@@adverb@@"+(who ? " vor" : "")+"@@ wem@@.";
+ if (who ) out_vic="@@name@@ knickst@@adverb@@ vor Dir.";
+ out_oth="@@name@@ knickst@@adverb@@"+(who ? " vor" : "")+"@@ wem@@.";
+ }
+ return FeelIt();
+
+ /**************** Knirschen ***************/
+ case "knirsch":
+ HELPCHECK("knirsch");
+ if (ghost())
+ Return("Du kannst mit nichts knirschen, so als Geist. Versuche doch "
+ +"dafuer\nmal, zu rasseln...\n");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Knirsche wie?\n");
+ switch (QueryProp(P_RACE)) {
+ case "greif" : str1="dem Schnabel."; break;
+ case "sandtiger" : str1="den Fangzaehnen."; break;
+ case "drache" : str1="den Fangzaehnen."; break;
+ default : str1="den Zaehnen.";
+ }
+ out_sel="Du knirschst@@adverb@@ mit "+str1;
+ out_oth="@@name@@ knirscht@@adverb@@ mit "+str1;
+ return FeelIt();
+
+ /**************** Knuddeln ***************/
+ case "knuddel":
+ case "knuddl":
+ HELPCHECK("knuddel");
+ if (ghost())
+ Return("Sorry, nicht als Geist.\n");
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du knuddelst @@alle@@@@adverb@@.";
+ out_vic="@@name@@ knuddelt @@alle@@@@adverb@@.";
+ return MixedOut(WEN);
+ }
+ if (!who)
+ Return("Knuddle wen?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Das bringt doch nix, lass es halt.",
+ "Du kannst soviel ich weiss ausser Lebewesen nur Teddys knuddeln."))
+ return 1;
+ out_sel="Du knuddelst@@ wen@@@@adverb@@.";
+ out_vic="@@name@@ knuddelt Dich@@adverb@@.";
+ out_oth="@@name@@ knuddelt@@ wen@@@@adverb@@.";
+ return FeelIt();
+
+ /**************** Knurren ***************/
+ case "knurr":
+ HELPCHECK("knurr");
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du knurrst @@alle@@@@adverb@@ an.";
+ out_vic="@@gname@@ knurrt @@alle@@@@adverb@@ an.";
+ return MixedOut(WEN);
+ }
+ if (str && !who && !adverb)
+ Return("Wen anknurren oder wie knurren?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du knurrst in Dich hinein.",
+ "Reagiert nicht. Solltest wohl besser Lebwesen anknurren."))
+ return 1;
+ out_sel="Du knurrst@@ wen@@@@adverb@@"+(who ? " an." : ".");
+ if (who) out_vic="@@gname@@ knurrt Dich@@adverb@@ an.";
+ out_oth="@@gname@@ knurrt@@ wen@@@@adverb@@"+(who ? " an." : ".");
+ return FeelIt();
+
+ /**************** Knutschen ***************/
+ case "knutsch":
+ HELPCHECK("knutsch");
+ if (ghost())
+ Return("Das kannst Du als Geist leider nicht. Irgendwie fehlt Dir "
+ +"dazu das Herz.\n");
+ ParseRest(str);
+ if (!who)
+ Return("Knutsche wen ab?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Das geht nicht.",
+ "Igitt! Lieber nicht!"))
+ return 1;
+ out_sel="Du gibst @@wem@@@@adverb@@ einen RICHTIGEN Kuss.";
+ out_vic="@@name@@ gibt Dir@@adverb@@ einen tiefen und hingebungsvollen "
+ +"Kuss.\nDu schwebst im 7. Himmel.";
+ out_oth="@@name@@ gibt @@wem@@@@adverb@@ einen tiefen und "
+ +"hingebungsvollen Kuss.";
+ return FeelIt();
+
+ /**************** Kotzen ***************/
+ case "kotz":
+ HELPCHECK("kotz");
+ if (ghost())
+ Return("Ne, das ist eins von den Sachen, die als Geist nicht gehen.\n");
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Kotze wie? Kotze auf wen?\n");
+ if (who && CheckLife(NOT_SELF,0,
+ "Igitt, nein danke."))
+ return 1;
+ if(!str) {
+ out_sel="Du kotzt ueber deine Schuhe.";
+ out_oth="@@name@@ verdreht die Augen und kotzt.";
+ }
+ else {
+ out_sel="Du kotzt@@adverb@@"+(who ? " auf @@wen@@." : ".");
+ if (who) out_vic="@@name@@ kotzt@@adverb@@ auf Dich.";
+ out_oth="@@name@@ kotzt@@adverb@@"+(who ? " auf @@wen@@." : ".");
+ }
+ return FeelIt();
+
+ /**************** Kratzen ***************/
+ case "kratz":
+ HELPCHECK("kratz");
+ ParseRest(str);
+ if (who && (who!=this_player()))
+ Return("Das mach mal schoen nur mit Dir selber.\n");
+ if (str && !adverb)
+ Return("Wie willst Du Dich kratzen?\n");
+ out_sel="Du kratzt dich@@adverb@@ am Kopp.";
+ out_oth="@@gname@@ kratzt sich@@adverb@@ am Kopp.";
+ return FeelIt();
+
+ /**************** Krieche ***************/
+ case "kriech":
+ HELPCHECK("kriech");
+ ParseRest(str);
+ out_sel="Du kriechst"+(who ? " vor @@wem@@" : "")+"@@adverb@@ im Staub.";
+ if (who) out_vic="@@gname@@ kriecht@@adverb@@ vor Dir im Staub.";
+ out_oth="@@gname@@ kriecht"+(who ? " vor @@wem@@" : "")
+ +"@@adverb@@ im Staub.";
+ return FeelIt();
+
+ /**************** Kuessen ***************/
+ case "kuess":
+ HELPCHECK("kuess");
+ if (ghost())
+ Return("Als Geist kannst Du leider niemanden kuessen.\n");
+ ParseRest(str);
+ if (!who)
+ Return("Wen willst Du kuessen?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Da hast Du aber Schwierigkeiten... Du gibst es schliesslich auf.",
+ "Nix. Absolut nix. Kuesse lieber Lebewesen - die reagieren\n"
+ +"wenigstens (und sei es, dass sie Dich fressen...)."))
+ return 1;
+ out_sel="Du kuesst@@ wen@@@@adverb@@.";
+ out_vic="@@name@@ kuesst Dich@@adverb@@.";
+ out_oth="@@name@@ kuesst@@ wen@@@@adverb@@.";
+ FeelIt();
+ if (who->QueryProp(P_FROG)&&QueryProp(P_LEVEL)>who->QueryProp(P_LEVEL)) {
+ tell_room(environment(this_player()),"PLOPP!\n");
+ write("Huch! Du wirst auf einmal so gruen und klein und kriegst auf\n"
+ +"einmal furchtbar Hunger auf Fliegen und so...\n");
+ who->Message("Auf einmal wird die Welt um Dich wieder so klein, wie sie\n"
+ +" frueher mal war - und vor Dir sitzt ein kleiner gruener Frosch.\n");
+ say(who->name(WER)+" steht auf einmal da und schaut dumm aus der "
+ +"Waesche. Dafuer fehlt\njetzt seltsamerweise "+capname()
+ +". Die Gesamtzahl an kleinen gruenen\nFroeschen im Raum hat sich "
+ +"jedoch nicht geaendert...\n",({who,this_player()}));
+ who->SetProp(P_FROG,0);
+ SetProp(P_FROG,1);
+ }
+ return 1;
+
+ /**************** Kuscheln ***************/
+ case "kuschel":
+ case "kuschl":
+ HELPCHECK("kuschel");
+ GHOSTCHECK("Dazu bist Du als Geist viel zu kalt und gar "
+ +"schroecklich anzusehen.\n",
+ gname()+" scheint Anwandlungen zu haben, sich an jemand "
+ +"ankuscheln zu wollen.\nEntsetzt springen alle zurueck, weil "
+ +"dazu ist er doch zu kalt und schroecklich\nanzusehen.\n", 0);
+ ParseRest(str);
+ if (!who)
+ Return("An wen willst Du Dich ankuscheln?\n");
+ out_sel="Du kuschelst Dich@@adverb@@ an @@wen@@ an.";
+ out_vic="@@name@@ kuschelt sich@@adverb@@ an Dich an.";
+ out_oth="@@name@@ kuschelt sich@@adverb@@ an @@wen@@ an.";
+ return FeelIt();
+
+ /**************** Lachen ***************/
+ case "lach":
+ HELPCHECK("lach");
+ GHOSTCHECK("Du lachst mit hohler Stimme. Den Umstehenden (sind doch welche"
+ +" da, oder?)\nlaeuft es kalt den Ruecken runter.\n",
+ gname()+" lacht mit hohler Stimme.\nDir laeuft es eiskalt den Ruecken"
+ +" runter.\n", 0);
+ if (!str) {
+ out_sel="Du brichst vor Lachen zusammen.";
+ out_oth="@@name@@ bricht vor Lachen zusammen.";
+ }
+ else {
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du lachst@@adverb@@ ueber @@alle@@.";
+ out_vic="@@name@@ lacht@@adverb@@ ueber @@alle@@.";
+ return MixedOut(WEN);
+ }
+ if (!who && !adverb)
+ Return("Lache wie, lache ueber wen?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Lach Dich doch nicht selber aus - das machen schon andere...",
+ "Gelacht wird nur ueber Lebewesen (die koennen sich drueber aergern)."))
+ return 1;
+ out_sel="Du lachst@@adverb@@"+(who?" ueber@@ wen@@":"")+".";
+ if (who) out_vic="@@name@@ lacht@@adverb@@ ueber Dich.";
+ out_oth="@@name@@ lacht@@adverb@@"+(who?" ueber@@ wen@@":"")+".";
+ }
+ return FeelIt();
+
+ /**************** Laecheln ***************/
+ case "laechel":
+ case "laechl":
+ HELPCHECK("laechel");
+ if (ghost()) {
+ write("Du laechelst innerlich.\n");
+ return 1;
+ }
+ if(!str) {
+ out_sel="Du laechelst.";
+ out_oth="@@name@@ laechelt.";
+ }
+ else {
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du laechelst @@alle@@@@adverb@@ an.";
+ out_vic="@@name@@ laechelt @@alle@@@@adverb@@ an.";
+ return MixedOut(WEN);
+ }
+ if (!who && !adverb && str)
+ Return("Wie oder wen?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Musst schon jemand anders anlaecheln.",
+ "Bitte ein Lebewesen anlaecheln."))
+ return 1;
+ out_sel="Du laechelst@@ wen@@@@adverb@@"+(who ? " an." : ".");
+ if (who) out_vic="@@name@@ laechelt Dich@@adverb@@ an.";
+ out_oth="@@name@@ laechelt@@ wen@@@@adverb@@"+(who ? " an." : ".");
+ }
+ return FeelIt();
+
+ /**************** Liebe ***************/
+ /* These lines appear Courtesy of Angus@MorgenGrauen. So long, and thanks */
+ /* for all the fish, errr, text, Angus :) */
+ case "lieb":
+ HELPCHECK("lieb");
+ if (ghost())
+ Return("Auf diese Freuden musst Du als Geist leider verzichten.\n");
+ ParseRest(str);
+ if (!who)
+ Return("Wen hast Du lieb?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Ja, ich weiss, Du magst Dich, aber das musst Du nicht zur Schau"
+ +"stellen.",
+ "Du entwickelst seltsame Neigungen, finde ich."))
+ return 1;
+ str1=(who->QueryProp(P_GENDER)==FEMALE ? "ihr" : "ihm");
+ /* old version:
+ out_sel="Du fluesterst @@wem@@@@adverb@@ liebevolle Worte ins Ohr.";
+ out_vic=gname()+" fluestert Dir@@adverb@@ liebevolle Worte ins Ohr.";
+ out_oth=gname()+" fluestert@@adverb@@ sanfte Worte zu @@wem@@.";
+ */
+ out_sel="Du schliesst die Augen, schmiegst Dich eng an @@wen@@ und gibst"
+ +LF+str1+" einen zaertlichen und leidenschaftlichen Kuss.\n"
+ +"Um Dich herum versinkt die Welt und Du glaubst, auf Wolken zu "
+ +"schweben.";
+ out_vic="@@name@@ drueckt Dich zaertlich an sich und gibt Dir\n"
+ +"einen zaertlichen und leidenschaftlichen Kuss. Du schliesst die\n"
+ +"Augen und traeumst ein wenig......Du schwebst auf Wolken direkt\n"
+ +"in den siebten Himmel.";
+ out_oth="Du schaust dezent weg, als sich @@name@@ und "+who->name()
+ +" verliebt in die Arme\nsinken.";
+ return FeelIt();
+
+ /**************** Loben ***************/
+ case "lob":
+ HELPCHECK("lob");
+ if (!str)
+ Return("Wen oder was willst Du loben?\n");
+ ParseRest(str);
+ if (who==ME) {
+ ofoo=clone_object("/items/furz");
+ ofoo->set_furzer(this_player());
+ ofoo->set_eigenlob();
+ ofoo->move(environment(this_player()));
+ //DEBUG Furz zum Eigenlob patchen :>
+ out_sel="Du lobst Dich selber@@adverb@@. Die Folgen kennst Du ja...";
+ out_oth="@@gname@@ lobt sich selber@@adverb@@, mit den bekannten Folgen.";
+ } else if (who) {
+ out_sel="Du lobst @@wen@@@@adverb@@.";
+ out_vic="@@gname@@ lobt Dich@@adverb@@.";
+ out_oth="@@gname@@ lobt @@wen@@@@adverb@@.";
+ } else {
+ out_sel="Du lobst "+str+".";
+ out_oth="@@gname@@ lobt "+str+".";
+ }
+ return FeelIt();
+
+ /**************** Moppern ***************/
+ case "mopper":
+ HELPCHECK("mopper");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Moppere wie?\n");
+ out_sel="Du mopperst@@adverb@@.";
+ out_oth="@@gname@@ moppert@@adverb@@.";
+ return FeelIt();
+
+ /**************** Mustern ***************/
+ case "muster":
+ HELPCHECK("muster");
+ ParseRest(str);
+ if (!who)
+ Return("Mustere wen?\n");
+ out_sel="Du musterst @@wen@@@@adverb@@.";
+ out_vic="@@gname@@ mustert Dich@@adverb@@.";
+ out_oth="@@gname@@ mustert @@wen@@@@adverb@@.";
+ return FeelIt();
+
+ /**************** Nicken ***************/
+ case "ja":
+ case "nick":
+ HELPCHECK("nick");
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du nickst @@alle@@@@adverb@@ zu.";
+ out_vic="@@gname@@ nickt @@alle@@@@adverb@@ zu.";
+ return MixedOut(WEM);
+ }
+ if (str && !who && !adverb)
+ Return("Nicke wie oder wem zu oder wem wie zu?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du willst Dir selber zunicken? Lieber nicht, das sieht so albern aus.",
+ "Hm. Nix passiert. Von Lebewesen bekommt man meistens mehr Feedback."))
+ return 1;
+ out_sel="Du nickst@@ wem@@@@adverb@@"
+ +(who ? " zu." : (adverb ? "." : " zustimmend."));
+ if (who) out_vic="@@gname@@ nickt Dir@@adverb@@ zu.";
+ out_oth="@@gname@@ nickt@@ wem@@@@adverb@@"
+ +(who ? " zu." : (adverb ? "." : " zustimmend."));
+ return FeelIt();
+
+ /**************** Niesen ***************/
+ case "nies":
+ HELPCHECK("nies");
+ if (ghost())
+ Return("Du hast keine Nase mehr, in der es Dich jucken koennte...\n");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Niese wie?\n");
+ out_sel="Haaaaaa-tschi! Gesundheit!"+(adverb ? " Du niest@@adverb@@." : "");
+ out_oth="Haaaaaa-tschi! @@name@@ niest@@adverb@@.";
+ return FeelIt();
+
+ /**************** Ohrfeigen ***************/
+ case "gib":
+ HELPCHECK("gib");
+ if (!str)
+ Return("Gib wem was?\n");
+ if (sscanf( str,"%s ohrfeige",str1)==0)
+ return 0;
+ ParseRest(str, ({"ohrfeige", "eine ohrfeige"}));
+ if (for_all) {
+ out_sel="Du verpasst @@alle@@@@adverb@@ eine Ohrfeige.";
+ out_vic="@@name@@ verpasst @@alle@@@@adverb@@ eine Ohrfeige.";
+ return MixedOut(WEM);
+ }
+ if (!who)
+ Return("Gib wem eine Ohrfeige?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Dazu sind Dir Deine Backen doch zu schade.",
+ "Du wirst doch nichts schlagen, was sich nicht wehren kann?"))
+ return 1;
+ GHOSTCHECK("Deine Hand saust mit voller Wucht durch dein Opfer durch!",
+ gname()+" will "+who->name(WEM)+" eine Ohrfeige geben - aber die Hand\n"
+ +"saust mit voller Wucht durch das Opfer durch!", 0);
+ out_sel="Du verpasst @@wem@@@@adverb@@ eine schallende Ohrfeige.";
+ out_vic="@@name@@ verpasst Dir@@adverb@@ eine Watsche, dass Dir Hoeren "
+ +"und Sehen vergeht.";
+ out_oth="@@name@@ verpasst @@wem@@@@adverb@@ eine schallende Ohrfeige.";
+ return FeelIt();
+
+ /**************** Pfeifen ***************/
+ case "pfeif":
+ HELPCHECK("pfeif");
+ GHOSTCHECK("Es kommt leider nur (nicht mal heisse) Luft, aber kein "
+ +"Pfiff.\n",
+ gname()+" spitzt den Mund und pustet angestrengt. Nichts passiert.\n", 0);
+ ParseRest(str, "nach");
+ if (str && !who && !adverb)
+ Return("Pfeife wie? Pfeife wem nach? Haeh?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Was willst Du denn damit ausdruecken? Das gibt fuer mich keinen Sinn.",
+ "Ich habe keine Lust dazu."))
+ return 1;
+ out_sel="Du pfeifst@@ wen@@@@adverb@@"
+ +(who ? " nach." : (adverb ? "." : " anerkennend."));
+ if (who) out_vic="@@name@@ pfeift Dir@@adverb@@ nach.";
+ out_oth="@@name@@ pfeift@@ wen@@@@adverb@@"
+ +(who ? " nach." : (adverb ? "." :" anerkennend."));
+ return FeelIt();
+
+ /**************** Philosophieren ***************/
+ case "philosophier":
+ HELPCHECK("philosophier");
+ ParseRest(str);
+ out_sel="Du philosophierst"+(adverb ? "@@adverb@@." :
+ (str ? " ueber "+str+"." : "."));
+ out_oth="@@gname@@ philosophiert"+(adverb ? "@@adverb@@." :
+ (str ? " ueber "+str+"." : "."));
+ return FeelIt();
+
+ /**************** (Nase) Putzen ***************/
+ case "putz":
+ HELPCHECK("putz");
+ if (ghost())
+ Return("Nix da zum Putzen, so nebuloes, wie Du bist.\n");
+ ParseRest(str, ({"nase", "die nase"}));
+ if (str && str!="nase" && !adverb)
+ Return("Putze Deine Nase wie?\n");
+ out_sel="Du putzt Deine Nase@@adverb@@.";
+ out_oth="@@name@@ putzt@@adverb@@ "+QPP(FEMALE,WEN)+" Nase.";
+ return FeelIt();
+
+ /**************** Quaken ***************/
+ case "quak":
+ HELPCHECK("quak");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Quake wie?\n");
+ sfoo="";
+ flag=QueryProp(P_FROG)&&!ghost();
+ for (t_g=0; t_g<=random(flag ? 4 : 2); t_g++) {
+ sfoo+=(flag ? " Qu" : " kw");
+ for (t_n=0; t_n<=random(flag ? 10 : 5); t_n++)
+ sfoo+="aA"[random(1)..random(1)];
+ sfoo+="k";
+ }
+ if (!flag)
+ sfoo=lower_case(sfoo);
+ else
+ sfoo+="!";
+ out_sel="Du quakst"+(adverb ? "@@adverb@@" : (flag ? " aus voller Kehle"
+ : " in etwa wie ein Frosch"))+":"+sfoo;
+ out_oth="@@gname@@ quakt"+(adverb ? "@@adverb@@" : (flag ? " aus voller Kehle"
+ : " in etwa wie ein Frosch"))+":"+sfoo;
+ return FeelIt();
+
+ /**************** Quietschen ***************/
+ case "quietsch":
+ case "quiek":
+ HELPCHECK("quiek");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Quietsche wie?\n");
+ out_sel="Du quietschst"+(adverb ? "@@adverb@@." : " vergnuegt.");
+ out_oth="@@gname@@ quietscht"+(adverb ? "@@adverb@@." : " vergnuegt.");
+ return FeelIt();
+
+ /**************** Raeuspern ***************/
+ case "raeusper":
+ HELPCHECK("raeusper");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Hm? Wie meinen?\n");
+ out_sel="Du raeusperst Dich@@adverb@@.";
+ out_oth="@@gname@@ raeuspert sich@@adverb@@.";
+ return FeelIt();
+
+ /**************** Reiben ***************/
+ case "reib":
+ HELPCHECK("reib");
+ if (ghost())
+ Return("Du hast nichts zum Reiben, aber auch gar nichts.\n");
+ if (str && (sscanf(str,"%s die Augen",sfoo)==1 || sscanf(str,"%s Augen",sfoo)==1))
+ str=sfoo;
+ else if (str && (sscanf(str,"%s die Haende",sfoo)==1
+ ||sscanf(str,"%s Haende",sfoo)==1)) {
+ flag=2;
+ str=sfoo;
+ }
+ if (str=="") str=0;
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Reibe wie die "+(flag==2 ? "Haende" : "Augen")+"?\n");
+ out_sel="Du reibst Dir"+(adverb ? "@@adverb@@"
+ : (flag==2 ? " vergnuegt" : " muede"))+" die "
+ +(flag==2 ? "Haende." : "Augen.");
+ out_oth="@@name@@ reibt sich"+(adverb ? "@@adverb@@"
+ : (flag==2 ? " vergnuegt" : " muede"))+" die "
+ +(flag==2 ? "Haende." : "Augen.");
+ return FeelIt();
+
+ /**************** Rotfln ***************/
+ case "rotfl":
+ HELPCHECK("rotfl");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Rotfl wie?\n");
+ out_sel="Du rotflst@@adverb@@.";
+ out_oth="@@gname@@ rotflt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Ruelpsen ***************/
+ case "ruelps":
+ HELPCHECK("ruelps");
+ GHOSTCHECK("Ein leichter Windhauch entfaehrt Deinem Mund, mehr nicht.\n",
+ "Dem Mund des Geistes von "+capname()
+ +" entfaehrt ein leichtes Lueftchen.\n", 0);
+ if (!str) {
+ out_sel="BOOOOEEERRRRPP! Entschuldige dich gefaelligst!";
+ out_oth="@@name@@ ruelpst unanstaendig.";
+ }
+ else {
+ ParseRest(str);
+ if (!adverb) {
+ write("Ruelpse wie (schlimm genug, dass Du Dich nicht beherrschen "
+ +"kannst!)?\n");
+ return 1;
+ }
+ out_sel="Du ruelpst@@adverb@@. Schaem Dich!";
+ out_oth="@@name@@ ruelpst@@adverb@@ und wird nicht mal rot dabei.";
+ }
+ return FeelIt();
+ }
+
+ switch (vb) {
+ /**************** Runzeln ***************/
+ case "runzel":
+ case "runzl":
+ HELPCHECK("runzel");
+ if (ghost())
+ Return("DAS geht als Geist nun wirklich nicht.\n");
+ ParseRest(str,"stirn");
+ if (str && !adverb)
+ Return("Runzle die Stirn wie?\n");
+ out_sel="Du runzelst@@adverb@@ die Stirn.";
+ out_oth="@@name@@ runzelt@@adverb@@ die Stirn.";
+ return FeelIt();
+
+ /**************** Sabbere ***************/
+ case "sabber":
+ HELPCHECK("sabber");
+ sfoo=ghost() ? "schleim" : "sabber";
+ ParseRest(str);
+ if (str && !adverb && !who)
+ Return("Sabber wie oder wen an?\n");
+ out_sel="Du "+sfoo+"st@@ wen@@@@adverb@@ "
+ +(who ? "an." : "auf den Boden.");
+ if (who) out_vic="@@gname@@ "+sfoo+"t Dich@@adverb@@ an.";
+ out_oth="@@gname@@ "+sfoo+"t@@ wen@@@@adverb@@ "
+ +(who ? "an." : "auf den Boden.");
+ return FeelIt();
+
+ /**************** Schaemen ***************/
+ case "schaem":
+ HELPCHECK("schaem");
+ ParseRest(str);
+ if (str && !adverb && lower_case(str)!="dich")
+ Return("Schaeme Dich wie?\n");
+ out_sel="Du schaemst Dich@@adverb@@.";
+ out_oth="@@gname@@ schaemt sich@@adverb@@.";
+ return FeelIt();
+
+#ifdef SCHAU_AN
+ /**************** Schau an ***************/
+ case "schau":
+ HELPCHECK("schau");
+ if (!str || old_explode(str, " ")[sizeof(old_explode(str, " "))]!="an")
+ return 0;
+ ParseRest(str, "an");
+ if (!who)
+ Return("Schau wen an?\n");
+ out_sel="Du schaust @@wen@@@@adverb@@ an.";
+ out_vic="@@gname@@ schaut Dich@@adverb@@ an.";
+ out_oth="@@gname@@ schaut @@wen@@@@adverb@@ an.";
+ return FeelIt();
+#endif
+
+ /**************** Schluchzen ***************/
+ case "schluchz":
+ HELPCHECK("schluchz");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schluchze wie?\n");
+ out_sel="Du schluchzt"+(adverb ? "@@adverb@@." : " herzzerreissend.");
+ out_oth="@@gname@@ schluchzt"
+ +(adverb ? "@@adverb@@." : " herzzerreissend.");
+ return FeelIt();
+
+ /**************** Schmollen ***************/
+ case "schmoll":
+ HELPCHECK("schmoll");
+ GHOSTCHECK("Du schwebst beleidigt in die Ecke.\n",
+ gname()+" schwebt beleidigt in die Ecke und schmollt.\n", 0);
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schmolle wie?\n");
+ out_sel="Du schmollst@@adverb@@.";
+ out_oth="@@name@@ geht in die Ecke und schmollt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Schmunzeln ***************/
+ case "schmunzel":
+ case "schmunzl":
+ HELPCHECK("schmunzel");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schmunzle wie?\n");
+ out_sel="Du schmunzelst@@adverb@@.";
+ out_oth="@@gname@@ schmunzelt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Schnalzen ***************/
+ case "schnalz":
+ HELPCHECK("schnalz");
+ ParseRest(str, ({"zunge","mit zunge", "mit der zunge"}));
+ out_sel="Du schnalzt@@adverb@@ mit der Zunge.";
+ out_oth="@@gname@@ schnalzt@@adverb@@ mit der Zunge.";
+ return FeelIt();
+
+ /**************** Schnauben ***************/
+ case "schnaub":
+ HELPCHECK("schnaub");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schnaube wie?\n");
+ out_sel="Du schnaubst"+(adverb ? "@@adverb@@." : " entruestet.");
+ out_oth="@@gname@@ schnaubt"+(adverb ? "@@adverb@@." : " entruestet.");
+ return FeelIt();
+
+ /**************** Schnaufen ***************/
+ case "schnauf":
+ HELPCHECK("schnauf");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schnaufe wie?\n");
+ out_sel="Du schnaufst"+(adverb ? "@@adverb@@." : " vor Anstrengung.");
+ out_oth="@@gname@@ schnauft"+(adverb ? "@@adverb@@." : " vor Anstrengung.");
+ return FeelIt();
+
+ /**************** Schnippen ***************/
+ case "schnipp":
+ case "schnipps":
+ HELPCHECK("schnipp");
+ GHOSTCHECK("Du schaffst es nicht, weil die Finger durcheinander durch "
+ +"gehen.\n",
+ gname()+" versagt beim Schnippen - die Finger\ngehen durcheinander "
+ +"durch.\n", 0);
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schnippe wie?\n");
+ out_sel="Du schnippst@@adverb@@ mit deinen Fingern.";
+ out_oth="@@name@@ schnippt@@adverb@@ mit den Fingern.";
+ return FeelIt();
+
+ /**************** Schnarchen ***************/
+ case "schnarch":
+ HELPCHECK("schnarch");
+ if (ghost())
+ Return("Ich glaube, da fehlen Dir irgendwie die physischen "
+ +"Voraussetzungen dazu.\n");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schnarche wie?\n");
+ out_sel=(str ? "Zzzzzzzzzzz..." : "Du schnarchst@@adverb@@.");
+ out_oth="@@name@@ schnarcht "+(str ? "@@adverb@@." : "laut.");
+ return FeelIt();
+
+ /**************** Schniefen ***************/
+ case "snief":
+ case "schnief":
+ HELPCHECK("schnief");
+ GHOSTCHECK("Du schniefst ganz leise.\n",
+ gname()+" schnieft ganz leise.\n", 0);
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schniefe wie?\n");
+ out_sel="Du schniefst@@adverb@@.";
+ out_oth="@@name@@ schnieft@@adverb@@.";
+ return FeelIt();
+
+ /**************** Schnurren ***************/
+ case "schnurr":
+ HELPCHECK("schnurr");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Wie willst Du schnurren?\n");
+ out_sel="MMMMIIIIIAAAAAAUUUUUUUU! Du schnurrst"
+ +(adverb ? "@@adverb@@." : " zufrieden.");
+ out_oth="@@gname@@ schnurrt"+(adverb ? "@@adverb@@." : " zufrieden.");
+ return FeelIt();
+
+ /**************** Schreien ***************/
+ case "schrei":
+ HELPCHECK("schrei");
+ GHOSTCHECK("AAAAIIIIIIIIIIIEEEEEEEEEEEEEEEEEEEEEEEEEE! Ja, nur Geister "
+ +"koennen so schreien!\n",
+ gname()+" schreit - das Blut gefriert fast in deinen Ader!\n", 0);
+ if (!str) {
+ out_sel="AUUUAAAHHHHHH!!!!";
+ out_oth="@@name@@ schreit laut!";
+ }
+ else {
+ ParseRest(str);
+ if (!who && !adverb)
+ Return("Schreien - wie denn? Oder wen denn anschreien?\n");
+ out_sel="Du schreist@@ wen@@@@adverb@@"+(who ? " an" : "")+".";
+ if (who) out_vic="@@name@@ schreit Dich@@adverb@@ an.";
+ out_oth="@@name@@ schreit@@ wen@@@@adverb@@"+(who? " an" : "")+".";
+ }
+ return FeelIt();
+
+ /**************** Schuetteln ***************/
+ case "schuettel":
+ case "schuettl":
+ HELPCHECK("schuettel");
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du schuettelst @@alle@@@@adverb@@ die Haende.";
+ out_vic="@@gname@@ schuettelt @@alle@@@@adverb@@ die Haende.";
+ return MixedOut(WEM);
+ }
+ if (str && !who && !adverb)
+ Return("Schuettle wie? Schuettle wem die Hand?\n");
+ if(!who) {
+ out_sel="Du schuettelst Dich@@adverb@@.";
+ out_oth="@@gname@@ schuettelt sich@@adverb@@.";
+ }
+ else {
+ if (CheckLife(0,NOT_DEAD,
+ "", "Noe, das mach ich nur mit Lebewesen."))
+ return 1;
+ if (who == this_player()) {
+ out_sel="Du hebst"+(adverb ? "@@adverb@@" : " triumphierend")
+ +" Deine Haende ueber den Kopf und schuettelst sie.";
+ out_oth="@@gname@@ hebt"+(adverb ? "@@adverb@@" : " triumphierend")
+ +" die Haende ueber den Kopf\nund schuettelt sie.";
+ }
+ else {
+ out_sel="Du schuettelst@@ wem@@@@adverb@@ die Haende.";
+ if (ghost()) out_sel+="\nNaja, Du versuchst es wenigstens - "
+ +"immer diese durchlaessigen Haende...";
+ out_vic="@@gname@@ schuettelt Dir@@adverb@@ die Haende.";
+ if (ghost()) out_vic+="\nNaja, Du versuchst es wenigstens - "
+ +"immer diese durchlaessigen Haende...";
+ out_oth="@@gname@@ schuettelt@@ wem@@@@adverb@@ die Haende.";
+ if (ghost()) out_oth+="\nNaja, Du versuchst es wenigstens - "
+ +"immer diese durchlaessigen Haende...";
+ }
+ }
+ return FeelIt();
+
+ /**************** Schweigen ***************/
+ case "schweig":
+ HELPCHECK("schweig");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schweige wie?\n");
+ out_sel="Du schweigst@@adverb@@.";
+ out_oth="@@gname@@ schweigt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Seufzen ***************/
+ case "seufz":
+ HELPCHECK("seufz");
+ GHOSTCHECK("Du seufzt geisterhaft.\n",
+ gname()+" seufzt geisterhaft. Naja, wie denn sonst?\n", 0);
+ ParseRest(str);
+ if (!adverb && str)
+ Return("Seufze wie?\n");
+ out_sel="Du seufzst@@adverb@@.";
+ out_oth="@@name@@ seufzt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Singen ***************/
+ case "sing":
+ HELPCHECK("sing");
+ if (!str) {
+ out_sel="Oh sole mio!";
+ out_oth="@@gname@@ singt irgendwas italienisches.";
+ }
+ else {
+ ParseRest(str);
+ out_sel="Du singst@@adverb@@"+(adverb ? "." : " '"+capitalize(str)+"'.");
+ out_oth="@@gname@@ singt@@adverb@@"+(adverb ? "." : " '"
+ +capitalize(str)+"'.");
+ }
+ return FeelIt();
+
+ /**************** Sniffen ***************/
+ case "sniff":
+ HELPCHECK("sniff");
+ ParseRest(str);
+ if (str && !adverb && !who)
+ Return("Sniffe wie?\n");
+ out_sel="Du sniffst"+(who ? " @@wen@@" : "")
+ +(adverb ? "@@adverb@@" : " traurig")+(who ? " an." : ".");
+ if (who) out_vic="@@gname@@ snifft Dich"
+ +(adverb ? "@@adverb@@" : " traurig")+" an.";
+ out_oth="@@gname@@ snifft"+(who ? " @@wen@@" : "")
+ +(adverb ? "@@adverb@@" : " traurig")+(who ? " an." : ".");
+ return FeelIt();
+
+ /**************** Spucken ***************/
+ case "spuck":
+ HELPCHECK("spuck");
+ GHOSTCHECK("Du bringst nicht genug Spucke zusammen.\n",
+ gname()+" stellt gerade fest, dass man ohne Spucke nicht\n"
+ +"spucken kann.\n", 0);
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Spucke wen wie an?\n");
+ if (who && CheckLife(NOT_SELF,0,
+ "Hast Du Dich so schlecht benommen? Lass es lieber bleiben."))
+ return 1;
+ out_sel="Du spuckst@@ wen@@@@adverb@@ "+(who ? "an." : "auf den Boden.");
+ if (who) out_vic="@@name@@ spuckt Dich@@adverb@@ an.";
+ out_oth="@@name@@ spuckt@@ wen@@@@adverb@@ "
+ +(who ? "an." : "auf den Boden.");
+ return FeelIt();
+
+ /**************** Stampfen ***************/
+ case "stampf":
+ HELPCHECK("stampf");
+ ParseRest(str, "auf");
+ out_sel="Du stampfst@@adverb@@ mit dem Fuss auf.";
+ out_oth="@@gname@@ stampft@@adverb@@ mit dem Fuss auf.";
+ return FeelIt();
+
+ /**************** Starren ***************/
+ case "starr":
+ HELPCHECK("starr");
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Starre wie bzw. wen an?\n");
+ if (who && CheckLife(NOT_SELF,0,
+ "Wie willst Du in Deine eigenen Augen starren? "
+ +"(Spiegel gelten nicht...)"))
+ return 1;
+ out_sel="Du starrst"+(!str ? " ins Leere." : (who ? "@@ wen@@" : "")
+ +(adverb ? "@@adverb@@" : " vertraeumt")+(who ? " an." : "."));
+ if (who) out_vic="@@gname@@ starrt"+(adverb ? "@@adverb@@" : " tief")
+ +" in Deine Augen.";
+ out_oth="@@gname@@ starrt"+(!str ? " ins Leere." : (who ? "@@ wen@@" : "")
+ +(adverb ? "@@adverb@@" : " vertraeumt")+(who ? " an." : "."));
+ return FeelIt();
+
+ /**************** Staunen ***************/
+ case "staun":
+ HELPCHECK("staun");
+ if (!str) {
+ out_sel="Du bist erstaunt.";
+ out_oth="@@gname@@ ist erstaunt.";
+ }
+ else {
+ ParseRest(str, "ueber");
+ if (!who && !adverb)
+ Return("Bla bla. Wenn Du nach staune noch was tippst, sollte "
+ +"das ein\nLebewesen sein.\n");
+ if (who == this_player()) {
+ out_sel="Du staunst@@adverb@@ ueber Dich selber.";
+ out_oth="@@gname@@ staunt@@adverb@@ ueber sich selber.";
+ }
+ else {
+ out_sel="Du staunst@@adverb@@"+(who ? " ueber @@wen@@." : ".");
+ if (who) out_vic="@@gname@@ staunt@@adverb@@ ueber Dich.";
+ out_oth="@@gname@@ staunt@@adverb@@"+(who ? " ueber @@wen@@." : ".");
+ }
+ }
+ return FeelIt();
+
+ /**************** Stieren ***************/
+ case "stier":
+ HELPCHECK("stier");
+ GHOSTCHECK("Du stierst mit hohlem Blick in die Gegend.\n",
+ gname()+" stiert mit hohlem Blick in die Gegend.\n", 0);
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Stiere wie oder wen an?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du kannst Dich nicht selber anstieren.",
+ "Bitte nur Lebewesen anstieren."))
+ return 1;
+ out_sel="Du stierst@@ wen@@@@adverb@@"
+ +(who ? " an." : " in der Gegend herum.");
+ if (who) out_vic="@@gname@@ stiert Dich@@adverb@@ an.";
+ out_oth="@@gname@@ stiert@@ wen@@@@adverb@@"
+ +(who ? " an." : " in der Gegend herum.");
+ return FeelIt();
+
+ /**************** Stimme zu ***************/
+ case "stimm":
+ HELPCHECK("stimm");
+ ParseRest(str, "zu");
+ if (str && !who && !adverb)
+ Return("Stimme wem zu?\n");
+ out_sel="Du stimmst@@ wem@@@@adverb@@ zu.";
+ if (who) out_vic="@@gname@@ stimmt Dir@@adverb@@ zu.";
+ out_oth="@@gname@@ stimmt@@ wem@@@@adverb@@ zu.";
+ return FeelIt();
+
+ /**************** Stoehnen ***************/
+ case "stoehn":
+ HELPCHECK("stoehn");
+ GHOSTCHECK("Du stoehnst schauderlich.\n",
+ gname()+" stoehnt schauderlich. Zum Glueck\nhast Du ziemlich "
+ +"gute Nerven.\n", 0);
+ ParseRest(str);
+ if (!adverb && str)
+ Return("Wie willst Du stoehnen?\n");
+ out_sel="Du stoehnst@@adverb@@.";
+ out_oth="@@name@@ stoehnt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Stossen ***************/
+ case "stoss":
+ HELPCHECK("stoss");
+ ParseRest(str);
+ if (!who)
+ Return("Stosse wen?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Was soll der Unsinn? Lass das!",
+ "Das gibt nur bei Lebewesen Sinn."))
+ return 1;
+ GHOSTCHECK("Dein Ellenbogen versinkt in "+who->name(WEM)+".\n",
+ gname()+" will "+who->name(WEM)+" in die Rippen stossen, aber "
+ +QPP(MALE,WER,PLURAL)+"\nEllenbogen verteilen keinen Stoss, "
+ +"sondern versinken.\n",
+ gname()+" will Dich in die Rippen stossen, aber "+QPP(MALE,WER,PLURAL)
+ +" Ellenbogen versinken.\n");
+ out_sel="Du stoesst@@ wen@@@@adverb@@ in die Rippen.";
+ out_vic="@@name@@ stoesst Dir@@adverb@@ in die Rippen.";
+ out_oth="@@name@@ stoesst@@ wen@@@@adverb@@ in die Rippen.";
+ return FeelIt();
+
+ /**************** Streicheln ***************/
+ case "streichel":
+ case "streichl":
+ HELPCHECK("streichel");
+ ParseRest(str);
+ if (!who)
+ Return("Streichle wen?\n");
+ if (for_all) {
+ out_sel="Du streichelst @@alle@@@@adverb@@.";
+ out_vic="@@gname@@ streichelt @@alle@@@@adverb@@.";
+ return MixedOut(WEN);
+ }
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Lass Dich von anderen streicheln.",
+ "Ich streichle nur Lebewesen."))
+ return 1;
+ GHOSTCHECK("Du willst "+who->name(WEN,2)+" streicheln, aber Deine "
+ +"Haende koennen\nnichts beruehren.\n",
+ gname()+" will "+who->name(WEN,2)+" streicheln, aber diese\n"
+ +"Geisterhaende koennen halt nix beruehren...\n",
+ gname()+" will Dich streicheln, scheitert aber wie so oft an\n"
+ +"diesen dummen durchlaessigen Geisterhaenden.\n");
+ out_sel="Du streichelst @@wen@@@@adverb@@.";
+ out_vic="@@name@@ streichelt Dich@@adverb@@.";
+ out_oth="@@name@@ streichelt @@wen@@@@adverb@@.";
+ return FeelIt();
+
+ /**************** Stupsen ***************/
+ case "stups":
+ HELPCHECK("stups");
+ if (ghost())
+ Return("Das geht nicht ohne Ellenbogen,..\n");
+ ParseRest(str);
+ if (!who)
+ Return("Stupse wen an?\n");
+ out_sel="Du stupst @@wen@@@@adverb@@ an.";
+ out_vic="@@name@@ stupst Dich@@adverb@@ an.";
+ out_oth="@@name@@ stupst @@wen@@@@adverb@@ an.";
+ return FeelIt();
+
+ /**************** Stutzen ***************/
+ case "stutz":
+ HELPCHECK("stutz");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Stutze wie?\n");
+ out_sel="Du stutzt@@adverb@@.";
+ out_oth="@@gname@@ stutzt@@adverb@@.";
+ return FeelIt();
+
+ /**************** Taetscheln ***************/
+ case "taetschel":
+ case "taetschl":
+ HELPCHECK("taetschel");
+ ParseRest(str);
+ if (!who)
+ Return("Taetschle wen?\n");
+ if (CheckLife(NOT_SELF,NOT_DEAD,
+ "Das sieht zu doof aus, das mache ich nicht.",
+ "Ich taetschle nur Lebewesen."))
+ return 1;
+ GHOSTCHECK("Du willst "+who->name(WEN)+" taetscheln - aber Deine "
+ +"Haende gehen\nglatt durch den Kopf durch.\n",
+ gname()+" will "+who->name(WEN)+" den Kopf taetscheln, aber "
+ +"die Geister-\nhaende gehen glatt durch den Kopf durch.\n",
+ gname()+" will Deinen Kopf taetscheln, aber diese Geisterhaende "
+ +"gehen\nglatt durch Deinen Kopf durch - Du hast ein seltsames "
+ +"Gefuehl dabei.\n");
+ out_sel="Du taetschelst @@wem@@@@adverb@@ den Kopf.";
+ out_vic="@@name@@ taetschelt Dir@@adverb@@ den Kopf.";
+ out_oth="@@name@@ taetschelt @@wem@@@@adverb@@ den Kopf.";
+ return FeelIt();
+
+ /**************** Tanzen ***************/
+ case "tanz":
+ HELPCHECK("tanz");
+ GHOSTCHECK("Du tanzt den klassischen GeisterTanz (tm).\n",
+ gname()+" tanzt den klassischen GeisterTanz (tm).\n", 0);
+ if (!str) {
+ out_sel="Kommst Du Dir nicht irgendwie bloed vor? Du tanzt "
+ +"den Ententanz.";
+ out_oth="@@name@@ tanzt den Ententanz.";
+ }
+ else {
+ taenze=({"Walzer","Polka","Rumba","Tango","Cha cha cha","Foxtrott",
+ "Mambo","Salsa","Slowfox","Breakdance","Pogo","Merengue",
+ "Rock'n'Roll","Ballett","Regentanz","Hexentanz"});
+ ParseRest(str,"mit");
+ if (!who)
+ Return("Mit wem willst Du tanzen?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Mit Dir selber kannst Du nicht tanzen.",
+ "Keine Reaktion - will wahrscheinlich nicht tanzen."))
+ return 1;
+ ifoo=random(sizeof(taenze));
+ out_sel="Du tanzt@@adverb@@ mit @@wem@@ eine Runde "+taenze[ifoo]+".";
+ out_vic="@@name@@ reisst Dich an sich und tanzt@@adverb@@ eine Runde "
+ +taenze[ifoo]+" mit Dir.";
+ out_oth="@@name@@ schnappt sich @@wen@@ und die beiden tanzen"
+ +"@@adverb@@ eine Runde "+taenze[ifoo]+".";
+ }
+ return FeelIt();
+
+ /**************** Traeumen ***************/
+ case "traeum":
+ HELPCHECK("traeum");
+ if (!str)
+ Return("Traeume wovon oder von wem?\n");
+ ParseRest(str);
+ out_sel="Du traeumst"+(who ? "@@adverb@@ von @@wem@@."
+ : (adverb ? "@@adverb@@." : " "+str+"."));
+ if (who) out_vic="@@gname@@ traeumt@@adverb@@ von Dir.";
+ out_oth="@@gname@@ traeumt"+(who ? "@@adverb@@ von @@wem@@."
+ : (adverb ? "@@adverb@@." : " "+str+"."));
+ return FeelIt();
+
+ /**************** Treten (tritt) ***************/
+ case "tritt":
+ case "tret":
+ HELPCHECK("tritt");
+ if (!str) {
+ GHOSTCHECK("Dein Fuss faehrt durch die beruehmte langvergessene "
+ +"unsichtbare Schildkroete\nhindurch.\n",
+ gname()+" will die beruehmte langvergessene unsichtbare\n"
+ +"Schildkroete treten, aber "+QPP(MALE,WER)
+ +" Fuss faehrt durch sie hindurch.\n", 0);
+ out_sel="Du trittst die beruehmte langvergessene unsichtbare "
+ +"Schildkroete.";
+ out_oth="@@gname@@ tritt die beruehmte langvergessene unsichtbare "
+ +"Schildkroete.";
+ }
+ else {
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du trittst @@alle@@@@adverb@@. Solltest Du nicht langsam "
+ +"an Flucht denken?";
+ out_vic="@@name@@ tritt @@alle@@@@adverb@@. Traut sich ganz "
+ +"schoen was!";
+ return MixedOut(WEN);
+ }
+ if (!who && !adverb)
+ Return("Wenn Du schon was nach tritt tippst, dann sag mir, wen "
+ +"oder wie ich das soll.\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du schaffst es nicht, Dir selber in den Hintern zu treten.",
+ "Tote Sachen tritt man nicht auch noch!"))
+ return 1;
+ if (who) {
+ out_sel="Du trittst@@ wen@@@@adverb@@.";
+ if (who) out_vic="@@gname@@ tritt Dich@@adverb@@.";
+ out_oth="@@gname@@ tritt@@ wen@@@@adverb@@.";
+ }
+ else {
+ out_sel="Du trittst die beruehmte langvergessene unsichtbare "
+ +"Schildkroete@@adverb@@.";
+ out_oth="@@gname@@ tritt die beruehmte langvergessene unsichtbare "
+ +"Schildkroete\n@@adverb@@.";
+ }
+ }
+ return FeelIt();
+
+ /**************** Troesten ***************/
+ case "troest":
+ HELPCHECK("troest");
+ ParseRest(str);
+ if (!who)
+ Return("Wen willst Du troesten?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Trost musst Du bei jemand anders suchen.",
+ "Das Teil musst Du nicht troesten, das fuehlt nix."))
+ return 1;
+ out_sel="Du troestest@@ wen@@@@adverb@@.";
+ out_vic="@@gname@@ troestet Dich@@adverb@@.";
+ out_oth="@@gname@@ troestet@@ wen@@@@adverb@@.";
+ return FeelIt();
+
+ /**************** Umarmen ***************/
+ case "umarm":
+ HELPCHECK("umarm");
+ ParseRest(str);
+ if (!who)
+ Return("Wen willst Du umarmen?\n");
+ if (who && CheckLife(0,NOT_DEAD,0,"Bitte umarme nur Lebewesen."))
+ return 1;
+ if (ghost() && CheckLife(NOT_SELF,0,
+ "Du kannst Dich als Geist nicht selber waermen."))
+ return 1;
+ str1=who->QueryProp(P_NAME);
+ if(pointerp(str1))str1=(string)str1[0]; // Rumata
+ str2=who->QueryPronoun(WEN);
+ GHOSTCHECK("Du willst "+str1+" umarmen, aber Deine Arme gehen durch "
+ +str2+" durch.\n",
+ gname()+" will "+str1+" umarmen, aber "+QPP(MALE,WER,PLURAL)
+ +" Arme gehen\ndurch "+str2+" hindurch.\n",
+ gname()+" will Dich umarmen, aber "+QPP(MALE,WER,PLURAL)
+ +" Arme gehen durch Dich hindurch.\n");
+ if (for_all) {
+ out_sel="Du umarmst @@alle@@@@adverb@@.";
+ out_vic="@@name@@ umarmt @@alle@@@@adverb@@.";
+ return MixedOut(WEN);
+ }
+ if (who==this_player()) {
+ out_sel="Du legst Deine Arme um Dich und waermst Dich "
+ +"ein bisschen selber.";
+ out_oth="@@name@@ legt "+QPP(MALE,WER,PLURAL)
+ +" Arme um sich und waermt sich ein bisschen selber.";
+ }
+ else {
+ out_sel="Du umarmst@@ wen@@@@adverb@@.";
+ out_vic="@@name@@ umarmt Dich@@adverb@@.";
+ out_oth="@@name@@ umarmt@@ wen@@@@adverb@@.";
+ }
+ return FeelIt();
+
+ /**************** Verfluchen ***************/
+ case "verfluch":
+ HELPCHECK("verfluch");
+ if (!str)
+ Return("Wen oder was willst Du denn verfluchen?\n");
+ ParseRest(str);
+ if (!who) {
+ out_sel="Du verfluchst "+str+".";
+ out_oth="@@gname@@ verflucht "+str+".";
+ }
+ else {
+ if (who==this_player())
+ Return("Sich selber verflucht man besser nicht...\n");
+ if (!adverb) {
+ flag=sscanf(str, "%s %s", str1,str2);
+ out_sel="Du verfluchst@@ wen@@"+(flag==2 ? " "+str2 : "")+".";
+ out_vic="@@gname@@ verflucht Dich"+(flag==2?" "+str2 : "")+".";
+ out_oth="@@gname@@ verflucht@@ wen@@"+(flag==2 ? " "+str2 : "")+".";
+ }
+ else {
+ out_sel="Du verfluchst@@ wen@@@@adverb@@.";
+ out_vic="@@gname@@ verflucht Dich@@adverb@@.";
+ out_oth="@@gname@@ verflucht@@ wen@@@@adverb@@.";
+ }
+ }
+ return FeelIt();
+
+ /**************** Verneigen / Verbeugen ***************/
+ case "verneig":
+ case "verbeug":
+ HELPCHECK("verneig");
+ GHOSTCHECK("Du verneigst Dich ein bisschen heftig - Dein Kopf taucht "
+ +"kurz in den Boden.\n",
+ gname()+" verneigt sich. Ein bisschen heftig - "+QPP(MALE,WER)
+ +" Kopf\ntaucht kurz in den Boden ein.\n", 0);
+ if ((!str) || (str == "dich")) {
+ out_sel="Du verneigst Dich vor den Anwesenden.";
+ out_oth="@@name@@ verneigt sich anmutig.";
+ }
+ else {
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du verneigst Dich@@adverb@@ vor @@alle@@.";
+ out_vic="@@name@@ verneigt sich@@adverb@@ vor @@alle@@.";
+ return MixedOut(WEM);
+ }
+ if (!who && !adverb)
+ Return("Verneige dich irgendwie oder vor jemandem.\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Wie willst Du das denn schaffen?",
+ "Vor Sachen wird hier nicht verneigt, klar?\n"))
+ return 1;
+ out_sel="Du verneigst Dich@@adverb@@"+(who ? " vor" : "")+"@@ wem@@.";
+ if (who ) out_vic="@@name@@ verneigt sich@@adverb@@ vor Dir.";
+ out_oth="@@name@@ verneigt sich@@adverb@@"+(who ? " vor" : "")
+ +"@@ wem@@.";
+ }
+ return FeelIt();
+
+ /**************** Verneinen ***************/
+ case "nein":
+ case "noe":
+ HELPCHECK("nein");
+ GHOSTCHECK("Du schuettelst Deinen Kopf so heftig, dass er kurz "
+ +"davonschwebt.\n",
+ gname()+" schuettelt heftig den Kopf.\nSo heftig, dass dieser "
+ +"kurz davonschwebt und wieder eingefangen werden muss.\n", 0);
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Schuettle wie den Kopf?\n");
+ out_sel="Du schuettelst@@adverb@@ den Kopf.";
+ out_oth="@@name@@ schuettelt@@adverb@@ den Kopf.";
+ return FeelIt();
+
+ /**************** Wackeln ***************/
+ case "wackel":
+ case "wackl":
+ HELPCHECK("wackel");
+ if (ghost())
+ Return("Da gibt es nichts mehr, womit Du wackeln kannst.\n");
+ if (str)
+ if (strstr(str, "mit ")==0)
+ sscanf(str, "mit %s", sfoo);
+ else if (strstr(str,"mit ")>0) {
+ sscanf(str, "%s mit %s", sfoo, sfoo);
+ flag=1;
+ }
+ if (sfoo=="") sfoo=0;
+ ParseRest(str, (sfoo ? (flag ? " mit " : "mit ")+sfoo : 0));
+ if (str && !adverb && !sfoo)
+ Return("Wackle wie oder womit?\n");
+ out_sel="Du wackelst@@adverb@@ mit "+(sfoo ? sfoo+"." : "dem Hintern.");
+ out_oth="@@name@@ wackelt@@adverb@@ mit "
+ +(sfoo ? sfoo+"." : QPP(MALE,WEM)+" Hintern.");
+ return FeelIt();
+
+ /**************** Waelzen ***************/
+ case "waelz":
+ HELPCHECK("waelz");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Waelze Dich wie auf dem Boden?\n");
+ out_sel="Du waelzt Dich"+(adverb ? "@@adverb@@" : " vor Lachen")
+ +" auf dem Boden.";
+ out_oth="@@gname@@ waelzt sich"+(adverb ? "@@adverb@@" : " vor Lachen")
+ +(ghost() ? " im" : " auf dem")+" Boden.";
+ return FeelIt();
+
+ /**************** Warten ***************/
+ case "wart":
+ HELPCHECK("wart");
+ ParseRest(str);
+ if (!str) {
+ out_sel="Du tippst mit dem Fuss auf den Boden.";
+ out_oth="@@gname@@ tippt mit dem Fuss auf den Boden.";
+ } else if (!who && adverb) {
+ out_sel="Du wartest@@adverb@@.";
+ out_oth="@@gname@@ wartet@@adverb@@.";
+ } else {
+ out_sel="Du wartest@@adverb@@ auf "+(who ? "@@wen@@." : str+".");
+ if (who) out_vic="@@gname@@ wartet@@adverb@@ auf Dich.";
+ out_oth="@@gname@@ wartet@@adverb@@ auf "+(who ? "@@wen@@." : str+".");
+ }
+ return FeelIt();
+
+#ifdef WECKE
+ /**************** Wecken ***************/
+ case "weck":
+ HELPCHECK("weck");
+ if (ParseRemote(str))
+ return 1;
+// ParseRest(str);
+ if (!who)
+ Return("Wen willst Du wecken?\n");
+ if (sscanf(str, "%s %s", sfoo, sfoo)==2)
+ flag=1;
+ out_sel="Dein Wecker klingelt bei @@wem@@@@adverb@@"
+ +(adverb ? "." : (flag ? ": "+sfoo : "."));
+ out_vic=" "+name(WESSEN)+" Wecker klingelt bei Dir@@adverb@@"
+ +(adverb ? "." : (flag ? ": "+sfoo : "."));
+ out_oth="@@gname@@ wirft "+QPP(MALE, WEN)
+ +" Wecker@@adverb@@ nach @@wem@@.";
+ if (!who->QueryProp(P_VISUALBELL))
+ out_vic[0]=7; // chr(7)==BEL
+ else out_vic=out_vic[1..];
+ return FeelIt();
+#endif
+
+ /**************** Weinen ***************/
+ case "wein":
+ HELPCHECK("wein");
+ GHOSTCHECK("Es reicht leider nur fuer ein paar winzige Nebelwoelkchen, "
+ +"nicht fuer Traenen.\n",
+ gname()+" verzieht das Gesicht und ein paar winzige Nebel-\n"
+ +"woelkchen entfernen sich von seinen \"Augen\".\n", 0);
+ if (!str) {
+ out_sel="Waaaaah! Du weinst bitterlich.";
+ out_oth="@@name@@ bricht in Traenen aus und weint bitterlich.";
+ }
+ else {
+ ParseRest(str);
+ if (!who && !adverb)
+ Return("Weine Dich irgendwie bei irgendwem aus, aber nicht so.\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Bei sich selber kann man sich so schlecht ausweinen.",
+ "Bei wem willst Du Dich ausweinen???"))
+ return 1;
+ if (who) {
+ out_sel="Du weinst Dich@@adverb@@ bei@@ wem@@ aus.";
+ out_vic="@@name@@ weint sich@@adverb@@ bei Dir aus.";
+ out_oth="@@name@@ weint sich@@adverb@@ bei@@ wem@@ aus.";
+ }
+ else {
+ out_sel="Du brichst in Traenen aus und weinst@@adverb@@.";
+ out_oth="@@name@@ bricht in Traenen aus und weint@@adverb@@.";
+ }
+ }
+ return FeelIt();
+
+ /**************** Winken ***************/
+ case "wink":
+ HELPCHECK("wink");
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du winkst @@alle@@@@adverb@@ zu.";
+ out_vic="@@name@@ winkt @@alle@@@@adverb@@ zu.";
+ return MixedOut(WEM);
+ }
+ if (!who && !adverb && str)
+ Return("Vielleicht solltest Du auch sagen, wem oder wie Du "
+ +"(zu)winken willst.\n");
+ if (who && CheckLife(NOT_SELF, NOT_DEAD,
+ "Wink Dir nicht selber zu.",
+ "Du musst schon einem Lebewesen zuwinken."))
+ return 1;
+ out_sel="Du winkst@@ wem@@@@adverb@@"+(who ? " zu" : "")+".";
+ if (who) out_vic="@@gname@@ winkt Dir@@adverb@@ zu.";
+ out_oth="@@gname@@ winkt@@ wem@@@@adverb@@"+(who ? " zu" : "")+".";
+ return FeelIt();
+
+ /**************** Wuergen ***************/
+ case "wuerg":
+ HELPCHECK("wuerg");
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Wuerge wen oder wie?\n");
+ if (!who) {
+ out_sel="Du faengst@@adverb@@ an zu wuergen.";
+ out_oth="@@gname@@ faengt@@adverb@@ an zu wuergen.";
+ } else if (CheckLife(NOT_SELF, NOT_DEAD,
+ "Du wuergst ein bischen an Dir rum. Dir wird schnell langweilig.",
+ "Wuerg lieber ein Lebewesen.")) {
+ return 1;
+ } else {
+ out_sel="Du springst @@wen@@ an und faengst an, "+who->QueryPronoun(WEN)
+ +"@@adverb@@ zu wuergen.";
+ out_vic="@@gname@@ springt Dich auf einmal an und wuergt Dich@@adverb@@.";
+ out_oth="@@gname@@ springt auf einmal @@wen@@ an und wuergt "
+ +who->QueryPronoun(WEN)+"@@adverb@@.";
+ }
+ return FeelIt();
+
+ /**************** Wundern ***************/
+ case "wunder":
+ HELPCHECK("wunder");
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Wie oder ueber wen willst Du Dich wundern?\n");
+ out_sel="Du wunderst Dich@@adverb@@"+(who ? " ueber @@wen@@." : ".");
+ if (who) out_vic="@@gname@@ wundert sich@@adverb@@ ueber Dich.";
+ out_oth="@@gname@@ wundert sich@@adverb@@"+(who ? " ueber @@wen@@." : ".");
+ return FeelIt();
+
+ /**************** Wuscheln ***************/
+ case "wuschel":
+ case "wuschl":
+ HELPCHECK("wuschel");
+ ParseRest(str);
+ if (!who)
+ Return("Wen willst Du denn wuscheln?\n");
+ if (CheckLife(0,NOT_DEAD,
+ "", "Hmm, sehr tot. Ne, lieber nicht."))
+ return 1;
+ if (who->QueryProp(P_FROG)) {
+ write("Du verwuschelst... aeh... hm. Ein Frosch hat wohl nix "
+ +"zum Wuscheln.\n");
+ return 1;
+ };
+ GHOSTCHECK("Du willst "+who->name(WEN)+" wuscheln - aber Deine "
+ +"Haende gehen\nglatt durch den Kopf durch.\n",
+ gname()+" will "+who->name(WEN)+" den Kopf wuscheln, aber "
+ +"die Geister-\nhaende gehen glatt durch den Kopf durch.\n",
+ gname()+" will Dich wuscheln, aber diese Geisterhaende "
+ +"gehen\nglatt durch Deinen Kopf durch - Du hast ein seltsames "
+ +"Gefuehl dabei.\n");
+ if (member(({"highlander","boing","mieze","freund"}), who->query_real_name())>-1)
+ switch (who->query_real_name()) {
+ case "highlander": str1="Federn"; break;
+ case "freund" :
+ case "mieze" :
+ case "boing" : str1="Fell"; break;
+ }
+ else if (who->is_class_member(({CL_DRAGON, CL_FISH, CL_REPTILE})))
+ str1="Schuppen";
+ else if (who->is_class_member(({CL_BIRD, "elster","greif"})))
+ str1="Federn";
+ else if (who->is_class_member(({CL_MAMMAL_LAND,CL_FELINE,"tiger",
+ "steinbeisser","knuddeleisbaer"})))
+ str1="Fell";
+ else str1="Haare";
+ out_sel="Du verwuschelst@@adverb@@ @@wessen@@ "+str1+".";
+ out_vic="@@name@@ verwuschelt@@adverb@@ Dein"
+ +(str1=="Fell" ? " " : "e ")+str1+".";
+ out_oth="@@name@@ verwuschelt@@adverb@@ @@wessen@@ "+str1+".";
+ return FeelIt();
+
+ /**************** Zitieren ***************/
+ case "zitier":
+ HELPCHECK("zitier");
+ ParseRest(str);
+ if (!str)
+ Return("Zitiere was oder wen womit?\n");
+ sfoo=implode(explode(str, " ")[1..], " ");
+ if (sfoo=="") sfoo=0;
+ if (who) {
+ out_sel="Du zitierst @@wen@@"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
+ out_vic="@@gname@@ zitiert Dich"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
+ out_oth="@@gname@@ zitiert @@wen@@"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
+ }
+ else {
+ sfoo=explode(str, "/")[0];
+ out_sel="Du zitierst@@adverb@@"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
+ out_oth="@@gname@@ zitiert@@adverb@@"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
+ }
+ return FeelIt();
+
+ /**************** Zittern ***************/
+ case "zitter":
+ HELPCHECK("zitter");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Zittere wie?\n");
+ out_sel="Du zitterst"+(adverb ? "@@adverb@@." : " vor Angst.");
+ out_oth="@@gname@@ zittert"+(adverb ? "@@adverb@@." : " vor Angst.");
+ return FeelIt();
+
+ /**************** Schulterzucken ***************/
+ case "zuck" :
+ HELPCHECK("zuck");
+ if (str)
+ if (sscanf(str,"%s mit den schultern",sfoo))
+ str=sfoo;
+ else if (sscanf(str,"%s den schultern",sfoo))
+ str=sfoo;
+ else
+ if (sscanf(str,"%s schultern",sfoo))
+ str=sfoo;
+ if (str=="") str=0;
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Zucke wie mit den Schultern?\n");
+ out_sel="Du zuckst@@adverb@@ mit den Schultern.";
+ out_oth="@@gname@@ zuckt"+(adverb ? "@@adverb@@" : " ratlos")
+ +" mit den Schultern.";
+ return FeelIt();
+
+ /**************** Zwinkern ***************/
+ case "zwinker":
+ HELPCHECK("zwinker");
+ if (ghost())
+ Return("Vergiss es - das ist als Geist viel zu unauffaellig, als dass\n"
+ +"es andere Leute sehen wuerden.\n");
+ ParseRest(str);
+ if (str && !who && !adverb)
+ Return("Zwinkere wie? Zwinkere wem zu?\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du kannst Dir nicht selber zuzwinkern.",
+ "Wieso reagiert das Ding da nicht auf Dein Zwinkern? Ist es etwa tot?"))
+ return 1;
+ out_sel="Du zwinkerst@@ wem@@@@adverb@@"+(who ? " zu." : ".");
+ if (who) out_vic="@@name@@ zwinkert Dir@@adverb@@ zu.";
+ out_oth="@@name@@ zwinkert@@ wem@@@@adverb@@"+(who ? " zu." : ".");
+ return FeelIt();
+
+ /**************** Zunge rausstrecken ***************/
+ case "streck":
+ HELPCHECK("streck");
+ GHOSTCHECK("Sorry, Du hast keine Zunge zum Rausstrecken.\n","",0);
+ if (!str)
+ Return("Strecke was wie wem wo wann wieso?\n");
+ str=lower_case(str);
+ if (sscanf(str, "%s zunge raus", str1)!=1 &&
+ sscanf(str, "%s die zunge raus", str1)!=1)
+ Return("Strecke was wie wem wo wann wieso?\n");
+ ParseRest(str1);
+ if (for_all) {
+ out_sel="Du streckst @@alle@@@@adverb@@ die Zunge raus.";
+ out_vic="@@name@@ streckt @@alle@@@@adverb@@ die Zunge raus.";
+ return MixedOut(WEM);
+ }
+ out_sel="Du streckst@@ wem@@@@adverb@@ die Zunge raus.";
+ if (who) out_vic="@@name@@ streckt Dir@@adverb@@ die Zunge raus.";
+ out_oth="@@name@@ streckt@@ wem@@@@adverb@@ die Zunge raus.";
+ return FeelIt();
+
+ // Spezialsachen - Geisterverben und Magierverben
+
+ /**************** Rasseln ***************/
+ case "rassel":
+ case "rassl":
+ if (!ghost())
+ Return("Das ist nicht Dein Fachgebiet - Du bist doch kein Geist!\n");
+ HELPCHECK("rassel");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Rassel wie?\n");
+ out_sel="Du rasselst"+(adverb ? "@@adverb@@" : " fuerchterlich")
+ +" mit einer rostigen Rasselkette,\n"
+ +"die Du auf einmal fuer einen Moment in der Hand haeltst.";
+ out_oth="@@gname@@ holt auf einmal eine rostige Rasselkette aus\n"
+ +"dem Nichts und faengt an,"+(adverb ? "@@adverb@@" : " fuerchterlich")
+ +" damit zu rasseln.\n"
+ +"Danach ist die Kette auf einmal wieder verschwunden.";
+ return FeelIt();
+
+ /**************** Heulen ***************/
+ case "heul":
+ if (!ghost())
+ Return("Lass das mal den Fachleuten (also den Geistern).\n");
+ HELPCHECK("heul");
+ ParseRest(str);
+ if (str && !adverb)
+ Return("Heule wie?\n");
+ out_sel="Du heulst"+(adverb ? "@@adverb@@." : " schauerlich.");
+ out_oth="@@gname@@ heult"+(adverb ? "@@adverb@@." : " schauerlich.");
+ return FeelIt();
+
+ /**************** Treten (tretet) ***************/
+ case "kick":
+ if (!IS_WIZARD(this_player()))
+ return 0;
+ HELPCHECK("kick");
+ if (!str) {
+ GHOSTCHECK("Dein Fuss faehrt durch die beruehmte langvergessene "
+ +"unsichtbare Schildkroete\nhindurch.\n",
+ gname()+" will die beruehmte langvergessene unsichtbare\n"
+ +"Schildkroete treten, aber "+QPP(MALE,WER)
+ +" Fuss faehrt durch sie hindurch.\n", 0);
+ out_sel="Du tretest die beruehmte langvergessene unsichtbare "
+ +"Schildkroete.";
+ out_oth="@@name@@ tretet die beruehmte langvergessene unsichtbare "
+ +"Schildkroete.";
+ }
+ else {
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du tretest @@alle@@@@adverb@@.";
+ out_vic="@@name@@ tretet @@alle@@@@adverb@@.";
+ return MixedOut(WEN);
+ }
+ if (!who && !adverb)
+ Return("Wenn Du schon was nach kick tippst, dann sag mir wen "
+ +"oder wie ichdas soll.\n");
+ if (who && CheckLife(NOT_SELF,NOT_DEAD,
+ "Du schaffst es nicht, Dir selber in den Hintern zu treten.",
+ "Tote Sachen tritt man nicht auch noch!"))
+ return 1;
+ if (who) {
+ out_sel="Du tretest@@ wen@@@@adverb@@.";
+ if (who) out_vic="@@gname@@ tretet Dich@@adverb@@.";
+ out_oth="@@gname@@ tretet@@ wen@@@@adverb@@.";
+ }
+ else {
+ out_sel="Du tretest die beruehmte langvergessene unsichtbare "
+ +"Schildkroete@@adverb@@.";
+ out_oth="@@gname@@ tretet die beruehmte langvergessene unsichtbare "
+ +"Schildkroete\n@@adverb@@.";
+ }
+ }
+ return FeelIt();
+
+ /************* Nassspritzen ***************/
+ case "splash":
+ if (!IS_WIZARD(this_player()) &&
+ !(IS_SEER(this_player()) && present("SEHER\nspritzpistole",this_player())))
+ return 0;
+ HELPCHECK("splash");
+ ParseRest(str);
+ if (for_all) {
+ out_sel="Du ziehst Deine Wasserpistole und spritzt @@alle@@@@adverb@@ "
+ +"patschnass.";
+ out_vic="@@gname@@ zieht "+QPP(FEMALE,WEN)+" Wasserpistole und spritzt\n"
+ +"@@alle@@@@adverb@@ patschnass.";
+ return MixedOut(WEN);
+ }
+ if (!who)
+ Return("Wen willst Du denn nassmachen?\n");
+ if (who == this_player()) {
+ out_sel="Sag mal, kommst Du Dir nicht ein bisschen doof vor?\n"
+ +"Du ziehst Deine Wasserpistole und spritzt Dich@@adverb@@ selber patschnass.";
+ out_oth="@@gname@@ zieht "+QPP(FEMALE,WEN)+" Wasserpistole und spritzt "
+ +"sich@@adverb@@ aus unerfindlichen Gruenden selbst patschnass.";
+ }
+ else {
+ out_sel="Du ziehst Deine Wasserpistole und spritzt @@wen@@@@adverb@@ "
+ +"patschnass.";
+ out_vic="@@gname@@ zieht "+QPP(FEMALE,WEN)+" Wasserpistole und spritzt "
+ +"Dich@@adverb@@ patschnass.";
+ out_oth="@@gname@@ zieht "+QPP(FEMALE,WEN)+" Wasserpistole und spritzt "
+ +"@@wen@@@@adverb@@ patschnass.";
+ }
+ return FeelIt();
+
+ /**************** Anflammen ***************/
+ case "flam":
+ if (!IS_WIZARD(this_player()) &&
+ !(IS_SEER(this_player()) && present("SEHER\nflammenwerfer",this_player())))
+ return 0;
+ HELPCHECK("flame");
+ if (ghost())
+ Return("Du hast leider grade Deinen Flammenwerfer nicht dabei.\n");
+ ParseRest(str);
+ ifoo=!random(7);
+ if (for_all) {
+ out_sel="Du holst aus Deinen tiefsten Taschen (oder was weiss denn "
+ +"ich woher) Deinen\nMorgenGrauen handgearbeiteten Mini-Flammenwerfer "
+ +"(tm), richtest ihn aus und...\n"
+ +(ifoo ? "schaust leicht frustriert auf das Streichholz, in das "
+ +"er sich verwandelt hat."
+ : "feuerst@@adverb@@ einen riesigen Feuerball auf @@alle@@ ab.\n"
+ +"Es riecht auf einmal so verbrannt hier...");
+ out_vic="@@name@@ holt auf einmal irgendwoher einen MorgenGrauen "
+ +"handgearbeiteten\nMini-Flammenwerfer (tm), richtet ihn aus und...\n"
+ +(ifoo ? "schaut ziemlich frustriert auf das Streichholz, in das "
+ +"sich das Ding verwandelt hat."
+ : "feuert@@adverb@@ einen riesigen Feuerball auf @@alle@@ ab.\n"
+ +"Dir wird so warm um's Herz...");
+ return MixedOut(WEN);
+ }
+ if (!who)
+ Return("Wen willst Du denn ankokeln?\n");
+ out_sel="Du holst aus Deinen tiefsten Taschen (oder was weiss denn "
+ +"ich woher) Deinen\nMorgenGrauen handgearbeiteten Mini-Flammenwerfer "
+ +"(tm), richtest ihn aus und...\n"
+ +(ifoo ? "schaust leicht frustriert auf das Streichholz, in das er "
+ +"sich verwandelt hat."
+ : "feuerst@@adverb@@ einen riesigen Feuerball auf @@wen@@ ab.\n"
+ +"Es riecht auf einmal so verbrannt hier...");
+ out_vic="@@name@@ holt auf einmal irgendwoher einen MorgenGrauen "
+ +"handgearbeiteten\nMini-Flammenwerfer (tm), richtet ihn auf Dich "
+ +"aus und...\n"
+ +(ifoo ? "schaut ziemlich frustriert auf das Streichholz, in das "
+ +"sich das Ding\nverwandelt hat."
+ : "feuert@@adverb@@ einen riesigen Feuerball auf Dich ab.\n"
+ +"Dir wird so warm ums Herz...");
+ out_oth="@@name@@ holt auf einmal irgendwoher einen MorgenGrauen "
+ +"handgearbeiteten\nMini-Flammenwerfer (tm), richtet ihn "
+ +"auf@@ wen@@ aus und...\n"
+ +(ifoo ? "schaut ziemlich frustriert auf das Streichholz, in das "
+ +"sich das Ding\nverwandelt hat."
+ : "feuert@@adverb@@ einen riesigen Feuerball auf@@ wen@@ ab.\nEs "
+ +"riecht auf einmal irgendwie verbrannt hier ...");
+ return FeelIt();
+
+ // Special 2: remote verbs
+
+ /**************** Remote knuddeln ***************/
+ case "rknuddel":
+ case "rknuddl":
+ HELPCHECK("rknuddel");
+ if (ParseRemote(str))
+ return 1;
+ if (!who)
+ Return("Knuddle wen?\n");
+ if (CheckLife(NOT_SELF,0,
+ "Das bringt doch nix, lass es halt.",
+ 0))
+ return 1;
+ if (present(who, environment()))
+ Return("Wenn jemand neben Dir steht, nimm knuddel.\n");
+ out_sel="Du knuddelst @@wen@@@@adverb@@ aus der Ferne.";
+ out_vic="@@gname@@ knuddelt Dich@@adverb@@ aus der Ferne.";
+ return FeelIt();
+
+ /**************** Remote winken ***************/
+ case "rwink":
+ HELPCHECK("rwink");
+ if (ParseRemote(str))
+ return 1;
+ if (!who)
+ Return("Winke wem zu?\n");
+ if (CheckLife(NOT_SELF,0,
+ "Sehr witzig. Pah.", 0))
+ return 1;
+ if (present(who, environment()))
+ Return("Wenn jemand neben Dir steht, nimm wink.\n");
+ out_sel="Du winkst @@wem@@@@adverb@@ aus der Ferne zu.";
+ out_vic="@@gname@@ winkt Dir@@adverb@@ aus der Ferne zu.";
+ return FeelIt();
+
+ /**************** Verbenliste ***************/
+ case "verb":
+ case "verben":
+ HELPCHECK("verb");
+ More(SOULHELP->Help());
+ return 1;
+
+ /**************** Adverbienverwaltung ***************/
+ case "adverb":
+ case "adverben":
+ case "adverbien": { /* Das ist die richtige Form, aber wer weiss das? */
+ string f1,f2;
+ HELPCHECK("adverb");
+ if (!str || str=="#" || str=="$")
+ return zeige_adverbs((str=="#" ? 1 : (str=="$" ? 2 : 0)));
+ if (sscanf(str, "%s %s", f1,f2)==2) {
+ f1 = lower_case(f1); // kleingeschrieben speichern, spart Umwandlung
+ if (f1=="")
+ Return("Hm, da muss wohl ein Leerzeichen zu viel gewesen sein. Bitte "
+ +"nochmal,\naber ohne zuviele Leerzeichen.\n");
+ if (f1=="?") {
+ f2 = lower_case(f2);
+ string match;
+ if ((match=QueryStdAdverbs()[f2] || plr_adverbs[f2]))
+ write("Die Abkuerzung "+f2+" gehoert zu dem Adverb:\n"+match+LF);
+ else
+ write("Diese Abkuerzung ist bisher nicht definiert.\n");
+ return 1;
+ }
+ if (QueryStdAdverbs()[f1])
+ Return("Die Standardabkuerzungen koennen nicht neu definiert "
+ +"werden.\n");
+ if (sizeof(plr_adverbs)>=100)
+ {
+ write("Mehr als 100 eigene Adverbien kannst Du nicht definieren.\n");
+ return 1;
+ }
+ if (plr_adverbs[f1]) {
+ plr_adverbs[f1]=f2;
+ write("OK, Adverb mit der Abkuerzung \""+f1+"\" auf \""+f2
+ +"\" gesetzt.\n");
+ }
+ else {
+ if (sizeof(f1) > 6)
+ Return("Die Abkuerzung ist zu lang, bitte nicht mehr als "
+ +"6 Zeichen.\n");
+ plr_adverbs[f1]=f2;
+ write("OK, neues Adverb \""+f2+"\" mit der Abkuerzung \""+f1+"\".\n");
+ }
+ }
+ else {
+ str = lower_case(str);
+ if (QueryStdAdverbs()[str])
+ Return("Die Standardadverben koennen nicht geloescht werden.\n");
+ else if (!plr_adverbs[str])
+ Return("Du hast kein Adverb mit dieser Abkuerzung.\n"
+ +"Syntax: adverb, um die Adverbien anzuzeigen,\n"
+ +" adverb #, um nur Deine Adverbien anzuzeigen,\n"
+ +" adverb $, um nur die Standardadverbien anzuzeigen,\n"
+ +" adverb ? <Abkuerzung>, um nachzusehen, ob <Abkuerzung> "
+ +"definiert ist,\n"
+ +" adverb <Abkuerzung> <Adverb>, um der <Abkuerzung> das "
+ +"<Adverb>\n"
+ +" zuzuordnen,\n"
+ +" adverb <Abkuerzung>, um das Adverb mit der <Abkuerzung> "
+ +"zu loeschen,\n");
+ else {
+ write("OK, Adverb \""+plr_adverbs[str]+"\" geloescht.\n");
+ plr_adverbs=m_copy_delete(plr_adverbs, str);
+ }
+ }
+ return 1;
+ }
+ }
+ return(0); //fallthrough
+}
+