diff options
Diffstat (limited to 'src')
34 files changed, 3125 insertions, 2544 deletions
diff --git a/src/server/bnetserver/Packets/AuthenticationPackets.cpp b/src/server/bnetserver/Packets/AuthenticationPackets.cpp index f5704f67153..f6743a7c2f0 100644 --- a/src/server/bnetserver/Packets/AuthenticationPackets.cpp +++ b/src/server/bnetserver/Packets/AuthenticationPackets.cpp @@ -19,43 +19,6 @@ #include "Session.h" #include "Util.h" -void Battlenet::Authentication::LogonRequest::Read() -{ - Program = _stream.ReadFourCC(); - Platform = _stream.ReadFourCC(); - Locale = _stream.ReadFourCC(); - - Components.resize(_stream.Read<uint32>(6)); - for (size_t i = 0; i < Components.size(); ++i) - { - Component& component = Components[i]; - component.Program = _stream.ReadFourCC(); - component.Platform = _stream.ReadFourCC(); - component.Build = _stream.Read<uint32>(32); - } - - if (_stream.Read<uint32>(1)) - Login = _stream.ReadString(9, 3); -} - -std::string Battlenet::Authentication::LogonRequest::ToString() const -{ - std::ostringstream stream; - stream << "Battlenet::Authentication::LogonRequest Program: " << Program << ", Platform: " << Platform << ", Locale: " << Locale; - for (Component const& component : Components) - stream << std::endl << "Battlenet::Component Program: " << component.Program << ", Platform: " << component.Platform << ", Build: " << component.Build; - - if (!Login.empty()) - stream << std::endl << "Battlenet::Authentication::LogonRequest Login: " << Login; - - return stream.str(); -} - -void Battlenet::Authentication::LogonRequest::CallHandler(Session* session) -{ - session->HandleLogonRequest(*this); -} - void Battlenet::Authentication::ResumeRequest::Read() { Program = _stream.ReadFourCC(); @@ -159,6 +122,47 @@ void Battlenet::Authentication::ProofResponse::CallHandler(Session* session) session->HandleProofResponse(*this); } +void Battlenet::Authentication::LogonRequest3::Read() +{ + Program = _stream.ReadFourCC(); + Platform = _stream.ReadFourCC(); + Locale = _stream.ReadFourCC(); + + Components.resize(_stream.Read<uint32>(6)); + for (size_t i = 0; i < Components.size(); ++i) + { + Component& component = Components[i]; + component.Program = _stream.ReadFourCC(); + component.Platform = _stream.ReadFourCC(); + component.Build = _stream.Read<uint32>(32); + } + + if (_stream.Read<uint32>(1)) + Login = _stream.ReadString(9, 3); + + Compatibility = _stream.Read<uint64>(64); +} + +std::string Battlenet::Authentication::LogonRequest3::ToString() const +{ + std::ostringstream stream; + stream << "Battlenet::Authentication::LogonRequest3 Program: " << Program << ", Platform: " << Platform << ", Locale: " << Locale; + for (Component const& component : Components) + stream << std::endl << "Battlenet::Component Program: " << component.Program << ", Platform: " << component.Platform << ", Build: " << component.Build; + + if (!Login.empty()) + stream << std::endl << " Login: " << Login; + + stream << " Compatibility: " << Compatibility; + + return stream.str(); +} + +void Battlenet::Authentication::LogonRequest3::CallHandler(Session* session) +{ + session->HandleLogonRequest(*this); +} + Battlenet::Authentication::LogonResponse::~LogonResponse() { for (ModuleInfo* m : Modules) @@ -205,6 +209,7 @@ void Battlenet::Authentication::LogonResponse::Write() _stream.Write(GameAccountFlags, 64); _stream.Write(FailedLogins, 32); + _stream.Write(false, 1); // RaF } else { diff --git a/src/server/bnetserver/Packets/AuthenticationPackets.h b/src/server/bnetserver/Packets/AuthenticationPackets.h index c698d3125cf..bcaa0e72011 100644 --- a/src/server/bnetserver/Packets/AuthenticationPackets.h +++ b/src/server/bnetserver/Packets/AuthenticationPackets.h @@ -28,34 +28,19 @@ namespace Battlenet { enum Opcode { - CMSG_LOGON_REQUEST = 0x0, - CMSG_RESUME_REQUEST = 0x1, - CMSG_PROOF_RESPONSE = 0x2, - - SMSG_LOGON_RESPONSE = 0x0, - SMSG_RESUME_RESPONSE = 0x1, - SMSG_PROOF_REQUEST = 0x2, - SMSG_PATCH = 0x3, // Not implemented - SMSG_AUTHORIZED_LICENSES = 0x4 // Not implemented - }; - - class LogonRequest final : public ClientPacket - { - public: - LogonRequest(PacketHeader const& header, BitStream& stream) : ClientPacket(header, stream) - { - ASSERT(header == PacketHeader(CMSG_LOGON_REQUEST, AUTHENTICATION) && "Invalid packet header for LogonRequest"); - } - - void Read() override; - std::string ToString() const override; - void CallHandler(Session* session) override; - - std::string Program; - std::string Platform; - std::string Locale; - std::vector<Component> Components; - std::string Login; + CMSG_LOGON_REQUEST = 0x0, // Deprecated + CMSG_RESUME_REQUEST = 0x1, + CMSG_PROOF_RESPONSE = 0x2, + CMSG_GENERATE_SINGLE_SIGN_ON_TOKEN_REQUEST_2 = 0x8, // Not implemented + CMSG_LOGON_REQUEST_3 = 0x9, + CMSG_SINGLE_SIGN_ON_REQUEST_3 = 0xA, // Not implemented + + SMSG_LOGON_RESPONSE = 0x0, + SMSG_RESUME_RESPONSE = 0x1, + SMSG_PROOF_REQUEST = 0x2, + SMSG_PATCH = 0x3, // Not implemented + SMSG_AUTHORIZED_LICENSES = 0x4, // Not implemented + SMSG_GENERATE_SINGLE_SIGN_ON_TOKEN_REQUEST_2 = 0x8 // Not implemented }; class ResumeRequest final : public ClientPacket @@ -96,6 +81,26 @@ namespace Battlenet std::vector<BitStream*> Modules; }; + class LogonRequest3 final : public ClientPacket + { + public: + LogonRequest3(PacketHeader const& header, BitStream& stream) : ClientPacket(header, stream) + { + ASSERT(header == PacketHeader(CMSG_LOGON_REQUEST_3, AUTHENTICATION) && "Invalid packet header for LogonRequest3"); + } + + void Read() override; + std::string ToString() const override; + void CallHandler(Session* session) override; + + std::string Program; + std::string Platform; + std::string Locale; + std::vector<Component> Components; + std::string Login; + uint64 Compatibility; + }; + class ResponseFailure { public: diff --git a/src/server/bnetserver/Packets/CachePackets.cpp b/src/server/bnetserver/Packets/CachePackets.cpp index b4fa6c6499d..deacfd34065 100644 --- a/src/server/bnetserver/Packets/CachePackets.cpp +++ b/src/server/bnetserver/Packets/CachePackets.cpp @@ -21,20 +21,19 @@ void Battlenet::Cache::GetStreamItemsRequest::Read() { + _stream.WriteSkip(31); + Index = _stream.Read<uint32>(32); + ReferenceTime = _stream.Read<int32>(32) - std::numeric_limits<int32>::min(); + _stream.Read<bool>(1); // StreamDirection + _stream.Read<uint8>(6); // Module count, always 0 + Locale = _stream.ReadFourCC(); if (_stream.Read<bool>(1)) { - _stream.Read<uint16>(11); // padding ItemName = _stream.ReadFourCC(); Channel = _stream.ReadFourCC(); } else _stream.Read<uint16>(16); - - _stream.Read<bool>(1); // StreamDirection - ReferenceTime = _stream.Read<int32>(32) - std::numeric_limits<int32>::min(); - Locale = _stream.ReadFourCC(); - Index = _stream.Read<uint32>(32); - _stream.Read<uint8>(6); // Module count, always 0 } std::string Battlenet::Cache::GetStreamItemsRequest::ToString() const @@ -59,19 +58,17 @@ Battlenet::Cache::GetStreamItemsResponse::~GetStreamItemsResponse() void Battlenet::Cache::GetStreamItemsResponse::Write() { _stream.Write(0, 16); + _stream.Write(1, 16); + _stream.Write(Index, 32); _stream.Write(Modules.size(), 6); for (ModuleInfo const* info : Modules) { _stream.WriteBytes(info->Type.c_str(), 4); _stream.WriteFourCC(info->Region); _stream.WriteBytes(info->ModuleId, 32); + _stream.WriteSkip(27); _stream.WriteBytes(info->Data, 4); } - - _stream.Write(Index, 32); - _stream.Write(0, 17); // padding - _stream.Write(1, 16); - _stream.Write(0, 2); } std::string Battlenet::Cache::GetStreamItemsResponse::ToString() const diff --git a/src/server/bnetserver/Packets/ConnectionPackets.cpp b/src/server/bnetserver/Packets/ConnectionPackets.cpp index aa934cb631a..3b7a9949552 100644 --- a/src/server/bnetserver/Packets/ConnectionPackets.cpp +++ b/src/server/bnetserver/Packets/ConnectionPackets.cpp @@ -63,7 +63,20 @@ std::string Battlenet::Connection::DisconnectRequest::ToString() const void Battlenet::Connection::ConnectionClosing::Read() { + Packets.resize(_stream.Read<uint8>(6)); + for (size_t i = 0; i < Packets.size(); ++i) + { + PacketInfo& info = Packets[i]; + info.CommandName = _stream.ReadFourCC(); + info.Timestamp = _stream.Read<uint32>(32); + info.Size = _stream.Read<uint32>(16); + info.Channel = _stream.ReadFourCC(); + info.LayerId = _stream.Read<uint32>(16); + } + Reason = _stream.Read<ClosingReason>(4); + _stream.ReadBytes(_stream.Read<uint8>(8)); // BadData + if (_stream.Read<bool>(1)) // HasHeader { Header.Opcode = _stream.Read<uint32>(6); @@ -72,18 +85,6 @@ void Battlenet::Connection::ConnectionClosing::Read() } Now = _stream.Read<time_t>(32); - _stream.Read<uint32>(25); - auto bytes = _stream.ReadBytes(_stream.Read<uint8>(8)); // BadData - Packets.resize(_stream.Read<uint8>(6)); - for (size_t i = 0; i < Packets.size(); ++i) - { - PacketInfo& info = Packets[i]; - info.CommandName = _stream.ReadFourCC(); - info.LayerId = _stream.Read<uint32>(16); - info.Channel = _stream.ReadFourCC(); - info.Timestamp = _stream.Read<uint32>(32); - info.Size = _stream.Read<uint32>(16); - } } std::string Battlenet::Connection::ConnectionClosing::ToString() const diff --git a/src/server/bnetserver/Packets/PacketManager.cpp b/src/server/bnetserver/Packets/PacketManager.cpp index e18f3dc5ffb..cbfd0c8b2b6 100644 --- a/src/server/bnetserver/Packets/PacketManager.cpp +++ b/src/server/bnetserver/Packets/PacketManager.cpp @@ -79,9 +79,10 @@ Battlenet::PacketManager::PacketManager() void Battlenet::PacketManager::RegisterAuthenticationPackets() { - REGISTER_CLIENT_PACKET(PacketHeader(Authentication::CMSG_LOGON_REQUEST, AUTHENTICATION), Authentication::LogonRequest); + REGISTER_CLIENT_PACKET_NAME(PacketHeader(Authentication::CMSG_LOGON_REQUEST, AUTHENTICATION), "Authentication::LogonRequest3"); REGISTER_CLIENT_PACKET(PacketHeader(Authentication::CMSG_RESUME_REQUEST, AUTHENTICATION), Authentication::ResumeRequest); REGISTER_CLIENT_PACKET(PacketHeader(Authentication::CMSG_PROOF_RESPONSE, AUTHENTICATION), Authentication::ProofResponse); + REGISTER_CLIENT_PACKET(PacketHeader(Authentication::CMSG_LOGON_REQUEST_3, AUTHENTICATION), Authentication::LogonRequest3); REGISTER_SERVER_PACKET(PacketHeader(Authentication::SMSG_LOGON_RESPONSE, AUTHENTICATION), Authentication::LogonResponse); REGISTER_SERVER_PACKET(PacketHeader(Authentication::SMSG_RESUME_RESPONSE, AUTHENTICATION), Authentication::ResumeResponse); diff --git a/src/server/bnetserver/Packets/WoWRealmPackets.cpp b/src/server/bnetserver/Packets/WoWRealmPackets.cpp index 986152cbccb..714c43b8eb4 100644 --- a/src/server/bnetserver/Packets/WoWRealmPackets.cpp +++ b/src/server/bnetserver/Packets/WoWRealmPackets.cpp @@ -74,9 +74,10 @@ void Battlenet::WoWRealm::ListSubscribeResponse::Write() _stream.Write(CharacterCounts.size(), 7); for (CharacterCountEntry const& entry : CharacterCounts) { + _stream.Write(entry.Realm.Region, 8); + _stream.Write(0, 12); _stream.Write(entry.Realm.Battlegroup, 8); _stream.Write(entry.Realm.Index, 32); - _stream.Write(entry.Realm.Region, 8); _stream.Write(entry.CharacterCount, 16); } @@ -116,11 +117,12 @@ void Battlenet::WoWRealm::ListUpdate::Write() _stream.Write(UpdateState, 1); if (UpdateState == UPDATE) { - _stream.Write(Type + -std::numeric_limits<int32>::min(), 32); + _stream.Write(Timezone, 32); _stream.WriteFloat(Population); - _stream.Write(Flags, 8); _stream.Write(Lock, 8); - _stream.Write(Timezone, 32); + _stream.Write(0, 19); + _stream.Write(Type + -std::numeric_limits<int32>::min(), 32); + _stream.WriteString(Name, 10); _stream.Write(!Version.empty(), 1); if (!Version.empty()) { @@ -137,12 +139,13 @@ void Battlenet::WoWRealm::ListUpdate::Write() _stream.WriteBytes(&port, 2); } - _stream.WriteString(Name, 10); + _stream.Write(Flags, 8); } + _stream.Write(Id.Region, 8); + _stream.Write(0, 12); _stream.Write(Id.Battlegroup, 8); _stream.Write(Id.Index, 32); - _stream.Write(Id.Region, 8); } std::string Battlenet::WoWRealm::ListUpdate::ToString() const @@ -170,15 +173,13 @@ void Battlenet::WoWRealm::ToonReady::Write() uint32 realmAddress = ((Realm.Battlegroup << 16) & 0xFF0000) | uint16(Realm.Index); _stream.Write(realmAddress, 32); _stream.WriteString(Name, 7, -2); - _stream.WriteSkip(7); - _stream.Write(Guid, 64); - _stream.WriteFourCC(Game); - _stream.Write(Realm.Region, 8); _stream.WriteSkip(21); - _stream.Write(realmAddress, 32); - _stream.WriteSkip(9); _stream.Write(0, 64); // Unknown _stream.Write(0, 32); // Unknown + _stream.Write(Guid, 64); + _stream.Write(realmAddress, 32); + _stream.Write(Realm.Region, 8); + _stream.WriteFourCC(Game); } std::string Battlenet::WoWRealm::ToonReady::ToString() const @@ -198,27 +199,27 @@ void Battlenet::WoWRealm::JoinResponseV2::Write() if (Response == SUCCESS) { _stream.Write(ServerSeed, 32); - _stream.Write(IPv6.size(), 5); - for (tcp::endpoint const& addr : IPv6) + _stream.Write(IPv4.size(), 5); + for (tcp::endpoint const& addr : IPv4) { - boost::asio::ip::address_v6::bytes_type ip = addr.address().to_v6().to_bytes(); + boost::asio::ip::address_v4::bytes_type ip = addr.address().to_v4().to_bytes(); uint16 port = addr.port(); EndianConvertReverse(port); - _stream.WriteBytes(ip.data(), 16); + _stream.WriteBytes(ip.data(), 4); _stream.WriteBytes(&port, 2); } - _stream.Write(IPv4.size(), 5); - for (tcp::endpoint const& addr : IPv4) + _stream.Write(IPv6.size(), 5); + for (tcp::endpoint const& addr : IPv6) { - boost::asio::ip::address_v4::bytes_type ip = addr.address().to_v4().to_bytes(); + boost::asio::ip::address_v6::bytes_type ip = addr.address().to_v6().to_bytes(); uint16 port = addr.port(); EndianConvertReverse(port); - _stream.WriteBytes(ip.data(), 4); + _stream.WriteBytes(ip.data(), 16); _stream.WriteBytes(&port, 2); } } diff --git a/src/server/bnetserver/Server/Session.cpp b/src/server/bnetserver/Server/Session.cpp index 9a5f60b296e..edd00e5db2d 100644 --- a/src/server/bnetserver/Server/Session.cpp +++ b/src/server/bnetserver/Server/Session.cpp @@ -93,7 +93,7 @@ void Battlenet::Session::LogUnhandledPacket(PacketHeader const& header) TC_LOG_DEBUG("session.packets", "%s Received unhandled packet %s", GetClientInfo().c_str(), sPacketManager.GetClientPacketName(header)); } -void Battlenet::Session::HandleLogonRequest(Authentication::LogonRequest const& logonRequest) +void Battlenet::Session::HandleLogonRequest(Authentication::LogonRequest3 const& logonRequest) { // Verify that this IP is not in the ip_banned table LoginDatabase.Execute(LoginDatabase.GetPreparedStatement(LOGIN_DEL_EXPIRED_IP_BANS)); diff --git a/src/server/bnetserver/Server/Session.h b/src/server/bnetserver/Server/Session.h index c932115a04b..ded5170ae32 100644 --- a/src/server/bnetserver/Server/Session.h +++ b/src/server/bnetserver/Server/Session.h @@ -63,7 +63,7 @@ namespace Battlenet void LogUnhandledPacket(PacketHeader const& header); // Authentication - void HandleLogonRequest(Authentication::LogonRequest const& logonRequest); + void HandleLogonRequest(Authentication::LogonRequest3 const& logonRequest); void HandleResumeRequest(Authentication::ResumeRequest const& resumeRequest); void HandleProofResponse(Authentication::ProofResponse const& proofResponse); diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index 0b69391f935..ef7f30ee087 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -72,7 +72,7 @@ bool npc_escortAI::AssistPlayerInCombat(Unit* who) return false; //experimental (unknown) flag not present - if (!(me->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_AID_PLAYERS)) + if (!(me->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_CAN_ASSIST)) return false; //not a player diff --git a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp index 00aa8eacc93..7958c330272 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedFollowerAI.cpp @@ -69,7 +69,7 @@ bool FollowerAI::AssistPlayerInCombat(Unit* who) return false; //experimental (unknown) flag not present - if (!(me->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_AID_PLAYERS)) + if (!(me->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_CAN_ASSIST)) return false; //not a player diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index bdad018c622..92f02583915 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -498,7 +498,7 @@ bool SmartAI::AssistPlayerInCombat(Unit* who) return false; //experimental (unknown) flag not present - if (!(me->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_AID_PLAYERS)) + if (!(me->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_CAN_ASSIST)) return false; //not a player diff --git a/src/server/game/DataStores/DBCStores.cpp b/src/server/game/DataStores/DBCStores.cpp index 05a1eb71e90..9b8f0447527 100644 --- a/src/server/game/DataStores/DBCStores.cpp +++ b/src/server/game/DataStores/DBCStores.cpp @@ -957,6 +957,10 @@ uint32 GetMaxLevelForExpansion(uint32 expansion) return 80; case CONTENT_81_85: return 85; + case CONTENT_86_90: + return 90; + case CONTENT_91_100: + return 100; default: break; } diff --git a/src/server/game/DataStores/DBCStores.h b/src/server/game/DataStores/DBCStores.h index eeaa45c9042..885f6041a60 100644 --- a/src/server/game/DataStores/DBCStores.h +++ b/src/server/game/DataStores/DBCStores.h @@ -52,6 +52,8 @@ enum ContentLevels CONTENT_61_70 = 1, CONTENT_71_80 = 2, CONTENT_81_85 = 3, + CONTENT_86_90 = 4, + CONTENT_91_100 = 5, MAX_CONTENT }; diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 0ed4f0d21bb..46c9c80851b 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -954,7 +954,7 @@ bool GameObject::IsTransport() const if (!gInfo) return false; - return gInfo->type == GAMEOBJECT_TYPE_TRANSPORT || gInfo->type == GAMEOBJECT_TYPE_MO_TRANSPORT; + return gInfo->type == GAMEOBJECT_TYPE_TRANSPORT || gInfo->type == GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT; } // is Dynamic transport = non-stop Transport @@ -965,7 +965,7 @@ bool GameObject::IsDynTransport() const if (!gInfo) return false; - return gInfo->type == GAMEOBJECT_TYPE_MO_TRANSPORT || (gInfo->type == GAMEOBJECT_TYPE_TRANSPORT && m_goValue.Transport.StopFrames->empty()); + return gInfo->type == GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT || (gInfo->type == GAMEOBJECT_TYPE_TRANSPORT && m_goValue.Transport.StopFrames->empty()); } bool GameObject::IsDestructibleBuilding() const @@ -1497,7 +1497,7 @@ void GameObject::Use(Unit* user) return; } - case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18 + case GAMEOBJECT_TYPE_RITUAL: //18 { if (user->GetTypeId() != TYPEID_PLAYER) return; @@ -2289,7 +2289,7 @@ void GameObject::BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* t pathProgress = int16(timer / float(GetTransportPeriod()) * 65535.0f); break; } - case GAMEOBJECT_TYPE_MO_TRANSPORT: + case GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT: { float timer = float(m_goValue.Transport.PathProgress % GetUInt32Value(GAMEOBJECT_LEVEL)); pathProgress = int16(timer / float(GetUInt32Value(GAMEOBJECT_LEVEL)) * 65535.0f); diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index bb6a862ad4a..bfad50f1687 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -226,7 +226,7 @@ struct GameObjectTemplate uint32 openTextID; //3 can be used to replace castBarCaption? } camera; //14 GAMEOBJECT_TYPE_MAPOBJECT - empty - //15 GAMEOBJECT_TYPE_MO_TRANSPORT + //15 GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT struct { uint32 taxiPathId; //0 @@ -241,7 +241,7 @@ struct GameObjectTemplate } moTransport; //16 GAMEOBJECT_TYPE_DUELFLAG - empty //17 GAMEOBJECT_TYPE_FISHINGNODE - empty - //18 GAMEOBJECT_TYPE_SUMMONING_RITUAL + //18 GAMEOBJECT_TYPE_RITUAL struct { uint32 reqParticipants; //0 @@ -840,13 +840,13 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map GameObjectModel* m_model; void GetRespawnPosition(float &x, float &y, float &z, float* ori = NULL) const; - Transport* ToTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<Transport*>(this); else return NULL; } - Transport const* ToTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<Transport const*>(this); else return NULL; } + Transport* ToTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT) return reinterpret_cast<Transport*>(this); else return NULL; } + Transport const* ToTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT) return reinterpret_cast<Transport const*>(this); else return NULL; } - float GetStationaryX() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionX(); return GetPositionX(); } - float GetStationaryY() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); } - float GetStationaryZ() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); } - float GetStationaryO() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); } + float GetStationaryX() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT) return m_stationaryPosition.GetPositionX(); return GetPositionX(); } + float GetStationaryY() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); } + float GetStationaryZ() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); } + float GetStationaryO() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); } float GetInteractionDistance() const; @@ -865,7 +865,7 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map // For traps this: spell casting cooldown, for doors/buttons: reset time. std::list<uint32> m_SkillupList; - ObjectGuid m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_SUMMONING_RITUAL where GO is not summoned (no owner) + ObjectGuid m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_RITUAL where GO is not summoned (no owner) GuidSet m_unique_users; uint32 m_usetimes; diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index c9c17efe3f9..b604f23e3e8 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -67,7 +67,7 @@ enum HighGuid HIGHGUID_CORPSE = 0xF101, // blizz F100 HIGHGUID_AREATRIGGER = 0xF102, HIGHGUID_BATTLEGROUND = 0x1F1, - HIGHGUID_MO_TRANSPORT = 0x1FC, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT) + HIGHGUID_MO_TRANSPORT = 0x1FC, // blizz 1FC0 (for GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT) HIGHGUID_INSTANCE = 0x1F4, // blizz 1F40 HIGHGUID_GROUP = 0x1F5, HIGHGUID_GUILD = 0x1FF diff --git a/src/server/game/Entities/Transport/Transport.cpp b/src/server/game/Entities/Transport/Transport.cpp index dd4dbb41f87..f237c1aa71a 100644 --- a/src/server/game/Entities/Transport/Transport.cpp +++ b/src/server/game/Entities/Transport/Transport.cpp @@ -93,7 +93,7 @@ bool Transport::Create(uint32 guidlow, uint32 entry, uint32 mapid, float x, floa SetEntry(goinfo->entry); SetDisplayId(goinfo->displayId); SetGoState(!goinfo->moTransport.canBeStopped ? GO_STATE_READY : GO_STATE_ACTIVE); - SetGoType(GAMEOBJECT_TYPE_MO_TRANSPORT); + SetGoType(GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT); SetGoAnimProgress(animprogress); SetName(goinfo->name); UpdateRotationFields(0.0f, 1.0f); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 30a22f4d193..1bf6993ad4b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10328,7 +10328,7 @@ bool Unit::_IsValidAttackTarget(Unit const* target, SpellInfo const* bySpell, Wo } Creature const* creatureAttacker = ToCreature(); - if (creatureAttacker && creatureAttacker->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PARTY_MEMBER) + if (creatureAttacker && creatureAttacker->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_TREAT_AS_RAID_UNIT) return false; Player const* playerAffectingAttacker = HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE) ? GetAffectingPlayer() : NULL; @@ -10415,7 +10415,7 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co // can't assist non-friendly targets if (GetReactionTo(target) < REP_NEUTRAL && target->GetReactionTo(this) < REP_NEUTRAL - && (!ToCreature() || !(ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PARTY_MEMBER))) + && (!ToCreature() || !(ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_TREAT_AS_RAID_UNIT))) return false; // PvP case @@ -10449,7 +10449,7 @@ bool Unit::_IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) co && !((target->GetByteValue(UNIT_FIELD_BYTES_2, 1) & UNIT_BYTE2_FLAG_PVP))) { if (Creature const* creatureTarget = target->ToCreature()) - return creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PARTY_MEMBER || creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_AID_PLAYERS; + return creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_TREAT_AS_RAID_UNIT || creatureTarget->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_CAN_ASSIST; } return true; } @@ -14520,8 +14520,8 @@ bool Unit::IsInPartyWith(Unit const* unit) const if (u1->GetTypeId() == TYPEID_PLAYER && u2->GetTypeId() == TYPEID_PLAYER) return u1->ToPlayer()->IsInSameGroupWith(u2->ToPlayer()); - else if ((u2->GetTypeId() == TYPEID_PLAYER && u1->GetTypeId() == TYPEID_UNIT && u1->ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PARTY_MEMBER) || - (u1->GetTypeId() == TYPEID_PLAYER && u2->GetTypeId() == TYPEID_UNIT && u2->ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PARTY_MEMBER)) + else if ((u2->GetTypeId() == TYPEID_PLAYER && u1->GetTypeId() == TYPEID_UNIT && u1->ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_TREAT_AS_RAID_UNIT) || + (u1->GetTypeId() == TYPEID_PLAYER && u2->GetTypeId() == TYPEID_UNIT && u2->ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_TREAT_AS_RAID_UNIT)) return true; else return false; @@ -14539,8 +14539,8 @@ bool Unit::IsInRaidWith(Unit const* unit) const if (u1->GetTypeId() == TYPEID_PLAYER && u2->GetTypeId() == TYPEID_PLAYER) return u1->ToPlayer()->IsInSameRaidWith(u2->ToPlayer()); - else if ((u2->GetTypeId() == TYPEID_PLAYER && u1->GetTypeId() == TYPEID_UNIT && u1->ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PARTY_MEMBER) || - (u1->GetTypeId() == TYPEID_PLAYER && u2->GetTypeId() == TYPEID_UNIT && u2->ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_PARTY_MEMBER)) + else if ((u2->GetTypeId() == TYPEID_PLAYER && u1->GetTypeId() == TYPEID_UNIT && u1->ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_TREAT_AS_RAID_UNIT) || + (u1->GetTypeId() == TYPEID_PLAYER && u2->GetTypeId() == TYPEID_UNIT && u2->ToCreature()->GetCreatureTemplate()->type_flags & CREATURE_TYPEFLAGS_TREAT_AS_RAID_UNIT)) return true; else return false; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index ce87a7bfa72..6ceee339d70 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -6755,7 +6755,7 @@ void ObjectMgr::LoadGameObjectTemplate() CheckGOLockId(&got, got.camera.lockId, 0); break; } - case GAMEOBJECT_TYPE_MO_TRANSPORT: //15 + case GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT: //15 { if (got.moTransport.taxiPathId) { @@ -6767,7 +6767,7 @@ void ObjectMgr::LoadGameObjectTemplate() _transportMaps.insert(transportMap); break; } - case GAMEOBJECT_TYPE_SUMMONING_RITUAL: //18 + case GAMEOBJECT_TYPE_RITUAL: //18 break; case GAMEOBJECT_TYPE_SPELLCASTER: //22 { diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index ba67fbd1e4b..c0736fb6c42 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -51,7 +51,9 @@ enum Expansions EXPANSION_THE_BURNING_CRUSADE = 1, EXPANSION_WRATH_OF_THE_LICH_KING = 2, EXPANSION_CATACLYSM = 3, - MAX_EXPANSIONS = 4 + EXPANSION_MISTS_OF_PANDARIA = 4, + EXPANSION_WARLORDS_OF_DRAENOR = 5, + MAX_EXPANSIONS = 6 }; enum Gender @@ -61,7 +63,7 @@ enum Gender GENDER_NONE = 2 }; -// Race value is index in ChrRaces.dbc +// ChrRaces.dbc (6.0.2.18988) enum Races { RACE_NONE = 0, @@ -88,20 +90,27 @@ enum Races //RACE_ICE_TROLL = 21, RACE_WORGEN = 22, //RACE_GILNEAN = 23 + RACE_PANDAREN_NEUTRAL = 24, + RACE_PANDAREN_ALLIANCE = 25, + RACE_PANDAREN_HORDE = 26 }; // max+1 for player race -#define MAX_RACES 23 +#define MAX_RACES 27 #define RACEMASK_ALL_PLAYABLE \ ((1<<(RACE_HUMAN-1)) |(1<<(RACE_ORC-1)) |(1<<(RACE_DWARF-1)) | \ (1<<(RACE_NIGHTELF-1))|(1<<(RACE_UNDEAD_PLAYER-1))|(1<<(RACE_TAUREN-1)) | \ (1<<(RACE_GNOME-1)) |(1<<(RACE_TROLL-1)) |(1<<(RACE_BLOODELF-1))| \ - (1<<(RACE_DRAENEI-1)) |(1<<(RACE_GOBLIN-1)) |(1<<(RACE_WORGEN-1))) + (1<<(RACE_DRAENEI-1)) |(1<<(RACE_GOBLIN-1)) |(1<<(RACE_WORGEN-1)) | \ + (1<<(RACE_PANDAREN_NEUTRAL-1)) | (1<<(RACE_PANDAREN_ALLIANCE-1)) | (1<<(RACE_PANDAREN_HORDE-1))) + +#define RACEMASK_NEUTRAL (1<<(RACE_PANDAREN_NEUTRAL-1)) #define RACEMASK_ALLIANCE \ ((1<<(RACE_HUMAN-1)) | (1<<(RACE_DWARF-1)) | (1<<(RACE_NIGHTELF-1)) | \ - (1<<(RACE_GNOME-1)) | (1<<(RACE_DRAENEI-1)) | (1<<(RACE_WORGEN-1))) + (1<<(RACE_GNOME-1)) | (1<<(RACE_DRAENEI-1)) | (1<<(RACE_WORGEN-1)) | \ + (1<<(RACE_PANDAREN_ALLIANCE-1))) #define RACEMASK_HORDE RACEMASK_ALL_PLAYABLE & ~RACEMASK_ALLIANCE @@ -118,7 +127,7 @@ enum Classes CLASS_SHAMAN = 7, CLASS_MAGE = 8, CLASS_WARLOCK = 9, - //CLASS_UNK = 10, + CLASS_MONK = 10, CLASS_DRUID = 11 }; @@ -181,20 +190,26 @@ enum Stats #define MAX_STATS 5 -enum Powers +enum Powers // (6.0) { POWER_MANA = 0, POWER_RAGE = 1, POWER_FOCUS = 2, POWER_ENERGY = 3, - POWER_UNUSED = 4, + POWER_COMBO_POINTS = 4, POWER_RUNES = 5, POWER_RUNIC_POWER = 6, POWER_SOUL_SHARDS = 7, POWER_ECLIPSE = 8, POWER_HOLY_POWER = 9, POWER_ALTERNATE_POWER = 10, // Used in some quests - MAX_POWERS = 11, + POWER_DARK_FORCE = 11, + POWER_CHI = 12, + POWER_SHADOW_ORBS = 13, + POWER_BURNING_EMBERS = 14, + POWER_DEMONIC_FURY = 15, + POWER_ARCANE_CHARGES = 16, + MAX_POWERS = 17, POWER_ALL = 127, // default for class? POWER_HEALTH = 0xFFFFFFFE // (-2 as signed value) }; @@ -249,14 +264,14 @@ inline SpellSchools GetFirstSchoolInMask(SpellSchoolMask mask) enum ItemQualities { - ITEM_QUALITY_POOR = 0, //GREY - ITEM_QUALITY_NORMAL = 1, //WHITE - ITEM_QUALITY_UNCOMMON = 2, //GREEN - ITEM_QUALITY_RARE = 3, //BLUE - ITEM_QUALITY_EPIC = 4, //PURPLE - ITEM_QUALITY_LEGENDARY = 5, //ORANGE - ITEM_QUALITY_ARTIFACT = 6, //LIGHT YELLOW - ITEM_QUALITY_HEIRLOOM = 7 + ITEM_QUALITY_POOR = 0, // GREY + ITEM_QUALITY_NORMAL = 1, // WHITE + ITEM_QUALITY_UNCOMMON = 2, // GREEN + ITEM_QUALITY_RARE = 3, // BLUE + ITEM_QUALITY_EPIC = 4, // PURPLE + ITEM_QUALITY_LEGENDARY = 5, // ORANGE + ITEM_QUALITY_ARTIFACT = 6, // LIGHT YELLOW + ITEM_QUALITY_HEIRLOOM = 7 }; #define MAX_ITEM_QUALITY 8 @@ -269,14 +284,14 @@ enum SpellCategory const uint32 ItemQualityColors[MAX_ITEM_QUALITY] = { - 0xff9d9d9d, //GREY - 0xffffffff, //WHITE - 0xff1eff00, //GREEN - 0xff0070dd, //BLUE - 0xffa335ee, //PURPLE - 0xffff8000, //ORANGE - 0xffe6cc80, //LIGHT YELLOW - 0xffe6cc80 //LIGHT YELLOW + 0xff9d9d9d, // GREY + 0xffffffff, // WHITE + 0xff1eff00, // GREEN + 0xff0070dd, // BLUE + 0xffa335ee, // PURPLE + 0xffff8000, // ORANGE + 0xffe6cc80, // LIGHT YELLOW + 0xffe6cc80 // LIGHT YELLOW }; // *********************************** @@ -679,6 +694,106 @@ enum SpellAttr10 SPELL_ATTR10_UNK31 = 0x80000000 // 31 }; +enum SpellAttr11 +{ + SPELL_ATTR11_UNK0 = 0x00000001, // 0 + SPELL_ATTR11_UNK1 = 0x00000002, // 1 + SPELL_ATTR11_UNK2 = 0x00000004, // 2 + SPELL_ATTR11_UNK3 = 0x00000008, // 3 + SPELL_ATTR11_UNK4 = 0x00000010, // 4 + SPELL_ATTR11_UNK5 = 0x00000020, // 5 + SPELL_ATTR11_UNK6 = 0x00000040, // 6 + SPELL_ATTR11_UNK7 = 0x00000080, // 7 + SPELL_ATTR11_UNK8 = 0x00000100, // 8 + SPELL_ATTR11_UNK9 = 0x00000200, // 9 + SPELL_ATTR11_UNK10 = 0x00000400, // 10 + SPELL_ATTR11_UNK11 = 0x00000800, // 11 + SPELL_ATTR11_UNK12 = 0x00001000, // 12 + SPELL_ATTR11_UNK13 = 0x00002000, // 13 + SPELL_ATTR11_UNK14 = 0x00004000, // 14 + SPELL_ATTR11_UNK15 = 0x00008000, // 15 + SPELL_ATTR11_UNK16 = 0x00010000, // 16 + SPELL_ATTR11_UNK17 = 0x00020000, // 17 + SPELL_ATTR11_UNK18 = 0x00040000, // 18 + SPELL_ATTR11_UNK19 = 0x00080000, // 19 + SPELL_ATTR11_UNK20 = 0x00100000, // 20 + SPELL_ATTR11_UNK21 = 0x00200000, // 21 + SPELL_ATTR11_UNK22 = 0x00400000, // 22 + SPELL_ATTR11_UNK23 = 0x00800000, // 23 + SPELL_ATTR11_UNK24 = 0x01000000, // 24 + SPELL_ATTR11_UNK25 = 0x02000000, // 25 + SPELL_ATTR11_UNK26 = 0x04000000, // 26 + SPELL_ATTR11_UNK27 = 0x08000000, // 27 + SPELL_ATTR11_UNK28 = 0x10000000, // 28 + SPELL_ATTR11_UNK29 = 0x20000000, // 29 + SPELL_ATTR11_UNK30 = 0x40000000, // 30 + SPELL_ATTR11_UNK31 = 0x80000000 // 31 +}; + +enum SpellAttr12 +{ + SPELL_ATTR12_UNK0 = 0x00000001, // 0 + SPELL_ATTR12_UNK1 = 0x00000002, // 1 + SPELL_ATTR12_UNK2 = 0x00000004, // 2 + SPELL_ATTR12_UNK3 = 0x00000008, // 3 + SPELL_ATTR12_UNK4 = 0x00000010, // 4 + SPELL_ATTR12_UNK5 = 0x00000020, // 5 + SPELL_ATTR12_UNK6 = 0x00000040, // 6 + SPELL_ATTR12_UNK7 = 0x00000080, // 7 + SPELL_ATTR12_UNK8 = 0x00000100, // 8 + SPELL_ATTR12_UNK9 = 0x00000200, // 9 + SPELL_ATTR12_UNK10 = 0x00000400, // 10 + SPELL_ATTR12_UNK11 = 0x00000800, // 11 + SPELL_ATTR12_UNK12 = 0x00001000, // 12 + SPELL_ATTR12_UNK13 = 0x00002000, // 13 + SPELL_ATTR12_UNK14 = 0x00004000, // 14 + SPELL_ATTR12_UNK15 = 0x00008000, // 15 + SPELL_ATTR12_UNK16 = 0x00010000, // 16 + SPELL_ATTR12_UNK17 = 0x00020000, // 17 + SPELL_ATTR12_UNK18 = 0x00040000, // 18 + SPELL_ATTR12_UNK19 = 0x00080000, // 19 + SPELL_ATTR12_UNK20 = 0x00100000, // 20 + SPELL_ATTR12_UNK21 = 0x00200000, // 21 + SPELL_ATTR12_UNK22 = 0x00400000, // 22 + SPELL_ATTR12_UNK23 = 0x00800000, // 23 + SPELL_ATTR12_UNK24 = 0x01000000, // 24 + SPELL_ATTR12_UNK25 = 0x02000000, // 25 + SPELL_ATTR12_UNK26 = 0x04000000, // 26 + SPELL_ATTR12_UNK27 = 0x08000000, // 27 + SPELL_ATTR12_UNK28 = 0x10000000, // 28 + SPELL_ATTR12_UNK29 = 0x20000000, // 29 + SPELL_ATTR12_UNK30 = 0x40000000, // 30 + SPELL_ATTR12_UNK31 = 0x80000000 // 31 +}; + +enum SpellAttr13 +{ + SPELL_ATTR13_UNK0 = 0x00000001, // 0 + SPELL_ATTR13_UNK1 = 0x00000002, // 1 + SPELL_ATTR13_UNK2 = 0x00000004, // 2 + SPELL_ATTR13_UNK3 = 0x00000008, // 3 + SPELL_ATTR13_UNK4 = 0x00000010, // 4 + SPELL_ATTR13_UNK5 = 0x00000020, // 5 + SPELL_ATTR13_UNK6 = 0x00000040, // 6 + SPELL_ATTR13_UNK7 = 0x00000080, // 7 + SPELL_ATTR13_UNK8 = 0x00000100, // 8 + SPELL_ATTR13_UNK9 = 0x00000200, // 9 + SPELL_ATTR13_UNK10 = 0x00000400, // 10 + SPELL_ATTR13_UNK11 = 0x00000800, // 11 + SPELL_ATTR13_UNK12 = 0x00001000, // 12 + SPELL_ATTR13_UNK13 = 0x00002000, // 13 + SPELL_ATTR13_UNK14 = 0x00004000, // 14 + SPELL_ATTR13_UNK15 = 0x00008000, // 15 + SPELL_ATTR13_UNK16 = 0x00010000, // 16 + SPELL_ATTR13_UNK17 = 0x00020000, // 17 + SPELL_ATTR13_UNK18 = 0x00040000, // 18 + SPELL_ATTR13_UNK19 = 0x00080000, // 19 + SPELL_ATTR13_UNK20 = 0x00100000, // 20 + SPELL_ATTR13_UNK21 = 0x00200000, // 21 + SPELL_ATTR13_UNK22 = 0x00400000, // 22 + SPELL_ATTR13_UNK23 = 0x00800000 // 23 +}; + #define MIN_TALENT_SPEC 0 #define MAX_TALENT_SPEC 1 #define MIN_TALENT_SPECS 1 @@ -689,11 +804,11 @@ enum SpellAttr10 // Custom values enum SpellClickUserTypes { - SPELL_CLICK_USER_ANY = 0, + SPELL_CLICK_USER_ANY = 0, SPELL_CLICK_USER_FRIEND = 1, - SPELL_CLICK_USER_RAID = 2, - SPELL_CLICK_USER_PARTY = 3, - SPELL_CLICK_USER_MAX = 4 + SPELL_CLICK_USER_RAID = 2, + SPELL_CLICK_USER_PARTY = 3, + SPELL_CLICK_USER_MAX = 4 }; enum SpellClickCastFlags @@ -741,32 +856,37 @@ enum CharacterSlot SLOT_EMPTY = 19 }; +// Languages.dbc (6.0.2.18988) enum Language { - LANG_UNIVERSAL = 0, - LANG_ORCISH = 1, - LANG_DARNASSIAN = 2, - LANG_TAURAHE = 3, - LANG_DWARVISH = 6, - LANG_COMMON = 7, - LANG_DEMONIC = 8, - LANG_TITAN = 9, - LANG_THALASSIAN = 10, - LANG_DRACONIC = 11, - LANG_KALIMAG = 12, - LANG_GNOMISH = 13, - LANG_TROLL = 14, - LANG_GUTTERSPEAK = 33, - LANG_DRAENEI = 35, - LANG_ZOMBIE = 36, - LANG_GNOMISH_BINARY = 37, - LANG_GOBLIN_BINARY = 38, - LANG_WORGEN = 39, - LANG_GOBLIN = 40, - LANG_ADDON = 0xFFFFFFFF // used by addons, in 2.4.0 not exist, replaced by messagetype? + LANG_UNIVERSAL = 0, + LANG_ORCISH = 1, + LANG_DARNASSIAN = 2, + LANG_TAURAHE = 3, + LANG_DWARVISH = 6, + LANG_COMMON = 7, + LANG_DEMONIC = 8, + LANG_TITAN = 9, + LANG_THALASSIAN = 10, + LANG_DRACONIC = 11, + LANG_KALIMAG = 12, + LANG_GNOMISH = 13, + LANG_TROLL = 14, + LANG_GUTTERSPEAK = 33, + LANG_DRAENEI = 35, + LANG_ZOMBIE = 36, + LANG_GNOMISH_BINARY = 37, + LANG_GOBLIN_BINARY = 38, + LANG_WORGEN = 39, + LANG_GOBLIN = 40, + LANG_PANDAREN_NEUTRAL = 42, + LANG_PANDAREN_ALLIANCE = 43, + LANG_PANDAREN_HORDE = 44, + LANG_RIKKITUN = 168, + LANG_ADDON = 0xFFFFFFFF // used by addons, in 2.4.0 not exist, replaced by messagetype? }; -#define LANGUAGES_COUNT 21 +#define LANGUAGES_COUNT 25 enum TeamId { @@ -974,213 +1094,249 @@ enum SpellEffects TOTAL_SPELL_EFFECTS = 183, }; -enum SpellCastResult +enum SpellCastResult // (6.0) { - SPELL_FAILED_SUCCESS = 0, - SPELL_FAILED_AFFECTING_COMBAT = 1, - SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 2, - SPELL_FAILED_ALREADY_AT_FULL_MANA = 3, - SPELL_FAILED_ALREADY_AT_FULL_POWER = 4, - SPELL_FAILED_ALREADY_BEING_TAMED = 5, - SPELL_FAILED_ALREADY_HAVE_CHARM = 6, - SPELL_FAILED_ALREADY_HAVE_SUMMON = 7, - SPELL_FAILED_ALREADY_HAVE_PET = 8, - SPELL_FAILED_ALREADY_OPEN = 9, - SPELL_FAILED_AURA_BOUNCED = 10, - SPELL_FAILED_AUTOTRACK_INTERRUPTED = 11, - SPELL_FAILED_BAD_IMPLICIT_TARGETS = 12, - SPELL_FAILED_BAD_TARGETS = 13, - SPELL_FAILED_CANT_BE_CHARMED = 14, - SPELL_FAILED_CANT_BE_DISENCHANTED = 15, - SPELL_FAILED_CANT_BE_DISENCHANTED_SKILL = 16, - SPELL_FAILED_CANT_BE_MILLED = 17, - SPELL_FAILED_CANT_BE_PROSPECTED = 18, - SPELL_FAILED_CANT_CAST_ON_TAPPED = 19, - SPELL_FAILED_CANT_DUEL_WHILE_INVISIBLE = 20, - SPELL_FAILED_CANT_DUEL_WHILE_STEALTHED = 21, - SPELL_FAILED_CANT_STEALTH = 22, - SPELL_FAILED_CASTER_AURASTATE = 23, - SPELL_FAILED_CASTER_DEAD = 24, - SPELL_FAILED_CHARMED = 25, - SPELL_FAILED_CHEST_IN_USE = 26, - SPELL_FAILED_CONFUSED = 27, - SPELL_FAILED_DONT_REPORT = 28, - SPELL_FAILED_EQUIPPED_ITEM = 29, - SPELL_FAILED_EQUIPPED_ITEM_CLASS = 30, - SPELL_FAILED_EQUIPPED_ITEM_CLASS_MAINHAND = 31, - SPELL_FAILED_EQUIPPED_ITEM_CLASS_OFFHAND = 32, - SPELL_FAILED_ERROR = 33, - SPELL_FAILED_FALLING = 34, - SPELL_FAILED_FIZZLE = 35, - SPELL_FAILED_FLEEING = 36, - SPELL_FAILED_FOOD_LOWLEVEL = 37, - SPELL_FAILED_HIGHLEVEL = 38, - SPELL_FAILED_HUNGER_SATIATED = 39, - SPELL_FAILED_IMMUNE = 40, - SPELL_FAILED_INCORRECT_AREA = 41, - SPELL_FAILED_INTERRUPTED = 42, - SPELL_FAILED_INTERRUPTED_COMBAT = 43, - SPELL_FAILED_ITEM_ALREADY_ENCHANTED = 44, - SPELL_FAILED_ITEM_GONE = 45, - SPELL_FAILED_ITEM_NOT_FOUND = 46, - SPELL_FAILED_ITEM_NOT_READY = 47, - SPELL_FAILED_LEVEL_REQUIREMENT = 48, - SPELL_FAILED_LINE_OF_SIGHT = 49, - SPELL_FAILED_LOWLEVEL = 50, - SPELL_FAILED_LOW_CASTLEVEL = 51, - SPELL_FAILED_MAINHAND_EMPTY = 52, - SPELL_FAILED_MOVING = 53, - SPELL_FAILED_NEED_AMMO = 54, - SPELL_FAILED_NEED_AMMO_POUCH = 55, - SPELL_FAILED_NEED_EXOTIC_AMMO = 56, - SPELL_FAILED_NEED_MORE_ITEMS = 57, - SPELL_FAILED_NOPATH = 58, - SPELL_FAILED_NOT_BEHIND = 59, - SPELL_FAILED_NOT_FISHABLE = 60, - SPELL_FAILED_NOT_FLYING = 61, - SPELL_FAILED_NOT_HERE = 62, - SPELL_FAILED_NOT_INFRONT = 63, - SPELL_FAILED_NOT_IN_CONTROL = 64, - SPELL_FAILED_NOT_KNOWN = 65, - SPELL_FAILED_NOT_MOUNTED = 66, - SPELL_FAILED_NOT_ON_TAXI = 67, - SPELL_FAILED_NOT_ON_TRANSPORT = 68, - SPELL_FAILED_NOT_READY = 69, - SPELL_FAILED_NOT_SHAPESHIFT = 70, - SPELL_FAILED_NOT_STANDING = 71, - SPELL_FAILED_NOT_TRADEABLE = 72, - SPELL_FAILED_NOT_TRADING = 73, - SPELL_FAILED_NOT_UNSHEATHED = 74, - SPELL_FAILED_NOT_WHILE_GHOST = 75, - SPELL_FAILED_NOT_WHILE_LOOTING = 76, - SPELL_FAILED_NO_AMMO = 77, - SPELL_FAILED_NO_CHARGES_REMAIN = 78, - SPELL_FAILED_NO_CHAMPION = 79, - SPELL_FAILED_NO_COMBO_POINTS = 80, - SPELL_FAILED_NO_DUELING = 81, - SPELL_FAILED_NO_ENDURANCE = 82, - SPELL_FAILED_NO_FISH = 83, - SPELL_FAILED_NO_ITEMS_WHILE_SHAPESHIFTED = 84, - SPELL_FAILED_NO_MOUNTS_ALLOWED = 85, - SPELL_FAILED_NO_PET = 86, - SPELL_FAILED_NO_POWER = 87, - SPELL_FAILED_NOTHING_TO_DISPEL = 88, - SPELL_FAILED_NOTHING_TO_STEAL = 89, - SPELL_FAILED_ONLY_ABOVEWATER = 90, - SPELL_FAILED_ONLY_DAYTIME = 91, - SPELL_FAILED_ONLY_INDOORS = 92, - SPELL_FAILED_ONLY_MOUNTED = 93, - SPELL_FAILED_ONLY_NIGHTTIME = 94, - SPELL_FAILED_ONLY_OUTDOORS = 95, - SPELL_FAILED_ONLY_SHAPESHIFT = 96, - SPELL_FAILED_ONLY_STEALTHED = 97, - SPELL_FAILED_ONLY_UNDERWATER = 98, - SPELL_FAILED_OUT_OF_RANGE = 99, - SPELL_FAILED_PACIFIED = 100, - SPELL_FAILED_POSSESSED = 101, - SPELL_FAILED_REAGENTS = 102, - SPELL_FAILED_REQUIRES_AREA = 103, - SPELL_FAILED_REQUIRES_SPELL_FOCUS = 104, - SPELL_FAILED_ROOTED = 105, - SPELL_FAILED_SILENCED = 106, - SPELL_FAILED_SPELL_IN_PROGRESS = 107, - SPELL_FAILED_SPELL_LEARNED = 108, - SPELL_FAILED_SPELL_UNAVAILABLE = 109, - SPELL_FAILED_STUNNED = 110, - SPELL_FAILED_TARGETS_DEAD = 111, - SPELL_FAILED_TARGET_AFFECTING_COMBAT = 112, - SPELL_FAILED_TARGET_AURASTATE = 113, - SPELL_FAILED_TARGET_DUELING = 114, - SPELL_FAILED_TARGET_ENEMY = 115, - SPELL_FAILED_TARGET_ENRAGED = 116, - SPELL_FAILED_TARGET_FRIENDLY = 117, - SPELL_FAILED_TARGET_IN_COMBAT = 118, - SPELL_FAILED_TARGET_IS_PLAYER = 119, - SPELL_FAILED_TARGET_IS_PLAYER_CONTROLLED = 120, - SPELL_FAILED_TARGET_NOT_DEAD = 121, - SPELL_FAILED_TARGET_NOT_IN_PARTY = 122, - SPELL_FAILED_TARGET_NOT_LOOTED = 123, - SPELL_FAILED_TARGET_NOT_PLAYER = 124, - SPELL_FAILED_TARGET_NO_POCKETS = 125, - SPELL_FAILED_TARGET_NO_WEAPONS = 126, - SPELL_FAILED_TARGET_NO_RANGED_WEAPONS = 127, - SPELL_FAILED_TARGET_UNSKINNABLE = 128, - SPELL_FAILED_THIRST_SATIATED = 129, - SPELL_FAILED_TOO_CLOSE = 130, - SPELL_FAILED_TOO_MANY_OF_ITEM = 131, - SPELL_FAILED_TOTEM_CATEGORY = 132, - SPELL_FAILED_TOTEMS = 133, - SPELL_FAILED_TRY_AGAIN = 134, - SPELL_FAILED_UNIT_NOT_BEHIND = 135, - SPELL_FAILED_UNIT_NOT_INFRONT = 136, - SPELL_FAILED_VISION_OBSCURED = 137, - SPELL_FAILED_WRONG_PET_FOOD = 138, - SPELL_FAILED_NOT_WHILE_FATIGUED = 139, - SPELL_FAILED_TARGET_NOT_IN_INSTANCE = 140, - SPELL_FAILED_NOT_WHILE_TRADING = 141, - SPELL_FAILED_TARGET_NOT_IN_RAID = 142, - SPELL_FAILED_TARGET_FREEFORALL = 143, - SPELL_FAILED_NO_EDIBLE_CORPSES = 144, - SPELL_FAILED_ONLY_BATTLEGROUNDS = 145, - SPELL_FAILED_TARGET_NOT_GHOST = 146, - SPELL_FAILED_TRANSFORM_UNUSABLE = 147, - SPELL_FAILED_WRONG_WEATHER = 148, - SPELL_FAILED_DAMAGE_IMMUNE = 149, - SPELL_FAILED_PREVENTED_BY_MECHANIC = 150, - SPELL_FAILED_PLAY_TIME = 151, - SPELL_FAILED_REPUTATION = 152, - SPELL_FAILED_MIN_SKILL = 153, - SPELL_FAILED_NOT_IN_RATED_BATTLEGROUND = 154, - SPELL_FAILED_NOT_ON_SHAPESHIFT = 155, - SPELL_FAILED_NOT_ON_STEALTHED = 156, - SPELL_FAILED_NOT_ON_DAMAGE_IMMUNE = 157, - SPELL_FAILED_NOT_ON_MOUNTED = 158, - SPELL_FAILED_TOO_SHALLOW = 159, - SPELL_FAILED_TARGET_NOT_IN_SANCTUARY = 160, - SPELL_FAILED_TARGET_IS_TRIVIAL = 161, - SPELL_FAILED_BM_OR_INVISGOD = 162, - SPELL_FAILED_EXPERT_RIDING_REQUIREMENT = 163, - SPELL_FAILED_ARTISAN_RIDING_REQUIREMENT = 164, - SPELL_FAILED_NOT_IDLE = 165, - SPELL_FAILED_NOT_INACTIVE = 166, - SPELL_FAILED_PARTIAL_PLAYTIME = 167, - SPELL_FAILED_NO_PLAYTIME = 168, - SPELL_FAILED_NOT_IN_BATTLEGROUND = 169, - SPELL_FAILED_NOT_IN_RAID_INSTANCE = 170, - SPELL_FAILED_ONLY_IN_ARENA = 171, - SPELL_FAILED_TARGET_LOCKED_TO_RAID_INSTANCE = 172, - SPELL_FAILED_ON_USE_ENCHANT = 173, - SPELL_FAILED_NOT_ON_GROUND = 174, - SPELL_FAILED_CUSTOM_ERROR = 175, - SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW = 176, - SPELL_FAILED_TOO_MANY_SOCKETS = 177, - SPELL_FAILED_INVALID_GLYPH = 178, - SPELL_FAILED_UNIQUE_GLYPH = 179, - SPELL_FAILED_GLYPH_SOCKET_LOCKED = 180, - SPELL_FAILED_NO_VALID_TARGETS = 181, - SPELL_FAILED_ITEM_AT_MAX_CHARGES = 182, - SPELL_FAILED_NOT_IN_BARBERSHOP = 183, - SPELL_FAILED_FISHING_TOO_LOW = 184, - SPELL_FAILED_ITEM_ENCHANT_TRADE_WINDOW = 185, - SPELL_FAILED_SUMMON_PENDING = 186, - SPELL_FAILED_MAX_SOCKETS = 187, - SPELL_FAILED_PET_CAN_RENAME = 188, - SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED = 189, - SPELL_FAILED_NO_ACTIONS = 190, - SPELL_FAILED_CURRENCY_WEIGHT_MISMATCH = 191, - SPELL_FAILED_WEIGHT_NOT_ENOUGH = 192, - SPELL_FAILED_WEIGHT_TOO_MUCH = 193, - SPELL_FAILED_NO_VACANT_SEAT = 194, - SPELL_FAILED_NO_LIQUID = 195, - SPELL_FAILED_ONLY_NOT_SWIMMING = 196, - SPELL_FAILED_BY_NOT_MOVING = 197, - SPELL_FAILED_IN_COMBAT_RES_LIMIT_REACHED = 198, - SPELL_FAILED_NOT_IN_ARENA = 199, - SPELL_FAILED_TARGET_NOT_GROUNDED = 200, - SPELL_FAILED_EXCEEDED_WEEKLY_USAGE = 201, - SPELL_FAILED_NOT_IN_LFG_DUNGEON = 202, - SPELL_FAILED_UNKNOWN = 254, // custom value, default case - SPELL_CAST_OK = 255, // custom value, must not be sent to client + SPELL_FAILED_SUCCESS = 0, + SPELL_FAILED_AFFECTING_COMBAT = 1, + SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 2, + SPELL_FAILED_ALREADY_AT_FULL_MANA = 3, + SPELL_FAILED_ALREADY_AT_FULL_POWER = 4, + SPELL_FAILED_ALREADY_BEING_TAMED = 5, + SPELL_FAILED_ALREADY_HAVE_CHARM = 6, + SPELL_FAILED_ALREADY_HAVE_SUMMON = 7, + SPELL_FAILED_ALREADY_HAVE_PET = 8, + SPELL_FAILED_ALREADY_OPEN = 9, + SPELL_FAILED_AURA_BOUNCED = 10, + SPELL_FAILED_AUTOTRACK_INTERRUPTED = 11, + SPELL_FAILED_BAD_IMPLICIT_TARGETS = 12, + SPELL_FAILED_BAD_TARGETS = 13, + SPELL_FAILED_PVP_TARGET_WHILE_UNFLAGGED = 14, + SPELL_FAILED_CANT_BE_CHARMED = 15, + SPELL_FAILED_CANT_BE_DISENCHANTED = 16, + SPELL_FAILED_CANT_BE_DISENCHANTED_SKILL = 17, + SPELL_FAILED_CANT_BE_MILLED = 18, + SPELL_FAILED_CANT_BE_PROSPECTED = 19, + SPELL_FAILED_CANT_CAST_ON_TAPPED = 20, + SPELL_FAILED_CANT_DUEL_WHILE_INVISIBLE = 21, + SPELL_FAILED_CANT_DUEL_WHILE_STEALTHED = 22, + SPELL_FAILED_CANT_STEALTH = 23, + SPELL_FAILED_CANT_UNTALENT = 24, + SPELL_FAILED_CASTER_AURASTATE = 25, + SPELL_FAILED_CASTER_DEAD = 26, + SPELL_FAILED_CHARMED = 27, + SPELL_FAILED_CHEST_IN_USE = 28, + SPELL_FAILED_CONFUSED = 29, + SPELL_FAILED_DONT_REPORT = 30, + SPELL_FAILED_EQUIPPED_ITEM = 31, + SPELL_FAILED_EQUIPPED_ITEM_CLASS = 32, + SPELL_FAILED_EQUIPPED_ITEM_CLASS_MAINHAND = 33, + SPELL_FAILED_EQUIPPED_ITEM_CLASS_OFFHAND = 34, + SPELL_FAILED_ERROR = 35, + SPELL_FAILED_FALLING = 36, + SPELL_FAILED_FIZZLE = 37, + SPELL_FAILED_FLEEING = 38, + SPELL_FAILED_FOOD_LOWLEVEL = 39, + SPELL_FAILED_GARRISON_NOT_OWNED = 40, + SPELL_FAILED_GARRISON_OWNED = 41, + SPELL_FAILED_GARRISON_MAX_LEVEL = 42, + SPELL_FAILED_GARRISON_NOT_UPGRADEABLE = 43, + SPELL_FAILED_HIGHLEVEL = 44, + SPELL_FAILED_HUNGER_SATIATED = 45, + SPELL_FAILED_IMMUNE = 46, + SPELL_FAILED_INCORRECT_AREA = 47, + SPELL_FAILED_INTERRUPTED = 48, + SPELL_FAILED_INTERRUPTED_COMBAT = 49, + SPELL_FAILED_ITEM_ALREADY_ENCHANTED = 50, + SPELL_FAILED_ITEM_GONE = 51, + SPELL_FAILED_ITEM_NOT_FOUND = 52, + SPELL_FAILED_ITEM_NOT_READY = 53, + SPELL_FAILED_LEVEL_REQUIREMENT = 54, + SPELL_FAILED_LINE_OF_SIGHT = 55, + SPELL_FAILED_LOWLEVEL = 56, + SPELL_FAILED_LOW_CASTLEVEL = 57, + SPELL_FAILED_MAINHAND_EMPTY = 58, + SPELL_FAILED_MOVING = 59, + SPELL_FAILED_NEED_AMMO = 60, + SPELL_FAILED_NEED_AMMO_POUCH = 61, + SPELL_FAILED_NEED_EXOTIC_AMMO = 62, + SPELL_FAILED_NEED_MORE_ITEMS = 63, + SPELL_FAILED_NOPATH = 64, + SPELL_FAILED_NOT_BEHIND = 65, + SPELL_FAILED_NOT_FISHABLE = 66, + SPELL_FAILED_NOT_FLYING = 67, + SPELL_FAILED_NOT_HERE = 68, + SPELL_FAILED_NOT_INFRONT = 69, + SPELL_FAILED_NOT_IN_CONTROL = 70, + SPELL_FAILED_NOT_KNOWN = 71, + SPELL_FAILED_NOT_MOUNTED = 72, + SPELL_FAILED_NOT_ON_TAXI = 73, + SPELL_FAILED_NOT_ON_TRANSPORT = 74, + SPELL_FAILED_NOT_READY = 75, + SPELL_FAILED_NOT_SHAPESHIFT = 76, + SPELL_FAILED_NOT_STANDING = 77, + SPELL_FAILED_NOT_TRADEABLE = 78, + SPELL_FAILED_NOT_TRADING = 79, + SPELL_FAILED_NOT_UNSHEATHED = 80, + SPELL_FAILED_NOT_WHILE_GHOST = 81, + SPELL_FAILED_NOT_WHILE_LOOTING = 82, + SPELL_FAILED_NO_AMMO = 83, + SPELL_FAILED_NO_CHARGES_REMAIN = 84, + SPELL_FAILED_NO_CHAMPION = 85, + SPELL_FAILED_NO_COMBO_POINTS = 86, + SPELL_FAILED_NO_DUELING = 87, + SPELL_FAILED_NO_ENDURANCE = 88, + SPELL_FAILED_NO_FISH = 89, + SPELL_FAILED_NO_ITEMS_WHILE_SHAPESHIFTED = 90, + SPELL_FAILED_NO_MOUNTS_ALLOWED = 91, + SPELL_FAILED_NO_PET = 92, + SPELL_FAILED_NO_POWER = 93, + SPELL_FAILED_NOTHING_TO_DISPEL = 94, + SPELL_FAILED_NOTHING_TO_STEAL = 95, + SPELL_FAILED_ONLY_ABOVEWATER = 96, + SPELL_FAILED_ONLY_DAYTIME = 97, + SPELL_FAILED_ONLY_INDOORS = 98, + SPELL_FAILED_ONLY_MOUNTED = 99, + SPELL_FAILED_ONLY_NIGHTTIME = 100, + SPELL_FAILED_ONLY_OUTDOORS = 101, + SPELL_FAILED_ONLY_SHAPESHIFT = 102, + SPELL_FAILED_ONLY_STEALTHED = 103, + SPELL_FAILED_ONLY_UNDERWATER = 104, + SPELL_FAILED_OUT_OF_RANGE = 105, + SPELL_FAILED_PACIFIED = 106, + SPELL_FAILED_POSSESSED = 107, + SPELL_FAILED_REAGENTS = 108, + SPELL_FAILED_REQUIRES_AREA = 109, + SPELL_FAILED_REQUIRES_SPELL_FOCUS = 110, + SPELL_FAILED_ROOTED = 111, + SPELL_FAILED_SILENCED = 112, + SPELL_FAILED_SPELL_IN_PROGRESS = 113, + SPELL_FAILED_SPELL_LEARNED = 114, + SPELL_FAILED_SPELL_UNAVAILABLE = 115, + SPELL_FAILED_STUNNED = 116, + SPELL_FAILED_TARGETS_DEAD = 117, + SPELL_FAILED_TARGET_AFFECTING_COMBAT = 118, + SPELL_FAILED_TARGET_AURASTATE = 119, + SPELL_FAILED_TARGET_DUELING = 120, + SPELL_FAILED_TARGET_ENEMY = 121, + SPELL_FAILED_TARGET_ENRAGED = 122, + SPELL_FAILED_TARGET_FRIENDLY = 123, + SPELL_FAILED_TARGET_IN_COMBAT = 124, + SPELL_FAILED_TARGET_IN_PET_BATTLE = 125, + SPELL_FAILED_TARGET_IS_PLAYER = 126, + SPELL_FAILED_TARGET_IS_PLAYER_CONTROLLED = 127, + SPELL_FAILED_TARGET_NOT_DEAD = 128, + SPELL_FAILED_TARGET_NOT_IN_PARTY = 129, + SPELL_FAILED_TARGET_NOT_LOOTED = 130, + SPELL_FAILED_TARGET_NOT_PLAYER = 131, + SPELL_FAILED_TARGET_NO_POCKETS = 132, + SPELL_FAILED_TARGET_NO_WEAPONS = 133, + SPELL_FAILED_TARGET_NO_RANGED_WEAPONS = 134, + SPELL_FAILED_TARGET_UNSKINNABLE = 135, + SPELL_FAILED_THIRST_SATIATED = 136, + SPELL_FAILED_TOO_CLOSE = 137, + SPELL_FAILED_TOO_MANY_OF_ITEM = 138, + SPELL_FAILED_TOTEM_CATEGORY = 139, + SPELL_FAILED_TOTEMS = 140, + SPELL_FAILED_TRY_AGAIN = 141, + SPELL_FAILED_UNIT_NOT_BEHIND = 142, + SPELL_FAILED_UNIT_NOT_INFRONT = 143, + SPELL_FAILED_VISION_OBSCURED = 144, + SPELL_FAILED_WRONG_PET_FOOD = 145, + SPELL_FAILED_NOT_WHILE_FATIGUED = 146, + SPELL_FAILED_TARGET_NOT_IN_INSTANCE = 147, + SPELL_FAILED_NOT_WHILE_TRADING = 148, + SPELL_FAILED_TARGET_NOT_IN_RAID = 149, + SPELL_FAILED_TARGET_FREEFORALL = 150, + SPELL_FAILED_NO_EDIBLE_CORPSES = 151, + SPELL_FAILED_ONLY_BATTLEGROUNDS = 152, + SPELL_FAILED_TARGET_NOT_GHOST = 153, + SPELL_FAILED_TRANSFORM_UNUSABLE = 154, + SPELL_FAILED_WRONG_WEATHER = 155, + SPELL_FAILED_DAMAGE_IMMUNE = 156, + SPELL_FAILED_PREVENTED_BY_MECHANIC = 157, + SPELL_FAILED_PLAY_TIME = 158, + SPELL_FAILED_REPUTATION = 159, + SPELL_FAILED_MIN_SKILL = 160, + SPELL_FAILED_NOT_IN_RATED_BATTLEGROUND = 161, + SPELL_FAILED_NOT_ON_SHAPESHIFT = 162, + SPELL_FAILED_NOT_ON_STEALTHED = 163, + SPELL_FAILED_NOT_ON_DAMAGE_IMMUNE = 164, + SPELL_FAILED_NOT_ON_MOUNTED = 165, + SPELL_FAILED_TOO_SHALLOW = 166, + SPELL_FAILED_TARGET_NOT_IN_SANCTUARY = 167, + SPELL_FAILED_TARGET_IS_TRIVIAL = 168, + SPELL_FAILED_BM_OR_INVISGOD = 169, + SPELL_FAILED_GROUND_MOUNT_NOT_ALLOWED = 170, + SPELL_FAILED_FLOATING_MOUNT_NOT_ALLOWED = 171, + SPELL_FAILED_UNDERWATER_MOUNT_NOT_ALLOWED = 172, + SPELL_FAILED_FLYING_MOUNT_NOT_ALLOWED = 173, + SPELL_FAILED_APPRENTICE_RIDING_REQUIREMENT = 174, + SPELL_FAILED_JOURNEYMAN_RIDING_REQUIREMENT = 175, + SPELL_FAILED_EXPERT_RIDING_REQUIREMENT = 176, + SPELL_FAILED_ARTISAN_RIDING_REQUIREMENT = 177, + SPELL_FAILED_MASTER_RIDING_REQUIREMENT = 178, + SPELL_FAILED_COLD_RIDING_REQUIREMENT = 179, + SPELL_FAILED_FLIGHT_MASTER_RIDING_REQUIREMENT = 180, + SPELL_FAILED_CS_RIDING_REQUIREMENT = 181, + SPELL_FAILED_PANDA_RIDING_REQUIREMENT = 182, + SPELL_FAILED_MOUNT_NO_FLOAT_HERE = 183, + SPELL_FAILED_MOUNT_NO_UNDERWATER_HERE = 184, + SPELL_FAILED_MOUNT_ABOVE_WATER_HERE = 185, + SPELL_FAILED_MOUNT_COLLECTED_ON_OTHER_CHAR = 186, + SPELL_FAILED_NOT_IDLE = 187, + SPELL_FAILED_NOT_INACTIVE = 188, + SPELL_FAILED_PARTIAL_PLAYTIME = 189, + SPELL_FAILED_NO_PLAYTIME = 190, + SPELL_FAILED_NOT_IN_BATTLEGROUND = 191, + SPELL_FAILED_NOT_IN_RAID_INSTANCE = 192, + SPELL_FAILED_ONLY_IN_ARENA = 193, + SPELL_FAILED_TARGET_LOCKED_TO_RAID_INSTANCE = 194, + SPELL_FAILED_ON_USE_ENCHANT = 195, + SPELL_FAILED_NOT_ON_GROUND = 196, + SPELL_FAILED_CUSTOM_ERROR = 197, + SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW = 198, + SPELL_FAILED_TOO_MANY_SOCKETS = 199, + SPELL_FAILED_INVALID_GLYPH = 200, + SPELL_FAILED_UNIQUE_GLYPH = 201, + SPELL_FAILED_GLYPH_SOCKET_LOCKED = 202, + SPELL_FAILED_GLYPH_EXCLUSIVE_CATEGORY = 203, + SPELL_FAILED_GLYPH_INVALID_SPEC = 204, + SPELL_FAILED_GLYPH_NO_SPEC = 205, + SPELL_FAILED_NO_VALID_TARGETS = 206, + SPELL_FAILED_ITEM_AT_MAX_CHARGES = 207, + SPELL_FAILED_NOT_IN_BARBERSHOP = 208, + SPELL_FAILED_FISHING_TOO_LOW = 209, + SPELL_FAILED_ITEM_ENCHANT_TRADE_WINDOW = 210, + SPELL_FAILED_SUMMON_PENDING = 211, + SPELL_FAILED_MAX_SOCKETS = 212, + SPELL_FAILED_PET_CAN_RENAME = 213, + SPELL_FAILED_TARGET_CANNOT_BE_RESURRECTED = 214, + SPELL_FAILED_TARGET_HAS_RESURRECT_PENDING = 215, + SPELL_FAILED_NO_ACTIONS = 216, + SPELL_FAILED_CURRENCY_WEIGHT_MISMATCH = 217, + SPELL_FAILED_WEIGHT_NOT_ENOUGH = 218, + SPELL_FAILED_WEIGHT_TOO_MUCH = 219, + SPELL_FAILED_NO_VACANT_SEAT = 220, + SPELL_FAILED_NO_LIQUID = 221, + SPELL_FAILED_ONLY_NOT_SWIMMING = 222, + SPELL_FAILED_BY_NOT_MOVING = 223, + SPELL_FAILED_IN_COMBAT_RES_LIMIT_REACHED = 224, + SPELL_FAILED_NOT_IN_ARENA = 225, + SPELL_FAILED_TARGET_NOT_GROUNDED = 226, + SPELL_FAILED_EXCEEDED_WEEKLY_USAGE = 227, + SPELL_FAILED_NOT_IN_LFG_DUNGEON = 228, + SPELL_FAILED_BAD_TARGET_FILTER = 229, + SPELL_FAILED_NOT_ENOUGH_TARGETS = 230, + SPELL_FAILED_NO_SPEC = 231, + SPELL_FAILED_CANT_ADD_BATTLE_PET = 232, + SPELL_FAILED_CANT_UPGRADE_BATTLE_PET = 233, + SPELL_FAILED_WRONG_BATTLE_PET_TYPE = 234, + SPELL_FAILED_NO_DUNGEON_ENCOUNTER = 235, + SPELL_FAILED_NO_TELEPORT_FROM_DUNGEON = 236, + SPELL_FAILED_MAX_LEVEL_TOO_LOW = 237, + SPELL_FAILED_CANT_REPLACE_ITEM_BONUS = 238, + SPELL_FAILED_UNKNOWN = 254, // custom value, default case + SPELL_CAST_OK = 255 // custom value, must not be sent to client }; enum SpellCustomErrors @@ -1461,7 +1617,7 @@ enum Mechanics MECHANIC_INTERRUPT = 26, MECHANIC_DAZE = 27, MECHANIC_DISCOVERY = 28, - MECHANIC_IMMUNE_SHIELD = 29, // Divine (Blessing) Shield/Protection and Ice Block + MECHANIC_IMMUNE_SHIELD = 29, // Divine (Blessing) Shield/Protection and Ice Block MECHANIC_SAPPED = 30, MECHANIC_ENRAGED = 31, MECHANIC_WOUNDED = 32, @@ -1683,47 +1839,57 @@ enum SpellPreventionType SPELL_PREVENTION_TYPE_UNK = 3 // Only a few spells have this, but most of the should be interruptable. }; -enum GameobjectTypes +enum GameobjectTypes // (6.0.2.18988) { - GAMEOBJECT_TYPE_DOOR = 0, - GAMEOBJECT_TYPE_BUTTON = 1, - GAMEOBJECT_TYPE_QUESTGIVER = 2, - GAMEOBJECT_TYPE_CHEST = 3, - GAMEOBJECT_TYPE_BINDER = 4, - GAMEOBJECT_TYPE_GENERIC = 5, - GAMEOBJECT_TYPE_TRAP = 6, - GAMEOBJECT_TYPE_CHAIR = 7, - GAMEOBJECT_TYPE_SPELL_FOCUS = 8, - GAMEOBJECT_TYPE_TEXT = 9, - GAMEOBJECT_TYPE_GOOBER = 10, - GAMEOBJECT_TYPE_TRANSPORT = 11, - GAMEOBJECT_TYPE_AREADAMAGE = 12, - GAMEOBJECT_TYPE_CAMERA = 13, - GAMEOBJECT_TYPE_MAP_OBJECT = 14, - GAMEOBJECT_TYPE_MO_TRANSPORT = 15, - GAMEOBJECT_TYPE_DUEL_ARBITER = 16, - GAMEOBJECT_TYPE_FISHINGNODE = 17, - GAMEOBJECT_TYPE_SUMMONING_RITUAL = 18, - GAMEOBJECT_TYPE_MAILBOX = 19, - GAMEOBJECT_TYPE_DO_NOT_USE = 20, - GAMEOBJECT_TYPE_GUARDPOST = 21, - GAMEOBJECT_TYPE_SPELLCASTER = 22, - GAMEOBJECT_TYPE_MEETINGSTONE = 23, - GAMEOBJECT_TYPE_FLAGSTAND = 24, - GAMEOBJECT_TYPE_FISHINGHOLE = 25, - GAMEOBJECT_TYPE_FLAGDROP = 26, - GAMEOBJECT_TYPE_MINI_GAME = 27, - GAMEOBJECT_TYPE_DO_NOT_USE_2 = 28, - GAMEOBJECT_TYPE_CAPTURE_POINT = 29, - GAMEOBJECT_TYPE_AURA_GENERATOR = 30, - GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31, - GAMEOBJECT_TYPE_BARBER_CHAIR = 32, - GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING = 33, - GAMEOBJECT_TYPE_GUILD_BANK = 34, - GAMEOBJECT_TYPE_TRAPDOOR = 35 + GAMEOBJECT_TYPE_DOOR = 0, + GAMEOBJECT_TYPE_BUTTON = 1, + GAMEOBJECT_TYPE_QUESTGIVER = 2, + GAMEOBJECT_TYPE_CHEST = 3, + GAMEOBJECT_TYPE_BINDER = 4, + GAMEOBJECT_TYPE_GENERIC = 5, + GAMEOBJECT_TYPE_TRAP = 6, + GAMEOBJECT_TYPE_CHAIR = 7, + GAMEOBJECT_TYPE_SPELL_FOCUS = 8, + GAMEOBJECT_TYPE_TEXT = 9, + GAMEOBJECT_TYPE_GOOBER = 10, + GAMEOBJECT_TYPE_TRANSPORT = 11, + GAMEOBJECT_TYPE_AREADAMAGE = 12, + GAMEOBJECT_TYPE_CAMERA = 13, + GAMEOBJECT_TYPE_MAP_OBJECT = 14, + GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT = 15, + GAMEOBJECT_TYPE_DUEL_ARBITER = 16, + GAMEOBJECT_TYPE_FISHINGNODE = 17, + GAMEOBJECT_TYPE_RITUAL = 18, + GAMEOBJECT_TYPE_MAILBOX = 19, + GAMEOBJECT_TYPE_DO_NOT_USE = 20, + GAMEOBJECT_TYPE_GUARDPOST = 21, + GAMEOBJECT_TYPE_SPELLCASTER = 22, + GAMEOBJECT_TYPE_MEETINGSTONE = 23, + GAMEOBJECT_TYPE_FLAGSTAND = 24, + GAMEOBJECT_TYPE_FISHINGHOLE = 25, + GAMEOBJECT_TYPE_FLAGDROP = 26, + GAMEOBJECT_TYPE_MINI_GAME = 27, + GAMEOBJECT_TYPE_DO_NOT_USE_2 = 28, + GAMEOBJECT_TYPE_CONTROL_ZONE = 29, + GAMEOBJECT_TYPE_AURA_GENERATOR = 30, + GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY = 31, + GAMEOBJECT_TYPE_BARBER_CHAIR = 32, + GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING = 33, + GAMEOBJECT_TYPE_GUILD_BANK = 34, + GAMEOBJECT_TYPE_TRAPDOOR = 35, + GAMEOBJECT_TYPE_NEW_FLAG = 36, + GAMEOBJECT_TYPE_NEW_FLAG_DROP = 37, + GAMEOBJECT_TYPE_GARRISON_BUILDING = 38, + GAMEOBJECT_TYPE_GARRISON_PLOT = 39, + GAMEOBJECT_TYPE_CLIENT_CREATURE = 40, + GAMEOBJECT_TYPE_CLIENT_ITEM = 41, + GAMEOBJECT_TYPE_CAPTURE_POINT = 42, + GAMEOBJECT_TYPE_TROPHY = 43, + GAMEOBJECT_TYPE_PHASEABLE_MO = 44, + GAMEOBJECT_TYPE_SHIPMENT = 45 }; -#define MAX_GAMEOBJECT_TYPE 36 // sending to client this or greater value can crash client. +#define MAX_GAMEOBJECT_TYPE 46 // sending to client this or greater value can crash client. #define MAX_GAMEOBJECT_DATA 32 // Max number of uint32 vars in gameobject_template data field enum GameObjectFlags @@ -1756,7 +1922,7 @@ enum GameObjectDestructibleState GO_DESTRUCTIBLE_REBUILDING = 3 }; -// EmotesText.dbc +// EmotesText.dbc (6.0.2.18988) enum TextEmotes { TEXT_EMOTE_AGREE = 1, @@ -2011,864 +2177,1103 @@ enum TextEmotes TEXT_EMOTE_OBJECT = 450, TEXT_EMOTE_SWEAT = 451, TEXT_EMOTE_YW = 453, - TEXT_EMOTE_READ = 456 + TEXT_EMOTE_READ = 456, + TEXT_EMOTE_BOOT = 506 }; -// Emotes.dbc +// Emotes.dbc (6.0.2.18988) enum Emote { - EMOTE_ONESHOT_NONE = 0, - EMOTE_ONESHOT_TALK = 1, - EMOTE_ONESHOT_BOW = 2, - EMOTE_ONESHOT_WAVE = 3, - EMOTE_ONESHOT_CHEER = 4, - EMOTE_ONESHOT_EXCLAMATION = 5, - EMOTE_ONESHOT_QUESTION = 6, - EMOTE_ONESHOT_EAT = 7, - EMOTE_STATE_DANCE = 10, - EMOTE_ONESHOT_LAUGH = 11, - EMOTE_STATE_SLEEP = 12, - EMOTE_STATE_SIT = 13, - EMOTE_ONESHOT_RUDE = 14, - EMOTE_ONESHOT_ROAR = 15, - EMOTE_ONESHOT_KNEEL = 16, - EMOTE_ONESHOT_KISS = 17, - EMOTE_ONESHOT_CRY = 18, - EMOTE_ONESHOT_CHICKEN = 19, - EMOTE_ONESHOT_BEG = 20, - EMOTE_ONESHOT_APPLAUD = 21, - EMOTE_ONESHOT_SHOUT = 22, - EMOTE_ONESHOT_FLEX = 23, - EMOTE_ONESHOT_SHY = 24, - EMOTE_ONESHOT_POINT = 25, - EMOTE_STATE_STAND = 26, - EMOTE_STATE_READY_UNARMED = 27, - EMOTE_STATE_WORK_SHEATHED = 28, - EMOTE_STATE_POINT = 29, - EMOTE_STATE_NONE = 30, - EMOTE_ONESHOT_WOUND = 33, - EMOTE_ONESHOT_WOUND_CRITICAL = 34, - EMOTE_ONESHOT_ATTACK_UNARMED = 35, - EMOTE_ONESHOT_ATTACK1H = 36, - EMOTE_ONESHOT_ATTACK2HTIGHT = 37, - EMOTE_ONESHOT_ATTACK2H_LOOSE = 38, - EMOTE_ONESHOT_PARRY_UNARMED = 39, - EMOTE_ONESHOT_PARRY_SHIELD = 43, - EMOTE_ONESHOT_READY_UNARMED = 44, - EMOTE_ONESHOT_READY1H = 45, - EMOTE_ONESHOT_READY_BOW = 48, - EMOTE_ONESHOT_SPELL_PRECAST = 50, - EMOTE_ONESHOT_SPELL_CAST = 51, - EMOTE_ONESHOT_BATTLE_ROAR = 53, - EMOTE_ONESHOT_SPECIALATTACK1H = 54, - EMOTE_ONESHOT_KICK = 60, - EMOTE_ONESHOT_ATTACK_THROWN = 61, - EMOTE_STATE_STUN = 64, - EMOTE_STATE_DEAD = 65, - EMOTE_ONESHOT_SALUTE = 66, - EMOTE_STATE_KNEEL = 68, - EMOTE_STATE_USE_STANDING = 69, - EMOTE_ONESHOT_WAVE_NO_SHEATHE = 70, - EMOTE_ONESHOT_CHEER_NO_SHEATHE = 71, - EMOTE_ONESHOT_EAT_NO_SHEATHE = 92, - EMOTE_STATE_STUN_NO_SHEATHE = 93, - EMOTE_ONESHOT_DANCE = 94, - EMOTE_ONESHOT_SALUTE_NO_SHEATH = 113, - EMOTE_STATE_USE_STANDING_NO_SHEATHE = 133, - EMOTE_ONESHOT_LAUGH_NO_SHEATHE = 153, - EMOTE_STATE_WORK = 173, - EMOTE_STATE_SPELL_PRECAST = 193, - EMOTE_ONESHOT_READY_RIFLE = 213, - EMOTE_STATE_READY_RIFLE = 214, - EMOTE_STATE_WORK_MINING = 233, - EMOTE_STATE_WORK_CHOPWOOD = 234, - EMOTE_STATE_APPLAUD = 253, - EMOTE_ONESHOT_LIFTOFF = 254, - EMOTE_ONESHOT_YES = 273, - EMOTE_ONESHOT_NO = 274, - EMOTE_ONESHOT_TRAIN = 275, - EMOTE_ONESHOT_LAND = 293, - EMOTE_STATE_AT_EASE = 313, - EMOTE_STATE_READY1H = 333, - EMOTE_STATE_SPELL_KNEEL_START = 353, - EMOTE_STATE_SUBMERGED = 373, - EMOTE_ONESHOT_SUBMERGE = 374, - EMOTE_STATE_READY2H = 375, - EMOTE_STATE_READY_BOW = 376, - EMOTE_ONESHOT_MOUNT_SPECIAL = 377, - EMOTE_STATE_TALK = 378, - EMOTE_STATE_FISHING = 379, - EMOTE_ONESHOT_FISHING = 380, - EMOTE_ONESHOT_LOOT = 381, - EMOTE_STATE_WHIRLWIND = 382, - EMOTE_STATE_DROWNED = 383, - EMOTE_STATE_HOLD_BOW = 384, - EMOTE_STATE_HOLD_RIFLE = 385, - EMOTE_STATE_HOLD_THROWN = 386, - EMOTE_ONESHOT_DROWN = 387, - EMOTE_ONESHOT_STOMP = 388, - EMOTE_ONESHOT_ATTACK_OFF = 389, - EMOTE_ONESHOT_ATTACK_OFF_PIERCE = 390, - EMOTE_STATE_ROAR = 391, - EMOTE_STATE_LAUGH = 392, - EMOTE_ONESHOT_CREATURE_SPECIAL = 393, - EMOTE_ONESHOT_JUMPLANDRUN = 394, - EMOTE_ONESHOT_JUMPEND = 395, - EMOTE_ONESHOT_TALK_NO_SHEATHE = 396, - EMOTE_ONESHOT_POINT_NO_SHEATHE = 397, - EMOTE_STATE_CANNIBALIZE = 398, - EMOTE_ONESHOT_JUMPSTART = 399, - EMOTE_STATE_DANCESPECIAL = 400, - EMOTE_ONESHOT_DANCESPECIAL = 401, - EMOTE_ONESHOT_CUSTOM_SPELL_01 = 402, - EMOTE_ONESHOT_CUSTOM_SPELL_02 = 403, - EMOTE_ONESHOT_CUSTOM_SPELL_03 = 404, - EMOTE_ONESHOT_CUSTOM_SPELL_04 = 405, - EMOTE_ONESHOT_CUSTOM_SPELL_05 = 406, - EMOTE_ONESHOT_CUSTOM_SPELL_06 = 407, - EMOTE_ONESHOT_CUSTOM_SPELL_07 = 408, - EMOTE_ONESHOT_CUSTOM_SPELL_08 = 409, - EMOTE_ONESHOT_CUSTOM_SPELL_09 = 410, - EMOTE_ONESHOT_CUSTOM_SPELL_10 = 411, - EMOTE_STATE_EXCLAIM = 412, - EMOTE_STATE_DANCE_CUSTOM = 413, - EMOTE_STATE_SIT_CHAIR_MED = 415, - EMOTE_STATE_CUSTOM_SPELL_01 = 416, - EMOTE_STATE_CUSTOM_SPELL_02 = 417, - EMOTE_STATE_EAT = 418, - EMOTE_STATE_CUSTOM_SPELL_04 = 419, - EMOTE_STATE_CUSTOM_SPELL_03 = 420, - EMOTE_STATE_CUSTOM_SPELL_05 = 421, - EMOTE_STATE_SPELLEFFECT_HOLD = 422, - EMOTE_STATE_EAT_NO_SHEATHE = 423, - EMOTE_STATE_MOUNT = 424, - EMOTE_STATE_READY2HL = 425, - EMOTE_STATE_SIT_CHAIR_HIGH = 426, - EMOTE_STATE_FALL = 427, - EMOTE_STATE_LOOT = 428, - EMOTE_STATE_SUBMERGED_NEW = 429, - EMOTE_ONESHOT_COWER = 430, - EMOTE_STATE_COWER = 431, - EMOTE_ONESHOT_USE_STANDING = 432, - EMOTE_STATE_STEALTH_STAND = 433, - EMOTE_ONESHOT_OMNICAST_GHOUL = 434, - EMOTE_ONESHOT_ATTACK_BOW = 435, - EMOTE_ONESHOT_ATTACK_RIFLE = 436, - EMOTE_STATE_SWIM_IDLE = 437, - EMOTE_STATE_ATTACK_UNARMED = 438, - EMOTE_ONESHOT_SPELL_CAST_W_SOUND = 439, - EMOTE_ONESHOT_DODGE = 440, - EMOTE_ONESHOT_PARRY1H = 441, - EMOTE_ONESHOT_PARRY2H = 442, - EMOTE_ONESHOT_PARRY2HL = 443, - EMOTE_STATE_FLYFALL = 444, - EMOTE_ONESHOT_FLYDEATH = 445, - EMOTE_STATE_FLY_FALL = 446, - EMOTE_ONESHOT_FLY_SIT_GROUND_DOWN = 447, - EMOTE_ONESHOT_FLY_SIT_GROUND_UP = 448, - EMOTE_ONESHOT_EMERGE = 449, - EMOTE_ONESHOT_DRAGON_SPIT = 450, - EMOTE_STATE_SPECIAL_UNARMED = 451, - EMOTE_ONESHOT_FLYGRAB = 452, - EMOTE_STATE_FLYGRABCLOSED = 453, - EMOTE_ONESHOT_FLYGRABTHROWN = 454, - EMOTE_STATE_FLY_SIT_GROUND = 455, - EMOTE_STATE_WALK_BACKWARDS = 456, - EMOTE_ONESHOT_FLYTALK = 457, - EMOTE_ONESHOT_FLYATTACK1H = 458, - EMOTE_STATE_CUSTOM_SPELL_08 = 459, - EMOTE_ONESHOT_FLY_DRAGON_SPIT = 460, - EMOTE_STATE_SIT_CHAIR_LOW = 461, - EMOTE_ONESHOT_STUN = 462, - EMOTE_ONESHOT_SPELL_CAST_OMNI = 463, - EMOTE_STATE_READY_THROWN = 465, - EMOTE_ONESHOT_WORK_CHOPWOOD = 466, - EMOTE_ONESHOT_WORK_MINING = 467, - EMOTE_STATE_SPELL_CHANNEL_OMNI = 468, - EMOTE_STATE_SPELL_CHANNEL_DIRECTED = 469, - EMOTE_STAND_STATE_NONE = 470, - EMOTE_STATE_READYJOUST = 471, - EMOTE_STATE_STRANGULATE = 473, - EMOTE_STATE_READY_SPELL_OMNI = 474, - EMOTE_STATE_HOLD_JOUST = 475, - EMOTE_ONESHOT_CRY_JAINA = 476, - EMOTE_ONESHOT_SPECIAL_UNARMED = 477, - EMOTE_STATE_DANCE_NOSHEATHE = 478, - EMOTE_ONESHOT_SNIFF = 479, - EMOTE_ONESHOT_DRAGONSTOMP = 480, - EMOTE_ONESHOT_KNOCKDOWN = 482, - EMOTE_STATE_READ = 483, - EMOTE_ONESHOT_FLYEMOTETALK = 485, - EMOTE_STATE_READ_ALLOWMOVEMENT = 492, - EMOTE_STATE_READY1H_ALLOW_MOVEMENT = 505, - EMOTE_STATE_READY2H_ALLOW_MOVEMENT = 506, - EMOTE_ONESHOT_OPEN = 517, - EMOTE_STATE_READ_CHRISTMAS = 518 + EMOTE_ONESHOT_NONE = 0, + EMOTE_ONESHOT_TALK = 1, + EMOTE_ONESHOT_BOW = 2, + EMOTE_ONESHOT_WAVE = 3, + EMOTE_ONESHOT_CHEER = 4, + EMOTE_ONESHOT_EXCLAMATION = 5, + EMOTE_ONESHOT_QUESTION = 6, + EMOTE_ONESHOT_EAT = 7, + EMOTE_STATE_DANCE = 10, + EMOTE_ONESHOT_LAUGH = 11, + EMOTE_STATE_SLEEP = 12, + EMOTE_STATE_SIT = 13, + EMOTE_ONESHOT_RUDE = 14, + EMOTE_ONESHOT_ROAR = 15, + EMOTE_ONESHOT_KNEEL = 16, + EMOTE_ONESHOT_KISS = 17, + EMOTE_ONESHOT_CRY = 18, + EMOTE_ONESHOT_CHICKEN = 19, + EMOTE_ONESHOT_BEG = 20, + EMOTE_ONESHOT_APPLAUD = 21, + EMOTE_ONESHOT_SHOUT = 22, + EMOTE_ONESHOT_FLEX = 23, + EMOTE_ONESHOT_SHY = 24, + EMOTE_ONESHOT_POINT = 25, + EMOTE_STATE_STAND = 26, + EMOTE_STATE_READY_UNARMED = 27, + EMOTE_STATE_WORK_SHEATHED = 28, + EMOTE_STATE_POINT = 29, + EMOTE_STATE_NONE = 30, + EMOTE_ONESHOT_WOUND = 33, + EMOTE_ONESHOT_WOUND_CRITICAL = 34, + EMOTE_ONESHOT_ATTACK_UNARMED = 35, + EMOTE_ONESHOT_ATTACK1H = 36, + EMOTE_ONESHOT_ATTACK2HTIGHT = 37, + EMOTE_ONESHOT_ATTACK2H_LOOSE = 38, + EMOTE_ONESHOT_PARRY_UNARMED = 39, + EMOTE_ONESHOT_PARRY_SHIELD = 43, + EMOTE_ONESHOT_READY_UNARMED = 44, + EMOTE_ONESHOT_READY1H = 45, + EMOTE_ONESHOT_READY_BOW = 48, + EMOTE_ONESHOT_SPELL_PRECAST = 50, + EMOTE_ONESHOT_SPELL_CAST = 51, + EMOTE_ONESHOT_BATTLE_ROAR = 53, + EMOTE_ONESHOT_SPECIALATTACK1H = 54, + EMOTE_ONESHOT_KICK = 60, + EMOTE_ONESHOT_ATTACK_THROWN = 61, + EMOTE_STATE_STUN = 64, + EMOTE_STATE_DEAD = 65, + EMOTE_ONESHOT_SALUTE = 66, + EMOTE_STATE_KNEEL = 68, + EMOTE_STATE_USE_STANDING = 69, + EMOTE_ONESHOT_WAVE_NO_SHEATHE = 70, + EMOTE_ONESHOT_CHEER_NO_SHEATHE = 71, + EMOTE_ONESHOT_EAT_NO_SHEATHE = 92, + EMOTE_STATE_STUN_NO_SHEATHE = 93, + EMOTE_ONESHOT_DANCE = 94, + EMOTE_ONESHOT_SALUTE_NO_SHEATH = 113, + EMOTE_STATE_USE_STANDING_NO_SHEATHE = 133, + EMOTE_ONESHOT_LAUGH_NO_SHEATHE = 153, + EMOTE_STATE_WORK = 173, + EMOTE_STATE_SPELL_PRECAST = 193, + EMOTE_ONESHOT_READY_RIFLE = 213, + EMOTE_STATE_READY_RIFLE = 214, + EMOTE_STATE_WORK_MINING = 233, + EMOTE_STATE_WORK_CHOPWOOD = 234, + EMOTE_STATE_APPLAUD = 253, + EMOTE_ONESHOT_LIFTOFF = 254, + EMOTE_ONESHOT_YES = 273, + EMOTE_ONESHOT_NO = 274, + EMOTE_ONESHOT_TRAIN = 275, + EMOTE_ONESHOT_LAND = 293, + EMOTE_STATE_AT_EASE = 313, + EMOTE_STATE_READY1H = 333, + EMOTE_STATE_SPELL_KNEEL_START = 353, + EMOTE_STATE_SUBMERGED = 373, + EMOTE_ONESHOT_SUBMERGE = 374, + EMOTE_STATE_READY2H = 375, + EMOTE_STATE_READY_BOW = 376, + EMOTE_ONESHOT_MOUNT_SPECIAL = 377, + EMOTE_STATE_TALK = 378, + EMOTE_STATE_FISHING = 379, + EMOTE_ONESHOT_FISHING = 380, + EMOTE_ONESHOT_LOOT = 381, + EMOTE_STATE_WHIRLWIND = 382, + EMOTE_STATE_DROWNED = 383, + EMOTE_STATE_HOLD_BOW = 384, + EMOTE_STATE_HOLD_RIFLE = 385, + EMOTE_STATE_HOLD_THROWN = 386, + EMOTE_ONESHOT_DROWN = 387, + EMOTE_ONESHOT_STOMP = 388, + EMOTE_ONESHOT_ATTACK_OFF = 389, + EMOTE_ONESHOT_ATTACK_OFF_PIERCE = 390, + EMOTE_STATE_ROAR = 391, + EMOTE_STATE_LAUGH = 392, + EMOTE_ONESHOT_CREATURE_SPECIAL = 393, + EMOTE_ONESHOT_JUMPLANDRUN = 394, + EMOTE_ONESHOT_JUMPEND = 395, + EMOTE_ONESHOT_TALK_NO_SHEATHE = 396, + EMOTE_ONESHOT_POINT_NO_SHEATHE = 397, + EMOTE_STATE_CANNIBALIZE = 398, + EMOTE_ONESHOT_JUMPSTART = 399, + EMOTE_STATE_DANCESPECIAL = 400, + EMOTE_ONESHOT_DANCESPECIAL = 401, + EMOTE_ONESHOT_CUSTOM_SPELL_01 = 402, + EMOTE_ONESHOT_CUSTOM_SPELL_02 = 403, + EMOTE_ONESHOT_CUSTOM_SPELL_03 = 404, + EMOTE_ONESHOT_CUSTOM_SPELL_04 = 405, + EMOTE_ONESHOT_CUSTOM_SPELL_05 = 406, + EMOTE_ONESHOT_CUSTOM_SPELL_06 = 407, + EMOTE_ONESHOT_CUSTOM_SPELL_07 = 408, + EMOTE_ONESHOT_CUSTOM_SPELL_08 = 409, + EMOTE_ONESHOT_CUSTOM_SPELL_09 = 410, + EMOTE_ONESHOT_CUSTOM_SPELL_10 = 411, + EMOTE_STATE_EXCLAIM = 412, + EMOTE_STATE_DANCE_CUSTOM = 413, + EMOTE_STATE_SIT_CHAIR_MED = 415, + EMOTE_STATE_CUSTOM_SPELL_01 = 416, + EMOTE_STATE_CUSTOM_SPELL_02 = 417, + EMOTE_STATE_EAT = 418, + EMOTE_STATE_CUSTOM_SPELL_04 = 419, + EMOTE_STATE_CUSTOM_SPELL_03 = 420, + EMOTE_STATE_CUSTOM_SPELL_05 = 421, + EMOTE_STATE_SPELLEFFECT_HOLD = 422, + EMOTE_STATE_EAT_NO_SHEATHE = 423, + EMOTE_STATE_MOUNT = 424, + EMOTE_STATE_READY2HL = 425, + EMOTE_STATE_SIT_CHAIR_HIGH = 426, + EMOTE_STATE_FALL = 427, + EMOTE_STATE_LOOT = 428, + EMOTE_STATE_SUBMERGED_NEW = 429, + EMOTE_ONESHOT_COWER = 430, + EMOTE_STATE_COWER = 431, + EMOTE_ONESHOT_USE_STANDING = 432, + EMOTE_STATE_STEALTH_STAND = 433, + EMOTE_ONESHOT_OMNICAST_GHOUL = 434, + EMOTE_ONESHOT_ATTACK_BOW = 435, + EMOTE_ONESHOT_ATTACK_RIFLE = 436, + EMOTE_STATE_SWIM_IDLE = 437, + EMOTE_STATE_ATTACK_UNARMED = 438, + EMOTE_ONESHOT_SPELL_CAST_W_SOUND = 439, + EMOTE_ONESHOT_DODGE = 440, + EMOTE_ONESHOT_PARRY1H = 441, + EMOTE_ONESHOT_PARRY2H = 442, + EMOTE_ONESHOT_PARRY2HL = 443, + EMOTE_STATE_FLYFALL = 444, + EMOTE_ONESHOT_FLYDEATH = 445, + EMOTE_STATE_FLY_FALL = 446, + EMOTE_ONESHOT_FLY_SIT_GROUND_DOWN = 447, + EMOTE_ONESHOT_FLY_SIT_GROUND_UP = 448, + EMOTE_ONESHOT_EMERGE = 449, + EMOTE_ONESHOT_DRAGON_SPIT = 450, + EMOTE_STATE_SPECIAL_UNARMED = 451, + EMOTE_ONESHOT_FLYGRAB = 452, + EMOTE_STATE_FLYGRABCLOSED = 453, + EMOTE_ONESHOT_FLYGRABTHROWN = 454, + EMOTE_STATE_FLY_SIT_GROUND = 455, + EMOTE_STATE_WALK_BACKWARDS = 456, + EMOTE_ONESHOT_FLYTALK = 457, + EMOTE_ONESHOT_FLYATTACK1H = 458, + EMOTE_STATE_CUSTOM_SPELL_08 = 459, + EMOTE_ONESHOT_FLY_DRAGON_SPIT = 460, + EMOTE_STATE_SIT_CHAIR_LOW = 461, + EMOTE_ONESHOT_STUN = 462, + EMOTE_ONESHOT_SPELL_CAST_OMNI = 463, + EMOTE_STATE_READY_THROWN = 465, + EMOTE_ONESHOT_WORK_CHOPWOOD = 466, + EMOTE_ONESHOT_WORK_MINING = 467, + EMOTE_STATE_SPELL_CHANNEL_OMNI = 468, + EMOTE_STATE_SPELL_CHANNEL_DIRECTED = 469, + EMOTE_STAND_STATE_NONE = 470, + EMOTE_STATE_READYJOUST = 471, + EMOTE_STATE_STRANGULATE = 472, + EMOTE_STATE_STRANGULATE2 = 473, + EMOTE_STATE_READY_SPELL_OMNI = 474, + EMOTE_STATE_HOLD_JOUST = 475, + EMOTE_ONESHOT_CRY_JAINA = 476, + EMOTE_ONESHOT_SPECIAL_UNARMED = 477, + EMOTE_STATE_DANCE_NOSHEATHE = 478, + EMOTE_ONESHOT_SNIFF = 479, + EMOTE_ONESHOT_DRAGONSTOMP = 480, + EMOTE_ONESHOT_KNOCKDOWN = 482, + EMOTE_STATE_READ = 483, + EMOTE_ONESHOT_FLYEMOTETALK = 485, + EMOTE_STATE_READ_ALLOWMOVEMENT = 492, + EMOTE_STATE_CUSTOM_SPELL_06 = 498, + EMOTE_STATE_CUSTOM_SPELL_07 = 499, + EMOTE_STATE_CUSTOM_SPELL_08_2 = 500, + EMOTE_STATE_CUSTOM_SPELL_09 = 501, + EMOTE_STATE_CUSTOM_SPELL_10 = 502, + EMOTE_STATE_READY1H_ALLOW_MOVEMENT = 505, + EMOTE_STATE_READY2H_ALLOW_MOVEMENT = 506, + EMOTE_ONESHOT_MONKOFFENSE_ATTACKUNARMED = 507, + EMOTE_ONESHOT_MONKOFFENSE_SPECIALUNARMED = 508, + EMOTE_ONESHOT_MONKOFFENSE_PARRYUNARMED = 509, + EMOTE_STATE_MONKOFFENSE_READYUNARMED = 510, + EMOTE_ONESHOT_PALMSTRIKE = 511, + EMOTE_STATE_CRANE = 512, + EMOTE_ONESHOT_OPEN = 517, + EMOTE_STATE_READ_CHRISTMAS = 518, + EMOTE_ONESHOT_FLYATTACK2HL = 526, + EMOTE_ONESHOT_FLYATTACKTHROWN = 527, + EMOTE_STATE_FLYREADYSPELLDIRECTED = 528, + EMOTE_STATE_FLY_READY_1H = 531, + EMOTE_STATE_MEDITATE = 533, + EMOTE_STATE_FLY_READY_2HL = 534, + EMOTE_ONESHOT_TOGROUND = 535, + EMOTE_ONESHOT_TOFLY = 536, + EMOTE_STATE_ATTACKTHROWN = 537, + EMOTE_STATE_SPELL_CHANNEL_DIRECTED_NOSOUND = 538, + EMOTE_ONESHOT_WORK = 539, + EMOTE_STATE_READYUNARMED_NOSOUND = 540, + EMOTE_ONESHOT_MONKOFFENSE_ATTACKUNARMEDOFF = 543, + EMOTE_RECLINED_MOUNT_PASSENGER = 546, + EMOTE_ONESHOT_QUESTION_2 = 547, + EMOTE_ONESHOT_SPELL_CHANNEL_DIRECTED_NOSOUND = 549, + EMOTE_STATE_KNEEL_2 = 550, + EMOTE_ONESHOT_FLYATTACKUNARMED = 551, + EMOTE_ONESHOT_FLYCOMBATWOUND = 552, + EMOTE_ONESHOT_MOUNTSELFSPECIAL = 553, + EMOTE_ONESHOT_ATTACKUNARMED_NOSOUND = 554, + EMOTE_STATE_WOUNDCRITICAL_DOESNT_WORK = 555, + EMOTE_ONESHOT_ATTACK1H_NO_SOUND = 556, + EMOTE_STATE_MOUNT_SELF_IDLE = 557, + EMOTE_ONESHOT_WALK = 558, + EMOTE_STATE_OPENED = 559, + EMOTE_STATE_CUSTOMSPELL03 = 564, + EMOTE_ONESHOT_BREATHOFFIRE = 565, + EMOTE_STATE_ATTACK1H = 567, + EMOTE_STATE_WORK_CHOPWOOD_2 = 568, + EMOTE_STATE_USESTANDING_LOOP = 569, + EMOTE_STATE_USESTANDING = 572, + EMOTE_ONESHOT_SHEATH = 573, + EMOTE_ONESHOT_LAUGH_NO_SOUND = 574, + EMOTE_RECLINED_MOUNT = 575, + EMOTE_ONESHOT_ATTACK1H_2 = 577, + EMOTE_STATE_CRY_NOSOUND = 578, + EMOTE_ONESHOT_CRY_NOSOUND = 579, + EMOTE_ONESHOT_COMBATCRITICAL = 584, + EMOTE_STATE_TRAIN = 585, + EMOTE_STATE_WORK_CHOPWOOD_LUMBER_AXE = 586, + EMOTE_ONESHOT_SPECIALATTACK2H = 587, + EMOTE_STATE_READ_AND_TALK = 588, + EMOTE_ONESHOT_STAND_VAR1 = 589, + EMOTE_REXXAR_STRANGLES_GOBLIN = 590, + EMOTE_ONESHOT_STAND_VAR2 = 591, + EMOTE_ONESHOT_DEATH = 592, + EMOTE_STATE_TALKONCE = 595, + EMOTE_STATE_ATTACK2H = 596, + EMOTE_STATE_SIT_GROUND = 598, + EMOTE_STATE_WORK_CHOPWOOD3 = 599, + EMOTE_STATE_CUSTOMSPELL01 = 601, + EMOTE_ONESHOT_COMBATWOUND = 602, + EMOTE_ONESHOT_TALK_EXCLAMATION = 603, + EMOTE_ONESHOT_QUESTION2 = 604, + EMOTE_STATE_CRY = 605, + EMOTE_STATE_USESTANDING_LOOP2 = 606, + EMOTE_STATE_WORK_SMITH = 613, + EMOTE_STATE_WORK_CHOPWOOD4 = 614, + EMOTE_STATE_CUSTOMSPELL02 = 615, + EMOTE_STATE_READ_AND_SIT = 616, + EMOTE_STATE_PARRY_UNARMED = 619, + EMOTE_STATE_BLOCK_SHIELD = 620, + EMOTE_STATE_SIT_GROUND_2 = 621 }; -// AnimationData.dbc +// AnimationData.dbc (6.0.2.18988) enum Anim { - ANIM_STAND = 0, - ANIM_DEATH = 1, - ANIM_SPELL = 2, - ANIM_STOP = 3, - ANIM_WALK = 4, - ANIM_RUN = 5, - ANIM_DEAD = 6, - ANIM_RISE = 7, - ANIM_STAND_WOUND = 8, - ANIM_COMBAT_WOUND = 9, - ANIM_COMBAT_CRITICAL = 10, - ANIM_SHUFFLE_LEFT = 11, - ANIM_SHUFFLE_RIGHT = 12, - ANIM_WALK_BACKWARDS = 13, - ANIM_STUN = 14, - ANIM_HANDS_CLOSED = 15, - ANIM_ATTACK_UNARMED = 16, - ANIM_ATTACK1H = 17, - ANIM_ATTACK2H = 18, - ANIM_ATTACK2HL = 19, - ANIM_PARRY_UNARMED = 20, - ANIM_PARRY1H = 21, - ANIM_PARRY2H = 22, - ANIM_PARRY2HL = 23, - ANIM_SHIELD_BLOCK = 24, - ANIM_READY_UNARMED = 25, - ANIM_READY1H = 26, - ANIM_READY2H = 27, - ANIM_READY2HL = 28, - ANIM_READY_BOW = 29, - ANIM_DODGE = 30, - ANIM_SPELL_PRECAST = 31, - ANIM_SPELL_CAST = 32, - ANIM_SPELL_CAST_AREA = 33, - ANIM_NPC_WELCOME = 34, - ANIM_NPC_GOODBYE = 35, - ANIM_BLOCK = 36, - ANIM_JUMP_START = 37, - ANIM_JUMP = 38, - ANIM_JUMP_END = 39, - ANIM_FALL = 40, - ANIM_SWIM_IDLE = 41, - ANIM_SWIM = 42, - ANIM_SWIM_LEFT = 43, - ANIM_SWIM_RIGHT = 44, - ANIM_SWIM_BACKWARDS = 45, - ANIM_ATTACK_BOW = 46, - ANIM_FIRE_BOW = 47, - ANIM_READY_RIFLE = 48, - ANIM_ATTACK_RIFLE = 49, - ANIM_LOOT = 50, - ANIM_READY_SPELL_DIRECTED = 51, - ANIM_READY_SPELL_OMNI = 52, - ANIM_SPELL_CAST_DIRECTED = 53, - ANIM_SPELL_CAST_OMNI = 54, - ANIM_BATTLE_ROAR = 55, - ANIM_READY_ABILITY = 56, - ANIM_SPECIAL1H = 57, - ANIM_SPECIAL2H = 58, - ANIM_SHIELD_BASH = 59, - ANIM_EMOTE_TALK = 60, - ANIM_EMOTE_EAT = 61, - ANIM_EMOTE_WORK = 62, - ANIM_EMOTE_USE_STANDING = 63, - ANIM_EMOTE_TALK_EXCLAMATION = 64, - ANIM_EMOTE_TALK_QUESTION = 65, - ANIM_EMOTE_BOW = 66, - ANIM_EMOTE_WAVE = 67, - ANIM_EMOTE_CHEER = 68, - ANIM_EMOTE_DANCE = 69, - ANIM_EMOTE_LAUGH = 70, - ANIM_EMOTE_SLEEP = 71, - ANIM_EMOTE_SIT_GROUND = 72, - ANIM_EMOTE_RUDE = 73, - ANIM_EMOTE_ROAR = 74, - ANIM_EMOTE_KNEEL = 75, - ANIM_EMOTE_KISS = 76, - ANIM_EMOTE_CRY = 77, - ANIM_EMOTE_CHICKEN = 78, - ANIM_EMOTE_BEG = 79, - ANIM_EMOTE_APPLAUD = 80, - ANIM_EMOTE_SHOUT = 81, - ANIM_EMOTE_FLEX = 82, - ANIM_EMOTE_SHY = 83, - ANIM_EMOTE_POINT = 84, - ANIM_ATTACK1H_PIERCE = 85, - ANIM_ATTACK2H_LOOSE_PIERCE = 86, - ANIM_ATTACK_OFF = 87, - ANIM_ATTACK_OFF_PIERCE = 88, - ANIM_SHEATHE = 89, - ANIM_HIP_SHEATHE = 90, - ANIM_MOUNT = 91, - ANIM_RUN_RIGHT = 92, - ANIM_RUN_LEFT = 93, - ANIM_MOUNT_SPECIAL = 94, - ANIM_KICK = 95, - ANIM_SIT_GROUND_DOWN = 96, - ANIM_SIT_GROUND = 97, - ANIM_SIT_GROUND_UP = 98, - ANIM_SLEEP_DOWN = 99, - ANIM_SLEEP = 100, - ANIM_SLEEP_UP = 101, - ANIM_SIT_CHAIR_LOW = 102, - ANIM_SIT_CHAIR_MED = 103, - ANIM_SIT_CHAIR_HIGH = 104, - ANIM_LOAD_BOW = 105, - ANIM_LOAD_RIFLE = 106, - ANIM_ATTACK_THROWN = 107, - ANIM_READY_THROWN = 108, - ANIM_HOLD_BOW = 109, - ANIM_HOLD_RIFLE = 110, - ANIM_HOLD_THROWN = 111, - ANIM_LOAD_THROWN = 112, - ANIM_EMOTE_SALUTE = 113, - ANIM_KNEEL_START = 114, - ANIM_KNEEL_LOOP = 115, - ANIM_KNEEL_END = 116, - ANIM_ATTACK_UNARMED_OFF = 117, - ANIM_SPECIAL_UNARMED = 118, - ANIM_STEALTH_WALK = 119, - ANIM_STEALTH_STAND = 120, - ANIM_KNOCKDOWN = 121, - ANIM_EATING_LOOP = 122, - ANIM_USE_STANDING_LOOP = 123, - ANIM_CHANNEL_CAST_DIRECTED = 124, - ANIM_CHANNEL_CAST_OMNI = 125, - ANIM_WHIRLWIND = 126, - ANIM_BIRTH = 127, - ANIM_USE_STANDING_START = 128, - ANIM_USE_STANDING_END = 129, - ANIM_CREATURE_SPECIAL = 130, - ANIM_DROWN = 131, - ANIM_DROWNED = 132, - ANIM_FISHING_CAST = 133, - ANIM_FISHING_LOOP = 134, - ANIM_FLY = 135, - ANIM_EMOTE_WORK_NO_SHEATHE = 136, - ANIM_EMOTE_STUN_NO_SHEATHE = 137, - ANIM_EMOTE_USE_STANDING_NO_SHEATHE = 138, - ANIM_SPELL_SLEEP_DOWN = 139, - ANIM_SPELL_KNEEL_START = 140, - ANIM_SPELL_KNEEL_LOOP = 141, - ANIM_SPELL_KNEEL_END = 142, - ANIM_SPRINT = 143, - ANIM_IN_FIGHT = 144, - ANIM_SPAWN = 145, - ANIM_CLOSE = 146, - ANIM_CLOSED = 147, - ANIM_OPEN = 148, - ANIM_OPENED = 149, - ANIM_DESTROY = 150, - ANIM_DESTROYED = 151, - ANIM_REBUILD = 152, - ANIM_CUSTOM_0 = 153, - ANIM_CUSTOM_1 = 154, - ANIM_CUSTOM_2 = 155, - ANIM_CUSTOM_3 = 156, - ANIM_DESPAWN = 157, - ANIM_HOLD = 158, - ANIM_DECAY = 159, - ANIM_BOW_PULL = 160, - ANIM_BOW_RELEASE = 161, - ANIM_SHIP_START = 162, - ANIM_SHIP_MOVING = 163, - ANIM_SHIP_STOP = 164, - ANIM_GROUP_ARROW = 165, - ANIM_ARROW = 166, - ANIM_CORPSE_ARROW = 167, - ANIM_GUIDE_ARROW = 168, - ANIM_SWAY = 169, - ANIM_DRUID_CAT_POUNCE = 170, - ANIM_DRUID_CAT_RIP = 171, - ANIM_DRUID_CAT_RAKE = 172, - ANIM_DRUID_CAT_RAVAGE = 173, - ANIM_DRUID_CAT_CLAW = 174, - ANIM_DRUID_CAT_COWER = 175, - ANIM_DRUID_BEAR_SWIPE = 176, - ANIM_DRUID_BEAR_BITE = 177, - ANIM_DRUID_BEAR_MAUL = 178, - ANIM_DRUID_BEAR_BASH = 179, - ANIM_DRAGON_TAIL = 180, - ANIM_DRAGON_STOMP = 181, - ANIM_DRAGON_SPIT = 182, - ANIM_DRAGON_SPIT_HOVER = 183, - ANIM_DRAGON_SPIT_FLY = 184, - ANIM_EMOTE_YES = 185, - ANIM_EMOTE_NO = 186, - ANIM_JUMP_LAND_RUN = 187, - ANIM_LOOT_HOLD = 188, - ANIM_LOOT_UP = 189, - ANIM_STAND_HIGH = 190, - ANIM_IMPACT = 191, - ANIM_LIFTOFF = 192, - ANIM_HOVER = 193, - ANIM_SUCCUBUS_ENTICE = 194, - ANIM_EMOTE_TRAIN = 195, - ANIM_EMOTE_DEAD = 196, - ANIM_EMOTE_DANCE_ONCE = 197, - ANIM_DEFLECT = 198, - ANIM_EMOTE_EAT_NO_SHEATHE = 199, - ANIM_LAND = 200, - ANIM_SUBMERGE = 201, - ANIM_SUBMERGED = 202, - ANIM_CANNIBALIZE = 203, - ANIM_ARROW_BIRTH = 204, - ANIM_GROUP_ARROW_BIRTH = 205, - ANIM_CORPSE_ARROW_BIRTH = 206, - ANIM_GUIDE_ARROW_BIRTH = 207, - ANIM_EMOTE_TALK_NO_SHEATHE = 208, - ANIM_EMOTE_POINT_NO_SHEATHE = 209, - ANIM_EMOTE_SALUTE_NO_SHEATHE = 210, - ANIM_EMOTE_DANCE_SPECIAL = 211, - ANIM_MUTILATE = 212, - ANIM_CUSTOM_SPELL_01 = 213, - ANIM_CUSTOM_SPELL_02 = 214, - ANIM_CUSTOM_SPELL_03 = 215, - ANIM_CUSTOM_SPELL_04 = 216, - ANIM_CUSTOM_SPELL_05 = 217, - ANIM_CUSTOM_SPELL_06 = 218, - ANIM_CUSTOM_SPELL_07 = 219, - ANIM_CUSTOM_SPELL_08 = 220, - ANIM_CUSTOM_SPELL_09 = 221, - ANIM_CUSTOM_SPELL_10 = 222, - ANIM_STEALTH_RUN = 223, - ANIM_EMERGE = 224, - ANIM_COWER = 225, - ANIM_GRAB = 226, - ANIM_GRAB_CLOSED = 227, - ANIM_GRAB_THROWN = 228, - ANIM_FLY_STAND = 229, - ANIM_FLY_DEATH = 230, - ANIM_FLY_SPELL = 231, - ANIM_FLY_STOP = 232, - ANIM_FLY_WALK = 233, - ANIM_FLY_RUN = 234, - ANIM_FLY_DEAD = 235, - ANIM_FLY_RISE = 236, - ANIM_FLY_STAND_WOUND = 237, - ANIM_FLY_COMBAT_WOUND = 238, - ANIM_FLY_COMBAT_CRITICAL = 239, - ANIM_FLY_SHUFFLE_LEFT = 240, - ANIM_FLY_SHUFFLE_RIGHT = 241, - ANIM_FLY_WALK_BACKWARDS = 242, - ANIM_FLY_STUN = 243, - ANIM_FLY_HANDS_CLOSED = 244, - ANIM_FLY_ATTACK_UNARMED = 245, - ANIM_FLY_ATTACK1H = 246, - ANIM_FLY_ATTACK2H = 247, - ANIM_FLY_ATTACK2HL = 248, - ANIM_FLY_PARRY_UNARMED = 249, - ANIM_FLY_PARRY1H = 250, - ANIM_FLY_PARRY2H = 251, - ANIM_FLY_PARRY2HL = 252, - ANIM_FLY_SHIELD_BLOCK = 253, - ANIM_FLY_READY_UNARMED = 254, - ANIM_FLY_READY1H = 255, - ANIM_FLY_READY2H = 256, - ANIM_FLY_READY2HL = 257, - ANIM_FLY_READY_BOW = 258, - ANIM_FLY_DODGE = 259, - ANIM_FLY_SPELL_PRECAST = 260, - ANIM_FLY_SPELL_CAST = 261, - ANIM_FLY_SPELL_CAST_AREA = 262, - ANIM_FLY_NPC_WELCOME = 263, - ANIM_FLY_NPC_GOODBYE = 264, - ANIM_FLY_BLOCK = 265, - ANIM_FLY_JUMP_START = 266, - ANIM_FLY_JUMP = 267, - ANIM_FLY_JUMP_END = 268, - ANIM_FLY_FALL = 269, - ANIM_FLY_SWIM_IDLE = 270, - ANIM_FLY_SWIM = 271, - ANIM_FLY_SWIM_LEFT = 272, - ANIM_FLY_SWIM_RIGHT = 273, - ANIM_FLY_SWIM_BACKWARDS = 274, - ANIM_FLY_ATTACK_BOW = 275, - ANIM_FLY_FIRE_BOW = 276, - ANIM_FLY_READY_RIFLE = 277, - ANIM_FLY_ATTACK_RIFLE = 278, - ANIM_FLY_LOOT = 279, - ANIM_FLY_READY_SPELL_DIRECTED = 280, - ANIM_FLY_READY_SPELL_OMNI = 281, - ANIM_FLY_SPELL_CAST_DIRECTED = 282, - ANIM_FLY_SPELL_CAST_OMNI = 283, - ANIM_FLY_SPELL_BATTLE_ROAR = 284, - ANIM_FLY_READY_ABILITY = 285, - ANIM_FLY_SPECIAL1H = 286, - ANIM_FLY_SPECIAL2H = 287, - ANIM_FLY_SHIELD_BASH = 288, - ANIM_FLY_EMOTE_TALK = 289, - ANIM_FLY_EMOTE_EAT = 290, - ANIM_FLY_EMOTE_WORK = 291, - ANIM_FLY_USE_STANDING = 292, - ANIM_FLY_EMOTE_TALK_EXCLAMATION = 293, - ANIM_FLY_EMOTE_TALK_QUESTION = 294, - ANIM_FLY_EMOTE_BOW = 295, - ANIM_FLY_EMOTE_WAVE = 296, - ANIM_FLY_EMOTE_CHEER = 297, - ANIM_FLY_EMOTE_DANCE = 298, - ANIM_FLY_EMOTE_LAUGH = 299, - ANIM_FLY_EMOTE_SLEEP = 300, - ANIM_FLY_EMOTE_SIT_GROUND = 301, - ANIM_FLY_EMOTE_RUDE = 302, - ANIM_FLY_EMOTE_ROAR = 303, - ANIM_FLY_EMOTE_KNEEL = 304, - ANIM_FLY_EMOTE_KISS = 305, - ANIM_FLY_EMOTE_CRY = 306, - ANIM_FLY_EMOTE_CHICKEN = 307, - ANIM_FLY_EMOTE_BEG = 308, - ANIM_FLY_EMOTE_APPLAUD = 309, - ANIM_FLY_EMOTE_SHOUT = 310, - ANIM_FLY_EMOTE_FLEX = 311, - ANIM_FLY_EMOTE_SHY = 312, - ANIM_FLY_EMOTE_POINT = 313, - ANIM_FLY_ATTACK1H_PIERCE = 314, - ANIM_FLY_ATTACK2H_LOOSE_PIERCE = 315, - ANIM_FLY_ATTACK_OFF = 316, - ANIM_FLY_ATTACK_OFF_PIERCE = 317, - ANIM_FLY_SHEATH = 318, - ANIM_FLY_HIP_SHEATH = 319, - ANIM_FLY_MOUNT = 320, - ANIM_FLY_RUN_RIGHT = 321, - ANIM_FLY_RUN_LEFT = 322, - ANIM_FLY_MOUNT_SPECIAL = 323, - ANIM_FLY_KICK = 324, - ANIM_FLY_SIT_GROUND_DOWN = 325, - ANIM_FLY_SIT_GROUND = 326, - ANIM_FLY_SIT_GROUND_UP = 327, - ANIM_FLY_SLEEP_DOWN = 328, - ANIM_FLY_SLEEP = 329, - ANIM_FLY_SLEEP_UP = 330, - ANIM_FLY_SIT_CHAIR_LOW = 331, - ANIM_FLY_SIT_CHAIR_MED = 332, - ANIM_FLY_SIT_CHAIR_HIGH = 333, - ANIM_FLY_LOAD_BOW = 334, - ANIM_FLY_LOAD_RIFLE = 335, - ANIM_FLY_ATTACK_THROWN = 336, - ANIM_FLY_READY_THROWN = 337, - ANIM_FLY_HOLD_BOW = 338, - ANIM_FLY_HOLD_RIFLE = 339, - ANIM_FLY_HOLD_THROWN = 340, - ANIM_FLY_LOAD_THROWN = 341, - ANIM_FLY_EMOTE_SALUTE = 342, - ANIM_FLY_KNEEL_START = 343, - ANIM_FLY_KNEEL_LOOP = 344, - ANIM_FLY_KNEEL_END = 345, - ANIM_FLY_ATTACK_UNARMED_OFF = 346, - ANIM_FLY_SPECIAL_UNARMED = 347, - ANIM_FLY_STEALTH_WALK = 348, - ANIM_FLY_STEALTH_STAND = 349, - ANIM_FLY_KNOCKDOWN = 350, - ANIM_FLY_EATING_LOOP = 351, - ANIM_FLY_USE_STANDING_LOOP = 352, - ANIM_FLY_CHANNEL_CAST_DIRECTED = 353, - ANIM_FLY_CHANNEL_CAST_OMNI = 354, - ANIM_FLY_WHIRLWIND = 355, - ANIM_FLY_BIRTH = 356, - ANIM_FLY_USE_STANDING_START = 357, - ANIM_FLY_USE_STANDING_END = 358, - ANIM_FLY_CREATURE_SPECIAL = 359, - ANIM_FLY_DROWN = 360, - ANIM_FLY_DROWNED = 361, - ANIM_FLY_FISHING_CAST = 362, - ANIM_FLY_FISHING_LOOP = 363, - ANIM_FLY_FLY = 364, - ANIM_FLY_EMOTE_WORK_NO_SHEATHE = 365, - ANIM_FLY_EMOTE_STUN_NO_SHEATHE = 366, - ANIM_FLY_EMOTE_USE_STANDING_NO_SHEATHE = 367, - ANIM_FLY_SPELL_SLEEP_DOWN = 368, - ANIM_FLY_SPELL_KNEEL_START = 369, - ANIM_FLY_SPELL_KNEEL_LOOP = 370, - ANIM_FLY_SPELL_KNEEL_END = 371, - ANIM_FLY_SPRINT = 372, - ANIM_FLY_IN_FLIGHT = 373, - ANIM_FLY_SPAWN = 374, - ANIM_FLY_CLOSE = 375, - ANIM_FLY_CLOSED = 376, - ANIM_FLY_OPEN = 377, - ANIM_FLY_OPENED = 378, - ANIM_FLY_DESTROY = 379, - ANIM_FLY_DESTROYED = 380, - ANIM_FLY_REBUILD = 381, - ANIM_FLY_CUSTOM_0 = 382, - ANIM_FLY_CUSTOM_1 = 383, - ANIM_FLY_CUSTOM_2 = 384, - ANIM_FLY_CUSTOM_3 = 385, - ANIM_FLY_DESPAWN = 386, - ANIM_FLY_HOLD = 387, - ANIM_FLY_DECAY = 388, - ANIM_FLY_BOW_PULL = 389, - ANIM_FLY_BOW_RELEASE = 390, - ANIM_FLY_SHIP_START = 391, - ANIM_FLY_SHIP_MOVING = 392, - ANIM_FLY_SHIP_STOP = 393, - ANIM_FLY_GROUP_ARROW = 394, - ANIM_FLY_ARROW = 395, - ANIM_FLY_CORPSE_ARROW = 396, - ANIM_FLY_GUIDE_ARROW = 397, - ANIM_FLY_SWAY = 398, - ANIM_FLY_DRUID_CAT_POUNCE = 399, - ANIM_FLY_DRUID_CAT_RIP = 400, - ANIM_FLY_DRUID_CAT_RAKE = 401, - ANIM_FLY_DRUID_CAT_RAVAGE = 402, - ANIM_FLY_DRUID_CAT_CLAW = 403, - ANIM_FLY_DRUID_CAT_COWER = 404, - ANIM_FLY_DRUID_BEAR_SWIPE = 405, - ANIM_FLY_DRUID_BEAR_BITE = 406, - ANIM_FLY_DRUID_BEAR_MAUL = 407, - ANIM_FLY_DRUID_BEAR_BASH = 408, - ANIM_FLY_DRAGON_TAIL = 409, - ANIM_FLY_DRAGON_STOMP = 410, - ANIM_FLY_DRAGON_SPIT = 411, - ANIM_FLY_DRAGON_SPIT_HOVER = 412, - ANIM_FLY_DRAGON_SPIT_FLY = 413, - ANIM_FLY_EMOTE_YES = 414, - ANIM_FLY_EMOTE_NO = 415, - ANIM_FLY_JUMP_LAND_RUN = 416, - ANIM_FLY_LOOT_HOLD = 417, - ANIM_FLY_LOOT_UP = 418, - ANIM_FLY_STAND_HIGH = 419, - ANIM_FLY_IMPACT = 420, - ANIM_FLY_LIFTOFF = 421, - ANIM_FLY_HOVER = 422, - ANIM_FLY_SUCCUBUS_ENTICE = 423, - ANIM_FLY_EMOTE_TRAIN = 424, - ANIM_FLY_EMOTE_DEAD = 425, - ANIM_FLY_EMOTE_DANCE_ONCE = 426, - ANIM_FLY_DEFLECT = 427, - ANIM_FLY_EMOTE_EAT_NO_SHEATHE = 428, - ANIM_FLY_LAND = 429, - ANIM_FLY_SUBMERGE = 430, - ANIM_FLY_SUBMERGED = 431, - ANIM_FLY_CANNIBALIZE = 432, - ANIM_FLY_ARROW_BIRTH = 433, - ANIM_FLY_GROUP_ARROW_BIRTH = 434, - ANIM_FLY_CORPSE_ARROW_BIRTH = 435, - ANIM_FLY_GUIDE_ARROW_BIRTH = 436, - ANIM_FLY_EMOTE_TALK_NO_SHEATHE = 437, - ANIM_FLY_EMOTE_POINT_NO_SHEATHE = 438, - ANIM_FLY_EMOTE_SALUTE_NO_SHEATHE = 439, - ANIM_FLY_EMOTE_DANCE_SPECIAL = 440, - ANIM_FLY_MUTILATE = 441, - ANIM_FLY_CUSTOM_SPELL_01 = 442, - ANIM_FLY_CUSTOM_SPELL_02 = 443, - ANIM_FLY_CUSTOM_SPELL_03 = 444, - ANIM_FLY_CUSTOM_SPELL_04 = 445, - ANIM_FLY_CUSTOM_SPELL_05 = 446, - ANIM_FLY_CUSTOM_SPELL_06 = 447, - ANIM_FLY_CUSTOM_SPELL_07 = 448, - ANIM_FLY_CUSTOM_SPELL_08 = 449, - ANIM_FLY_CUSTOM_SPELL_09 = 450, - ANIM_FLY_CUSTOM_SPELL_10 = 451, - ANIM_FLY_STEALTH_RUN = 452, - ANIM_FLY_EMERGE = 453, - ANIM_FLY_COWER = 454, - ANIM_FLY_GRAB = 455, - ANIM_FLY_GRAB_CLOSED = 456, - ANIM_FLY_GRAB_THROWN = 457, - ANIM_TO_FLY = 458, - ANIM_TO_HOVER = 459, - ANIM_TO_GROUND = 460, - ANIM_FLY_TO_FLY = 461, - ANIM_FLY_TO_HOVER = 462, - ANIM_FLY_TO_GROUND = 463, - ANIM_SETTLE = 464, - ANIM_FLY_SETTLE = 465, - ANIM_DEATH_START = 466, - ANIM_DEATH_LOOP = 467, - ANIM_DEATH_END = 468, - ANIM_FLY_DEATH_START = 469, - ANIM_FLY_DEATH_LOOP = 470, - ANIM_FLY_DEATH_END = 471, - ANIM_DEATH_END_HOLD = 472, - ANIM_FLY_DEATH_END_HOLD = 473, - ANIM_STRANGULATE = 474, - ANIM_FLY_STRANGULATE = 475, - ANIM_READY_JOUST = 476, - ANIM_LOAD_JOUST = 477, - ANIM_HOLD_JOUST = 478, - ANIM_FLY_READY_JOUST = 479, - ANIM_FLY_LOAD_JOUST = 480, - ANIM_FLY_HOLD_JOUST = 481, - ANIM_ATTACK_JOUST = 482, - ANIM_FLY_ATTACK_JOUST = 483, - ANIM_RECLINED_MOUNT = 484, - ANIM_FLY_RECLINED_MOUNT = 485, - ANIM_TO_ALTERED = 486, - ANIM_FROM_ALTERED = 487, - ANIM_FLY_TO_ALTERED = 488, - ANIM_FLY_FROM_ALTERED = 489, - ANIM_IN_STOCKS = 490, - ANIM_FLY_IN_STOCKS = 491, - ANIM_VEHICLE_GRAB = 492, - ANIM_VEHICLE_THROW = 493, - ANIM_FLY_VEHICLE_GRAB = 494, - ANIM_FLY_VEHICLE_THROW = 495, - ANIM_TO_ALTERED_POST_SWAP = 496, - ANIM_FROM_ALTERED_POST_SWAP = 497, - ANIM_FLY_TO_ALTERED_POST_SWAP = 498, - ANIM_FLY_FROM_ALTERED_POST_SWAP = 499, - ANIM_RECLINED_MOUNT_PASSENGER = 500, - ANIM_FLY_RECLINED_MOUNT_PASSENGER = 501, - ANIM_CARRY2H = 502, - ANIM_CARRIED2H = 503, - ANIM_FLY_CARRY2H = 504, - ANIM_FLY_CARRIED2H = 505, - ANIM_EMOTE_SNIFF = 506, - ANIM_EMOTE_FLY_SNIFF = 507, - ANIM_ATTACK_FIST1H = 508, - ANIM_FLY_ATTACK_FIST1H = 509, - ANIM_ATTACK_FIST_1H_OFF = 510, - ANIM_FLY_ATTACK_FIST_1H_OFF = 511, - ANIM_PARRY_FIST1H = 512, - ANIM_FLY_PARRY_FIST1H = 513, - ANIM_READY_FIST1H = 514, - ANIM_FLY_READY_FIST1H = 515, - ANIM_SPECIAL_FIST1H = 516, - ANIM_FLY_SPECIAL_FIST1H = 517, - ANIM_EMOTE_READ_START = 518, - ANIM_FLY_EMOTE_READ_START = 519, - ANIM_EMOTE_READ_LOOP = 520, - ANIM_FLY_EMOTE_READ_LOOP = 521, - ANIM_EMOTE_READ_END = 522, - ANIM_FLY_EMOTE_READ_END = 523, - ANIM_SWIM_RUN = 524, - ANIM_FLY_SWIM_RUN = 525, - ANIM_SWIM_WALK = 526, - ANIM_FLY_SWIM_WALK = 527, - ANIM_SWIM_WALK_BACKWARDS = 528, - ANIM_FLY_SWIM_WALK_BACKWARDS = 529, - ANIM_SWIM_SPRINT = 530, - ANIM_FLY_SWIM_SPRINT = 531, - ANIM_MOUNT_SWIM_IDLE = 532, - ANIM_FLY_MOUNT_SWIM_IDLE = 533, - ANIM_MOUNT_SWIM_BACKWARDS = 534, - ANIM_FLY_MOUNT_SWIM_BACKWARDS = 535, - ANIM_MOUNT_SWIM_LEFT = 536, - ANIM_FLY_MOUNT_SWIM_LEFT = 537, - ANIM_MOUNT_SWIM_RIGHT = 538, - ANIM_FLY_MOUNT_SWIM_RIGHT = 539, - ANIM_MOUNT_SWIM_RUN = 540, - ANIM_FLY_MOUNT_SWIM_RUN = 541, - ANIM_MOUNT_SWIM_SPRINT = 542, - ANIM_FLY_MOUNT_SWIM_SPRINT = 543, - ANIM_MOUNT_SWIM_WALK = 544, - ANIM_FLY_MOUNT_SWIM_WALK = 545, - ANIM_MOUNT_SWIM_WALK_BACKWARDS = 546, - ANIM_FLY_MOUNT_SWIM_WALK_BACKWARDS = 547, - ANIM_MOUNT_FLIGHT_IDLE = 548, - ANIM_FLY_MOUNT_FLIGHT_IDLE = 549, - ANIM_MOUNT_FLIGHT_BACKWARDS = 550, - ANIM_FLY_MOUNT_FLIGHT_BACKWARDS = 551, - ANIM_MOUNT_FLIGHT_LEFT = 552, - ANIM_FLY_MOUNT_FLIGHT_LEFT = 553, - ANIM_MOUNT_FLIGHT_RIGHT = 554, - ANIM_FLY_MOUNT_FLIGHT_RIGHT = 555, - ANIM_MOUNT_FLIGHT_RUN = 556, - ANIM_FLY_MOUNT_FLIGHT_RUN = 557, - ANIM_MOUNT_FLIGHT_SPRINT = 558, - ANIM_FLY_MOUNT_FLIGHT_SPRINT = 559, - ANIM_MOUNT_FLIGHT_WALK = 560, - ANIM_FLY_MOUNT_FLIGHT_WALK = 561, - ANIM_MOUNT_FLIGHT_WALK_BACKWARDS = 562, - ANIM_FLY_MOUNT_FLIGHT_WALK_BACKWARDS = 563, - ANIM_MOUNT_FLIGHT_START = 564, - ANIM_FLY_MOUNT_FLIGHT_START = 565, - ANIM_MOUNT_SWIM_START = 566, - ANIM_FLY_MOUNT_SWIM_START = 567, - ANIM_MOUNT_SWIM_LAND = 568, - ANIM_FLY_MOUNT_SWIM_LAND = 569, - ANIM_MOUNT_SWIM_LAND_RUN = 570, - ANIM_FLY_MOUNT_SWIM_LAND_RUN = 571, - ANIM_MOUNT_FLIGHT_LAND = 572, - ANIM_FLY_MOUNT_FLIGHT_LAND = 573, - ANIM_MOUNT_FLIGHT_LAND_RUN = 574, - ANIM_FLY_MOUNT_FLIGHT_LAND_RUN = 575, - ANIM_READY_BLOW_DART = 576, - ANIM_FLY_READY_BLOW_DART = 577, - ANIM_LOAD_BLOW_DART = 578, - ANIM_FLY_LOAD_BLOW_DART = 579, - ANIM_HOLD_BLOW_DART = 580, - ANIM_FLY_HOLD_BLOW_DART = 581, - ANIM_ATTACK_BLOW_DART = 582, - ANIM_FLY_ATTACK_BLOW_DART = 583, - ANIM_CARRIAGE_MOUNT = 584, - ANIM_FLY_CARRIAGE_MOUNT = 585, - ANIM_CARRIAGE_PASSENGER_MOUNT = 586, - ANIM_FLY_CARRIAGE_PASSENGER_MOUNT = 587, - ANIM_CARRIAGE_MOUNT_ATTACK = 588, - ANIM_FLY_CARRIAGE_MOUNT_ATTACK = 589, - ANIM_BARTENDER_STAND = 590, - ANIM_FLY_BARTENDER_STAND = 591, - ANIM_BARTENDER_WALK = 592, - ANIM_FLY_BARTENDER_WALK = 593, - ANIM_BARTENDER_RUN = 594, - ANIM_FLY_BARTENDER_RUN = 595, - ANIM_BARTENDER_SHUFFLE_LEFT = 596, - ANIM_FLY_BARTENDER_SHUFFLE_LEFT = 597, - ANIM_BARTENDER_SHUFFLE_RIGHT = 598, - ANIM_FLY_BARTENDER_SHUFFLE_RIGHT = 599, - ANIM_BARTENDER_EMOTE_TALK = 600, - ANIM_FLY_BARTENDER_EMOTE_TALK = 601, - ANIM_BARTENDER_EMOTE_POINT = 602, - ANIM_FLY_BARTENDER_EMOTE_POINT = 603, - ANIM_BARMAID_STAND = 604, - ANIM_FLY_BARMAID_STAND = 605, - ANIM_BARMAID_WALK = 606, - ANIM_FLY_BARMAID_WALK = 607, - ANIM_BARMAID_RUN = 608, - ANIM_FLY_BARMAID_RUN = 609, - ANIM_BARMAID_SHUFFLE_LEFT = 610, - ANIM_FLY_BARMAID_SHUFFLE_LEFT = 611, - ANIM_BARMAID_SHUFFLE_RIGHT = 612, - ANIM_FLY_BARMAID_SHUFFLE_RIGHT = 613, - ANIM_BARMAID_EMOTE_TALK = 614, - ANIM_FLY_BARMAID_EMOTE_TALK = 615, - ANIM_BARMAID_EMOTE_POINT = 616, - ANIM_FLY_BARMAID_EMOTE_POINT = 617, - ANIM_MOUNT_SELF_IDLE = 618, - ANIM_FLY_MOUNT_SELF_IDLE = 619, - ANIM_MOUNT_SELF_WALK = 620, - ANIM_FLY_MOUNT_SELF_WALK = 621, - ANIM_MOUNT_SELF_RUN = 622, - ANIM_FLY_MOUNT_SELF_RUN = 623, - ANIM_MOUNT_SELF_SPRINT = 624, - ANIM_FLY_MOUNT_SELF_SPRINT = 625, - ANIM_MOUNT_SELF_RUN_LEFT = 626, - ANIM_FLY_MOUNT_SELF_RUN_LEFT = 627, - ANIM_MOUNT_SELF_RUN_RIGHT = 628, - ANIM_FLY_MOUNT_SELF_RUN_RIGHT = 629, - ANIM_MOUNT_SELF_SHUFFLE_LEFT = 630, - ANIM_FLY_MOUNT_SELF_SHUFFLE_LEFT = 631, - ANIM_MOUNT_SELF_SHUFFLE_RIGHT = 632, - ANIM_FLY_MOUNT_SELF_SHUFFLE_RIGHT = 633, - ANIM_MOUNT_SELF_WALK_BACKWARDS = 634, - ANIM_FLY_MOUNT_SELF_WALK_BACKWARDS = 635, - ANIM_MOUNT_SELF_SPECIAL = 636, - ANIM_FLY_MOUNT_SELF_SPECIAL = 637, - ANIM_MOUNT_SELF_JUMP = 638, - ANIM_FLY_MOUNT_SELF_JUMP = 639, - ANIM_MOUNT_SELF_JUMP_START = 640, - ANIM_FLY_MOUNT_SELF_JUMP_START = 641, - ANIM_MOUNT_SELF_JUMP_END = 642, - ANIM_FLY_MOUNT_SELF_JUMP_END = 643, - ANIM_MOUNT_SELF_JUMP_LAND_RUN = 644, - ANIM_FLY_MOUNT_SELF_JUMP_LAND_RUN = 645, - ANIM_MOUNT_SELF_START = 646, - ANIM_FLY_MOUNT_SELF_START = 647, - ANIM_MOUNT_SELF_FALL = 648, - ANIM_FLY_MOUNT_SELF_FALL = 649, - ANIM_STORMSTRIKE = 650, - ANIM_FLY_STORMSTRIKE = 651, - ANIM_READY_JOUST_NO_SHEATHE = 652, - ANIM_FLY_READY_JOUST_NO_SHEATHE = 653, - ANIM_SLAM = 654, - ANIM_FLY_SLAM = 655, - ANIM_DEATH_STRIKE = 656, - ANIM_FLY_DEATH_STRIKE = 657, - ANIM_SWIM_ATTACK_UNARMED = 658, - ANIM_FLY_SWIM_ATTACK_UNARMED = 659 + ANIM_STAND = 0, + ANIM_DEATH = 1, + ANIM_SPELL = 2, + ANIM_STOP = 3, + ANIM_WALK = 4, + ANIM_RUN = 5, + ANIM_DEAD = 6, + ANIM_RISE = 7, + ANIM_STAND_WOUND = 8, + ANIM_COMBAT_WOUND = 9, + ANIM_COMBAT_CRITICAL = 10, + ANIM_SHUFFLE_LEFT = 11, + ANIM_SHUFFLE_RIGHT = 12, + ANIM_WALK_BACKWARDS = 13, + ANIM_STUN = 14, + ANIM_HANDS_CLOSED = 15, + ANIM_ATTACK_UNARMED = 16, + ANIM_ATTACK1H = 17, + ANIM_ATTACK2H = 18, + ANIM_ATTACK2HL = 19, + ANIM_PARRY_UNARMED = 20, + ANIM_PARRY1H = 21, + ANIM_PARRY2H = 22, + ANIM_PARRY2HL = 23, + ANIM_SHIELD_BLOCK = 24, + ANIM_READY_UNARMED = 25, + ANIM_READY1H = 26, + ANIM_READY2H = 27, + ANIM_READY2HL = 28, + ANIM_READY_BOW = 29, + ANIM_DODGE = 30, + ANIM_SPELL_PRECAST = 31, + ANIM_SPELL_CAST = 32, + ANIM_SPELL_CAST_AREA = 33, + ANIM_NPC_WELCOME = 34, + ANIM_NPC_GOODBYE = 35, + ANIM_BLOCK = 36, + ANIM_JUMP_START = 37, + ANIM_JUMP = 38, + ANIM_JUMP_END = 39, + ANIM_FALL = 40, + ANIM_SWIM_IDLE = 41, + ANIM_SWIM = 42, + ANIM_SWIM_LEFT = 43, + ANIM_SWIM_RIGHT = 44, + ANIM_SWIM_BACKWARDS = 45, + ANIM_ATTACK_BOW = 46, + ANIM_FIRE_BOW = 47, + ANIM_READY_RIFLE = 48, + ANIM_ATTACK_RIFLE = 49, + ANIM_LOOT = 50, + ANIM_READY_SPELL_DIRECTED = 51, + ANIM_READY_SPELL_OMNI = 52, + ANIM_SPELL_CAST_DIRECTED = 53, + ANIM_SPELL_CAST_OMNI = 54, + ANIM_BATTLE_ROAR = 55, + ANIM_READY_ABILITY = 56, + ANIM_SPECIAL1H = 57, + ANIM_SPECIAL2H = 58, + ANIM_SHIELD_BASH = 59, + ANIM_EMOTE_TALK = 60, + ANIM_EMOTE_EAT = 61, + ANIM_EMOTE_WORK = 62, + ANIM_EMOTE_USE_STANDING = 63, + ANIM_EMOTE_TALK_EXCLAMATION = 64, + ANIM_EMOTE_TALK_QUESTION = 65, + ANIM_EMOTE_BOW = 66, + ANIM_EMOTE_WAVE = 67, + ANIM_EMOTE_CHEER = 68, + ANIM_EMOTE_DANCE = 69, + ANIM_EMOTE_LAUGH = 70, + ANIM_EMOTE_SLEEP = 71, + ANIM_EMOTE_SIT_GROUND = 72, + ANIM_EMOTE_RUDE = 73, + ANIM_EMOTE_ROAR = 74, + ANIM_EMOTE_KNEEL = 75, + ANIM_EMOTE_KISS = 76, + ANIM_EMOTE_CRY = 77, + ANIM_EMOTE_CHICKEN = 78, + ANIM_EMOTE_BEG = 79, + ANIM_EMOTE_APPLAUD = 80, + ANIM_EMOTE_SHOUT = 81, + ANIM_EMOTE_FLEX = 82, + ANIM_EMOTE_SHY = 83, + ANIM_EMOTE_POINT = 84, + ANIM_ATTACK1H_PIERCE = 85, + ANIM_ATTACK2H_LOOSE_PIERCE = 86, + ANIM_ATTACK_OFF = 87, + ANIM_ATTACK_OFF_PIERCE = 88, + ANIM_SHEATHE = 89, + ANIM_HIP_SHEATHE = 90, + ANIM_MOUNT = 91, + ANIM_RUN_RIGHT = 92, + ANIM_RUN_LEFT = 93, + ANIM_MOUNT_SPECIAL = 94, + ANIM_KICK = 95, + ANIM_SIT_GROUND_DOWN = 96, + ANIM_SIT_GROUND = 97, + ANIM_SIT_GROUND_UP = 98, + ANIM_SLEEP_DOWN = 99, + ANIM_SLEEP = 100, + ANIM_SLEEP_UP = 101, + ANIM_SIT_CHAIR_LOW = 102, + ANIM_SIT_CHAIR_MED = 103, + ANIM_SIT_CHAIR_HIGH = 104, + ANIM_LOAD_BOW = 105, + ANIM_LOAD_RIFLE = 106, + ANIM_ATTACK_THROWN = 107, + ANIM_READY_THROWN = 108, + ANIM_HOLD_BOW = 109, + ANIM_HOLD_RIFLE = 110, + ANIM_HOLD_THROWN = 111, + ANIM_LOAD_THROWN = 112, + ANIM_EMOTE_SALUTE = 113, + ANIM_KNEEL_START = 114, + ANIM_KNEEL_LOOP = 115, + ANIM_KNEEL_END = 116, + ANIM_ATTACK_UNARMED_OFF = 117, + ANIM_SPECIAL_UNARMED = 118, + ANIM_STEALTH_WALK = 119, + ANIM_STEALTH_STAND = 120, + ANIM_KNOCKDOWN = 121, + ANIM_EATING_LOOP = 122, + ANIM_USE_STANDING_LOOP = 123, + ANIM_CHANNEL_CAST_DIRECTED = 124, + ANIM_CHANNEL_CAST_OMNI = 125, + ANIM_WHIRLWIND = 126, + ANIM_BIRTH = 127, + ANIM_USE_STANDING_START = 128, + ANIM_USE_STANDING_END = 129, + ANIM_CREATURE_SPECIAL = 130, + ANIM_DROWN = 131, + ANIM_DROWNED = 132, + ANIM_FISHING_CAST = 133, + ANIM_FISHING_LOOP = 134, + ANIM_FLY = 135, + ANIM_EMOTE_WORK_NO_SHEATHE = 136, + ANIM_EMOTE_STUN_NO_SHEATHE = 137, + ANIM_EMOTE_USE_STANDING_NO_SHEATHE = 138, + ANIM_SPELL_SLEEP_DOWN = 139, + ANIM_SPELL_KNEEL_START = 140, + ANIM_SPELL_KNEEL_LOOP = 141, + ANIM_SPELL_KNEEL_END = 142, + ANIM_SPRINT = 143, + ANIM_IN_FLIGHT = 144, + ANIM_SPAWN = 145, + ANIM_CLOSE = 146, + ANIM_CLOSED = 147, + ANIM_OPEN = 148, + ANIM_OPENED = 149, + ANIM_DESTROY = 150, + ANIM_DESTROYED = 151, + ANIM_REBUILD = 152, + ANIM_CUSTOM_0 = 153, + ANIM_CUSTOM_1 = 154, + ANIM_CUSTOM_2 = 155, + ANIM_CUSTOM_3 = 156, + ANIM_DESPAWN = 157, + ANIM_HOLD = 158, + ANIM_DECAY = 159, + ANIM_BOW_PULL = 160, + ANIM_BOW_RELEASE = 161, + ANIM_SHIP_START = 162, + ANIM_SHIP_MOVING = 163, + ANIM_SHIP_STOP = 164, + ANIM_GROUP_ARROW = 165, + ANIM_ARROW = 166, + ANIM_CORPSE_ARROW = 167, + ANIM_GUIDE_ARROW = 168, + ANIM_SWAY = 169, + ANIM_DRUID_CAT_POUNCE = 170, + ANIM_DRUID_CAT_RIP = 171, + ANIM_DRUID_CAT_RAKE = 172, + ANIM_DRUID_CAT_RAVAGE = 173, + ANIM_DRUID_CAT_CLAW = 174, + ANIM_DRUID_CAT_COWER = 175, + ANIM_DRUID_BEAR_SWIPE = 176, + ANIM_DRUID_BEAR_BITE = 177, + ANIM_DRUID_BEAR_MAUL = 178, + ANIM_DRUID_BEAR_BASH = 179, + ANIM_DRAGON_TAIL = 180, + ANIM_DRAGON_STOMP = 181, + ANIM_DRAGON_SPIT = 182, + ANIM_DRAGON_SPIT_HOVER = 183, + ANIM_DRAGON_SPIT_FLY = 184, + ANIM_EMOTE_YES = 185, + ANIM_EMOTE_NO = 186, + ANIM_JUMP_LAND_RUN = 187, + ANIM_LOOT_HOLD = 188, + ANIM_LOOT_UP = 189, + ANIM_STAND_HIGH = 190, + ANIM_IMPACT = 191, + ANIM_LIFTOFF = 192, + ANIM_HOVER = 193, + ANIM_SUCCUBUS_ENTICE = 194, + ANIM_EMOTE_TRAIN = 195, + ANIM_EMOTE_DEAD = 196, + ANIM_EMOTE_DANCE_ONCE = 197, + ANIM_DEFLECT = 198, + ANIM_EMOTE_EAT_NO_SHEATHE = 199, + ANIM_LAND = 200, + ANIM_SUBMERGE = 201, + ANIM_SUBMERGED = 202, + ANIM_CANNIBALIZE = 203, + ANIM_ARROW_BIRTH = 204, + ANIM_GROUP_ARROW_BIRTH = 205, + ANIM_CORPSE_ARROW_BIRTH = 206, + ANIM_GUIDE_ARROW_BIRTH = 207, + ANIM_EMOTE_TALK_NO_SHEATHE = 208, + ANIM_EMOTE_POINT_NO_SHEATHE = 209, + ANIM_EMOTE_SALUTE_NO_SHEATHE = 210, + ANIM_EMOTE_DANCE_SPECIAL = 211, + ANIM_MUTILATE = 212, + ANIM_CUSTOM_SPELL_01 = 213, + ANIM_CUSTOM_SPELL_02 = 214, + ANIM_CUSTOM_SPELL_03 = 215, + ANIM_CUSTOM_SPELL_04 = 216, + ANIM_CUSTOM_SPELL_05 = 217, + ANIM_CUSTOM_SPELL_06 = 218, + ANIM_CUSTOM_SPELL_07 = 219, + ANIM_CUSTOM_SPELL_08 = 220, + ANIM_CUSTOM_SPELL_09 = 221, + ANIM_CUSTOM_SPELL_10 = 222, + ANIM_STEALTH_RUN = 223, + ANIM_EMERGE = 224, + ANIM_COWER = 225, + ANIM_GRAB = 226, + ANIM_GRAB_CLOSED = 227, + ANIM_GRAB_THROWN = 228, + ANIM_FLY_STAND = 229, + ANIM_FLY_DEATH = 230, + ANIM_FLY_SPELL = 231, + ANIM_FLY_STOP = 232, + ANIM_FLY_WALK = 233, + ANIM_FLY_RUN = 234, + ANIM_FLY_DEAD = 235, + ANIM_FLY_RISE = 236, + ANIM_FLY_STAND_WOUND = 237, + ANIM_FLY_COMBAT_WOUND = 238, + ANIM_FLY_COMBAT_CRITICAL = 239, + ANIM_FLY_SHUFFLE_LEFT = 240, + ANIM_FLY_SHUFFLE_RIGHT = 241, + ANIM_FLY_WALK_BACKWARDS = 242, + ANIM_FLY_STUN = 243, + ANIM_FLY_HANDS_CLOSED = 244, + ANIM_FLY_ATTACK_UNARMED = 245, + ANIM_FLY_ATTACK1H = 246, + ANIM_FLY_ATTACK2H = 247, + ANIM_FLY_ATTACK2HL = 248, + ANIM_FLY_PARRY_UNARMED = 249, + ANIM_FLY_PARRY1H = 250, + ANIM_FLY_PARRY2H = 251, + ANIM_FLY_PARRY2HL = 252, + ANIM_FLY_SHIELD_BLOCK = 253, + ANIM_FLY_READY_UNARMED = 254, + ANIM_FLY_READY1H = 255, + ANIM_FLY_READY2H = 256, + ANIM_FLY_READY2HL = 257, + ANIM_FLY_READY_BOW = 258, + ANIM_FLY_DODGE = 259, + ANIM_FLY_SPELL_PRECAST = 260, + ANIM_FLY_SPELL_CAST = 261, + ANIM_FLY_SPELL_CAST_AREA = 262, + ANIM_FLY_NPC_WELCOME = 263, + ANIM_FLY_NPC_GOODBYE = 264, + ANIM_FLY_BLOCK = 265, + ANIM_FLY_JUMP_START = 266, + ANIM_FLY_JUMP = 267, + ANIM_FLY_JUMP_END = 268, + ANIM_FLY_FALL = 269, + ANIM_FLY_SWIM_IDLE = 270, + ANIM_FLY_SWIM = 271, + ANIM_FLY_SWIM_LEFT = 272, + ANIM_FLY_SWIM_RIGHT = 273, + ANIM_FLY_SWIM_BACKWARDS = 274, + ANIM_FLY_ATTACK_BOW = 275, + ANIM_FLY_FIRE_BOW = 276, + ANIM_FLY_READY_RIFLE = 277, + ANIM_FLY_ATTACK_RIFLE = 278, + ANIM_FLY_LOOT = 279, + ANIM_FLY_READY_SPELL_DIRECTED = 280, + ANIM_FLY_READY_SPELL_OMNI = 281, + ANIM_FLY_SPELL_CAST_DIRECTED = 282, + ANIM_FLY_SPELL_CAST_OMNI = 283, + ANIM_FLY_SPELL_BATTLE_ROAR = 284, + ANIM_FLY_READY_ABILITY = 285, + ANIM_FLY_SPECIAL1H = 286, + ANIM_FLY_SPECIAL2H = 287, + ANIM_FLY_SHIELD_BASH = 288, + ANIM_FLY_EMOTE_TALK = 289, + ANIM_FLY_EMOTE_EAT = 290, + ANIM_FLY_EMOTE_WORK = 291, + ANIM_FLY_USE_STANDING = 292, + ANIM_FLY_EMOTE_TALK_EXCLAMATION = 293, + ANIM_FLY_EMOTE_TALK_QUESTION = 294, + ANIM_FLY_EMOTE_BOW = 295, + ANIM_FLY_EMOTE_WAVE = 296, + ANIM_FLY_EMOTE_CHEER = 297, + ANIM_FLY_EMOTE_DANCE = 298, + ANIM_FLY_EMOTE_LAUGH = 299, + ANIM_FLY_EMOTE_SLEEP = 300, + ANIM_FLY_EMOTE_SIT_GROUND = 301, + ANIM_FLY_EMOTE_RUDE = 302, + ANIM_FLY_EMOTE_ROAR = 303, + ANIM_FLY_EMOTE_KNEEL = 304, + ANIM_FLY_EMOTE_KISS = 305, + ANIM_FLY_EMOTE_CRY = 306, + ANIM_FLY_EMOTE_CHICKEN = 307, + ANIM_FLY_EMOTE_BEG = 308, + ANIM_FLY_EMOTE_APPLAUD = 309, + ANIM_FLY_EMOTE_SHOUT = 310, + ANIM_FLY_EMOTE_FLEX = 311, + ANIM_FLY_EMOTE_SHY = 312, + ANIM_FLY_EMOTE_POINT = 313, + ANIM_FLY_ATTACK1H_PIERCE = 314, + ANIM_FLY_ATTACK2H_LOOSE_PIERCE = 315, + ANIM_FLY_ATTACK_OFF = 316, + ANIM_FLY_ATTACK_OFF_PIERCE = 317, + ANIM_FLY_SHEATH = 318, + ANIM_FLY_HIP_SHEATH = 319, + ANIM_FLY_MOUNT = 320, + ANIM_FLY_RUN_RIGHT = 321, + ANIM_FLY_RUN_LEFT = 322, + ANIM_FLY_MOUNT_SPECIAL = 323, + ANIM_FLY_KICK = 324, + ANIM_FLY_SIT_GROUND_DOWN = 325, + ANIM_FLY_SIT_GROUND = 326, + ANIM_FLY_SIT_GROUND_UP = 327, + ANIM_FLY_SLEEP_DOWN = 328, + ANIM_FLY_SLEEP = 329, + ANIM_FLY_SLEEP_UP = 330, + ANIM_FLY_SIT_CHAIR_LOW = 331, + ANIM_FLY_SIT_CHAIR_MED = 332, + ANIM_FLY_SIT_CHAIR_HIGH = 333, + ANIM_FLY_LOAD_BOW = 334, + ANIM_FLY_LOAD_RIFLE = 335, + ANIM_FLY_ATTACK_THROWN = 336, + ANIM_FLY_READY_THROWN = 337, + ANIM_FLY_HOLD_BOW = 338, + ANIM_FLY_HOLD_RIFLE = 339, + ANIM_FLY_HOLD_THROWN = 340, + ANIM_FLY_LOAD_THROWN = 341, + ANIM_FLY_EMOTE_SALUTE = 342, + ANIM_FLY_KNEEL_START = 343, + ANIM_FLY_KNEEL_LOOP = 344, + ANIM_FLY_KNEEL_END = 345, + ANIM_FLY_ATTACK_UNARMED_OFF = 346, + ANIM_FLY_SPECIAL_UNARMED = 347, + ANIM_FLY_STEALTH_WALK = 348, + ANIM_FLY_STEALTH_STAND = 349, + ANIM_FLY_KNOCKDOWN = 350, + ANIM_FLY_EATING_LOOP = 351, + ANIM_FLY_USE_STANDING_LOOP = 352, + ANIM_FLY_CHANNEL_CAST_DIRECTED = 353, + ANIM_FLY_CHANNEL_CAST_OMNI = 354, + ANIM_FLY_WHIRLWIND = 355, + ANIM_FLY_BIRTH = 356, + ANIM_FLY_USE_STANDING_START = 357, + ANIM_FLY_USE_STANDING_END = 358, + ANIM_FLY_CREATURE_SPECIAL = 359, + ANIM_FLY_DROWN = 360, + ANIM_FLY_DROWNED = 361, + ANIM_FLY_FISHING_CAST = 362, + ANIM_FLY_FISHING_LOOP = 363, + ANIM_FLY_FLY = 364, + ANIM_FLY_EMOTE_WORK_NO_SHEATHE = 365, + ANIM_FLY_EMOTE_STUN_NO_SHEATHE = 366, + ANIM_FLY_EMOTE_USE_STANDING_NO_SHEATHE = 367, + ANIM_FLY_SPELL_SLEEP_DOWN = 368, + ANIM_FLY_SPELL_KNEEL_START = 369, + ANIM_FLY_SPELL_KNEEL_LOOP = 370, + ANIM_FLY_SPELL_KNEEL_END = 371, + ANIM_FLY_SPRINT = 372, + ANIM_FLY_IN_FLIGHT = 373, + ANIM_FLY_SPAWN = 374, + ANIM_FLY_CLOSE = 375, + ANIM_FLY_CLOSED = 376, + ANIM_FLY_OPEN = 377, + ANIM_FLY_OPENED = 378, + ANIM_FLY_DESTROY = 379, + ANIM_FLY_DESTROYED = 380, + ANIM_FLY_REBUILD = 381, + ANIM_FLY_CUSTOM_0 = 382, + ANIM_FLY_CUSTOM_1 = 383, + ANIM_FLY_CUSTOM_2 = 384, + ANIM_FLY_CUSTOM_3 = 385, + ANIM_FLY_DESPAWN = 386, + ANIM_FLY_HOLD = 387, + ANIM_FLY_DECAY = 388, + ANIM_FLY_BOW_PULL = 389, + ANIM_FLY_BOW_RELEASE = 390, + ANIM_FLY_SHIP_START = 391, + ANIM_FLY_SHIP_MOVING = 392, + ANIM_FLY_SHIP_STOP = 393, + ANIM_FLY_GROUP_ARROW = 394, + ANIM_FLY_ARROW = 395, + ANIM_FLY_CORPSE_ARROW = 396, + ANIM_FLY_GUIDE_ARROW = 397, + ANIM_FLY_SWAY = 398, + ANIM_FLY_DRUID_CAT_POUNCE = 399, + ANIM_FLY_DRUID_CAT_RIP = 400, + ANIM_FLY_DRUID_CAT_RAKE = 401, + ANIM_FLY_DRUID_CAT_RAVAGE = 402, + ANIM_FLY_DRUID_CAT_CLAW = 403, + ANIM_FLY_DRUID_CAT_COWER = 404, + ANIM_FLY_DRUID_BEAR_SWIPE = 405, + ANIM_FLY_DRUID_BEAR_BITE = 406, + ANIM_FLY_DRUID_BEAR_MAUL = 407, + ANIM_FLY_DRUID_BEAR_BASH = 408, + ANIM_FLY_DRAGON_TAIL = 409, + ANIM_FLY_DRAGON_STOMP = 410, + ANIM_FLY_DRAGON_SPIT = 411, + ANIM_FLY_DRAGON_SPIT_HOVER = 412, + ANIM_FLY_DRAGON_SPIT_FLY = 413, + ANIM_FLY_EMOTE_YES = 414, + ANIM_FLY_EMOTE_NO = 415, + ANIM_FLY_JUMP_LAND_RUN = 416, + ANIM_FLY_LOOT_HOLD = 417, + ANIM_FLY_LOOT_UP = 418, + ANIM_FLY_STAND_HIGH = 419, + ANIM_FLY_IMPACT = 420, + ANIM_FLY_LIFTOFF = 421, + ANIM_FLY_HOVER = 422, + ANIM_FLY_SUCCUBUS_ENTICE = 423, + ANIM_FLY_EMOTE_TRAIN = 424, + ANIM_FLY_EMOTE_DEAD = 425, + ANIM_FLY_EMOTE_DANCE_ONCE = 426, + ANIM_FLY_DEFLECT = 427, + ANIM_FLY_EMOTE_EAT_NO_SHEATHE = 428, + ANIM_FLY_LAND = 429, + ANIM_FLY_SUBMERGE = 430, + ANIM_FLY_SUBMERGED = 431, + ANIM_FLY_CANNIBALIZE = 432, + ANIM_FLY_ARROW_BIRTH = 433, + ANIM_FLY_GROUP_ARROW_BIRTH = 434, + ANIM_FLY_CORPSE_ARROW_BIRTH = 435, + ANIM_FLY_GUIDE_ARROW_BIRTH = 436, + ANIM_FLY_EMOTE_TALK_NO_SHEATHE = 437, + ANIM_FLY_EMOTE_POINT_NO_SHEATHE = 438, + ANIM_FLY_EMOTE_SALUTE_NO_SHEATHE = 439, + ANIM_FLY_EMOTE_DANCE_SPECIAL = 440, + ANIM_FLY_MUTILATE = 441, + ANIM_FLY_CUSTOM_SPELL_01 = 442, + ANIM_FLY_CUSTOM_SPELL_02 = 443, + ANIM_FLY_CUSTOM_SPELL_03 = 444, + ANIM_FLY_CUSTOM_SPELL_04 = 445, + ANIM_FLY_CUSTOM_SPELL_05 = 446, + ANIM_FLY_CUSTOM_SPELL_06 = 447, + ANIM_FLY_CUSTOM_SPELL_07 = 448, + ANIM_FLY_CUSTOM_SPELL_08 = 449, + ANIM_FLY_CUSTOM_SPELL_09 = 450, + ANIM_FLY_CUSTOM_SPELL_10 = 451, + ANIM_FLY_STEALTH_RUN = 452, + ANIM_FLY_EMERGE = 453, + ANIM_FLY_COWER = 454, + ANIM_FLY_GRAB = 455, + ANIM_FLY_GRAB_CLOSED = 456, + ANIM_FLY_GRAB_THROWN = 457, + ANIM_TO_FLY = 458, + ANIM_TO_HOVER = 459, + ANIM_TO_GROUND = 460, + ANIM_FLY_TO_FLY = 461, + ANIM_FLY_TO_HOVER = 462, + ANIM_FLY_TO_GROUND = 463, + ANIM_SETTLE = 464, + ANIM_FLY_SETTLE = 465, + ANIM_DEATH_START = 466, + ANIM_DEATH_LOOP = 467, + ANIM_DEATH_END = 468, + ANIM_FLY_DEATH_START = 469, + ANIM_FLY_DEATH_LOOP = 470, + ANIM_FLY_DEATH_END = 471, + ANIM_DEATH_END_HOLD = 472, + ANIM_FLY_DEATH_END_HOLD = 473, + ANIM_STRANGULATE = 474, + ANIM_FLY_STRANGULATE = 475, + ANIM_READY_JOUST = 476, + ANIM_LOAD_JOUST = 477, + ANIM_HOLD_JOUST = 478, + ANIM_FLY_READY_JOUST = 479, + ANIM_FLY_LOAD_JOUST = 480, + ANIM_FLY_HOLD_JOUST = 481, + ANIM_ATTACK_JOUST = 482, + ANIM_FLY_ATTACK_JOUST = 483, + ANIM_RECLINED_MOUNT = 484, + ANIM_FLY_RECLINED_MOUNT = 485, + ANIM_TO_ALTERED = 486, + ANIM_FROM_ALTERED = 487, + ANIM_FLY_TO_ALTERED = 488, + ANIM_FLY_FROM_ALTERED = 489, + ANIM_IN_STOCKS = 490, + ANIM_FLY_IN_STOCKS = 491, + ANIM_VEHICLE_GRAB = 492, + ANIM_VEHICLE_THROW = 493, + ANIM_FLY_VEHICLE_GRAB = 494, + ANIM_FLY_VEHICLE_THROW = 495, + ANIM_TO_ALTERED_POST_SWAP = 496, + ANIM_FROM_ALTERED_POST_SWAP = 497, + ANIM_FLY_TO_ALTERED_POST_SWAP = 498, + ANIM_FLY_FROM_ALTERED_POST_SWAP = 499, + ANIM_RECLINED_MOUNT_PASSENGER = 500, + ANIM_FLY_RECLINED_MOUNT_PASSENGER = 501, + ANIM_CARRY2H = 502, + ANIM_CARRIED2H = 503, + ANIM_FLY_CARRY2H = 504, + ANIM_FLY_CARRIED2H = 505, + ANIM_EMOTE_SNIFF = 506, + ANIM_EMOTE_FLY_SNIFF = 507, + ANIM_ATTACK_FIST1H = 508, + ANIM_FLY_ATTACK_FIST1H = 509, + ANIM_ATTACK_FIST_1H_OFF = 510, + ANIM_FLY_ATTACK_FIST_1H_OFF = 511, + ANIM_PARRY_FIST1H = 512, + ANIM_FLY_PARRY_FIST1H = 513, + ANIM_READY_FIST1H = 514, + ANIM_FLY_READY_FIST1H = 515, + ANIM_SPECIAL_FIST1H = 516, + ANIM_FLY_SPECIAL_FIST1H = 517, + ANIM_EMOTE_READ_START = 518, + ANIM_FLY_EMOTE_READ_START = 519, + ANIM_EMOTE_READ_LOOP = 520, + ANIM_FLY_EMOTE_READ_LOOP = 521, + ANIM_EMOTE_READ_END = 522, + ANIM_FLY_EMOTE_READ_END = 523, + ANIM_SWIM_RUN = 524, + ANIM_FLY_SWIM_RUN = 525, + ANIM_SWIM_WALK = 526, + ANIM_FLY_SWIM_WALK = 527, + ANIM_SWIM_WALK_BACKWARDS = 528, + ANIM_FLY_SWIM_WALK_BACKWARDS = 529, + ANIM_SWIM_SPRINT = 530, + ANIM_FLY_SWIM_SPRINT = 531, + ANIM_MOUNT_SWIM_IDLE = 532, + ANIM_FLY_MOUNT_SWIM_IDLE = 533, + ANIM_MOUNT_SWIM_BACKWARDS = 534, + ANIM_FLY_MOUNT_SWIM_BACKWARDS = 535, + ANIM_MOUNT_SWIM_LEFT = 536, + ANIM_FLY_MOUNT_SWIM_LEFT = 537, + ANIM_MOUNT_SWIM_RIGHT = 538, + ANIM_FLY_MOUNT_SWIM_RIGHT = 539, + ANIM_MOUNT_SWIM_RUN = 540, + ANIM_FLY_MOUNT_SWIM_RUN = 541, + ANIM_MOUNT_SWIM_SPRINT = 542, + ANIM_FLY_MOUNT_SWIM_SPRINT = 543, + ANIM_MOUNT_SWIM_WALK = 544, + ANIM_FLY_MOUNT_SWIM_WALK = 545, + ANIM_MOUNT_SWIM_WALK_BACKWARDS = 546, + ANIM_FLY_MOUNT_SWIM_WALK_BACKWARDS = 547, + ANIM_MOUNT_FLIGHT_IDLE = 548, + ANIM_FLY_MOUNT_FLIGHT_IDLE = 549, + ANIM_MOUNT_FLIGHT_BACKWARDS = 550, + ANIM_FLY_MOUNT_FLIGHT_BACKWARDS = 551, + ANIM_MOUNT_FLIGHT_LEFT = 552, + ANIM_FLY_MOUNT_FLIGHT_LEFT = 553, + ANIM_MOUNT_FLIGHT_RIGHT = 554, + ANIM_FLY_MOUNT_FLIGHT_RIGHT = 555, + ANIM_MOUNT_FLIGHT_RUN = 556, + ANIM_FLY_MOUNT_FLIGHT_RUN = 557, + ANIM_MOUNT_FLIGHT_SPRINT = 558, + ANIM_FLY_MOUNT_FLIGHT_SPRINT = 559, + ANIM_MOUNT_FLIGHT_WALK = 560, + ANIM_FLY_MOUNT_FLIGHT_WALK = 561, + ANIM_MOUNT_FLIGHT_WALK_BACKWARDS = 562, + ANIM_FLY_MOUNT_FLIGHT_WALK_BACKWARDS = 563, + ANIM_MOUNT_FLIGHT_START = 564, + ANIM_FLY_MOUNT_FLIGHT_START = 565, + ANIM_MOUNT_SWIM_START = 566, + ANIM_FLY_MOUNT_SWIM_START = 567, + ANIM_MOUNT_SWIM_LAND = 568, + ANIM_FLY_MOUNT_SWIM_LAND = 569, + ANIM_MOUNT_SWIM_LAND_RUN = 570, + ANIM_FLY_MOUNT_SWIM_LAND_RUN = 571, + ANIM_MOUNT_FLIGHT_LAND = 572, + ANIM_FLY_MOUNT_FLIGHT_LAND = 573, + ANIM_MOUNT_FLIGHT_LAND_RUN = 574, + ANIM_FLY_MOUNT_FLIGHT_LAND_RUN = 575, + ANIM_READY_BLOW_DART = 576, + ANIM_FLY_READY_BLOW_DART = 577, + ANIM_LOAD_BLOW_DART = 578, + ANIM_FLY_LOAD_BLOW_DART = 579, + ANIM_HOLD_BLOW_DART = 580, + ANIM_FLY_HOLD_BLOW_DART = 581, + ANIM_ATTACK_BLOW_DART = 582, + ANIM_FLY_ATTACK_BLOW_DART = 583, + ANIM_CARRIAGE_MOUNT = 584, + ANIM_FLY_CARRIAGE_MOUNT = 585, + ANIM_CARRIAGE_PASSENGER_MOUNT = 586, + ANIM_FLY_CARRIAGE_PASSENGER_MOUNT = 587, + ANIM_CARRIAGE_MOUNT_ATTACK = 588, + ANIM_FLY_CARRIAGE_MOUNT_ATTACK = 589, + ANIM_BARTENDER_STAND = 590, + ANIM_FLY_BARTENDER_STAND = 591, + ANIM_BARTENDER_WALK = 592, + ANIM_FLY_BARTENDER_WALK = 593, + ANIM_BARTENDER_RUN = 594, + ANIM_FLY_BARTENDER_RUN = 595, + ANIM_BARTENDER_SHUFFLE_LEFT = 596, + ANIM_FLY_BARTENDER_SHUFFLE_LEFT = 597, + ANIM_BARTENDER_SHUFFLE_RIGHT = 598, + ANIM_FLY_BARTENDER_SHUFFLE_RIGHT = 599, + ANIM_BARTENDER_EMOTE_TALK = 600, + ANIM_FLY_BARTENDER_EMOTE_TALK = 601, + ANIM_BARTENDER_EMOTE_POINT = 602, + ANIM_FLY_BARTENDER_EMOTE_POINT = 603, + ANIM_BARMAID_STAND = 604, + ANIM_FLY_BARMAID_STAND = 605, + ANIM_BARMAID_WALK = 606, + ANIM_FLY_BARMAID_WALK = 607, + ANIM_BARMAID_RUN = 608, + ANIM_FLY_BARMAID_RUN = 609, + ANIM_BARMAID_SHUFFLE_LEFT = 610, + ANIM_FLY_BARMAID_SHUFFLE_LEFT = 611, + ANIM_BARMAID_SHUFFLE_RIGHT = 612, + ANIM_FLY_BARMAID_SHUFFLE_RIGHT = 613, + ANIM_BARMAID_EMOTE_TALK = 614, + ANIM_FLY_BARMAID_EMOTE_TALK = 615, + ANIM_BARMAID_EMOTE_POINT = 616, + ANIM_FLY_BARMAID_EMOTE_POINT = 617, + ANIM_MOUNT_SELF_IDLE = 618, + ANIM_FLY_MOUNT_SELF_IDLE = 619, + ANIM_MOUNT_SELF_WALK = 620, + ANIM_FLY_MOUNT_SELF_WALK = 621, + ANIM_MOUNT_SELF_RUN = 622, + ANIM_FLY_MOUNT_SELF_RUN = 623, + ANIM_MOUNT_SELF_SPRINT = 624, + ANIM_FLY_MOUNT_SELF_SPRINT = 625, + ANIM_MOUNT_SELF_RUN_LEFT = 626, + ANIM_FLY_MOUNT_SELF_RUN_LEFT = 627, + ANIM_MOUNT_SELF_RUN_RIGHT = 628, + ANIM_FLY_MOUNT_SELF_RUN_RIGHT = 629, + ANIM_MOUNT_SELF_SHUFFLE_LEFT = 630, + ANIM_FLY_MOUNT_SELF_SHUFFLE_LEFT = 631, + ANIM_MOUNT_SELF_SHUFFLE_RIGHT = 632, + ANIM_FLY_MOUNT_SELF_SHUFFLE_RIGHT = 633, + ANIM_MOUNT_SELF_WALK_BACKWARDS = 634, + ANIM_FLY_MOUNT_SELF_WALK_BACKWARDS = 635, + ANIM_MOUNT_SELF_SPECIAL = 636, + ANIM_FLY_MOUNT_SELF_SPECIAL = 637, + ANIM_MOUNT_SELF_JUMP = 638, + ANIM_FLY_MOUNT_SELF_JUMP = 639, + ANIM_MOUNT_SELF_JUMP_START = 640, + ANIM_FLY_MOUNT_SELF_JUMP_START = 641, + ANIM_MOUNT_SELF_JUMP_END = 642, + ANIM_FLY_MOUNT_SELF_JUMP_END = 643, + ANIM_MOUNT_SELF_JUMP_LAND_RUN = 644, + ANIM_FLY_MOUNT_SELF_JUMP_LAND_RUN = 645, + ANIM_MOUNT_SELF_START = 646, + ANIM_FLY_MOUNT_SELF_START = 647, + ANIM_MOUNT_SELF_FALL = 648, + ANIM_FLY_MOUNT_SELF_FALL = 649, + ANIM_STORMSTRIKE = 650, + ANIM_FLY_STORMSTRIKE = 651, + ANIM_READY_JOUST_NO_SHEATHE = 652, + ANIM_FLY_READY_JOUST_NO_SHEATHE = 653, + ANIM_SLAM = 654, + ANIM_FLY_SLAM = 655, + ANIM_DEATH_STRIKE = 656, + ANIM_FLY_DEATH_STRIKE = 657, + ANIM_SWIM_ATTACK_UNARMED = 658, + ANIM_FLY_SWIM_ATTACK_UNARMED = 659, + ANIM_SPINNING_KICK = 660, + ANIM_FLY_SPINNING_KICK = 661, + ANIM_ROUND_HOUSE_KICK = 662, + ANIM_FLY_ROUND_HOUSE_KICK = 663, + ANIM_ROLL_START = 664, + ANIM_FLY_ROLL_START = 665, + ANIM_ROLL = 666, + ANIM_FLY_ROLL = 667, + ANIM_ROLL_END = 668, + ANIM_FLY_ROLL_END = 669, + ANIM_PALM_STRIKE = 670, + ANIM_FLY_PALM_STRIKE = 671, + ANIM_MONK_OFFENSE_ATTACK_UNARMED = 672, + ANIM_FLY_MONK_OFFENSE_ATTACK_UNARMED = 673, + ANIM_MONK_OFFENSE_ATTACK_UNARMED_OFF = 674, + ANIM_FLY_MONK_OFFENSE_ATTACK_UNARMED_OFF = 675, + ANIM_MONK_OFFENSE_PARRY_UNARMED = 676, + ANIM_FLY_MONK_OFFENSE_PARRY_UNARMED = 677, + ANIM_MONK_OFFENSE_READY_UNARMED = 678, + ANIM_FLY_MONK_OFFENSE_READY_UNARMED = 679, + ANIM_MONK_OFFENSE_SPECIAL_UNARMED = 680, + ANIM_FLY_MONK_OFFENSE_SPECIAL_UNARMED = 681, + ANIM_MONK_DEFENSE_ATTACK_UNARMED = 682, + ANIM_FLY_MONK_DEFENSE_ATTACK_UNARMED = 683, + ANIM_MONK_DEFENSE_ATTACK_UNARMED_OFF = 684, + ANIM_FLY_MONK_DEFENSE_ATTACK_UNARMED_OFF = 685, + ANIM_MONK_DEFENSE_PARRY_UNARMED = 686, + ANIM_FLY_MONK_DEFENSE_PARRY_UNARMED = 687, + ANIM_MONK_DEFENSE_READY_UNARMED = 688, + ANIM_FLY_MONK_DEFENSE_READY_UNARMED = 689, + ANIM_MONK_DEFENSE_SPECIAL_UNARMED = 690, + ANIM_FLY_MONK_DEFENSE_SPECIAL_UNARMED = 691, + ANIM_MONK_HEAL_ATTACK_UNARMED = 692, + ANIM_FLY_MONK_HEAL_ATTACK_UNARMED = 693, + ANIM_MONK_HEAL_ATTACK_UNARMED_OFF = 694, + ANIM_FLY_MONK_HEAL_ATTACK_UNARMED_OFF = 695, + ANIM_MONK_HEAL_PARRY_UNARMED = 696, + ANIM_FLY_MONK_HEAL_PARRY_UNARMED = 697, + ANIM_MONK_HEAL_READY_UNARMED = 698, + ANIM_FLY_MONK_HEAL_READY_UNARMED = 699, + ANIM_MONK_HEAL_SPECIAL_UNARMED = 700, + ANIM_FLY_MONK_HEAL_SPECIAL_UNARMED = 701, + ANIM_FLYING_KICK = 702, + ANIM_FLY_FLYING_KICK = 703, + ANIM_FLYING_KICK_START = 704, + ANIM_FLY_FLYING_KICK_START = 705, + ANIM_FLYING_KICK_END = 706, + ANIM_FLY_FLYING_KICK_END = 707, + ANIM_CRANE_START = 708, + ANIM_FLY_CRANE_START = 709, + ANIM_CRANE_LOOP = 710, + ANIM_FLY_CRANE_LOOP = 711, + ANIM_CRANE_END = 712, + ANIM_FLY_CRANE_END = 713, + ANIM_DESPAWNED = 714, + ANIM_FLY_DESPAWNED = 715, + ANIM_THOUSAND_FISTS = 716, + ANIM_FLY_THOUSAND_FISTS = 717, + ANIM_MONK_HEAL_READY_SPELL_DIRECTED = 718, + ANIM_FLY_MONK_HEAL_READY_SPELL_DIRECTED = 719, + ANIM_MONK_HEAL_READY_SPELL_OMNI = 720, + ANIM_FLY_MONK_HEAL_READY_SPELL_OMNI = 721, + ANIM_MONK_HEAL_SPELL_CAST_DIRECTED = 722, + ANIM_FLY_MONK_HEAL_SPELL_CAST_DIRECTED = 723, + ANIM_MONK_HEAL_SPELL_CAST_OMNI = 724, + ANIM_FLY_MONK_HEAL_SPELL_CAST_OMNI = 725, + ANIM_MONK_HEAL_CHANNEL_CAST_DIRECTED = 726, + ANIM_FLY_MONK_HEAL_CHANNEL_CAST_DIRECTED = 727, + ANIM_MONK_HEAL_CHANNEL_CAST_OMNI = 728, + ANIM_FLY_MONK_HEAL_CHANNEL_CAST_OMNI = 729, + ANIM_TORPEDO = 730, + ANIM_FLY_TORPEDO = 731, + ANIM_MEDITATE = 732, + ANIM_FLY_MEDITATE = 733, + ANIM_BREATH_OF_FIRE = 734, + ANIM_FLY_BREATH_OF_FIRE = 735, + ANIM_RISING_SUN_KICK = 736, + ANIM_FLY_RISING_SUN_KICK = 737, + ANIM_GROUND_KICK = 738, + ANIM_FLY_GROUND_KICK = 739, + ANIM_KICK_BACK = 740, + ANIM_FLY_KICK_BACK = 741, + ANIM_PET_BATTLE_STAND = 742, + ANIM_FLY_PET_BATTLE_STAND = 743, + ANIM_PET_BATTLE_DEATH = 744, + ANIM_FLY_PET_BATTLE_DEATH = 745, + ANIM_PET_BATTLE_RUN = 746, + ANIM_FLY_PET_BATTLE_RUN = 747, + ANIM_PET_BATTLE_WOUND = 748, + ANIM_FLY_PET_BATTLE_WOUND = 749, + ANIM_PET_BATTLE_ATTACK = 750, + ANIM_FLY_PET_BATTLE_ATTACK = 751, + ANIM_PET_BATTLE_READY_SPELL = 752, + ANIM_FLY_PET_BATTLE_READY_SPELL = 753, + ANIM_PET_BATTLE_SPELL_CAST = 754, + ANIM_FLY_PET_BATTLE_SPELL_CAST = 755, + ANIM_PET_BATTLE_CUSTOM0 = 756, + ANIM_FLY_PET_BATTLE_CUSTOM0 = 757, + ANIM_PET_BATTLE_CUSTOM1 = 758, + ANIM_FLY_PET_BATTLE_CUSTOM1 = 759, + ANIM_PET_BATTLE_CUSTOM2 = 760, + ANIM_FLY_PET_BATTLE_CUSTOM2 = 761, + ANIM_PET_BATTLE_CUSTOM3 = 762, + ANIM_FLY_PET_BATTLE_CUSTOM3 = 763, + ANIM_PET_BATTLE_VICTORY = 764, + ANIM_FLY_PET_BATTLE_VICTORY = 765, + ANIM_PET_BATTLE_LOSS = 766, + ANIM_FLY_PET_BATTLE_LOSS = 767, + ANIM_PET_BATTLE_STUN = 768, + ANIM_FLY_PET_BATTLE_STUN = 769, + ANIM_PET_BATTLE_DEAD = 770, + ANIM_FLY_PET_BATTLE_DEAD = 771, + ANIM_PET_BATTLE_FREEZE = 772, + ANIM_FLY_PET_BATTLE_FREEZE = 773, + ANIM_MONK_OFFENSE_ATTACK_WEAPON = 774, + ANIM_FLY_MONK_OFFENSE_ATTACK_WEAPON = 775, + ANIM_BAR_TEND_EMOTE_WAVE = 776, + ANIM_FLY_BAR_TEND_EMOTE_WAVE = 777, + ANIM_BAR_SERVER_EMOTE_TALK = 778, + ANIM_FLY_BAR_SERVER_EMOTE_TALK = 779, + ANIM_BAR_SERVER_EMOTE_WAVE = 780, + ANIM_FLY_BAR_SERVER_EMOTE_WAVE = 781, + ANIM_BAR_SERVER_POUR_DRINKS = 782, + ANIM_FLY_BAR_SERVER_POUR_DRINKS = 783, + ANIM_BAR_SERVER_PICKUP = 784, + ANIM_FLY_BAR_SERVER_PICKUP = 785, + ANIM_BAR_SERVER_PUT_DOWN = 786, + ANIM_FLY_BAR_SERVER_PUT_DOWN = 787, + ANIM_BAR_SWEEP_STAND = 788, + ANIM_FLY_BAR_SWEEP_STAND = 789, + ANIM_BAR_PATRON_SIT = 790, + ANIM_FLY_BAR_PATRON_SIT = 791, + ANIM_BAR_PATRON_SIT_EMOTE_TALK = 792, + ANIM_FLY_BAR_PATRON_SIT_EMOTE_TALK = 793, + ANIM_BAR_PATRON_STAND = 794, + ANIM_FLY_BAR_PATRON_STAND = 795, + ANIM_BAR_PATRON_STAND_EMOTE_TALK = 796, + ANIM_FLY_BAR_PATRON_STAND_EMOTE_TALK = 797, + ANIM_BAR_PATRON_STAND_EMOTE_POINT = 798, + ANIM_FLY_BAR_PATRON_STAND_EMOTE_POINT = 799, + ANIM_CARRION_SWARM = 800, + ANIM_FLY_CARRION_SWARM = 801, + ANIM_WHEEL_LOOP = 802, + ANIM_FLY_WHEEL_LOOP = 803, + ANIM_STAND_CHARACTER_CREATE = 804, + ANIM_FLY_STAND_CHARACTER_CREATE = 805, + ANIM_MOUNT_CHOPPER = 806, + ANIM_FLY_MOUNT_CHOPPER = 807, + ANIM_FACE_POSE = 808, + ANIM_FLY_FACE_POSE = 809, + ANIM_WARRIOR_COLOSSUS_SMASH = 810, + ANIM_FLY_WARRIOR_COLOSSUS_SMASH = 811, + ANIM_WARRIOR_MORTAL_STRIKE = 812, + ANIM_FLY_WARRIOR_MORTAL_STRIKE = 813, + ANIM_WARRIOR_WHIRLWIND = 814, + ANIM_FLY_WARRIOR_WHIRLWIND = 815, + ANIM_WARRIOR_CHARGE = 816, + ANIM_FLY_WARRIOR_CHARGE = 817, + ANIM_WARRIOR_CHARGE_START = 818, + ANIM_FLY_WARRIOR_CHARGE_START = 819, + ANIM_WARRIOR_CHARGE_END = 820, + ANIM_FLY_WARRIOR_CHARGE_END = 821 }; enum LockKeyType @@ -2878,6 +3283,7 @@ enum LockKeyType LOCK_KEY_SKILL = 2 }; +// LockType.dbc (6.0.2.18988) enum LockType { LOCKTYPE_PICKLOCK = 1, @@ -2900,20 +3306,24 @@ enum LockType LOCKTYPE_SLOW_CLOSE = 18, LOCKTYPE_FISHING = 19, LOCKTYPE_INSCRIPTION = 20, - LOCKTYPE_OPEN_FROM_VEHICLE = 21 + LOCKTYPE_OPEN_FROM_VEHICLE = 21, + LOCKTYPE_ARCHAELOGY = 22, + LOCKTYPE_PVP_OPEN_FAST = 23, + LOCKTYPE_LUMBER_MILL = 28 }; -enum TrainerType // this is important type for npcs! +// this is important type for npcs! +enum TrainerType { TRAINER_TYPE_CLASS = 0, - TRAINER_TYPE_MOUNTS = 1, // on blizz it's 2 + TRAINER_TYPE_MOUNTS = 1, // on blizz it's 2 TRAINER_TYPE_TRADESKILLS = 2, TRAINER_TYPE_PETS = 3 }; #define MAX_TRAINER_TYPE 4 -// CreatureType.dbc +// CreatureType.dbc (6.0.2.18988) enum CreatureType { CREATURE_TYPE_BEAST = 1, @@ -2928,14 +3338,16 @@ enum CreatureType CREATURE_TYPE_NOT_SPECIFIED = 10, CREATURE_TYPE_TOTEM = 11, CREATURE_TYPE_NON_COMBAT_PET = 12, - CREATURE_TYPE_GAS_CLOUD = 13 + CREATURE_TYPE_GAS_CLOUD = 13, + CREATURE_TYPE_WILD_PET = 14, + CREATURE_TYPE_ABERRATION = 15 }; uint32 const CREATURE_TYPEMASK_DEMON_OR_UNDEAD = (1 << (CREATURE_TYPE_DEMON-1)) | (1 << (CREATURE_TYPE_UNDEAD-1)); uint32 const CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD = (1 << (CREATURE_TYPE_HUMANOID-1)) | (1 << (CREATURE_TYPE_UNDEAD-1)); uint32 const CREATURE_TYPEMASK_MECHANICAL_OR_ELEMENTAL = (1 << (CREATURE_TYPE_MECHANICAL-1)) | (1 << (CREATURE_TYPE_ELEMENTAL-1)); -// CreatureFamily.dbc +// CreatureFamily.dbc (6.0.2.18988) enum CreatureFamily { CREATURE_FAMILY_WOLF = 1, @@ -2947,7 +3359,7 @@ enum CreatureFamily CREATURE_FAMILY_CARRION_BIRD = 7, CREATURE_FAMILY_CRAB = 8, CREATURE_FAMILY_GORILLA = 9, - CREATURE_FAMILY_HORSE_CUSTOM = 10, // Does not exist in DBC but used for horse like beasts in DB + CREATURE_FAMILY_HORSE_CUSTOM = 10, // Does not exist in DBC but used for horse like beasts in DB CREATURE_FAMILY_RAPTOR = 11, CREATURE_FAMILY_TALLSTRIDER = 12, CREATURE_FAMILY_FELHUNTER = 15, @@ -2987,57 +3399,79 @@ enum CreatureFamily CREATURE_FAMILY_SHALE_SPIDER = 55, CREATURE_FAMILY_ZOMBIE = 56, CREATURE_FAMILY_BEETLE_OLD = 57, - CREATURE_FAMILY_SILITHID_2 = 59, - CREATURE_FAMILY_WASP_2 = 66, + CREATURE_FAMILY_SILITHID2 = 59, + CREATURE_FAMILY_WASP2 = 66, CREATURE_FAMILY_HYDRA = 68, + CREATURE_FAMILY_FELIMP = 100, + CREATURE_FAMILY_VOIDLORD = 101, + CREATURE_FAMILY_SHIVARA = 102, + CREATURE_FAMILY_OBSERVER = 103, + CREATURE_FAMILY_WRATHGUARD = 104, + CREATURE_FAMILY_INFERNAL = 108, + CREATURE_FAMILY_FIREELEMENTAL = 116, + CREATURE_FAMILY_EARTHELEMENTAL = 117, + CREATURE_FAMILY_CRANE = 125, + CREATURE_FAMILY_WATERSTRIDER = 126, + CREATURE_FAMILY_PORCUPINE = 127, + CREATURE_FAMILY_QUILEN = 128, + CREATURE_FAMILY_GOAT = 129, + CREATURE_FAMILY_BASILISK = 130, + CREATURE_FAMILY_DIREHORN = 138, + CREATURE_FAMILY_STORMELEMENTAL = 145, + CREATURE_FAMILY_MTWATERELEMENTAL = 146, + CREATURE_FAMILY_TORRORGUARD = 147, + CREATURE_FAMILY_ABYSSAL = 148, + CREATURE_FAMILY_RYLAK = 149, + CREATURE_FAMILY_RIVERBEAST = 150, + CREATURE_FAMILY_STAG = 151 }; enum CreatureTypeFlags { - CREATURE_TYPEFLAGS_TAMEABLE = 0x00000001, // Tameable by any hunter - CREATURE_TYPEFLAGS_GHOST = 0x00000002, // Creature are also visible for not alive player. Allow gossip interaction if npcflag allow? - CREATURE_TYPEFLAGS_BOSS = 0x00000004, - CREATURE_TYPEFLAGS_UNK3 = 0x00000008, - CREATURE_TYPEFLAGS_UNK4 = 0x00000010, - CREATURE_TYPEFLAGS_UNK5 = 0x00000020, - CREATURE_TYPEFLAGS_UNK6 = 0x00000040, - CREATURE_TYPEFLAGS_DEAD_INTERACT = 0x00000080, // Player can interact with the creature if its dead (not player dead) - CREATURE_TYPEFLAGS_HERBLOOT = 0x00000100, // Can be looted by herbalist - CREATURE_TYPEFLAGS_MININGLOOT = 0x00000200, // Can be looted by miner - CREATURE_TYPEFLAGS_DONT_LOG_DEATH = 0x00000400, // Death event will not show up in combat log - CREATURE_TYPEFLAGS_MOUNTED_COMBAT = 0x00000800, // Creature can remain mounted when entering combat - CREATURE_TYPEFLAGS_AID_PLAYERS = 0x00001000, // ? Can aid any player in combat if in range? - CREATURE_TYPEFLAGS_UNK13 = 0x00002000, - CREATURE_TYPEFLAGS_UNK14 = 0x00004000, // ? Possibly not in use - CREATURE_TYPEFLAGS_ENGINEERLOOT = 0x00008000, // Can be looted by engineer - CREATURE_TYPEFLAGS_EXOTIC = 0x00010000, // Can be tamed by hunter as exotic pet - CREATURE_TYPEFLAGS_UNK17 = 0x00020000, // ? Related to vehicles/pvp? - CREATURE_TYPEFLAGS_UNK18 = 0x00040000, // ? Related to vehicle/siege weapons? - CREATURE_TYPEFLAGS_PROJECTILE_COLLISION = 0x00080000, // Projectiles can collide with this creature - interacts with TARGET_DEST_TRAJ - CREATURE_TYPEFLAGS_UNK20 = 0x00100000, - CREATURE_TYPEFLAGS_UNK21 = 0x00200000, - CREATURE_TYPEFLAGS_UNK22 = 0x00400000, - CREATURE_TYPEFLAGS_UNK23 = 0x00800000, // ? First seen in 3.2.2. Related to banner/backpack of creature/companion? - CREATURE_TYPEFLAGS_UNK24 = 0x01000000, - CREATURE_TYPEFLAGS_UNK25 = 0x02000000, - CREATURE_TYPEFLAGS_PARTY_MEMBER = 0x04000000, //! Creature can be targeted by spells that require target to be in caster's party/raid - CREATURE_TYPEFLAGS_UNK27 = 0x08000000, - CREATURE_TYPEFLAGS_UNK28 = 0x10000000, - CREATURE_TYPEFLAGS_UNK29 = 0x20000000, - CREATURE_TYPEFLAGS_UNK30 = 0x40000000, - CREATURE_TYPEFLAGS_UNK31 = 0x80000000 + CREATURE_TYPEFLAGS_TAMEABLE = 0x00000001, // Tameable by any hunter + CREATURE_TYPEFLAGS_GHOST = 0x00000002, // Creature are also visible for not alive player. Allow gossip interaction if npcflag allow? + CREATURE_TYPEFLAGS_BOSS = 0x00000004, + CREATURE_TYPEFLAGS_DO_NOT_PLAY_WOUND_PARRY_ANIMATION = 0x00000008, + CREATURE_TYPEFLAGS_HIDE_FACTION_TOOLTIP = 0x00000010, + CREATURE_TYPEFLAGS_UNK5 = 0x00000020, + CREATURE_TYPEFLAGS_SPELL_ATTACKABLE = 0x00000040, + CREATURE_TYPEFLAGS_DEAD_INTERACT = 0x00000080, // Player can interact with the creature if its dead (not player dead) + CREATURE_TYPEFLAGS_HERBLOOT = 0x00000100, // Can be looted by herbalist + CREATURE_TYPEFLAGS_MININGLOOT = 0x00000200, // Can be looted by miner + CREATURE_TYPEFLAGS_DONT_LOG_DEATH = 0x00000400, // Death event will not show up in combat log + CREATURE_TYPEFLAGS_MOUNTED_COMBAT = 0x00000800, // Creature can remain mounted when entering combat + CREATURE_TYPEFLAGS_CAN_ASSIST = 0x00001000, + CREATURE_TYPEFLAGS_IS_PET_BAR_USED = 0x00002000, + CREATURE_TYPEFLAGS_MASK_UID = 0x00004000, + CREATURE_TYPEFLAGS_ENGINEERLOOT = 0x00008000, // Can be looted by engineer + CREATURE_TYPEFLAGS_EXOTIC = 0x00010000, // Can be tamed by hunter as exotic pet + CREATURE_TYPEFLAGS_USE_DEFAULT_COLLISION_BOX = 0x00020000, + CREATURE_TYPEFLAGS_IS_SIEGE_WEAPON = 0x00040000, + CREATURE_TYPEFLAGS_PROJECTILE_COLLISION = 0x00080000, // Projectiles can collide with this creature - interacts with TARGET_DEST_TRAJ + CREATURE_TYPEFLAGS_HIDE_NAMEPLATE = 0x00100000, + CREATURE_TYPEFLAGS_DO_NOT_PLAY_MOUNTED_ANIMATIONS = 0x00200000, + CREATURE_TYPEFLAGS_IS_LINK_ALL = 0x00400000, + CREATURE_TYPEFLAGS_INTERACT_ONLY_WITH_CREATOR = 0x00800000, + CREATURE_TYPEFLAGS_DO_NOT_PLAY_UNIT_EVENT_SOUNDS = 0x01000000, + CREATURE_TYPEFLAGS_HAS_NO_SHADOW_BLOB = 0x02000000, + CREATURE_TYPEFLAGS_TREAT_AS_RAID_UNIT = 0x04000000, //! Creature can be targeted by spells that require target to be in caster's party/raid + CREATURE_TYPEFLAGS_FORCE_GOSSIP = 0x08000000, + CREATURE_TYPEFLAGS_DO_NOT_SHEATHE = 0x10000000, + CREATURE_TYPEFLAGS_DO_NOT_TARGET_ON_INTERACTION = 0x20000000, + CREATURE_TYPEFLAGS_DO_NOT_RENDER_OBJECT_NAME = 0x40000000, + CREATURE_TYPEFLAGS_UNIT_IS_QUEST_BOSS = 0x80000000 // Not verified }; enum CreatureTypeFlags2 { - CREATURE_TYPEFLAGS_2_UNK1 = 0x00000001, - CREATURE_TYPEFLAGS_2_UNK2 = 0x00000002, - CREATURE_TYPEFLAGS_2_UNK3 = 0x00000004, - CREATURE_TYPEFLAGS_2_UNK4 = 0x00000008, - CREATURE_TYPEFLAGS_2_UNK5 = 0x00000010, - CREATURE_TYPEFLAGS_2_UNK6 = 0x00000020, - CREATURE_TYPEFLAGS_2_UNK7 = 0x00000040, - CREATURE_TYPEFLAGS_2_UNK8 = 0x00000080 + CREATURE_TYPEFLAGS_2_UNK1 = 0x00000001, + CREATURE_TYPEFLAGS_2_UNK2 = 0x00000002, + CREATURE_TYPEFLAGS_2_UNK3 = 0x00000004, + CREATURE_TYPEFLAGS_2_UNK4 = 0x00000008, + CREATURE_TYPEFLAGS_2_UNK5 = 0x00000010, + CREATURE_TYPEFLAGS_2_UNK6 = 0x00000020, + CREATURE_TYPEFLAGS_2_UNK7 = 0x00000040, + CREATURE_TYPEFLAGS_2_UNK8 = 0x00000080 }; enum CreatureEliteType @@ -3047,10 +3481,11 @@ enum CreatureEliteType CREATURE_ELITE_RAREELITE = 2, CREATURE_ELITE_WORLDBOSS = 3, CREATURE_ELITE_RARE = 4, - CREATURE_UNKNOWN = 5 // found in 2.2.3 for 2 mobs + CREATURE_UNKNOWN = 5, // found in 2.2.3 for 2 mobs + CREATURE_WEAK = 6 }; -// values based at Holidays.dbc +// Holidays.dbc (6.0) enum HolidayIds { HOLIDAY_NONE = 0, @@ -3087,14 +3522,30 @@ enum HolidayIds HOLIDAY_RATED_BG_25_VS_25 = 443, HOLIDAY_ANNIVERSARY_7_YEARS = 467, HOLIDAY_DARKMOON_FAIRE_TEROKKAR = 479, - HOLIDAY_ANNIVERSARY_8_YEARS = 484 + HOLIDAY_ANNIVERSARY_8_YEARS = 484, + HOLIDAY_CALL_TO_ARMS_SM = 488, + HOLIDAY_CALL_TO_ARMS_TK = 489, + //HOLIDAY_CALL_TO_ARMS_AV = 490, + //HOLIDAY_CALL_TO_ARMS_AB = 491, + //HOLIDAY_CALL_TO_ARMS_EY = 492, + //HOLIDAY_CALL_TO_ARMS_AV = 493, + //HOLIDAY_CALL_TO_ARMS_SM = 494, + //HOLIDAY_CALL_TO_ARMS_SA = 495, + //HOLIDAY_CALL_TO_ARMS_TK = 496, + //HOLIDAY_CALL_TO_ARMS_BFG = 497, + //HOLIDAY_CALL_TO_ARMS_TP = 498, + //HOLIDAY_CALL_TO_ARMS_WS = 499, + HOLIDAY_ANNIVERSARY_9_YEARS = 509, + HOLIDAY_ANNIVERSARY_10_YEARS = 514, + HOLIDAY_CALL_TO_ARMS_DG = 515, + //HOLIDAY_CALL_TO_ARMS_DG = 516 }; -// values based at QuestInfo.dbc +// QuestInfo.dbc (6.0.2.18988) enum QuestTypes { - QUEST_TYPE_ELITE = 1, - QUEST_TYPE_LIFE = 21, + QUEST_TYPE_ELITE = 1, // Group + QUEST_TYPE_LIFE = 21, // Class QUEST_TYPE_PVP = 41, QUEST_TYPE_RAID = 62, QUEST_TYPE_DUNGEON = 81, @@ -3103,58 +3554,75 @@ enum QuestTypes QUEST_TYPE_ESCORT = 84, QUEST_TYPE_HEROIC = 85, QUEST_TYPE_RAID_10 = 88, - QUEST_TYPE_RAID_25 = 89 + QUEST_TYPE_RAID_25 = 89, + QUEST_TYPE_SCENARIO = 98, + QUEST_TYPE_ACCOUNT = 102, + QUEST_TYPE_SIDE_QUEST = 104 }; -// values based at QuestSort.dbc +// QuestSort.dbc (6.0) enum QuestSort { - QUEST_SORT_EPIC = 1, - QUEST_SORT_WAILING_CAVERNS_OLD = 21, - QUEST_SORT_SEASONAL = 22, - QUEST_SORT_UNDERCITY_OLD = 23, - QUEST_SORT_HERBALISM = 24, - QUEST_SORT_BATTLEGROUNDS = 25, - QUEST_SORT_ULDAMN_OLD = 41, - QUEST_SORT_WARLOCK = 61, - QUEST_SORT_WARRIOR = 81, - QUEST_SORT_SHAMAN = 82, - QUEST_SORT_FISHING = 101, - QUEST_SORT_BLACKSMITHING = 121, - QUEST_SORT_PALADIN = 141, - QUEST_SORT_MAGE = 161, - QUEST_SORT_ROGUE = 162, - QUEST_SORT_ALCHEMY = 181, - QUEST_SORT_LEATHERWORKING = 182, - QUEST_SORT_ENGINEERING = 201, - QUEST_SORT_TREASURE_MAP = 221, - QUEST_SORT_SUNKEN_TEMPLE_OLD = 241, - QUEST_SORT_HUNTER = 261, - QUEST_SORT_PRIEST = 262, - QUEST_SORT_DRUID = 263, - QUEST_SORT_TAILORING = 264, - QUEST_SORT_SPECIAL = 284, - QUEST_SORT_COOKING = 304, - QUEST_SORT_FIRST_AID = 324, - QUEST_SORT_LEGENDARY = 344, - QUEST_SORT_DARKMOON_FAIRE = 364, - QUEST_SORT_AHN_QIRAJ_WAR = 365, - QUEST_SORT_LUNAR_FESTIVAL = 366, - QUEST_SORT_REPUTATION = 367, - QUEST_SORT_INVASION = 368, - QUEST_SORT_MIDSUMMER = 369, - QUEST_SORT_BREWFEST = 370, - QUEST_SORT_INSCRIPTION = 371, - QUEST_SORT_DEATH_KNIGHT = 372, - QUEST_SORT_JEWELCRAFTING = 373, - QUEST_SORT_NOBLEGARDEN = 374, - QUEST_SORT_PILGRIMS_BOUNTY = 375, - QUEST_SORT_LOVE_IS_IN_THE_AIR = 376, - QUEST_SORT_ARCHAEOLOGY = 377, - QUEST_SORT_CHILDRENS_WEEK = 378, - QUEST_SORT_FIRELANDS_INVASION = 379, - QUEST_SORT_ZANDALARI = 380, - QUEST_SORT_ELEMENTAL_BONDS = 381 + QUEST_SORT_EPIC = 1, + QUEST_SORT_HALLOWS_END = 21, + QUEST_SORT_SEASONAL = 22, + QUEST_SORT_CATACLYSM = 23, + QUEST_SORT_HERBALISM = 24, + QUEST_SORT_BATTLEGROUNDS = 25, + QUEST_SORT_DAY_OF_THE_DEAD = 41, + QUEST_SORT_WARLOCK = 61, + QUEST_SORT_WARRIOR = 81, + QUEST_SORT_SHAMAN = 82, + QUEST_SORT_FISHING = 101, + QUEST_SORT_BLACKSMITHING = 121, + QUEST_SORT_PALADIN = 141, + QUEST_SORT_MAGE = 161, + QUEST_SORT_ROGUE = 162, + QUEST_SORT_ALCHEMY = 181, + QUEST_SORT_LEATHERWORKING = 182, + QUEST_SORT_ENGINEERING = 201, + QUEST_SORT_TREASURE_MAP = 221, + QUEST_SORT_TOURNAMENT = 241, + QUEST_SORT_HUNTER = 261, + QUEST_SORT_PRIEST = 262, + QUEST_SORT_DRUID = 263, + QUEST_SORT_TAILORING = 264, + QUEST_SORT_SPECIAL = 284, + QUEST_SORT_COOKING = 304, + QUEST_SORT_FIRST_AID = 324, + QUEST_SORT_LEGENDARY = 344, + QUEST_SORT_DARKMOON_FAIRE = 364, + QUEST_SORT_AHN_QIRAJ_WAR = 365, + QUEST_SORT_LUNAR_FESTIVAL = 366, + QUEST_SORT_REPUTATION = 367, + QUEST_SORT_INVASION = 368, + QUEST_SORT_MIDSUMMER = 369, + QUEST_SORT_BREWFEST = 370, + QUEST_SORT_INSCRIPTION = 371, + QUEST_SORT_DEATH_KNIGHT = 372, + QUEST_SORT_JEWELCRAFTING = 373, + QUEST_SORT_NOBLEGARDEN = 374, + QUEST_SORT_PILGRIMS_BOUNTY = 375, + QUEST_SORT_LOVE_IS_IN_THE_AIR = 376, + QUEST_SORT_ARCHAEOLOGY = 377, + QUEST_SORT_CHILDRENS_WEEK = 378, + QUEST_SORT_FIRELANDS_INVASION = 379, + QUEST_SORT_THE_ZANDALARI = 380, + QUEST_SORT_ELEMENTAL_BONDS = 381, + QUEST_SORT_PANDAREN_BREWMASTER = 391, + QUEST_SORT_SCENARIO = 392, + QUEST_SORT_BATTLE_PETS = 394, + QUEST_SORT_MONK = 395, + QUEST_SORT_LANDFALL = 396, + QUEST_SORT_PANDAREN_CAMPAIGN = 397, + QUEST_SORT_RIDING = 398, + QUEST_SORT_BRAWLERS_GUILD = 399, + QUEST_SORT_PROVING_GROUNDS = 400, + QUEST_SORT_GARRISON_CAMPAIGN = 401, + QUEST_SORT_ASSAULT_ON_THE_DARK_PORTAL = 402, + QUEST_SORT_GARRISON_SUPPORT = 403, + QUEST_SORT_LOGGING = 404, + QUEST_SORT_PICKPOCKETING = 405 }; inline uint8 ClassByQuestSort(int32 QuestSort) @@ -3175,187 +3643,233 @@ inline uint8 ClassByQuestSort(int32 QuestSort) return 0; } +// SkillLine.dbc (6.0) enum SkillType { - SKILL_NONE = 0, - - SKILL_FROST = 6, - SKILL_FIRE = 8, - SKILL_ARMS = 26, - SKILL_COMBAT = 38, - SKILL_SUBTLETY = 39, - SKILL_SWORDS = 43, - SKILL_AXES = 44, - SKILL_BOWS = 45, - SKILL_GUNS = 46, - SKILL_BEAST_MASTERY = 50, - SKILL_SURVIVAL = 51, - SKILL_MACES = 54, - SKILL_2H_SWORDS = 55, - SKILL_HOLY = 56, - SKILL_SHADOW = 78, - SKILL_DEFENSE = 95, - SKILL_LANG_COMMON = 98, - SKILL_RACIAL_DWARVEN = 101, - SKILL_LANG_ORCISH = 109, - SKILL_LANG_DWARVEN = 111, - SKILL_LANG_DARNASSIAN = 113, - SKILL_LANG_TAURAHE = 115, - SKILL_DUAL_WIELD = 118, - SKILL_RACIAL_TAUREN = 124, - SKILL_ORC_RACIAL = 125, - SKILL_RACIAL_NIGHT_ELF = 126, - SKILL_FIRST_AID = 129, - SKILL_FERAL_COMBAT = 134, - SKILL_STAVES = 136, - SKILL_LANG_THALASSIAN = 137, - SKILL_LANG_DRACONIC = 138, - SKILL_LANG_DEMON_TONGUE = 139, - SKILL_LANG_TITAN = 140, - SKILL_LANG_OLD_TONGUE = 141, - SKILL_SURVIVAL2 = 142, - SKILL_RIDING_HORSE = 148, - SKILL_RIDING_WOLF = 149, - SKILL_RIDING_TIGER = 150, - SKILL_RIDING_RAM = 152, - SKILL_SWIMING = 155, - SKILL_2H_MACES = 160, - SKILL_UNARMED = 162, - SKILL_MARKSMANSHIP = 163, - SKILL_BLACKSMITHING = 164, - SKILL_LEATHERWORKING = 165, - SKILL_ALCHEMY = 171, - SKILL_2H_AXES = 172, - SKILL_DAGGERS = 173, - SKILL_THROWN = 176, - SKILL_HERBALISM = 182, - SKILL_GENERIC_DND = 183, - SKILL_RETRIBUTION = 184, - SKILL_COOKING = 185, - SKILL_MINING = 186, - SKILL_PET_IMP = 188, - SKILL_PET_FELHUNTER = 189, - SKILL_TAILORING = 197, - SKILL_ENGINEERING = 202, - SKILL_PET_SPIDER = 203, - SKILL_PET_VOIDWALKER = 204, - SKILL_PET_SUCCUBUS = 205, - SKILL_PET_INFERNAL = 206, - SKILL_PET_DOOMGUARD = 207, - SKILL_PET_WOLF = 208, - SKILL_PET_CAT = 209, - SKILL_PET_BEAR = 210, - SKILL_PET_BOAR = 211, - SKILL_PET_CROCILISK = 212, - SKILL_PET_CARRION_BIRD = 213, - SKILL_PET_CRAB = 214, - SKILL_PET_GORILLA = 215, - SKILL_PET_RAPTOR = 217, - SKILL_PET_TALLSTRIDER = 218, - SKILL_RACIAL_UNDED = 220, - SKILL_CROSSBOWS = 226, - SKILL_WANDS = 228, - SKILL_POLEARMS = 229, - SKILL_PET_SCORPID = 236, - SKILL_ARCANE = 237, - SKILL_PET_TURTLE = 251, - SKILL_ASSASSINATION = 253, - SKILL_FURY = 256, - SKILL_PROTECTION = 257, - SKILL_PROTECTION2 = 267, - SKILL_PET_TALENTS = 270, - SKILL_PLATE_MAIL = 293, - SKILL_LANG_GNOMISH = 313, - SKILL_LANG_TROLL = 315, - SKILL_ENCHANTING = 333, - SKILL_DEMONOLOGY = 354, - SKILL_AFFLICTION = 355, - SKILL_FISHING = 356, - SKILL_ENHANCEMENT = 373, - SKILL_RESTORATION = 374, - SKILL_ELEMENTAL_COMBAT = 375, - SKILL_SKINNING = 393, - SKILL_MAIL = 413, - SKILL_LEATHER = 414, - SKILL_CLOTH = 415, - SKILL_SHIELD = 433, - SKILL_FIST_WEAPONS = 473, - SKILL_RIDING_RAPTOR = 533, - SKILL_RIDING_MECHANOSTRIDER = 553, - SKILL_RIDING_UNDEAD_HORSE = 554, - SKILL_RESTORATION2 = 573, - SKILL_BALANCE = 574, - SKILL_DESTRUCTION = 593, - SKILL_HOLY2 = 594, - SKILL_DISCIPLINE = 613, - SKILL_LOCKPICKING = 633, - SKILL_PET_BAT = 653, - SKILL_PET_HYENA = 654, - SKILL_PET_BIRD_OF_PREY = 655, - SKILL_PET_WIND_SERPENT = 656, - SKILL_LANG_GUTTERSPEAK = 673, - SKILL_RIDING_KODO = 713, - SKILL_RACIAL_TROLL = 733, - SKILL_RACIAL_GNOME = 753, - SKILL_RACIAL_HUMAN = 754, - SKILL_JEWELCRAFTING = 755, - SKILL_RACIAL_BLOODELF = 756, - SKILL_PET_EVENT_RC = 758, // SkillCategory = -1 - SKILL_LANG_DRAENEI = 759, - SKILL_RACIAL_DRAENEI = 760, - SKILL_PET_FELGUARD = 761, - SKILL_RIDING = 762, - SKILL_PET_DRAGONHAWK = 763, - SKILL_PET_NETHER_RAY = 764, - SKILL_PET_SPOREBAT = 765, - SKILL_PET_WARP_STALKER = 766, - SKILL_PET_RAVAGER = 767, - SKILL_PET_SERPENT = 768, - SKILL_INTERNAL = 769, - SKILL_DK_BLOOD = 770, - SKILL_DK_FROST = 771, - SKILL_DK_UNHOLY = 772, - SKILL_INSCRIPTION = 773, - SKILL_PET_MOTH = 775, - SKILL_RUNEFORGING = 776, - SKILL_MOUNTS = 777, - SKILL_COMPANIONS = 778, - SKILL_PET_EXOTIC_CHIMAERA = 780, - SKILL_PET_EXOTIC_DEVILSAUR = 781, - SKILL_PET_GHOUL = 782, - SKILL_PET_EXOTIC_SILITHID = 783, - SKILL_PET_EXOTIC_WORM = 784, - SKILL_PET_WASP = 785, - SKILL_PET_EXOTIC_RHINO = 786, - SKILL_PET_EXOTIC_CORE_HOUND = 787, - SKILL_PET_EXOTIC_SPIRIT_BEAST = 788, - SKILL_RACIAL_WORGEN = 789, - SKILL_RACIAL_GOBLIN = 790, - SKILL_LANG_WORGEN = 791, - SKILL_LANG_GOBLIN = 792, - SKILL_ARCHAEOLOGY = 794, - SKILL_GENERAL_HUNTER = 795, - SKILL_GENERAL_DEATH_KNIGHT = 796, - SKILL_GENERAL_ROGUE = 797, - SKILL_GENERAL_DRUID = 798, - SKILL_GENERAL_MAGE = 799, - SKILL_GENERAL_PALADIN = 800, - SKILL_GENERAL_SHAMAN = 801, - SKILL_GENERAL_WARLOCK = 802, - SKILL_GENERAL_WARRIOR = 803, - SKILL_GENERAL_PRIEST = 804, - SKILL_PET_WATER_ELEMENTAL = 805, - SKILL_PET_FOX = 808, - SKILL_ALL_GLYPHS = 810, - SKILL_PET_DOG = 811, - SKILL_PET_MONKEY = 815, - SKILL_PET_SHALE_SPIDER = 817, - SKILL_PET_BEETLE = 818, - SKILL_ALL_GUILD_PERKS = 821, - SKILL_PET_HYDRA = 824 + SKILL_NONE = 0, + + SKILL_FROST = 6, + SKILL_FIRE = 8, + SKILL_ARMS = 26, + SKILL_COMBAT = 38, + SKILL_SUBTLETY = 39, + SKILL_SWORDS = 43, + SKILL_AXES = 44, + SKILL_BOWS = 45, + SKILL_GUNS = 46, + SKILL_BEAST_MASTERY = 50, + SKILL_SURVIVAL = 51, + SKILL_MACES = 54, + SKILL_2H_SWORDS = 55, + SKILL_HOLY = 56, + SKILL_SHADOW = 78, + SKILL_DEFENSE = 95, + SKILL_LANG_COMMON = 98, + SKILL_RACIAL_DWARVEN = 101, + SKILL_LANG_ORCISH = 109, + SKILL_LANG_DWARVEN = 111, + SKILL_LANG_DARNASSIAN = 113, + SKILL_LANG_TAURAHE = 115, + SKILL_DUAL_WIELD = 118, + SKILL_RACIAL_TAUREN = 124, + SKILL_ORC_RACIAL = 125, + SKILL_RACIAL_NIGHT_ELF = 126, + SKILL_FIRST_AID = 129, + SKILL_FERAL_COMBAT = 134, + SKILL_STAVES = 136, + SKILL_LANG_THALASSIAN = 137, + SKILL_LANG_DRACONIC = 138, + SKILL_LANG_DEMON_TONGUE = 139, + SKILL_LANG_TITAN = 140, + SKILL_LANG_OLD_TONGUE = 141, + SKILL_SURVIVAL2 = 142, + SKILL_RIDING_HORSE = 148, + SKILL_RIDING_WOLF = 149, + SKILL_RIDING_TIGER = 150, + SKILL_RIDING_RAM = 152, + SKILL_SWIMING = 155, + SKILL_2H_MACES = 160, + SKILL_UNARMED = 162, + SKILL_MARKSMANSHIP = 163, + SKILL_BLACKSMITHING = 164, + SKILL_LEATHERWORKING = 165, + SKILL_ALCHEMY = 171, + SKILL_2H_AXES = 172, + SKILL_DAGGERS = 173, + SKILL_THROWN = 176, + SKILL_HERBALISM = 182, + SKILL_GENERIC_DND = 183, + SKILL_RETRIBUTION = 184, + SKILL_COOKING = 185, + SKILL_MINING = 186, + SKILL_PET_IMP = 188, + SKILL_PET_FELHUNTER = 189, + SKILL_TAILORING = 197, + SKILL_ENGINEERING = 202, + SKILL_PET_SPIDER = 203, + SKILL_PET_VOIDWALKER = 204, + SKILL_PET_SUCCUBUS = 205, + SKILL_PET_INFERNAL = 206, + SKILL_PET_DOOMGUARD = 207, + SKILL_PET_WOLF = 208, + SKILL_PET_CAT = 209, + SKILL_PET_BEAR = 210, + SKILL_PET_BOAR = 211, + SKILL_PET_CROCILISK = 212, + SKILL_PET_CARRION_BIRD = 213, + SKILL_PET_CRAB = 214, + SKILL_PET_GORILLA = 215, + SKILL_PET_RAPTOR = 217, + SKILL_PET_TALLSTRIDER = 218, + SKILL_RACIAL_UNDED = 220, + SKILL_CROSSBOWS = 226, + SKILL_WANDS = 228, + SKILL_POLEARMS = 229, + SKILL_PET_SCORPID = 236, + SKILL_ARCANE = 237, + SKILL_PET_TURTLE = 251, + SKILL_ASSASSINATION = 253, + SKILL_FURY = 256, + SKILL_PROTECTION = 257, + SKILL_PROTECTION2 = 267, + SKILL_PET_TALENTS = 270, + SKILL_PLATE_MAIL = 293, + SKILL_LANG_GNOMISH = 313, + SKILL_LANG_TROLL = 315, + SKILL_ENCHANTING = 333, + SKILL_DEMONOLOGY = 354, + SKILL_AFFLICTION = 355, + SKILL_FISHING = 356, + SKILL_ENHANCEMENT = 373, + SKILL_RESTORATION = 374, + SKILL_ELEMENTAL_COMBAT = 375, + SKILL_SKINNING = 393, + SKILL_MAIL = 413, + SKILL_LEATHER = 414, + SKILL_CLOTH = 415, + SKILL_SHIELD = 433, + SKILL_FIST_WEAPONS = 473, + SKILL_RIDING_RAPTOR = 533, + SKILL_RIDING_MECHANOSTRIDER = 553, + SKILL_RIDING_UNDEAD_HORSE = 554, + SKILL_RESTORATION2 = 573, + SKILL_BALANCE = 574, + SKILL_DESTRUCTION = 593, + SKILL_HOLY2 = 594, + SKILL_DISCIPLINE = 613, + SKILL_LOCKPICKING = 633, + SKILL_PET_BAT = 653, + SKILL_PET_HYENA = 654, + SKILL_PET_BIRD_OF_PREY = 655, + SKILL_PET_WIND_SERPENT = 656, + SKILL_LANG_GUTTERSPEAK = 673, + SKILL_RIDING_KODO = 713, + SKILL_RACIAL_TROLL = 733, + SKILL_RACIAL_GNOME = 753, + SKILL_RACIAL_HUMAN = 754, + SKILL_JEWELCRAFTING = 755, + SKILL_RACIAL_BLOODELF = 756, + SKILL_PET_EVENT_RC = 758, // SkillCategory = -1 + SKILL_LANG_DRAENEI = 759, + SKILL_RACIAL_DRAENEI = 760, + SKILL_PET_FELGUARD = 761, + SKILL_RIDING = 762, + SKILL_PET_DRAGONHAWK = 763, + SKILL_PET_NETHER_RAY = 764, + SKILL_PET_SPOREBAT = 765, + SKILL_PET_WARP_STALKER = 766, + SKILL_PET_RAVAGER = 767, + SKILL_PET_SERPENT = 768, + SKILL_INTERNAL = 769, + SKILL_DK_BLOOD = 770, + SKILL_DK_FROST = 771, + SKILL_DK_UNHOLY = 772, + SKILL_INSCRIPTION = 773, + SKILL_PET_MOTH = 775, + SKILL_RUNEFORGING = 776, + SKILL_MOUNTS = 777, + SKILL_COMPANIONS = 778, + SKILL_PET_EXOTIC_CHIMAERA = 780, + SKILL_PET_EXOTIC_DEVILSAUR = 781, + SKILL_PET_GHOUL = 782, + SKILL_PET_EXOTIC_SILITHID = 783, + SKILL_PET_EXOTIC_WORM = 784, + SKILL_PET_WASP = 785, + SKILL_PET_EXOTIC_RHINO = 786, + SKILL_PET_EXOTIC_CORE_HOUND = 787, + SKILL_PET_EXOTIC_SPIRIT_BEAST = 788, + SKILL_RACIAL_WORGEN = 789, + SKILL_RACIAL_GOBLIN = 790, + SKILL_LANG_WORGEN = 791, + SKILL_LANG_GOBLIN = 792, + SKILL_ARCHAEOLOGY = 794, + SKILL_GENERAL_HUNTER = 795, + SKILL_GENERAL_DEATH_KNIGHT = 796, + SKILL_GENERAL_ROGUE = 797, + SKILL_GENERAL_DRUID = 798, + SKILL_GENERAL_MAGE = 799, + SKILL_GENERAL_PALADIN = 800, + SKILL_GENERAL_SHAMAN = 801, + SKILL_GENERAL_WARLOCK = 802, + SKILL_GENERAL_WARRIOR = 803, + SKILL_GENERAL_PRIEST = 804, + SKILL_PET_WATER_ELEMENTAL = 805, + SKILL_PET_FOX = 808, + SKILL_ALL_GLYPHS = 810, + SKILL_PET_DOG = 811, + SKILL_PET_MONKEY = 815, + SKILL_PET_SHALE_SPIDER = 817, + SKILL_PET_BEETLE = 818, + SKILL_ALL_GUILD_PERKS = 821, + SKILL_PET_HYDRA = 824, + SKILL_MONK = 829, + SKILL_WARRIOR = 840, + SKILL_WARLOCK = 849, + SKILL_RACIAL_PANDAREN = 899, + SKILL_MAGE = 904, + SKILL_LANG_PANDAREN_NEUTRAL = 905, + SKILL_LANG_PANDAREN_ALLIANCE = 906, + SKILL_LANG_PANDAREN_HORDE = 907, + SKILL_ROGUE = 921, + SKILL_SHAMAN = 924, + SKILL_FEL_IMP = 927, + SKILL_VOIDLORD = 928, + SKILL_SHIVARRA = 929, + SKILL_OBSERVER = 930, + SKILL_WRATHGUARD = 931, + SKILL_ALL_SPECIALIZATIONS = 934, + SKILL_RUNEFORGING_2 = 960, + SKILL_PET_PRIMAL_FIRE_ELEMENTAL = 962, + SKILL_PET_PRIMAL_EARTH_ELEMENTAL = 963, + SKILL_WAY_OF_THE_GRILL = 975, + SKILL_WAY_OF_THE_WOK = 976, + SKILL_WAY_OF_THE_POT = 977, + SKILL_WAY_OF_THE_STEAMER = 978, + SKILL_WAY_OF_THE_OVEN = 979, + SKILL_WAY_OF_THE_BREW = 980, + SKILL_APPRENTICE_COOKING = 981, + SKILL_JOURNEYMAN_COOKBOOK = 982, + SKILL_PORCUPINE = 983, + SKILL_CRANE = 984, + SKILL_WATER_STRIDER = 985, + SKILL_PET_EXOTIC_QUILEN = 986, + SKILL_PET_GOAT = 987, + SKILL_BASILISK = 988, + SKILL_NO_PLAYERS = 999, + SKILL_DIREHORN = 1305, + SKILL_PET_PRIMAL_STORM_ELEMENTAL = 1748, + SKILL_PET_WATER_MINOR_TALENT_VERSION = 1777, + SKILL_PET_EXOTIC_HOOK_WASP = 1818, + SKILL_PET_RIVERBEAST = 1819, + SKILL_UNUSED = 1830, + SKILL_LOGGING = 1945, + SKILL_PET_TERRORGUARD = 1981, + SKILL_PET_ABYSSAL = 1982, + SKILL_PET_STAG = 1993, + SKILL_TRADING_POST = 2000 }; -#define MAX_SKILL_TYPE 825 +#define MAX_SKILL_TYPE 2000 inline SkillType SkillByLockType(LockType locktype) { @@ -3404,6 +3918,7 @@ enum SkillCategory SKILL_CATEGORY_GENERIC = 12 }; +// TotemCategory.dbc (6.0.2.18988) enum TotemCategory { TC_SKINNING_SKIFE_OLD = 1, @@ -3440,6 +3955,9 @@ enum TotemCategory TC_RUNED_TITANIUM_ROD = 190, TC_RUNED_ELEMENTIUM_ROD = 209, TC_HIGH_POWERED_BOLT_GUN = 210, + TC_RUNED_COPPER_ROD = 230, + TC_JEWELERS_KIT = 238, + TC_ULTIMATE_GNOMISH_ARMY_KNIFE = 250 }; enum UnitDynFlags @@ -3805,7 +4323,7 @@ enum BattlegroundTeamId #define BG_TEAMS_COUNT 2 -// indexes of BattlemasterList.dbc +// indexes of BattlemasterList.dbc (6.0) enum BattlegroundTypeId { BATTLEGROUND_TYPE_NONE = 0, // None @@ -3830,9 +4348,16 @@ enum BattlegroundTypeId // 441 = "Icecrown Citadel" // 443 = "The Ruby Sanctum" // 656 = "Rated Eye of the Storm" + BATTLEGROUND_TK = 699, // Temple of Kotmogu + // 706 = "CTF3" + BATTLEGROUND_SM = 708, // Silvershard Mines + BATTLEGROUND_TVA = 719, // Tol'Viron Arena + BATTLEGROUND_DG = 754, // Deepwind Gorge + BATTLEGROUND_TTP = 757, // The Tiger's Peak + BATTLEGROUND_SS_VS_TM = 789 // Southshore vs. Tarren Mill }; -#define MAX_BATTLEGROUND_TYPE_ID 121 +#define MAX_BATTLEGROUND_TYPE_ID 758 enum MailResponseType { diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 6f800c4ed13..e3c06da3874 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4851,7 +4851,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) Map* cMap = m_caster->GetMap(); // if gameobject is summoning object, it should be spawned right on caster's position - if (goinfo->type == GAMEOBJECT_TYPE_SUMMONING_RITUAL) + if (goinfo->type == GAMEOBJECT_TYPE_RITUAL) m_caster->GetPosition(fx, fy, fz); GameObject* pGameObj = new GameObject; @@ -4889,7 +4889,7 @@ void Spell::EffectTransmitted(SpellEffIndex effIndex) duration = duration - lastSec*IN_MILLISECONDS + FISHING_BOBBER_READY_TIME*IN_MILLISECONDS; break; } - case GAMEOBJECT_TYPE_SUMMONING_RITUAL: + case GAMEOBJECT_TYPE_RITUAL: { if (m_caster->GetTypeId() == TYPEID_PLAYER) { diff --git a/src/tools/map_extractor/CMakeLists.txt b/src/tools/map_extractor/CMakeLists.txt index 664b80c292d..3d6849eee08 100644 --- a/src/tools/map_extractor/CMakeLists.txt +++ b/src/tools/map_extractor/CMakeLists.txt @@ -13,7 +13,7 @@ file(GLOB_RECURSE sources *.cpp *.h) include_directories ( ${CMAKE_SOURCE_DIR}/src/server/shared - ${CMAKE_SOURCE_DIR}/dep/StormLib/src + ${CMAKE_SOURCE_DIR}/dep/CascLib/src ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/loadlib ) @@ -27,10 +27,10 @@ add_executable(mapextractor target_link_libraries(mapextractor ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} - storm + casc ) -add_dependencies(mapextractor storm) +add_dependencies(mapextractor casc) if( UNIX ) install(TARGETS mapextractor DESTINATION bin) diff --git a/src/tools/map_extractor/System.cpp b/src/tools/map_extractor/System.cpp index ab3ebda584d..2bb05445744 100644 --- a/src/tools/map_extractor/System.cpp +++ b/src/tools/map_extractor/System.cpp @@ -32,7 +32,8 @@ #define ERROR_PATH_NOT_FOUND ERROR_FILE_NOT_FOUND #endif -#include "StormLib.h" +#include "DBFilesClientList.h" +#include "CascLib.h" #include "dbcfile.h" #include "adt.h" @@ -55,8 +56,7 @@ #define OPEN_FLAGS (O_RDONLY | O_BINARY) #endif -HANDLE WorldMpq = NULL; -HANDLE LocaleMpq = NULL; +HANDLE CascStorage = NULL; typedef struct { @@ -88,53 +88,27 @@ bool CONF_allow_height_limit = true; float CONF_use_minHeight = -500.0f; // This option allow use float to int conversion -bool CONF_allow_float_to_int = true; +bool CONF_allow_float_to_int = false; float CONF_float_to_int8_limit = 2.0f; // Max accuracy = val/256 float CONF_float_to_int16_limit = 2048.0f; // Max accuracy = val/65536 float CONF_flat_height_delta_limit = 0.005f; // If max - min less this value - surface is flat float CONF_flat_liquid_delta_limit = 0.001f; // If max - min less this value - liquid surface is flat -uint32 CONF_TargetBuild = 15595; // 4.3.4.15595 +uint32 CONF_Locale = 0; -// List MPQ for extract maps from -char const* CONF_mpq_list[]= -{ - "world.MPQ", - "art.MPQ", - "world2.MPQ", - "expansion1.MPQ", - "expansion2.MPQ", - "expansion3.MPQ", -}; - -uint32 const Builds[] = {13164, 13205, 13287, 13329, 13596, 13623, 13914, 14007, 14333, 14480, 14545, 15005, 15050, 15211, 15354, 15595, 0}; -#define LAST_DBC_IN_DATA_BUILD 13623 // after this build mpqs with dbc are back to locale folder -#define NEW_BASE_SET_BUILD 15211 - -#define LOCALES_COUNT 15 +#define LOCALES_COUNT 18 char const* Locales[LOCALES_COUNT] = { - "enGB", "enUS", - "deDE", "esES", - "frFR", "koKR", - "zhCN", "zhTW", - "enCN", "enTW", - "esMX", "ruRU", - "ptBR", "ptPT", - "itIT" -}; - -TCHAR const* LocalesT[LOCALES_COUNT] = -{ - _T("enGB"), _T("enUS"), - _T("deDE"), _T("esES"), - _T("frFR"), _T("koKR"), - _T("zhCN"), _T("zhTW"), - _T("enCN"), _T("enTW"), - _T("esMX"), _T("ruRU"), - _T("ptBR"), _T("ptPT"), - _T("itIT"), + "none", "unknown1", + "enUS", "koKR", + "unknown2", "frFR", + "deDE", "zhCN", + "esES", "zhTW", + "enGB", "enCN", + "enTW", "esMX", + "ruRU", "ptBR", + "itIT", "ptPT", }; void CreateDir(std::string const& path) @@ -173,8 +147,7 @@ void Usage(char const* prg) "-o set output path\n"\ "-e extract only MAP(1)/DBC(2) - standard: both(3)\n"\ "-f height stored as int (less map size but lost some accuracy) 1 by default\n"\ - "-b target build (default %u)\n"\ - "Example: %s -f 0 -i \"c:\\games\\game\"", prg, CONF_TargetBuild, prg); + "Example: %s -f 0 -i \"c:\\games\\game\"", prg, prg); exit(1); } @@ -221,9 +194,14 @@ void HandleArgs(int argc, char* arg[]) else Usage(arg[0]); break; - case 'b': + case 'l': if (c + 1 < argc) // all ok - CONF_TargetBuild = atoi(arg[c++ + 1]); + { + for (uint32 i = 0; i < LOCALES_COUNT; ++i) + if (!strcmp(arg[c + 1], Locales[i])) + CONF_Locale = 1 << i; + ++c; + } else Usage(arg[0]); break; @@ -240,15 +218,15 @@ uint32 ReadBuild(int locale) //printf("Read %s file... ", filename.c_str()); HANDLE dbcFile; - if (!SFileOpenFileEx(LocaleMpq, filename.c_str(), SFILE_OPEN_PATCHED_FILE, &dbcFile)) + if (!CascOpenFile(CascStorage, filename.c_str(), CASC_LOCALE_ALL, 0, &dbcFile)) { - printf("Fatal error: Not found %s file!\n", filename.c_str()); - exit(1); + printf("Locale %s not installed.\n", Locales[locale]); + return 0; } char buff[512]; DWORD readBytes = 0; - SFileReadFile(dbcFile, buff, 512, &readBytes, NULL); + CascReadFile(dbcFile, buff, 512, &readBytes); if (!readBytes) { printf("Fatal error: Not found %s file!\n", filename.c_str()); @@ -256,7 +234,7 @@ uint32 ReadBuild(int locale) } std::string text = buff; - SFileCloseFile(dbcFile); + CascCloseFile(dbcFile); size_t pos = text.find("version=\""); size_t pos1 = pos + strlen("version=\""); @@ -284,7 +262,7 @@ uint32 ReadMapDBC() printf("Read Map.dbc file... "); HANDLE dbcFile; - if (!SFileOpenFileEx(LocaleMpq, "DBFilesClient\\Map.dbc", SFILE_OPEN_PATCHED_FILE, &dbcFile)) + if (!CascOpenFile(CascStorage, "DBFilesClient\\Map.dbc", CASC_LOCALE_ALL, 0, &dbcFile)) { printf("Fatal error: Cannot find Map.dbc in archive!\n"); exit(1); @@ -305,7 +283,7 @@ uint32 ReadMapDBC() strcpy(map_ids[x].name, dbc.getRecord(x).getString(1)); } - SFileCloseFile(dbcFile); + CascCloseFile(dbcFile); printf("Done! (%u maps loaded)\n", uint32(map_count)); return map_count; } @@ -314,7 +292,7 @@ void ReadAreaTableDBC() { printf("Read AreaTable.dbc file..."); HANDLE dbcFile; - if (!SFileOpenFileEx(LocaleMpq, "DBFilesClient\\AreaTable.dbc", SFILE_OPEN_PATCHED_FILE, &dbcFile)) + if (!CascOpenFile(CascStorage, "DBFilesClient\\AreaTable.dbc", CASC_LOCALE_ALL, 0, &dbcFile)) { printf("Fatal error: Cannot find AreaTable.dbc in archive!\n"); exit(1); @@ -334,7 +312,7 @@ void ReadAreaTableDBC() for (uint32 x = 0; x < area_count; ++x) areas[dbc.getRecord(x).getUInt(0)] = dbc.getRecord(x).getUInt(3); - SFileCloseFile(dbcFile); + CascCloseFile(dbcFile); printf("Done! (%u areas loaded)\n", uint32(area_count)); } @@ -342,7 +320,7 @@ void ReadLiquidTypeTableDBC() { printf("Read LiquidType.dbc file..."); HANDLE dbcFile; - if (!SFileOpenFileEx(LocaleMpq, "DBFilesClient\\LiquidType.dbc", SFILE_OPEN_PATCHED_FILE, &dbcFile)) + if (!CascOpenFile(CascStorage, "DBFilesClient\\LiquidType.dbc", CASC_LOCALE_ALL, 0, &dbcFile)) { printf("Fatal error: Cannot find LiquidType.dbc in archive!\n"); exit(1); @@ -363,7 +341,7 @@ void ReadLiquidTypeTableDBC() for(uint32 x = 0; x < liqTypeCount; ++x) LiqType[dbc.getRecord(x).getUInt(0)] = dbc.getRecord(x).getUInt(3); - SFileCloseFile(dbcFile); + CascCloseFile(dbcFile); printf("Done! (%u LiqTypes loaded)\n", (uint32)liqTypeCount); } @@ -462,18 +440,15 @@ uint16 liquid_entry[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; uint8 liquid_flags[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; bool liquid_show[ADT_GRID_SIZE][ADT_GRID_SIZE]; float liquid_height[ADT_GRID_SIZE+1][ADT_GRID_SIZE+1]; +uint16 holes[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, uint32 build) { - ADT_file adt; + ChunkedFile adt; - if (!adt.loadFile(WorldMpq, filename)) + if (!adt.loadFile(CascStorage, filename)) return false; - memset(liquid_show, 0, sizeof(liquid_show)); - memset(liquid_flags, 0, sizeof(liquid_flags)); - memset(liquid_entry, 0, sizeof(liquid_entry)); - // Prepare map header map_fileheader map; map.mapMagic = *(uint32 const*)MAP_MAGIC; @@ -481,24 +456,225 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, map.buildMagic = build; // Get area flags data - for (int i = 0; i < ADT_CELLS_PER_GRID; ++i) + memset(area_flags, 0xFF, sizeof(area_flags)); + memset(V9, 0, sizeof(V9)); + memset(V8, 0, sizeof(V8)); + + memset(liquid_show, 0, sizeof(liquid_show)); + memset(liquid_flags, 0, sizeof(liquid_flags)); + memset(liquid_entry, 0, sizeof(liquid_entry)); + + memset(holes, 0, sizeof(holes)); + + bool hasHoles = false; + + for (std::multimap<std::string, FileChunk*>::const_iterator itr = adt.chunks.lower_bound("MCNK"); itr != adt.chunks.upper_bound("MCNK"); ++itr) { - for (int j = 0; j < ADT_CELLS_PER_GRID; ++j) + adt_MCNK* mcnk = itr->second->As<adt_MCNK>(); + + // Area data + if (mcnk->areaid <= maxAreaId && areas[mcnk->areaid] != 0xFFFF) + area_flags[mcnk->iy][mcnk->ix] = areas[mcnk->areaid]; + + // Height + // Height values for triangles stored in order: + // 1 2 3 4 5 6 7 8 9 + // 10 11 12 13 14 15 16 17 + // 18 19 20 21 22 23 24 25 26 + // 27 28 29 30 31 32 33 34 + // . . . . . . . . + // For better get height values merge it to V9 and V8 map + // V9 height map: + // 1 2 3 4 5 6 7 8 9 + // 18 19 20 21 22 23 24 25 26 + // . . . . . . . . + // V8 height map: + // 10 11 12 13 14 15 16 17 + // 27 28 29 30 31 32 33 34 + // . . . . . . . . + + // Set map height as grid height + for (int y = 0; y <= ADT_CELL_SIZE; y++) + { + int cy = mcnk->iy * ADT_CELL_SIZE + y; + for (int x = 0; x <= ADT_CELL_SIZE; x++) + { + int cx = mcnk->ix * ADT_CELL_SIZE + x; + V9[cy][cx] = mcnk->ypos; + } + } + + for (int y = 0; y < ADT_CELL_SIZE; y++) { - adt_MCNK* cell = adt.cells[i][j]; - uint32 areaid = cell->areaid; - if (areaid && areaid <= maxAreaId) + int cy = mcnk->iy * ADT_CELL_SIZE + y; + for (int x = 0; x < ADT_CELL_SIZE; x++) { - if (areas[areaid] != 0xFFFF) + int cx = mcnk->ix * ADT_CELL_SIZE + x; + V8[cy][cx] = mcnk->ypos; + } + } + + // Get custom height + if (FileChunk* chunk = itr->second->GetSubChunk("MCVT")) + { + adt_MCVT* mcvt = chunk->As<adt_MCVT>(); + // get V9 height map + for (int y = 0; y <= ADT_CELL_SIZE; y++) + { + int cy = mcnk->iy * ADT_CELL_SIZE + y; + for (int x = 0; x <= ADT_CELL_SIZE; x++) { - area_flags[i][j] = areas[areaid]; - continue; + int cx = mcnk->ix * ADT_CELL_SIZE + x; + V9[cy][cx] += mcvt->height_map[y*(ADT_CELL_SIZE * 2 + 1) + x]; + } + } + // get V8 height map + for (int y = 0; y < ADT_CELL_SIZE; y++) + { + int cy = mcnk->iy * ADT_CELL_SIZE + y; + for (int x = 0; x < ADT_CELL_SIZE; x++) + { + int cx = mcnk->ix * ADT_CELL_SIZE + x; + V8[cy][cx] += mcvt->height_map[y*(ADT_CELL_SIZE * 2 + 1) + ADT_CELL_SIZE + 1 + x]; + } + } + } + + // Liquid data + if (mcnk->sizeMCLQ > 8) + { + if (FileChunk* chunk = itr->second->GetSubChunk("MCLQ")) + { + adt_MCLQ* liquid = chunk->As<adt_MCLQ>(); + int count = 0; + for (int y = 0; y < ADT_CELL_SIZE; ++y) + { + int cy = mcnk->iy * ADT_CELL_SIZE + y; + for (int x = 0; x < ADT_CELL_SIZE; ++x) + { + int cx = mcnk->ix * ADT_CELL_SIZE + x; + if (liquid->flags[y][x] != 0x0F) + { + liquid_show[cy][cx] = true; + if (liquid->flags[y][x] & (1 << 7)) + liquid_flags[mcnk->iy][mcnk->ix] |= MAP_LIQUID_TYPE_DARK_WATER; + ++count; + } + } + } + + uint32 c_flag = mcnk->flags; + if (c_flag & (1 << 2)) + { + liquid_entry[mcnk->iy][mcnk->ix] = 1; + liquid_flags[mcnk->iy][mcnk->ix] |= MAP_LIQUID_TYPE_WATER; // water + } + if (c_flag & (1 << 3)) + { + liquid_entry[mcnk->iy][mcnk->ix] = 2; + liquid_flags[mcnk->iy][mcnk->ix] |= MAP_LIQUID_TYPE_OCEAN; // ocean } + if (c_flag & (1 << 4)) + { + liquid_entry[mcnk->iy][mcnk->ix] = 3; + liquid_flags[mcnk->iy][mcnk->ix] |= MAP_LIQUID_TYPE_MAGMA; // magma/slime + } + + if (!count && liquid_flags[mcnk->iy][mcnk->ix]) + fprintf(stderr, "Wrong liquid detect in MCLQ chunk"); - printf("File: %s\nCan't find area flag for areaid %u [%d, %d].\n", filename, areaid, cell->ix, cell->iy); + for (int y = 0; y <= ADT_CELL_SIZE; ++y) + { + int cy = mcnk->iy * ADT_CELL_SIZE + y; + for (int x = 0; x <= ADT_CELL_SIZE; ++x) + { + int cx = mcnk->ix * ADT_CELL_SIZE + x; + liquid_height[cy][cx] = liquid->liquid[y][x].height; + } + } + } + } + + // Hole data + if (!(mcnk->flags & 0x10000)) + { + if (uint16 hole = mcnk->holes) + { + holes[mcnk->iy][mcnk->ix] = mcnk->holes; + hasHoles = true; } + } + } + + // Get liquid map for grid (in WOTLK used MH2O chunk) + if (FileChunk* chunk = adt.GetChunk("MH2O")) + { + adt_MH2O* h2o = chunk->As<adt_MH2O>(); + for (int i = 0; i < ADT_CELLS_PER_GRID; i++) + { + for (int j = 0; j < ADT_CELLS_PER_GRID; j++) + { + adt_liquid_header *h = h2o->getLiquidData(i, j); + if (!h) + continue; + + int count = 0; + uint64 show = h2o->getLiquidShowMap(h); + for (int y = 0; y < h->height; y++) + { + int cy = i * ADT_CELL_SIZE + y + h->yOffset; + for (int x = 0; x < h->width; x++) + { + int cx = j * ADT_CELL_SIZE + x + h->xOffset; + if (show & 1) + { + liquid_show[cy][cx] = true; + ++count; + } + show >>= 1; + } + } + + liquid_entry[i][j] = h->liquidType; + switch (LiqType[h->liquidType]) + { + case LIQUID_TYPE_WATER: liquid_flags[i][j] |= MAP_LIQUID_TYPE_WATER; break; + case LIQUID_TYPE_OCEAN: liquid_flags[i][j] |= MAP_LIQUID_TYPE_OCEAN; break; + case LIQUID_TYPE_MAGMA: liquid_flags[i][j] |= MAP_LIQUID_TYPE_MAGMA; break; + case LIQUID_TYPE_SLIME: liquid_flags[i][j] |= MAP_LIQUID_TYPE_SLIME; break; + default: + printf("\nCan't find Liquid type %u for map %s\nchunk %d,%d\n", h->liquidType, filename, i, j); + break; + } + // Dark water detect + if (LiqType[h->liquidType] == LIQUID_TYPE_OCEAN) + { + uint8* lm = h2o->getLiquidLightMap(h); + if (!lm) + liquid_flags[i][j] |= MAP_LIQUID_TYPE_DARK_WATER; + } + + if (!count && liquid_flags[i][j]) + printf("Wrong liquid detect in MH2O chunk"); + + float* height = h2o->getLiquidHeightMap(h); + int pos = 0; + for (int y = 0; y <= h->height; y++) + { + int cy = i * ADT_CELL_SIZE + y + h->yOffset; + for (int x = 0; x <= h->width; x++) + { + int cx = j * ADT_CELL_SIZE + x + h->xOffset; + + if (height) + liquid_height[cy][cx] = height[pos]; + else + liquid_height[cy][cx] = h->heightLevel1; - area_flags[i][j] = 0xffff; + pos++; + } + } + } } } @@ -536,77 +712,6 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, areaHeader.gridArea = (uint16)areaflag; } - // - // Get Height map from grid - // - for (int i=0;i<ADT_CELLS_PER_GRID;i++) - { - for(int j=0;j<ADT_CELLS_PER_GRID;j++) - { - adt_MCNK * cell = adt.cells[i][j]; - if (!cell) - continue; - // Height values for triangles stored in order: - // 1 2 3 4 5 6 7 8 9 - // 10 11 12 13 14 15 16 17 - // 18 19 20 21 22 23 24 25 26 - // 27 28 29 30 31 32 33 34 - // . . . . . . . . - // For better get height values merge it to V9 and V8 map - // V9 height map: - // 1 2 3 4 5 6 7 8 9 - // 18 19 20 21 22 23 24 25 26 - // . . . . . . . . - // V8 height map: - // 10 11 12 13 14 15 16 17 - // 27 28 29 30 31 32 33 34 - // . . . . . . . . - - // Set map height as grid height - for (int y=0; y <= ADT_CELL_SIZE; y++) - { - int cy = i*ADT_CELL_SIZE + y; - for (int x=0; x <= ADT_CELL_SIZE; x++) - { - int cx = j*ADT_CELL_SIZE + x; - V9[cy][cx]=cell->ypos; - } - } - for (int y=0; y < ADT_CELL_SIZE; y++) - { - int cy = i*ADT_CELL_SIZE + y; - for (int x=0; x < ADT_CELL_SIZE; x++) - { - int cx = j*ADT_CELL_SIZE + x; - V8[cy][cx]=cell->ypos; - } - } - // Get custom height - adt_MCVT *v = cell->getMCVT(); - if (!v) - continue; - // get V9 height map - for (int y=0; y <= ADT_CELL_SIZE; y++) - { - int cy = i*ADT_CELL_SIZE + y; - for (int x=0; x <= ADT_CELL_SIZE; x++) - { - int cx = j*ADT_CELL_SIZE + x; - V9[cy][cx]+=v->height_map[y*(ADT_CELL_SIZE*2+1)+x]; - } - } - // get V8 height map - for (int y=0; y < ADT_CELL_SIZE; y++) - { - int cy = i*ADT_CELL_SIZE + y; - for (int x=0; x < ADT_CELL_SIZE; x++) - { - int cx = j*ADT_CELL_SIZE + x; - V8[cy][cx]+=v->height_map[y*(ADT_CELL_SIZE*2+1)+ADT_CELL_SIZE+1+x]; - } - } - } - } //============================================ // Try pack height data //============================================ @@ -709,140 +814,6 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, map.heightMapSize+= sizeof(V9) + sizeof(V8); } - // Get from MCLQ chunk (old) - for (int i = 0; i < ADT_CELLS_PER_GRID; i++) - { - for(int j = 0; j < ADT_CELLS_PER_GRID; j++) - { - adt_MCNK *cell = adt.cells[i][j]; - if (!cell) - continue; - - adt_MCLQ *liquid = cell->getMCLQ(); - int count = 0; - if (!liquid || cell->sizeMCLQ <= 8) - continue; - - for (int y = 0; y < ADT_CELL_SIZE; y++) - { - int cy = i * ADT_CELL_SIZE + y; - for (int x = 0; x < ADT_CELL_SIZE; x++) - { - int cx = j * ADT_CELL_SIZE + x; - if (liquid->flags[y][x] != 0x0F) - { - liquid_show[cy][cx] = true; - if (liquid->flags[y][x] & (1<<7)) - liquid_flags[i][j] |= MAP_LIQUID_TYPE_DARK_WATER; - ++count; - } - } - } - - uint32 c_flag = cell->flags; - if (c_flag & (1<<2)) - { - liquid_entry[i][j] = 1; - liquid_flags[i][j] |= MAP_LIQUID_TYPE_WATER; // water - } - if (c_flag & (1<<3)) - { - liquid_entry[i][j] = 2; - liquid_flags[i][j] |= MAP_LIQUID_TYPE_OCEAN; // ocean - } - if (c_flag & (1<<4)) - { - liquid_entry[i][j] = 3; - liquid_flags[i][j] |= MAP_LIQUID_TYPE_MAGMA; // magma/slime - } - - if (!count && liquid_flags[i][j]) - fprintf(stderr, "Wrong liquid detect in MCLQ chunk"); - - for (int y = 0; y <= ADT_CELL_SIZE; y++) - { - int cy = i * ADT_CELL_SIZE + y; - for (int x = 0; x <= ADT_CELL_SIZE; x++) - { - int cx = j * ADT_CELL_SIZE + x; - liquid_height[cy][cx] = liquid->liquid[y][x].height; - } - } - } - } - - // Get liquid map for grid (in WOTLK used MH2O chunk) - adt_MH2O * h2o = adt.a_grid->getMH2O(); - if (h2o) - { - for (int i = 0; i < ADT_CELLS_PER_GRID; i++) - { - for(int j = 0; j < ADT_CELLS_PER_GRID; j++) - { - adt_liquid_header *h = h2o->getLiquidData(i,j); - if (!h) - continue; - - int count = 0; - uint64 show = h2o->getLiquidShowMap(h); - for (int y = 0; y < h->height; y++) - { - int cy = i * ADT_CELL_SIZE + y + h->yOffset; - for (int x = 0; x < h->width; x++) - { - int cx = j * ADT_CELL_SIZE + x + h->xOffset; - if (show & 1) - { - liquid_show[cy][cx] = true; - ++count; - } - show >>= 1; - } - } - - liquid_entry[i][j] = h->liquidType; - switch (LiqType[h->liquidType]) - { - case LIQUID_TYPE_WATER: liquid_flags[i][j] |= MAP_LIQUID_TYPE_WATER; break; - case LIQUID_TYPE_OCEAN: liquid_flags[i][j] |= MAP_LIQUID_TYPE_OCEAN; break; - case LIQUID_TYPE_MAGMA: liquid_flags[i][j] |= MAP_LIQUID_TYPE_MAGMA; break; - case LIQUID_TYPE_SLIME: liquid_flags[i][j] |= MAP_LIQUID_TYPE_SLIME; break; - default: - printf("\nCan't find Liquid type %u for map %s\nchunk %d,%d\n", h->liquidType, filename, i, j); - break; - } - // Dark water detect - if (LiqType[h->liquidType] == LIQUID_TYPE_OCEAN) - { - uint8* lm = h2o->getLiquidLightMap(h); - if (!lm) - liquid_flags[i][j] |= MAP_LIQUID_TYPE_DARK_WATER; - } - - if (!count && liquid_flags[i][j]) - printf("Wrong liquid detect in MH2O chunk"); - - float* height = h2o->getLiquidHeightMap(h); - int pos = 0; - for (int y = 0; y <= h->height; y++) - { - int cy = i * ADT_CELL_SIZE + y + h->yOffset; - for (int x = 0; x <= h->width; x++) - { - int cx = j * ADT_CELL_SIZE + x + h->xOffset; - - if (height) - liquid_height[cy][cx] = height[pos]; - else - liquid_height[cy][cx] = h->heightLevel1; - - pos++; - } - } - } - } - } - //============================================ // Pack liquid data //============================================ @@ -924,30 +895,11 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, map.liquidMapSize += sizeof(float)*liquidHeader.width*liquidHeader.height; } - // map hole info - uint16 holes[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; - if (map.liquidMapOffset) map.holesOffset = map.liquidMapOffset + map.liquidMapSize; else map.holesOffset = map.heightMapOffset + map.heightMapSize; - memset(holes, 0, sizeof(holes)); - bool hasHoles = false; - - for (int i = 0; i < ADT_CELLS_PER_GRID; ++i) - { - for (int j = 0; j < ADT_CELLS_PER_GRID; ++j) - { - adt_MCNK * cell = adt.cells[i][j]; - if (!cell) - continue; - holes[i][j] = cell->holes; - if (!hasHoles && cell->holes != 0) - hasHoles = true; - } - } - if (hasHoles) map.holesSize = sizeof(holes); else @@ -1013,11 +965,10 @@ bool ConvertADT(char *filename, char *filename2, int /*cell_y*/, int /*cell_x*/, return true; } -void ExtractMapsFromMpq(uint32 build) +void ExtractMaps(uint32 build) { - char mpq_filename[1024]; + char storagePath[1024]; char output_filename[1024]; - char mpq_map_name[1024]; printf("Extracting maps...\n"); @@ -1035,21 +986,22 @@ void ExtractMapsFromMpq(uint32 build) { printf("Extract %s (%d/%u) \n", map_ids[z].name, z+1, map_count); // Loadup map grid data - sprintf(mpq_map_name, "World\\Maps\\%s\\%s.wdt", map_ids[z].name, map_ids[z].name); - WDT_file wdt; - if (!wdt.loadFile(WorldMpq, mpq_map_name, false)) + sprintf(storagePath, "World\\Maps\\%s\\%s.wdt", map_ids[z].name, map_ids[z].name); + ChunkedFile wdt; + if (!wdt.loadFile(CascStorage, storagePath, false)) continue; + FileChunk* chunk = wdt.GetChunk("MAIN"); for (uint32 y = 0; y < WDT_MAP_SIZE; ++y) { for (uint32 x = 0; x < WDT_MAP_SIZE; ++x) { - if (!(wdt.main->adt_list[y][x].flag & 0x1)) + if (!(chunk->As<wdt_MAIN>()->adt_list[y][x].flag & 0x1)) continue; - sprintf(mpq_filename, "World\\Maps\\%s\\%s_%u_%u.adt", map_ids[z].name, map_ids[z].name, x, y); + sprintf(storagePath, "World\\Maps\\%s\\%s_%u_%u.adt", map_ids[z].name, map_ids[z].name, x, y); sprintf(output_filename, "%s/maps/%03u%02u%02u.map", output_path, map_ids[z].id, y, x); - ConvertADT(mpq_filename, output_filename, y, x, build); + ConvertADT(storagePath, output_filename, y, x, build); } // draw progress bar @@ -1058,8 +1010,8 @@ void ExtractMapsFromMpq(uint32 build) } printf("\n"); - delete [] areas; - delete [] map_ids; + delete[] areas; + delete[] map_ids; } bool ExtractFile(HANDLE fileInArchive, char const* filename) @@ -1076,7 +1028,7 @@ bool ExtractFile(HANDLE fileInArchive, char const* filename) while (readBytes > 0) { - SFileReadFile(fileInArchive, buffer, sizeof(buffer), &readBytes, NULL); + CascReadFile(fileInArchive, buffer, sizeof(buffer), &readBytes); if (readBytes > 0) fwrite(buffer, 1, readBytes, output); } @@ -1085,213 +1037,54 @@ bool ExtractFile(HANDLE fileInArchive, char const* filename) return true; } -void ExtractDBCFiles(int l, bool basicLocale) +void ExtractDBFilesClient(int l) { - printf("Extracting dbc files...\n"); - - SFILE_FIND_DATA foundFile; - memset(&foundFile, 0, sizeof(foundFile)); - HANDLE listFile = SFileFindFirstFile(LocaleMpq, "DBFilesClient\\*dbc", &foundFile, NULL); - HANDLE dbcFile = NULL; - uint32 count = 0; - if (listFile) - { - std::string outputPath = output_path; - outputPath += "/dbc/"; - - CreateDir(outputPath); - if (!basicLocale) - { - outputPath += Locales[l]; - outputPath += "/"; - CreateDir(outputPath); - } - - std::string filename; - - do - { - if (!SFileOpenFileEx(LocaleMpq, foundFile.cFileName, SFILE_OPEN_PATCHED_FILE, &dbcFile)) - { - printf("Unable to open file %s in the archive\n", foundFile.cFileName); - continue; - } - - filename = foundFile.cFileName; - filename = outputPath + filename.substr(filename.rfind('\\') + 1); + printf("Extracting dbc/db2 files...\n"); - if (FileExists(filename.c_str())) - continue; - - if (ExtractFile(dbcFile, filename.c_str())) - ++count; - - SFileCloseFile(dbcFile); - } while (SFileFindNextFile(listFile, &foundFile)); - - SFileFindClose(listFile); - } - - printf("Extracted %u DBC files\n\n", count); -} + std::string outputPath = output_path; + outputPath += "/dbc/"; -void ExtractDB2Files(int l, bool basicLocale) -{ - printf("Extracting db2 files...\n"); + CreateDir(outputPath); + outputPath += Locales[l]; + outputPath += "/"; + CreateDir(outputPath); - SFILE_FIND_DATA foundFile; - memset(&foundFile, 0, sizeof(foundFile)); - HANDLE listFile = SFileFindFirstFile(LocaleMpq, "DBFilesClient\\*db2", &foundFile, NULL); - HANDLE dbcFile = NULL; + uint32 index = 0; uint32 count = 0; - if (listFile) + char const* fileName = DBFilesClientList[index]; + HANDLE dbcFile; + while (fileName) { - std::string outputPath = output_path; - outputPath += "/dbc/"; - if (!basicLocale) + if (CascOpenFile(CascStorage, fileName, 1 << l, 0, &dbcFile)) { - outputPath += Locales[l]; - outputPath += "/"; - } - - std::string filename; - - do - { - if (!SFileOpenFileEx(LocaleMpq, foundFile.cFileName, SFILE_OPEN_PATCHED_FILE, &dbcFile)) - { - printf("Unable to open file %s in the archive\n", foundFile.cFileName); - continue; - } - - filename = foundFile.cFileName; + std::string filename = fileName; filename = outputPath + filename.substr(filename.rfind('\\') + 1); - if (ExtractFile(dbcFile, filename.c_str())) - ++count; - - SFileCloseFile(dbcFile); - } while (SFileFindNextFile(listFile, &foundFile)); - SFileFindClose(listFile); - } - - printf("Extracted %u DB2 files\n\n", count); -} + if (!FileExists(filename.c_str())) + if (ExtractFile(dbcFile, filename.c_str())) + ++count; -bool LoadLocaleMPQFile(int locale) -{ - TCHAR buff[512]; - memset(buff, 0, sizeof(buff)); - _stprintf(buff, _T("%s/Data/%s/locale-%s.MPQ"), input_path, LocalesT[locale], LocalesT[locale]); - if (!SFileOpenArchive(buff, 0, MPQ_OPEN_READ_ONLY, &LocaleMpq)) - { - if (GetLastError() != ERROR_PATH_NOT_FOUND) - { - _tprintf(_T("\nLoading %s locale MPQs\n"), LocalesT[locale]); - _tprintf(_T("Cannot open archive %s\n"), buff); - } - return false; - } - - _tprintf(_T("\nLoading %s locale MPQs\n"), LocalesT[locale]); - char const* prefix = NULL; - for (int i = 0; Builds[i] && Builds[i] <= CONF_TargetBuild; ++i) - { - // Do not attempt to read older MPQ patch archives past this build, they were merged with base - // and trying to read them together with new base will not end well - if (CONF_TargetBuild >= NEW_BASE_SET_BUILD && Builds[i] < NEW_BASE_SET_BUILD) - continue; - - memset(buff, 0, sizeof(buff)); - if (Builds[i] > LAST_DBC_IN_DATA_BUILD) - { - prefix = ""; - _stprintf(buff, _T("%s/Data/%s/wow-update-%s-%u.MPQ"), input_path, LocalesT[locale], LocalesT[locale], Builds[i]); + CascCloseFile(dbcFile); } else - { - prefix = Locales[locale]; - _stprintf(buff, _T("%s/Data/wow-update-%u.MPQ"), input_path, Builds[i]); - } + printf("Unable to open file %s in the archive for locale %s.\n", fileName, Locales[l]); - if (!SFileOpenPatchArchive(LocaleMpq, buff, prefix, 0)) - { - if (GetLastError() != ERROR_FILE_NOT_FOUND) - _tprintf(_T("Cannot open patch archive %s\n"), buff); - continue; - } - else - _tprintf(_T("Loaded %s\n"), buff); + fileName = DBFilesClientList[++index]; } - printf("\n"); - return true; + printf("Extracted %u files\n\n", count); } -void LoadCommonMPQFiles(uint32 build) +bool OpenCascStorage() { - TCHAR filename[512]; - _stprintf(filename, _T("%s/Data/world.MPQ"), input_path); - _tprintf(_T("Loading common MPQ files\n")); - if (!SFileOpenArchive(filename, 0, MPQ_OPEN_READ_ONLY, &WorldMpq)) - { - if (GetLastError() != ERROR_PATH_NOT_FOUND) - _tprintf(_T("Cannot open archive %s\n"), filename); - return; - } - - int count = sizeof(CONF_mpq_list) / sizeof(char*); - for (int i = 1; i < count; ++i) - { - if (build < NEW_BASE_SET_BUILD && !strcmp("world2.MPQ", CONF_mpq_list[i])) // 4.3.2 and higher MPQ - continue; - - _stprintf(filename, _T("%s/Data/%s"), input_path, CONF_mpq_list[i]); - if (!SFileOpenPatchArchive(WorldMpq, filename, "", 0)) - { - if (GetLastError() != ERROR_PATH_NOT_FOUND) - _tprintf(_T("Cannot open archive %s\n"), filename); - else - _tprintf(_T("Not found %s\n"), filename); - } - else - _tprintf(_T("Loaded %s\n"), filename); - - } - - char const* prefix = NULL; - for (int i = 0; Builds[i] && Builds[i] <= CONF_TargetBuild; ++i) + if (!CascOpenStorage(".\\Data", 0, &CascStorage)) { - // Do not attempt to read older MPQ patch archives past this build, they were merged with base - // and trying to read them together with new base will not end well - if (CONF_TargetBuild >= NEW_BASE_SET_BUILD && Builds[i] < NEW_BASE_SET_BUILD) - continue; - - memset(filename, 0, sizeof(filename)); - if (Builds[i] > LAST_DBC_IN_DATA_BUILD) - { - prefix = ""; - _stprintf(filename, _T("%s/Data/wow-update-base-%u.MPQ"), input_path, Builds[i]); - } - else - { - prefix = "base"; - _stprintf(filename, _T("%s/Data/wow-update-%u.MPQ"), input_path, Builds[i]); - } - - if (!SFileOpenPatchArchive(WorldMpq, filename, prefix, 0)) - { - if (GetLastError() != ERROR_PATH_NOT_FOUND) - _tprintf(_T("Cannot open patch archive %s\n"), filename); - else - _tprintf(_T("Not found %s\n"), filename); - continue; - } - else - _tprintf(_T("Loaded %s\n"), filename); + printf("Error %d\n", GetLastError()); + return false; } printf("\n"); + return true; } int main(int argc, char * arg[]) @@ -1304,54 +1097,42 @@ int main(int argc, char * arg[]) int FirstLocale = -1; uint32 build = 0; + if (!OpenCascStorage()) + { + if (GetLastError() != ERROR_PATH_NOT_FOUND) + printf("Unable to open storage!\n"); + return 1; + } + for (int i = 0; i < LOCALES_COUNT; ++i) { - //Open MPQs - if (!LoadLocaleMPQFile(i)) - { - if (GetLastError() != ERROR_PATH_NOT_FOUND) - printf("Unable to load %s locale archives!\n", Locales[i]); + if (CONF_Locale && !(CONF_Locale & (1 << i))) continue; - } - printf("Detected locale: %s\n", Locales[i]); if ((CONF_extract & EXTRACT_DBC) == 0) { FirstLocale = i; build = ReadBuild(i); - if (build > CONF_TargetBuild) - { - printf("Base locale-%s.MPQ has build higher than target build (%u > %u), nothing extracted!\n", Locales[i], build, CONF_TargetBuild); - return 0; - } + if (!build) + continue; - printf("Detected client build: %u\n", build); - printf("\n"); + printf("Detected client build: %u\n\n", build); break; } //Extract DBC files uint32 tempBuild = ReadBuild(i); - printf("Detected client build %u for locale %s\n", tempBuild, Locales[i]); - if (tempBuild > CONF_TargetBuild) - { - SFileCloseArchive(LocaleMpq); - printf("Base locale-%s.MPQ has build higher than target build (%u > %u), nothing extracted!\n", Locales[i], tempBuild, CONF_TargetBuild); + if (!tempBuild) continue; - } - printf("\n"); - ExtractDBCFiles(i, FirstLocale < 0); - ExtractDB2Files(i, FirstLocale < 0); + printf("Detected client build %u for locale %s\n\n", tempBuild, Locales[i]); + ExtractDBFilesClient(i); if (FirstLocale < 0) { FirstLocale = i; build = tempBuild; } - - //Close MPQs - SFileCloseArchive(LocaleMpq); } if (FirstLocale < 0) @@ -1364,17 +1145,9 @@ int main(int argc, char * arg[]) { printf("Using locale: %s\n", Locales[FirstLocale]); - // Open MPQs - LoadLocaleMPQFile(FirstLocale); - LoadCommonMPQFiles(build); - - // Extract maps - ExtractMapsFromMpq(build); - - // Close MPQs - SFileCloseArchive(WorldMpq); - SFileCloseArchive(LocaleMpq); + ExtractMaps(build); } + CascCloseStorage(CascStorage); return 0; } diff --git a/src/tools/map_extractor/adt.cpp b/src/tools/map_extractor/adt.cpp deleted file mode 100644 index 9260828fd41..00000000000 --- a/src/tools/map_extractor/adt.cpp +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2011 MaNGOS <http://getmangos.com/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#define _CRT_SECURE_NO_DEPRECATE - -#include "adt.h" -#include <cstring> - -// Helper -int holetab_h[4] = {0x1111, 0x2222, 0x4444, 0x8888}; -int holetab_v[4] = {0x000F, 0x00F0, 0x0F00, 0xF000}; - -u_map_fcc MHDRMagic = { {'R','D','H','M'} }; -u_map_fcc MCINMagic = { {'N','I','C','M'} }; -u_map_fcc MH2OMagic = { {'O','2','H','M'} }; -u_map_fcc MCNKMagic = { {'K','N','C','M'} }; -u_map_fcc MCVTMagic = { {'T','V','C','M'} }; -u_map_fcc MCLQMagic = { {'Q','L','C','M'} }; - -bool isHole(int holes, int i, int j) -{ - int testi = i / 2; - int testj = j / 4; - if(testi > 3) testi = 3; - if(testj > 3) testj = 3; - return (holes & holetab_h[testi] & holetab_v[testj]) != 0; -} - -// -// Adt file loader class -// -ADT_file::ADT_file() -{ - a_grid = 0; -} - -ADT_file::~ADT_file() -{ - free(); -} - -void ADT_file::free() -{ - a_grid = 0; - FileLoader::free(); -} - -// -// Adt file check function -// -bool ADT_file::prepareLoadedData() -{ - // Check parent - if (!FileLoader::prepareLoadedData()) - return false; - - // Check and prepare MHDR - a_grid = (adt_MHDR*)(GetData()+8+version->size); - if (!a_grid->prepareLoadedData()) - return false; - - // funny offsets calculations because there is no mapping for them and they have variable lengths - uint8* ptr = (uint8*)a_grid + a_grid->size + 8; - uint32 mcnk_count = 0; - memset(cells, 0, ADT_CELLS_PER_GRID * ADT_CELLS_PER_GRID * sizeof(adt_MCNK*)); - while (ptr < GetData() + GetDataSize()) - { - uint32 header = *(uint32*)ptr; - uint32 size = *(uint32*)(ptr + 4); - if (header == MCNKMagic.fcc) - { - cells[mcnk_count / ADT_CELLS_PER_GRID][mcnk_count % ADT_CELLS_PER_GRID] = (adt_MCNK*)ptr; - ++mcnk_count; - } - - // move to next chunk - ptr += size + 8; - } - - if (mcnk_count != ADT_CELLS_PER_GRID * ADT_CELLS_PER_GRID) - return false; - - return true; -} - -bool adt_MHDR::prepareLoadedData() -{ - if (fcc != MHDRMagic.fcc) - return false; - - if (size!=sizeof(adt_MHDR)-8) - return false; - - // Check and prepare MCIN - if (offsMCIN && !getMCIN()->prepareLoadedData()) - return false; - - // Check and prepare MH2O - if (offsMH2O && !getMH2O()->prepareLoadedData()) - return false; - - return true; -} - -bool adt_MCIN::prepareLoadedData() -{ - if (fcc != MCINMagic.fcc) - return false; - - // Check cells data - for (int i=0; i<ADT_CELLS_PER_GRID;i++) - for (int j=0; j<ADT_CELLS_PER_GRID;j++) - if (cells[i][j].offsMCNK && !getMCNK(i,j)->prepareLoadedData()) - return false; - - return true; -} - -bool adt_MH2O::prepareLoadedData() -{ - if (fcc != MH2OMagic.fcc) - return false; - - // Check liquid data -// for (int i=0; i<ADT_CELLS_PER_GRID;i++) -// for (int j=0; j<ADT_CELLS_PER_GRID;j++) - - return true; -} - -bool adt_MCNK::prepareLoadedData() -{ - if (fcc != MCNKMagic.fcc) - return false; - - // Check height map - if (offsMCVT && !getMCVT()->prepareLoadedData()) - return false; - // Check liquid data - if (offsMCLQ && !getMCLQ()->prepareLoadedData()) - return false; - - return true; -} - -bool adt_MCVT::prepareLoadedData() -{ - if (fcc != MCVTMagic.fcc) - return false; - - if (size != sizeof(adt_MCVT)-8) - return false; - - return true; -} - -bool adt_MCLQ::prepareLoadedData() -{ - if (fcc != MCLQMagic.fcc) - return false; - - return true; -} diff --git a/src/tools/map_extractor/adt.h b/src/tools/map_extractor/adt.h index 9f8ada77317..15145ccd5bf 100644 --- a/src/tools/map_extractor/adt.h +++ b/src/tools/map_extractor/adt.h @@ -54,8 +54,6 @@ class adt_MCVT uint32 size; public: float height_map[(ADT_CELL_SIZE+1)*(ADT_CELL_SIZE+1)+ADT_CELL_SIZE*ADT_CELL_SIZE]; - - bool prepareLoadedData(); }; // @@ -84,7 +82,6 @@ public: // == 0x0F - not show liquid uint8 flags[ADT_CELL_SIZE][ADT_CELL_SIZE]; uint8 data[84]; - bool prepareLoadedData(); }; // @@ -103,8 +100,15 @@ public: uint32 iy; uint32 nLayers; uint32 nDoodadRefs; - uint32 offsMCVT; // height map - uint32 offsMCNR; // Normal vectors for each vertex + union + { + struct + { + uint32 offsMCVT; // height map + uint32 offsMCNR; // Normal vectors for each vertex + } offsets; + uint64 HighResHoles; // TODO: maybe use this? + } union_5_3_0; uint32 offsMCLY; // Texture layer definitions uint32 offsMCRF; // A list of indices into the parent file's MDDF chunk uint32 offsMCAL; // Alpha maps for additional texture layers @@ -130,48 +134,6 @@ public: uint32 offsMCCV; // offsColorValues in WotLK uint32 props; uint32 effectId; - - bool prepareLoadedData(); - adt_MCVT *getMCVT() - { - if (offsMCVT) - return (adt_MCVT *)((uint8 *)this + offsMCVT); - return 0; - } - adt_MCLQ *getMCLQ() - { - if (offsMCLQ) - return (adt_MCLQ *)((uint8 *)this + offsMCLQ); - return 0; - } -}; - -// -// Adt file grid chunk -// -class adt_MCIN -{ - union{ - uint32 fcc; - char fcc_txt[4]; - }; - uint32 size; -public: - struct adt_CELLS{ - uint32 offsMCNK; - uint32 size; - uint32 flags; - uint32 asyncId; - } cells[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; - - bool prepareLoadedData(); - // offset from begin file (used this-84) - adt_MCNK *getMCNK(int x, int y) - { - if (cells[x][y].offsMCNK) - return (adt_MCNK *)((uint8 *)this + cells[x][y].offsMCNK - 84); - return 0; - } }; #define ADT_LIQUID_HEADER_FULL_LIGHT 0x01 @@ -208,8 +170,6 @@ public: uint32 offsData2; } liquid[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; - bool prepareLoadedData(); - adt_liquid_header *getLiquidData(int x, int y) { if (liquid[x][y].used && liquid[x][y].offsData1) @@ -262,53 +222,6 @@ public: }; -// -// Adt file header chunk -// -class ADT_file; -class adt_MHDR -{ - friend class ADT_file; - - union{ - uint32 fcc; - char fcc_txt[4]; - }; - uint32 size; - - uint32 flags; - uint32 offsMCIN; // MCIN - uint32 offsTex; // MTEX - uint32 offsModels; // MMDX - uint32 offsModelsIds; // MMID - uint32 offsMapObejcts; // MWMO - uint32 offsMapObejctsIds; // MWID - uint32 offsDoodsDef; // MDDF - uint32 offsObjectsDef; // MODF - uint32 offsMFBO; // MFBO - uint32 offsMH2O; // MH2O - uint32 data1; - uint32 data2; - uint32 data3; - uint32 data4; - uint32 data5; -public: - bool prepareLoadedData(); - adt_MCIN* getMCIN() { return offsMCIN ? (adt_MCIN *)((uint8 *)&flags+offsMCIN) : NULL; } - adt_MH2O* getMH2O() { return offsMH2O ? (adt_MH2O *)((uint8 *)&flags+offsMH2O) : NULL; } -}; - -class ADT_file : public FileLoader{ -public: - bool prepareLoadedData(); - ADT_file(); - ~ADT_file(); - void free(); - - adt_MHDR* a_grid; - adt_MCNK* cells[ADT_CELLS_PER_GRID][ADT_CELLS_PER_GRID]; -}; - #pragma pack(pop) #endif diff --git a/src/tools/map_extractor/dbcfile.cpp b/src/tools/map_extractor/dbcfile.cpp index fc7d8d25d05..069dcd5e78a 100644 --- a/src/tools/map_extractor/dbcfile.cpp +++ b/src/tools/map_extractor/dbcfile.cpp @@ -31,26 +31,26 @@ bool DBCFile::open() unsigned int na, nb, es, ss; DWORD readBytes = 0; - SFileReadFile(_file, header, 4, &readBytes, NULL); + CascReadFile(_file, header, 4, &readBytes); if (readBytes != 4) // Number of records return false; if (header[0] != 'W' || header[1] != 'D' || header[2] != 'B' || header[3] != 'C') return false; - SFileReadFile(_file, &na, 4, &readBytes, NULL); + CascReadFile(_file, &na, 4, &readBytes); if (readBytes != 4) // Number of records return false; - SFileReadFile(_file, &nb, 4, &readBytes, NULL); + CascReadFile(_file, &nb, 4, &readBytes); if (readBytes != 4) // Number of fields return false; - SFileReadFile(_file, &es, 4, &readBytes, NULL); + CascReadFile(_file, &es, 4, &readBytes); if (readBytes != 4) // Size of a record return false; - SFileReadFile(_file, &ss, 4, &readBytes, NULL); + CascReadFile(_file, &ss, 4, &readBytes); if (readBytes != 4) // String size return false; @@ -65,7 +65,7 @@ bool DBCFile::open() _stringTable = _data + _recordSize*_recordCount; size_t data_size = _recordSize * _recordCount + _stringSize; - SFileReadFile(_file, _data, data_size, &readBytes, NULL); + CascReadFile(_file, _data, data_size, &readBytes); if (readBytes != data_size) return false; @@ -106,4 +106,3 @@ DBCFile::Iterator DBCFile::end() assert(_data); return Iterator(*this, _stringTable); } - diff --git a/src/tools/map_extractor/dbcfile.h b/src/tools/map_extractor/dbcfile.h index 9602182fe79..17c773fcc42 100644 --- a/src/tools/map_extractor/dbcfile.h +++ b/src/tools/map_extractor/dbcfile.h @@ -20,7 +20,7 @@ #define DBCFILE_H #include <cassert> #include <string> -#include "StormLib.h" +#include "CascLib.h" class DBCFile { diff --git a/src/tools/map_extractor/loadlib.cpp b/src/tools/map_extractor/loadlib.cpp index 5d1742c224e..7af56d89a0c 100644 --- a/src/tools/map_extractor/loadlib.cpp +++ b/src/tools/map_extractor/loadlib.cpp @@ -23,49 +23,53 @@ u_map_fcc MverMagic = { {'R','E','V','M'} }; -FileLoader::FileLoader() +ChunkedFile::ChunkedFile() { data = 0; data_size = 0; - version = 0; } -FileLoader::~FileLoader() +ChunkedFile::~ChunkedFile() { free(); } -bool FileLoader::loadFile(HANDLE mpq, char* filename, bool log) +bool ChunkedFile::loadFile(HANDLE mpq, char* filename, bool log) { free(); HANDLE file; - if (!SFileOpenFileEx(mpq, filename, SFILE_OPEN_PATCHED_FILE, &file)) + if (!CascOpenFile(mpq, filename, CASC_LOCALE_ALL, 0, &file)) { if (log) printf("No such file %s\n", filename); return false; } - data_size = SFileGetFileSize(file, NULL); + data_size = CascGetFileSize(file, NULL); data = new uint8[data_size]; - SFileReadFile(file, data, data_size, NULL/*bytesRead*/, NULL); + CascReadFile(file, data, data_size, NULL/*bytesRead*/); + parseChunks(); if (prepareLoadedData()) { - SFileCloseFile(file); + CascCloseFile(file); return true; } printf("Error loading %s\n", filename); - SFileCloseFile(file); + CascCloseFile(file); free(); return false; } -bool FileLoader::prepareLoadedData() +bool ChunkedFile::prepareLoadedData() { + FileChunk* chunk = GetChunk("MVER"); + if (!chunk) + return false; + // Check version - version = (file_MVER *) data; + file_MVER* version = chunk->As<file_MVER>(); if (version->fcc != MverMagic.fcc) return false; if (version->ver != FILE_FORMAT_VERSION) @@ -73,10 +77,110 @@ bool FileLoader::prepareLoadedData() return true; } -void FileLoader::free() +void ChunkedFile::free() { - if (data) delete[] data; + for (auto chunk : chunks) + delete chunk.second; + + chunks.clear(); + + delete[] data; data = 0; data_size = 0; - version = 0; +} + +u_map_fcc InterestingChunks[] = { + { 'R', 'E', 'V', 'M' }, + { 'N', 'I', 'A', 'M' }, + { 'O', '2', 'H', 'M' }, + { 'K', 'N', 'C', 'M' }, + { 'T', 'V', 'C', 'M' }, + { 'Q', 'L', 'C', 'M' } +}; + +bool IsInterestingChunk(u_map_fcc const& fcc) +{ + for (u_map_fcc const& f : InterestingChunks) + if (f.fcc == fcc.fcc) + return true; + + return false; +} + +void ChunkedFile::parseChunks() +{ + uint8* ptr = GetData(); + while (ptr < GetData() + GetDataSize()) + { + u_map_fcc header = *(u_map_fcc*)ptr; + uint32 size = 0; + if (IsInterestingChunk(header)) + { + size = *(uint32*)(ptr + 4); + if (size <= data_size) + { + std::swap(header.fcc_txt[0], header.fcc_txt[3]); + std::swap(header.fcc_txt[1], header.fcc_txt[2]); + + FileChunk* chunk = new FileChunk{ ptr, size }; + chunk->parseSubChunks(); + chunks.insert({ std::string(header.fcc_txt, 4), chunk }); + } + } + + // move to next chunk + ptr += size + 8; + } +} + +FileChunk* ChunkedFile::GetChunk(std::string const& name) +{ + auto range = chunks.equal_range(name); + if (std::distance(range.first, range.second) == 1) + return range.first->second; + + return NULL; +} + +FileChunk::~FileChunk() +{ + for (auto subchunk : subchunks) + delete subchunk.second; + + subchunks.clear(); +} + +void FileChunk::parseSubChunks() +{ + uint8* ptr = data + 8; // skip self + while (ptr < data + size) + { + u_map_fcc header = *(u_map_fcc*)ptr; + uint32 subsize = 0; + if (IsInterestingChunk(header)) + { + subsize = *(uint32*)(ptr + 4); + if (subsize < size) + { + std::swap(header.fcc_txt[0], header.fcc_txt[3]); + std::swap(header.fcc_txt[1], header.fcc_txt[2]); + + FileChunk* chunk = new FileChunk{ ptr, subsize }; + chunk->parseSubChunks(); + subchunks.insert({ std::string(header.fcc_txt, 4), chunk }); + } + } + + // move to next chunk + ptr += subsize + 8; + } +} + +FileChunk* FileChunk::GetSubChunk(std::string const& name) +{ + auto range = subchunks.equal_range(name); + if (std::distance(range.first, range.second) == 1) + return range.first->second; + + return NULL; } diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h new file mode 100644 index 00000000000..df7991d2ec3 --- /dev/null +++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h @@ -0,0 +1,531 @@ +/* + * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef DBFilesClientList_h__ +#define DBFilesClientList_h__ + +char const* DBFilesClientList[] = +{ + "DBFilesClient\\CharSections.dbc", + "DBFilesClient\\CharHairGeosets.dbc", + "DBFilesClient\\TaxiPathNode.db2", + "DBFilesClient\\KeyChain.db2", + "DBFilesClient\\UiTextureAtlas.db2", + "DBFilesClient\\UiTextureAtlasMember.db2", + "DBFilesClient\\CharacterFaceBoneSet.db2", + "DBFilesClient\\Startup_Strings.dbc", + "DBFilesClient\\VideoHardware.dbc", + "DBFilesClient\\AreaPOI.db2", + "DBFilesClient\\AreaPOIState.db2", + "DBFilesClient\\BattlePetAbility.db2", + "DBFilesClient\\BattlePetAbilityEffect.db2", + "DBFilesClient\\BattlePetAbilityState.db2", + "DBFilesClient\\BattlePetAbilityTurn.db2", + "DBFilesClient\\BattlePetBreedQuality.db2", + "DBFilesClient\\BattlePetBreedState.db2", + "DBFilesClient\\BattlePetEffectProperties.db2", + "DBFilesClient\\BattlePetNPCTeamMember.db2", + "DBFilesClient\\BattlePetSpecies.db2", + "DBFilesClient\\BattlePetSpeciesState.db2", + "DBFilesClient\\BattlePetSpeciesXAbility.db2", + "DBFilesClient\\BattlePetState.db2", + "DBFilesClient\\BattlePetVisual.db2", + "DBFilesClient\\BroadcastText.db2", + "DBFilesClient\\Cfg_Categories.db2", + "DBFilesClient\\Cfg_Configs.db2", + "DBFilesClient\\Cfg_Regions.db2", + "DBFilesClient\\CharShipmentContainer.db2", + "DBFilesClient\\CharShipment.db2", + "DBFilesClient\\ChrUpgradeBucket.db2", + "DBFilesClient\\ChrUpgradeBucketSpell.db2", + "DBFilesClient\\ChrUpgradeTier.db2", + "DBFilesClient\\Creature.db2", + "DBFilesClient\\CreatureDifficulty.db2", + "DBFilesClient\\Curve.db2", + "DBFilesClient\\CurvePoint.db2", + "DBFilesClient\\GameObjects.db2", + "DBFilesClient\\GarrAbilityCategory.db2", + "DBFilesClient\\GarrAbility.db2", + "DBFilesClient\\GarrAbilityEffect.db2", + "DBFilesClient\\GarrBuilding.db2", + "DBFilesClient\\GarrBuildingDoodadSet.db2", + "DBFilesClient\\GarrBuildingPlotInst.db2", + "DBFilesClient\\GarrClassSpec.db2", + "DBFilesClient\\GarrEncounter.db2", + "DBFilesClient\\GarrEncounterXMechanic.db2", + "DBFilesClient\\GarrFollItemSet.db2", + "DBFilesClient\\GarrFollItemSetMember.db2", + "DBFilesClient\\GarrFollower.db2", + "DBFilesClient\\GarrFollowerLevelXP.db2", + "DBFilesClient\\GarrFollowerQuality.db2", + "DBFilesClient\\GarrFollowerXAbility.db2", + "DBFilesClient\\GarrMechanic.db2", + "DBFilesClient\\GarrMechanicType.db2", + "DBFilesClient\\GarrMission.db2", + "DBFilesClient\\GarrMissionReward.db2", + "DBFilesClient\\GarrMissionType.db2", + "DBFilesClient\\GarrMissionXEncounter.db2", + "DBFilesClient\\GarrPlotBuilding.db2", + "DBFilesClient\\GarrPlotInstance.db2", + "DBFilesClient\\GarrPlot.db2", + "DBFilesClient\\GarrPlotUICategory.db2", + "DBFilesClient\\GarrSiteLevel.db2", + "DBFilesClient\\GarrSiteLevelPlotInst.db2", + "DBFilesClient\\GarrSpecialization.db2", + "DBFilesClient\\GlyphExclusiveCategory.db2", + "DBFilesClient\\GlyphRequiredSpec.db2", + "DBFilesClient\\GroupFinderActivity.db2", + "DBFilesClient\\GroupFinderActivityGrp.db2", + "DBFilesClient\\GroupFinderCategory.db2", + "DBFilesClient\\HighlightColor.db2", + "DBFilesClient\\Holidays.db2", + "DBFilesClient\\HolidayDescriptions.db2", + "DBFilesClient\\HolidayNames.db2", + "DBFilesClient\\Item-sparse.db2", + "DBFilesClient\\Item.db2", + "DBFilesClient\\ItemAppearance.db2", + "DBFilesClient\\ItemBonus.db2", + "DBFilesClient\\ItemBonusTreeNode.db2", + "DBFilesClient\\ItemCurrencyCost.db2", + "DBFilesClient\\ItemEffect.db2", + "DBFilesClient\\ItemExtendedCost.db2", + "DBFilesClient\\ItemModifiedAppearance.db2", + "DBFilesClient\\ItemToBattlePetSpecies.db2", + "DBFilesClient\\ItemToMountSpell.db2", + "DBFilesClient\\ItemUpgrade.db2", + "DBFilesClient\\ItemXBonusTree.db2", + "DBFilesClient\\LanguageWords.db2", + "DBFilesClient\\LfgRoleRequirement.db2", + "DBFilesClient\\Locale.db2", + "DBFilesClient\\Location.db2", + "DBFilesClient\\MapChallengeMode.db2", + "DBFilesClient\\MarketingPromotionsXLocale.db2", + "DBFilesClient\\ModelManifest.db2", + "DBFilesClient\\ModelNameToManifest.db2", + "DBFilesClient\\Mount.db2", + "DBFilesClient\\OverrideSpellData.db2", + "DBFilesClient\\Path.db2", + "DBFilesClient\\PathNode.db2", + "DBFilesClient\\PathNodeProperty.db2", + "DBFilesClient\\PathProperty.db2", + "DBFilesClient\\PhaseXPhaseGroup.db2", + "DBFilesClient\\PlayerCondition.db2", + "DBFilesClient\\PvpItem.db2", + "DBFilesClient\\QuestPackageItem.db2", + "DBFilesClient\\QuestLine.db2", + "DBFilesClient\\QuestLineXQuest.db2", + "DBFilesClient\\QuestPOIPointCliTask.db2", + "DBFilesClient\\QuestObjectiveCliTask.db2", + "DBFilesClient\\RulesetItemUpgrade.db2", + "DBFilesClient\\RulesetRaidLootUpgrade.db2", + "DBFilesClient\\SceneScriptPackage.db2", + "DBFilesClient\\SceneScriptPackageMember.db2", + "DBFilesClient\\SceneScript.db2", + "DBFilesClient\\SpellActionBarPref.db2", + "DBFilesClient\\SpellAuraRestrictions.db2", + "DBFilesClient\\SpellAuraRestrictionsDifficulty.db2", + "DBFilesClient\\SpellCastingRequirements.db2", + "DBFilesClient\\SpellClassOptions.db2", + "DBFilesClient\\SpellEffectCameraShakes.db2", + "DBFilesClient\\SpellEffectGroupSize.db2", + "DBFilesClient\\SpellLearnSpell.db2", + "DBFilesClient\\SpellMechanic.db2", + "DBFilesClient\\SpellMisc.db2", + "DBFilesClient\\SpellMiscDifficulty.db2", + "DBFilesClient\\SpellMissileMotion.db2", + "DBFilesClient\\SpellMissile.db2", + "DBFilesClient\\SpellPower.db2", + "DBFilesClient\\SpellPowerDifficulty.db2", + "DBFilesClient\\SpellReagents.db2", + "DBFilesClient\\SpellRuneCost.db2", + "DBFilesClient\\SpellTotems.db2", + "DBFilesClient\\SpellVisualEffectName.db2", + "DBFilesClient\\SpellVisualKitAreaModel.db2", + "DBFilesClient\\SpellVisualKitModelAttach.db2", + "DBFilesClient\\SpellVisualMissile.db2", + "DBFilesClient\\SpellVisualKit.db2", + "DBFilesClient\\SpellVisual.db2", + "DBFilesClient\\TaxiNodes.db2", + "DBFilesClient\\TaxiPath.db2", + "DBFilesClient\\TextureFileData.db2", + "DBFilesClient\\Toy.db2", + "DBFilesClient\\Trophy.db2", + "DBFilesClient\\TrophyInstance.db2", + "DBFilesClient\\TrophyType.db2", + "DBFilesClient\\Vignette.db2", + "DBFilesClient\\WbAccessControlList.db2", + "DBFilesClient\\WbCertBlacklist.db2", + "DBFilesClient\\WbCertWhitelist.db2", + "DBFilesClient\\WbPermissions.db2", + "DBFilesClient\\WeaponTrail.db2", + "DBFilesClient\\WorldBossLockout.db2", + "DBFilesClient\\QuestV2CliTask.db2", + "DBFilesClient\\UiTextureKit.db2", + "DBFilesClient\\StringLookups.dbc", + "DBFilesClient\\SpellIcon.dbc", + "DBFilesClient\\SpellEffect.dbc", + "DBFilesClient\\ParticleColor.dbc", + "DBFilesClient\\ObjectEffectPackageElem.dbc", + "DBFilesClient\\ObjectEffectPackage.dbc", + "DBFilesClient\\ObjectEffectModifier.dbc", + "DBFilesClient\\ObjectEffectGroup.dbc", + "DBFilesClient\\ObjectEffect.dbc", + "DBFilesClient\\NameGen.dbc", + "DBFilesClient\\LoadingScreens.dbc", + "DBFilesClient\\ItemVisualEffects.dbc", + "DBFilesClient\\ItemVisuals.dbc", + "DBFilesClient\\ItemDisplayInfo.dbc", + "DBFilesClient\\HelmetGeosetVisData.dbc", + "DBFilesClient\\HelmetAnimScaling.dbc", + "DBFilesClient\\GuildColorEmblem.dbc", + "DBFilesClient\\GuildColorBorder.dbc", + "DBFilesClient\\GuildColorBackground.dbc", + "DBFilesClient\\GlueScreenEmote.dbc", + "DBFilesClient\\GameTips.dbc", + "DBFilesClient\\Faction.dbc", + "DBFilesClient\\CreatureModelData.dbc", + "DBFilesClient\\CreatureFamily.dbc", + "DBFilesClient\\CreatureDisplayInfoExtra.dbc", + "DBFilesClient\\CreatureDisplayInfo.dbc", + "DBFilesClient\\ChrSpecialization.dbc", + "DBFilesClient\\CharacterLoadoutItem.dbc", + "DBFilesClient\\CharacterLoadout.dbc", + "DBFilesClient\\CharStartOutfit.dbc", + "DBFilesClient\\CharComponentTextureSections.dbc", + "DBFilesClient\\CharComponentTextureLayouts.dbc", + "DBFilesClient\\AnimReplacementSet.dbc", + "DBFilesClient\\AnimReplacement.dbc", + "DBFilesClient\\AnimKitSegment.dbc", + "DBFilesClient\\AnimKitPriority.dbc", + "DBFilesClient\\SoundProviderPreferences.dbc", + "DBFilesClient\\SpamMessages.dbc", + "DBFilesClient\\SoundFilterElem.dbc", + "DBFilesClient\\SoundFilter.dbc", + "DBFilesClient\\Resistances.dbc", + "DBFilesClient\\NamesReservedLocale.dbc", + "DBFilesClient\\NamesReserved.dbc", + "DBFilesClient\\NamesProfanity.dbc", + "DBFilesClient\\MovieVariation.dbc", + "DBFilesClient\\MovieOverlays.dbc", + "DBFilesClient\\MovieFileData.dbc", + "DBFilesClient\\Movie.dbc", + "DBFilesClient\\ItemSubClass.dbc", + "DBFilesClient\\ItemClass.dbc", + "DBFilesClient\\ManifestInterfaceTOCData.dbc", + "DBFilesClient\\ManifestInterfaceData.dbc", + "DBFilesClient\\FactionTemplate.dbc", + "DBFilesClient\\FactionGroup.dbc", + "DBFilesClient\\ChrRaces.dbc", + "DBFilesClient\\ChrClasses.dbc", + "DBFilesClient\\ChatProfanity.dbc", + "DBFilesClient\\CharacterFacialHairStyles.dbc", + "DBFilesClient\\CharBaseSection.dbc", + "DBFilesClient\\CharBaseInfo.dbc", + "DBFilesClient\\BannedAddOns.dbc", + "DBFilesClient\\AnimKitConfigBoneSet.dbc", + "DBFilesClient\\AnimKitConfig.dbc", + "DBFilesClient\\AnimKit.dbc", + "DBFilesClient\\AnimKitBoneSet.dbc", + "DBFilesClient\\AnimKitBoneSetAlias.dbc", + "DBFilesClient\\PhaseShiftZoneSounds.dbc", + "DBFilesClient\\WorldChunkSounds.dbc", + "DBFilesClient\\WorldStateExpression.dbc", + "DBFilesClient\\WorldStateZoneSounds.dbc", + "DBFilesClient\\ZoneMusic.dbc", + "DBFilesClient\\ZoneIntroMusicTable.dbc", + "DBFilesClient\\WorldStateUI.dbc", + "DBFilesClient\\WorldState.dbc", + "DBFilesClient\\WorldMapTransforms.dbc", + "DBFilesClient\\WorldMapOverlay.dbc", + "DBFilesClient\\WorldMapContinent.dbc", + "DBFilesClient\\WorldMapArea.dbc", + "DBFilesClient\\WorldElapsedTimer.dbc", + "DBFilesClient\\WorldEffect.dbc", + "DBFilesClient\\WeaponSwingSounds2.dbc", + "DBFilesClient\\WeaponImpactSounds.dbc", + "DBFilesClient\\World_PVP_Area.dbc", + "DBFilesClient\\VocalUISounds.dbc", + "DBFilesClient\\VehicleUIIndSeat.dbc", + "DBFilesClient\\VehicleUIIndicator.dbc", + "DBFilesClient\\VehicleSeat.dbc", + "DBFilesClient\\Vehicle.dbc", + "DBFilesClient\\UnitPowerBar.dbc", + "DBFilesClient\\UnitCondition.dbc", + "DBFilesClient\\UnitBlood.dbc", + "DBFilesClient\\UnitBloodLevels.dbc", + "DBFilesClient\\TransportRotation.dbc", + "DBFilesClient\\TransportPhysics.dbc", + "DBFilesClient\\TransportAnimation.dbc", + "DBFilesClient\\TradeSkillCategory.dbc", + "DBFilesClient\\TotemCategory.dbc", + "DBFilesClient\\TerrainTypeSounds.dbc", + "DBFilesClient\\Talent.dbc", + "DBFilesClient\\SummonProperties.dbc", + "DBFilesClient\\Stationery.dbc", + "DBFilesClient\\SpellTargetRestrictions.dbc", + "DBFilesClient\\SpellSpecialUnitEffect.dbc", + "DBFilesClient\\SpellShapeshiftForm.dbc", + "DBFilesClient\\SpellShapeshift.dbc", + "DBFilesClient\\SpellScaling.dbc", + "DBFilesClient\\SpellProcsPerMinuteMod.dbc", + "DBFilesClient\\SpellProcsPerMinute.dbc", + "DBFilesClient\\SpellRange.dbc", + "DBFilesClient\\SpellRadius.dbc", + "DBFilesClient\\SpellLevels.dbc", + "DBFilesClient\\SpellKeyboundOverride.dbc", + "DBFilesClient\\SpellItemEnchantmentCondition.dbc", + "DBFilesClient\\SpellItemEnchantment.dbc", + "DBFilesClient\\SpellInterrupts.dbc", + "DBFilesClient\\SpellFocusObject.dbc", + "DBFilesClient\\SpellFlyoutItem.dbc", + "DBFilesClient\\SpellFlyout.dbc", + "DBFilesClient\\SpellEquippedItems.dbc", + "DBFilesClient\\SpellEffectScaling.dbc", + "DBFilesClient\\SpellDuration.dbc", + "DBFilesClient\\SpellDispelType.dbc", + "DBFilesClient\\SpellDescriptionVariables.dbc", + "DBFilesClient\\Spell.dbc", + "DBFilesClient\\SpellCooldowns.dbc", + "DBFilesClient\\SpellCategory.dbc", + "DBFilesClient\\SpellCategories.dbc", + "DBFilesClient\\SpellCastTimes.dbc", + "DBFilesClient\\SpellAuraVisXChrSpec.dbc", + "DBFilesClient\\SpellAuraVisibility.dbc", + "DBFilesClient\\SpellAuraOptions.dbc", + "DBFilesClient\\SpellActivationOverlay.dbc", + "DBFilesClient\\SpecializationSpells.dbc", + "DBFilesClient\\SoundOverride.dbc", + "DBFilesClient\\SoundAmbienceFlavor.dbc", + "DBFilesClient\\SoundAmbience.dbc", + "DBFilesClient\\SkillTiers.dbc", + "DBFilesClient\\SkillRaceClassInfo.dbc", + "DBFilesClient\\SkillLine.dbc", + "DBFilesClient\\SkillLineAbilitySortedSpell.dbc", + "DBFilesClient\\SkillLineAbility.dbc", + "DBFilesClient\\ServerMessages.dbc", + "DBFilesClient\\ScreenLocation.dbc", + "DBFilesClient\\ScreenEffect.dbc", + "DBFilesClient\\ScenarioEventEntry.dbc", + "DBFilesClient\\ScenarioStep.dbc", + "DBFilesClient\\Scenario.dbc", + "DBFilesClient\\ScalingStatDistribution.dbc", + "DBFilesClient\\RulesetRaidOverride.dbc", + "DBFilesClient\\RandPropPoints.dbc", + "DBFilesClient\\ResearchSite.dbc", + "DBFilesClient\\ResearchProject.dbc", + "DBFilesClient\\ResearchField.dbc", + "DBFilesClient\\ResearchBranch.dbc", + "DBFilesClient\\RacialMounts.dbc", + "DBFilesClient\\QuestFeedbackEffect.dbc", + "DBFilesClient\\QuestV2.dbc", + "DBFilesClient\\QuestXP.dbc", + "DBFilesClient\\QuestSort.dbc", + "DBFilesClient\\QuestPOIPoint.dbc", + "DBFilesClient\\QuestPOIBlob.dbc", + "DBFilesClient\\QuestMoneyReward.dbc", + "DBFilesClient\\QuestInfo.dbc", + "DBFilesClient\\QuestFactionReward.dbc", + "DBFilesClient\\PvpDifficulty.dbc", + "DBFilesClient\\PowerDisplay.dbc", + "DBFilesClient\\Phase.dbc", + "DBFilesClient\\PaperDollItemFrame.dbc", + "DBFilesClient\\PageTextMaterial.dbc", + "DBFilesClient\\Package.dbc", + "DBFilesClient\\NPCSounds.dbc", + "DBFilesClient\\MountType.dbc", + "DBFilesClient\\MountCapability.dbc", + "DBFilesClient\\ModifierTree.dbc", + "DBFilesClient\\MinorTalent.dbc", + "DBFilesClient\\Material.dbc", + "DBFilesClient\\MapDifficulty.dbc", + "DBFilesClient\\ManifestInterfaceItemIcon.dbc", + "DBFilesClient\\ManifestInterfaceActionIcon.dbc", + "DBFilesClient\\MailTemplate.dbc", + "DBFilesClient\\LockType.dbc", + "DBFilesClient\\Lock.dbc", + "DBFilesClient\\LoadingScreenTaxiSplines.dbc", + "DBFilesClient\\LfgDungeons.dbc", + "DBFilesClient\\LfgDungeonsGroupingMap.dbc", + "DBFilesClient\\LfgDungeonGroup.dbc", + "DBFilesClient\\LfgDungeonExpansion.dbc", + "DBFilesClient\\Languages.dbc", + "DBFilesClient\\JournalTierXInstance.dbc", + "DBFilesClient\\JournalTier.dbc", + "DBFilesClient\\JournalSectionXDifficulty.dbc", + "DBFilesClient\\JournalItemXDifficulty.dbc", + "DBFilesClient\\JournalInstance.dbc", + "DBFilesClient\\JournalEncounterXDifficulty.dbc", + "DBFilesClient\\JournalEncounterSection.dbc", + "DBFilesClient\\JournalEncounter.dbc", + "DBFilesClient\\JournalEncounterItem.dbc", + "DBFilesClient\\JournalEncounterCreature.dbc", + "DBFilesClient\\ItemUpgradePath.dbc", + "DBFilesClient\\ItemSubClassMask.dbc", + "DBFilesClient\\ItemSpec.dbc", + "DBFilesClient\\ItemSpecOverride.dbc", + "DBFilesClient\\ItemSetSpell.dbc", + "DBFilesClient\\ItemSet.dbc", + "DBFilesClient\\ItemRandomSuffix.dbc", + "DBFilesClient\\ItemRandomProperties.dbc", + "DBFilesClient\\ItemPurchaseGroup.dbc", + "DBFilesClient\\ItemPriceBase.dbc", + "DBFilesClient\\ItemPetFood.dbc", + "DBFilesClient\\ItemNameDescription.dbc", + "DBFilesClient\\ItemLimitCategory.dbc", + "DBFilesClient\\ItemGroupSounds.dbc", + "DBFilesClient\\ItemDisenchantLoot.dbc", + "DBFilesClient\\ItemDamageWand.dbc", + "DBFilesClient\\ItemDamageTwoHandCaster.dbc", + "DBFilesClient\\ItemDamageTwoHand.dbc", + "DBFilesClient\\ItemDamageThrown.dbc", + "DBFilesClient\\ItemDamageRanged.dbc", + "DBFilesClient\\ItemDamageOneHandCaster.dbc", + "DBFilesClient\\ItemDamageOneHand.dbc", + "DBFilesClient\\ItemDamageAmmo.dbc", + "DBFilesClient\\ItemBagFamily.dbc", + "DBFilesClient\\ItemArmorShield.dbc", + "DBFilesClient\\ItemArmorTotal.dbc", + "DBFilesClient\\ItemArmorQuality.dbc", + "DBFilesClient\\ImportPriceWeapon.dbc", + "DBFilesClient\\ImportPriceShield.dbc", + "DBFilesClient\\ImportPriceQuality.dbc", + "DBFilesClient\\ImportPriceArmor.dbc", + "DBFilesClient\\GuildPerkSpells.dbc", + "DBFilesClient\\gtSpellScaling.dbc", + "DBFilesClient\\gtResilienceDR.dbc", + "DBFilesClient\\gtRegenMPPerSpt.dbc", + "DBFilesClient\\gtOCTLevelExperience.dbc", + "DBFilesClient\\gtOCTHpPerStamina.dbc", + "DBFilesClient\\gtOCTClassCombatRatingScalar.dbc", + "DBFilesClient\\gtOCTBaseMPByClass.dbc", + "DBFilesClient\\gtOCTBaseHPByClass.dbc", + "DBFilesClient\\gtNPCManaCostScaler.dbc", + "DBFilesClient\\gtItemSocketCostPerLevel.dbc", + "DBFilesClient\\gtChanceToSpellCritBase.dbc", + "DBFilesClient\\gtChanceToSpellCrit.dbc", + "DBFilesClient\\gtChanceToMeleeCritBase.dbc", + "DBFilesClient\\gtChanceToMeleeCrit.dbc", + "DBFilesClient\\gtCombatRatings.dbc", + "DBFilesClient\\gtBattlePetXP.dbc", + "DBFilesClient\\gtBattlePetTypeDamageMod.dbc", + "DBFilesClient\\gtBarberShopCostBase.dbc", + "DBFilesClient\\gtArmorMitigationByLvl.dbc", + "DBFilesClient\\GMTicketCategory.dbc", + "DBFilesClient\\GMSurveySurveys.dbc", + "DBFilesClient\\GMSurveyQuestions.dbc", + "DBFilesClient\\GMSurveyCurrentSurvey.dbc", + "DBFilesClient\\GMSurveyAnswers.dbc", + "DBFilesClient\\GlyphSlot.dbc", + "DBFilesClient\\GlyphProperties.dbc", + "DBFilesClient\\GemProperties.dbc", + "DBFilesClient\\GarrUiAnimRaceInfo.dbc", + "DBFilesClient\\GarrUiAnimClassInfo.dbc", + "DBFilesClient\\GameTables.dbc", + "DBFilesClient\\GameObjectDisplayInfo.dbc", + "DBFilesClient\\GameObjectDiffAnimMap.dbc", + "DBFilesClient\\GameObjectArtKit.dbc", + "DBFilesClient\\FriendshipReputation.dbc", + "DBFilesClient\\FriendshipRepReaction.dbc", + "DBFilesClient\\FootstepTerrainLookup.dbc", + "DBFilesClient\\CriteriaTree.dbc", + "DBFilesClient\\Exhaustion.dbc", + "DBFilesClient\\EnvironmentalDamage.dbc", + "DBFilesClient\\EmotesText.dbc", + "DBFilesClient\\EmotesTextSound.dbc", + "DBFilesClient\\EmotesTextData.dbc", + "DBFilesClient\\Emotes.dbc", + "DBFilesClient\\DurabilityQuality.dbc", + "DBFilesClient\\DurabilityCosts.dbc", + "DBFilesClient\\DungeonMapChunk.dbc", + "DBFilesClient\\DungeonMap.dbc", + "DBFilesClient\\DungeonEncounter.dbc", + "DBFilesClient\\Difficulty.dbc", + "DBFilesClient\\DestructibleModelData.dbc", + "DBFilesClient\\DeathThudLookups.dbc", + "DBFilesClient\\CurrencyCategory.dbc", + "DBFilesClient\\CurrencyTypes.dbc", + "DBFilesClient\\CriteriaTreeXEffect.dbc", + "DBFilesClient\\Criteria.dbc", + "DBFilesClient\\CreatureType.dbc", + "DBFilesClient\\CreatureSpellData.dbc", + "DBFilesClient\\CreatureSoundData.dbc", + "DBFilesClient\\CreatureMovementInfo.dbc", + "DBFilesClient\\CreatureImmunities.dbc", + "DBFilesClient\\CombatCondition.dbc", + "DBFilesClient\\CinematicSequences.dbc", + "DBFilesClient\\CinematicCamera.dbc", + "DBFilesClient\\ChrClassesXPowerTypes.dbc", + "DBFilesClient\\ChatChannels.dbc", + "DBFilesClient\\CharTitles.dbc", + "DBFilesClient\\CastableRaidBuffs.dbc", + "DBFilesClient\\CameraShakes.dbc", + "DBFilesClient\\CameraMode.dbc", + "DBFilesClient\\BattlemasterList.dbc", + "DBFilesClient\\BarberShopStyle.dbc", + "DBFilesClient\\BankBagSlotPrices.dbc", + "DBFilesClient\\AuctionHouse.dbc", + "DBFilesClient\\ArmorLocation.dbc", + "DBFilesClient\\AreaTriggerCylinder.dbc", + "DBFilesClient\\AreaTriggerSphere.dbc", + "DBFilesClient\\AreaTriggerBox.dbc", + "DBFilesClient\\AreaTriggerActionSet.dbc", + "DBFilesClient\\AreaTrigger.dbc", + "DBFilesClient\\AreaAssignment.dbc", + "DBFilesClient\\AreaGroup.dbc", + "DBFilesClient\\Achievement_Category.dbc", + "DBFilesClient\\Achievement.dbc", + "DBFilesClient\\DeclinedWordCases.dbc", + "DBFilesClient\\DeclinedWord.dbc", + "DBFilesClient\\DeviceBlacklist.db2", + "DBFilesClient\\DriverBlacklist.db2", + "DBFilesClient\\DeviceDefaultSettings.db2", + "DBFilesClient\\WindSettings.db2", + "DBFilesClient\\ZoneLightPoint.dbc", + "DBFilesClient\\ZoneLight.dbc", + "DBFilesClient\\WMOAreaTable.dbc", + "DBFilesClient\\Weather.dbc", + "DBFilesClient\\TerrainType.dbc", + "DBFilesClient\\TerrainMaterial.dbc", + "DBFilesClient\\SpellChainEffects.dbc", + "DBFilesClient\\SoundEntriesFallbacks.dbc", + "DBFilesClient\\SoundEmitters.dbc", + "DBFilesClient\\SoundEmitterPillPoints.dbc", + "DBFilesClient\\SoundBusName.dbc", + "DBFilesClient\\LiquidType.dbc", + "DBFilesClient\\LiquidObject.dbc", + "DBFilesClient\\LiquidMaterial.dbc", + "DBFilesClient\\LightSkybox.dbc", + "DBFilesClient\\Light.dbc", + "DBFilesClient\\GroundEffectTexture.dbc", + "DBFilesClient\\GroundEffectDoodad.dbc", + "DBFilesClient\\FootprintTextures.dbc", + "DBFilesClient\\FeedbackPath.dbc", + "DBFilesClient\\Map.dbc", + "DBFilesClient\\LightParams.dbc", + "DBFilesClient\\LightData.dbc", + "DBFilesClient\\AreaTable.dbc", + "DBFilesClient\\AnimationData.dbc", + "DBFilesClient\\SoundEntries.dbc", + "DBFilesClient\\SoundEntriesAdvanced.dbc", + "DBFilesClient\\SoundBus.dbc", + "DBFilesClient\\ModelFileData.dbc", + "DBFilesClient\\ManifestMP3.dbc", + "DBFilesClient\\FileData.dbc", + nullptr // terminator +}; + +#endif // DBFilesClientList_h__ diff --git a/src/tools/map_extractor/loadlib/loadlib.h b/src/tools/map_extractor/loadlib/loadlib.h index 2bea59e2c97..873aa3346b6 100644 --- a/src/tools/map_extractor/loadlib/loadlib.h +++ b/src/tools/map_extractor/loadlib/loadlib.h @@ -19,7 +19,9 @@ #ifndef LOAD_LIB_H #define LOAD_LIB_H -#include "StormLib.h" +#include "CascLib.h" +#include <map> +#include <string> #ifdef _WIN32 typedef __int64 int64; @@ -71,21 +73,41 @@ struct file_MVER }; -class FileLoader{ +class FileChunk +{ +public: + ~FileChunk(); + + uint8* data; + uint32 size; + + template<class T> + T* As() { return (T*)data; } + void parseSubChunks(); + std::multimap<std::string, FileChunk*> subchunks; + FileChunk* GetSubChunk(std::string const& name); +}; + +class ChunkedFile +{ +public: uint8 *data; uint32 data_size; -public: - virtual bool prepareLoadedData(); - uint8 *GetData() {return data;} - uint32 GetDataSize() {return data_size;} - file_MVER *version; - FileLoader(); - ~FileLoader(); + uint8 *GetData() { return data; } + uint32 GetDataSize() { return data_size; } + + ChunkedFile(); + virtual ~ChunkedFile(); + bool prepareLoadedData(); bool loadFile(HANDLE mpq, char *filename, bool log = true); - virtual void free(); -}; + void free(); + void parseChunks(); + std::multimap<std::string, FileChunk*> chunks; + FileChunk* GetChunk(std::string const& name); +}; + #pragma pack(pop) #endif diff --git a/src/tools/map_extractor/wdt.cpp b/src/tools/map_extractor/wdt.cpp deleted file mode 100644 index 59444b46b88..00000000000 --- a/src/tools/map_extractor/wdt.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (C) 2008-2014 TrinityCore <http://www.trinitycore.org/> - * Copyright (C) 2005-2011 MaNGOS <http://getmangos.com/> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#define _CRT_SECURE_NO_DEPRECATE - -#include "wdt.h" - -u_map_fcc MWMOMagic = { {'O', 'M', 'W', 'M'} }; -u_map_fcc MPHDMagic = { {'D', 'H', 'P', 'M'} }; -u_map_fcc MAINMagic = { {'N', 'I', 'A', 'M'} }; - -bool wdt_MWMO::prepareLoadedData() -{ - if (fcc != MWMOMagic.fcc) - return false; - return true; -} - -bool wdt_MPHD::prepareLoadedData() -{ - if (fcc != MPHDMagic.fcc) - return false; - return true; -} - -bool wdt_MAIN::prepareLoadedData() -{ - if (fcc != MAINMagic.fcc) - return false; - return true; -} - -WDT_file::WDT_file() -{ - mphd = 0; - main = 0; - wmo = 0; -} - -WDT_file::~WDT_file() -{ - free(); -} - -void WDT_file::free() -{ - mphd = 0; - main = 0; - wmo = 0; - FileLoader::free(); -} - -bool WDT_file::prepareLoadedData() -{ - // Check parent - if (!FileLoader::prepareLoadedData()) - return false; - - mphd = (wdt_MPHD *)((uint8*)version+version->size+8); - if (!mphd->prepareLoadedData()) - return false; - main = (wdt_MAIN *)((uint8*)mphd + mphd->size+8); - if (!main->prepareLoadedData()) - return false; - wmo = (wdt_MWMO *)((uint8*)main+ main->size+8); - if (!wmo->prepareLoadedData()) - wmo = NULL; // optional as of cataclysm - return true; -} diff --git a/src/tools/map_extractor/wdt.h b/src/tools/map_extractor/wdt.h index d897cbfd854..ac26e7daade 100644 --- a/src/tools/map_extractor/wdt.h +++ b/src/tools/map_extractor/wdt.h @@ -27,64 +27,24 @@ #pragma pack(push, 1) -class wdt_MWMO{ - union{ - uint32 fcc; - char fcc_txt[4]; - }; -public: - uint32 size; - bool prepareLoadedData(); -}; - -class wdt_MPHD{ - union{ - uint32 fcc; - char fcc_txt[4]; - }; -public: - uint32 size; - uint32 data1; - uint32 data2; - uint32 data3; - uint32 data4; - uint32 data5; - uint32 data6; - uint32 data7; - uint32 data8; - bool prepareLoadedData(); -}; - -class wdt_MAIN{ - union{ +class wdt_MAIN +{ + union + { uint32 fcc; char fcc_txt[4]; }; public: uint32 size; - struct adtData{ + struct adtData + { uint32 flag; uint32 data1; } adt_list[64][64]; - - bool prepareLoadedData(); -}; - -class WDT_file : public FileLoader{ -public: - bool prepareLoadedData(); - - WDT_file(); - ~WDT_file(); - void free(); - - wdt_MPHD *mphd; - wdt_MAIN *main; - wdt_MWMO *wmo; }; #pragma pack(pop) -#endif
\ No newline at end of file +#endif diff --git a/src/tools/vmap4_assembler/CMakeLists.txt b/src/tools/vmap4_assembler/CMakeLists.txt index 041d44e014c..14d5c5e61ba 100644 --- a/src/tools/vmap4_assembler/CMakeLists.txt +++ b/src/tools/vmap4_assembler/CMakeLists.txt @@ -21,7 +21,7 @@ include_directories( ) add_executable(vmap4assembler VMapAssembler.cpp) -add_dependencies(vmap4assembler storm) +add_dependencies(vmap4assembler casc) target_link_libraries(vmap4assembler collision diff --git a/src/tools/vmap4_extractor/CMakeLists.txt b/src/tools/vmap4_extractor/CMakeLists.txt index a98cc55666c..f1c2084b00b 100644 --- a/src/tools/vmap4_extractor/CMakeLists.txt +++ b/src/tools/vmap4_extractor/CMakeLists.txt @@ -22,7 +22,7 @@ if( NOT MSVC ) endif() include_directories( - ${CMAKE_SOURCE_DIR}/dep/StormLib/src + ${CMAKE_SOURCE_DIR}/dep/CascLib/src ) add_executable(vmap4extractor ${sources}) @@ -30,10 +30,10 @@ add_executable(vmap4extractor ${sources}) target_link_libraries(vmap4extractor ${BZIP2_LIBRARIES} ${ZLIB_LIBRARIES} - storm + casc ) -add_dependencies(vmap4extractor storm) +add_dependencies(vmap4extractor casc) if( UNIX ) install(TARGETS vmap4extractor DESTINATION bin) |