Doku: P_MSG_PROB, AddRoomMessage und Props angepasst
* P_MSG_PROB nochmal naeher erklaert, da Name fehlleitet
Change-Id: I5a8b76420c1072caee7f3b0e14f73287e88bf594
diff --git a/doc/sphinx/lfun/AddRoomMessage.rst b/doc/sphinx/lfun/AddRoomMessage.rst
index 150a9cd..53c7b4d 100644
--- a/doc/sphinx/lfun/AddRoomMessage.rst
+++ b/doc/sphinx/lfun/AddRoomMessage.rst
@@ -3,81 +3,84 @@
FUNKTION
--------
-::
void AddRoomMessage(string *msg, int time, mixed *func);
DEFINIERT IN
------------
-::
/std/room/description.c
ARGUMENTE
---------
-::
- msg
+ string* msg
Array von Strings mit den Meldungen.
- time
+ int time
Der Abstand zwischen zwei Meldungen in Sekunden.
- func (optional)
+ 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.
- 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!
+ 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.
+ * 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!
+ * 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:
+ .. code-block:: pike
+
+ // 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) {
@@ -87,17 +90,62 @@
}
// 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
}
+
+ .. code-block:: pike
+
+ // 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 verstimmen "
+ "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(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+ Props:
+ :doc:`../props/P_MSG_PROB`, :doc:`../props/P_FUNC_MSG`, :doc:`../props/P_ROOM_MSG`
-2.Feb 2016 Gloinson
+28. Mar 2016 Gloinson
diff --git a/doc/sphinx/props/P_FUNC_MSG.rst b/doc/sphinx/props/P_FUNC_MSG.rst
index 2acab57..a18d767 100644
--- a/doc/sphinx/props/P_FUNC_MSG.rst
+++ b/doc/sphinx/props/P_FUNC_MSG.rst
@@ -3,19 +3,16 @@
NAME
----
-::
P_FUNC_MSG "func_msg"
DEFINIERT IN
------------
-::
/sys/room/description.h
BESCHREIBUNG
------------
-::
Liste mit Funktionen, die zufaellig im Raum aufgerufen werden.
@@ -24,17 +21,18 @@
ANMERKUNGEN
-----------
-::
Bitte AddRoomMessage() zum Hinzufuegen/Ueberschreiben benutzen!
SIEHE AUCH
----------
-::
- LFuns: AddRoomMessage()
- Verwandt: tell_room(), ReceiveMsg()
- Props: P_ROOM_MSG, P_MSG_PROB
+ LFuns:
+ :doc:`../lfun/AddRoomMessage`
+ Verwandt:
+ tell_room(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+ Props:
+ :doc:`P_MSG_PROB`, :doc:`P_ROOM_MSG`
2.Feb 2016 Gloinson
diff --git a/doc/sphinx/props/P_MSG_PROB.rst b/doc/sphinx/props/P_MSG_PROB.rst
index 1f0e9ea..739aadb 100644
--- a/doc/sphinx/props/P_MSG_PROB.rst
+++ b/doc/sphinx/props/P_MSG_PROB.rst
@@ -3,33 +3,71 @@
NAME
----
-::
-
P_MSG_PROB "msg_prob"
DEFINIERT IN
------------
-::
/sys/room/description.h
BESCHREIBUNG
------------
-::
+ Der Name ist irrefuehrend: es ist ein Parameter fuer die Wartezeit
+ in Sekunden bis zur naechsten Ausgabe einer Raumnachricht.
+ Nur direkt nach dem Betreten des Raums wird ein Zufallswert dieser
+ Zahl erstellt.
- Parameter fuer die Wartezeit in Sekunden bis zur naechsten Ausgabe
- einer Raumnachricht.
- Wird in AddRoomMessage() explizit mitgesetzt. Koennte natuerlich von
- einer Nachrichtenmethode auch regelmaessig geaendert werden, um
- mehr Zufall in die Intervalle zu bringen.
+ Wird in AddRoomMessage() explizit mitgesetzt und gilt fuer den Raum.
+
+ Kann von einer Nachrichtenmethode geaendert werden, um mehr Zufall
+ in die Intervalle zu bringen.
+
+ Werte kleiner als 15 werden bei der Auswertung auf 15 gesetzt. Setzen
+ auf 0 schaltet die Nachrichten nicht ab!
+
+BEISPIELE
+---------
+
+.. code-block:: pike
+
+ // Beispiel:
+ // Je laenger Spieler im Raum sind, desto langsamer tropft das
+ // Wasser. Wenn der letzte den Raum verlaesst, wird die Zeit
+ // fuer den naechsten Spieler wieder auf den Initialwert gesetzt.
+
+ inherit "/std/room";
+
+ #define START_SPEED 30
+
+ void create() {
+ ::create();
+ AddRoomMessage(({"Das Wasser tropft.\n",
+ "Ein Tropfen plitscht.\n",
+ "Tripf tropf macht das Wasser.\n"}),
+ START_SPEED,
+ ({"slowdown_speed"}));
+ }
+
+ void slowdown_speed(int msg) {
+ SetProp(P_MSG_PROB, QueryProp(P_MSG_PROB)+10);
+ }
+
+ void exit() {
+ ::exit();
+
+ if(!sizeof(filter(all_inventory(this_object())-({this_player()}),
+ #'interactive)))
+ SetProp(P_MSG_PROB, START_SPEED);
+ }
SIEHE AUCH
----------
-::
- LFuns: AddRoomMessage()
- Props: P_ROOM_MSG, P_MSG_PROB
- Verwandt: call_out()
+ LFuns:
+ :doc:`../lfun/AddRoomMessage`
+ Props:
+ :doc:`P_ROOM_MSG`, :doc:`P_FUNC_MSG`
+ Verwandt:
+ call_out()
-2.Feb 2016 Gloinson
-
+28. Mar 2017 Gloinson
diff --git a/doc/sphinx/props/P_ROOM_MSG.rst b/doc/sphinx/props/P_ROOM_MSG.rst
index 087f9c2..620af5c 100644
--- a/doc/sphinx/props/P_ROOM_MSG.rst
+++ b/doc/sphinx/props/P_ROOM_MSG.rst
@@ -3,19 +3,16 @@
NAME
----
-::
P_ROOM_MSG "room_msg"
DEFINIERT IN
------------
-::
/sys/room/description.h
BESCHREIBUNG
------------
-::
Liste mit Meldungen, die zufaellig im Raum ausgegeben werden.
@@ -23,17 +20,17 @@
ANMERKUNGEN
-----------
-::
Bitte AddRoomMessage() zum Hinzufuegen/Ueberschreiben benutzen!
SIEHE AUCH
----------
-::
- LFuns: AddRoomMessage()
- Verwandt: tell_room(), ReceiveMsg()
- Props: P_FUNC_MSG, P_MSG_PROB
+ LFuns:
+ :doc:`../lfun/AddRoomMessage`
+ Verwandt:
+ tell_room(), :doc:`../sefun/send_room`, :doc:`../lfun/ReceiveMsg`
+ Props:
+ :doc:`P_MSG_PROB`, :doc:`P_FUNC_MSG`
-2.Feb 2016 Gloinson
-
+2.Feb 2016 Gloinson
\ No newline at end of file