blob: 4fc2a2bfa78a9961da2b32651192e5050147927e [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001AddRoomMessage()
Zesstra953f9972017-02-18 15:37:36 +01002****************
MG Mud User88f12472016-06-24 23:31:02 +02003
MG Mud User88f12472016-06-24 23:31:02 +02004
Zesstra953f9972017-02-18 15:37:36 +01005FUNKTION
6========
MG Mud User88f12472016-06-24 23:31:02 +02007
Zesstra0c1a85a2018-02-07 23:46:50 +01008 void AddRoomMessage(string* msg, int time, mixed* func);
MG Mud User88f12472016-06-24 23:31:02 +02009
MG Mud User88f12472016-06-24 23:31:02 +020010
Zesstra953f9972017-02-18 15:37:36 +010011DEFINIERT IN
12============
MG Mud User88f12472016-06-24 23:31:02 +020013
Zesstra953f9972017-02-18 15:37:36 +010014 /std/room/description.c
MG Mud User88f12472016-06-24 23:31:02 +020015
MG Mud User88f12472016-06-24 23:31:02 +020016
Zesstra953f9972017-02-18 15:37:36 +010017ARGUMENTE
18=========
MG Mud User88f12472016-06-24 23:31:02 +020019
Zesstra0c1a85a2018-02-07 23:46:50 +010020 string* msg
21 Array von Strings mit den Meldungen.
22
23 int time
24 Der Abstand zwischen zwei Meldungen in Sekunden.
25
26 string|string* func (optional)
27 String oder Array von Strings mit Funktionsnamen
MG Mud User88f12472016-06-24 23:31:02 +020028
MG Mud User88f12472016-06-24 23:31:02 +020029
Zesstra953f9972017-02-18 15:37:36 +010030BESCHREIBUNG
31============
MG Mud User88f12472016-06-24 23:31:02 +020032
Zesstra0c1a85a2018-02-07 23:46:50 +010033 Mit dieser Funktion legt man fest, dass in bestimmten
34 Zeitabstaenden Meldungen an den Raum geschickt werden sollen.
MG Mud User88f12472016-06-24 23:31:02 +020035
Zesstra0c1a85a2018-02-07 23:46:50 +010036 Es wird alle 'time' Sekunden (beim ersten Betreten durch einen
37 Spieler ein random() des Wertes) zufaellig eine der in msg
38 angegebenen Meldungen ausgegeben. Hat man func angegeben, so wird
39 diese Funktion (bei einem Array: eine zufaellig ausgesuchte
40 Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion
41 die Nummer der ggf zuvor ausgegebenen Meldung (Default also 0).
Zesstra953f9972017-02-18 15:37:36 +010042
Zesstra0c1a85a2018-02-07 23:46:50 +010043 Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert,
44 sollte man folgendes bedenken (Fazit: weniger ist mehr):
45
46 * Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern
47 auf die Nerven zu gehen.
48
49 * Die das Timing steuernden call_out() sind nicht umsonst.
Zesstra953f9972017-02-18 15:37:36 +010050
51
52BEMERKUNGEN
53===========
54
Zesstra0c1a85a2018-02-07 23:46:50 +010055 * falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet
56
Zesstrae959e722025-07-09 22:11:16 +020057 * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
58 ueberschreibt alle vorherigen Werte
Zesstra0c1a85a2018-02-07 23:46:50 +010059
60 * this_player() NICHT VERWENDEN!
61
62 * Abschalten der Raumnachrichten:
63
Zesstrae959e722025-07-09 22:11:16 +020064 * passiert automatisch nur, wenn alle Spieler den Raum verlassen
65 haben
Zesstra0c1a85a2018-02-07 23:46:50 +010066
Zesstrae959e722025-07-09 22:11:16 +020067 * ist manuell nur ueber Loeschen der Nachrichten umsetzbar, also
68 mit "AddRoomMessage(0, 0, 0);"
Zesstra0c1a85a2018-02-07 23:46:50 +010069
Zesstra953f9972017-02-18 15:37:36 +010070 In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
Zesstra0c1a85a2018-02-07 23:46:50 +010071 this_player() nicht verwendet werden, da die call_out()-Kette den
72 ersten ausloesenden Spieler speichert. Anwesende Spieler also bitte
73 ggf mit "filter(all_inventory(this_object()), #'interactive)"
74 suchen.
Zesstra953f9972017-02-18 15:37:36 +010075
76
77BEISPIELE
78=========
79
Zesstra0c1a85a2018-02-07 23:46:50 +010080 // Beispiel 1:
81 // Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es
82 // unter den Fuessen knackt, soll man zudem mit 30%-iger
83 // Wahrscheinlichkeit zusammenzucken:
Zesstra953f9972017-02-18 15:37:36 +010084
85 inherit "/std/room";
86
87 void create() {
88 ::create();
Zesstra0c1a85a2018-02-07 23:46:50 +010089 AddRoomMessage(({"In der Ferne schreit ein Kaeuzchen.\n",
90 "Es raschelt im Gebuesch.\n",
91 "Etwas knackt unter Deinen Fuessen.\n"}),
92 30,
93 ({"sound", "sound_more_rnd"}) );
Zesstra953f9972017-02-18 15:37:36 +010094 }
95
96 void sound(int msg) {
97 if (msg == 2) // Es hat geknackt...
98 if (random(10) < 3) // Schreck lass nach! ;-)
99 tell_room(this_object(), "Erschrocken faehrst Du zusammen!\n" );
100 }
101
102 // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
Zesstra0c1a85a2018-02-07 23:46:50 +0100103 void sound_more_rnd(int msg) {
104 sound(msg);
Zesstra953f9972017-02-18 15:37:36 +0100105 SetProp(P_MSG_PROB, 25+random(20)); // neue Wartedauer
106 }
107
Zesstra0c1a85a2018-02-07 23:46:50 +0100108 // Beispiel 2: Abschalten der Raumnachrichten
109 public int action_laerm(string str);
110 protected void reset_room_messages();
111
112 void create() {
113 ::create();
114 reset_room_messages();
115
116 AddCmd("mach|mache&laerm|krach",
117 "action_laerm",
118 "Was willst du machen?");
119 AddCmd("schlag|schlage&laerm|krach",
120 "action_laerm",
121 "Was willst du schlagen?");
122 }
123
124 protected void reset_room_messages() {
125 AddRoomMessage(({"Das Reh quakt leise.\n",
126 "Der Frosch grunzt.\n",
127 "Gelbe Schnorpfel pupsen im Takt.\n"}),
128 45);
129 }
130
131 public int action_laerm(string str) {
Arathorn41004de2020-10-18 22:03:28 +0200132 AddRoomMessage(0, 0, 0);
Zesstra0c1a85a2018-02-07 23:46:50 +0100133
134 this_player()->ReceiveMsg(
135 "Du schreist dir kurz die Seele aus dem Leib. Alle Tiere "
136 "verstummen sofort.", MT_NOTIFICATION);
137 send_room(this_object(),
138 this_player()->Name()+" schreit laut. Alle Tiere verstummen "
139 "sofort.", MT_LISTEN, 0, 0, ({this_player()}));
140 return 1;
141 }
142
143 void reset() {
144 :reset();
145 if(!QueryProp(P_ROOM_MSG))
146 reset_room_messages();
147 }
148
Zesstra953f9972017-02-18 15:37:36 +0100149
150SIEHE AUCH
151==========
152
Zesstra0c1a85a2018-02-07 23:46:50 +0100153 Verwandt:
Zesstra6cadc1b2018-11-15 22:27:32 +0100154 tell_room(), send_room(), ReceiveMsg()
MG Mud User88f12472016-06-24 23:31:02 +0200155
Zesstra0c1a85a2018-02-07 23:46:50 +0100156 Props:
Zesstra6cadc1b2018-11-15 22:27:32 +0100157 P_MSG_PROB, P_FUNC_MSG, P_ROOM_MSG
Zesstra0c1a85a2018-02-07 23:46:50 +0100158
15928. Mar 2016 Gloinson