From 735606bc7329b63ffa950b9a5f4385763e238d52 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 26 May 2015 00:04:47 +0200 Subject: Core/DataStores: Load AnimKit.dbc to validate anim kit usage --- src/server/game/DataStores/DBCStores.cpp | 2 ++ src/server/game/DataStores/DBCStores.h | 1 + src/server/game/DataStores/DBCStructure.h | 8 ++++---- src/server/game/DataStores/DBCfmt.h | 1 + src/server/game/Entities/Object/Object.cpp | 9 +++++++++ 5 files changed, 17 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index e1f0c595b5f..9789574c23d 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -60,6 +60,7 @@ static AreaFlagByMapID sAreaFlagByMapID; // for instances wit static WMOAreaInfoByTripple sWMOAreaInfoByTripple; DBCStorage sAchievementStore(Achievementfmt); +DBCStorage sAnimKitStore(AnimKitfmt); DBCStorage sAreaTriggerStore(AreaTriggerEntryfmt); DBCStorage sArmorLocationStore(ArmorLocationfmt); DBCStorage sAuctionHouseStore(AuctionHouseEntryfmt); @@ -369,6 +370,7 @@ void LoadDBCStores(const std::string& dataPath) } LoadDBC(availableDbcLocales, bad_dbc_files, sAchievementStore, dbcPath, "Achievement.dbc"/*, &CustomAchievementfmt, &CustomAchievementIndex*/);//19116 + LoadDBC(availableDbcLocales, bad_dbc_files, sAnimKitStore, dbcPath, "AnimKit.dbc");//19865 LoadDBC(availableDbcLocales, bad_dbc_files, sAreaTriggerStore, dbcPath, "AreaTrigger.dbc");//19116 LoadDBC(availableDbcLocales, bad_dbc_files, sAuctionHouseStore, dbcPath, "AuctionHouse.dbc");//19116 LoadDBC(availableDbcLocales, bad_dbc_files, sArmorLocationStore, dbcPath, "ArmorLocation.dbc");//19116 diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index 72c0c35f1cb..286c4d5e6c3 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -123,6 +123,7 @@ private: }; extern DBCStorage sAchievementStore; +extern DBCStorage sAnimKitStore; extern DBCStorage sAreaStore;// recommend access using functions extern DBCStorage sAreaTriggerStore; extern DBCStorage sArmorLocationStore; diff --git a/src/server/game/DataStores/DBCStructure.h b/src/server/game/DataStores/DBCStructure.h index 8c338f0cd1a..f8f140ff02b 100644 --- a/src/server/game/DataStores/DBCStructure.h +++ b/src/server/game/DataStores/DBCStructure.h @@ -50,12 +50,12 @@ struct AchievementEntry uint32 CriteriaTree; // 14 }; -struct AchievementCategoryEntry +struct AnimKitEntry { uint32 ID; // 0 - uint32 Parent; // 1 -1 for main category - //char* Name_lang; // 2 - //uint32 UIOrder; // 3 + //uint32 OneShotDuration; // 1 + //uint32 OneShotStopAnimKitID; // 2 + //uint32 LowDefAnimKitID; // 3 }; // Temporary define until max depth is found somewhere (adt?) diff --git a/src/server/game/DataStores/DBCfmt.h b/src/server/game/DataStores/DBCfmt.h index e3b474bc27b..a67ec26ed7c 100644 --- a/src/server/game/DataStores/DBCfmt.h +++ b/src/server/game/DataStores/DBCfmt.h @@ -25,6 +25,7 @@ char const Achievementfmt[] = "niixsxiixixxiii"; const std::string CustomAchievementfmt = "pppaaaapapaapp"; const std::string CustomAchievementIndex = "ID"; +char const AnimKitfmt[] = "nxxx"; char const AreaTableEntryfmt[] = "iiiniixxxxxxisiiiiixxxxxxxxxx"; char const AreaTriggerEntryfmt[] = "nifffxxxfffffxxxx"; char const ArmorLocationfmt[] = "nfffff"; diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index f30d8af21b4..655af613220 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -3107,6 +3107,9 @@ void WorldObject::SetAIAnimKitId(uint16 animKitId) if (m_aiAnimKitId == animKitId) return; + if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) + return; + m_aiAnimKitId = animKitId; WorldPacket data(SMSG_SET_AI_ANIM_KIT, 8 + 2); @@ -3120,6 +3123,9 @@ void WorldObject::SetMovementAnimKitId(uint16 animKitId) if (m_movementAnimKitId == animKitId) return; + if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) + return; + m_movementAnimKitId = animKitId; WorldPacket data(SMSG_SET_MOVEMENT_ANIM_KIT, 8 + 2); @@ -3133,6 +3139,9 @@ void WorldObject::SetMeleeAnimKitId(uint16 animKitId) if (m_meleeAnimKitId == animKitId) return; + if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) + return; + m_meleeAnimKitId = animKitId; WorldPacket data(SMSG_SET_MELEE_ANIM_KIT, 8 + 2); -- cgit v1.2.3