diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 52 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.h | 13 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 52 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 10 | ||||
-rw-r--r-- | src/server/game/Garrison/Garrison.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GameObjectPackets.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GameObjectPackets.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GarrisonPackets.h | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Server/Packets/MiscPackets.h | 22 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 10 |
13 files changed, 159 insertions, 72 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index ac2ab48c242..486cf79f5cf 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -36,7 +36,7 @@ #include "Transport.h" GameObject::GameObject() : WorldObject(false), MapObject(), - m_model(NULL), m_goValue(), m_AI(NULL) + m_model(NULL), m_goValue(), m_AI(NULL), _animKitId(0) { m_objectType |= TYPEMASK_GAMEOBJECT; m_objectTypeId = TYPEID_GAMEOBJECT; @@ -2426,6 +2426,26 @@ void GameObject::UpdateModelPosition() } } +void GameObject::SetAnimKitId(uint16 animKitId, bool oneshot) +{ + if (_animKitId == animKitId) + return; + + if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) + return; + + if (!oneshot) + _animKitId = animKitId; + else + _animKitId = 0; + + WorldPackets::GameObject::GameObjectActivateAnimKit activateAnimKit; + activateAnimKit.ObjectGUID = GetGUID(); + activateAnimKit.AnimKitID = animKitId; + activateAnimKit.Maintain = !oneshot; + SendMessageToSet(activateAnimKit.Write(), true); +} + class GameObjectModelOwnerImpl : public GameObjectModelOwnerBase { public: diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 53c52f9ec5b..e81b3fe424d 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -1083,6 +1083,9 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map void UpdateModelPosition(); + uint16 GetAIAnimKitId() const override { return _animKitId; } + void SetAnimKitId(uint16 animKitId, bool oneshot); + protected: bool AIM_Initialize(); GameObjectModel* CreateModel(); @@ -1127,5 +1130,6 @@ class GameObject : public WorldObject, public GridObject<GameObject>, public Map } GameObjectAI* m_AI; + uint16 _animKitId; }; #endif diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 95a2485bc7a..9e6ceda9f66 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1442,9 +1442,7 @@ void MovementInfo::OutDebug() WorldObject::WorldObject(bool isWorldObject) : WorldLocation(), LastUsedScriptID(0), m_name(""), m_isActive(false), m_isWorldObject(isWorldObject), m_zoneScript(NULL), m_transport(NULL), m_currMap(NULL), m_InstanceId(0), -m_phaseMask(PHASEMASK_NORMAL), _dbPhase(0), m_notifyflags(0), m_executed_notifies(0), -m_aiAnimKitId(0), m_movementAnimKitId(0), m_meleeAnimKitId(0) - +m_phaseMask(PHASEMASK_NORMAL), _dbPhase(0), m_notifyflags(0), m_executed_notifies(0) { m_serverSideVisibility.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE | GHOST_VISIBILITY_GHOST); m_serverSideVisibilityDetect.SetValue(SERVERSIDE_VISIBILITY_GHOST, GHOST_VISIBILITY_ALIVE); @@ -3108,54 +3106,6 @@ ObjectGuid WorldObject::GetTransGUID() const return ObjectGuid::Empty; } -void WorldObject::SetAIAnimKitId(uint16 animKitId) -{ - if (m_aiAnimKitId == animKitId) - return; - - if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) - return; - - m_aiAnimKitId = animKitId; - - WorldPackets::Misc::SetAIAnimKit data; - data.Unit = GetGUID(); - data.AnimKitID = animKitId; - SendMessageToSet(data.Write(), true); -} - -void WorldObject::SetMovementAnimKitId(uint16 animKitId) -{ - if (m_movementAnimKitId == animKitId) - return; - - if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) - return; - - m_movementAnimKitId = animKitId; - - WorldPacket data(SMSG_SET_MOVEMENT_ANIM_KIT, 8 + 2); - data << GetPackGUID(); - data << uint16(animKitId); - SendMessageToSet(&data, true); -} - -void WorldObject::SetMeleeAnimKitId(uint16 animKitId) -{ - if (m_meleeAnimKitId == animKitId) - return; - - if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) - return; - - m_meleeAnimKitId = animKitId; - - WorldPacket data(SMSG_SET_MELEE_ANIM_KIT, 8 + 2); - data << GetPackGUID(); - data << uint16(animKitId); - SendMessageToSet(&data, true); -} - void WorldObject::RebuildTerrainSwaps() { // Clear all terrain swaps, will be rebuilt below diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 9be3dddf456..42e5137e6f9 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -649,12 +649,9 @@ class WorldObject : public Object, public WorldLocation virtual float GetStationaryZ() const { return GetPositionZ(); } virtual float GetStationaryO() const { return GetOrientation(); } - uint16 GetAIAnimKitId() const { return m_aiAnimKitId; } - void SetAIAnimKitId(uint16 animKitId); - uint16 GetMovementAnimKitId() const { return m_movementAnimKitId; } - void SetMovementAnimKitId(uint16 animKitId); - uint16 GetMeleeAnimKitId() const { return m_meleeAnimKitId; } - void SetMeleeAnimKitId(uint16 animKitId); + virtual uint16 GetAIAnimKitId() const { return 0; } + virtual uint16 GetMovementAnimKitId() const { return 0; } + virtual uint16 GetMeleeAnimKitId() const { return 0; } protected: std::string m_name; @@ -696,10 +693,6 @@ class WorldObject : public Object, public WorldLocation bool CanDetect(WorldObject const* obj, bool ignoreStealth, bool checkAlert = false) const; bool CanDetectInvisibilityOf(WorldObject const* obj) const; bool CanDetectStealthOf(WorldObject const* obj, bool checkAlert = false) const; - - uint16 m_aiAnimKitId; - uint16 m_movementAnimKitId; - uint16 m_meleeAnimKitId; }; namespace Trinity diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index f0bb1d80d53..1b9c2f02e61 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -201,7 +201,9 @@ Unit::Unit(bool isWorldObject) : i_AI(NULL), i_disabledAI(NULL), m_AutoRepeatFirstCast(false), m_procDeep(0), m_removedAurasCount(0), i_motionMaster(new MotionMaster(this)), m_regenTimer(0), m_ThreatManager(this), m_vehicle(NULL), m_vehicleKit(NULL), m_unitTypeMask(UNIT_MASK_NONE), - m_HostileRefManager(this), _lastDamagedTime(0), _spellHistory(new SpellHistory(this)) + m_HostileRefManager(this), _lastDamagedTime(0), + _aiAnimKitId(0), _movementAnimKitId(0), _meleeAnimKitId(0), + _spellHistory(new SpellHistory(this)) { m_objectType |= TYPEMASK_UNIT; m_objectTypeId = TYPEID_UNIT; @@ -13422,6 +13424,54 @@ void Unit::SendDurabilityLoss(Player* receiver, uint32 percent) receiver->GetSession()->SendPacket(packet.Write()); } +void Unit::SetAIAnimKitId(uint16 animKitId) +{ + if (_aiAnimKitId == animKitId) + return; + + if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) + return; + + _aiAnimKitId = animKitId; + + WorldPackets::Misc::SetAIAnimKit data; + data.Unit = GetGUID(); + data.AnimKitID = animKitId; + SendMessageToSet(data.Write(), true); +} + +void Unit::SetMovementAnimKitId(uint16 animKitId) +{ + if (_movementAnimKitId == animKitId) + return; + + if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) + return; + + _movementAnimKitId = animKitId; + + WorldPackets::Misc::SetMovementAnimKit data; + data.Unit = GetGUID(); + data.AnimKitID = animKitId; + SendMessageToSet(data.Write(), true); +} + +void Unit::SetMeleeAnimKitId(uint16 animKitId) +{ + if (_meleeAnimKitId == animKitId) + return; + + if (animKitId && !sAnimKitStore.LookupEntry(animKitId)) + return; + + _meleeAnimKitId = animKitId; + + WorldPackets::Misc::SetMeleeAnimKit data; + data.Unit = GetGUID(); + data.AnimKitID = animKitId; + SendMessageToSet(data.Write(), true); +} + void Unit::PlayOneShotAnimKit(uint16 animKitId) { WorldPacket data(SMSG_PLAY_ONE_SHOT_ANIM_KIT, 7+2); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index de38e50c378..e13c8354d2a 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1490,6 +1490,12 @@ class Unit : public WorldObject MountCapabilityEntry const* GetMountCapability(uint32 mountType) const; void SendDurabilityLoss(Player* receiver, uint32 percent); + void SetAIAnimKitId(uint16 animKitId); + uint16 GetAIAnimKitId() const override { return _aiAnimKitId; } + void SetMovementAnimKitId(uint16 animKitId); + uint16 GetMovementAnimKitId() const override { return _movementAnimKitId; } + void SetMeleeAnimKitId(uint16 animKitId); + uint16 GetMeleeAnimKitId() const override { return _meleeAnimKitId; } void PlayOneShotAnimKit(uint16 animKitId); uint16 GetMaxSkillValueForLevel(Unit const* target = NULL) const { return (target ? getLevelForTarget(target) : getLevel()) * 5; } @@ -1908,6 +1914,10 @@ class Unit : public WorldObject int32 GetCurrentSpellCastTime(uint32 spell_id) const; virtual SpellInfo const* GetCastSpellInfo(SpellInfo const* spellInfo) const; + uint16 _aiAnimKitId; + uint16 _movementAnimKitId; + uint16 _meleeAnimKitId; + SpellHistory* GetSpellHistory() { return _spellHistory; } SpellHistory const* GetSpellHistory() const { return _spellHistory; } diff --git a/src/server/game/Garrison/Garrison.cpp b/src/server/game/Garrison/Garrison.cpp index b52ebdd9808..9126252ee60 100644 --- a/src/server/game/Garrison/Garrison.cpp +++ b/src/server/game/Garrison/Garrison.cpp @@ -734,7 +734,7 @@ GameObject* Garrison::Plot::CreateGameObject(Map* map, GarrisonFactionIndex fact finalizer->SetRespawnTime(0); if (uint16 animKit = finalizeInfo->FactionInfo[faction].AnimKitId) - finalizer->SetAIAnimKitId(animKit); + finalizer->SetAnimKitId(animKit, false); map->AddToMap(finalizer); } diff --git a/src/server/game/Server/Packets/GameObjectPackets.cpp b/src/server/game/Server/Packets/GameObjectPackets.cpp index c52a1974635..56498e44690 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.cpp +++ b/src/server/game/Server/Packets/GameObjectPackets.cpp @@ -38,3 +38,13 @@ WorldPacket const* WorldPackets::GameObject::PageText::Write() _worldPacket << GameObjectGUID; return &_worldPacket; } + +WorldPacket const* WorldPackets::GameObject::GameObjectActivateAnimKit::Write() +{ + _worldPacket << ObjectGUID; + _worldPacket << uint32(AnimKitID); + _worldPacket.WriteBit(Maintain); + _worldPacket.FlushBits(); + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/GameObjectPackets.h b/src/server/game/Server/Packets/GameObjectPackets.h index 6478293a9b7..5e0207190df 100644 --- a/src/server/game/Server/Packets/GameObjectPackets.h +++ b/src/server/game/Server/Packets/GameObjectPackets.h @@ -66,6 +66,18 @@ namespace WorldPackets ObjectGuid GameObjectGUID; }; + + class GameObjectActivateAnimKit final : public ServerPacket + { + public: + GameObjectActivateAnimKit() : ServerPacket(SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT, 16 + 4 + 1) { } + + WorldPacket const* Write() override; + + ObjectGuid ObjectGUID; + int32 AnimKitID = 0; + bool Maintain = false; + }; } } #endif // GOPackets_h__ diff --git a/src/server/game/Server/Packets/GarrisonPackets.h b/src/server/game/Server/Packets/GarrisonPackets.h index 7f5c4da424b..c678d89aaeb 100644 --- a/src/server/game/Server/Packets/GarrisonPackets.h +++ b/src/server/game/Server/Packets/GarrisonPackets.h @@ -87,7 +87,7 @@ namespace WorldPackets uint32 CurrentBuildingID = 0; uint32 CurrentMissionID = 0; std::list<GarrAbilityEntry const*> AbilityID; - uint32 FollowerStatus; + uint32 FollowerStatus = 0; std::string CustomName; }; @@ -105,8 +105,8 @@ namespace WorldPackets struct GarrisonMissionAreaBonus { - uint32 GarrMssnBonusAbilityID; - time_t StartTime; + uint32 GarrMssnBonusAbilityID = 0; + time_t StartTime = time_t(0); }; class GetGarrisonInfoResult final : public ServerPacket diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index b1799a1aa64..8617e56a841 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -532,6 +532,22 @@ WorldPacket const* WorldPackets::Misc::SetAIAnimKit::Write() return &_worldPacket; } +WorldPacket const* WorldPackets::Misc::SetMovementAnimKit::Write() +{ + _worldPacket << Unit; + _worldPacket << uint16(AnimKitID); + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Misc::SetMeleeAnimKit::Write() +{ + _worldPacket << Unit; + _worldPacket << uint16(AnimKitID); + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Misc::SetPlayHoverAnim::Write() { _worldPacket << UnitGUID; diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 749b9516e82..423a6ccbc8d 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -676,6 +676,28 @@ namespace WorldPackets uint16 AnimKitID = 0; }; + class SetMovementAnimKit final : public ServerPacket + { + public: + SetMovementAnimKit() : ServerPacket(SMSG_SET_MOVEMENT_ANIM_KIT, 16 + 2) { } + + WorldPacket const* Write() override; + + ObjectGuid Unit; + uint16 AnimKitID = 0; + }; + + class SetMeleeAnimKit final : public ServerPacket + { + public: + SetMeleeAnimKit() : ServerPacket(SMSG_SET_MELEE_ANIM_KIT, 16 + 2) { } + + WorldPacket const* Write() override; + + ObjectGuid Unit; + uint16 AnimKitID = 0; + }; + class SetPlayHoverAnim final : public ServerPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index a214fd44556..f5f7e3c4abf 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1100,7 +1100,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_ANIM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_OBJECT_RELINK, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_FRIEND_STATUS, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_ACTIVATE_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_CUSTOM_ANIM, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_DESPAWN, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GAME_OBJECT_PLAY_SPELL_VISUAL, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); @@ -1602,7 +1602,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SERVER_TIME, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SETUP_RESEARCH_HISTORY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ALL_TASK_PROGRESS, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ANIM_TIER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_CURRENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); @@ -1617,12 +1617,12 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_ITEM_PURCHASE_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_LOOT_METHOD_FAILED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MAX_WEEKLY_QUANTITY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MELEE_ANIM_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MOVEMENT_ANIM_KIT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MELEE_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_MOVEMENT_ANIM_KIT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PCT_SPELL_MODIFIER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PET_SPECIALIZATION, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PLAY_HOVER_ANIM, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PLAY_HOVER_ANIM, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_PROFICIENCY, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_SPELL_CHARGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_SET_TASK_COMPLETE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); |