aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2014-08-30 21:09:46 +0200
committerShauren <shauren.trinity@gmail.com>2014-08-30 21:09:46 +0200
commit02e9405e8eb5ecc1a10cafc32407f4de4ce73b2e (patch)
tree147577c1cbb1e961d77a913e9f264fbe15a44525 /src/server/game/Entities
parent56e0459b07a1e09b541dd77ce7d357f0905e302e (diff)
Core/Units: Implemented animkit support
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Object/Object.cpp31
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp49
-rw-r--r--src/server/game/Entities/Unit/Unit.h12
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