aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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 ed2e516718d..f9cd980ec24 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -1160,6 +1160,9 @@ void Player::Heartbeat()
// Group update
SendUpdateToOutOfRangeGroupMembers();
+
+ // Indoor/Outdoor aura requirements
+ CheckOutdoorsAuraRequirements();
}
void Player::setDeathState(DeathState s)
@@ -6187,7 +6190,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;
}
@@ -6246,7 +6249,7 @@ void Player::SendMovieStart(uint32 movieId)
SendDirectMessage(packet.Write());
}
-void Player::CheckAreaExploreAndOutdoor()
+void Player::CheckAreaExplore()
{
if (!IsAlive())
return;
@@ -6254,9 +6257,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;
@@ -6314,6 +6314,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 0fca1f3009b..0bb801fe4f5 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -2208,11 +2208,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 13f440e9c29..00a9582fbfa 100644
--- a/src/server/game/Handlers/MovementHandler.cpp
+++ b/src/server/game/Handlers/MovementHandler.cpp
@@ -466,6 +466,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;
+ }
}
}