Platzhalter fuer Haltepunkt eingefuehrt
Dient primaer als Ersatz fuer process_string(), denn
die haeufigste Nutzung war bisher, das Ergebnis von
QueryArrived() dort einfuegen zu lassen. Damit nicht
jeder Nutzer eine Querymethode fuer die Properties
schreiben muss, bietet das Standardobjekt die Funktion
jetzt auf desem Weg an.
Die Meldung wird jetzt auch von diesem Objekt umbrochen,
weil der Nutzer nicht ohne weiteres rausfindet, wie lang
der Ausgabestring eigentlich sein wird, um korrekt selbst
zu umbrechen. Zudem wuerde das wieder eine Querymethode
erfordern, weil die Meldung bei jedem Haltepunkt unterschiedlich
lang sein kann.
Die Ausgabe der Meldungen wurde auf send_room() bzw.
ReceiveMsg() umgestellt.
Change-Id: If40946c99ab0aebf3be8456b5adbfd5f457df1b7
diff --git a/doc/sphinx/props/P_ARRIVEMSG.rst b/doc/sphinx/props/P_ARRIVEMSG.rst
index 9adeb84..fb70ed9 100644
--- a/doc/sphinx/props/P_ARRIVEMSG.rst
+++ b/doc/sphinx/props/P_ARRIVEMSG.rst
@@ -19,12 +19,19 @@
Die Property enthaelt die Meldungen, die beim Erreichen eines
Haltepunktes an die Reisenden und an den Haltepunkt-Raum ausgegeben
- werden. Sie muss ein String-Array mit zwei Elementen enthalten.
+ werden. Sie muss ein String-Array mit zwei Elementen enthalten, von
+ denen die erste an den Reisenden, die zweite an den Haltepunkt
+ gesendet werden.
- Fuer den Umbruch muss der Nutzer selbst Sorge tragen.
+ Der Platzhalter @WO kann verwendet werden, um die Bezeichnung des
+ aktuellen Haltepunktes (Rueckgabewert von QueryArrived()) einfuegen
+ zu lassen. Es werden alle Vorkommen des Platzhalters ersetzt.
+
+ Die Meldungen werden mit BS_LEAVE_MY_LFS umbrochen, d.h. man kann bei
+ Bedarf eigene Umbrueche einfuegen.
LETZTE AENDERUNG
----------------
::
- 2020-09-01 Arathorn
+ 2020-09-06 Arathorn
diff --git a/doc/sphinx/props/P_DEPARTMSG.rst b/doc/sphinx/props/P_DEPARTMSG.rst
index 266ad28..d900a2a 100644
--- a/doc/sphinx/props/P_DEPARTMSG.rst
+++ b/doc/sphinx/props/P_DEPARTMSG.rst
@@ -19,12 +19,19 @@
Die Property enthaelt die Meldungen, die beim Verlassen eines
Haltepunktes an die Reisenden und an den Haltepunkt-Raum ausgegeben
- werden. Sie muss ein String-Array mit zwei Elementen enthalten.
+ werden. Sie muss ein String-Array mit zwei Elementen enthalten, von
+ denen die erste an den Reisenden, die zweite an den Haltepunkt
+ gesendet werden.
- Fuer den Umbruch muss der Nutzer selbst Sorge tragen.
+ Der Platzhalter @WO kann verwendet werden, um die Bezeichnung des
+ aktuellen Haltepunktes (Rueckgabewert von QueryArrived()) einfuegen
+ zu lassen. Es werden alle Vorkommen des Platzhalters ersetzt.
+
+ Die Meldungen werden mit BS_LEAVE_MY_LFS umbrochen, d.h. man kann bei
+ Bedarf eigene Umbrueche einfuegen.
LETZTE AENDERUNG
----------------
::
- 2020-09-01 Arathorn
+ 2020-09-06 Arathorn
diff --git a/std/transport.c b/std/transport.c
index 9fbe381..af68623 100644
--- a/std/transport.c
+++ b/std/transport.c
@@ -17,6 +17,7 @@
#include <transport.h>
#include <regexp.h>
#include <hook.h>
+#include <break_string.h>
/* transport.c
@@ -479,15 +480,19 @@
static varargs void disconnect(int change, int change_time)
{
- object room;
- mixed *departmsg;
+ string* departmsg = ({string*})QueryProp(P_DEPARTMSG);
+ string departmsg_me = regreplace(departmsg[0], "@WO", QueryArrived(), 1);
+ string departmsg_env = regreplace(departmsg[1], "@WO", QueryArrived(), 1);
- departmsg = QueryProp(P_DEPARTMSG);
+ send_room(this_object(),
+ break_string(departmsg_me, 78, 0, BS_LEAVE_MY_LFS),
+ MT_LOOK|MT_LISTEN);
- if ((room = environment()) && pointerp(departmsg))
+ if (objectp(environment()))
{
- tell_room(this_object(),process_string(departmsg[0]));
- tell_room(room,process_string(departmsg[1]));
+ send_room(environment(),
+ break_string(departmsg_env, 78, 0, BS_LEAVE_MY_LFS),
+ MT_LOOK|MT_LISTEN);
}
roomCode = 0;
@@ -497,8 +502,9 @@
static varargs void connect(string room, string code)
{
- mixed *arrivemsg, *t;
- object *trav;
+ mixed *t;
+ object *trav, ob;
+ string *trs, *msgs;
int i;
if (roomCode) disconnect();
@@ -511,13 +517,16 @@
return;
}
- arrivemsg = QueryProp(P_ARRIVEMSG);
+ string* arrivemsg = ({string*})QueryProp(P_ARRIVEMSG);
+ string arrivemsg_me = regreplace(arrivemsg[0], "@WO", QueryArrived(), 1);
+ string arrivemsg_env = regreplace(arrivemsg[1], "@WO", QueryArrived(), 1);
- if (pointerp(arrivemsg))
- {
- tell_room(this_object(),process_string(arrivemsg[0]));
- tell_room(room,process_string(arrivemsg[1]));
- }
+ send_room(this_object(),
+ break_string(arrivemsg_me, 78, 0, BS_LEAVE_MY_LFS),
+ MT_LOOK|MT_LISTEN);
+ send_room(room,
+ break_string(arrivemsg_env, 78, 0, BS_LEAVE_MY_LFS),
+ MT_LOOK|MT_LISTEN);
trav = filter(all_inventory(this_object()),#'living);