aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp25
-rw-r--r--src/server/game/Entities/GameObject/GameObjectData.h15
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp22
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());