| 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 |