aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-04-26 02:22:24 +0200
committerOvahlord <dreadkiller@gmx.de>2024-04-26 14:21:09 +0200
commit5a169f6eae45a7578d6e312cdba9825f6fc24fa5 (patch)
treef752671ae38f286d050d15116a203f68660c6c71
parentc2fedbb6cc89510002e9f56751e7f8427e306487 (diff)
Core/Player: moved indoors/outdoors aura interrupting mechanic into heartbeat and movement handling
-rw-r--r--src/server/game/Entities/Player/Player.cpp16
-rw-r--r--src/server/game/Entities/Player/Player.h4
-rw-r--r--src/server/game/Handlers/MovementHandler.cpp17
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;
+ }
}
}