From 7d8d3216a9f86c970f2f1b12e256e44ca5b1a78b Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 5 Sep 2019 23:54:07 +0200 Subject: [PATCH] Resolve duplicate script execution for global script. Make paused script fire at_server_reload. Resolve #1911. --- evennia/scripts/scripts.py | 10 +++++++--- evennia/server/server.py | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/evennia/scripts/scripts.py b/evennia/scripts/scripts.py index 0e1573c412..b7e3296319 100644 --- a/evennia/scripts/scripts.py +++ b/evennia/scripts/scripts.py @@ -163,7 +163,8 @@ class ScriptBase(with_metaclass(TypeclassBase, ScriptDB)): Start task runner. """ - + if self.ndb._task: + return self.ndb._task = ExtendedLoopingCall(self._step_task) if self.db._paused_time: @@ -429,7 +430,8 @@ class DefaultScript(ScriptBase): """ if self.is_active and not force_restart: - # The script is already running, but make sure we have a _task if this is after a cache flush + # The script is already running, but make sure we have a _task if + # this is after a cache flush if not self.ndb._task and self.db_interval >= 0: self.ndb._task = ExtendedLoopingCall(self._step_task) try: @@ -440,7 +442,9 @@ class DefaultScript(ScriptBase): now = not self.db_start_delay start_delay = None callcount = 0 - self.ndb._task.start(self.db_interval, now=now, start_delay=start_delay, count_start=callcount) + self.ndb._task.start(self.db_interval, now=now, + start_delay=start_delay, + count_start=callcount) return 0 obj = self.obj diff --git a/evennia/server/server.py b/evennia/server/server.py index 093d97f205..5a8f88f257 100644 --- a/evennia/server/server.py +++ b/evennia/server/server.py @@ -363,7 +363,7 @@ class Evennia(object): yield [o.at_server_reload() for o in ObjectDB.get_all_cached_instances()] yield [p.at_server_reload() for p in AccountDB.get_all_cached_instances()] yield [(s.pause(manual_pause=False), s.at_server_reload()) - for s in ScriptDB.get_all_cached_instances() if s.is_active] + for s in ScriptDB.get_all_cached_instances() if s.is_active or s.attributes.has("_manual_pause")] yield self.sessions.all_sessions_portal_sync() self.at_server_reload_stop() # only save monitor state on reload, not on shutdown/reset