From 4fbca2d8388c0b8c3ce794e9f01d54024963a3d5 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Mon, 19 Aug 2024 11:50:36 -0400 Subject: [PATCH] Core/Player: moved indoors/outdoors aura interrupting mechanic into heartbeat and movement handling Port From (https://github.com/TrinityCore/TrinityCore/commit/5a169f6eae45a7578d6e312cdba9825f6fc24fa5) --- Source/Game/Entities/Player/Player.cs | 16 +++++++++++----- Source/Game/Handlers/MovementHandler.cs | 17 +++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index 68bf82729..6837d01c9 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -567,6 +567,9 @@ namespace Game.Entities // Group update SendUpdateToOutOfRangeGroupMembers(); + + // Indoor/Outdoor aura requirements + CheckOutdoorsAuraRequirements(); } public override void SetDeathState(DeathState s) @@ -6266,7 +6269,7 @@ namespace Game.Entities if (GetTrader() != null && !IsWithinDistInMap(GetTrader(), SharedConst.InteractionDistance)) GetSession().SendCancelTrade(); - CheckAreaExploreAndOutdoor(); + CheckAreaExplore(); return true; } @@ -6343,7 +6346,7 @@ namespace Game.Entities SendPacket(new ResetWeeklyCurrency()); } - void CheckAreaExploreAndOutdoor() + void CheckAreaExplore() { if (!IsAlive()) return; @@ -6351,9 +6354,6 @@ namespace Game.Entities if (IsInFlight()) return; - if (WorldConfig.GetBoolValue(WorldCfg.VmapIndoorCheck)) - RemoveAurasWithAttribute(IsOutdoors() ? SpellAttr0.OnlyIndoors : SpellAttr0.OnlyOutdoors); - uint areaId = GetAreaId(); if (areaId == 0) return; @@ -6451,6 +6451,12 @@ namespace Game.Entities SendPacket(new ExplorationExperience(Experience, Area)); } + public void CheckOutdoorsAuraRequirements() + { + if (WorldConfig.GetBoolValue(WorldCfg.VmapIndoorCheck)) + RemoveAurasWithAttribute(IsOutdoors() ? SpellAttr0.OnlyIndoors : SpellAttr0.OnlyOutdoors); + } + public void SendSysMessage(CypherStrings str, params object[] args) { string input = ObjectMgr.GetCypherString(str); diff --git a/Source/Game/Handlers/MovementHandler.cs b/Source/Game/Handlers/MovementHandler.cs index f18d2b264..7828d0855 100644 --- a/Source/Game/Handlers/MovementHandler.cs +++ b/Source/Game/Handlers/MovementHandler.cs @@ -208,6 +208,23 @@ namespace Game plrMover.RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2.Jump); // Mind Control Unit.ProcSkillsAndAuras(plrMover, null, new ProcFlagsInit(ProcFlags.Jump), new ProcFlagsInit(ProcFlags.None), ProcFlagsSpellType.MaskAll, ProcFlagsSpellPhase.None, ProcFlagsHit.None, null, null, null); } + + // Whenever a player stops a movement action, an indoor/outdoor check is being performed + switch (opcode) + { + case ClientOpcodes.MoveSetFly: + case ClientOpcodes.MoveFallLand: + case ClientOpcodes.MoveStop: + case ClientOpcodes.MoveStopStrafe: + case ClientOpcodes.MoveStopTurn: + case ClientOpcodes.MoveStopSwim: + case ClientOpcodes.MoveStopPitch: + case ClientOpcodes.MoveStopAscend: + plrMover.CheckOutdoorsAuraRequirements(); + break; + default: + break; + } } }