notify_player_change()
======================

void notify_player_change(string/object who, int rein [, int invis])

FUNKTION
--------
::

    void /notify_player_change(object who, int rein)
    void /std/player/base::notify_player_change(string who, int rein,
                                                int invis)

  

GERUFEN VON
-----------
::

    /std/player/base.c (d.h. alle Spielershells/-Objekte)

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

    string who
      getuid() eines Spielers
    object who
      Spieler-Objekt
    int rein
      0 fuer das MUD verlassende, 1 fuer hereinkommende Spieler
    int invis
      1 fuer unsichtbare Spieler (Magier)

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

    Diese Funktion wird von Lebewesen fuer hereinkommende und das Spiel
    verlassende Spieler an verschiedenen Stellen aufgerufen:

    

    * in anderen Spielern mit notify_player_change() mit drei Parametern
      - dies dient fuer die "erwarte"-Funktionalitaet
    * in der Gilde des Spielern mit zwei Parameter
      - damit koennen Gilden notwendige Anpassungen vornehmen

    Diese Funktionen werden auch gerufen, wenn Magier "invis -e" bzw.
    "vis e" benutzen.

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

    // in einer Gilde:
    void notify_player_change(object pl, int rein) {
      if (rein && objectp(pl)) {
        // Checks, ob Spielerskills in Ordnung sind
        mapping bete = pl->QuerySkill("bete");

        

        if (!mappingp(bete)) {
          if (IS_LEARNER(pl) || pl->QueryProp(P_TESTPLAYER)) {
            tell_object(pl, break_string(
              "Du bist ein kaputter Test-Kleriker ...", 78,
              "Arkshat teilt dir mit: "));
            // notduerftige Reparaturen
          } else
            raise_error("Klerus: Kaputter oder gesetzer Kleriker!\n");
        }
      }
    }

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

    RegisterEvent mit (EVT_LIB_LOGIN, EVT_LIB_LOGOUT)
    erwarte

1. Sep 2011 Gloinson

