aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-06-20 00:18:32 +0200
committerShauren <shauren.trinity@gmail.com>2023-06-20 00:18:32 +0200
commitf62b1d01909ca721647d32d9b52dbd599afc91e2 (patch)
tree8fe7a4daa8e2a2de6c907aac093dbadf40a9bb76 /src
parentafe1b1eeedfa6516962641fcbfa77cf1b1382177 (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.cpp17
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;