blob: 150a9cd13a48e56994c9719175ad8816ab220cbf [file] [log] [blame]
Zesstra18626972017-01-31 10:38:27 +01001AddRoomMessage()
2================
3
4FUNKTION
5--------
6::
7
8 void AddRoomMessage(string *msg, int time, mixed *func);
9
10DEFINIERT IN
11------------
12::
13
14 /std/room/description.c
15
16ARGUMENTE
17---------
18::
19
20 msg
21 Array von Strings mit den Meldungen.
22 time
23 Der Abstand zwischen zwei Meldungen in Sekunden.
24 func (optional)
25 String oder Array von Strings mit Funktionsnamen
26
27BESCHREIBUNG
28------------
29::
30
31 Mit dieser Funktion legt man fest, dass in bestimmten Zeitabstaenden
32 Meldungen an den Raum geschickt werden sollen.
33
34 Es wird alle time Sekunden zufaellig eine der in msg angegebenen
35 Meldungen ausgegeben. Hat man auch noch func angegeben, so wird
36 zusaetzlich diese Funktion (bei einem Array: eine zufaellig ausgesuchte
37 Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion die
38 Nummer der ausgegebenen Meldung.
39
40 Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert, sollte
41 man folgendes bedenken:
42 o Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf
43 die Nerven zu gehen!
44 o Da das Timing ueber einen call_out() gesteuert wird, ist das Ganze
45 aus Sicht des GameDrivers auch noch relativ teuer!
46 Fazit: weniger ist mehr!
47
48BEMERKUNGEN
49-----------
50::
51
52 * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet.
53 * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
54 ueberschreibt alle vorherigen Werte
55 * THIS_PLAYER() NICHT VERWENDEN!
56 In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
57 this_player() nicht verwendet werden. AddRoomMessage ist call_out-
58 gesteuert und speichert somit das this_player(). Damit ist this_player()
59 immer der Spieler, der den Raum geladen, also den Raum als erster
60 betreten hat.
61 Spieler also bitte selbst ueber filter(all_inventory(this_object()),
62 #'interactive) suchen.
63
64BEISPIELE
65---------
66::
67
68 Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
69 unter den Fuessen knackt, soll man zudem mit 30%-iger
70 Wahrscheinlichkeit zusammenzucken:
71
72 inherit "/std/room";
73
74 void create() {
75 ::create();
76 AddRoomMessage( ({ "In der Ferne schreit ein Kaeuzchen.\n",
77 "Es raschelt im Gebuesch.\n",
78 "Etwas knackt unter Deinen Fuessen.\n" }),
79 30, ({"sound", "sound_more_rnd"}) );
80 ...
81 }
82
83 void sound(int msg) {
84 if (msg == 2) // Es hat geknackt...
85 if (random(10) < 3) // Schreck lass nach! ;-)
86 tell_room(this_object(), "Erschrocken faehrst Du zusammen!\n" );
87 }
88
89 // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
90 void sound_more_rnd() {
91 sound(0); // die Message-Nummer ist hier unwichtig
92 SetProp(P_MSG_PROB, 25+random(20)); // neue Wartedauer
93 }
94
95SIEHE AUCH
96----------
97::
98
99 Verwandt: tell_room(), ReceiveMsg()
100 Props: P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB
101
1022.Feb 2016 Gloinson
103