replace_personal()
==================

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

