diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 25 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObjectData.h | 15 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 22 |
3 files changed, 43 insertions, 19 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index ca4ff39e14e..8dec4749996 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -327,6 +327,9 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD m_updateFlag.GameObject = true; SetWorldEffectID(m_goTemplateAddon->WorldEffectID); } + + if (m_goTemplateAddon->AIAnimKitID) + _animKitId = m_goTemplateAddon->AIAnimKitID; } SetEntry(goInfo->entry); @@ -427,16 +430,22 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD break; } - if (gameObjectAddon && gameObjectAddon->InvisibilityValue) + if (gameObjectAddon) { - m_invisibility.AddFlag(gameObjectAddon->invisibilityType); - m_invisibility.AddValue(gameObjectAddon->invisibilityType, gameObjectAddon->InvisibilityValue); - } + if (gameObjectAddon->InvisibilityValue) + { + m_invisibility.AddFlag(gameObjectAddon->invisibilityType); + m_invisibility.AddValue(gameObjectAddon->invisibilityType, gameObjectAddon->InvisibilityValue); + } - if (gameObjectAddon && gameObjectAddon->WorldEffectID) - { - m_updateFlag.GameObject = true; - SetWorldEffectID(gameObjectAddon->WorldEffectID); + if (gameObjectAddon->WorldEffectID) + { + m_updateFlag.GameObject = true; + SetWorldEffectID(gameObjectAddon->WorldEffectID); + } + + if (gameObjectAddon->AIAnimKitID) + _animKitId = gameObjectAddon->AIAnimKitID; } LastUsedScriptID = GetGOInfo()->ScriptId; diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index fa6627cd2db..3709237e574 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -1041,15 +1041,15 @@ struct GameObjectTemplate // From `gameobject_template_addon` struct GameObjectTemplateAddon { - uint32 entry; - uint32 faction; - uint32 flags; - uint32 mingold; - uint32 maxgold; - uint32 WorldEffectID; + uint32 entry; + uint32 faction; + uint32 flags; + uint32 mingold; + uint32 maxgold; + uint32 WorldEffectID; + uint32 AIAnimKitID; }; - struct GameObjectLocale { std::vector<std::string> Name; @@ -1064,6 +1064,7 @@ struct GameObjectAddon InvisibilityType invisibilityType; uint32 InvisibilityValue; uint32 WorldEffectID; + uint32 AIAnimKitID; }; // `gameobject` table diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index c8073eff151..a33cafbf046 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1202,8 +1202,8 @@ void ObjectMgr::LoadGameObjectAddons() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 6 7 - QueryResult result = WorldDatabase.Query("SELECT guid, parent_rotation0, parent_rotation1, parent_rotation2, parent_rotation3, invisibilityType, invisibilityValue, WorldEffectID FROM gameobject_addon"); + // 0 1 2 3 4 5 6 7 8 + QueryResult result = WorldDatabase.Query("SELECT guid, parent_rotation0, parent_rotation1, parent_rotation2, parent_rotation3, invisibilityType, invisibilityValue, WorldEffectID, AIAnimKitID FROM gameobject_addon"); if (!result) { @@ -1230,6 +1230,7 @@ void ObjectMgr::LoadGameObjectAddons() gameObjectAddon.invisibilityType = InvisibilityType(fields[5].GetUInt8()); gameObjectAddon.InvisibilityValue = fields[6].GetUInt32(); gameObjectAddon.WorldEffectID = fields[7].GetUInt32(); + gameObjectAddon.AIAnimKitID = fields[8].GetUInt32(); if (gameObjectAddon.invisibilityType >= TOTAL_INVISIBILITY_TYPES) { @@ -1256,6 +1257,12 @@ void ObjectMgr::LoadGameObjectAddons() gameObjectAddon.WorldEffectID = 0; } + if (gameObjectAddon.AIAnimKitID && !sAnimKitStore.LookupEntry(gameObjectAddon.AIAnimKitID)) + { + TC_LOG_ERROR("sql.sql", "GameObject (GUID: " UI64FMTD ") has invalid AIAnimKitID (%u) in `gameobject_addon`, set to 0.", guid, gameObjectAddon.AIAnimKitID); + gameObjectAddon.AIAnimKitID = 0; + } + ++count; } while (result->NextRow()); @@ -7481,8 +7488,8 @@ void ObjectMgr::LoadGameObjectTemplateAddons() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 - QueryResult result = WorldDatabase.Query("SELECT entry, faction, flags, mingold, maxgold, WorldEffectID FROM gameobject_template_addon"); + // 0 1 2 3 4 5 6 + QueryResult result = WorldDatabase.Query("SELECT entry, faction, flags, mingold, maxgold, WorldEffectID, AIAnimKitID FROM gameobject_template_addon"); if (!result) { @@ -7510,6 +7517,7 @@ void ObjectMgr::LoadGameObjectTemplateAddons() gameObjectAddon.mingold = fields[3].GetUInt32(); gameObjectAddon.maxgold = fields[4].GetUInt32(); gameObjectAddon.WorldEffectID = fields[5].GetUInt32(); + gameObjectAddon.AIAnimKitID = fields[6].GetUInt32(); // checks if (gameObjectAddon.faction && !sFactionTemplateStore.LookupEntry(gameObjectAddon.faction)) @@ -7534,6 +7542,12 @@ void ObjectMgr::LoadGameObjectTemplateAddons() gameObjectAddon.WorldEffectID = 0; } + if (gameObjectAddon.AIAnimKitID && !sAnimKitStore.LookupEntry(gameObjectAddon.AIAnimKitID)) + { + TC_LOG_ERROR("sql.sql", "GameObject (Entry: %u) has invalid AIAnimKitID (%u) defined in `gameobject_template_addon`, set to 0.", entry, gameObjectAddon.AIAnimKitID); + gameObjectAddon.AIAnimKitID = 0; + } + ++count; } while (result->NextRow()); |