diff options
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r-- | src/game/Player.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 43965f5646a..2221098a9be 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1065,7 +1065,9 @@ void Player::HandleDrowning(uint32 time_diff) uint32 damage = urand(600, 700); if (m_MirrorTimerFlags&UNDERWATER_INLAVA) EnvironmentalDamage(DAMAGE_LAVA, damage); - else + // need to skip Slime damage in Undercity, + // maybe someone can find better way to handle environmental damage + else if (m_zoneUpdateId != 1497) EnvironmentalDamage(DAMAGE_SLIME, damage); } } @@ -4574,7 +4576,7 @@ bool Player::FallGround(uint8 FallMode) float x, y, z; GetPosition(x, y, z); - float ground_Z = GetMap()->GetVmapHeight(x, y, z); + float ground_Z = GetMap()->GetHeight(x, y, z); float z_diff = 0.0f; if ((z_diff = fabs(ground_Z - z)) < 0.1f) return false; @@ -6123,7 +6125,7 @@ bool Player::SetPosition(float x, float y, float z, float orientation, bool tele if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE)) GetSession()->SendCancelTrade(); - CheckExploreSystem(); + CheckAreaExploreAndOutdoor(); return true; } @@ -6197,7 +6199,7 @@ void Player::SendMovieStart(uint32 MovieId) SendDirectMessage(&data); } -void Player::CheckExploreSystem() +void Player::CheckAreaExploreAndOutdoor() { if (!isAlive()) return; @@ -6213,8 +6215,13 @@ void Player::CheckExploreSystem() GetSession()->HandleOnAreaChange(GetAreaEntryByAreaID(m_AreaID)); } - uint16 areaFlag = GetBaseMap()->GetAreaFlag(GetPositionX(),GetPositionY(),GetPositionZ()); - if (areaFlag == 0xffff) + bool isOutdoor; + uint16 areaFlag = GetBaseMap()->GetAreaFlag(GetPositionX(),GetPositionY(),GetPositionZ(), &isOutdoor); + + if (sWorld.getConfig(CONFIG_VMAP_INDOOR_CHECK) && !isOutdoor) + RemoveAurasWithAttribute(SPELL_ATTR_OUTDOORS_ONLY); + + if (areaFlag==0xffff) return; int offset = areaFlag / 32; @@ -22019,8 +22026,8 @@ void Player::UpdateUnderwaterState(Map* m, float x, float y, float z) { m_MirrorTimerFlags &= ~(UNDERWATER_INWATER|UNDERWATER_INLAVA|UNDERWATER_INSLIME|UNDERWARER_INDARKWATER); // Small hack for enable breath in WMO - if (IsInWater()) - m_MirrorTimerFlags|=UNDERWATER_INWATER; + /* if (IsInWater()) + m_MirrorTimerFlags|=UNDERWATER_INWATER; */ return; } |