aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp42
-rw-r--r--src/server/game/Handlers/SpellHandler.cpp28
-rw-r--r--src/server/game/Server/Packets/SpellPackets.cpp20
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h17
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Server/WorldSession.h5
6 files changed, 69 insertions, 45 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index cd6fe63fad6..5b9616a5d68 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -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?
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp
index bbce8bbd8ed..4d464e8d39d 100644
--- a/src/server/game/Handlers/SpellHandler.cpp
+++ b/src/server/game/Handlers/SpellHandler.cpp
@@ -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();
diff --git a/src/server/game/Server/Packets/SpellPackets.cpp b/src/server/game/Server/Packets/SpellPackets.cpp
index a54448e455f..f066f929faf 100644
--- a/src/server/game/Server/Packets/SpellPackets.cpp
+++ b/src/server/game/Server/Packets/SpellPackets.cpp
@@ -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;
+ }
+}
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 50ab5ffdf11..8785313b6fc 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -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;
+ };
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index 83f0b853665..5eaefb052fd 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -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);
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index 1b6c4b7f984..dfd8ecb0868 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -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);