diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-04-26 02:22:24 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-04-26 14:21:09 +0200 |
commit | 5a169f6eae45a7578d6e312cdba9825f6fc24fa5 (patch) | |
tree | f752671ae38f286d050d15116a203f68660c6c71 | |
parent | c2fedbb6cc89510002e9f56751e7f8427e306487 (diff) |
Core/Player: moved indoors/outdoors aura interrupting mechanic into heartbeat and movement handling
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 4 | ||||
-rw-r--r-- | src/server/game/Handlers/MovementHandler.cpp | 17 |
3 files changed, 31 insertions, 6 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index c355bf48d0f..a1383c2ee44 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1164,6 +1164,9 @@ void Player::Heartbeat() // Group update SendUpdateToOutOfRangeGroupMembers(); + + // Indoor/Outdoor aura requirements + CheckOutdoorsAuraRequirements(); } void Player::setDeathState(DeathState s) @@ -6274,7 +6277,7 @@ bool Player::UpdatePosition(float x, float y, float z, float orientation, bool t if (GetGroup()) SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION); - CheckAreaExploreAndOutdoor(); + CheckAreaExplore(); return true; } @@ -6333,7 +6336,7 @@ void Player::SendMovieStart(uint32 movieId) SendDirectMessage(packet.Write()); } -void Player::CheckAreaExploreAndOutdoor() +void Player::CheckAreaExplore() { if (!IsAlive()) return; @@ -6341,9 +6344,6 @@ void Player::CheckAreaExploreAndOutdoor() if (IsInFlight()) return; - if (sWorld->getBoolConfig(CONFIG_VMAP_INDOOR_CHECK)) - RemoveAurasWithAttribute(IsOutdoors() ? SPELL_ATTR0_ONLY_INDOORS : SPELL_ATTR0_ONLY_OUTDOORS); - uint32 const areaId = GetAreaId(); if (!areaId) return; @@ -6441,6 +6441,12 @@ bool Player::HasExploredZone(uint32 areaId) const return (m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][playerIndexOffset] & mask) != 0; } +void Player::CheckOutdoorsAuraRequirements() +{ + if (sWorld->getBoolConfig(CONFIG_VMAP_INDOOR_CHECK)) + RemoveAurasWithAttribute(IsOutdoors() ? SPELL_ATTR0_ONLY_INDOORS : SPELL_ATTR0_ONLY_OUTDOORS); +} + Team Player::TeamForRace(uint8 race) { if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(race)) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 84c505e8e06..2eee223ef21 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2232,11 +2232,13 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> void SetSemaphoreTeleportFar(bool semphsetting) { mSemaphoreTeleport_Far = semphsetting; } void ProcessDelayedOperations(); - void CheckAreaExploreAndOutdoor(void); + void CheckAreaExplore(); void AddExploredZones(uint32 pos, uint64 mask); void RemoveExploredZones(uint32 pos, uint64 mask); bool HasExploredZone(uint32 areaId) const; + void CheckOutdoorsAuraRequirements(); + static Team TeamForRace(uint8 race); static TeamId TeamIdForRace(uint8 race); static uint8 GetFactionGroupForRace(uint8 race); diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index d988364cbac..6a375051013 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -471,6 +471,23 @@ void WorldSession::HandleMovementOpcode(OpcodeClient opcode, MovementInfo& movem plrMover->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::Jump); Unit::ProcSkillsAndAuras(plrMover, nullptr, PROC_FLAG_JUMP, PROC_FLAG_NONE, PROC_SPELL_TYPE_MASK_ALL, PROC_SPELL_PHASE_NONE, PROC_HIT_NONE, nullptr, nullptr, nullptr); } + + // Whenever a player stops a movement action, an indoor/outdoor check is being performed + switch (opcode) + { + case CMSG_MOVE_SET_FLY: + case CMSG_MOVE_FALL_LAND: + case CMSG_MOVE_STOP: + case CMSG_MOVE_STOP_STRAFE: + case CMSG_MOVE_STOP_TURN: + case CMSG_MOVE_STOP_SWIM: + case CMSG_MOVE_STOP_PITCH: + case CMSG_MOVE_STOP_ASCEND: + plrMover->CheckOutdoorsAuraRequirements(); + break; + default: + break; + } } } |