From a5b82444f7ced43dc786105f93980fdb50dfc17d Mon Sep 17 00:00:00 2001 From: Elmsroth Date: Sun, 24 May 2020 11:58:53 +0200 Subject: [PATCH] Fix instance cleanup at startup (#99) Error caused by backquotes in double. --- src/game/WorldHandlers/MapPersistentStateMgr.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/game/WorldHandlers/MapPersistentStateMgr.cpp b/src/game/WorldHandlers/MapPersistentStateMgr.cpp index c3eac40e..30b34cdf 100644 --- a/src/game/WorldHandlers/MapPersistentStateMgr.cpp +++ b/src/game/WorldHandlers/MapPersistentStateMgr.cpp @@ -785,7 +785,7 @@ void MapPersistentStateManager::_DelHelper(DatabaseType& db, const char* fields, db.escape_string(fieldValue); ss << (i != 0 ? " AND " : "") << fieldTokens[i] << " = '" << fieldValue << "'"; } - db.PExecute("DELETE FROM `%s` WHERE %s", table, ss.str().c_str()); + db.PExecute("DELETE FROM %s WHERE %s", table, ss.str().c_str()); } while (result->NextRow()); delete result; @@ -801,17 +801,21 @@ void MapPersistentStateManager::CleanupInstances() m_Scheduler.LoadResetTimes(); CharacterDatabase.BeginTransaction(); + sLog.outString("|> Clean character/group - instance binds with invalid group/characters..."); // clean character/group - instance binds with invalid group/characters _DelHelper(CharacterDatabase, "`character_instance`.`guid`, `instance`", "`character_instance`", "LEFT JOIN `characters` ON `character_instance`.`guid` = `characters`.`guid` WHERE `characters`.`guid` IS NULL"); _DelHelper(CharacterDatabase, "`group_instance`.`leaderGuid`, `instance`", "`group_instance`", "LEFT JOIN `characters` ON `group_instance`.`leaderGuid` = `characters`.`guid` LEFT JOIN `groups` ON `group_instance`.`leaderGuid` = `groups`.`leaderGuid` WHERE `characters`.`guid` IS NULL OR `groups`.`leaderGuid` IS NULL"); + sLog.outString("|> Clean instances that do not have any players or groups bound to them..."); // clean instances that do not have any players or groups bound to them _DelHelper(CharacterDatabase, "`id`, `map`", "`instance`", "LEFT JOIN `character_instance` ON `character_instance`.`instance` = `id` LEFT JOIN `group_instance` ON `group_instance`.`instance` = `id` WHERE `character_instance`.`instance` IS NULL AND `group_instance`.`instance` IS NULL"); + sLog.outString("|> Clean invalid instance references in other tables..."); // clean invalid instance references in other tables _DelHelper(CharacterDatabase, "`character_instance`.`guid`, `instance`", "`character_instance`", "LEFT JOIN `instance` ON `character_instance`.`instance` = `instance`.`id` WHERE `instance`.`id` IS NULL"); _DelHelper(CharacterDatabase, "`group_instance`.`leaderGuid`, `instance`", "`group_instance`", "LEFT JOIN `instance` ON `group_instance`.`instance` = `instance`.`id` WHERE `instance`.`id` IS NULL"); + sLog.outString("|> Clean unused respawn data..."); // clean unused respawn data CharacterDatabase.Execute("DELETE FROM `creature_respawn` WHERE `instance` <> 0 AND `instance` NOT IN (SELECT `id` FROM `instance`)"); CharacterDatabase.Execute("DELETE FROM `gameobject_respawn` WHERE `instance` <> 0 AND `instance` NOT IN (SELECT `id` FROM `instance`)");