Fix case of guest not getting properly deleted when logging off. Resolves #1194.

This commit is contained in:
Griatch 2017-02-04 13:06:09 +01:00
parent 3a2638aed5
commit ff1ee76421
4 changed files with 14 additions and 19 deletions

View file

@ -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)

View file

@ -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()

View file

@ -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"

View file

@ -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