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/server/game/Entities | |
| parent | 56e0459b07a1e09b541dd77ce7d357f0905e302e (diff) | |
Core/Units: Implemented animkit support
Diffstat (limited to 'src/server/game/Entities')
| -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 |
3 files changed, 76 insertions, 16 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 |
