From 7f20631bfcb93d797993ff44cbf32af3350ced75 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 7 Mar 2015 22:55:01 +0100 Subject: [PATCH] Fixed a very silly bug in CmdUnloggedinCreate where the default location was set on the character even though the Player hadn't actually logged in yet. This meant that the Character (in MULTISESSION_MODEs < 2) would pop up in the start location and stay there also if the Player never actually connected to the game. This is most likely the reason for zombie player remnants that have been around for so long and should thus have an impact also on #498. --- evennia/commands/default/unloggedin.py | 20 +++++++----------- evennia/objects/objects.py | 2 +- .../server/profiling/dummyrunner_settings.py | 21 +++++++++++++------ evennia/server/sessionhandler.py | 1 - 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/evennia/commands/default/unloggedin.py b/evennia/commands/default/unloggedin.py index 1faf515677..4c4d34cf9e 100644 --- a/evennia/commands/default/unloggedin.py +++ b/evennia/commands/default/unloggedin.py @@ -129,11 +129,10 @@ class CmdUnconnectedConnect(MuxCommand): permissions = settings.PERMISSION_GUEST_DEFAULT typeclass = settings.BASE_CHARACTER_TYPECLASS ptypeclass = settings.BASE_GUEST_TYPECLASS - start_location = ObjectDB.objects.get_id(settings.GUEST_START_LOCATION) new_player = _create_player(session, playername, password, home, permissions, ptypeclass) if new_player: - _create_character(session, new_player, typeclass, start_location, + _create_character(session, new_player, typeclass, home, permissions) session.sessionhandler.login(session, new_player) @@ -265,14 +264,13 @@ class CmdUnconnectedCreate(MuxCommand): # everything's ok. Create the new player account. try: - default_home = ObjectDB.objects.get_id(settings.DEFAULT_HOME) permissions = settings.PERMISSION_PLAYER_DEFAULT typeclass = settings.BASE_CHARACTER_TYPECLASS - new_player = _create_player(session, playername, password, default_home, permissions) - start_location = ObjectDB.objects.get_id(settings.START_LOCATION) + new_player = _create_player(session, playername, password, permissions) if new_player: if MULTISESSION_MODE < 2: - _create_character(session, new_player, typeclass, start_location, + default_home = ObjectDB.objects.get_id(settings.DEFAULT_HOME) + _create_character(session, new_player, typeclass, default_home, permissions) # tell the caller everything went well. string = "A new account '%s' was created. Welcome!" @@ -438,8 +436,7 @@ class CmdUnconnectedEncoding(MuxCommand): self.caller.msg(string.strip()) -def _create_player(session, playername, password, - default_home, permissions, typeclass=None): +def _create_player(session, playername, password, permissions, typeclass=None): """ Helper function, creates a player of the specified typeclass. """ @@ -465,17 +462,14 @@ def _create_player(session, playername, password, return new_player -def _create_character(session, new_player, typeclass, start_location, home, permissions): +def _create_character(session, new_player, typeclass, home, permissions): """ Helper function, creates a character based on a player's name. This is meant for Guest and MULTISESSION_MODE < 2 situations. """ try: - if not start_location: - start_location = home # fallback new_character = create.create_object(typeclass, key=new_player.key, - location=start_location, home=home, - permissions=permissions) + home=home, permissions=permissions) # set playable character list new_player.db._playable_characters.append(new_character) diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 7b0db04638..bb1c9bc534 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -26,7 +26,7 @@ from evennia.scripts.scripthandler import ScriptHandler from evennia.commands import cmdset, command from evennia.commands.cmdsethandler import CmdSetHandler from evennia.commands import cmdhandler -from evennia.utils.logger import log_depmsg, log_trace, log_errmsg +from evennia.utils.logger import log_trace, log_errmsg from evennia.utils.utils import (variable_from_module, lazy_property, make_iter, to_str, to_unicode) diff --git a/evennia/server/profiling/dummyrunner_settings.py b/evennia/server/profiling/dummyrunner_settings.py index 8f2dd013e7..4e64e4f894 100644 --- a/evennia/server/profiling/dummyrunner_settings.py +++ b/evennia/server/profiling/dummyrunner_settings.py @@ -143,6 +143,11 @@ def c_examines(client): cmds = "examine me" return cmds +def c_idles(client): + "idles" + cmds = ('idle','idle') + return cmds + def c_help(client): "reads help files" cmds = ('help', @@ -239,13 +244,17 @@ def c_moves_s(client): # #(0.1, c_creates_obj), # #(0.1, c_creates_button), # #(0.4, c_moves)) +# "inactive player" definition +ACTIONS = (c_login_nodig, + c_logout, + (1.0, c_idles)) ## "normal player" definition -ACTIONS = ( c_login, - c_logout, - (0.01, c_digs), - (0.39, c_looks), - (0.2, c_help), - (0.4, c_moves)) +#ACTIONS = ( c_login, +# c_logout, +# (0.01, c_digs), +# (0.39, c_looks), +# (0.2, c_help), +# (0.4, c_moves)) # walking tester. This requires a pre-made # "loop" of multiple rooms that ties back # to limbo (using @tunnel and @open) diff --git a/evennia/server/sessionhandler.py b/evennia/server/sessionhandler.py index bb5bf796d8..78c0a2f7a3 100644 --- a/evennia/server/sessionhandler.py +++ b/evennia/server/sessionhandler.py @@ -17,7 +17,6 @@ from django.conf import settings from evennia.commands.cmdhandler import CMD_LOGINSTART from evennia.utils.utils import variable_from_module, is_iter, \ to_str, to_unicode, strip_control_sequences, make_iter -from evennia.utils import logger try: import cPickle as pickle