Updates erzeugter Manpages
Diese Manpages werden mit sphinx erzeugt. Sie werden
hier committet, damit auch Nutzer ohne sphinx die
Textversion haben.
Change-Id: Ibe6acc626b51b42364af33450a719e88281651b9
diff --git a/doc/lfun/AddRoomMessage b/doc/lfun/AddRoomMessage
index aa700c1..7d33a52 100644
--- a/doc/lfun/AddRoomMessage
+++ b/doc/lfun/AddRoomMessage
@@ -6,7 +6,7 @@
FUNKTION
========
- void AddRoomMessage(string *msg, int time, mixed *func);
+ void AddRoomMessage(string* msg, int time, mixed* func);
DEFINIERT IN
@@ -18,67 +18,80 @@
ARGUMENTE
=========
- msg
- Array von Strings mit den Meldungen.
- time
- Der Abstand zwischen zwei Meldungen in Sekunden.
- func (optional)
- String oder Array von Strings mit Funktionsnamen
+ string* msg
+ Array von Strings mit den Meldungen.
+
+ int time
+ Der Abstand zwischen zwei Meldungen in Sekunden.
+
+ string|string* func (optional)
+ String oder Array von Strings mit Funktionsnamen
BESCHREIBUNG
============
- Mit dieser Funktion legt man fest, dass in bestimmten Zeitabstaenden
- Meldungen an den Raum geschickt werden sollen.
+ Mit dieser Funktion legt man fest, dass in bestimmten
+ Zeitabstaenden Meldungen an den Raum geschickt werden sollen.
- Es wird alle time Sekunden zufaellig eine der in msg angegebenen
- Meldungen ausgegeben. Hat man auch noch func angegeben, so wird
- zusaetzlich diese Funktion (bei einem Array: eine zufaellig ausgesuchte
- Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion die
- Nummer der ausgegebenen Meldung.
+ Es wird alle 'time' Sekunden (beim ersten Betreten durch einen
+ Spieler ein random() des Wertes) zufaellig eine der in msg
+ angegebenen Meldungen ausgegeben. Hat man func angegeben, so wird
+ diese Funktion (bei einem Array: eine zufaellig ausgesuchte
+ Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion
+ die Nummer der ggf zuvor ausgegebenen Meldung (Default also 0).
- Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert, sollte
- man folgendes bedenken:
- o Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
- die Nerven zu gehen!
- o Da das Timing ueber einen call_out() gesteuert wird, ist das Ganze
- aus Sicht des GameDrivers auch noch relativ teuer!
- Fazit: weniger ist mehr!
+ Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert,
+ sollte man folgendes bedenken (Fazit: weniger ist mehr):
+
+ * Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern
+ auf die Nerven zu gehen.
+
+ * Die das Timing steuernden call_out() sind nicht umsonst.
BEMERKUNGEN
===========
- * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet.
- * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
- ueberschreibt alle vorherigen Werte
- * THIS_PLAYER() NICHT VERWENDEN!
+ * falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet
+
+ * der Praefix Add... taeuscht hier. Ein Aufruf von
+ AddRoomMessage() ueberschreibt alle vorherigen Werte
+
+ * this_player() NICHT VERWENDEN!
+
+ * Abschalten der Raumnachrichten:
+
+ * passiert automatisch nur, wenn alle Spieler den Raum
+ verlassen haben
+
+ * ist manuell nur ueber Loeschen der Nachrichten umsetzbar,
+ also mit "AddRoomMessage((string)0, 0, (string)0);"
+
In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
- this_player() nicht verwendet werden. AddRoomMessage ist call_out-
- gesteuert und speichert somit das this_player(). Damit ist this_player()
- immer der Spieler, der den Raum geladen, also den Raum als erster
- betreten hat.
- Spieler also bitte selbst ueber filter(all_inventory(this_object()),
- #'interactive) suchen.
+ this_player() nicht verwendet werden, da die call_out()-Kette den
+ ersten ausloesenden Spieler speichert. Anwesende Spieler also bitte
+ ggf mit "filter(all_inventory(this_object()), #'interactive)"
+ suchen.
BEISPIELE
=========
- Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
- unter den Fuessen knackt, soll man zudem mit 30%-iger
- Wahrscheinlichkeit zusammenzucken:
+ // Beispiel 1:
+ // Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
+ // unter den Fuessen knackt, soll man zudem mit 30%-iger
+ // Wahrscheinlichkeit zusammenzucken:
inherit "/std/room";
void create() {
::create();
- AddRoomMessage( ({ "In der Ferne schreit ein Kaeuzchen.\n",
- "Es raschelt im Gebuesch.\n",
- "Etwas knackt unter Deinen Fuessen.\n" }),
- 30, ({"sound", "sound_more_rnd"}) );
- ...
+ AddRoomMessage(({"In der Ferne schreit ein Kaeuzchen.\n",
+ "Es raschelt im Gebuesch.\n",
+ "Etwas knackt unter Deinen Fuessen.\n"}),
+ 30,
+ ({"sound", "sound_more_rnd"}) );
}
void sound(int msg) {
@@ -88,16 +101,60 @@
}
// Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
- void sound_more_rnd() {
- sound(0); // die Message-Nummer ist hier unwichtig
+ void sound_more_rnd(int msg) {
+ sound(msg);
SetProp(P_MSG_PROB, 25+random(20)); // neue Wartedauer
}
+ // Beispiel 2: Abschalten der Raumnachrichten
+ public int action_laerm(string str);
+ protected void reset_room_messages();
+
+ void create() {
+ ::create();
+ reset_room_messages();
+
+ AddCmd("mach|mache&laerm|krach",
+ "action_laerm",
+ "Was willst du machen?");
+ AddCmd("schlag|schlage&laerm|krach",
+ "action_laerm",
+ "Was willst du schlagen?");
+ }
+
+ protected void reset_room_messages() {
+ AddRoomMessage(({"Das Reh quakt leise.\n",
+ "Der Frosch grunzt.\n",
+ "Gelbe Schnorpfel pupsen im Takt.\n"}),
+ 45);
+ }
+
+ public int action_laerm(string str) {
+ AddRoomMessage((string)0, 0, (string)0);
+
+ this_player()->ReceiveMsg(
+ "Du schreist dir kurz die Seele aus dem Leib. Alle Tiere "
+ "verstummen sofort.", MT_NOTIFICATION);
+ send_room(this_object(),
+ this_player()->Name()+" schreit laut. Alle Tiere verstummen "
+ "sofort.", MT_LISTEN, 0, 0, ({this_player()}));
+ return 1;
+ }
+
+ void reset() {
+ :reset();
+ if(!QueryProp(P_ROOM_MSG))
+ reset_room_messages();
+ }
+
SIEHE AUCH
==========
- Verwandt: tell_room(), ReceiveMsg()
- Props: P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB
+ Verwandt:
+ tell_room(), *send_room()*, *ReceiveMsg()*
-2.Feb 2016 Gloinson
+ Props:
+ *P_MSG_PROB*, *P_FUNC_MSG*, *P_ROOM_MSG*
+
+28. Mar 2016 Gloinson