From ff1ee764217e595d0c70dbeb7722b0563b9e8346 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 4 Feb 2017 13:06:09 +0100 Subject: [PATCH] Fix case of guest not getting properly deleted when logging off. Resolves #1194. --- evennia/commands/default/player.py | 6 +++--- evennia/players/players.py | 22 ++++++++-------------- evennia/settings_default.py | 3 ++- evennia/typeclasses/attributes.py | 2 +- 4 files changed, 14 insertions(+), 19 deletions(-) diff --git a/evennia/commands/default/player.py b/evennia/commands/default/player.py index f41bd05526..b7015261dc 100644 --- a/evennia/commands/default/player.py +++ b/evennia/commands/default/player.py @@ -665,12 +665,12 @@ class CmdQuit(COMMAND_DEFAULT_CLASS): else: nsess = len(player.sessions.all()) if nsess == 2: - player.msg("{RQuitting{n. One session is still connected.", session=self.session) + player.msg("|RQuitting|n. One session is still connected.", session=self.session) elif nsess > 2: - player.msg("{RQuitting{n. %i session are still connected." % (nsess-1), session=self.session) + player.msg("|RQuitting|n. %i sessions are still connected." % (nsess-1), session=self.session) else: # we are quitting the last available session - player.msg("{RQuitting{n. Hope to see you again, soon.", session=self.session) + player.msg("|RQuitting|n. Hope to see you again, soon.", session=self.session) player.disconnect_session_from_player(self.session) diff --git a/evennia/players/players.py b/evennia/players/players.py index 094790de81..92d5dbcf24 100644 --- a/evennia/players/players.py +++ b/evennia/players/players.py @@ -910,16 +910,6 @@ class DefaultGuest(DefaultPlayer): self._send_to_connect_channel("|G%s connected|n" % self.key) self.puppet_object(session, self.db._last_puppet) - def at_disconnect(self): - """ - A Guest's characters aren't meant to linger on the server. - When a Guest disconnects, we remove its character. - - """ - super(DefaultGuest, self).at_disconnect() - characters = self.db._playable_characters - for character in characters: - if character: character.delete() def at_server_shutdown(self): """ @@ -929,13 +919,17 @@ class DefaultGuest(DefaultPlayer): super(DefaultGuest, self).at_server_shutdown() characters = self.db._playable_characters for character in characters: - if character: character.delete() + if character: + print "deleting Character:", character + character.delete() def at_post_disconnect(self): """ - Guests aren't meant to linger on the server, either. We need - to wait until after the Guest disconnects to delete it, - though. + Once having disconnected, destroy the guest's characters and """ super(DefaultGuest, self).at_post_disconnect() + characters = self.db._playable_characters + for character in characters: + if character: + character.delete() self.delete() diff --git a/evennia/settings_default.py b/evennia/settings_default.py index 822f082cc8..1a21e52eb4 100644 --- a/evennia/settings_default.py +++ b/evennia/settings_default.py @@ -479,7 +479,8 @@ CLIENT_DEFAULT_HEIGHT = 45 # telnet standard is 24 but does anyone use such # Guest accounts ###################################################################### -# This enables guest logins, by default via "connect guest" +# This enables guest logins, by default via "connect guest". Note that +# you need to edit your login screen to inform about this possibility. GUEST_ENABLED = False # Typeclass for guest player objects (linked to a character) BASE_GUEST_TYPECLASS = "typeclasses.players.Guest" diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index c2c22bd8d0..4a415aaf7f 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -620,7 +620,7 @@ class AttributeHandler(object): [attr.delete() for attr in self._cache.values() if attr.access(accessing_obj, self._attredit, default=default_access)] else: - [attr.delete() for attr in self._cache.values()] + [attr.delete() for attr in self._cache.values() if attr.pk] self._cache = {} self._catcache = {} self._cache_complete = False