Core/Units: Implemented animkit support

This commit is contained in:
Shauren
2014-08-30 21:09:46 +02:00
parent 56e0459b07
commit 02e9405e8e
5 changed files with 82 additions and 19 deletions
+19 -12
View File
@@ -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)
{
+46 -3
View File
@@ -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);
}
+11 -1
View File
@@ -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
@@ -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 );
+3 -3
View File
@@ -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,