soul.c-Dateireferenz

#include <thing/description.h>
#include <thing/properties.h>
#include <player.h>
#include <player/comm.h>
#include <language.h>
#include <defines.h>
#include <moving.h>
#include <wizlevels.h>
#include <class.h>
Include-Abhängigkeitsdiagramm für soul.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#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
#define GHOSTCHECK(sel, oth, vic)
#define HELPCHECK(x)
#define NEED_PROTOTYPES
#define ghost()   QueryProp(P_GHOST)
#define frog()   QueryProp(P_FROG)
#define capname()   capitalize(name())
#define gname()

Funktionen

private void ParseAdverb (string *words)
 Parst die Adverbienparameter fuer Verben und speichert die passende Textausgabe in der globalen Variable "adverb".
private string convert_string (string str)
varargs mixed More (string str, int fflag, string returnto)
string MatchAdverb (string str)
mapping QueryStdAdverbs ()
mapping QueryAdverbs ()
static void add_soul_commands ()
static int verben_liste ()
varargs private void ParseRest (string arg, mixed extra)
private int ParseRemote (string arg)
varargs string GetPlayerAdverb (string s, int fuzzy)
 Gibt den passenden Adverb-Text zu einem key zurueck.
private mixed MixedOut (int casus)
varargs private int CheckLife (int no_self, int no_dead, string no_self_text, string no_dead_text)
private int FeelIt ()
private int zeige_adverbs (int mine)
 Die Funktion stellt einen Hilfetext zur Verfuegung und listet die definierten Adverbien auf.
static varargs int SoulComm (string str, string _verb)

Variablen

static object who
static object ofoo
static int for_all
static int flag
static int ifoo
mapping plr_adverbs
static string out_sel
static string out_vic
static string out_oth
static string adverb
static string sfoo

Makro-Dokumentation

 
#define capname (  )     capitalize(name())

Definiert in Zeile 275 der Datei soul.c.

Wird benutzt von convert_string().

 
#define frog (  )     QueryProp(P_FROG)

Definiert in Zeile 274 der Datei soul.c.

 
#define ghost (  )     QueryProp(P_GHOST)

Definiert in Zeile 273 der Datei soul.c.

Wird benutzt von Help().

#define GHOSTCHECK ( sel,
oth,
vic   ) 
Wert:
if (ghost()) {  write(sel); say(oth,who||ME);\
                                  if (vic) who->Message(vic); return 1;  }

Definiert in Zeile 132 der Datei soul.c.

 
#define gname (  ) 
Wert:
(ghost()?(frog()?"Der Geist eines Frosches"\
                                                        :"Der Geist von "+capname())\
                                        :capname())

Definiert in Zeile 276 der Datei soul.c.

Wird benutzt von austreten(), beitreten(), convert_string(), give() und show().

#define HELPCHECK ( x   ) 
Wert:
if (str && (str=="-h" || str=="-?" || str=="/h" \
         || str=="/?" || str=="hilfe"))\
                       { More(SOULHELP->Help(x)); return 1; }

Definiert in Zeile 134 der Datei soul.c.

#define LF   "\n"

Definiert in Zeile 125 der Datei soul.c.

Wird benutzt von CheckLife(), FeelIt() und MixedOut().

#define NEED_PROTOTYPES

Definiert in Zeile 152 der Datei soul.c.

#define NOT_DEAD   1

Definiert in Zeile 127 der Datei soul.c.

#define NOT_SELF   1

Definiert in Zeile 126 der Datei soul.c.

#define QPP   QueryPossPronoun

Definiert in Zeile 129 der Datei soul.c.

#define Return   return 0||_notify_fail

Definiert in Zeile 131 der Datei soul.c.

#define RETURN   return _notify_fail

Definiert in Zeile 130 der Datei soul.c.

Wird benutzt von MixedOut().

#define SOULHELP   "/std/player/soulhelp"

Definiert in Zeile 124 der Datei soul.c.

Wird benutzt von verben_liste().


Dokumentation der Funktionen

static void add_soul_commands (  )  [static]

Definiert in Zeile 261 der Datei soul.c.

Benutzt plr_adverbs.

00261                      {
00262   if (!plr_adverbs)
00263     plr_adverbs=([]);
00264   add_action("SoulComm", "", 1);
00265 }

varargs private int CheckLife ( int  no_self,
int  no_dead,
string  no_self_text,
string  no_dead_text 
)

Definiert in Zeile 494 der Datei soul.c.

Benutzt LF und who.

00494                                                                               {
00495   if (who && living(who) && who!=this_player()) return 0;
00496   if (no_self && who && who==this_player())  {
00497     if (no_self_text)
00498       write(no_self_text+LF);
00499     else
00500       write("Mach das mit anderen, nicht mit Dir selber.\n");
00501     return 1;
00502   }
00503   if (who && !living(who) && no_dead)  {
00504     if (no_dead_text)
00505       write(no_dead_text+LF);
00506     else
00507       write("Das darfst Du nur mit Lebewesen.\n");
00508     return 2;
00509   }
00510   if (!who)  {
00511     write("Schau Dich erst mal um - das angegebene Objekt ist nicht da.\n");
00512     return 3;
00513   }
00514   return(0); //non-void. Fall-through, alles OK.
00515 }

private string convert_string ( string  str  ) 

Definiert in Zeile 518 der Datei soul.c.

Benutzt adverb, capname, gname, WEM, WEN, WER, WESSEN und who.

Wird benutzt von FeelIt() und MixedOut().

00518                             {
00519   /* Ich bin unschuldig, ich hatte das viel einfacher und schoener :)
00520      Rumata wollte das so ;)  -HrT                                     */
00521   str = implode( explode( str, "@@name@@" ), capname() );
00522   str = implode( explode( str, "@@gname@@" ), gname() );
00523   str = implode( explode( str, "@@wer@@" ),
00524     (who?capitalize(who->name(WER,2)||""):"" ));
00525   str = implode( explode( str, "@@ wen@@" ),
00526     (who?" "+who->name(WEN,2):""));
00527   str = implode( explode( str, "@@ wem@@" ),
00528     (who?" "+who->name(WEM,2):""));
00529   str = implode( explode( str, "@@wen@@" ),
00530     (who?who->name(WEN,2):""));
00531   str = implode( explode( str, "@@wem@@" ),
00532     (who?who->name(WEM,2):""));
00533   str = implode( explode( str, "@@wessen@@" ),
00534     (who?who->name(WESSEN,2):""));
00535   str = implode( explode( str, "@@adverb@@" ),
00536     (adverb?" "+adverb:"") );
00537   return str;
00538 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

private int FeelIt (  ) 

Definiert in Zeile 541 der Datei soul.c.

Benutzt _recv(), convert_string(), LF, ME, msg(), MSGFLAG_REMOTE, MSGFLAG_SAY, MSGFLAG_SOUL, out_oth, out_sel, out_vic und who.

00541           {
00542   int msg, flg;
00543 
00544   flg = MSGFLAG_SOUL;
00545   if (query_verb() && (query_verb()[0..3]=="frag" || query_verb()[0..3]=="antw"))
00546     flg |= MSGFLAG_SAY;
00547   if (query_verb() && (query_verb()[0..5]=="rknudd" || query_verb()=="rwink"))
00548     flg |= MSGFLAG_REMOTE;
00549 
00550   // NPC haben keine TM-Hist (comm.c). Leider erben aber div. Magier die Soul
00551   // (trotzdem sie in /std/player/ liegt) in ihren NPC... *fluch*
00552   if (query_once_interactive(ME))
00553     _recv(who, convert_string(out_sel), flg);
00554   else
00555     tell_object(ME, convert_string(out_sel)+LF);
00556 
00557   if (out_vic && who)  {
00558     if (query_once_interactive(who))  {
00559       msg=who->Message( convert_string( out_vic )+LF, flg);
00560       if (msg==-1)
00561         write(who->name()+" ignoriert Dich oder diesen Befehl.\n");
00562     } else
00563       tell_object(who,convert_string( out_vic )+LF);
00564   }
00565   if (out_oth)
00566   say( convert_string( out_oth )+LF, ({who,this_player()}) );
00567   out_sel=out_vic=out_oth=0;
00568   return 1;
00569 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

varargs string GetPlayerAdverb ( string  s,
int  fuzzy 
)

Gibt den passenden Adverb-Text zu einem key zurueck.

Parameter:
s Danach wird in der Adverbien-Liste gesucht
fuzzy 
Rückgabe:
Der gefundene Adverbientext oder 0

Definiert in Zeile 371 der Datei soul.c.

Benutzt i, plr_adverbs, QueryStdAdverbs(), result() und x.

Wird benutzt von ParseAdverb().

00371                                                       {
00372   int i, j; 
00373   string *search_pattern,
00374          *search_result, 
00375           result;
00376 
00377   // Erstmal gucken, ob der String direkt gefunden werden kann
00378   // das geht am schnellsten
00379   result = QueryStdAdverbs()[s] || plr_adverbs[s];
00380 
00381   // Wenn noch kein Ergebnis gefunden, und man unscharf suchen will
00382   if ( fuzzy && !result) {
00383 
00384     // Suchmuster fuer das Intersect erzeugen
00385     search_pattern=({s});
00386 
00387     j = sizeof(s)-1;
00388     for ( i=2;  i < j ;i++) {
00389       search_pattern += ({s[0..<i]});
00390     }
00391 
00392     // Intersect zwischen allen bekannten Abkuerzungen und Search-Pattern
00393     // erzeugen. Dieses wird dann gleichzeitig nach Laenge sortiert
00394     // genauester Treffer = String mit groesster Laenge
00395     search_result = sort_array(
00396       (m_indices(QueryStdAdverbs()) | m_indices(plr_adverbs))&search_pattern, 
00397       function int (string x, string y){ 
00398              return lower_case(x) > lower_case(y) ;
00399       } 
00400     );
00401 
00402     // Adverb zum genauesten Treffer zurueckgeben
00403     if (sizeof(search_result)) 
00404       result = QueryStdAdverbs()[search_result[0]] || 
00405                plr_adverbs[search_result[0]];
00406   }
00407 
00408   return result;
00409 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

string MatchAdverb ( string  str  ) 

Definiert in Zeile 253 der Datei soul.c.

Benutzt adverb und ParseAdverb().

00253                        {
00254   ParseAdverb(explode(a," "));
00255   return adverb;
00256 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

private mixed MixedOut ( int  casus  ) 

Definiert in Zeile 460 der Datei soul.c.

Benutzt break_string(), convert_string(), count, CountUp(), for_all, LF, msg(), MSGFLAG_SOUL, name, out_sel, out_vic, QueryDu() und RETURN.

00460                                    {
00461   object *envs,*vics;
00462   string *names,out,aufz;
00463   int count,msg;
00464 
00465   for_all=0;
00466   vics=({});
00467   names=({});
00468   envs=all_inventory(environment())-({this_player()});
00469   if (!(count=sizeof(envs)))
00470     RETURN("Nichts und niemand da. Schau Dich naechstes Mal besser um.\n");
00471   for ( ; count--; )
00472     if (living(envs[count]) && !envs[count]->QueryProp(P_INVIS))  {
00473       vics+=({envs[count]});
00474       names+=({envs[count]->name(casus)});
00475     }
00476   if (!sizeof(vics))
00477     RETURN("Keiner da. Schau Dich naechstes Mal besser um.\n");
00478   aufz=CountUp(names);
00479   for (count=sizeof(vics); count--;)  {
00480     out=implode(explode(out_vic, "@@alle@@"),aufz);
00481         out = regreplace( out, "\\<"+vics[count]->name(casus)+"\\>",
00482                           capitalize(vics[count]->QueryDu(casus)), 0 );
00483 
00484     msg=vics[count]->Message(break_string(convert_string(out+LF), 78),MSGFLAG_SOUL);
00485     if (msg==-1)
00486       write(vics[count]->name()+" ignoriert Dich oder diesen Befehl.\n");
00487   }
00488   write(break_string(convert_string(implode(explode(out_sel,"@@alle@@"),aufz)
00489     +LF), 78));
00490   return 1;
00491 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

varargs mixed More ( string  str,
int  fflag,
string  returnto 
)
private void ParseAdverb ( string *  words  ) 

Parst die Adverbienparameter fuer Verben und speichert die passende Textausgabe in der globalen Variable "adverb".

Parameter:
words Array mit den zu parsenden Adverbien-Strings

Definiert in Zeile 417 der Datei soul.c.

Benutzt adverb, cnt, CountUp() und GetPlayerAdverb().

Wird benutzt von MatchAdverb(), ParseRemote() und ParseRest().

00417                             {
00418   int num,andsign,bis;
00419   string qadv,*adv,cnt;
00420 
00421   adv=({});
00422   qadv=0;
00423 
00424   bis=sizeof(words);
00425   // Sonderfall Gequotetes Adverb (alles nach dem Quote) speichern und aus 
00426   // Words rausschneiden.
00427   for (num=0; num<bis; num++)
00428     if (words[num][0..0]=="/")  {
00429       words[num]=words[num][1..];
00430       qadv=implode(words[num..], " ");
00431       words=words[0..num-1];
00432       break;
00433     }
00434 
00435   // Es kann sein, dass vor dem Quote noch eine und steht. Das wird jetzt auch 
00436   // noch entfernt, muss aber spaeter wieder eingefuegt werden.
00437   if (sizeof(words) && words[<1]=="und")  {
00438     words=words[0..<2];
00439     andsign=1;
00440   }
00441 
00442   // Weitersuchen?
00443   if (bis=sizeof(words))
00444     for (num=0; num<bis; num+=2)
00445        adv+=({GetPlayerAdverb(words[num], 1)});
00446   cnt=CountUp(adv-({0}));
00447 
00448   // Ausgabe zusammenbauen
00449   if (andsign)
00450     adverb=CountUp((sizeof(adv) ? adv : ({}))+(qadv ? ({qadv}) : ({})));
00451   else if (sizeof(cnt) && sizeof(qadv))
00452     adverb = cnt + " " + qadv;
00453   else if (sizeof(qadv))
00454     adverb = qadv;
00455   else if (sizeof(cnt))
00456     adverb = cnt; 
00457   if (adverb=="") adverb=0;
00458 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

private int ParseRemote ( string  arg  ) 

Definiert in Zeile 318 der Datei soul.c.

Benutzt adverb, find_player(), IS_WIZARD, match_living(), ME, name, ParseAdverb(), RAW, WER und who.

00318                          {
00319   string wer,*words; 
00320 
00321   adverb = 0; // Adverb vom letzten Mal keinesfalls wiederverwenden. ;-)
00322 
00323   if (!stringp(arg) || !strlen(arg)) return 0;
00324   
00325   words=explode(arg," ");
00326 
00327   mixed liv = match_living(lower_case(words[0]));
00328   if (stringp(liv))
00329       who=find_player(liv);
00330   
00331   if (who) {
00332     // Ziel ist ein Spieler.
00333     if (!who->QueryProp(P_INVIS) || IS_WIZARD(ME)) {
00334       // Spieler ist nicht Invis oder ich bin Magier.
00335       string nam = (query_once_interactive(ME) ? getuid() : 
00336                              lower_case(name(RAW)));
00337       if (query_verb()[0..5]=="rknudd" &&
00338                   who->TestIgnore( ({"rknuddel",nam,nam+".knuddel"}) ) ) {
00339                 // ich oder das Kommando werde ignoriert.
00340                 write(who->Name(WER)+" ignoriert Deinen Knuddelversuch.\n");
00341                 return 1;
00342       }
00343     }
00344     else
00345       // Spieler ist invis und ich bin kein Magier.
00346       who = 0;
00347   }
00348   // kein eingeloggter und sichtbarer Spieler. Vielleicht ein NPC? (BTW: kein
00349   // else if, weil im if fuer Spieler oben who genullt werden kann und dann
00350   // nochmal nach nem NPC gesucht werden soll.)
00351   if (!who) {
00352     wer = match_living(lower_case(words[0]));
00353     if(stringp(wer)) 
00354       who=present(wer,environment(ME));
00355     if (!who) who=present(words[0], environment(ME));
00356     if (who && who->QueryProp(P_INVIS)) who=0;
00357   }
00358 
00359   if (!who || sizeof(words)==1) return 0;
00360   words=words[1..];
00361   ParseAdverb(words);
00362   return(0);
00363 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

varargs private void ParseRest ( string  arg,
mixed  extra 
)

Definiert in Zeile 281 der Datei soul.c.

Benutzt adverb, for_all, match_living(), ME, ParseAdverb() und who.

00281                                     {
00282   string wer,wie,*words,quotea;
00283   int num,bis;
00284   who = for_all = adverb = 0;
00285   if (!arg) return;
00286   if (extra)
00287     if (!pointerp(extra)) {
00288       if (sscanf(arg, extra+" %s", wie)==1)
00289       arg=wie;
00290     }
00291     else
00292       for (bis=sizeof(extra),num=0; num<bis; num++)
00293         if (sscanf(arg, extra[num]+" %s", wie)==1)
00294           arg=wie;
00295 
00296   if ((bis=strstr(arg, "/"))>=0)
00297     quotea=arg[bis..],arg=arg[0..bis-1];
00298   quotea=quotea||"",arg=arg||"";
00299 
00300   words=explode(implode(explode(arg, ","), " und"), " ");
00301   if (!sizeof(words)) return;
00302   if (sizeof(words) && (words[0]=="alle" || words[0]=="allen"))
00303     for_all=1,wer=words[0],words=words[1..];
00304   if (!for_all)  {     /* noch kein Opfer */
00305     wer=match_living(lower_case(words[0]));
00306     if (stringp(wer)) who=present(wer, environment(ME));
00307     if (!who) who=present(words[0], environment(ME));
00308     if (who && who->QueryProp(P_INVIS)) who=0;
00309     }
00310   if (who && sizeof(words))
00311     words=words[1..];  /* Opfer gefunden - wenn's eines gibt */
00312   words+=explode(quotea, " ");
00313   words-=({""});
00314   if (sizeof(words)) ParseAdverb(words);
00315 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

mapping QueryAdverbs (  ) 

Definiert in Zeile 250 der Datei soul.c.

Benutzt plr_adverbs.

00250 { return deep_copy(plr_adverbs); }

mapping QueryStdAdverbs (  ) 

Definiert in Zeile 178 der Datei soul.c.

Wird benutzt von GetPlayerAdverb() und zeige_adverbs().

00178                    {
00179   return ([
00180     "unve" : "unverschaemt",
00181     "gutg" : "gutgelaunt",
00182     "gutm" : "gutmuetig",
00183     "froh" : "froh",
00184     "glue" : "gluecklich",
00185     "wuet" : "wuetend",
00186     "frec" : "frech",
00187     "daem" : "daemonisch",
00188     "boes" : "boese",
00189     "ungl" : "ungluecklich",
00190     "lang" : "langsam",
00191     "schn" : "schnell",
00192     "jamm" : "jammernd",
00193     "freu" : "freundlich",
00194     "shue" : "schuechtern",
00195     "amue" : "amuesiert",
00196     "aerg" : "aergerlich",
00197     "aner" : "anerkennend",
00198     "erst" : "erstaunt",
00199     "bitt" : "bitter",
00200     "brei" : "breit",
00201     "vors" : "vorsichtig",
00202     "char" : "charmant",
00203     "kalt" : "kalt",
00204     "verf" : "verfuehrerisch",
00205     "zufr" : "zufrieden",
00206     "tief" : "tief",
00207     "verz" : "verzweifelt",
00208     "drec" : "dreckig",
00209     "vert" : "vertraeumt",
00210     "uebe" : "ueberzeugt",
00211     "frus" : "frustriert",
00212     "stra" : "strahlend",
00213     "hoff" : "hoffnungsvoll",
00214     "unge" : "ungeduldig",
00215     "unsi" : "unsinnigerweise",
00216     "unsc" : "unschuldig",
00217     "unwi" : "unwissend",
00218     "iron" : "ironisch",
00219     "wiss" : "wissend",
00220     "gema" : "gemaechlich",
00221     "sehn" : "sehnsuechtig",
00222     "laut" : "laut",
00223     "lieb" : "liebevoll",
00224     "froe" : "froehlich",
00225     "dank" : "dankbar",
00226     "natu" : "natuerlich",
00227     "gedu" : "geduldig",
00228     "perf" : "perfekt",
00229     "vers" : "verspielt",
00230     "hoef" : "hoeflich",
00231     "stol" : "stolz",
00232     "frag" : "fragend",
00233     "rupp" : "ruppig",
00234     "trau" : "traurig",
00235     "vera" : "veraechtlich",
00236     "scha" : "schamlos",
00237     "erns" : "ernst",
00238     "schu" : "schuechtern",
00239     "zaer" : "zaertlich",
00240     "sanf" : "sanft",
00241     "entg" : "entgeistert",
00242     "heim" : "heimtueckisch",
00243     "gela" : "gelangweilt",
00244     "wild" : "wild",
00245     "jofi" : "wie Jof, wenn er mal nicht idlet",
00246   ]);
00247 }

Hier ist ein Graph der zeigt, wo diese Funktion aufgerufen wird:

static varargs int SoulComm ( string  str,
string  _verb 
) [static]

Definiert in Zeile 624 der Datei soul.c.

00624                                     {
00625   int t_g,t_n,flag;
00626   string str1,str2,str3,*taenze,vb;
00627   out_sel=out_vic=out_oth=who=0;
00628 //  if (this_interactive()!=ME) return 0;
00629   if (interactive(ME)) str=_unparsed_args(); // NPCs haben das nicht :(
00630   if (str=="") str=0;
00631   vb=_verb||query_verb();
00632   if (strlen(vb)>1 && vb[<1]=='e' && vb!="noe") vb=vb[0..<2];
00633   sfoo = 0;
00634   switch (vb)  {
00635     /**************** Aechzen ***************/
00636     case "aechz":
00637     HELPCHECK("aechz");
00638     ParseRest(str);
00639     if (str && !adverb)
00640       Return("Aechze wie?\n");
00641     out_sel="Du aechzt@@adverb@@.";
00642     out_oth="@@gname@@ aechzt@@adverb@@.";
00643     return FeelIt();
00644 
00645     /**************** Anschmiegen ***************/
00646     case "schmieg":
00647     HELPCHECK("schmieg");
00648     ParseRest(str);
00649     if (!who)
00650       Return("An wen willst Du Dich anschmiegen?\n");
00651     if (CheckLife(NOT_SELF,NOT_DEAD,
00652       "Das geht doch nicht.",
00653       "Nein, das macht keinen Spass. Lebt ja nicht mal."))
00654         return 1;
00655     out_sel="Du schmiegst Dich@@adverb@@ an@@ wen@@ an.";
00656     out_vic="@@gname@@ schmiegt sich@@adverb@@ an Dich.";
00657     out_oth="@@gname@@ schmiegt sich@@adverb@@ an@@ wen@@ an.";
00658     return FeelIt();
00659 
00660     /**************** Antworten ***************/
00661     case "antwort":
00662     HELPCHECK("antwort");
00663     if (!str)
00664       Return("Antworte [WEM] WAS?\n");
00665     ParseRest(str);
00666     if (!who)
00667       str1=capitalize(str);
00668     else
00669       if (sscanf(str,"%s %s",str1,str1)!=2)
00670         Return("Antworte was?\n");
00671       else
00672         str1=capitalize(str1);
00673     out_sel="Du antwortest@@ wem@@: "+str1;
00674     /* Sprachflueche beruecksichtigen -Wargon, 8. 9. 95 */
00675     if (QueryProp(P_PERM_STRING))
00676       str1 = call_other(QueryProp(P_PERM_STRING),"permutate_string",str1)||"";
00677     if (who) out_vic="@@gname@@ antwortet Dir: "+str1;
00678     out_oth="@@gname@@ antwortet@@ wem@@: "+str1;
00679     return FeelIt();
00680 
00681     /**************** Applaudieren ***************/
00682     case "applaudier":
00683     HELPCHECK("applaudier");
00684     GHOSTCHECK("Deine Haende fahren durcheinander durch - war wohl nix.\n",
00685       gname()+" will applaudieren, aber "+QPP(FEMALE,WER,PLURAL)
00686         +" Haende sausen\ndurcheinander durch.\n", 0);
00687     if (!str)  {
00688       out_sel="Du applaudierst von ganzem Herzen.";
00689       out_oth="@@name@@ gibt eine Runde Applaus.";
00690     }
00691     else  {
00692       ParseRest(str);
00693       if (for_all)  {
00694         out_sel="Du applaudierst @@alle@@@@adverb@@.";
00695         out_vic="@@name@@ applaudiert @@alle@@@@adverb@@.";
00696         return MixedOut(WEM);
00697       }
00698       if (!who && !adverb)
00699         Return("Applaudiere wem oder wie oder so aehnlich.\n");
00700       if (who && CheckLife(NOT_SELF,NOT_DEAD,
00701         "Nein, das gehoert sich nicht.",
00702         "Sachen wird hier nicht applaudiert, OK?"))
00703           return 1;
00704       out_sel="Du applaudierst@@ wem@@@@adverb@@.";
00705       if (who) out_vic="@@name@@ applaudiert Dir@@adverb@@.";
00706       out_oth="@@name@@ applaudiert@@ wem@@@@adverb@@.";
00707     }
00708     return FeelIt();
00709 
00710     /**************** Argln ***************/
00711     case "argl":
00712     HELPCHECK("argl");
00713     ParseRest(str);
00714     if (str && !adverb)
00715       Return("Argle wie?\n");
00716     out_sel="Du arglst"+(adverb ? "@@adverb@@." : " ein wenig vor Dich hin.");
00717     out_oth="@@gname@@ arglt"
00718       +(adverb ? "@@adverb@@." : " ein wenig vor sich hin.");
00719     return FeelIt();
00720 
00721     /**************** Aufatmen ***************/
00722     case "atm":
00723     HELPCHECK("atm");
00724     if (!str || sscanf(str,"%sauf",str1)!=1)
00725       Return("Atme wie auf?\n");
00726     ParseRest(str1);
00727     out_sel="Du atmest"+(adverb ? "@@adverb@@" : " erleichtert")+" auf.";
00728     out_oth="@@gname@@ atmet"+(adverb ? "@@adverb@@" : " erleichtert")+" auf.";
00729     return FeelIt();
00730 
00731     /**************** Begruessen ***************/
00732     case "hallo":
00733     case "hi":
00734     case "begruess":
00735     HELPCHECK("begruess");
00736     ParseRemote(str);
00737     if (!who)
00738       Return("Wen willst Du begruessen?\n");
00739     if (present(who, environment()))  {
00740       out_sel="Du heisst @@wen@@@@adverb@@ willkommen.";
00741       out_vic="@@gname@@ heisst Dich@@adverb@@ willkommen.";
00742       out_oth="@@gname@@ heisst @@wen@@@@adverb@@ willkommen.";
00743     }
00744     else  {
00745       out_sel="Du heisst @@wen@@@@adverb@@ aus der Ferne willkommen.";
00746       out_vic="@@gname@@ heisst Dich@@adverb@@ aus der Ferne willkommen.";
00747     }
00748     return FeelIt();
00749 
00750     /**************** Betasten ***************/
00751     case "betast":
00752     HELPCHECK("betast");
00753     ParseRest(str);
00754     if (!who)
00755       Return("Begrabsche wen?\n");
00756     out_sel="Du grabbelst@@adverb@@ an "+who->name(WEM)+" herum.";
00757     out_vic="@@gname@@ grabbelt@@adverb@@ an Dir herum.";
00758     out_oth="@@gname@@ grabbelt@@adverb@@ an "+who->name(WEM)+" herum.";
00759     return FeelIt();
00760 
00761     /**************** Bewundern ***************/
00762     case "bewunder":
00763     HELPCHECK("bewunder");
00764     ParseRest(str);
00765     if (!who)
00766       Return("Bewundere wen?\n");
00767     out_sel="Du bewunderst @@wen@@@@adverb@@.";
00768     out_vic="@@gname@@ bewundert Dich@@adverb@@.";
00769     out_oth="@@gname@@ bewundert @@wen@@@@adverb@@.";
00770     return FeelIt();
00771 
00772     /**************** Bibbern ***************/
00773     case "bibber":
00774     HELPCHECK("bibber");
00775     if (ghost())
00776       Return("Als Geist fuehlst Du keine Kaelte.\n");
00777     ParseRest(str);
00778     if (str && !adverb)
00779       Return("Bibbere wie?\n");
00780     out_sel="Du bibberst@@adverb@@ vor Kaelte.";
00781     out_oth="@@name@@ bibbert@@adverb@@ vor Kaelte.";
00782     return FeelIt();
00783 
00784     /**************** Bohre Nase ***************/
00785     case "bohr":
00786     HELPCHECK("bohr");
00787     ParseRest(str, ({"nase","in der nase","in nase"}));
00788     if (str && str!="nase" && str!="in nase" && str!="in der nase" && !adverb)
00789       Return("Bohre wie Nase?\n");
00790     out_sel="Du bohrst@@adverb@@ in Deiner Nase.";
00791     out_oth="@@gname@@ bohrt@@adverb@@ in der Nase.     Igitt! :)";
00792     return FeelIt();
00793 
00794     /**************** Brummeln ***************/
00795     case "brummel":
00796     HELPCHECK("brummel");
00797     ParseRest(str);
00798     out_sel="Du brummelst"
00799       +(adverb ? "@@adverb@@." : (str ? " kaum verstaendlich: "+str+"." : "."));
00800     out_oth="@@gname@@ brummelt"
00801       +(adverb ? "@@adverb@@." : (str ? " kaum verstaendlich: "+str+"." : "."));
00802     return FeelIt();
00803 
00804     /**************** cls ***************/
00805     case "cls":
00806     HELPCHECK("cls");
00807     write("");
00808     return 1;
00809 
00810     /**************** Daeumchendrehen ***************/
00811     case "dreh":
00812     HELPCHECK("dreh");
00813     if (!str)
00814       Return("Drehe was?\n");
00815     if(strstr(str,"daeumchen")<0 && strstr(str,"daumen")<0)
00816       Return("Drehe was?\n");
00817     ParseRest(str,({"daeumchen","daumen"}));
00818     out_sel="Du drehst@@adverb@@ Daeumchen.";
00819     out_oth="@@gname@@ dreht@@adverb@@ Daeumchen.";
00820     return FeelIt();
00821 
00822     /**************** Danken ***************/
00823     case "dank":
00824     HELPCHECK("dank");
00825     ParseRest(str);
00826     if (!who)
00827       Return("Bei wem willst Du Dich bedanken?\n");
00828     if (CheckLife(NOT_SELF, NOT_DEAD,
00829       "Leidest Du jetzt schon an Persoenlickeitsspaltung? Ne, ne...",
00830       "Keine Reaktion. Ist wohl befriedigender, sich bei Lebewesen zu "
00831         +"bedanken."))
00832         return 1;
00833     out_sel="Du bedankst Dich@@adverb@@ bei@@ wem@@.";
00834     out_vic="@@gname@@ bedankt sich@@adverb@@ bei Dir.";
00835     out_oth="@@gname@@ bedankt sich@@adverb@@ bei@@ wem@@.";
00836     return FeelIt();
00837 
00838     /**************** Denken ***************/
00839     case "denk":
00840     HELPCHECK("denk");
00841     if (ghost())
00842       Return("Womit willst Du denn denken? Du hast keine grauen Zellen...\n");
00843 //    ParseRest(str);
00844     str2=old_explode(str||""," ")[0];
00845     if (str
00846     && (!adverb||((QueryStdAdverbs()[str2]||plr_adverbs[str2]))!=adverb))  {
00847       out_sel="Du denkst   . o O ("+str+")";
00848       out_oth="@@name@@ denkt   . o O ("+str+")";
00849       out_vic="@@name@@ denkt   . o O ("+str+")";
00850     }
00851     else  {
00852       out_sel="Du faengst@@adverb@@ an zu denken.\nKleine "
00853         +"Rauchwoelkchen steigen auf...";
00854       out_oth="@@name@@ faengt@@adverb@@ an zu denken.\nKleine "
00855         +"Rauchwoelkchen steigen auf...";
00856     }
00857     return FeelIt();
00858 
00859     /**************** Deuten ***************/
00860     case "deut":
00861     HELPCHECK("deut");
00862     ParseRest(str,"auf");
00863     if (for_all)  {
00864       out_sel="Du deutest@@adverb@@ auf @@alle@@.";
00865       out_vic="@@gname@@ deutet@@adverb@@ auf @@alle@@.";
00866       return MixedOut(WEN);
00867     }
00868     if (!who)
00869       Return("Auf wen oder was willst Du deuten?\n");
00870     out_sel="Du deutest@@adverb@@ auf"
00871       +(who==this_object()?" Dich." : "@@ wen@@.");
00872     if (who != this_object()) out_vic="@@gname@@ deutet@@adverb@@ auf Dich.";
00873     out_oth="@@gname@@ deutet@@adverb@@ auf"
00874       +(who==this_object() ? " sich selber.": "@@ wen@@.");
00875     return FeelIt();
00876 
00877     /**************** Druecken ***************/
00878     case "drueck":
00879     HELPCHECK("drueck");
00880     ParseRest(str);
00881     if (for_all)  {
00882       out_sel="Du drueckst @@alle@@"+(adverb ? "@@adverb@@" : " zaertlich")
00883         +" an Dich.";
00884       out_vic="@@gname@@ drueckt @@alle@@"+
00885         (adverb ? "@@adverb@@" : " zaertlich")+" an sich.";
00886       return MixedOut(WEN);
00887     }
00888     if (!who)
00889       Return("Wen willst Du denn druecken?\n");
00890     if (CheckLife(NOT_SELF,NOT_DEAD,
00891       "Das macht doch keinen Spass.",
00892       "Ich druecke nur jemanden, nicht etwas."))
00893         return 1;
00894     GHOSTCHECK("Du willst "+who->name(WEN)+" an Dich druecken - nur hast Du "
00895         +"schon\nwieder nicht daran gedacht, dass so was als Geist nicht "
00896         +"geht.\n",
00897       gname()+" will "+who->name(WEN)+" an sich druecken - hat aber\n"
00898         +"mal wieder nicht an die Nachteile des Geisterdaseins gedacht.\n",
00899       gname()+" will Dich an sich druecken - hat aber mal wieder\n"
00900         +"nicht an die Nachteile des Geisterdaseins gedacht.\n");
00901     out_sel="Du drueckst @@wen@@"+(adverb ? "@@adverb@@" : " zaertlich")
00902       +" an Dich.";
00903     out_vic="@@name@@ drueckt Dich"+(adverb ? "@@adverb@@" : " zaertlich")
00904       +" an sich.";
00905     out_oth="@@name@@ drueckt @@wen@@"+(adverb ? "@@adverb@@" : " zaertlich")
00906       +" an sich.";
00907     return FeelIt();
00908 
00909     /**************** Entschuldige ***************/
00910     case "entschuldig":
00911     HELPCHECK("entschuldig");
00912     ParseRest(str);
00913     if (str && !who && !adverb)
00914       Return("Entschuldige Dich wie oder bei wem?\n");
00915     out_sel="Du bittest"+(who ? " @@wen@@" : "")
00916       +"@@adverb@@ um Entschuldigung.";
00917     if (who) out_vic="@@gname@@ bittet Dich@@adverb@@ um Entschuldigung.";
00918     out_oth="@@gname@@ bittet"+(who ? " @@wen@@" : "")
00919       +"@@adverb@@ um Entschuldigung.";
00920     return FeelIt();
00921 
00922     /**************** Erbleichen ***************/
00923     case "erbleich":
00924     HELPCHECK("erbleich");
00925     GHOSTCHECK("Ich weiss zwar nicht, wie Du das schaffst, aber Du wirst "
00926         +"noch bleicher.\n",
00927       break_string("Wie unwahrscheinlich das auch ist, aber "+gname()
00928         +" schafft es tatsaechlich, noch bleicher zu werden.",78), 0 );
00929     ParseRest(str);
00930     if (str && !adverb)
00931       Return("Wie willst Du erbleichen?\n");
00932     out_sel="Du erbleichst@@adverb@@.";
00933     out_oth="@@name@@ erbleicht@@adverb@@.";
00934     return FeelIt();
00935 
00936     /**************** Erroeten ***************/
00937     case "erroet":
00938     HELPCHECK("erroet");
00939     GHOSTCHECK("Du schaffst es nur bis zu einem blassen Rosa, aber immerhin.\n",
00940       "Die Wangen des Geistes von "+capname()+" werden leicht rosa.\n", 0);
00941     ParseRest(str);
00942     if (!adverb && str)
00943       Return("Erroete wie?\n");
00944     out_sel="Deine Wangen gluehen@@adverb@@.";
00945     out_oth="@@name@@ erroetet@@adverb@@.";
00946     return FeelIt();
00947 
00948     /**************** Erschrecken ***************/
00949     case "erschreck":
00950     case "erschrick":
00951     if (!ghost())
00952       Return("Du bist zu harmlos, Geist muesste man sein...\n");
00953     HELPCHECK("erschreck");
00954     ParseRest(str);
00955     if (!who)
00956       Return("Wen willst Du denn erschrecken?\n");
00957     out_sel="Mit einem lauten BUH! erschreckst Du @@wen@@"
00958       +(adverb ? "@@adverb@@." : " fuerchterlich.");
00959     out_vic="BUH! Du zuckst vor Schreck zusammen. Muss dieser Geist von "
00960       +"@@gname@@ Dich auch@@adverb@@ erschrecken.";
00961     out_oth="BUH! @@gname@@ erschreckt @@wen@@"
00962       +(adverb ? "@@adverb@@." : " fuerchterlich.");
00963     return FeelIt();
00964 
00965     /**************** Flippen ***************/
00966     case "flipp":
00967     HELPCHECK("flipp");
00968     ParseRest(str);
00969     if (str && !adverb)
00970       Return("Ausflippen wollen wir also, so so. Und wie, wenn ich "
00971         +"fragen darf?\n");
00972     out_sel="Du flippst"+(adverb ? "@@adverb@@ aus." : " total aus.");
00973     out_oth="@@gname@@ flippt"+(adverb ? "@@adverb@@ aus." : " total aus.");
00974     return FeelIt();
00975 
00976     /**************** Fluchen ***************/
00977     case "fluch":
00978     HELPCHECK("fluch");
00979     GHOSTCHECK("Du faengst mangels Resonanzkoerper leise an zu fluchen.\n",
00980       gname()+" faengt leise an zu fluchen. Laut kann er nicht,\n"
00981         +"mangels Luft und Resonanzkoerper.\n", 0);
00982     if (!str)  {
00983       out_sel="Du fluchst lautstark.";
00984       out_oth="@@name@@ faengt an, fuerchterlich zu fluchen.";
00985     }
00986     else  {
00987       ParseRest(str);
00988       if (!adverb)
00989         Return("Wie willst Du fluchen?\n");
00990       out_sel="Du fluchst@@adverb@@.";
00991       out_oth="@@name@@ flucht auf einmal@@adverb@@.";
00992     }
00993     return FeelIt();
00994 
00995     /**************** Fragen ***************/
00996     case "frag":
00997     HELPCHECK("frag");
00998     if (!str)
00999       Return("Frage wen was?\n");
01000     ParseRest(str);
01001     if (who && CheckLife(NOT_SELF,NOT_DEAD,
01002       "Du faengst zu gruebeln an...",
01003       "Frage jemand, der lebt."))
01004         return 1;
01005     if (who)
01006       sscanf(str,"%s %s", str1,str1);
01007     else
01008       str1=str;
01009     if (!str1)
01010       Return("Frage "+who->name(WEN)+" WAS?\n");
01011     str1=capitalize(str1);
01012     if (str1[<1] != '?')
01013       str1 += "?";
01014     out_sel="Du fragst@@ wen@@: "+str1;
01015     /* Sprachfluch beruecksichtigen -Wargon, 8. 9. 95 */
01016     if (objectp(QueryProp(P_PERM_STRING)))
01017       str1 = call_other(QueryProp(P_PERM_STRING), "permutate_string", str1)||"";
01018     if (who) out_vic=(ghost() ? "Der Geist von " : /* IS_LEARNER(ME) ?
01019       QueryProp(P_PRESAY)||"" : */ "")+capname()+" fragt Dich: "+str1;
01020     out_oth=(ghost() ? "Der Geist von " : /* IS_LEARNER(ME) ?
01021       QueryProp(P_PRESAY)||"" : */ "")+capname()+" fragt@@ wen@@: "+str1;
01022     return FeelIt();
01023 
01024     /**************** Freuen ***************/
01025     case "freu":
01026     HELPCHECK("freu");
01027     ParseRest(str);
01028     if (str && !who && !adverb)
01029       Return("Freue Dich wie?\n");
01030     out_sel="Du "+(who ? "grinst @@wen@@ an und " : "")
01031       +"freust Dich@@adverb@@.";
01032     if (who) out_vic="@@gname@@ grinst Dich an und freut sich@@adverb@@.";
01033     out_oth="@@gname@@ "+(who ? "grinst @@wen@@ an und " : "")
01034       +"freut sich@@adverb@@.";
01035     return FeelIt();
01036 
01037     /**************** Furzen ***************/
01038     case "furz":
01039     HELPCHECK("furz");
01040     GHOSTCHECK("Du laesst einen fahren - aber er riecht nach gar nix.\n",
01041       gname()+" laesst einen fahren. Man riecht aber nix.\n", 0);
01042     ParseRest(str);
01043     if (str && !adverb)
01044       Return("Furze wie?\n");
01045     out_sel="Du furzt"+(adverb ? "@@adverb@@." : " hemmungslos.");
01046     out_oth="@@name@@ laesst@@adverb@@ einen Stinkefurz fahren.";
01047     ofoo=clone_object("/obj/furz");
01048     ofoo->set_furzer(this_player());
01049     ofoo->move(environment(this_player()));
01050     return FeelIt();
01051 // DEBUG Furz testen!
01052 
01053     /**************** Gaehnen ***************/
01054     case "gaehn":
01055     HELPCHECK("gaehn");
01056     if (ghost())
01057       Return("Als Geist wirst Du nicht muede - also nicht gaehnen.\n");
01058     ParseRest(str);
01059     if (str && !adverb)
01060       Return("Wie willst Du gaehnen?\n");
01061     if (!adverb)
01062       out_sel="Kannst Du aber Dein(en) Mund/Maul/Schnabel weit aufreissen!";
01063     else
01064       out_sel="Du gaehnst@@adverb@@.";
01065     out_oth="@@gname@@ gaehnt@@adverb@@.";
01066     return FeelIt();
01067 
01068     /**************** Glucksen ***************/
01069     case "glucks":
01070     HELPCHECK("glucks");
01071     ParseRest(str);
01072     if (str && !adverb)
01073       Return("Gluckse wie?\n");
01074     out_sel="Du gluckst"+(adverb ? "@@adverb@@." : " wie ein Huhn.");
01075     out_oth="@@gname@@ gluckst"+(adverb ? "@@adverb@@." : " wie ein Huhn.");
01076     return FeelIt();
01077 
01078     /**************** Gratulieren ***************/
01079     case "gratulier":
01080     case "beglueckwuensch":
01081     HELPCHECK("gratulier");
01082     ParseRest(str);
01083     if (!who)
01084       Return("Wem willst Du gratulieren?\n");
01085     if (CheckLife(NOT_SELF, NOT_DEAD,
01086       "Na, meinst Du nicht, dass Eigenlob stinkt?",
01087       "Soll ich dem Ding vielleicht zum Totsein gratulieren? Nee nee."))
01088         return 1;
01089     out_sel="Du gratulierst @@wem@@@@adverb@@.";
01090     out_vic="@@gname@@ gratuliert Dir@@adverb@@.";
01091     out_oth="@@gname@@ gratuliert @@wem@@@@adverb@@.";
01092     return FeelIt();
01093 
01094     /**************** Grinsen ***************/
01095     case "grins":
01096     HELPCHECK("grins");
01097     GHOSTCHECK("Als Du grinst, siehst Du regelrecht, wie die anderen eine "
01098         +"Gaensehaut bekommen.\n",
01099       "Du bekommst eine Gaensehaut, als der Geist von "+capname()
01100         +" zu grinsen anfaengt.\n", 0);
01101     ParseRest(str);
01102     if (for_all)  {
01103       out_sel="Du grinst @@alle@@@@adverb@@ an.";
01104       out_vic="@@name@@ grinst @@alle@@@@adverb@@ an.";
01105       return MixedOut(WEN);
01106     }
01107     if (!who && !adverb && str)
01108       Return("Grinsen - schoen und gut. Aber wen oder wie (an)grinsen?\n");
01109     if (who && CheckLife(NOT_SELF,NOT_DEAD,
01110       "Du grinst Dir was, aber so, dass es kein anderer sieht.",
01111       "Nicht mal einen Spiegel darf man hier angrinsen, nur Lebewesen!"))
01112         return 1;
01113     out_sel="Du grinst@@ wen@@@@adverb@@"+(who ? " an" : "")+".";
01114     if (who) out_vic="@@name@@ grinst Dich@@adverb@@ an.";
01115     out_oth="@@name@@ grinst@@ wen@@@@adverb@@"+(who ? " an" : "")+".";
01116     return FeelIt();
01117 
01118     /**************** Gruebeln ***************/
01119     case "gruebel":
01120     case "gruebl":
01121     HELPCHECK("gruebel");
01122     ParseRest(str);
01123     if (str && !adverb)
01124       Return("Grueble wie?\n");
01125     out_sel="Du gruebelst@@adverb@@ eine Weile vor Dich hin.";
01126     out_oth="@@gname@@ gruebelt@@adverb@@ eine Weile vor sich hin.";
01127     return FeelIt();
01128 
01129     /**************** Grummeln ***************/
01130     case "grummel":
01131     case "grumml":
01132     HELPCHECK("grummel");
01133     ParseRest(str);
01134     if (str && !adverb)
01135       Return("Grummle wie?\n");
01136     out_sel="Du grummelst@@adverb@@.";
01137     out_oth="@@gname@@ grummelt@@adverb@@.";
01138     return FeelIt();
01139 
01140     /**************** Grunzen ***************/
01141     case "grunz":
01142     HELPCHECK("grunz");
01143     ParseRest(str);
01144     if (str && !adverb)
01145       Return("Grunze wie?\n");
01146     out_sel="Du grunzt@@adverb@@.";
01147     out_oth="@@gname@@ grunzt@@adverb@@.";
01148     return FeelIt();
01149 
01150     /**************** Gucken ***************/
01151     case "guck":
01152     HELPCHECK("guck");
01153     ParseRest(str);
01154     if (!adverb)
01155       Return("Gucke wie aus der Waesche?\n");
01156     out_sel="Du guckst@@adverb@@ aus der Waesche.";
01157     out_oth="@@gname@@ guckt@@adverb@@ aus der Waesche.";
01158     return FeelIt();
01159 
01160     /**************** Jammern ***************/
01161     case "jammer":
01162     HELPCHECK("jammer");
01163     ParseRest(str);
01164     if (str && !adverb)
01165       Return("Wie willst Du jammern?\n");
01166     out_sel="Du jammerst@@adverb@@.";
01167     out_oth="@@gname@@ jammert@@adverb@@.";
01168     return FeelIt();
01169 
01170     /**************** Haetscheln ***************/
01171     case "haetschel":
01172     case "haetschl":
01173     HELPCHECK("haetschel");
01174     GHOSTCHECK("Du ueberlegst es Dir anders - mit Deinen durchlaessigen "
01175         +"Haenden...",
01176       gname()+" will anscheinend jemand haetscheln, ueberlegt\n"
01177         +"es sich nach einem kurzen Blick auf seine Haende anders.\n", 0);
01178     ParseRest(str);
01179     if (for_all)  {
01180       out_sel="Du haetschelst @@alle@@@@adverb@@.";
01181       out_vic="@@name@@ haetschelt @@alle@@@@adverb@@.";
01182       return MixedOut(WEN);
01183     }
01184     if (!str || !who)
01185       Return("Wen willst Du haetscheln?\n");
01186     if (who && CheckLife(NOT_SELF, NOT_DEAD,
01187       "Das sieht viel zu albern aus - Du laesst es bleiben.",
01188       "Ist da ueberhaupt was zu haetscheln? Nein, da lebt doch nix."))
01189         return 1;
01190     out_sel="Du haetschelst@@ wen@@@@adverb@@.";
01191     out_vic="@@name@@ haetschelt Dich@@adverb@@.";
01192     out_oth="@@name@@ haetschelt@@ wen@@@@adverb@@.";
01193     return FeelIt();
01194 
01195     /**************** Hicksen ***************/
01196     case "hicks":
01197     HELPCHECK("hicks");
01198     GHOSTCHECK("Hoppla! Dieser Hickser zieht Dich ganz schoen zusammen!\n",
01199       gname()+" hat anscheinend Schluckauf.\n"
01200         +"Und was fuer einen! Fuer einen Moment zieht es "+QueryPronoun(WEN)
01201         +" ziemlich zusammen.\n", 0);
01202     if (!str)  {
01203       out_sel="Hicks!";
01204       out_oth="@@name@@ muss hicksen. Wahrscheinlich zu viel Alkohol...";
01205     }
01206     else  {
01207       ParseRest(str);
01208       if (!adverb)
01209         Return("Hickse wie?\n");
01210       out_sel="Du hickst@@adverb@@.";
01211       out_oth="@@name@@ hickst@@adverb@@.";
01212     }
01213     return FeelIt();
01214 
01215     /**************** Huepfen ***************/
01216     case "huepf":
01217     HELPCHECK("huepf");
01218     GHOSTCHECK("Du schwebst durch die Gegend.\n",
01219       gname()+" schwebt durch die Gegend.\n", 0);
01220     if (!str)  {
01221       out_sel="B O I N G !! Du huepfst in der Gegend herum.";
01222       out_oth="@@name@@ huepft in der Gegend herum.";
01223     }
01224     else  {
01225       ParseRest(str);
01226       if (!who && !adverb)
01227         Return("Huepfe wie oder um wen oder wie oder was oder haeh?\n");
01228       out_sel="Du huepfst@@adverb@@"+(who ? " um@@ wen@@" : "")+" herum.";
01229       if (who) out_vic="@@name@@ huepft@@adverb@@ um Dich herum.";
01230       out_oth="@@name@@ huepft@@adverb@@"+(who ? " um@@ wen@@" : "")+" herum.";
01231     }
01232     return FeelIt();
01233 
01234     /**************** Husten ***************/
01235     case "hust":
01236     HELPCHECK("hust");
01237     GHOSTCHECK("Du verstreust ein paar Geisterbazillen im Raum.\n",
01238       gname()+" macht ufff, ufff und verteilt ein paar Geister-\n"
01239         +"bazillen im Raum.\n", 0);
01240     if (!str)  {
01241       out_sel="Hust! Keuch! Halt dir doch wenigstens die Hand vor den Mund!";
01242       out_oth="@@name@@ hustet sich fast die Seele aus dem Leib.";
01243     }
01244     else  {
01245       ParseRest(str);
01246       if (!who && !adverb)
01247         Return("Wenn Du schon was hinter huste tippst, dann bitte was "
01248           +"vernuenftiges!\n");
01249       if (who && CheckLife(NOT_SELF,NOT_DEAD,
01250         "Dir selber koennen nur andere was husten.",
01251         "Bitte huste nur Lebewesen was."))
01252           return 1;
01253       out_sel="Du hustest@@ wem@@@@adverb@@"+(who? " was" : "")+".";
01254       if (who) out_vic="@@name@@ hustet Dir@@adverb@@was.";
01255       out_oth="@@name@@ hustet@@ wem@@@@adverb@@"+(who? " was" : "")+".";
01256     }
01257     return FeelIt();
01258 
01259     /**************** Jubeln ***************/
01260     case "jubel":
01261     case "jubl":
01262     HELPCHECK("jubel");
01263     ParseRest(str);
01264     if (str && !who && !adverb)
01265       Return("Juble wie? Oder wem zu?\n");
01266     out_sel="Du jubelst@@ wem@@@@adverb@@"+(who ? " zu." : ".");
01267     if (who) out_vic="@@gname@@ jubelt Dir@@adverb@@ zu.";
01268     out_oth="@@gname@@ jubelt@@ wem@@@@adverb@@"+(who ? " zu." : ".");
01269     return FeelIt();
01270 
01271     /**************** Keuchen ***************/
01272     case "keuch":
01273     HELPCHECK("keuch");
01274     if (ghost())
01275       Return("Als Geist strengt Dich nix an - also wird auch nicht "
01276         +"gekeucht.\n");
01277     ParseRest(str);
01278     if (str && !adverb)
01279       Return("Keuche wie?\n");
01280     out_sel="Du keuchst"+(adverb ? "@@adverb@@." : " vor Anstrengung.");
01281     out_oth="@@name@@ keucht"+(adverb ? "@@adverb@@." : " vor Anstrengung.");
01282     return FeelIt();
01283 
01284     /**************** Kichern ***************/
01285     case "kicher":
01286     HELPCHECK("kicher");
01287     if (!str)  {
01288       out_sel="Du kicherst. (Wie albern von Dir)";
01289       out_oth="@@gname@@ gibt ein albernes Kichern von sich.";
01290     }
01291     else  {
01292       ParseRest(str);
01293       if (!who && !adverb)
01294         Return("Das haut so nicht hin, gib vernuenftige Parameter.\n");
01295       if (who && CheckLife(NOT_SELF,NOT_DEAD,
01296         "In diesem Fall nimm bitte nur kicher.",
01297         "Musst schon etwas Lebendes angeben, nichts Totes."))
01298           return 1;
01299       out_sel="Du kicherst@@adverb@@"+(who ? " hinter "+who->name(WESSEN)+
01300         " Ruecken." : ".");
01301       if (who)  out_vic="Jemand kichert@@adverb@@ hinter deinem Ruecken.";
01302       out_oth="@@gname@@ kichert@@adverb@@"+(who ? " hinter "+who->name(WESSEN)
01303         +" Ruecken." : ".");
01304     }
01305     return FeelIt();
01306 
01307     /**************** Kitzeln ***************/
01308     case "kitzel":
01309     case "kitzl":
01310     HELPCHECK("kitzel");
01311     GHOSTCHECK("Mit Deinen immateriellen Fingern schaffst Du das nicht.\n",
01312       gname()+" muss gerade feststellen, dass man mit\n"
01313         +"immateriellen Fingern nicht kitzeln kann.\n", 0);
01314     ParseRest(str);
01315     if (!who)
01316       Return("Wen willst Du kitzeln?\n");
01317     if (who && CheckLife(NOT_SELF,NOT_DEAD,
01318       "Du bist doch kein Masochist! Du laesst es bleiben.",
01319       "Dinge sind so selten kitzlig. Lass es bleiben."))
01320         return 1;
01321     if (member(({"highlander","hobo"}), who->query_real_name())>-1)
01322       switch (who->query_real_name())  {
01323         case "highlander": str1="unter"; str2="Federn"; break;
01324         case "hobo"      : str1="an";    str2="Kinn"; break;
01325       }
01326     else if (who->QueryProp(P_RACE))
01327       switch (lower_case(who->QueryProp(P_RACE)))  {
01328         case "drache" : str1="unter";str2="Schuppen";
01329           t_g=FEMALE; t_n=PLURAL; break;
01330         case "greif"  : str1="unter";str2="Federn";
01331           t_g=FEMALE; t_n=PLURAL; break;
01332         default       : str1="an"; str2="Kinn"; t_g=NEUTER; t_n=SINGULAR;
01333       }
01334     else  {
01335       str1="an"; str2="Kinn"; t_g=NEUTER; t_n=SINGULAR;
01336     }
01337     if (getuid(who)=="trest" || getuid(who)=="woelkchen")  {
01338       str1="an"; str2="Fuessen"; t_g=MALE; t_n=PLURAL;
01339     }
01340     out_sel="Du kitzelst@@ wen@@@@adverb@@ "+str1+" "+who->QPP(t_g,WEM,t_n)
01341       +" "+str2+".\n@@wer@@ versucht, sich zu beherrschen, muss aber "
01342       +"doch lachen.";
01343     out_vic="@@name@@ kitzelt Dich@@adverb@@ "+str1+" Deine"
01344       +(t_n ? "n" : (t_g==FEMALE ? "r" : "m"))+" "+str2
01345       +".\nDu versuchst, Dich zu beherrschen, musst aber doch lachen.";
01346     out_oth="@@name@@ kitzelt@@ wen@@@@adverb@@ "+str1+" "
01347       +who->QPP(t_g,WEM,t_n)+" "+str2
01348       +".\n@@wer@@ versucht, sich zu beherrschen, muss aber doch lachen.";
01349     return FeelIt();
01350 
01351     /**************** Klatschen ***************/
01352     case "klatsch":
01353     HELPCHECK("klatsch");
01354     GHOSTCHECK("Deine Haende sausen durcheinander durch.\n",
01355       gname()+" will in die Haende klatschen - aber sie\n"
01356         +"sausen durcheinander durch.\n", 0);
01357     ParseRest(str);
01358     if (!adverb && str)
01359       Return("Klatsche wie?\n");
01360     out_sel="Du klatschst@@adverb@@ in die Haende.";
01361     out_oth="@@name@@ klatscht@@adverb@@ in die Haende.";
01362     return FeelIt();
01363 
01364     /**************** Klopfen ***************/
01365     case "klopf":
01366     HELPCHECK("klopf");
01367     if (!str||sscanf(str,"%s auf schulter",sfoo)!=1)
01368       if (!str||sscanf(str,"%s auf die schulter",sfoo)!=1)
01369         Return("Klopfe wie wem wieso was?\n");
01370     if (ghost())
01371       Return("Das geht leider nicht mit durchlaessigen Haenden.\n");
01372     str=sfoo;
01373     if (str=="") str=0;
01374     ParseRest(str);
01375     if (!who)
01376       Return("Klopfe wem auf die Schulter?\n");
01377     out_sel="Du klopfst @@wem@@@@adverb@@ auf die Schulter.";
01378     out_vic="@@name@@ klopft Dir@@adverb@@ auf die Schulter.";
01379     out_oth="@@name@@ klopft @@wem@@@@adverb@@ auf die Schulter.";
01380     return FeelIt();
01381 
01382     /**************** Knabbern ***************/
01383     case "knabber":
01384     HELPCHECK("knabber");
01385     if (ghost())
01386       Return("Sorry, aber dafuer fehlt Dir im Moment der noetige "
01387         +"\"Biss\"...\n");
01388     ParseRest(str);
01389     if (!who)
01390       Return("Knabbere wen an?\n");
01391     if (CheckLife(NOT_SELF,NOT_DEAD,
01392       "Du kommst nicht an dein eigenes Ohr ran...",
01393       "Noe, noe, das schmeckt bestimmt nicht gut."))
01394         return 1;
01395     out_sel="Du knabberst@@adverb@@ an "+who->name(WESSEN)+" Ohr.";
01396     out_vic="@@name@@ knabbert@@adverb@@ an Deinem Ohr.";
01397     out_oth="@@name@@ knabbert@@adverb@@ an "+who->name(WESSEN)+" Ohr.";
01398     return FeelIt();
01399 
01400     /**************** Knicksen ***************/
01401     case "knicks":
01402     HELPCHECK("knicks");
01403     GHOSTCHECK("Du knickst in der Mitte ab, kriegst Dich aber schnell wieder "
01404         +"zusammen.\n",
01405       gname()+" knick(s)t in der Mitte ab, kriegt sich aber\n"
01406         +"zum Glueck schnell wieder zusammen.\n", 0);
01407     if (!str) {
01408       out_sel="Du machst einen anmutigen Knicks.";
01409       out_oth="@@name@@ macht einen anmutigen Knicks.";
01410     }
01411     else  {
01412       ParseRest(str,"vor");
01413       if (for_all)  {
01414         out_sel="Du knickst@@adverb@@ vor @@alle@@.";
01415         out_vic="@@name@@ knickst@@adverb@@ vor @@alle@@.";
01416         return MixedOut(WEM);
01417       }
01418       if (!who && !adverb)
01419         Return("Knickse irgendwie oder vor jemandem.\n");
01420       if (who && CheckLife(NOT_SELF,NOT_DEAD,
01421         "Wie willst Du das denn schaffen?",
01422         "Vor Sachen wird hier nicht geknickst!"))
01423           return 1;
01424       out_sel="Du knickst@@adverb@@"+(who ? " vor" : "")+"@@ wem@@.";
01425       if (who ) out_vic="@@name@@ knickst@@adverb@@ vor Dir.";
01426       out_oth="@@name@@ knickst@@adverb@@"+(who ? " vor" : "")+"@@ wem@@.";
01427     }
01428     return FeelIt();
01429 
01430     /**************** Knirschen ***************/
01431     case "knirsch":
01432     HELPCHECK("knirsch");
01433     if (ghost())
01434       Return("Du kannst mit nichts knirschen, so als Geist. Versuche doch "
01435         +"dafuer\nmal, zu rasseln...\n");
01436     ParseRest(str);
01437     if (str && !adverb)
01438       Return("Knirsche wie?\n");
01439     switch (QueryProp(P_RACE))  {
01440       case "greif"  : str1="dem Schnabel."; break;
01441       case "sandtiger" : str1="den Fangzaehnen."; break;
01442       case "drache" : str1="den Fangzaehnen."; break;
01443       default       : str1="den Zaehnen.";
01444     }
01445     out_sel="Du knirschst@@adverb@@ mit "+str1;
01446     out_oth="@@name@@ knirscht@@adverb@@ mit "+str1;
01447     return FeelIt();
01448 
01449     /**************** Knuddeln ***************/
01450     case "knuddel":
01451     case "knuddl":
01452     HELPCHECK("knuddel");
01453     if (ghost())
01454       Return("Sorry, nicht als Geist.\n");
01455     ParseRest(str);
01456     if (for_all)  {
01457       out_sel="Du knuddelst @@alle@@@@adverb@@.";
01458       out_vic="@@name@@ knuddelt @@alle@@@@adverb@@.";
01459       return MixedOut(WEN);
01460     }
01461     if (!who)
01462       Return("Knuddle wen?\n");
01463     if (CheckLife(NOT_SELF,NOT_DEAD,
01464       "Das bringt doch nix, lass es halt.",
01465       "Du kannst soviel ich weiss ausser Lebewesen nur Teddys knuddeln."))
01466         return 1;
01467     out_sel="Du knuddelst@@ wen@@@@adverb@@.";
01468     out_vic="@@name@@ knuddelt Dich@@adverb@@.";
01469     out_oth="@@name@@ knuddelt@@ wen@@@@adverb@@.";
01470     return FeelIt();
01471 
01472     /**************** Knurren ***************/
01473     case "knurr":
01474     HELPCHECK("knurr");
01475     ParseRest(str);
01476     if (for_all)  {
01477       out_sel="Du knurrst @@alle@@@@adverb@@ an.";
01478       out_vic="@@gname@@ knurrt @@alle@@@@adverb@@ an.";
01479       return MixedOut(WEN);
01480     }
01481     if (str && !who && !adverb)
01482       Return("Wen anknurren oder wie knurren?\n");
01483     if (who && CheckLife(NOT_SELF,NOT_DEAD,
01484       "Du knurrst in Dich hinein.",
01485       "Reagiert nicht. Solltest wohl besser Lebwesen anknurren."))
01486         return 1;
01487     out_sel="Du knurrst@@ wen@@@@adverb@@"+(who ? " an." : ".");
01488     if (who) out_vic="@@gname@@ knurrt Dich@@adverb@@ an.";
01489     out_oth="@@gname@@ knurrt@@ wen@@@@adverb@@"+(who ? " an." : ".");
01490     return FeelIt();
01491 
01492     /****************  Knutschen ***************/
01493     case "knutsch":
01494     HELPCHECK("knutsch");
01495     if (ghost())
01496       Return("Das kannst Du als Geist leider nicht. Irgendwie fehlt Dir "
01497         +"dazu das Herz.\n");
01498     ParseRest(str);
01499     if (!who)
01500       Return("Knutsche wen ab?\n");
01501     if (CheckLife(NOT_SELF,NOT_DEAD,
01502       "Das geht nicht.",
01503       "Igitt! Lieber nicht!"))
01504         return 1;
01505     out_sel="Du gibst @@wem@@@@adverb@@ einen RICHTIGEN Kuss.";
01506     out_vic="@@name@@ gibt Dir@@adverb@@ einen tiefen und hingebungsvollen "
01507       +"Kuss.\nDu schwebst im 7. Himmel.";
01508     out_oth="@@name@@ gibt @@wem@@@@adverb@@ einen tiefen und "
01509       +"hingebungsvollen Kuss.";
01510     return FeelIt();
01511 
01512     /**************** Kotzen ***************/
01513     case "kotz":
01514     HELPCHECK("kotz");
01515     if (ghost())
01516       Return("Ne, das ist eins von den Sachen, die als Geist nicht gehen.\n");
01517     ParseRest(str);
01518     if (str && !who && !adverb)
01519       Return("Kotze wie? Kotze auf wen?\n");
01520     if (who && CheckLife(NOT_SELF,0,
01521       "Igitt, nein danke."))
01522         return 1;
01523     if(!str) {
01524       out_sel="Du kotzt ueber deine Schuhe.";
01525       out_oth="@@name@@ verdreht die Augen und kotzt.";
01526     }
01527     else  {
01528       out_sel="Du kotzt@@adverb@@"+(who ? " auf @@wen@@." : ".");
01529       if (who) out_vic="@@name@@ kotzt@@adverb@@ auf Dich.";
01530       out_oth="@@name@@ kotzt@@adverb@@"+(who ? " auf @@wen@@." : ".");
01531     }
01532     return FeelIt();
01533 
01534     /**************** Kratzen ***************/
01535     case "kratz":
01536     HELPCHECK("kratz");
01537     ParseRest(str);
01538     if (who && (who!=this_player()))
01539       Return("Das mach mal schoen nur mit Dir selber.\n");
01540     if (str && !adverb)
01541       Return("Wie willst Du Dich kratzen?\n");
01542     out_sel="Du kratzt dich@@adverb@@ am Kopp.";
01543     out_oth="@@gname@@ kratzt sich@@adverb@@ am Kopp.";
01544     return FeelIt();
01545 
01546     /**************** Krieche ***************/
01547     case "kriech":
01548     HELPCHECK("kriech");
01549     ParseRest(str);
01550     out_sel="Du kriechst"+(who ? " vor @@wem@@" : "")+"@@adverb@@ im Staub.";
01551     if (who) out_vic="@@gname@@ kriecht@@adverb@@ vor Dir im Staub.";
01552     out_oth="@@gname@@ kriecht"+(who ? " vor @@wem@@" : "")
01553       +"@@adverb@@ im Staub.";
01554     return FeelIt();
01555 
01556     /**************** Kuessen ***************/
01557     case "kuess":
01558     HELPCHECK("kuess");
01559     if (ghost())
01560       Return("Als Geist kannst Du leider niemanden kuessen.\n");
01561     ParseRest(str);
01562     if (!who)
01563       Return("Wen willst Du kuessen?\n");
01564     if (CheckLife(NOT_SELF,NOT_DEAD,
01565       "Da hast Du aber Schwierigkeiten... Du gibt es schliesslich auf.",
01566       "Nix. Absolut nix. Kuesse lieber Lebewesen - die reagieren\n"
01567         +"wenigstens (und sei es, dass sie Dich fressen...)."))
01568         return 1;
01569     out_sel="Du kuesst@@ wen@@@@adverb@@.";
01570     out_vic="@@name@@ kuesst Dich@@adverb@@.";
01571     out_oth="@@name@@ kuesst@@ wen@@@@adverb@@.";
01572     FeelIt();
01573     if (who->QueryProp(P_FROG)&&QueryProp(P_LEVEL)>who->QueryProp(P_LEVEL)) {
01574       tell_room(environment(this_player()),"PLOPP!\n");
01575       write("Huch! Du wirst auf einmal so gruen und klein und kriegst auf\n"
01576         +"einmal furchtbar Hunger auf Fliegen und so...\n");
01577       who->Message("Auf einmal wird die Welt um Dich wieder so klein, wie sie\n"
01578         +" frueher mal war - und vor Dir sitzt ein kleiner gruener Frosch.\n");
01579       say(who->name(WER)+" steht auf einmal da und schaut dumm aus der "
01580         +"Waesche. Dafuer fehlt\njetzt seltsamerweise "+capname()
01581         +". Die Gesamtzahl an kleinen gruenen\nFroeschen im Raum hat sich "
01582         +"jedoch nicht geaendert...\n",({who,this_player()}));
01583       who->SetProp(P_FROG,0);
01584       SetProp(P_FROG,1);
01585     }
01586     return 1;
01587 
01588     /**************** Kuscheln ***************/
01589     case "kuschel":
01590     case "kuschl":
01591     HELPCHECK("kuschel");
01592     GHOSTCHECK("Dazu bist Du als Geist viel zu kalt und gar "
01593         +"schroecklich anzusehen.\n",
01594       gname()+" scheint Anwandlungen zu haben, sich an jemand "
01595         +"ankuscheln zu wollen.\nEntsetzt springen alle zurueck, weil "
01596         +"dazu ist er doch zu kalt und schroecklich\nanzusehen.\n", 0);
01597     ParseRest(str);
01598     if (!who)
01599       Return("An wen willst Du Dich ankuscheln?\n");
01600     out_sel="Du kuschelst Dich@@adverb@@ an @@wen@@ an.";
01601     out_vic="@@name@@ kuschelt sich@@adverb@@ an Dich an.";
01602     out_oth="@@name@@ kuschelt sich@@adverb@@ an @@wen@@ an.";
01603     return FeelIt();
01604 
01605     /**************** Lachen ***************/
01606     case "lach":
01607     HELPCHECK("lach");
01608     GHOSTCHECK("Du lachst mit hohler Stimme. Den Umstehenden (sind doch welche"
01609         +" da, oder?)\nlaeuft es kalt den Ruecken runter.\n",
01610       gname()+" lacht mit hohler Stimme.\nDir laeuft es eiskalt den Ruecken"
01611         +" runter.\n", 0);
01612     if (!str)  {
01613       out_sel="Du brichst vor Lachen zusammen.";
01614       out_oth="@@name@@ bricht vor Lachen zusammen.";
01615     }
01616     else  {
01617       ParseRest(str);
01618       if (for_all)  {
01619         out_sel="Du lachst@@adverb@@ ueber @@alle@@.";
01620         out_vic="@@name@@ lacht@@adverb@@ ueber @@alle@@.";
01621         return MixedOut(WEN);
01622       }
01623       if (!who && !adverb)
01624         Return("Lache wie, lache ueber wen?\n");
01625       if (who && CheckLife(NOT_SELF,NOT_DEAD,
01626         "Lach Dich doch nicht selber aus - das machen schon andere...",
01627         "Gelacht wird nur ueber Lebewesen (die koennen sich drueber aergern)."))
01628           return 1;
01629       out_sel="Du lachst@@adverb@@"+(who?" ueber@@ wen@@":"")+".";
01630       if (who) out_vic="@@name@@ lacht@@adverb@@ ueber Dich.";
01631       out_oth="@@name@@ lacht@@adverb@@"+(who?" ueber@@ wen@@":"")+".";
01632     }
01633     return FeelIt();
01634 
01635     /**************** Laecheln ***************/
01636     case "laechel":
01637     case "laechl":
01638     HELPCHECK("laechel");
01639     if (ghost()) {
01640       write("Du laechelst innerlich.\n");
01641       return 1;
01642     }
01643     if(!str) {
01644       out_sel="Du laechelst.";
01645       out_oth="@@name@@ laechelt.";
01646     }
01647     else  {
01648       ParseRest(str);
01649       if (for_all)  {
01650         out_sel="Du laechelst @@alle@@@@adverb@@ an.";
01651         out_vic="@@name@@ laechelt @@alle@@@@adverb@@ an.";
01652         return MixedOut(WEN);
01653       }
01654       if (!who && !adverb && str)
01655         Return("Wie oder wen?\n");
01656       if (who && CheckLife(NOT_SELF,NOT_DEAD,
01657         "Musst schon jemand anders anlaecheln.",
01658         "Bitte ein Lebewesen anlaecheln."))
01659           return 1;
01660       out_sel="Du laechelst@@ wen@@@@adverb@@"+(who ? " an." : ".");
01661       if (who) out_vic="@@name@@ laechelt Dich@@adverb@@ an.";
01662       out_oth="@@name@@ laechelt@@ wen@@@@adverb@@"+(who ? " an." : ".");
01663     }
01664     return FeelIt();
01665 
01666     /**************** Liebe ***************/
01667     /* These lines appear Courtesy of Angus@MorgenGrauen. So long, and thanks */
01668     /* for all the fish, errr, text, Angus :) */
01669     case "lieb":
01670     HELPCHECK("lieb");
01671     if (ghost())
01672       Return("Auf diese Freuden musst Du als Geist leider verzichten.\n");
01673     ParseRest(str);
01674     if (!who)
01675       Return("Wen hast Du lieb?\n");
01676     if (CheckLife(NOT_SELF,NOT_DEAD,
01677       "Ja, ich weiss, Du magst Dich, aber das musst Du nicht zur Schau"
01678         +"stellen.",
01679       "Du entwickelst seltsame Neigungen, finde ich."))
01680         return 1;
01681     str1=(who->QueryProp(P_GENDER)==FEMALE ? "ihr" : "ihm");
01682     /* old version:
01683       out_sel="Du fluesterst @@wem@@@@adverb@@ liebevolle Worte ins Ohr.";
01684       out_vic=gname()+" fluestert Dir@@adverb@@ liebevolle Worte ins Ohr.";
01685       out_oth=gname()+" fluestert@@adverb@@ sanfte Worte zu @@wem@@.";
01686     */
01687     out_sel="Du schliesst die Augen, schmiegst Dich eng an @@wen@@ und gibst"
01688       +LF+str1+" einen zaertlichen und leidenschaftlichen Kuss.\n"
01689       +"Um Dich herum versinkt die Welt und Du glaubst, auf Wolken zu "
01690       +"schweben.";
01691     out_vic="@@name@@ drueckt Dich zaertlich an sich und gibt Dir\n"
01692       +"einen zaertlichen und leidenschaftlichen Kuss. Du schliesst die\n"
01693       +"Augen und traeumst ein wenig......Du schwebst auf Wolken direkt\n"
01694       +"in den siebten Himmel.";
01695     out_oth="Du schaust dezent weg, als sich @@name@@ und "+who->name()
01696       +" verliebt in die Arme\nsinken.";
01697     return FeelIt();
01698 
01699     /**************** Loben ***************/
01700     case "lob":
01701     HELPCHECK("lob");
01702     if (!str)
01703       Return("Wen oder was willst Du loben?\n");
01704     ParseRest(str);
01705     if (who==ME)  {
01706       ofoo=clone_object("/obj/furz");
01707       ofoo->set_furzer(this_player());
01708       ofoo->set_eigenlob();
01709       ofoo->move(environment(this_player()));
01710       //DEBUG Furz zum Eigenlob patchen :>
01711       out_sel="Du lobst Dich selber@@adverb@@. Die Folgen kennst Du ja...";
01712       out_oth="@@gname@@ lobt sich selber@@adverb@@, mit den bekannten Folgen.";
01713     } else if (who) {
01714       out_sel="Du lobst @@wen@@@@adverb@@.";
01715       out_vic="@@gname@@ lobt Dich@@adverb@@.";
01716       out_oth="@@gname@@ lobt @@wen@@@@adverb@@.";
01717     } else  {
01718       out_sel="Du lobst "+str+".";
01719       out_oth="@@gname@@ lobt "+str+".";
01720     }
01721     return FeelIt();
01722 
01723     /**************** Moppern ***************/
01724     case "mopper":
01725     HELPCHECK("mopper");
01726     ParseRest(str);
01727     if (str && !adverb)
01728       Return("Moppere wie?\n");
01729     out_sel="Du mopperst@@adverb@@.";
01730     out_oth="@@gname@@ moppert@@adverb@@.";
01731     return FeelIt();
01732 
01733     /**************** Mustern ***************/
01734     case "muster":
01735     HELPCHECK("muster");
01736     ParseRest(str);
01737     if (!who)
01738       Return("Mustere wen?\n");
01739     out_sel="Du musterst @@wen@@@@adverb@@.";
01740     out_vic="@@gname@@ mustert Dich@@adverb@@.";
01741     out_oth="@@gname@@ mustert @@wen@@@@adverb@@.";
01742     return FeelIt();
01743 
01744     /**************** Nicken ***************/
01745     case "ja":
01746     case "nick":
01747     HELPCHECK("nick");
01748     ParseRest(str);
01749     if (for_all)  {
01750       out_sel="Du nickst @@alle@@@@adverb@@ zu.";
01751       out_vic="@@gname@@ nickt @@alle@@@@adverb@@ zu.";
01752       return MixedOut(WEM);
01753     }
01754     if (str && !who && !adverb)
01755       Return("Nicke wie oder wem zu oder wem wie zu?\n");
01756     if (who && CheckLife(NOT_SELF,NOT_DEAD,
01757       "Du willst Dir selber zunicken? Lieber nicht, das sieht so albern aus.",
01758       "Hm. Nix passiert. Von Lebewesen bekommt man meistens mehr Feedback."))
01759         return 1;
01760     out_sel="Du nickst@@ wem@@@@adverb@@"
01761       +(who ? " zu." : (adverb ? "." : " zustimmend."));
01762     if (who) out_vic="@@gname@@ nickt Dir@@adverb@@ zu.";
01763     out_oth="@@gname@@ nickt@@ wem@@@@adverb@@"
01764       +(who ? " zu." : (adverb ? "." : " zustimmend."));
01765     return FeelIt();
01766 
01767     /**************** Niesen ***************/
01768     case "nies":
01769     HELPCHECK("nies");
01770     if (ghost())
01771       Return("Du hast keine Nase mehr, in der es Dich jucken koennte...\n");
01772     ParseRest(str);
01773     if (str && !adverb)
01774       Return("Niese wie?\n");
01775     out_sel="Haaaaaa-tschi! Gesundheit!"+(adverb ? " Du niest@@adverb@@." : "");
01776     out_oth="Haaaaaa-tschi! @@name@@ niest@@adverb@@.";
01777     return FeelIt();
01778 
01779     /**************** Ohrfeigen ***************/
01780     case "gib":
01781     HELPCHECK("gib");
01782     if (!str)
01783       Return("Gib wem was?\n");
01784     if (sscanf( str,"%s ohrfeige",str1)==0)
01785       return 0;
01786     ParseRest(str, ({"ohrfeige", "eine ohrfeige"}));
01787     if (for_all)  {
01788       out_sel="Du verpasst @@alle@@@@adverb@@ eine Ohrfeige.";
01789       out_vic="@@name@@ verpasst @@alle@@@@adverb@@ eine Ohrfeige.";
01790       return MixedOut(WEM);
01791     }
01792     if (!who)
01793       Return("Gib wem eine Ohrfeige?\n");
01794     if (CheckLife(NOT_SELF,NOT_DEAD,
01795       "Dazu sind Dir Deine Backen doch zu schade.",
01796       "Du wirst doch nichts schlagen, was sich nicht wehren kann?"))
01797         return 1;
01798     GHOSTCHECK("Deine Hand saust mit voller Wucht durch dein Opfer durch!",
01799       gname()+" will "+who->name(WEM)+" eine Ohrfeige geben - aber die Hand\n"
01800         +"saust mit voller Wucht durch das Opfer durch!", 0);
01801     out_sel="Du verpasst @@wem@@@@adverb@@ eine schallende Ohrfeige.";
01802     out_vic="@@name@@ verpasst Dir@@adverb@@ eine Watsche, dass Dir Hoeren "
01803       +"und Sehen vergeht.";
01804     out_oth="@@name@@ verpasst @@wem@@@@adverb@@ eine schallende Ohrfeige.";
01805     return FeelIt();
01806 
01807     /**************** Pfeifen ***************/
01808     case "pfeif":
01809     HELPCHECK("pfeif");
01810     GHOSTCHECK("Es kommt leider nur (nicht mal heisse) Luft, aber kein "
01811         +"Pfiff.\n",
01812       gname()+" spitzt den Mund und pustet angestrengt. Nichts passiert.\n", 0);
01813     ParseRest(str, "nach");
01814     if (str && !who && !adverb)
01815       Return("Pfeife wie? Pfeife wem nach? Haeh?\n");
01816     if (who && CheckLife(NOT_SELF,NOT_DEAD,
01817       "Was willst Du denn damit ausdruecken? Das gibt fuer mich keinen Sinn.",
01818       "Ich habe keine Lust dazu."))
01819         return 1;
01820     out_sel="Du pfeifst@@ wen@@@@adverb@@"
01821       +(who ? " nach." : (adverb ? "." : " anerkennend."));
01822     if (who) out_vic="@@name@@ pfeift Dir@@adverb@@ nach.";
01823     out_oth="@@name@@ pfeift@@ wen@@@@adverb@@"
01824       +(who ? " nach." : (adverb ? "." :" anerkennend."));
01825     return FeelIt();
01826 
01827     /**************** Philosophieren ***************/
01828     case "philosophier":
01829     HELPCHECK("philosophier");
01830     ParseRest(str);
01831     out_sel="Du philosophierst"+(adverb ? "@@adverb@@." :
01832       (str ? " ueber "+str+"." : "."));
01833     out_oth="@@gname@@ philosophiert"+(adverb ? "@@adverb@@." :
01834       (str ? " ueber "+str+"." : "."));
01835     return FeelIt();
01836 
01837     /**************** (Nase) Putzen ***************/
01838     case "putz":
01839     HELPCHECK("putz");
01840     if (ghost())
01841       Return("Nix da zum Putzen, so nebuloes, wie Du bist.\n");
01842     ParseRest(str, ({"nase", "die nase"}));
01843     if (str && str!="nase" && !adverb)
01844       Return("Putze Deine Nase wie?\n");
01845     out_sel="Du putzt Deine Nase@@adverb@@.";
01846     out_oth="@@name@@ putzt@@adverb@@ "+QPP(FEMALE,WEN)+" Nase.";
01847     return FeelIt();
01848 
01849     /**************** Quaken ***************/
01850     case "quak":
01851     HELPCHECK("quak");
01852     ParseRest(str);
01853     if (str && !adverb)
01854       Return("Quake wie?\n");
01855     sfoo="";
01856     flag=QueryProp(P_FROG)&&!ghost();
01857     for (t_g=0; t_g<=random(flag ? 4 : 2); t_g++)  {
01858       sfoo+=(flag ? " Qu" : " kw");
01859       for (t_n=0; t_n<=random(flag ? 10 : 5); t_n++)
01860         sfoo+="aA"[random(1)..random(1)];
01861       sfoo+="k";
01862     }
01863     if (!flag)
01864       sfoo=lower_case(sfoo);
01865     else
01866       sfoo+="!";
01867     out_sel="Du quakst"+(adverb ? "@@adverb@@" : (flag ? " aus voller Kehle"
01868       : " in etwa wie ein Frosch"))+":"+sfoo;
01869     out_oth="@@gname@@ quakt"+(adverb ? "@@adverb@@" : (flag ? " aus voller Kehle"
01870       : " in etwa wie ein Frosch"))+":"+sfoo;
01871     return FeelIt();
01872 
01873     /**************** Quietschen ***************/
01874     case "quietsch":
01875     case "quiek":
01876     HELPCHECK("quiek");
01877     ParseRest(str);
01878     if (str && !adverb)
01879       Return("Quietsche wie?\n");
01880     out_sel="Du quietschst"+(adverb ? "@@adverb@@." : " vergnuegt.");
01881     out_oth="@@gname@@ quietscht"+(adverb ? "@@adverb@@." : " vergnuegt.");
01882     return FeelIt();
01883 
01884     /**************** Raeuspern ***************/
01885     case "raeusper":
01886     HELPCHECK("raeusper");
01887     ParseRest(str);
01888     if (str && !adverb)
01889       Return("Hm? Wie meinen?\n");
01890     out_sel="Du raeusperst Dich@@adverb@@.";
01891     out_oth="@@gname@@ raeuspert sich@@adverb@@.";
01892     return FeelIt();
01893 
01894     /**************** Reiben ***************/
01895     case "reib":
01896     HELPCHECK("reib");
01897     if (ghost())
01898       Return("Du hast nichts zum Reiben, aber auch gar nichts.\n");
01899     if (str && (sscanf(str,"%s die Augen",sfoo)==1 || sscanf(str,"%s Augen",sfoo)==1))
01900       str=sfoo;
01901     else if (str && (sscanf(str,"%s die Haende",sfoo)==1
01902     ||sscanf(str,"%s Haende",sfoo)==1))  {
01903       flag=2;
01904       str=sfoo;
01905     }
01906     if (str=="") str=0;
01907     ParseRest(str);
01908     if (str && !adverb)
01909       Return("Reibe wie die "+(flag==2 ? "Haende" : "Augen")+"?\n");
01910     out_sel="Du reibst Dir"+(adverb ? "@@adverb@@"
01911       : (flag==2 ? " vergnuegt" : " muede"))+" die "
01912       +(flag==2 ? "Haende." : "Augen.");
01913     out_oth="@@name@@ reibt sich"+(adverb ? "@@adverb@@"
01914       : (flag==2 ? " vergnuegt" : " muede"))+" die "
01915       +(flag==2 ? "Haende." : "Augen.");
01916     return FeelIt();
01917 
01918     /**************** Rotfln ***************/
01919     case "rotfl":
01920     HELPCHECK("rotfl");
01921     ParseRest(str);
01922     if (str && !adverb)
01923       Return("Rotfl wie?\n");
01924     out_sel="Du rotflst@@adverb@@.";
01925     out_oth="@@gname@@ rotflt@@adverb@@.";
01926     return FeelIt();
01927 
01928     /**************** Ruelpsen ***************/
01929     case "ruelps":
01930     HELPCHECK("ruelps");
01931     GHOSTCHECK("Ein leichter Windhauch entfaehrt Deinem Mund, mehr nicht.\n",
01932       "Dem Mund des Geistes von "+capname()
01933         +" entfaehrt ein leichtes Lueftchen.\n", 0);
01934     if (!str)  {
01935       out_sel="BOOOOEEERRRRPP!  Entschuldige dich gefaelligst!";
01936       out_oth="@@name@@ ruelpst unanstaendig.";
01937     }
01938     else  {
01939       ParseRest(str);
01940       if (!adverb)  {
01941         write("Ruelpse wie (schlimm genug, dass Du Dich nicht beherrschen "
01942           +"kannst!)?\n");
01943         return 1;
01944       }
01945       out_sel="Du ruelpst@@adverb@@. Schaem Dich!";
01946       out_oth="@@name@@ ruelpst@@adverb@@ und wird nicht mal rot dabei.";
01947     }
01948     return FeelIt();
01949   }
01950 
01951   switch (vb)  {
01952     /**************** Runzeln ***************/
01953     case "runzel":
01954     case "runzl":
01955     HELPCHECK("runzel");
01956     if (ghost())
01957       Return("DAS geht als Geist nun wirklich nicht.\n");
01958     ParseRest(str,"stirn");
01959     if (str && !adverb)
01960       Return("Runzle die Stirn wie?\n");
01961     out_sel="Du runzelst@@adverb@@ die Stirn.";
01962     out_oth="@@name@@ runzelt@@adverb@@ die Stirn.";
01963     return FeelIt();
01964 
01965     /**************** Sabbere ***************/
01966     case "sabber":
01967     HELPCHECK("sabber");
01968     sfoo=ghost() ? "schleim" : "sabber";
01969     ParseRest(str);
01970     if (str && !adverb && !who)
01971       Return("Sabber wie oder wen an?\n");
01972     out_sel="Du "+sfoo+"st@@ wen@@@@adverb@@ "
01973       +(who ? "an." : "auf den Boden.");
01974     if (who) out_vic="@@gname@@ "+sfoo+"t Dich@@adverb@@ an.";
01975     out_oth="@@gname@@ "+sfoo+"t@@ wen@@@@adverb@@ "
01976       +(who ? "an." : "auf den Boden.");
01977     return FeelIt();
01978 
01979     /**************** Schaemen ***************/
01980     case "schaem":
01981     HELPCHECK("schaem");
01982     ParseRest(str);
01983     if (str && !adverb && lower_case(str)!="dich")
01984       Return("Schaeme Dich wie?\n");
01985     out_sel="Du schaemst Dich@@adverb@@.";
01986     out_oth="@@gname@@ schaemt sich@@adverb@@.";
01987     return FeelIt();
01988 
01989 #ifdef SCHAU_AN
01990     /**************** Schau an ***************/
01991     case "schau":
01992     HELPCHECK("schau");
01993     if (!str || old_explode(str, " ")[sizeof(old_explode(str, " "))]!="an")
01994       return 0;
01995     ParseRest(str, "an");
01996     if (!who)
01997       Return("Schau wen an?\n");
01998     out_sel="Du schaust @@wen@@@@adverb@@ an.";
01999     out_vic="@@gname@@ schaut Dich@@adverb@@ an.";
02000     out_oth="@@gname@@ schaut @@wen@@@@adverb@@ an.";
02001     return FeelIt();
02002 #endif
02003 
02004     /**************** Schluchzen ***************/
02005     case "schluchz":
02006     HELPCHECK("schluchz");
02007     ParseRest(str);
02008     if (str && !adverb)
02009       Return("Schluchze wie?\n");
02010     out_sel="Du schluchzt"+(adverb ? "@@adverb@@." : " herzzerreissend.");
02011     out_oth="@@gname@@ schluchzt"
02012       +(adverb ? "@@adverb@@." : " herzzerreissend.");
02013     return FeelIt();
02014 
02015     /**************** Schmollen ***************/
02016     case "schmoll":
02017     HELPCHECK("schmoll");
02018     GHOSTCHECK("Du schwebst beleidigt in die Ecke.\n",
02019       gname()+" schwebt beleidigt in die Ecke und schmollt.\n", 0);
02020     ParseRest(str);
02021     if (str && !adverb)
02022       Return("Schmolle wie?\n");
02023     out_sel="Du schmollst@@adverb@@.";
02024     out_oth="@@name@@ geht in die Ecke und schmollt@@adverb@@.";
02025     return FeelIt();
02026 
02027     /**************** Schmunzeln ***************/
02028     case "schmunzel":
02029     case "schmunzl":
02030     HELPCHECK("schmunzel");
02031     ParseRest(str);
02032     if (str && !adverb)
02033       Return("Schmunzle wie?\n");
02034     out_sel="Du schmunzelst@@adverb@@.";
02035     out_oth="@@gname@@ schmunzelt@@adverb@@.";
02036     return FeelIt();
02037 
02038     /**************** Schnalzen ***************/
02039     case "schnalz":
02040     HELPCHECK("schnalz");
02041     ParseRest(str, ({"zunge","mit zunge", "mit der zunge"}));
02042     out_sel="Du schnalzt@@adverb@@ mit der Zunge.";
02043     out_oth="@@gname@@ schnalzt@@adverb@@ mit der Zunge.";
02044     return FeelIt();
02045 
02046     /**************** Schnauben ***************/
02047     case "schnaub":
02048     HELPCHECK("schnaub");
02049     ParseRest(str);
02050     if (str && !adverb)
02051       Return("Schnaube wie?\n");
02052     out_sel="Du schnaubst"+(adverb ? "@@adverb@@." : " entruestet.");
02053     out_oth="@@gname@@ schnaubt"+(adverb ? "@@adverb@@." : " entruestet.");
02054     return FeelIt();
02055 
02056     /**************** Schnaufen ***************/
02057     case "schnauf":
02058     HELPCHECK("schnauf");
02059     ParseRest(str);
02060     if (str && !adverb)
02061       Return("Schnaufe wie?\n");
02062     out_sel="Du schnaufst"+(adverb ? "@@adverb@@." : " vor Anstrengung.");
02063     out_oth="@@gname@@ schnauft"+(adverb ? "@@adverb@@." : " vor Anstrengung.");
02064     return FeelIt();
02065 
02066     /**************** Schnippen ***************/
02067     case "schnipp":
02068     case "schnipps":
02069     HELPCHECK("schnipp");
02070     GHOSTCHECK("Du schaffst es nicht, weil die Finger durcheinander durch "
02071         +"gehen.\n",
02072       gname()+" versagt beim Schnippen - die Finger\ngehen durcheinander "
02073         +"durch.\n", 0);
02074     ParseRest(str);
02075     if (str && !adverb)
02076       Return("Schnippe wie?\n");
02077     out_sel="Du schnippst@@adverb@@ mit deinen Fingern.";
02078     out_oth="@@name@@ schnippt@@adverb@@ mit den Fingern.";
02079     return FeelIt();
02080 
02081     /**************** Schnarchen ***************/
02082     case "schnarch":
02083     HELPCHECK("schnarch");
02084     if (ghost())
02085       Return("Ich glaube, da fehlen Dir irgendwie die physischen "
02086         +"Voraussetzungen dazu.\n");
02087     ParseRest(str);
02088     if (str && !adverb)
02089       Return("Schnarche wie?\n");
02090     out_sel=(str ? "Zzzzzzzzzzz..." : "Du schnarchst@@adverb@@.");
02091     out_oth="@@name@@ schnarcht "+(str ? "@@adverb@@." : "laut.");
02092     return FeelIt();
02093 
02094     /**************** Schniefen ***************/
02095     case "snief":
02096     case "schnief":
02097     HELPCHECK("schnief");
02098     GHOSTCHECK("Du schniefst ganz leise.\n",
02099       gname()+" schnieft ganz leise.\n", 0);
02100     ParseRest(str);
02101     if (str && !adverb)
02102       Return("Schniefe wie?\n");
02103     out_sel="Du schniefst@@adverb@@.";
02104     out_oth="@@name@@ schnieft@@adverb@@.";
02105     return FeelIt();
02106 
02107     /**************** Schnurren ***************/
02108     case "schnurr":
02109     HELPCHECK("schnurr");
02110     ParseRest(str);
02111     if (str && !adverb)
02112       Return("Wie willst Du schnurren?\n");
02113     out_sel="MMMMIIIIIAAAAAAUUUUUUUU! Du schnurrst"
02114       +(adverb ? "@@adverb@@." : " zufrieden.");
02115     out_oth="@@gname@@ schnurrt"+(adverb ? "@@adverb@@." : " zufrieden.");
02116     return FeelIt();
02117 
02118     /**************** Schreien ***************/
02119     case "schrei":
02120     HELPCHECK("schrei");
02121     GHOSTCHECK("AAAAIIIIIIIIIIIEEEEEEEEEEEEEEEEEEEEEEEEEE! Ja, nur Geister "
02122         +"koennen so schreien!\n",
02123       gname()+" schreit - das Blut gefriert fast in deinen Ader!\n", 0);
02124     if (!str)  {
02125       out_sel="AUUUAAAHHHHHH!!!!";
02126       out_oth="@@name@@ schreit laut!";
02127     }
02128     else  {
02129       ParseRest(str);
02130       if (!who && !adverb)
02131         Return("Schreien - wie denn? Oder wen denn anschreien?\n");
02132       out_sel="Du schreist@@ wen@@@@adverb@@"+(who ? " an" : "")+".";
02133       if (who) out_vic="@@name@@ schreit Dich@@adverb@@ an.";
02134       out_oth="@@name@@ schreit@@ wen@@@@adverb@@"+(who? " an" : "")+".";
02135     }
02136     return FeelIt();
02137 
02138     /**************** Schuetteln ***************/
02139     case "schuettel":
02140     case "schuettl":
02141     HELPCHECK("schuettel");
02142     ParseRest(str);
02143     if (for_all)  {
02144       out_sel="Du schuettelst @@alle@@@@adverb@@ die Haende.";
02145       out_vic="@@gname@@ schuettelt @@alle@@@@adverb@@ die Haende.";
02146       return MixedOut(WEM);
02147     }
02148     if (str && !who && !adverb)
02149       Return("Schuettle wie? Schuettle wem die Hand?\n");
02150     if(!who) {
02151       out_sel="Du schuettelst Dich@@adverb@@.";
02152       out_oth="@@gname@@ schuettelt sich@@adverb@@.";
02153     }
02154     else  {
02155       if (CheckLife(0,NOT_DEAD,
02156         "", "Noe, das mach ich nur mit Lebewesen."))
02157           return 1;
02158       if (who == this_player())  {
02159         out_sel="Du hebst"+(adverb ? "@@adverb@@" : " triumphierend")
02160           +" Deine Haende ueber den Kopf und schuettelst sie.";
02161         out_oth="@@gname@@ hebt"+(adverb ? "@@adverb@@" : " triumphierend")
02162           +" die Haende ueber den Kopf\nund schuettelt sie.";
02163       }
02164       else  {
02165         out_sel="Du schuettelst@@ wem@@@@adverb@@ die Haende.";
02166         if (ghost()) out_sel+="\nNaja, Du versuchst es wenigstens - "
02167           +"immer diese durchlaessigen Haende...";
02168         out_vic="@@gname@@ schuettelt Dir@@adverb@@ die Haende.";
02169         if (ghost()) out_vic+="\nNaja, Du versuchst es wenigstens - "
02170           +"immer diese durchlaessigen Haende...";
02171         out_oth="@@gname@@ schuettelt@@ wem@@@@adverb@@ die Haende.";
02172         if (ghost()) out_oth+="\nNaja, Du versuchst es wenigstens - "
02173           +"immer diese durchlaessigen Haende...";
02174       }
02175     }
02176     return FeelIt();
02177 
02178     /**************** Schweigen ***************/
02179     case "schweig":
02180     HELPCHECK("schweig");
02181     ParseRest(str);
02182     if (str && !adverb)
02183       Return("Schweige wie?\n");
02184     out_sel="Du schweigst@@adverb@@.";
02185     out_oth="@@gname@@ schweigt@@adverb@@.";
02186     return FeelIt();
02187 
02188     /**************** Seufzen ***************/
02189     case "seufz":
02190     HELPCHECK("seufz");
02191     GHOSTCHECK("Du seufzt geisterhaft.\n",
02192       gname()+" seufzt geisterhaft. Naja, wie denn sonst?\n", 0);
02193     ParseRest(str);
02194     if (!adverb && str)
02195       Return("Seufze wie?\n");
02196     out_sel="Du seufzst@@adverb@@.";
02197     out_oth="@@name@@ seufzt@@adverb@@.";
02198     return FeelIt();
02199 
02200     /**************** Singen ***************/
02201     case "sing":
02202     HELPCHECK("sing");
02203     if (!str) {
02204       out_sel="Oh sole mio!";
02205       out_oth="@@gname@@ singt irgendwas italienisches.";
02206     }
02207     else  {
02208       ParseRest(str);
02209       out_sel="Du singst@@adverb@@"+(adverb ? "." : " '"+capitalize(str)+"'.");
02210       out_oth="@@gname@@ singt@@adverb@@"+(adverb ? "." : " '"
02211         +capitalize(str)+"'.");
02212     }
02213     return FeelIt();
02214 
02215     /**************** Sniffen ***************/
02216     case "sniff":
02217     HELPCHECK("sniff");
02218     ParseRest(str);
02219     if (str && !adverb && !who)
02220       Return("Sniffe wie?\n");
02221     out_sel="Du sniffst"+(who ? " @@wen@@" : "")
02222       +(adverb ? "@@adverb@@" : " traurig")+(who ? " an." : ".");
02223     if (who) out_vic="@@gname@@ snifft Dich"
02224       +(adverb ? "@@adverb@@" : " traurig")+" an.";
02225     out_oth="@@gname@@ snifft"+(who ? " @@wen@@" : "")
02226       +(adverb ? "@@adverb@@" : " traurig")+(who ? " an." : ".");
02227     return FeelIt();
02228 
02229     /**************** Spucken ***************/
02230     case "spuck":
02231     HELPCHECK("spuck");
02232     GHOSTCHECK("Du bringst nicht genug Spucke zusammen.\n",
02233       gname()+" stellt gerade fest, dass man ohne Spucke nicht\n"
02234         +"spucken kann.\n", 0);
02235     ParseRest(str);
02236     if (str && !who && !adverb)
02237       Return("Spucke wen wie an?\n");
02238     if (who && CheckLife(NOT_SELF,0,
02239       "Hast Du Dich so schlecht benommen? Lass es lieber bleiben."))
02240         return 1;
02241     out_sel="Du spuckst@@ wen@@@@adverb@@ "+(who ? "an." : "auf den Boden.");
02242     if (who) out_vic="@@name@@ spuckt Dich@@adverb@@ an.";
02243     out_oth="@@name@@ spuckt@@ wen@@@@adverb@@ "
02244       +(who ? "an." : "auf den Boden.");
02245     return FeelIt();
02246 
02247     /**************** Stampfen ***************/
02248     case "stampf":
02249     HELPCHECK("stampf");
02250     ParseRest(str, "auf");
02251     out_sel="Du stampfst@@adverb@@ mit dem Fuss auf.";
02252     out_oth="@@gname@@ stampft@@adverb@@ mit dem Fuss auf.";
02253     return FeelIt();
02254 
02255     /**************** Starren ***************/
02256     case "starr":
02257     HELPCHECK("starr");
02258     ParseRest(str);
02259     if (str && !who && !adverb)
02260       Return("Starre wie bzw. wen an?\n");
02261     if (who && CheckLife(NOT_SELF,0,
02262       "Wie willst Du in Deine eigenen Augen starren? "
02263         +"(Spiegel gelten nicht...)"))
02264         return 1;
02265     out_sel="Du starrst"+(!str ? " ins Leere." : (who ? "@@ wen@@" : "")
02266       +(adverb ? "@@adverb@@" : " vertraeumt")+(who ? " an." : "."));
02267     if (who) out_vic="@@gname@@ starrt"+(adverb ? "@@adverb@@" : " tief")
02268       +" in Deine Augen.";
02269     out_oth="@@gname@@ starrt"+(!str ? " ins Leere." : (who ? "@@ wen@@" : "")
02270       +(adverb ? "@@adverb@@" : " vertraeumt")+(who ? " an." : "."));
02271     return FeelIt();
02272 
02273     /**************** Staunen ***************/
02274     case "staun":
02275     HELPCHECK("staun");
02276     if (!str)  {
02277       out_sel="Du bist erstaunt.";
02278       out_oth="@@gname@@ ist erstaunt.";
02279     }
02280     else  {
02281       ParseRest(str, "ueber");
02282       if (!who && !adverb)
02283         Return("Bla bla. Wenn Du nach staune noch was tippst, sollte "
02284           +"das ein\nLebewesen sein.\n");
02285       if (who == this_player())  {
02286         out_sel="Du staunst@@adverb@@ ueber Dich selber.";
02287         out_oth="@@gname@@ staunt@@adverb@@ ueber sich selber.";
02288       }
02289       else  {
02290         out_sel="Du staunst@@adverb@@"+(who ? " ueber @@wen@@." : ".");
02291         if (who) out_vic="@@gname@@ staunt@@adverb@@ ueber Dich.";
02292         out_oth="@@gname@@ staunt@@adverb@@"+(who ? " ueber @@wen@@." : ".");
02293       }
02294     }
02295     return FeelIt();
02296 
02297     /**************** Stieren ***************/
02298     case "stier":
02299     HELPCHECK("stier");
02300     GHOSTCHECK("Du stierst mit hohlem Blick in die Gegend.\n",
02301       gname()+" stiert mit hohlem Blick in die Gegend.\n", 0);
02302     ParseRest(str);
02303     if (str && !who && !adverb)
02304       Return("Stiere wie oder wen an?\n");
02305     if (who && CheckLife(NOT_SELF,NOT_DEAD,
02306       "Du kannst Dich nicht selber anstieren.",
02307       "Bitte nur Lebewesen anstieren."))
02308         return 1;
02309     out_sel="Du stierst@@ wen@@@@adverb@@"
02310       +(who ? " an." : " in der Gegend herum.");
02311     if (who) out_vic="@@gname@@ stiert Dich@@adverb@@ an.";
02312     out_oth="@@gname@@ stiert@@ wen@@@@adverb@@"
02313       +(who ? " an." : " in der Gegend herum.");
02314     return FeelIt();
02315 
02316     /**************** Stimme zu ***************/
02317     case "stimm":
02318     HELPCHECK("stimm");
02319     ParseRest(str, "zu");
02320     if (str && !who && !adverb)
02321       Return("Stimme wem zu?\n");
02322     out_sel="Du stimmst@@ wem@@@@adverb@@ zu.";
02323     if (who) out_vic="@@gname@@ stimmt Dir@@adverb@@ zu.";
02324     out_oth="@@gname@@ stimmt@@ wem@@@@adverb@@ zu.";
02325     return FeelIt();
02326 
02327     /**************** Stoehnen ***************/
02328     case "stoehn":
02329     HELPCHECK("stoehn");
02330     GHOSTCHECK("Du stoehnst schauderlich.\n",
02331       gname()+" stoehnt schauderlich. Zum Glueck\nhast Du ziemlich "
02332         +"gute Nerven.\n", 0);
02333     ParseRest(str);
02334     if (!adverb && str)
02335       Return("Wie willst Du stoehnen?\n");
02336     out_sel="Du stoehnst@@adverb@@.";
02337     out_oth="@@name@@ stoehnt@@adverb@@.";
02338     return FeelIt();
02339 
02340     /**************** Stossen ***************/
02341     case "stoss":
02342     HELPCHECK("stoss");
02343     ParseRest(str);
02344     if (!who)
02345       Return("Stosse wen?\n");
02346     if (CheckLife(NOT_SELF,NOT_DEAD,
02347       "Was soll der Unsinn? Lass das!",
02348       "Das gibt nur bei Lebewesen Sinn."))
02349         return 1;
02350     GHOSTCHECK("Dein Ellenbogen versinkt in "+who->name(WEM)+".\n",
02351       gname()+" will "+who->name(WEM)+" in die Rippen stossen, aber "
02352         +QPP(MALE,WER,PLURAL)+"\nEllenbogen verteilen keinen Stoss, "
02353         +"sondern versinken.\n",
02354       gname()+" will Dich in die Rippen stossen, aber "+QPP(MALE,WER,PLURAL)
02355         +" Ellenbogen versinken.\n");
02356     out_sel="Du stoesst@@ wen@@@@adverb@@ in die Rippen.";
02357     out_vic="@@name@@ stoesst Dir@@adverb@@ in die Rippen.";
02358     out_oth="@@name@@ stoesst@@ wen@@@@adverb@@ in die Rippen.";
02359     return FeelIt();
02360 
02361     /**************** Streicheln ***************/
02362     case "streichel":
02363     case "streichl":
02364     HELPCHECK("streichel");
02365     ParseRest(str);
02366     if (!who)
02367       Return("Streichle wen?\n");
02368     if (for_all)  {
02369       out_sel="Du streichelst @@alle@@@@adverb@@.";
02370       out_vic="@@gname@@ streichelt @@alle@@@@adverb@@.";
02371       return MixedOut(WEN);
02372     }
02373     if (CheckLife(NOT_SELF,NOT_DEAD,
02374       "Lass Dich von anderen streicheln.",
02375       "Ich streichle nur Lebewesen."))
02376         return 1;
02377     GHOSTCHECK("Du willst "+who->name(WEN,2)+" streicheln, aber Deine "
02378       +"Haende koennen\nnichts beruehren.\n",
02379     gname()+" will "+who->name(WEN,2)+" streicheln, aber diese\n"
02380       +"Geisterhaende koennen halt nix beruehren...\n",
02381     gname()+" will Dich streicheln, scheitert aber wie so oft an\n"
02382       +"diesen dummen durchlaessigen Geisterhaenden.\n");
02383     out_sel="Du streichelst @@wen@@@@adverb@@.";
02384     out_vic="@@name@@ streichelt Dich@@adverb@@.";
02385     out_oth="@@name@@ streichelt @@wen@@@@adverb@@.";
02386     return FeelIt();
02387 
02388     /**************** Stupsen ***************/
02389     case "stups":
02390     HELPCHECK("stups");
02391     if (ghost())
02392       Return("Das geht nicht ohne Ellenbogen,..\n");
02393     ParseRest(str);
02394     if (!who)
02395       Return("Stupse wen an?\n");
02396     out_sel="Du stupst @@wen@@@@adverb@@ an.";
02397     out_vic="@@name@@ stupst Dich@@adverb@@ an.";
02398     out_oth="@@name@@ stupst @@wen@@@@adverb@@ an.";
02399     return FeelIt();
02400 
02401     /**************** Stutzen ***************/
02402     case "stutz":
02403     HELPCHECK("stutz");
02404     ParseRest(str);
02405     if (str && !adverb)
02406       Return("Stutze wie?\n");
02407     out_sel="Du stutzt@@adverb@@.";
02408     out_oth="@@gname@@ stutzt@@adverb@@.";
02409     return FeelIt();
02410 
02411     /**************** Taetscheln ***************/
02412     case "taetschel":
02413     case "taetschl":
02414     HELPCHECK("taetschel");
02415     ParseRest(str);
02416     if (!who)
02417       Return("Taetschle wen?\n");
02418     if (CheckLife(NOT_SELF,NOT_DEAD,
02419       "Das sieht zu doof aus, das mache ich nicht.",
02420       "Ich taetschle nur Lebewesen."))
02421         return 1;
02422      GHOSTCHECK("Du willst "+who->name(WEN)+" taetscheln - aber Deine "
02423         +"Haende gehen\nglatt durch den Kopf durch.\n",
02424       gname()+" will "+who->name(WEN)+" den Kopf taetscheln, aber "
02425         +"die Geister-\nhaende gehen glatt durch den Kopf durch.\n",
02426       gname()+" will Deinen Kopf taetscheln, aber diese Geisterhaende "
02427         +"gehen\nglatt durch Deinen Kopf durch - Du hast ein seltsames "
02428         +"Gefuehl dabei.\n");
02429     out_sel="Du taetschelst @@wem@@@@adverb@@ den Kopf.";
02430     out_vic="@@name@@ taetschelt Dir@@adverb@@ den Kopf.";
02431     out_oth="@@name@@ taetschelt @@wem@@@@adverb@@ den Kopf.";
02432     return FeelIt();
02433 
02434     /**************** Tanzen ***************/
02435     case "tanz":
02436     HELPCHECK("tanz");
02437     GHOSTCHECK("Du tanzt den klassischen GeisterTanz (tm).\n",
02438       gname()+" tanzt den klassischen GeisterTanz (tm).\n", 0);
02439     if (!str) {
02440       out_sel="Kommst Du Dir nicht irgendwie bloed vor? Du tanzt "
02441         +"den Ententanz.";
02442       out_oth="@@name@@ tanzt den Ententanz.";
02443     }
02444     else  {
02445       taenze=({"Walzer","Polka","Rumba","Tango","Cha cha cha","Foxtrott",
02446         "Mambo","Salsa","Slowfox","Breakdance","Pogo","Merengue",
02447         "Rock'n'Roll","Ballett","Regentanz","Hexentanz"});
02448       ParseRest(str,"mit");
02449       if (!who)
02450         Return("Mit wem willst Du tanzen?\n");
02451       if (who && CheckLife(NOT_SELF,NOT_DEAD,
02452         "Mit Dir selber kannst Du nicht tanzen.",
02453         "Keine Reaktion - will wahrscheinlich nicht tanzen."))
02454           return 1;
02455       ifoo=random(sizeof(taenze));
02456       out_sel="Du tanzt@@adverb@@ mit @@wem@@ eine Runde "+taenze[ifoo]+".";
02457       out_vic="@@name@@ reisst Dich an sich und tanzt@@adverb@@ eine Runde "
02458         +taenze[ifoo]+" mit Dir.";
02459       out_oth="@@name@@ schnappt sich @@wen@@ und die beiden tanzen"
02460         +"@@adverb@@ eine Runde "+taenze[ifoo]+".";
02461     }
02462     return FeelIt();
02463 
02464     /**************** Traeumen ***************/
02465     case "traeum":
02466     HELPCHECK("traeum");
02467     if (!str)
02468       Return("Traeume wovon oder von wem?\n");
02469     ParseRest(str);
02470     out_sel="Du traeumst"+(who ? "@@adverb@@ von @@wem@@."
02471       : (adverb ? "@@adverb@@." : " "+str+"."));
02472     if (who) out_vic="@@gname@@ traeumt@@adverb@@ von Dir.";
02473     out_oth="@@gname@@ traeumt"+(who ? "@@adverb@@ von @@wem@@."
02474       : (adverb ? "@@adverb@@." : " "+str+"."));
02475     return FeelIt();
02476 
02477     /**************** Treten (tritt) ***************/
02478     case "tritt":
02479     case "tret":
02480     HELPCHECK("tritt");
02481     if (!str)  {
02482       GHOSTCHECK("Dein Fuss faehrt durch die beruehmte langvergessene "
02483           +"unsichtbare Schildkroete\nhindurch.\n",
02484         gname()+" will die beruehmte langvergessene unsichtbare\n"
02485           +"Schildkroete treten, aber "+QPP(MALE,WER)
02486           +" Fuss faehrt durch sie hindurch.\n", 0);
02487       out_sel="Du trittst die beruehmte langvergessene unsichtbare "
02488         +"Schildkroete.";
02489       out_oth="@@gname@@ tritt die beruehmte langvergessene unsichtbare "
02490         +"Schildkroete.";
02491     }
02492     else  {
02493       ParseRest(str);
02494       if (for_all)  {
02495         out_sel="Du trittst @@alle@@@@adverb@@. Solltest Du nicht langsam "
02496           +"an Flucht denken?";
02497         out_vic="@@name@@ tritt @@alle@@@@adverb@@. Traut sich ganz "
02498           +"schoen was!";
02499         return MixedOut(WEN);
02500       }
02501       if (!who && !adverb)
02502         Return("Wenn Du schon was nach tritt tippst, dann sag mir, wen "
02503           +"oder wie ich das soll.\n");
02504       if (who && CheckLife(NOT_SELF,NOT_DEAD,
02505         "Du schaffst es nicht, Dir selber in den Hintern zu treten.",
02506         "Tote Sachen tritt man nicht auch noch!"))
02507           return 1;
02508       if (who)  {
02509         out_sel="Du trittst@@ wen@@@@adverb@@.";
02510         if (who) out_vic="@@gname@@ tritt Dich@@adverb@@.";
02511         out_oth="@@gname@@ tritt@@ wen@@@@adverb@@.";
02512       }
02513       else  {
02514         out_sel="Du trittst die beruehmte langvergessene unsichtbare "
02515           +"Schildkroete@@adverb@@.";
02516         out_oth="@@gname@@ tritt die beruehmte langvergessene unsichtbare "
02517           +"Schildkroete\n@@adverb@@.";
02518       }
02519     }
02520     return FeelIt();
02521 
02522     /**************** Troesten ***************/
02523     case "troest":
02524     HELPCHECK("troest");
02525     ParseRest(str);
02526     if (!who)
02527       Return("Wen willst Du troesten?\n");
02528     if (who && CheckLife(NOT_SELF,NOT_DEAD,
02529       "Trost musst Du bei jemand anders suchen.",
02530       "Das Teil musst Du nicht troesten, das fuehlt nix."))
02531         return 1;
02532     out_sel="Du troestest@@ wen@@@@adverb@@.";
02533     out_vic="@@gname@@ troestet Dich@@adverb@@.";
02534     out_oth="@@gname@@ troestet@@ wen@@@@adverb@@.";
02535     return FeelIt();
02536 
02537     /**************** Umarmen ***************/
02538     case "umarm":
02539     HELPCHECK("umarm");
02540     ParseRest(str);
02541     if (!who)
02542       Return("Wen willst Du umarmen?\n");
02543     if (who && CheckLife(0,NOT_DEAD,0,"Bitte umarme nur Lebewesen."))
02544       return 1;
02545     if (ghost() && CheckLife(NOT_SELF,0,
02546       "Du kannst Dich als Geist nicht selber waermen."))
02547         return 1;
02548     str1=who->QueryProp(P_NAME);
02549     if(pointerp(str1))str1=(string)str1[0]; // Rumata
02550     str2=who->QueryPronoun(WEN);
02551     GHOSTCHECK("Du willst "+str1+" umarmen, aber Deine Arme gehen durch "
02552         +str2+" durch.\n",
02553       gname()+" will "+str1+" umarmen, aber "+QPP(MALE,WER,PLURAL)
02554         +" Arme gehen\ndurch "+str2+" hindurch.\n",
02555       gname()+" will Dich umarmen, aber "+QPP(MALE,WER,PLURAL)
02556         +" Arme gehen durch Dich hindurch.\n");
02557     if (for_all)  {
02558       out_sel="Du umarmst @@alle@@@@adverb@@.";
02559       out_vic="@@name@@ umarmt @@alle@@@@adverb@@.";
02560       return MixedOut(WEN);
02561     }
02562     if (who==this_player())  {
02563       out_sel="Du legst Deine Arme um Dich und waermst Dich "
02564         +"ein bisschen selber.";
02565       out_oth="@@name@@ legt "+QPP(MALE,WER,PLURAL)
02566         +" Arme um sich und waermt sich ein bisschen selber.";
02567     }
02568     else  {
02569       out_sel="Du umarmst@@ wen@@@@adverb@@.";
02570       out_vic="@@name@@ umarmt Dich@@adverb@@.";
02571       out_oth="@@name@@ umarmt@@ wen@@@@adverb@@.";
02572     }
02573     return FeelIt();
02574 
02575     /**************** Verfluchen ***************/
02576     case "verfluch":
02577     HELPCHECK("verfluch");
02578     if (!str)
02579       Return("Wen oder was willst Du denn verfluchen?\n");
02580     ParseRest(str);
02581     if (!who)  {
02582       out_sel="Du verfluchst "+str+".";
02583       out_oth="@@gname@@ verflucht "+str+".";
02584     }
02585     else  {
02586       if (who==this_player())
02587         Return("Sich selber verflucht man besser nicht...\n");
02588       if (!adverb)  {
02589         flag=sscanf(str, "%s %s", str1,str2);
02590         out_sel="Du verfluchst@@ wen@@"+(flag==2 ? " "+str2 : "")+".";
02591         out_vic="@@gname@@ verflucht Dich"+(flag==2?" "+str2 : "")+".";
02592         out_oth="@@gname@@ verflucht@@ wen@@"+(flag==2 ? " "+str2 : "")+".";
02593       }
02594       else  {
02595         out_sel="Du verfluchst@@ wen@@@@adverb@@.";
02596         out_vic="@@gname@@ verflucht Dich@@adverb@@.";
02597         out_oth="@@gname@@ verflucht@@ wen@@@@adverb@@.";
02598       }
02599     }
02600     return FeelIt();
02601 
02602     /**************** Verneigen / Verbeugen ***************/
02603     case "verneig":
02604     case "verbeug":
02605     HELPCHECK("verneig");
02606     GHOSTCHECK("Du verneigst Dich ein bisschen heftig - Dein Kopf taucht "
02607         +"kurz in den Boden.\n",
02608       gname()+" verneigt sich. Ein bisschen heftig - "+QPP(MALE,WER)
02609         +" Kopf\ntaucht kurz in den Boden ein.\n", 0);
02610     if ((!str) || (str == "dich")) {
02611       out_sel="Du verneigst dich vor den Anwesenden.";
02612       out_oth="@@name@@ verneigt sich anmutig.";
02613     }
02614     else  {
02615       ParseRest(str);
02616       if (for_all)  {
02617         out_sel="Du verneigst Dich@@adverb@@ vor @@alle@@.";
02618         out_vic="@@name@@ verneigt sich@@adverb@@ vor @@alle@@.";
02619         return MixedOut(WEM);
02620       }
02621       if (!who && !adverb)
02622         Return("Verneige dich irgendwie oder vor jemandem.\n");
02623       if (who && CheckLife(NOT_SELF,NOT_DEAD,
02624         "Wie willst Du das denn schaffen?",
02625         "Vor Sachen wird hier nicht verneigt, klar?\n"))
02626           return 1;
02627       out_sel="Du verneigst dich@@adverb@@"+(who ? " vor" : "")+"@@ wem@@.";
02628       if (who ) out_vic="@@name@@ verneigt sich@@adverb@@ vor Dir.";
02629       out_oth="@@name@@ verneigt sich@@adverb@@"+(who ? " vor" : "")
02630         +"@@ wem@@.";
02631     }
02632     return FeelIt();
02633 
02634     /**************** Verneinen ***************/
02635     case "nein":
02636     case "noe":
02637     HELPCHECK("nein");
02638     GHOSTCHECK("Du schuettelst Deinen Kopf so heftig, dass er kurz "
02639         +"davonschwebt.\n",
02640       gname()+" schuettelt heftig den Kopf.\nSo heftig, dass dieser "
02641         +"kurz davonschwebt und wieder eingefangen werden muss.\n", 0);
02642     ParseRest(str);
02643     if (str && !adverb)
02644       Return("Schuettle wie den Kopf?\n");
02645     out_sel="Du schuettelst@@adverb@@ den Kopf.";
02646     out_oth="@@name@@ schuettelt@@adverb@@ den Kopf.";
02647     return FeelIt();
02648 
02649     /**************** Wackeln ***************/
02650     case "wackel":
02651     case "wackl":
02652     HELPCHECK("wackel");
02653     if (ghost())
02654       Return("Da gibt es nichts mehr, womit Du wackeln kannst.\n");
02655     if (str)
02656       if (strstr(str, "mit ")==0)
02657         sscanf(str, "mit %s", sfoo);
02658       else if (strstr(str,"mit ")>0)  {
02659         sscanf(str, "%s mit %s", sfoo, sfoo);
02660         flag=1;
02661       }
02662     if (sfoo=="") sfoo=0;
02663     ParseRest(str, (sfoo ? (flag ? " mit " : "mit ")+sfoo : 0));
02664     if (str && !adverb && !sfoo)
02665       Return("Wackle wie oder womit?\n");
02666     out_sel="Du wackelst@@adverb@@ mit "+(sfoo ? sfoo+"." : "dem Hintern.");
02667     out_oth="@@name@@ wackelt@@adverb@@ mit "
02668       +(sfoo ? sfoo+"." : QPP(MALE,WEM)+" Hintern.");
02669     return FeelIt();
02670 
02671     /**************** Waelzen ***************/
02672     case "waelz":
02673     HELPCHECK("waelz");
02674     ParseRest(str);
02675     if (str && !adverb)
02676       Return("Waelze Dich wie auf dem Boden?\n");
02677     out_sel="Du waelzt Dich"+(adverb ? "@@adverb@@" : " vor Lachen")
02678       +" auf dem Boden.";
02679     out_oth="@@gname@@ waelzt sich"+(adverb ? "@@adverb@@" : " vor Lachen")
02680       +(ghost() ? " im" : " auf dem")+" Boden.";
02681     return FeelIt();
02682 
02683     /**************** Warten ***************/
02684     case "wart":
02685     HELPCHECK("wart");
02686     ParseRest(str);
02687     if (!str)  {
02688       out_sel="Du tippst mit dem Fuss auf den Boden.";
02689       out_oth="@@gname@@ tippt mit dem Fuss auf den Boden.";
02690     } else if (!who && adverb)  {
02691       out_sel="Du wartest@@adverb@@.";
02692       out_oth="@@gname@@ wartet@@adverb@@.";
02693     } else  {
02694       out_sel="Du wartest@@adverb@@ auf "+(who ? "@@wen@@." : str+".");
02695       if (who) out_vic="@@gname@@ wartet@@adverb@@ auf Dich.";
02696       out_oth="@@gname@@ wartet@@adverb@@ auf "+(who ? "@@wen@@." : str+".");
02697     }
02698     return FeelIt();
02699 
02700 #ifdef WECKE
02701     /**************** Wecken ***************/
02702     case "weck":
02703     HELPCHECK("weck");
02704     if (ParseRemote(str))
02705       return 1;
02706 //    ParseRest(str);
02707     if (!who)
02708       Return("Wen willst Du wecken?\n");
02709     if (sscanf(str, "%s %s", sfoo, sfoo)==2)
02710       flag=1;
02711     out_sel="Dein Wecker klingelt bei @@wem@@@@adverb@@"
02712       +(adverb ? "." : (flag ? ": "+sfoo : "."));
02713     out_vic=" "+name(WESSEN)+" Wecker klingelt bei Dir@@adverb@@"
02714       +(adverb ? "." : (flag ? ": "+sfoo : "."));
02715     out_oth="@@gname@@ wirft "+QPP(MALE, WEN)
02716       +" Wecker@@adverb@@ nach @@wem@@.";
02717           if (!who->QueryProp(P_VISUALBELL))
02718          out_vic[0]=7; // chr(7)==BEL
02719       else out_vic=out_vic[1..];
02720     return FeelIt();
02721 #endif
02722 
02723     /**************** Weinen ***************/
02724     case "wein":
02725     HELPCHECK("wein");
02726     GHOSTCHECK("Es reicht leider nur fuer ein paar winzige Nebelwoelkchen, "
02727         +"nicht fuer Traenen.\n",
02728       gname()+" verzieht das Gesicht und ein paar winzige Nebel-\n"
02729         +"woelkchen entfernen sich von seinen \"Augen\".\n", 0);
02730     if (!str)  {
02731       out_sel="Waaaaah! Du weinst bitterlich.";
02732       out_oth="@@name@@ bricht in Traenen aus und weint bitterlich.";
02733     }
02734     else  {
02735       ParseRest(str);
02736       if (!who && !adverb)
02737         Return("Weine Dich irgendwie bei irgendwem aus, aber nicht so.\n");
02738       if (who && CheckLife(NOT_SELF,NOT_DEAD,
02739         "Bei sich selber kann man sich so schlecht ausweinen.",
02740         "Bei wem willst Du Dich ausweinen???"))
02741           return 1;
02742       if (who)  {
02743         out_sel="Du weinst Dich@@adverb@@ bei@@ wem@@ aus.";
02744         out_vic="@@name@@ weint sich@@adverb@@ bei Dir aus.";
02745         out_oth="@@name@@ weint sich@@adverb@@ bei@@ wem@@ aus.";
02746       }
02747       else  {
02748         out_sel="Du brichst in Traenen aus und weinst@@adverb@@.";
02749         out_oth="@@name@@ bricht in Traenen aus und weint@@adverb@@.";
02750       }
02751     }
02752     return FeelIt();
02753 
02754     /**************** Winken ***************/
02755     case "wink":
02756     HELPCHECK("wink");
02757     ParseRest(str);
02758     if (for_all)  {
02759       out_sel="Du winkst @@alle@@@@adverb@@ zu.";
02760       out_vic="@@name@@ winkt @@alle@@@@adverb@@ zu.";
02761       return MixedOut(WEM);
02762     }
02763     if (!who && !adverb && str)
02764       Return("Vielleicht solltest Du auch sagen, wem oder wie Du "
02765         +"(zu)winken willst.\n");
02766     if (who && CheckLife(NOT_SELF, NOT_DEAD,
02767       "Wink Dir nicht selber zu.",
02768       "Du musst schon einem Lebewesen zuwinken."))
02769         return 1;
02770     out_sel="Du winkst@@ wem@@@@adverb@@"+(who ? " zu" : "")+".";
02771     if (who) out_vic="@@gname@@ winkt Dir@@adverb@@ zu.";
02772     out_oth="@@gname@@ winkt@@ wem@@@@adverb@@"+(who ? " zu" : "")+".";
02773     return FeelIt();
02774 
02775     /**************** Wuergen ***************/
02776     case "wuerg":
02777     HELPCHECK("wuerg");
02778     ParseRest(str);
02779     if (str && !who && !adverb)
02780       Return("Wuerge wen oder wie?\n");
02781     if (!who)  {
02782       out_sel="Du faengst@@adverb@@ an zu wuergen.";
02783       out_oth="@@gname@@ faengt@@adverb@@ an zu wuergen.";
02784     } else if (CheckLife(NOT_SELF, NOT_DEAD,
02785           "Du wuergst ein bischen an Dir rum. Dir wird schnell langweilig.",
02786                   "Wuerg lieber ein Lebewesen.")) {
02787       return 1;
02788     } else {
02789       out_sel="Du springst @@wen@@ an und faengst an, "+who->QueryPronoun(WEN)
02790         +"@@adverb@@ zu wuergen.";
02791       out_vic="@@gname@@ springt Dich auf einmal an und wuergt Dich@@adverb@@.";
02792       out_oth="@@gname@@ springt auf einmal @@wen@@ an und wuergt "
02793         +who->QueryPronoun(WEN)+"@@adverb@@.";
02794     }
02795     return FeelIt();
02796 
02797     /**************** Wundern ***************/
02798     case "wunder":
02799     HELPCHECK("wunder");
02800     ParseRest(str);
02801     if (str && !who && !adverb)
02802       Return("Wie oder ueber wen willst Du Dich wundern?\n");
02803     out_sel="Du wunderst Dich@@adverb@@"+(who ? " ueber @@wen@@." : ".");
02804     if (who) out_vic="@@gname@@ wundert sich@@adverb@@ ueber Dich.";
02805     out_oth="@@gname@@ wundert sich@@adverb@@"+(who ? " ueber @@wen@@." : ".");
02806     return FeelIt();
02807 
02808     /**************** Wuscheln ***************/
02809     case "wuschel":
02810     case "wuschl":
02811     HELPCHECK("wuschel");
02812     ParseRest(str);
02813     if (!who)
02814       Return("Wen willst Du denn wuscheln?\n");
02815     if (CheckLife(0,NOT_DEAD,
02816       "", "Hmm, sehr tot. Ne, lieber nicht."))
02817         return 1;
02818     if (who->QueryProp(P_FROG))  {
02819       write("Du verwuschelst...  aeh... hm. Ein Frosch hat wohl nix "
02820         +"zum Wuscheln.\n");
02821       return 1;
02822     };
02823     GHOSTCHECK("Du willst "+who->name(WEN)+" wuscheln - aber Deine "
02824         +"Haende gehen\nglatt durch den Kopf durch.\n",
02825       gname()+" will "+who->name(WEN)+" den Kopf wuscheln, aber "
02826         +"die Geister-\nhaende gehen glatt durch den Kopf durch.\n",
02827       gname()+" will Dich wuscheln, aber diese Geisterhaende "
02828         +"gehen\nglatt durch Deinen Kopf durch - Du hast ein seltsames "
02829         +"Gefuehl dabei.\n");
02830     if (member(({"highlander","boing","mieze","freund"}), who->query_real_name())>-1)
02831       switch (who->query_real_name())  {
02832         case "highlander": str1="Federn"; break;
02833         case "freund"    :
02834         case "mieze"     :
02835         case "boing"     : str1="Fell"; break;
02836       }
02837     else if (who->is_class_member(({CL_DRAGON, CL_FISH, CL_REPTILE})))
02838       str1="Schuppen";
02839     else if (who->is_class_member(({CL_BIRD, "elster","greif"})))
02840       str1="Federn";
02841     else if (who->is_class_member(({CL_MAMMAL_LAND,"feline","tiger",
02842                                     "steinbeisser","knuddeleisbaer"})))
02843       str1="Fell";
02844     else str1="Haare";
02845     out_sel="Du verwuschelst@@adverb@@ @@wessen@@ "+str1+".";
02846     out_vic="@@name@@ verwuschelt@@adverb@@ Dein"
02847       +(str1=="Fell" ? " " : "e ")+str1+".";
02848     out_oth="@@name@@ verwuschelt@@adverb@@ @@wessen@@ "+str1+".";
02849     return FeelIt();
02850 
02851     /**************** Zitieren ***************/
02852     case "zitier":
02853     HELPCHECK("zitier");
02854     ParseRest(str);
02855     if (!str)
02856       Return("Zitiere was oder wen womit?\n");
02857     sfoo=implode(explode(str, " ")[1..], " ");
02858     if (sfoo=="") sfoo=0;
02859     if (who)  {
02860       out_sel="Du zitierst @@wen@@"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
02861       out_vic="@@gname@@ zitiert Dich"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
02862       out_oth="@@gname@@ zitiert @@wen@@"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
02863     }
02864     else  {
02865       sfoo=explode(str, "/")[0];
02866       out_sel="Du zitierst@@adverb@@"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
02867       out_oth="@@gname@@ zitiert@@adverb@@"+(sfoo ? ": \""+sfoo+"\"" : "")+".";
02868     }
02869     return FeelIt();
02870 
02871     /**************** Zittern ***************/
02872     case "zitter":
02873     HELPCHECK("zitter");
02874     ParseRest(str);
02875     if (str && !adverb)
02876       Return("Zittere wie?\n");
02877     out_sel="Du zitterst"+(adverb ? "@@adverb@@." : " vor Angst.");
02878     out_oth="@@gname@@ zittert"+(adverb ? "@@adverb@@." : " vor Angst.");
02879     return FeelIt();
02880 
02881     /**************** Schulterzucken ***************/
02882     case "zuck" :
02883     HELPCHECK("zuck");
02884           if (str)
02885       if (sscanf(str,"%s mit den schultern",sfoo))
02886         str=sfoo;
02887     else if (sscanf(str,"%s den schultern",sfoo))
02888       str=sfoo;
02889     else
02890       if (sscanf(str,"%s schultern",sfoo))
02891         str=sfoo;
02892     if (str=="") str=0;
02893     ParseRest(str);
02894     if (str && !adverb)
02895       Return("Zucke wie mit den Schultern?\n");
02896     out_sel="Du zuckst@@adverb@@ mit den Schultern.";
02897     out_oth="@@gname@@ zuckt"+(adverb ? "@@adverb@@" : " ratlos")
02898             +" mit den Schultern.";
02899     return FeelIt();
02900 
02901     /**************** Zwinkern ***************/
02902     case "zwinker":
02903     HELPCHECK("zwinker");
02904     if (ghost())
02905       Return("Vergiss es - das ist als Geist viel zu unauffaellig, als dass\n"
02906         +"es andere Leute sehen wuerden.\n");
02907     ParseRest(str);
02908     if (str && !who && !adverb)
02909       Return("Zwinkere wie? Zwinkere wem zu?\n");
02910     if (who && CheckLife(NOT_SELF,NOT_DEAD,
02911       "Du kannst Dir nicht selber zuzwinkern.",
02912       "Wieso reagiert das Ding da nicht auf Dein Zwinkern? Ist es etwa tot?"))
02913         return 1;
02914     out_sel="Du zwinkerst@@ wem@@@@adverb@@"+(who ? " zu." : ".");
02915     if (who) out_vic="@@name@@ zwinkert Dir@@adverb@@ zu.";
02916     out_oth="@@name@@ zwinkert@@ wem@@@@adverb@@"+(who ? " zu." : ".");
02917     return FeelIt();
02918 
02919     /**************** Zunge rausstrecken ***************/
02920     case "streck":
02921     HELPCHECK("streck");
02922     GHOSTCHECK("Sorry, Du hast keine Zunge zum Rausstrecken.\n","",0);
02923     if (!str)
02924       Return("Strecke was wie wem wo wann wieso?\n");
02925     str=lower_case(str);
02926     if (sscanf(str, "%s zunge raus", str1)!=1 &&
02927     sscanf(str, "%s die zunge raus", str1)!=1)
02928       Return("Strecke was wie wem wo wann wieso?\n");
02929     ParseRest(str1);
02930     if (for_all)  {
02931       out_sel="Du streckst @@alle@@@@adverb@@ die Zunge raus.";
02932       out_vic="@@name@@ streckt @@alle@@@@adverb@@ die Zunge raus.";
02933       return MixedOut(WEM);
02934     }
02935     out_sel="Du streckst@@ wem@@@@adverb@@ die Zunge raus.";
02936     if (who) out_vic="@@name@@ streckt Dir@@adverb@@ die Zunge raus.";
02937     out_oth="@@name@@ streckt@@ wem@@@@adverb@@ die Zunge raus.";
02938     return FeelIt();
02939 
02940     // Spezialsachen - Geisterverben und Magierverben
02941 
02942     /**************** Rasseln ***************/
02943     case "rassel":
02944     case "rassl":
02945     if (!ghost())
02946       Return("Das ist nicht Dein Fachgebiet - Du bist doch kein Geist!\n");
02947     HELPCHECK("rassel");
02948     ParseRest(str);
02949     if (str && !adverb)
02950       Return("Rassel wie?\n");
02951     out_sel="Du rasselst"+(adverb ? "@@adverb@@" : " fuerchterlich")
02952       +" mit einer rostigen Rasselkette,\n"
02953       +"die Du auf einmal fuer einen Moment in der Hand haeltst.";
02954     out_oth="@@gname@@ holt auf einmal eine rostige Rasselkette aus\n"
02955       +"dem Nichts und faengt an,"+(adverb ? "@@adverb@@" : " fuerchterlich")
02956       +" damit zu rasseln.\n"
02957       +"Danach ist die Kette auf einmal wieder verschwunden.";
02958     return FeelIt();
02959 
02960     /**************** Heulen ***************/
02961     case "heul":
02962     if (!ghost())
02963       Return("Lass das mal den Fachleuten (also den Geistern).\n");
02964     HELPCHECK("heul");
02965     ParseRest(str);
02966     if (str && !adverb)
02967       Return("Heule wie?\n");
02968     out_sel="Du heulst"+(adverb ? "@@adverb@@." : " schauerlich.");
02969     out_oth="@@gname@@ heult"+(adverb ? "@@adverb@@." : " schauerlich.");
02970     return FeelIt();
02971 
02972     /**************** Treten (tretet) ***************/
02973     case "kick":
02974     if (!IS_WIZARD(this_player()))
02975       return 0;
02976     HELPCHECK("kick");
02977     if (!str)  {
02978       GHOSTCHECK("Dein Fuss faehrt durch die beruehmte langvergessene "
02979           +"unsichtbare Schildkroete\nhindurch.\n",
02980         gname()+" will die beruehmte langvergessene unsichtbare\n"
02981           +"Schildkroete treten, aber "+QPP(MALE,WER)
02982           +" Fuss faehrt durch sie hindurch.\n", 0);
02983       out_sel="Du tretest die beruehmte langvergessene unsichtbare "
02984         +"Schildkroete.";
02985       out_oth="@@name@@ tretet die beruehmte langvergessene unsichtbare "
02986         +"Schildkroete.";
02987     }
02988     else  {
02989       ParseRest(str);
02990       if (for_all)  {
02991         out_sel="Du tretest @@alle@@@@adverb@@.";
02992         out_vic="@@name@@ tretet @@alle@@@@adverb@@.";
02993         return MixedOut(WEN);
02994       }
02995       if (!who && !adverb)
02996         Return("Wenn Du schon was nach kick tippst, dann sag mir wen "
02997           +"oder wie ichdas soll.\n");
02998       if (who && CheckLife(NOT_SELF,NOT_DEAD,
02999         "Du schaffst es nicht, Dir selber in den Hintern zu treten.",
03000         "Tote Sachen tritt man nicht auch noch!"))
03001           return 1;
03002       if (who)  {
03003         out_sel="Du tretest@@ wen@@@@adverb@@.";
03004         if (who) out_vic="@@gname@@ tretet Dich@@adverb@@.";
03005         out_oth="@@gname@@ tretet@@ wen@@@@adverb@@.";
03006       }
03007       else  {
03008         out_sel="Du tretest die beruehmte langvergessene unsichtbare "
03009           +"Schildkroete@@adverb@@.";
03010         out_oth="@@gname@@ tretet die beruehmte langvergessene unsichtbare "
03011           +"Schildkroete\n@@adverb@@.";
03012       }
03013     }
03014     return FeelIt();
03015 
03016     /************* Nassspritzen ***************/
03017     case "splash":
03018     if (!IS_WIZARD(this_player()) &&
03019     !(IS_SEER(this_player()) && present("SEHER\nspritzpistole",this_player())))
03020       return 0;
03021     HELPCHECK("splash");
03022     ParseRest(str);
03023     if (for_all)  {
03024       out_sel="Du ziehst Deine Wasserpistole und spritzt @@alle@@@@adverb@@ "
03025         +"patschnass.";
03026       out_vic="@@gname@@ zieht "+QPP(FEMALE,WEN)+" Wasserpistole und spritzt\n"
03027         +"@@alle@@@@adverb@@ patschnass.";
03028       return MixedOut(WEN);
03029     }
03030     if (!who)
03031       Return("Wen willst Du denn nassmachen?\n");
03032     if (who == this_player())  {
03033       out_sel="Sag mal, kommst Du Dir nicht ein bisschen doof vor?\n"
03034         +"Du ziehst Deine Wasserpistole und spritzt Dich@@adverb@@ selber patschnass.";
03035       out_oth="@@gname@@ zieht "+QPP(FEMALE,WEN)+" Wasserpistole und spritzt "
03036         +"sich@@adverb@@ aus unerfindlichen Gruenden selbst patschnass.";
03037     }
03038     else  {
03039       out_sel="Du ziehst Deine Wasserpistole und spritzt @@wen@@@@adverb@@ "
03040         +"patschnass.";
03041       out_vic="@@gname@@ zieht "+QPP(FEMALE,WEN)+" Wasserpistole und spritzt "
03042         +"Dich@@adverb@@ patschnass.";
03043       out_oth="@@gname@@ zieht "+QPP(FEMALE,WEN)+" Wasserpistole und spritzt "
03044         +"@@wen@@@@adverb@@ patschnass.";
03045     }
03046     return FeelIt();
03047 
03048     /**************** Anflammen ***************/
03049     case "flam":
03050     if (!IS_WIZARD(this_player()) &&
03051     !(IS_SEER(this_player()) && present("SEHER\nflammenwerfer",this_player())))
03052       return 0;
03053     HELPCHECK("flame");
03054     if (ghost())
03055       Return("Du hast leider grade Deinen Flammenwerfer nicht dabei.\n");
03056     ParseRest(str);
03057     ifoo=!random(7);
03058     if (for_all)  {
03059       out_sel="Du holst aus Deinen tiefsten Taschen (oder was weiss denn "
03060         +"ich woher) Deinen\nMorgenGrauen handgearbeiteten Mini-Flammenwerfer "
03061         +"(tm), richtest ihn aus und...\n"
03062         +(ifoo ? "schaust leicht frustriert auf das Streichholz, in das "
03063           +"er sich verwandelt hat."
03064         : "feuerst@@adverb@@ einen riesigen Feuerball auf @@alle@@ ab.\n"
03065           +"Es riecht auf einmal so verbrannt hier...");
03066       out_vic="@@name@@ holt auf einmal irgendwoher einen MorgenGrauen "
03067         +"handgearbeiteten\nMini-Flammenwerfer (tm), richtet ihn aus und...\n"
03068         +(ifoo ? "schaut ziemlich frustriert auf das Streichholz, in das "
03069           +"sich das Ding verwandelt hat."
03070         : "feuert@@adverb@@ einen riesigen Feuerball auf @@alle@@ ab.\n"
03071           +"Dir wird so warm um's Herz...");
03072       return MixedOut(WEN);
03073     }
03074     if (!who)
03075       Return("Wen willst Du denn ankokeln?\n");
03076     out_sel="Du holst aus Deinen tiefsten Taschen (oder was weiss denn "
03077       +"ich woher) Deinen\nMorgenGrauen handgearbeiteten Mini-Flammenwerfer "
03078       +"(tm), richtest ihn aus und...\n"
03079       +(ifoo ? "schaust leicht frustriert auf das Streichholz, in das er "
03080         +"sich verwandelt hat."
03081       : "feuerst@@adverb@@ einen riesigen Feuerball auf @@wen@@ ab.\n"
03082         +"Es riecht auf einmal so verbrannt hier...");
03083     out_vic="@@name@@ holt auf einmal irgendwoher einen MorgenGrauen "
03084       +"handgearbeiteten\nMini-Flammenwerfer (tm), richtet ihn auf Dich "
03085       +"aus und...\n"
03086       +(ifoo ? "schaut ziemlich frustriert auf das Streichholz, in das "
03087         +"sich das Ding\nverwandelt hat."
03088       : "feuert@@adverb@@ einen riesigen Feuerball auf Dich ab.\n"
03089         +"Dir wird so warm ums Herz...");
03090     out_oth="@@name@@ holt auf einmal irgendwoher einen MorgenGrauen "
03091       +"handgearbeiteten\nMini-Flammenwerfer (tm), richtet ihn "
03092       +"auf@@ wen@@ aus und...\n"
03093       +(ifoo ? "schaut ziemlich frustriert auf das Streichholz, in das "
03094         +"sich das Ding\nverwandelt hat."
03095       : "feuert@@adverb@@ einen riesigen Feuerball auf@@ wen@@ ab.\nEs "
03096         +"riecht auf einmal irgendwie verbrannt hier ...");
03097     return FeelIt();
03098 
03099     // Special 2: remote verbs
03100 
03101     /**************** Remote knuddeln ***************/
03102     case "rknuddel":
03103     case "rknuddl":
03104     HELPCHECK("rknuddel");
03105     if (ParseRemote(str))
03106       return 1;
03107     if (!who)
03108       Return("Knuddle wen?\n");
03109     if (CheckLife(NOT_SELF,0,
03110       "Das bringt doch nix, lass es halt.",
03111       0))
03112         return 1;
03113     if (present(who, environment()))
03114       Return("Wenn jemand neben Dir steht, nimm knuddel.\n");
03115     out_sel="Du knuddelst @@wen@@@@adverb@@ aus der Ferne.";
03116     out_vic="@@gname@@ knuddelt Dich@@adverb@@ aus der Ferne.";
03117     return FeelIt();
03118 
03119     /**************** Remote winken ***************/
03120     case "rwink":
03121     HELPCHECK("rwink");
03122     if (ParseRemote(str))
03123       return 1;
03124     if (!who)
03125       Return("Winke wem zu?\n");
03126     if (CheckLife(NOT_SELF,0,
03127       "Sehr witzig. Pah.", 0))
03128         return 1;
03129     if (present(who, environment()))
03130       Return("Wenn jemand neben Dir steht, nimm wink.\n");
03131     out_sel="Du winkst @@wem@@@@adverb@@ aus der Ferne zu.";
03132     out_vic="@@gname@@ winkt Dir@@adverb@@ aus der Ferne zu.";
03133     return FeelIt();
03134 
03135     /**************** Verbenliste ***************/
03136     case "verb":
03137     case "verben":
03138     HELPCHECK("verb");
03139     More(SOULHELP->Help());
03140     return 1;
03141 
03142     /**************** Adverbienverwaltung ***************/
03143     case "adverb":
03144     case "adverben":
03145     case "adverbien": {   /* Das ist die richtige Form, aber wer weiss das? */
03146     string f1,f2;
03147     HELPCHECK("adverb");
03148     if (!str || str=="#" || str=="$")
03149       return zeige_adverbs((str=="#" ? 1 : (str=="$" ? 2 : 0)));
03150     if (sscanf(str, "%s %s", f1,f2)==2)  {
03151       if (f1=="")
03152         Return("Hm, da muss wohl ein Leerzeichen zu viel gewesen sein. Bitte "
03153           +"nochmal,\naber ohne zuviele Leerzeichen.\n");
03154       if (f1=="?")  {
03155         string match;
03156         if ((match=QueryStdAdverbs()[f2] || plr_adverbs[f2]))
03157           write("Die Abkuerzung "+f2+" gehoert zu dem Adverb:\n"+match+LF);
03158         else
03159           write("Diese Abkuerzung ist bisher nicht definiert.\n");
03160         return 1;
03161       }
03162       if (QueryStdAdverbs()[f1])
03163         Return("Die Standardabkuerzungen koennen nicht neu definiert "
03164           +"werden.\n");
03165       if (plr_adverbs[f1])  {
03166         plr_adverbs[f1]=f2;
03167         write("OK, Adverb mit der Abkuerzung \""+f1+"\" auf \""+f2
03168           +"\" gesetzt.\n");
03169       }
03170       else  {
03171         if (strlen(f1) > 6)
03172           Return("Die Abkuerzung ist zu lang, bitte nicht mehr als "
03173             +"6 Zeichen.\n");
03174         plr_adverbs[f1]=f2;
03175         write("OK, neues Adverb \""+f2+"\" mit der Abkuerzung \""+f1+"\".\n");
03176       }
03177     }
03178     else  {
03179       if (QueryStdAdverbs()[str])
03180         Return("Die Standardadverben koennen nicht geloescht werden.\n");
03181       else if (!plr_adverbs[str])
03182         Return("Du hast kein Adverb mit dieser Abkuerzung.\n"
03183           +"Syntax: adverb, um die Adverbien anzuzeigen,\n"
03184           +"        adverb #, um nur Deine Adverbien anzuzeigen,\n"
03185           +"        adverb $, um nur die Standardadverbien anzuzeigen,\n"
03186           +"        adverb ? <Abkuerzung>, um nachzusehen, ob <Abkuerzung> "
03187             +"definiert ist,\n"
03188           +"        adverb <Abkuerzung> <Adverb>, um der <Abkuerzung> das "
03189             +"<Adverb>\n"
03190           +"               zuzuordnen,\n"
03191           +"        adverb <Abkuerzung>, um das Adverb mit der <Abkuerzung> "
03192             +"zu loeschen,\n");
03193       else  {
03194         write("OK, Adverb \""+plr_adverbs[str]+"\" geloescht.\n");
03195         plr_adverbs=m_delete(plr_adverbs, str);
03196       }
03197     }
03198     return 1; 
03199     }
03200   }
03201   return(0);  //fallthrough
03202 }

static int verben_liste (  )  [static]

Definiert in Zeile 268 der Datei soul.c.

Benutzt More() und SOULHELP.

00268                 {
00269   More(SOULHELP->Help());
00270   return 1;
00271 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:

private int zeige_adverbs ( int  mine  ) 

Die Funktion stellt einen Hilfetext zur Verfuegung und listet die definierten Adverbien auf.

Parameter:
mine 0 = alle Adverbien, 1=nur selbst definierte Adverbien 2=nur die vom System bereitgestellten

Definiert in Zeile 578 der Datei soul.c.

Benutzt plr_adverbs und QueryStdAdverbs().

00578                                      {
00579   mapping adverb_list;
00580   string out,s;
00581 
00582   // Parameter auswerten
00583   switch (mine){
00584     case 1:
00585       adverb_list=plr_adverbs;
00586       out = "Du hast folgende Adverbien definiert:\n";
00587       break;
00588     case 2:
00589       adverb_list=QueryStdAdverbs();
00590       out = "Systemseitig sind folgende Adverbien definiert:\n";
00591       break;
00592     default:
00593       adverb_list=QueryStdAdverbs()+plr_adverbs;
00594       out = "Folgende Adverbien stehen Dir zur Verfuegung:\n";
00595   }
00596 
00597   out +="  Abk.    Adverb\n  ======  ======\n";
00598 
00599   if ( sizeof(adverb_list) == 0) 
00600     out += " keine.\n";
00601   else
00602     // Ueber alle Elemente der indizies der Adverbienliste gehen
00603     // Die Closure sagt dem sort_array nur, wie es die Liste zu 
00604     // sortieren hat: Aufsteigend, gross-klein-schreibung ignorierend
00605     foreach ( s : sort_array(m_indices(adverb_list),
00606                     lambda( ({'x,'y}), 
00607                       ({ #'>, 
00608                            ({ #'lower_case , 'x }), 
00609                            ({ #'lower_case , 'y }) 
00610                       })
00611                     )
00612                   )
00613            )  /* bis hierher geht das foreach :) */
00614       out += break_string(adverb_list[s],78, 
00615                           sprintf("  %-6s  ",s),BS_INDENT_ONCE);
00616 
00617   More(
00618      out+"\nWie diese Adverbien benutzt werden ist in <hilfe adverb> beschrieben.\n");
00619 
00620   return 1;
00621 }

Hier ist ein Graph der zeigt, was diese Funktion aufruft:


Variablen-Dokumentation

string adverb [static]

Definiert in Zeile 170 der Datei soul.c.

Wird benutzt von convert_string(), MatchAdverb(), ParseAdverb(), ParseRemote() und ParseRest().

int flag [static]

Definiert in Zeile 168 der Datei soul.c.

int for_all [static]

Definiert in Zeile 168 der Datei soul.c.

Wird benutzt von MixedOut() und ParseRest().

int ifoo [static]

Definiert in Zeile 168 der Datei soul.c.

object ofoo [static]

Definiert in Zeile 167 der Datei soul.c.

string out_oth [static]

Definiert in Zeile 170 der Datei soul.c.

Wird benutzt von FeelIt().

string out_sel [static]

Definiert in Zeile 170 der Datei soul.c.

Wird benutzt von FeelIt() und MixedOut().

string out_vic [static]

Definiert in Zeile 170 der Datei soul.c.

Wird benutzt von FeelIt() und MixedOut().

mapping plr_adverbs

Definiert in Zeile 169 der Datei soul.c.

Wird benutzt von add_soul_commands(), GetPlayerAdverb(), QueryAdverbs() und zeige_adverbs().

string sfoo [static]

Definiert in Zeile 170 der Datei soul.c.

object who [static]
Erzeugt am Thu Jun 3 14:42:57 2010 für MorgenGrauen Mudlib von  doxygen 1.6.3