diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-06-20 00:18:32 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-06-20 00:18:32 +0200 |
commit | f62b1d01909ca721647d32d9b52dbd599afc91e2 (patch) | |
tree | 8fe7a4daa8e2a2de6c907aac093dbadf40a9bb76 /src | |
parent | afe1b1eeedfa6516962641fcbfa77cf1b1382177 (diff) |
Core/Misc: Exclude most of WorldSession::HandleAreaTriggerOpcode from being called when leaving the areatrigger
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index b64187a5741..aa65b16e1e5 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -511,7 +511,7 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge if (sScriptMgr->OnAreaTrigger(player, atEntry, packet.Entered)) return; - if (player->IsAlive()) + if (player->IsAlive() && packet.Entered) { // not using Player::UpdateQuestObjectiveProgress, ObjectID in quest_objectives can be set to -1, areatrigger_involvedrelation then holds correct id if (std::unordered_set<uint32> const* quests = sObjectMgr->GetQuestsForAreaTrigger(packet.AreaTriggerID)) @@ -559,10 +559,18 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge if (sObjectMgr->IsTavernAreaTrigger(packet.AreaTriggerID)) { // set resting flag we are in the inn - player->GetRestMgr().SetRestFlag(REST_FLAG_IN_TAVERN, atEntry->ID); + if (packet.Entered) + player->GetRestMgr().SetRestFlag(REST_FLAG_IN_TAVERN, atEntry->ID); + else + player->GetRestMgr().RemoveRestFlag(REST_FLAG_IN_TAVERN); if (sWorld->IsFFAPvPRealm()) - player->RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); + { + if (packet.Entered) + player->RemovePvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); + else + player->SetPvpFlag(UNIT_BYTE2_FLAG_FFA_PVP); + } return; } @@ -574,6 +582,9 @@ void WorldSession::HandleAreaTriggerOpcode(WorldPackets::AreaTrigger::AreaTrigge if (pvp->HandleAreaTrigger(_player, packet.AreaTriggerID, packet.Entered)) return; + if (!packet.Entered) + return; + AreaTriggerStruct const* at = sObjectMgr->GetAreaTrigger(packet.AreaTriggerID); if (!at) return; |