MG Mud User | 88f1247 | 2016-06-24 23:31:02 +0200 | [diff] [blame^] | 1 | AddRoomMessage() |
| 2 | |
| 3 | FUNKTION: |
| 4 | void AddRoomMessage(string *msg, int time, mixed *func); |
| 5 | |
| 6 | DEFINIERT IN: |
| 7 | /std/room/description.c |
| 8 | |
| 9 | ARGUMENTE: |
| 10 | msg |
| 11 | Array von Strings mit den Meldungen. |
| 12 | time |
| 13 | Der Abstand zwischen zwei Meldungen in Sekunden. |
| 14 | func (optional) |
| 15 | String oder Array von Strings mit Funktionsnamen |
| 16 | |
| 17 | BESCHREIBUNG: |
| 18 | Mit dieser Funktion legt man fest, dass in bestimmten Zeitabstaenden |
| 19 | Meldungen an den Raum geschickt werden sollen. |
| 20 | |
| 21 | Es wird alle time Sekunden zufaellig eine der in msg angegebenen |
| 22 | Meldungen ausgegeben. Hat man auch noch func angegeben, so wird |
| 23 | zusaetzlich diese Funktion (bei einem Array: eine zufaellig ausgesuchte |
| 24 | Funktion) im Raum aufgerufen. Als Parameter bekommt die Funktion die |
| 25 | Nummer der ausgegebenen Meldung. |
| 26 | |
| 27 | Bevor man allerdings jeden Raum mit AddRoomMessage() pflastert, sollte |
| 28 | man folgendes bedenken: |
| 29 | o Viele Meldungen in vielen Raeumen tendieren dazu, den Spielern auf |
| 30 | die Nerven zu gehen! |
| 31 | o Da das Timing ueber einen call_out() gesteuert wird, ist das Ganze |
| 32 | aus Sicht des GameDrivers auch noch relativ teuer! |
| 33 | Fazit: weniger ist mehr! |
| 34 | |
| 35 | BEMERKUNGEN: |
| 36 | * Falls time < 15 Sekunden ist, wird auf 15 Sekunden aufgerundet. |
| 37 | * der Praefix Add... taeuscht hier. Ein Aufruf von AddRoomMessage() |
| 38 | ueberschreibt alle vorherigen Werte |
| 39 | * THIS_PLAYER() NICHT VERWENDEN! |
| 40 | In Funktionen, die durch AddRoomMessage() ausgeloest werden, darf |
| 41 | this_player() nicht verwendet werden. AddRoomMessage ist call_out- |
| 42 | gesteuert und speichert somit das this_player(). Damit ist this_player() |
| 43 | immer der Spieler, der den Raum geladen, also den Raum als erster |
| 44 | betreten hat. |
| 45 | Spieler also bitte selbst ueber filter(all_inventory(this_object()), |
| 46 | #'interactive) suchen. |
| 47 | |
| 48 | BEISPIELE: |
| 49 | Es soll alle halbe Minute eine Meldung ausgegeben werden. Falls es |
| 50 | unter den Fuessen knackt, soll man zudem mit 30%-iger |
| 51 | Wahrscheinlichkeit zusammenzucken: |
| 52 | |
| 53 | inherit "/std/room"; |
| 54 | |
| 55 | void create() { |
| 56 | ::create(); |
| 57 | AddRoomMessage( ({ "In der Ferne schreit ein Kaeuzchen.\n", |
| 58 | "Es raschelt im Gebuesch.\n", |
| 59 | "Etwas knackt unter Deinen Fuessen.\n" }), |
| 60 | 30, ({"sound", "sound_more_rnd"}) ); |
| 61 | ... |
| 62 | } |
| 63 | |
| 64 | void sound(int msg) { |
| 65 | if (msg == 2) // Es hat geknackt... |
| 66 | if (random(10) < 3) // Schreck lass nach! ;-) |
| 67 | tell_room(this_object(), "Erschrocken faehrst Du zusammen!\n" ); |
| 68 | } |
| 69 | |
| 70 | // Extra-Beispiel: wir setzen die Wartedauer (Parameter tim) neu |
| 71 | void sound_more_rnd() { |
| 72 | sound(0); // die Message-Nummer ist hier unwichtig |
| 73 | SetProp(P_MSG_PROB, 25+random(20)); // neue Wartedauer |
| 74 | } |
| 75 | |
| 76 | SIEHE AUCH: |
| 77 | Verwandt: tell_room(), ReceiveMsg() |
| 78 | Props: P_ROOM_MSG, P_FUNC_MSG, P_MSG_PROB |
| 79 | |
| 80 | 2.Feb 2016 Gloinson |