Core/PacketIO: Updated and enabled CMSG_MISSILE_TRAJECTORY_COLLISION

This commit is contained in:
Carbenium
2016-02-03 01:25:01 +01:00
parent 6434fff067
commit 305b99e065
6 changed files with 35 additions and 24 deletions

View File

@@ -990,7 +990,7 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPackets::Misc::SetRaidDiff
void WorldSession::HandleSetTaxiBenchmark(WorldPackets::Misc::SetTaxiBenchmarkMode& packet)
{
packet.Enable ? _player->SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_TAXI_BENCHMARK) : _player->RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_TAXI_BENCHMARK);
_player->ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_TAXI_BENCHMARK, packet.Enable);
}
void WorldSession::HandleGuildSetFocusedAchievement(WorldPackets::Achievement::GuildSetFocusedAchievement& setFocusedAchievement)

View File

@@ -562,38 +562,26 @@ void WorldSession::HandleMirrorImageDataRequest(WorldPackets::Spells::GetMirrorI
}
}
void WorldSession::HandleUpdateProjectilePosition(WorldPacket& recvPacket)
void WorldSession::HandleMissileTrajectoryCollision(WorldPackets::Spells::MissileTrajectoryCollision& packet)
{
ObjectGuid casterGuid;
uint32 spellId;
uint8 castCount;
float x, y, z; // Position of missile hit
recvPacket >> casterGuid;
recvPacket >> spellId;
recvPacket >> castCount;
recvPacket >> x;
recvPacket >> y;
recvPacket >> z;
Unit* caster = ObjectAccessor::GetUnit(*_player, casterGuid);
Unit* caster = ObjectAccessor::GetUnit(*_player, packet.Target);
if (!caster)
return;
Spell* spell = caster->FindCurrentSpellBySpellId(spellId);
Spell* spell = caster->FindCurrentSpellBySpellId(packet.SpellID);
if (!spell || !spell->m_targets.HasDst())
return;
Position pos = *spell->m_targets.GetDstPos();
pos.Relocate(x, y, z);
pos.Relocate(packet.CollisionPos.x, packet.CollisionPos.y, packet.CollisionPos.z);
spell->m_targets.ModDst(pos);
WorldPacket data(SMSG_NOTIFY_MISSILE_TRAJECTORY_COLLISION, 21);
data << casterGuid;
data << uint8(castCount);
data << float(x);
data << float(y);
data << float(z);
data << packet.Target;
data << uint8(packet.CastID);
data << float(packet.CollisionPos.x);
data << float(packet.CollisionPos.y);
data << float(packet.CollisionPos.z);
caster->SendMessageToSet(&data, true);
}

View File

@@ -799,3 +799,11 @@ WorldPacket const* WorldPackets::Spells::ResyncRunes::Write()
return &_worldPacket;
}
void WorldPackets::Spells::MissileTrajectoryCollision::Read()
{
_worldPacket >> Target;
_worldPacket >> SpellID;
_worldPacket >> CastID;
_worldPacket >> CollisionPos;
}

View File

@@ -19,6 +19,7 @@
#define SpellPackets_h__
#include "Packet.h"
#include "PacketUtilities.h"
#include "Player.h"
#include "SpellAuras.h"
#include "Spell.h"
@@ -824,6 +825,19 @@ namespace WorldPackets
std::vector<ResyncRune> Runes;
};
class MissileTrajectoryCollision final : public ClientPacket
{
public:
MissileTrajectoryCollision(WorldPacket&& packet) : ClientPacket(CMSG_MISSILE_TRAJECTORY_COLLISION, std::move(packet)) { }
void Read() override;
ObjectGuid Target;
int32 SpellID = 0;
uint8 CastID = 0;
G3D::Vector3 CollisionPos;
};
}
}

View File

@@ -474,7 +474,7 @@ void OpcodeTable::Initialize()
DEFINE_HANDLER(CMSG_MAIL_TAKE_MONEY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Mail::MailTakeMoney, &WorldSession::HandleMailTakeMoney);
DEFINE_OPCODE_HANDLER_OLD(CMSG_MASTER_LOOT_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleLootMasterGiveOpcode );
DEFINE_HANDLER(CMSG_MINIMAP_PING, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Party::MinimapPingClient, &WorldSession::HandleMinimapPingOpcode);
DEFINE_OPCODE_HANDLER_OLD(CMSG_MISSILE_TRAJECTORY_COLLISION, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateProjectilePosition );
DEFINE_HANDLER(CMSG_MISSILE_TRAJECTORY_COLLISION, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Spells::MissileTrajectoryCollision, &WorldSession::HandleMissileTrajectoryCollision);
DEFINE_HANDLER(CMSG_MOUNT_SET_FAVORITE, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);
DEFINE_HANDLER(CMSG_MOUNT_SPECIAL_ANIM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, WorldPackets::Misc::MountSpecial, &WorldSession::HandleMountSpecialAnimOpcode);
DEFINE_HANDLER(CMSG_MOVE_APPLY_MOVEMENT_FORCE_ACK, STATUS_UNHANDLED, PROCESS_INPLACE, WorldPackets::Null, &WorldSession::Handle_NULL);

View File

@@ -594,6 +594,7 @@ namespace WorldPackets
class SelfRes;
class GetMirrorImageData;
class SpellClick;
class MissileTrajectoryCollision;
}
namespace Talent
@@ -1613,7 +1614,7 @@ class WorldSession
void HandleUITimeRequest(WorldPackets::Misc::UITimeRequest& /*request*/);
void HandleQueryQuestCompletionNPCs(WorldPackets::Query::QueryQuestCompletionNPCs& queryQuestCompletionNPCs);
void HandleQuestPOIQuery(WorldPackets::Query::QuestPOIQuery& questPoiQuery);
void HandleUpdateProjectilePosition(WorldPacket& recvPacket);
void HandleMissileTrajectoryCollision(WorldPackets::Spells::MissileTrajectoryCollision& packet);
void HandleUpdateMissileTrajectory(WorldPacket& recvPacket);
void HandleViolenceLevel(WorldPackets::Misc::ViolenceLevel& violenceLevel);
void HandleObjectUpdateFailedOpcode(WorldPackets::Misc::ObjectUpdateFailed& objectUpdateFailed);