diff options
author | Chaouki Dhib <chaodhib@gmail.com> | 2021-05-16 13:16:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-16 13:16:08 +0200 |
commit | 2d114ea560cd8716af2b0d12990fc3480ecaf2b7 (patch) | |
tree | aaa711aa4d63e9b33d8e804d481425368ddcee18 /src/server/game/Handlers/SpellHandler.cpp | |
parent | edcaac6c959e944dc6d6dc224666b832521412b4 (diff) |
Core/Movement: Improve client control logic (#26348)
Diffstat (limited to 'src/server/game/Handlers/SpellHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/SpellHandler.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/server/game/Handlers/SpellHandler.cpp b/src/server/game/Handlers/SpellHandler.cpp index c3ac4582ad4..775a57c448e 100644 --- a/src/server/game/Handlers/SpellHandler.cpp +++ b/src/server/game/Handlers/SpellHandler.cpp @@ -67,7 +67,7 @@ void WorldSession::HandleUseItemOpcode(WorldPacket& recvPacket) Player* pUser = _player; // ignore for remote control state - if (pUser->GetUnitBeingMoved() != pUser) + if (pUser->IsCharming()) return; uint8 bagIndex, slot, castFlags; @@ -178,7 +178,7 @@ void WorldSession::HandleOpenItemOpcode(WorldPacket& recvPacket) Player* player = GetPlayer(); // ignore for remote control state - if (player->GetUnitBeingMoved() != player) + if (player->IsCharming()) return; // additional check, client outputs message on its own @@ -298,8 +298,8 @@ void WorldSession::HandleGameObjectUseOpcode(WorldPacket& recvData) if (GameObject* obj = GetPlayer()->GetGameObjectIfCanInteractWith(guid)) { // ignore for remote control state - if (GetPlayer()->GetUnitBeingMoved() != GetPlayer()) - if (!(GetPlayer()->IsOnVehicle(GetPlayer()->GetUnitBeingMoved()) || GetPlayer()->IsMounted()) && !obj->GetGOInfo()->IsUsableMounted()) + if (GetPlayer()->IsCharming()) + if (!(GetPlayer()->IsOnVehicle(GetPlayer()->GetCharmed()) || GetPlayer()->IsMounted()) && !obj->GetGOInfo()->IsUsableMounted()) return; obj->Use(GetPlayer()); @@ -314,7 +314,7 @@ void WorldSession::HandleGameobjectReportUse(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "WORLD: Recvd CMSG_GAMEOBJ_REPORT_USE Message [%s]", guid.ToString().c_str()); // ignore for remote control state - if (_player->GetUnitBeingMoved() != _player) + if (_player->IsCharming()) return; if (GameObject* go = GetPlayer()->GetGameObjectIfCanInteractWith(guid)) @@ -336,7 +336,7 @@ void WorldSession::HandleCastSpellOpcode(WorldPacket& recvPacket) TC_LOG_DEBUG("network", "WORLD: got cast spell packet, castCount: %u, spellId: %u, castFlags: %u, data length = %u", castCount, spellId, castFlags, (uint32)recvPacket.size()); // ignore for remote control state (for player case) - Unit* mover = _player->GetUnitBeingMoved(); + Unit* mover = _player->GetCharmedOrSelf(); if (mover != _player && mover->GetTypeId() == TYPEID_PLAYER) { recvPacket.rfinish(); // prevent spam at ignore packet @@ -546,9 +546,10 @@ void WorldSession::HandleCancelAutoRepeatSpellOpcode(WorldPackets::Spells::Cance void WorldSession::HandleCancelChanneling(WorldPackets::Spells::CancelChannelling& cancelChanneling) { + Unit* mover = _player->GetCharmedOrSelf(); + // ignore for remote control state (for player case) - Unit* mover = _player->GetUnitBeingMoved(); - if (mover != _player && mover->GetTypeId() == TYPEID_PLAYER) + if (_player->GetCharmed() && _player->GetCharmed()->GetTypeId() == TYPEID_PLAYER) return; SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(cancelChanneling.ChannelSpell); @@ -569,7 +570,7 @@ void WorldSession::HandleCancelChanneling(WorldPackets::Spells::CancelChannellin void WorldSession::HandleTotemDestroyed(WorldPackets::Totem::TotemDestroyed& totemDestroyed) { // ignore for remote control state - if (_player->GetUnitBeingMoved() != _player) + if (_player->IsCharming()) return; uint8 slotId = totemDestroyed.Slot; |