Lpc Manpages

MakeString()

FUNKTION:
     string MakeString( string str,
                        mixed var1, mixed var2, mixed var3, mixed var4,
                        mixed var5, mixed var6, mixed var7, mixed var8)

DEFINIERT IN:
     /std/thing/makestring.c (wird von /std/thing/language.c inkludiert)

ARGUMENTE:
     str
          Der String, der bearbeitet werden soll

     var1, var2, var3, var4, var5, var6, var7, var8
          Objekte, fuer die die Ersetzungen durchgefuehrt werden sollen,
          und Parameter zur Steuerung des Zeilenumbruchs.
          Alle Argumente sind optional). Das Objekt, das MakeString()
          aufruft, muss nicht als Parameter mit uebergeben werden.

BESCHREIBUNG DER FUNKTION:
     MakeString ist ein Parser, der moeglichst allgemein Ersetzungen
     ermoeglichen soll. Er kann entsprechende Platzhalter durch Namen,
     Pronomen. Possessivpronomen und Artikel fuer bis zu fuenf verschiedene
     Objekte in einem String ersetzen. Ausserdem erlaubt die Funktion
     Zeilenumbrueche wie die Funktion break_string().

     Der allgemeine Funktionsaufruf sieht folgendermassen aus:
          MakeString( str [, <objekte>] [, bs_flag [, <bs_para>]]);
     Dabei bedeuten:
          str        der zu parsende String. Dies ist der einzige Paramter,
                     der auf jeden Fall vorhanden sein muss.
          <objekte>  0 bis maximal 4 Objekt, fuer die Stringersetzungen
                     durchgefuehrt werden sollen. 0 Objekte, weil das die
                     Funktion aufrufende Objekt nicht als Parameter
                     uebergeben werden muss.
          bs_flag    Das Flag fuer einen Zeilenumbruch. Falls die Funktion
                     einen Zeilenumbruch durchfuehren soll, wird dieser
                     hinter dem letzten Objekt in die Parameterliste
                     eingefuegt.
          <bs_para>  die Parameter fuer den Zeilenumbruch. Diese sind
                     identisch zu denen der break_string-Funktion (intern
                     macht MakeString() nichts anderes, als break_string()
                     aufzurufen und diese Parameter zu uebergeben).
                     Werden an MakeString() nur bs_flag = 1, aber keine
                     weiteren Parameter uebergeben, entspricht dies einem
                     Aufruf von break_string() nur mit einem String ohne
                     zusaetzliche Parameter (siehe dazu auch die Manpage
                     von break_string()).
                     
BESCHREIBUNG DER STRING-PLATZHALTER: 
     Im zu parsenden String ist fuer jeden zu ersetzenden Ausdruck ein
     passender Platzhalter anzugeben.

     Jeder Platzhalter besteht aus bis zu acht Zeichen, die in doppelte
     Doppelkreuze eingeschlossen sind (##abcdefgh##), und in denen der zu
     ersetzende String codiert ist:

     1234   5   6   7   8     Position im zu ersetzenden Ausdruck
     namU | 0 | n | m | s |   Zulaessige Alternativen
     namB | 1 | g | f | p |
     namA | 2 | d | n |   |
     namR | 3 | a |   |   |
     pron | 4 |   |   |   |
     poss |   |   |   |   |
     artU |   |   |   |   |
     artB |   |   |   |   |
      |     |   |   |   |
      |     |   |   |   +- Numerus (Einzahl oder Mehrzahl, nur bei
      |     |   |   |      Possessivpronomen)
      |     |   |   +----- Genus (Geschlecht, nur bei Possessivpronomen)
      |     |   +--------- Casus (Fall)
      |     +------------- Kennziffer, auf welches Objekt in der
      |                    Parameterliste sich die Ersetzung bezieht.
      +------------------- Kennung fuer die Art des einzusetzenden Ausdrucks.

     Wenn der Anfangsbuchstabe gross geschrieben ist, also z. B. Pron,
     dann beginnt der eingesetzte String ebenfalls gross.

     Moegliche KENNUNGEN sind:
     namU, NamU
          wird durch den Namen des jeweiligen Objekts im angegebenen Fall
          ersetzt. Bei Objekten, in denen P_ARTICLE auf 0 gesetzt ist, wird
          nur der Name zurueck gegeben. Dies betrifft vor allem Spieler
          und NPCs mit Eigennamnen. Bei Objekten, in denen Artikel erlaubt
          sind, wird ein unbestimmter Artikel vor den Namen gesetzt. Sind
          in dem Objekt Adjektive mit AddAdjective() gesetzt, so werden auch
          diese mit eingebaut.
          Beispiel:            namU                 NamU
              Spieler:         Tyron                Tyron
              Std-NPC:         ein Ork              Ein Ork
              Spezieller NPC:  Wurzelsepp           Wurzelsepp
              Ein Objekt:      eine Flasche         Eine Flasche
                               eine gruene Flasche  Eine gruene Flasche
          (Diese Ersetzung entspricht der Funktion name() mit dem Aufruf
          name( <fall>, 0).)
     namB, NamB
          wird durch den Namen des jeweiligen Objekts im angegebenen Fall
          ersetzt. Bei Objekten, in denen P_ARTICLE auf 0 gesetzt ist, wird
          nur der Name zurueck gegeben. Dies betrifft vor allem Spieler
          und NPCs mit Eigennamnen). Bei Objekten, in denen Artikel erlaubt
          sind, wird ein bestimmter Artikel vor den Namen gesetzt. Sind
          in dem Objekt Adjektive mit AddAdjective() gesetzt, so werden auch
          diese mit eingebaut.
          Beispiel:            namB                 NamB
              Spieler:         Tyron                Tyron
              Std-NPC:         der Ork              Der Ork
              Spezieller NPC:  Wurzelsepp           Wurzelsepp
              Ein Objekt:      die Flasche          Die Flasche
                               die gruene Flasche   Die gruene Flasche
          (Diese Ersetzung entspricht der Funktion name() mit dem Aufruf
          name( <fall>, 1).)
     namA, NamA
          wird durch den Namen des Objekts im angegebenen Fall ersetzt. Bei
          Objekten, in denen P_ARTICLE auf 0 gesetzt ist, wird nur der Name
          zurueck gegeben. Sind Artikel erlaubt, entscheidet die Funktion
          anhand der Umgebung, ob ein bestimmter oder unbestimmter Artikel
          vor den Namen gesetzt wird. (Diese Ersetzung entspricht der
          Funktion name() mit dem Aufruf name( <fall>, 2).)
     namR, NamR
          wird durch den Namen des Objekts im Nominativ ersetzt. Es werden
          weder Artikel noch Adjektive voran gestellt.
          Beispiel:            namB                 NamB
              Spieler:         Tyron                Tyron
              Std-NPC:         Ork                  Ork
              Spezieller NPC:  Wurzelsepp           Wurzelsepp
              Ein Objekt:      Flasche              Flasche
          (Diese Ersetzung entspricht der Funktion name() mit dem Aufruf
          name( RAW).)
     pron, Pron
          wird passend zum Geschlecht des Objektes durch ein Pronomen im
          angegebenen Fall ersetzt.
          Beispiel:            pron           Pron
              Spieler:         er             Er
              Spielerin:       sie            Sie
              Ding:            es             Es
     poss, Poss
          wird passend zum Geschlecht des Objektes durch ein Possessivpronomen
          ersetzt. Die Angaben zu Fall, Geschlecht und Anzahl beziehen sich 
          dabei NICHT AUF DAS OBJEKT, sondern auf den Gegenstand, der dem 
          Objekt gehoert (siehe dazu auch die Beispiele).
     artU, ArtU
          wird passend zum Geschlecht des Objektes durch einen unbestimmten
          Artikel im angegebenen Fall ersetzt. Die Propetty P_ARTICLE hat
          auf diese Ersetzung keinen Einfluss.
          Beispiel:            artU           ArtU
              Spieler:         ein             Ein
              Spielerin:       eine            Eine
              Ding:            ein             Ein
     artB, ArtB
          wird passend zum Geschlecht des Objektes durch einen bestimmten
          Artikel im angegebenen Fall ersetzt. Die Propetty P_ARTICLE hat
          auf diese Ersetzung keinen Einfluss.
          Beispiel:            artB           ArtB
              Spieler:         der             Der
              Spielerin:       die             Die
              Ding:            das             Das

     Die ZIFFER gibt an, auf welches Objekt sich das Pattern bezieht. Auf das
     Objekt, das MakeString() aufruft, wird dabei mit 0 verwiesen.

     Fuer den CASUS erlaubte Buchstaben sind:
          n    Nominativ ("Wer")
          g    Genetiv ("Wessen")
          d    Dativ ("Wem")
          a    Akkussativ ("Wen")

     Fuer den GENUS (das Geschlecht) erlaubte Kennbuchstaben sind:
          m    Maskulin (maennlich)
          f    Feminin (weiblich)
          n    Neutrum (saechlich)

     Fuer den NUMERUS (die Anzahl) erlaubte Kennbuchstaben sind:
          s    Singular (Einzahl)
          p    Plural (Mehrzahl)
      

RUECKGABEWERT:
     Der fertige String.

BEMERKUNGEN:
     Am Satzanfang muss grundsaetzlich die grossbuchstabige Variante und
     mitten im Satz immer die kleinbuchstabige Variante gewaehlt werden.
     Das gilt auch dann, wenn man ##namU## oder ##namB## in einem Spieler
     aufruft und einen (immer gross geschriebenen) Eigennamen erwartet. Der
     Spieler koennte z. B. "ein Frosch" heissen oder unsichtbar sein, oder
     anstelle des Spieler koennte ein gleichnamiges Monster angesprochen
     werden.

     Da bei ##namRx## alle Namen im Nominativ zurueckgegeben werden, kann
     hier die Angabe des Falles entfallen. Es genuegt also, ##namR0##,
     ##namR1##, ##namR2##, ...  zu schreiben.

     Findet der Parser einen fehlerhaft definierten Ersetzungsstring, bleibt
     dieser ohne Ersetzung im Rueckgabestring stehen. Ausserdem setzt die
     Funktion vor den String eine Fehlerwarnung.

     Man sollte MakeString() nicht verwenden, wenn man nur einen
     Zeilenumbruch durchfuehren moechte. Die Parserfunktionen kosten eine
     Menge Rechenzeit, ohne dass es etwas zu ersetzen gibt.

BEISPIELE:

     1. Einige einfache Beispiele fuer Namensersetzung:
        Aufruf in einem Obejkt namens "Flasche"     
            MakeString( "Das ist ##namU0n##.");
        ergibt:
            Das ist eine Flasche.

            MakeString( "Du trinkst aus ##namB0d##.");
        ergibt:
            Du trinkst aus der Flasche.

     2. Etwas komplizierter, mit einem weiteren Objekt:
            object spieler;
            spieler = this_player();
            MakeString( "##NamB1n## trinkt aus ##namU0d##.", spieler);
        ergibt:
            Cheasy trinkt aus einer Flasche.

    3. Possessivpronomen
       Bei Possessivpronomen ist wichtig, dass sich die Angaben fuer Fall,
       Geschlecht und Anzahl NICHT AUF DAS ANGESPROCHENE OBJEKT, sondern auf
       den Gegenstand beziehen, der dem Objekt gehoert.
            object spieler;
            spieler = this_player();
            MakeString( "##NamB1n## nimmt ##poss1nfs## Flasche.", spieler);
       ergibt:
            Cheasy nimmt seine Flasche.
       bzw.
            Janice nimmt ihre Flasche.

            MakeString( "##NamB1n## trinkt aus ##poss1dms## Krug.", spieler);
       ergibt:
            Cheasy trinkt aus seinem Krug.
       bzw.
            Janice trinkt aus ihrem Krug.

    4. Falsche Syntax
            MakeString( "##NamB1n## trinkt aus ##possdms## Krug.", spieler);
       (im zweiten Ersetzungsausdruck die Zahl vergessen) ergibt:
            MakeString: FALSCHES FORMAT: Cheasy trinkt aus ##possdms## Krug.
       bzw.
            MakeString: FALSCHES FORMAT: Janice trinkt aus ##possdms## Krug.

SIEHE AUCH:
     P_ARTICLE, P_ADJECTIVES, name(), AddAdjective(),
     /std/thing/makestring.c, /std/thing/language.c