Core/Units: Implemented animkit support
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user