aboutsummaryrefslogtreecommitdiff
path: root/src/game/Player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r--src/game/Player.cpp23
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;
}