Morgengrauner Dokumentation
Dateipfad: /home/mud/mudlib/doc//lfun/AddRoomMessageAddRoomMessage()
****************
FUNKTION
========
void AddRoomMessage(string* msg, int time, mixed* func);
DEFINIERT IN
============
/std/room/description.c
ARGUMENTE
=========
string* msg
Array von Strings mit den Meldungen.
int time
Der Abstand zwischen zwei Meldungen in Sekunden.
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 (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 (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
* der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage()
ueberschreibt alle vorherigen Werte
* 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(0, 0, 0);"
In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf
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
=========
// 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"}) );
}
void sound(int msg) {
if (msg == 2) // Es hat geknackt...
if (random(10) < 3) // Schreck lass nach! ;-)
tell_room(this_object(), "Erschrocken faehrst Du zusammen!\n" );
}
// Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu
void sound_more_rnd(int msg) {
sound(msg);
SetProp(P_MSG_PROB, 25+random(20)); // neue Wartedauer
}
// 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(0, 0, 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 verstummen "
"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(), send_room(), ReceiveMsg()
Props:
P_MSG_PROB, P_FUNC_MSG, P_ROOM_MSG
28. Mar 2016 Gloinson
zurück zur Übersicht