diff options
author | Shauren <shauren.trinity@gmail.com> | 2014-08-30 21:09:46 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2014-08-30 21:09:46 +0200 |
commit | 02e9405e8eb5ecc1a10cafc32407f4de4ce73b2e (patch) | |
tree | 147577c1cbb1e961d77a913e9f264fbe15a44525 /src | |
parent | 56e0459b07a1e09b541dd77ce7d357f0905e302e (diff) |
Core/Units: Implemented animkit support
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 31 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 49 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.h | 6 |
5 files changed, 82 insertions, 19 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 32a9496803d..4fc84906df8 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -237,9 +237,14 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c } if (Unit const* unit = ToUnit()) + { if (unit->GetVictim()) flags |= UPDATEFLAG_HAS_TARGET; + if (unit->GetAIAnimKitId() || unit->GetMovementAnimKitId() || unit->GetMeleeAnimKitId()) + flags |= UPDATEFLAG_ANIMKITS; + } + ByteBuffer buf(500); buf << uint8(updateType); buf.append(GetPackGUID()); @@ -472,9 +477,10 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const if (flags & UPDATEFLAG_ANIMKITS) { - data->WriteBit(1); // Missing AnimKit1 - data->WriteBit(1); // Missing AnimKit2 - data->WriteBit(1); // Missing AnimKit3 + Unit const* unit = ToUnit(); + data->WriteBit(unit->GetAIAnimKitId() == 0); + data->WriteBit(unit->GetMovementAnimKitId() == 0); + data->WriteBit(unit->GetMeleeAnimKitId() == 0); } data->FlushBits(); @@ -642,15 +648,16 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const data->WriteByteSeq(victimGuid[1]); } - //if (flags & UPDATEFLAG_ANIMKITS) - //{ - // if (hasAnimKit1) - // *data << uint16(animKit1); - // if (hasAnimKit2) - // *data << uint16(animKit2); - // if (hasAnimKit3) - // *data << uint16(animKit3); - //} + if (flags & UPDATEFLAG_ANIMKITS) + { + Unit const* unit = ToUnit(); + if (unit->GetAIAnimKitId()) + *data << uint16(unit->GetAIAnimKitId()); + if (unit->GetMovementAnimKitId()) + *data << uint16(unit->GetMovementAnimKitId()); + if (unit->GetMeleeAnimKitId()) + *data << uint16(unit->GetMeleeAnimKitId()); + } if (flags & UPDATEFLAG_TRANSPORT) { diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4b8522b7b08..f6615d67c99 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -253,6 +253,10 @@ Unit::Unit(bool isWorldObject) : _oldFactionId = 0; _isWalkingBeforeCharm = false; + + _aiAnimKitId = 0; + _movementAnimKitId = 0; + _meleeAnimKitId = 0; } //////////////////////////////////////////////////////////// @@ -13589,11 +13593,50 @@ void Unit::SendDurabilityLoss(Player* receiver, uint32 percent) receiver->GetSession()->SendPacket(&data); } -void Unit::PlayOneShotAnimKit(uint32 id) +void Unit::SetAIAnimKitId(uint16 animKitId) +{ + if (_aiAnimKitId == animKitId) + return; + + _aiAnimKitId = animKitId; + + WorldPacket data(SMSG_SET_AI_ANIM_KIT, 8 + 2); + data.append(GetPackGUID()); + data << uint16(animKitId); + SendMessageToSet(&data, true); +} + +void Unit::SetMovementAnimKitId(uint16 animKitId) +{ + if (_movementAnimKitId == animKitId) + return; + + _movementAnimKitId = animKitId; + + WorldPacket data(SMSG_SET_MOVEMENT_ANIM_KIT, 8 + 2); + data.append(GetPackGUID()); + data << uint16(animKitId); + SendMessageToSet(&data, true); +} + +void Unit::SetMeleeAnimKitId(uint16 animKitId) +{ + if (_meleeAnimKitId == animKitId) + return; + + _meleeAnimKitId = animKitId; + + WorldPacket data(SMSG_SET_MELEE_ANIM_KIT, 8 + 2); + data.append(GetPackGUID()); + data << uint16(animKitId); + SendMessageToSet(&data, true); +} + +void Unit::PlayOneShotAnimKit(uint16 animKitId) { WorldPacket data(SMSG_PLAY_ONE_SHOT_ANIM_KIT, 7+2); - data.appendPackGUID(GetGUID()); - data << uint16(id); + data.append(GetPackGUID()); + data << uint16(animKitId); SendMessageToSet(&data, true); } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index b9d3a287456..acf9875ad55 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1464,7 +1464,13 @@ class Unit : public WorldObject MountCapabilityEntry const* GetMountCapability(uint32 mountType) const; void SendDurabilityLoss(Player* receiver, uint32 percent); - void PlayOneShotAnimKit(uint32 id); + uint16 GetAIAnimKitId() const { return _aiAnimKitId; } + void SetAIAnimKitId(uint16 animKitId); + uint16 GetMovementAnimKitId() const { return _movementAnimKitId; } + void SetMovementAnimKitId(uint16 animKitId); + uint16 GetMeleeAnimKitId() const { return _meleeAnimKitId; } + void SetMeleeAnimKitId(uint16 animKitId); + void PlayOneShotAnimKit(uint16 animKitId); uint16 GetMaxSkillValueForLevel(Unit const* target = NULL) const { return (target ? getLevelForTarget(target) : getLevel()) * 5; } void DealDamageMods(Unit* victim, uint32 &damage, uint32* absorb); @@ -2290,6 +2296,10 @@ class Unit : public WorldObject bool _isWalkingBeforeCharm; ///< Are we walking before we were charmed? time_t _lastDamagedTime; // Part of Evade mechanics + + uint16 _aiAnimKitId; + uint16 _movementAnimKitId; + uint16 _meleeAnimKitId; }; namespace Trinity diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 63fe4dd3743..53424cca508 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1150,12 +1150,15 @@ void OpcodeTable::Initialize() DEFINE_OPCODE_HANDLER(SMSG_SERVER_INFO_RESPONSE, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SERVER_MESSAGE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SERVER_PERF, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_SET_AI_ANIM_KIT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_DF_FAST_LAUNCH_RESULT, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FACTION_ATWAR, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FACTION_STANDING, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FACTION_VISIBLE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FLAT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_FORCED_REACTIONS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_SET_MELEE_ANIM_KIT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + DEFINE_OPCODE_HANDLER(SMSG_SET_MOVEMENT_ANIM_KIT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_PCT_SPELL_MODIFIER, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_PHASE_SHIFT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); DEFINE_OPCODE_HANDLER(SMSG_SET_PLAYER_DECLINED_NAMES_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); diff --git a/src/server/game/Server/Protocol/Opcodes.h b/src/server/game/Server/Protocol/Opcodes.h index c26f018eabf..7239f220c3d 100644 --- a/src/server/game/Server/Protocol/Opcodes.h +++ b/src/server/game/Server/Protocol/Opcodes.h @@ -1221,15 +1221,15 @@ enum Opcodes SMSG_SERVER_INFO_RESPONSE = 0x74B5, SMSG_SERVER_MESSAGE = 0x6C04, SMSG_SERVER_PERF = 0x74B6, - SMSG_SET_AI_ANIM_KIT = 0x0000, + SMSG_SET_AI_ANIM_KIT = 0x4626, SMSG_SET_DF_FAST_LAUNCH_RESULT = 0x35B6, SMSG_SET_FACTION_ATWAR = 0x4216, SMSG_SET_FACTION_STANDING = 0x0126, SMSG_SET_FACTION_VISIBLE = 0x2525, SMSG_SET_FLAT_SPELL_MODIFIER = 0x2834, SMSG_SET_FORCED_REACTIONS = 0x4615, - SMSG_SET_MELEE_ANIM_KIT = 0x0000, - SMSG_SET_MOVEMENT_ANIM_KIT = 0x0000, + SMSG_SET_MELEE_ANIM_KIT = 0x6715, + SMSG_SET_MOVEMENT_ANIM_KIT = 0x0F14, SMSG_SET_PCT_SPELL_MODIFIER = 0x0224, SMSG_SET_PHASE_SHIFT = 0x70A0, SMSG_SET_PLAYER_DECLINED_NAMES_RESULT = 0x2B25, |