Force player save before kicking on player shutdown (#8157)
authorLoïc Blot <nerzhul@users.noreply.github.com>
Sun, 3 Feb 2019 08:11:45 +0000 (09:11 +0100)
committerGitHub <noreply@github.com>
Sun, 3 Feb 2019 08:11:45 +0000 (09:11 +0100)
src/server.cpp
src/serverenvironment.cpp
src/serverenvironment.h

index 41ac8752723096579cc3685c9715f9e8be7c73b0..7db06acbfbd8e05cd690795b8ad0b3f3eea4a495 100644 (file)
@@ -257,6 +257,7 @@ Server::~Server()
                if (kick_msg.empty()) {
                        kick_msg = g_settings->get("kick_msg_shutdown");
                }
+               m_env->saveLoadedPlayers(true);
                m_env->kickAllPlayers(SERVER_ACCESSDENIED_SHUTDOWN,
                        kick_msg, reconnect);
        }
index 076a1e28f7ad0a7a2ff277156b79ddfc3aebc405..0a83c4a38e421db8efd9531fe501c4067d990464 100644 (file)
@@ -568,10 +568,10 @@ void ServerEnvironment::kickAllPlayers(AccessDeniedCode reason,
        }
 }
 
-void ServerEnvironment::saveLoadedPlayers()
+void ServerEnvironment::saveLoadedPlayers(bool force)
 {
        for (RemotePlayer *player : m_players) {
-               if (player->checkModified() || (player->getPlayerSAO() &&
+               if (force || player->checkModified() || (player->getPlayerSAO() &&
                                player->getPlayerSAO()->getMeta().isModified())) {
                        try {
                                m_player_database->savePlayer(player);
index b883e0dc54ce88cc3a40d5f1d9fd2f5b1e79444f..77adcf6274538641baedeb464c7188de04406014 100644 (file)
@@ -221,7 +221,7 @@ public:
        void kickAllPlayers(AccessDeniedCode reason,
                const std::string &str_reason, bool reconnect);
        // Save players
-       void saveLoadedPlayers();
+       void saveLoadedPlayers(bool force = false);
        void savePlayer(RemotePlayer *player);
        PlayerSAO *loadPlayer(RemotePlayer *player, bool *new_player, session_t peer_id,
                bool is_singleplayer);