id()
====

FUNKTION
--------
::

     varargs int id(string str, int lvl);

DEFINIERT IN
------------
::

     /std/thing/description.c
     /std/player/base.c

ARGUMENTE
---------
::

     string str
          String, auf den getestet werden soll.
     int lvl
          In /std/player/base.c benutzt. Wenn der Spieler unsichtbar ist
          und lvl kleiner ist als sein Level, wird 0 zurueckgegeben.

BESCHREIBUNG
------------
::

     Es wird geprueft, ob sich das Objekt mit str ansprechen laesst. Dazu
     wird str mit dem Inhalt der Property P_IDS verglichen. Falls
     P_ADJECTIVES gesetzt ist, werden auch alle Adjektivkombinationen mit
     den Bezeichnern geprueft.

     Besondere Bedeutung hat diese Funktion bei Mengenobjekten: Anhand von
     str wird vermerkt, welche Menge des Objektes angesprochen wird. Es
     werden dabei mehrere Faelle unterschieden:
     o str ist einer der mit AddId() angegebener Bezeichner. In diesem
       Fall ist die angesprochene Menge die Gesamtmenge.
     o str ist einer der mit AddSingularId() angegebenen Bezeichner. Die
       angesprochene Menge ist in diesem Fall 1.
     o str ist einer der mit AddPluralId() angegebenen Bezeichner. Die
       angesprochene Menge ist in diesem Fall . die Gesamtmenge.
     o Hat str die Form "<n> <id>", wobei <n>=1 und <id> eine SingularId
       oder 1 < <n> <= der Gesamtmenge und <id> eine PluralId, so ist die
       angesprochene Menge = <n>.
     Wie gesagt, gilt dies einzig und allein bei Mengenobjekten!

RUeCKGABEWERT
-------------
::

     1, wenn sich das Objekt von str angesprochen fuehlt, ansonsten 0.

BEISPIELE
---------
::

     Angenommen, ein Objekt habe folgende Bezeichner:

     AddId( "murmel" );
     AddAdjective( "runde" );

     Dann liefern die angegebenen id()-Aufrufe folgende Ergebnisse:

     id( "murmel" );         => 1
     id( "runde murmel" );   => 1
     id( "kleine murmel" );  => 0
     id( "runder ball" );    => 0
     id( "runde murmel 2" ); => 1, wenn dies die zweite Murmel in der
                                   gleichen Umgebung ist, ansonsten 0

     Bei einem Haufen von 100 Muenzen haette man zB.:

     AddId( "geld" );
     AddSingularId( "muenze" );
     AddPluralId( "muenzen" );

     Nach fuehlen sich nach den folgenden id()-Aufrufen folgende Anzahlen
     angesprochen:

     id( "geld" );       => 100 Muenzen
     id( "muenze" );     => 1 Muenze
     id( "muenzen" );    => 100 Muenzen
     id( "1 muenze" );   => 1 Muenze
     id( "42 muenzen" ); => 42 Muenzen

     id() liefert in all diesen Faellen 1 zurueck.

SIEHE AUCH
----------
::

     AddId(), AddAdjective(), AddSingularId(), AddPluralId(), present(),
     match_ids(), /std/thing/description.c, /std/unit.c

6. Sep 2012 Gloinson

