From 07a941c881ec4170a814da3e89d0cf068857e3f7 Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 18 Apr 2019 20:29:50 +0200 Subject: [PATCH 1/5] Make who command use get_display_name --- evennia/commands/default/account.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/evennia/commands/default/account.py b/evennia/commands/default/account.py index b50f55a8e0..71e7470a20 100644 --- a/evennia/commands/default/account.py +++ b/evennia/commands/default/account.py @@ -423,10 +423,10 @@ class CmdWho(COMMAND_DEFAULT_CLASS): account = session.get_account() puppet = session.get_puppet() location = puppet.location.key if puppet and puppet.location else "None" - table.add_row(utils.crop(account.name, width=25), + table.add_row(utils.crop(account.get_display_name(account), width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1), - utils.crop(puppet.key if puppet else "None", width=25), + utils.crop(puppet.get_display_name(account) if puppet else "None", width=25), utils.crop(location, width=25), session.cmd_total, session.protocol_key, @@ -440,7 +440,7 @@ class CmdWho(COMMAND_DEFAULT_CLASS): delta_cmd = time.time() - session.cmd_last_visible delta_conn = time.time() - session.conn_time account = session.get_account() - table.add_row(utils.crop(account.key, width=25), + table.add_row(utils.crop(account.get_display_name(account), width=25), utils.time_format(delta_conn, 0), utils.time_format(delta_cmd, 1)) is_one = naccounts == 1 From c5fe6fff538439b14a04a180f8b3cb2def2df777 Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 1 May 2019 15:14:46 +0200 Subject: [PATCH 2/5] Add missing callbacks-handler to ingame_python classes --- evennia/contrib/ingame_python/typeclasses.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/evennia/contrib/ingame_python/typeclasses.py b/evennia/contrib/ingame_python/typeclasses.py index 3f52b982bf..e49f64be38 100644 --- a/evennia/contrib/ingame_python/typeclasses.py +++ b/evennia/contrib/ingame_python/typeclasses.py @@ -179,6 +179,11 @@ class EventCharacter(DefaultCharacter): "unpuppeted": (["character"], CHARACTER_UNPUPPETED), } + @lazy_property + def callbacks(self): + """Return the CallbackHandler.""" + return CallbackHandler(self) + def announce_move_from(self, destination, msg=None, mapping=None): """ Called if the move is to be announced. This is @@ -602,6 +607,11 @@ class EventExit(DefaultExit): "traverse": (["character", "exit", "origin", "destination"], EXIT_TRAVERSE), } + @lazy_property + def callbacks(self): + """Return the CallbackHandler.""" + return CallbackHandler(self) + def at_traverse(self, traversing_object, target_location): """ This hook is responsible for handling the actual traversal, @@ -862,6 +872,11 @@ class EventRoom(DefaultRoom): "unpuppeted_in": (["character", "room"], ROOM_UNPUPPETED_IN), } + @lazy_property + def callbacks(self): + """Return the CallbackHandler.""" + return CallbackHandler(self) + def at_object_delete(self): """ Called just before the database object is permanently From a02758445d74605922240ba9a58e962cd860ee31 Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 1 May 2019 15:17:43 +0200 Subject: [PATCH 3/5] Fixes to inline_python --- evennia/contrib/ingame_python/typeclasses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/contrib/ingame_python/typeclasses.py b/evennia/contrib/ingame_python/typeclasses.py index e49f64be38..92809b5629 100644 --- a/evennia/contrib/ingame_python/typeclasses.py +++ b/evennia/contrib/ingame_python/typeclasses.py @@ -1,7 +1,7 @@ """ Typeclasses for the in-game Python system. -To use thm, one should inherit from these classes (EventObject, +To use them, one should inherit from these classes (EventObject, EventRoom, EventCharacter and EventExit). """ From 1e7603024ef1ed816fe7fc525591b2cde2b11d9c Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 1 May 2019 15:19:53 +0200 Subject: [PATCH 4/5] Fixes to inline_python --- evennia/contrib/ingame_python/typeclasses.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/evennia/contrib/ingame_python/typeclasses.py b/evennia/contrib/ingame_python/typeclasses.py index 92809b5629..af7230ab97 100644 --- a/evennia/contrib/ingame_python/typeclasses.py +++ b/evennia/contrib/ingame_python/typeclasses.py @@ -1,8 +1,9 @@ """ Typeclasses for the in-game Python system. -To use them, one should inherit from these classes (EventObject, -EventRoom, EventCharacter and EventExit). +To use them, change your base typeclasses to inherit from the classes in this +module (EventObject, EventRoom, EventCharacter and EventExit) instead of the +default ones in evennia core. """ From a630ccd51c131d9c876a2f97597136340878e158 Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 1 May 2019 19:10:44 +0200 Subject: [PATCH 5/5] Fix edge case with multiple superusers --- evennia/accounts/accounts.py | 2 +- evennia/server/amp_client.py | 67 +++++++++++++++++++----------------- evennia/server/session.py | 2 +- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index 3eab69a3ce..915f3dd4e4 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -839,7 +839,7 @@ class DefaultAccount(with_metaclass(TypeclassBase, AccountDB)): """ # if we have saved protocol flags on ourselves, load them here. - protocol_flags = self.attributes.get("_saved_protocol_flags", None) + protocol_flags = self.attributes.get("_saved_protocol_flags", {}) if session and protocol_flags: session.update_flags(**protocol_flags) diff --git a/evennia/server/amp_client.py b/evennia/server/amp_client.py index a4300adf4d..c5cd57986e 100644 --- a/evennia/server/amp_client.py +++ b/evennia/server/amp_client.py @@ -198,44 +198,47 @@ class AMPServerClientProtocol(amp.AMPMultiConnectionProtocol): operation = kwargs.pop("operation", "") server_sessionhandler = self.factory.server.sessions - if operation == amp.PCONN: # portal_session_connect - # create a new session and sync it - server_sessionhandler.portal_connect(kwargs.get("sessiondata")) + try: + if operation == amp.PCONN: # portal_session_connect + # create a new session and sync it + server_sessionhandler.portal_connect(kwargs.get("sessiondata")) - elif operation == amp.PCONNSYNC: # portal_session_sync - server_sessionhandler.portal_session_sync(kwargs.get("sessiondata")) + elif operation == amp.PCONNSYNC: # portal_session_sync + server_sessionhandler.portal_session_sync(kwargs.get("sessiondata")) - elif operation == amp.PDISCONN: # portal_session_disconnect - # session closed from portal sid - session = server_sessionhandler.get(sessid) - if session: - server_sessionhandler.portal_disconnect(session) + elif operation == amp.PDISCONN: # portal_session_disconnect + # session closed from portal sid + session = server_sessionhandler.get(sessid) + if session: + server_sessionhandler.portal_disconnect(session) - elif operation == amp.PDISCONNALL: # portal_disconnect_all - # portal orders all sessions to close - server_sessionhandler.portal_disconnect_all() + elif operation == amp.PDISCONNALL: # portal_disconnect_all + # portal orders all sessions to close + server_sessionhandler.portal_disconnect_all() - elif operation == amp.PSYNC: # portal_session_sync - # force a resync of sessions from the portal side. This happens on - # first server-connect. - server_restart_mode = kwargs.get("server_restart_mode", "shutdown") - self.factory.server.run_init_hooks(server_restart_mode) - server_sessionhandler.portal_sessions_sync(kwargs.get("sessiondata")) + elif operation == amp.PSYNC: # portal_session_sync + # force a resync of sessions from the portal side. This happens on + # first server-connect. + server_restart_mode = kwargs.get("server_restart_mode", "shutdown") + self.factory.server.run_init_hooks(server_restart_mode) + server_sessionhandler.portal_sessions_sync(kwargs.get("sessiondata")) - elif operation == amp.SRELOAD: # server reload - # shut down in reload mode - server_sessionhandler.all_sessions_portal_sync() - server_sessionhandler.server.shutdown(mode='reload') + elif operation == amp.SRELOAD: # server reload + # shut down in reload mode + server_sessionhandler.all_sessions_portal_sync() + server_sessionhandler.server.shutdown(mode='reload') - elif operation == amp.SRESET: - # shut down in reset mode - server_sessionhandler.all_sessions_portal_sync() - server_sessionhandler.server.shutdown(mode='reset') + elif operation == amp.SRESET: + # shut down in reset mode + server_sessionhandler.all_sessions_portal_sync() + server_sessionhandler.server.shutdown(mode='reset') - elif operation == amp.SSHUTD: # server shutdown - # shutdown in stop mode - server_sessionhandler.server.shutdown(mode='shutdown') + elif operation == amp.SSHUTD: # server shutdown + # shutdown in stop mode + server_sessionhandler.server.shutdown(mode='shutdown') - else: - raise Exception("operation %(op)s not recognized." % {'op': operation}) + else: + raise Exception("operation %(op)s not recognized." % {'op': operation}) + except Exception: + logger.log_trace() return {} diff --git a/evennia/server/session.py b/evennia/server/session.py index eb77321a24..03b4b6abb2 100644 --- a/evennia/server/session.py +++ b/evennia/server/session.py @@ -133,7 +133,7 @@ class Session(object): """ if self.account: - self.protocol_flags.update(self.account.attributes.get("_saved_protocol_flags", {})) + self.protocol_flags.update(self.account.attributes.get("_saved_protocol_flags", None) or {}) # access hooks