diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 4626884767d..935d93f6042 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -4583,6 +4583,16 @@ void ObjectMgr::LoadGossipScripts() void ObjectMgr::LoadCreatureMovementScripts() { LoadScripts(sCreatureMovementScripts, "creature_movement_scripts"); + + std::set ids; + + for(ScriptMapMap::const_iterator itr = sCreatureMovementScripts.begin(); itr != sEventScripts.end(); ++itr) + ids.insert(itr->first); + + sWaypointMgr.CheckScriptExistance(ids); + + for(std::set::const_iterator itr = ids.begin(); itr != ids.end(); ++itr) + sLog.outErrorDb("Table `creature_movement_scripts` has script (Id: %u) not referring to any waypoint.", *itr); } void ObjectMgr::LoadPageTexts() @@ -8446,7 +8456,7 @@ uint32 ObjectMgr::GetScriptId(const char *name) return uint32(itr - m_scriptNames.begin()); } -void ObjectMgr::CheckScripts(ScriptMapMap const& scripts,std::set& ids) +void ObjectMgr::CheckScriptTexts(ScriptMapMap const& scripts,std::set& ids) { for(ScriptMapMap::const_iterator itrMM = scripts.begin(); itrMM != scripts.end(); ++itrMM) { @@ -8477,13 +8487,13 @@ void ObjectMgr::LoadDbScriptStrings() if(GetMangosStringLocale(i)) ids.insert(i); - CheckScripts(sQuestEndScripts,ids); - CheckScripts(sQuestStartScripts,ids); - CheckScripts(sSpellScripts,ids); - CheckScripts(sGameObjectScripts,ids); - CheckScripts(sEventScripts,ids); - CheckScripts(sGossipScripts,ids); - CheckScripts(sCreatureMovementScripts,ids); + CheckScriptTexts(sQuestEndScripts,ids); + CheckScriptTexts(sQuestStartScripts,ids); + CheckScriptTexts(sSpellScripts,ids); + CheckScriptTexts(sGameObjectScripts,ids); + CheckScriptTexts(sEventScripts,ids); + CheckScriptTexts(sGossipScripts,ids); + CheckScriptTexts(sCreatureMovementScripts,ids); sWaypointMgr.CheckTextsExistance(ids); diff --git a/src/game/ObjectMgr.h b/src/game/ObjectMgr.h index 7a60d017a4d..d1819a77efa 100644 --- a/src/game/ObjectMgr.h +++ b/src/game/ObjectMgr.h @@ -961,7 +961,7 @@ class ObjectMgr private: void LoadScripts(ScriptMapMap& scripts, char const* tablename); - void CheckScripts(ScriptMapMap const& scripts,std::set& ids); + void CheckScriptTexts(ScriptMapMap const& scripts,std::set& ids); void LoadCreatureAddons(SQLStorage& creatureaddons, char const* entryName, char const* comment); void ConvertCreatureAddonAuras(CreatureDataAddon* addon, char const* table, char const* guidEntryStr); void LoadQuestRelationsHelper(QuestRelations& map,char const* table); diff --git a/src/game/WaypointManager.cpp b/src/game/WaypointManager.cpp index 528611dc684..65f81efe4fe 100644 --- a/src/game/WaypointManager.cpp +++ b/src/game/WaypointManager.cpp @@ -394,3 +394,27 @@ void WaypointManager::CheckTextsExistance(std::set& ids) } } } + +void WaypointManager::CheckScriptExistance(std::set& ids) +{ + WaypointPathMap::iterator pmItr = m_pathMap.begin(); + for ( ; pmItr != m_pathMap.end(); ++pmItr) + { + for (size_t i = 0; i < pmItr->second.size(); ++i) + { + uint32 script_id = pmItr->second[i].script_id; + if (!script_id) + continue; + + // Now we check text existence and put all zero texts ids to the end of array + if (sCreatureMovementScripts.find(script_id)==sCreatureMovementScripts.end()) + { + sLog.outErrorDb("Some waypoint has not existing scriptid %u.", script_id); + pmItr->second[i].script_id = 0; + continue; + } + else + ids.erase(script_id); + } + } +} diff --git a/src/game/WaypointManager.h b/src/game/WaypointManager.h index e0c0eb4f50d..edc464cbb45 100644 --- a/src/game/WaypointManager.h +++ b/src/game/WaypointManager.h @@ -79,6 +79,7 @@ class WaypointManager void SetNodePosition(uint32 id, uint32 point, float x, float y, float z); void SetNodeText(uint32 id, uint32 point, const char *text_field, const char *text); void CheckTextsExistance(std::set& ids); + void CheckScriptExistance(std::set& ids); private: void _addNode(uint32 id, uint32 point, float x, float y, float z, float o, uint32 delay, uint32 wpGuid); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 144c2c2d43c..a2132ae1f3b 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9910" + #define REVISION_NR "9911" #endif // __REVISION_NR_H__