Core/PacketIO: Updated and enabled CMSG_UPDATE_MISSILE_TRAJECTORY

This commit is contained in:
Carbenium
2016-02-03 15:10:58 +01:00
parent f269335bb2
commit 6715a91907
6 changed files with 69 additions and 45 deletions
-42
View File
@@ -1034,48 +1034,6 @@ void WorldSession::HandleInstanceLockResponse(WorldPackets::Instance::InstanceLo
_player->SetPendingBind(0, 0);
}
void WorldSession::HandleUpdateMissileTrajectory(WorldPacket& recvPacket)
{
ObjectGuid guid;
uint32 spellId;
float pitch, speed;
float curX, curY, curZ;
float targetX, targetY, targetZ;
uint8 moveStop;
recvPacket >> guid >> spellId >> pitch >> speed;
recvPacket >> curX >> curY >> curZ;
recvPacket >> targetX >> targetY >> targetZ;
recvPacket >> moveStop;
Unit* caster = ObjectAccessor::GetUnit(*_player, guid);
Spell* spell = caster ? caster->GetCurrentSpell(CURRENT_GENERIC_SPELL) : NULL;
if (!spell || spell->m_spellInfo->Id != spellId || !spell->m_targets.HasDst() || !spell->m_targets.HasSrc())
{
recvPacket.rfinish();
return;
}
Position pos = *spell->m_targets.GetSrcPos();
pos.Relocate(curX, curY, curZ);
spell->m_targets.ModSrc(pos);
pos = *spell->m_targets.GetDstPos();
pos.Relocate(targetX, targetY, targetZ);
spell->m_targets.ModDst(pos);
spell->m_targets.SetPitch(pitch);
spell->m_targets.SetSpeed(speed);
if (moveStop)
{
uint32 opcode;
recvPacket >> opcode;
recvPacket.SetOpcode(CMSG_MOVE_STOP); // always set to CMSG_MOVE_STOP in client SetOpcode
//HandleMovementOpcodes(recvPacket);
}
}
void WorldSession::HandleViolenceLevel(WorldPackets::Misc::ViolenceLevel& /*violenceLevel*/)
{
// do something?
+28
View File
@@ -585,6 +585,34 @@ void WorldSession::HandleMissileTrajectoryCollision(WorldPackets::Spells::Missil
caster->SendMessageToSet(&data, true);
}
void WorldSession::HandleUpdateMissileTrajectory(WorldPackets::Spells::UpdateMissileTrajectory& packet)
{
Unit* caster = ObjectAccessor::GetUnit(*_player, packet.Guid);
Spell* spell = caster ? caster->GetCurrentSpell(CURRENT_GENERIC_SPELL) : NULL;
if (!spell || spell->m_spellInfo->Id != packet.SpellID || !spell->m_targets.HasDst() || !spell->m_targets.HasSrc())
return;
Position pos = *spell->m_targets.GetSrcPos();
pos.Relocate(packet.FirePos);
spell->m_targets.ModSrc(pos);
pos = *spell->m_targets.GetDstPos();
pos.Relocate(packet.ImpactPos);
spell->m_targets.ModDst(pos);
spell->m_targets.SetPitch(packet.Pitch);
spell->m_targets.SetSpeed(packet.Speed);
if (packet.Status.is_initialized())
{
GetPlayer()->ValidateMovementInfo(packet.Status.get_ptr());
/*uint32 opcode;
recvPacket >> opcode;
recvPacket.SetOpcode(CMSG_MOVE_STOP); // always set to CMSG_MOVE_STOP in client SetOpcode
//HandleMovementOpcodes(recvPacket);*/
}
}
void WorldSession::HandleRequestCategoryCooldowns(WorldPackets::Spells::RequestCategoryCooldowns& /*requestCategoryCooldowns*/)
{
_player->SendSpellCategoryCooldowns();
@@ -807,3 +807,23 @@ void WorldPackets::Spells::MissileTrajectoryCollision::Read()
_worldPacket >> CastID;
_worldPacket >> CollisionPos.PositionXYZStream();
}
void WorldPackets::Spells::UpdateMissileTrajectory::Read()
{
_worldPacket >> Guid;
_worldPacket >> MoveMsgID;
_worldPacket >> SpellID;
_worldPacket >> Pitch;
_worldPacket >> Speed;
_worldPacket >> FirePos.PositionXYZStream();
_worldPacket >> ImpactPos.PositionXYZStream();
bool hasStatus = _worldPacket.ReadBit();
_worldPacket.ResetBitPos();
if (hasStatus)
{
MovementInfo info;
_worldPacket >> info;
Status = info;
}
}
@@ -837,6 +837,23 @@ namespace WorldPackets
uint8 CastID = 0;
Position CollisionPos;
};
class UpdateMissileTrajectory final : public ClientPacket
{
public:
UpdateMissileTrajectory(WorldPacket&& packet) : ClientPacket(CMSG_UPDATE_MISSILE_TRAJECTORY, std::move(packet)) { }
void Read() override;
ObjectGuid Guid;
uint16 MoveMsgID = 0;
int32 SpellID = 0;
float Pitch = 0.0;
float Speed = 0.0;
Position FirePos;
Position ImpactPos;
Optional<MovementInfo> Status;
};
}
}
+1 -1
View File
@@ -767,7 +767,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_UNLOCK_VOID_STORAGE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::VoidStorage::UnlockVoidStorage, &WorldSession::HandleVoidStorageUnlock);
DEFINE_HANDLER(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::ClientConfig::UserClientUpdateAccountData, &WorldSession::HandleUpdateAccountData);
DEFINE_HANDLER(CMSG_UPDATE_CLIENT_SETTINGS, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_OPCODE_HANDLER_OLD(CMSG_UPDATE_MISSILE_TRAJECTORY, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateMissileTrajectory );
DEFINE_HANDLER(CMSG_UPDATE_MISSILE_TRAJECTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Spells::UpdateMissileTrajectory, &WorldSession::HandleUpdateMissileTrajectory);
DEFINE_HANDLER(CMSG_UPDATE_RAID_TARGET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::UpdateRaidTarget, &WorldSession::HandleUpdateRaidTargetOpcode);
DEFINE_HANDLER(CMSG_UPDATE_VAS_PURCHASE_STATES, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, WorldPackets::Token::UpdateListedAuctionableTokens, &WorldSession::HandleUpdateListedAuctionableTokens);
+3 -2
View File
@@ -595,6 +595,7 @@ namespace WorldPackets
class GetMirrorImageData;
class SpellClick;
class MissileTrajectoryCollision;
class UpdateMissileTrajectory;
}
namespace Talent
@@ -1387,6 +1388,8 @@ class WorldSession
void HandleCancelGrowthAuraOpcode(WorldPackets::Spells::CancelGrowthAura& cancelGrowthAura);
void HandleCancelMountAuraOpcode(WorldPackets::Spells::CancelMountAura& cancelMountAura);
void HandleCancelAutoRepeatSpellOpcode(WorldPackets::Spells::CancelAutoRepeatSpell& cancelAutoRepeatSpell);
void HandleMissileTrajectoryCollision(WorldPackets::Spells::MissileTrajectoryCollision& packet);
void HandleUpdateMissileTrajectory(WorldPackets::Spells::UpdateMissileTrajectory& packet);
void HandleLearnTalentsOpcode(WorldPackets::Talent::LearnTalents& packet);
void HandleConfirmRespecWipeOpcode(WorldPackets::Talent::ConfirmRespecWipe& confirmRespecWipe);
@@ -1614,8 +1617,6 @@ class WorldSession
void HandleUITimeRequest(WorldPackets::Misc::UITimeRequest& /*request*/);
void HandleQueryQuestCompletionNPCs(WorldPackets::Query::QueryQuestCompletionNPCs& queryQuestCompletionNPCs);
void HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& questPoiQuery);
void HandleMissileTrajectoryCollision(WorldPackets::Spells::MissileTrajectoryCollision& packet);
void HandleUpdateMissileTrajectory(WorldPacket& recvPacket);
void HandleViolenceLevel(WorldPackets::Misc::ViolenceLevel& violenceLevel);
void HandleObjectUpdateFailedOpcode(WorldPackets::Misc::ObjectUpdateFailed& objectUpdateFailed);
void HandleObjectUpdateRescuedOpcode(WorldPackets::Misc::ObjectUpdateRescued& objectUpdateRescued);