P_DISABLE_COMMANDS
******************


NAME
====

   P_DISABLE_COMMANDS             "p_lib_disablecommands"


DEFINIERT IN
============

   /sys/player/command.h


BESCHREIBUNG
============

   Mit dieser Prop kann man verhindern, dass Kommandos eines Spielers
   verarbeitet werden. Dies ist z.B. in Sequenzen nuetzlich, wo der Spieler
   rein passiv konsumieren soll.
   In diese Property muss ein Array mit 2 oder 3 Elementen geschrieben
   werden:
      1) Endzeitpunkt in Sekunden seit 1.1.1970 (int)
      2) Meldung (String oder Closure)
      3) (optional) Array von trotzdem erlaubten Verben (string*)
        (nur ausgewertet, wenn die Meldung ein String ist)



   Ist die Meldung ein String, wird dieser einfach bei jedem Kommando so wie
   er ist an den Spieler ausgegeben und das Kommando abgebrochen.
   Ist die Meldung eine Closure wird diese bei jedem Kommando aufgerufen und
   das Kommando abgebrochen, wenn sie einen Rueckgabewert != 0 zurueckgibt.
   In diesem Fall ist die gerufene Funktion dafuer verantwortlich, geeignete
   Meldungen an den Spieler auszugeben!
   Der Funktion wird der vom Spieler eingebene Befehl (string) als erstes
   Argument uebergeben. Zu diesem Zeitpunkt wurde alle Aliase schon
   ausgewertet. Die Funktion kann den Kommandogeber via this_player()
   ermitteln.
   Fuer weitere Informationen steht auch command_stack() zur Verfuegung,
   allerdings ist dort die Alias-Ersetzung nicht beruecksichtigt.

   Die Ausnahmeliste wird nur fuer simple Strings als Meldung ausgewertet,
   wird eine Closure verwendet, kann diese besser selber die Ausnahmen
   bestimmen.



   Fragt man diese Prop ab, erhaelt man ein Array mit 4 Elementen: setzendes
   Objekt (object), Ablaufzeit (int), Meldung (String oder Closure) und
   Liste von Ausnahmen (string*).


BEMERKUNGEN
===========

   1. Die Prop wird fuer Magier mit eingeschaltetem P_WANTS_TO_LEARN
      ignoriert.
   2. Wenn das Objekt zerstoert wird, was die Prop gesetzt hat, wird der
      Eintrag unwirksam.
   3. Wenn diese Prop gesetzt und nicht abgelaufen ist, kann nur das gleiche
      Objekt sie mit neuen Daten ueberschreiben. Alle anderen Objekte koennen
      die Prop nur loeschen. Dies soll verhindern, dass Magier unabsichtlich
      einfach anderer Leute Eintraege ueberschreiben. Dementsprechend: Lasst
      die Finger davon, wenn die schon gesetzt ist. ;-)
   4. Diese Prop darf _ausschliesslich_ mit SetProp() und QueryProp() benutzt
      werden, Set() und Query() funktionieren _nicht_.
   5. Es gibt einige Verben, die NIE blockiert werden. Zur Zeit sind dies
      "mrufe", "mschau", "bug", "idee", "typo" und "detail".
   6. Bitte nicht missbrauchen, speziell nicht dazu, die Kommandos von
      Spieler zu ueberwachen/mitzuschreiben. Das Setzen dieser Prop wird
      geloggt.


BEISPIEL
========

   In einem Raum startet eine Sequenz, in der der Spieler nichts machen soll:

   if (!pl->QueryProp(P_DISABLE_COMMANDS))
      pl->SetProp(P_DISABLE_COMMANDS,
            ({ time() + 120, "Du bist tief in Deinem Traum gefangen!\n" }) );
   else // ... Fehlerbehandlung, falls Prop schon gesetzt ...



   Soll die Prop aus irgendeinem Grund (vorzeitig) geloescht werden:
   pl->SetProp(P_DISABLE_COMMANDS, 0);


SIEHE AUCH
==========

   command(), query_command(), command_stack(), modify_command(),
   this_player()

01.12.2012, Zesstra
