aboutsummaryrefslogtreecommitdiff
path: root/src
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
parent56e0459b07a1e09b541dd77ce7d357f0905e302e (diff)
Core/Units: Implemented animkit support
Diffstat (limited to 'src')
-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
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp3
-rw-r--r--src/server/game/Server/Protocol/Opcodes.h6
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,