FUNKTION:
     varargs string replace_personal(string str, mixed *obs [, int caps]);

DEFINIERT IN:
     /secure/simul_efun.c

ARGUMENTE:
     str    - zu bearbeitender String
     obs    - Liste von Objekt1, Objekt2, ..., Objekt9
              (Objekte oder Strings)
     caps   - 1 fuer Grossschreibung des Ersetzten nach Satzenden (.,?,!,")
              0 sonst

BESCHREIBUNG:
     Ersetzt in Strings
     @WERx, @WESSENx, @WEMx, @WENx durch
        Objectx->name(<casus>, 1);
     @WERUx, @WESSENUx, @WEMUx, @WENUx durch
        Objectx->name(<casus>);
     @WERQPx, @WESSENQPx, @WEMQPx, @WENQPx durch
        Objectx->QueryPronoun(<casus>);
     @WERQAx, @WESSENQAx, @WEMQAx, @WENQAx durch
        Objectx->QueryArticle(<casus>, 1, 1);
     @WERQPPGNx, @WESSENQPPGNx, @WEMQPPGNx, @WENQPPGNx durch
        Objectx->QueryPossPronoun(<gender>, <casus>, <number>);
     oder den entsprechenden String bei "Objektx".            

BEMERKUNGEN:
     x steht fuer die Position des Objekts/Strings in *obs, beginnend bei 1.
     
     Besonderheiten beim Possessivpronomen (@WERQPPGNx):
     G muss durch das Geschlecht (M, F oder N) und N durch den Numerus (S 
     oder P) ersetzt werden. 
     Alle Angaben, auch der CASUS, beziehen sich dabei auf das Objekt, welches
     besessen wird, nicht auf den Besitzer! Dieser ist bereits durch x 
     bestimmt.
     
RUeCKGABEWERT:
     durchersetzter String 
     
Beispiele:

     replace_personal("@WER1", ({find_player("gloinson")}))
     == "Gloinson"
     
     replace_personal("@WEMQP1", ({find_player("gloinson")}))
     == "ihm"     
     
     // unbestimmter und bestimmter Artikel:
     replace_personal("@WER1 zueckt @WENU2 und verhaut @WEN3.", 
                      ({find_player("gloinson"),
                        find_object("/obj/mpa"), 
                        find_object("/obj/wanderer")}))
     == "Gloinson zueckt eine Zeitung und verhaut den Wanderer."
     
     // Beim Possessivpronomen beziehen sich WEN, F und P (Akkusativ,
     // Femininum, Plural) auf die Taschen, nicht auf Kessa:
     replace_personal("@WER1 steckt @WESSEN2 Turnschuhe in @WENQPPFP1 "
                      "Taschen.", 
                      ({find_player("kessa"), 
                        find_player("gloinson")}))
     == "Kessa steckt Gloinsons Turnschuhe in ihre Taschen."

     // Ein Beispiel mit laengerem *obs:
     replace_personal("@WER1 zieht @WENQPPMP1 neuen Turnschuhe an. @WER2 ist "
                      "so beeindruckt, dass @WERQP2 @WEMQP1 @WENU3 auf die "
                      "@WEN4 haut und die Schuhe in @WEMQPPFS2 Tasche "
                      "verschwinden laesst. @WERU5 schaut zu und kichert "
                      "irre. Wenn das @WER6 gesehen haette!",
                      ({find_player("gloinson"), 
                        find_player("kessa"),
                        find_object("/obj/mpa"),                        
                        "Birne",
                        find_object("/obj/wanderer"),
                        find_netdead("jof")}),1)
     == "Gloinson zieht seine neuen Turnschuhe an. Kessa ist so beeindruckt, "
        "dass sie ihm eine Zeitung auf die Birne haut und die Schuhe in ihrer "
        "Tasche verschwinden laesst. Ein Wanderer schaut zu und kichert "
        "irre. Wenn das Jof gesehen haette!"

SIEHE AUCH:
     AddCmd(L)

05. September 2015, Arathorn
