| AddRoomMessage() |
| **************** |
| |
| |
| 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 |