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