diff options
| author | Rat <gmstreetrat@gmail.com> | 2015-05-19 11:22:07 +0100 |
|---|---|---|
| committer | DDuarte <dnpd.dd@gmail.com> | 2015-05-19 11:22:51 +0100 |
| commit | 95b5e357451985fbc350bf1321ce96d6c02f9d44 (patch) | |
| tree | 0339a143683b44c5fbc3238afc95dc39f88c8235 /src/server/game/Globals/ObjectMgr.cpp | |
| parent | 8c61e51fe53f6429a7a8d532a5c675ff72f438ad (diff) | |
Core/GameObjects: Implemented gameobject_addon table, you can now set invisibility for gameobjects for quests
(cherry picked from commit 9d59d038f8b09ed036448e755cb0b102396a4ca1)
Conflicts:
sql/updates/world/2015_04_05_07_world.sql
src/server/game/Globals/ObjectMgr.cpp
src/server/game/Globals/ObjectMgr.h
Core/GameObjects: fixed typo and logic (0 is a valid invisibility type)
(cherry picked from commit 23e8a3ce2928458649d94408d5deffb67339b1d6)
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 59e4e871970..8593f3d9c0b 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1039,6 +1039,66 @@ void ObjectMgr::LoadCreatureAddons() TC_LOG_INFO("server.loading", ">> Loaded %u creature addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } +void ObjectMgr::LoadGameObjectAddons() +{ + uint32 oldMSTime = getMSTime(); + + // 0 1 2 + QueryResult result = WorldDatabase.Query("SELECT guid, invisibilityType, invisibilityValue FROM gameobject_addon"); + + if (!result) + { + TC_LOG_INFO("server.loading", ">> Loaded 0 gameobject addon definitions. DB table `gameobject_addon` is empty."); + return; + } + + uint32 count = 0; + do + { + Field* fields = result->Fetch(); + + ObjectGuid::LowType guid = fields[0].GetUInt64(); + + const GameObjectData* goData = GetGOData(guid); + if (!goData) + { + TC_LOG_ERROR("sql.sql", "GameObject (GUID: " UI64FMTD ") does not exist but has a record in `gameobject_addon`", guid); + continue; + } + + GameObjectAddon& gameObjectAddon = _gameObjectAddonStore[guid]; + gameObjectAddon.InvisibilityType = InvisibilityType(fields[1].GetUInt8()); + gameObjectAddon.InvisibilityValue = fields[2].GetUInt32(); + + if (gameObjectAddon.InvisibilityType >= TOTAL_INVISIBILITY_TYPES) + { + TC_LOG_ERROR("sql.sql", "GameObject (GUID: " UI64FMTD ") has invalid InvisibilityType in `gameobject_addon`", guid); + gameObjectAddon.InvisibilityType = INVISIBILITY_GENERAL; + gameObjectAddon.InvisibilityValue = 0; + } + + if (gameObjectAddon.InvisibilityType && !gameObjectAddon.InvisibilityValue) + { + TC_LOG_ERROR("sql.sql", "GameObject (GUID: " UI64FMTD ") has InvisibilityType set but has no InvisibilityValue in `gameobject_addon`, set to 1", guid); + gameObjectAddon.InvisibilityValue = 1; + } + + ++count; + } + while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded %u gameobject addons in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); +} + +GameObjectAddon const* ObjectMgr::GetGameObjectAddon(ObjectGuid::LowType lowguid) +{ + GameObjectAddonContainer::const_iterator itr = _gameObjectAddonStore.find(lowguid); + if (itr != _gameObjectAddonStore.end()) + return &(itr->second); + + return NULL; +} + CreatureAddon const* ObjectMgr::GetCreatureAddon(uint32 lowguid) { CreatureAddonContainer::const_iterator itr = _creatureAddonStore.find(lowguid); |
