Login/out Callbacks zusammenfassen
Beim Login/Logout/Ende Callbacks an andere Objekte
in einer Funktion zusammenfassen, damit der Kram
einfacher zu finden ist und nicht mehr an verschiedenen
Stellen steht.
Change-Id: I0d39877f1c45bd9405ef51ebc7803aad7c0bd7ad
diff --git a/std/player/moving.c b/std/player/moving.c
index 19b7497..a59d954 100644
--- a/std/player/moving.c
+++ b/std/player/moving.c
@@ -52,16 +52,24 @@
// autoload and nodrop object may not fall into the environment
static varargs int remove( int silent )
{
+ // Andere wollen auch informiert werden ueber den (ggf. impliziten)
+ // Logout.
+ // Achtung: *kein* CNP_FLAG_SILENT - das hat eine andere Bedeutung als das
+ // argument silent hier!
+ if ( interactive(ME) )
+ call_notify_player_change(CNP_FLAG_QUIT);
+
+ // Inventar aufraeumen
object* dest_obj = filter( deep_inventory(ME) - ({0}), "_to_remove" );
filter_objects( dest_obj, "remove" );
filter( dest_obj - ({0}), #'destruct );
if ( !QueryProp(P_INVIS) && !silent )
catch( say( name(WER, 1) + " verlaesst diese Welt.\n", ME );publish );
-
if ( ME && !silent )
tell_object( ME, "Bis bald!\n" );
+ // Logmeldung, wenn jemand einen Spieler zerstoert.
// Im Falle des Resets ist previous_object() == ME, aber
// previous_object(0) == 0. Ausserdem ist der Caller-Stack leer. Also
// schauen, ob es ein PO gibt, was nicht gleich dem Objekt selber ist, TI
@@ -75,13 +83,7 @@
dtime(time()), ME, previous_object(),
this_interactive(), this_player() ) );
- // Logout-event ausloesen
- EVENTD->TriggerEvent(EVT_LIB_LOGOUT, ([
- E_OBJECT: ME,
- E_PLNAME: getuid(ME),
- E_ENVIRONMENT: environment() ]) );
-
- return ::remove();
+ return ::remove(silent);
}
public string NotifyDestruct(object caller) {