Skip to content

Commit

Permalink
Fix quest script startup errors.
Browse files Browse the repository at this point in the history
  • Loading branch information
ratkosrb committed Dec 23, 2023
1 parent e3a322d commit a3684c7
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 4 deletions.
22 changes: 22 additions & 0 deletions sql/migrations/20231223014105_world.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
DROP PROCEDURE IF EXISTS add_migration;
delimiter ??
CREATE PROCEDURE `add_migration`()
BEGIN
DECLARE v INT DEFAULT 1;
SET v = (SELECT COUNT(*) FROM `migrations` WHERE `id`='20231223014105');
IF v=0 THEN
INSERT INTO `migrations` VALUES ('20231223014105');
-- Add your query below.


-- Remove unusued quest scripts.
DELETE FROM `quest_start_scripts` WHERE `id` IN (945, 3447);
DELETE FROM `quest_end_scripts` WHERE `id` IN (2952, 4603, 4604, 5058);


-- End of migration.
END IF;
END??
delimiter ;
CALL add_migration();
DROP PROCEDURE IF EXISTS add_migration;
32 changes: 28 additions & 4 deletions src/game/ScriptMgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1419,23 +1419,47 @@ void ScriptMgr::LoadQuestEndScripts()
{
LoadScripts(sQuestEndScripts, "quest_end_scripts");

std::set<uint32> usedQuestCompleteScripts;
std::unique_ptr<QueryResult> result(WorldDatabase.Query("SELECT DISTINCT `CompleteScript` FROM `quest_template`"));
if (result)
{
do
{
Field* fields = result->Fetch();
uint32 scriptId = fields[0].GetUInt32();
usedQuestCompleteScripts.insert(scriptId);
} while (result->NextRow());
}

// check ids
for (const auto& itr : sQuestEndScripts)
{
if (!sObjectMgr.GetQuestTemplate(itr.first) && !sObjectMgr.IsExistingQuestId(itr.first))
sLog.Out(LOG_DBERROR, LOG_LVL_MINIMAL, "Table `quest_end_scripts` has not existing quest (Id: %u) as script id", itr.first);
if (usedQuestCompleteScripts.find(itr.first) == usedQuestCompleteScripts.end())
sLog.Out(LOG_DBERROR, LOG_LVL_MINIMAL, "Table `quest_end_scripts` has script (Id: %u) not referenced from anywhere", itr.first);
}
}

void ScriptMgr::LoadQuestStartScripts()
{
LoadScripts(sQuestStartScripts, "quest_start_scripts");

std::set<uint32> usedQuestStartScripts;
std::unique_ptr<QueryResult> result(WorldDatabase.Query("SELECT DISTINCT `StartScript` FROM `quest_template`"));
if (result)
{
do
{
Field* fields = result->Fetch();
uint32 scriptId = fields[0].GetUInt32();
usedQuestStartScripts.insert(scriptId);
} while (result->NextRow());
}

// check ids
for (const auto& itr : sQuestStartScripts)
{
if (!sObjectMgr.GetQuestTemplate(itr.first) && !sObjectMgr.IsExistingQuestId(itr.first))
sLog.Out(LOG_DBERROR, LOG_LVL_MINIMAL, "Table `quest_start_scripts` has not existing quest (Id: %u) as script id", itr.first);
if (usedQuestStartScripts.find(itr.first) == usedQuestStartScripts.end())
sLog.Out(LOG_DBERROR, LOG_LVL_MINIMAL, "Table `quest_start_scripts` has script (Id: %u) not referenced from anywhere", itr.first);
}
}

Expand Down

0 comments on commit a3684c7

Please sign in to comment.