From 3f90db1b081bac5df4df4f448eac222388ea5bed Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 23 Apr 2020 19:08:23 +0200 Subject: [PATCH] Server timekeeper no longer assume 60s between snapshots --- evennia/server/server.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/evennia/server/server.py b/evennia/server/server.py index 2093b5b88c..90c46766ef 100644 --- a/evennia/server/server.py +++ b/evennia/server/server.py @@ -105,6 +105,7 @@ _IDMAPPER_CACHE_MAXSIZE = settings.IDMAPPER_CACHE_MAXSIZE _GAMETIME_MODULE = None _IDLE_TIMEOUT = settings.IDLE_TIMEOUT +_LAST_SERVER_TIME_SNAPSHOT = None def _server_maintenance(): @@ -113,6 +114,8 @@ def _server_maintenance(): the server needs to do. It is called every minute. """ global EVENNIA, _MAINTENANCE_COUNT, _FLUSH_CACHE, _GAMETIME_MODULE + global _LAST_SERVER_TIME_SNAPSHOT + if not _FLUSH_CACHE: from evennia.utils.idmapper.models import conditional_flush as _FLUSH_CACHE if not _GAMETIME_MODULE: @@ -126,7 +129,11 @@ def _server_maintenance(): _GAMETIME_MODULE.SERVER_START_TIME = now _GAMETIME_MODULE.SERVER_RUNTIME = ServerConfig.objects.conf("runtime", default=0.0) else: - _GAMETIME_MODULE.SERVER_RUNTIME += 60.0 + # adjust the runtime not with 60s but with the actual elapsed time + # in case this may varies slightly from 60s. + _GAMETIME_MODULE.SERVER_RUNTIME += (now - _LAST_SERVER_TIME_SNAPSHOT) + _LAST_SERVER_TIME_SNAPSHOT = now + # update game time and save it across reloads _GAMETIME_MODULE.SERVER_RUNTIME_LAST_UPDATED = now ServerConfig.objects.conf("runtime", _GAMETIME_MODULE.SERVER_RUNTIME)