blob: 47e2b60fd29dfcaeda09f33ecb645509e55c3e94 [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
Zesstra0c1a85a2018-02-07 23:46:50 +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
Zesstra0c1a85a2018-02-07 23:46:50 +010021 string* msg
22 Array von Strings mit den Meldungen.
23
24 int time
25 Der Abstand zwischen zwei Meldungen in Sekunden.
26
27 string|string* func (optional)
28 String oder Array von Strings mit Funktionsnamen
MG Mud User88f12472016-06-24 23:31:02 +020029
MG Mud User88f12472016-06-24 23:31:02 +020030
Zesstra953f9972017-02-18 15:37:36 +010031BESCHREIBUNG
32============
MG Mud User88f12472016-06-24 23:31:02 +020033
Zesstra0c1a85a2018-02-07 23:46:50 +010034 Mit dieser Funktion legt man fest, dass in bestimmten
35 Zeitabstaenden Meldungen an den Raum geschickt werden sollen.
MG Mud User88f12472016-06-24 23:31:02 +020036
Zesstra0c1a85a2018-02-07 23:46:50 +010037 Es wird alle 'time' Sekunden (beim ersten Betreten durch einen
38 Spieler ein random() des Wertes) zufaellig eine der in msg
39 angegebenen Meldungen ausgegeben. Hat man func angegeben, so wird
40 diese Funktion (bei einem Array: eine zufaellig ausgesuchte
41 Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion
42 die Nummer der ggf zuvor ausgegebenen Meldung (Default also 0).
Zesstra953f9972017-02-18 15:37:36 +010043
Zesstra0c1a85a2018-02-07 23:46:50 +010044 Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert,
45 sollte man folgendes bedenken (Fazit: weniger ist mehr):
46
47 * Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern
48 auf die Nerven zu gehen.
49
50 * Die das Timing steuernden call_out() sind nicht umsonst.
Zesstra953f9972017-02-18 15:37:36 +010051
52
53BEMERKUNGEN
54===========
55
Zesstra0c1a85a2018-02-07 23:46:50 +010056 * falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet
57
58 * der Praefix Add... taeuscht hier. Ein Aufruf von
59 AddRoomMessage() ueberschreibt alle vorherigen Werte
60
61 * this_player() NICHT VERWENDEN!
62
63 * Abschalten der Raumnachrichten:
64
65 * passiert automatisch nur, wenn alle Spieler den Raum
66 verlassen haben
67
68 * ist manuell nur ueber Loeschen der Nachrichten umsetzbar,
Arathorn41004de2020-10-18 22:03:28 +020069 also mit "AddRoomMessage(0, 0, 0);"
Zesstra0c1a85a2018-02-07 23:46:50 +010070
Zesstra953f9972017-02-18 15:37:36 +010071 In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
Zesstra0c1a85a2018-02-07 23:46:50 +010072 this_player() nicht verwendet werden, da die call_out()-Kette den
73 ersten ausloesenden Spieler speichert. Anwesende Spieler also bitte
74 ggf mit "filter(all_inventory(this_object()), #'interactive)"
75 suchen.
Zesstra953f9972017-02-18 15:37:36 +010076
77
78BEISPIELE
79=========
80
Zesstra0c1a85a2018-02-07 23:46:50 +010081 // Beispiel 1:
82 // Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
83 // unter den Fuessen knackt, soll man zudem mit 30%-iger
84 // Wahrscheinlichkeit zusammenzucken:
Zesstra953f9972017-02-18 15:37:36 +010085
86 inherit "/std/room";
87
88 void create() {
89 ::create();
Zesstra0c1a85a2018-02-07 23:46:50 +010090 AddRoomMessage(({"In der Ferne schreit ein Kaeuzchen.\n",
91 "Es raschelt im Gebuesch.\n",
92 "Etwas knackt unter Deinen Fuessen.\n"}),
93 30,
94 ({"sound", "sound_more_rnd"}) );
Zesstra953f9972017-02-18 15:37:36 +010095 }
96
97 void sound(int msg) {
98 if (msg == 2) // Es hat geknackt...
99 if (random(10) < 3) // Schreck lass nach! ;-)
100 tell_room(this_object(), "Erschrocken faehrst Du zusammen!\n" );
101 }
102
103 // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
Zesstra0c1a85a2018-02-07 23:46:50 +0100104 void sound_more_rnd(int msg) {
105 sound(msg);
Zesstra953f9972017-02-18 15:37:36 +0100106 SetProp(P_MSG_PROB, 25+random(20)); // neue Wartedauer
107 }
108
Zesstra0c1a85a2018-02-07 23:46:50 +0100109 // Beispiel 2: Abschalten der Raumnachrichten
110 public int action_laerm(string str);
111 protected void reset_room_messages();
112
113 void create() {
114 ::create();
115 reset_room_messages();
116
117 AddCmd("mach|mache&laerm|krach",
118 "action_laerm",
119 "Was willst du machen?");
120 AddCmd("schlag|schlage&laerm|krach",
121 "action_laerm",
122 "Was willst du schlagen?");
123 }
124
125 protected void reset_room_messages() {
126 AddRoomMessage(({"Das Reh quakt leise.\n",
127 "Der Frosch grunzt.\n",
128 "Gelbe Schnorpfel pupsen im Takt.\n"}),
129 45);
130 }
131
132 public int action_laerm(string str) {
Arathorn41004de2020-10-18 22:03:28 +0200133 AddRoomMessage(0, 0, 0);
Zesstra0c1a85a2018-02-07 23:46:50 +0100134
135 this_player()->ReceiveMsg(
136 "Du schreist dir kurz die Seele aus dem Leib. Alle Tiere "
137 "verstummen sofort.", MT_NOTIFICATION);
138 send_room(this_object(),
139 this_player()->Name()+" schreit laut. Alle Tiere verstummen "
140 "sofort.", MT_LISTEN, 0, 0, ({this_player()}));
141 return 1;
142 }
143
144 void reset() {
145 :reset();
146 if(!QueryProp(P_ROOM_MSG))
147 reset_room_messages();
148 }
149
Zesstra953f9972017-02-18 15:37:36 +0100150
151SIEHE AUCH
152==========
153
Zesstra0c1a85a2018-02-07 23:46:50 +0100154 Verwandt:
Zesstra6cadc1b2018-11-15 22:27:32 +0100155 tell_room(), send_room(), ReceiveMsg()
MG Mud User88f12472016-06-24 23:31:02 +0200156
Zesstra0c1a85a2018-02-07 23:46:50 +0100157 Props:
Zesstra6cadc1b2018-11-15 22:27:32 +0100158 P_MSG_PROB, P_FUNC_MSG, P_ROOM_MSG
Zesstra0c1a85a2018-02-07 23:46:50 +0100159
16028. Mar 2016 Gloinson