Merge pull request #2630 from Gargaj/shallowwater
Fix damage in shallow water (fixes #2622)
This commit is contained in:
commit
ec61c918db
@ -461,8 +461,13 @@ void cPlayer::SetTouchGround(bool a_bTouchGround)
|
|||||||
|
|
||||||
static const auto HalfWidth = GetWidth() / 2;
|
static const auto HalfWidth = GetWidth() / 2;
|
||||||
static const auto EPS = 0.0001;
|
static const auto EPS = 0.0001;
|
||||||
|
|
||||||
|
BLOCKTYPE BlockAtFoot = GetWorld()->GetBlock(POS_TOINT);
|
||||||
|
bool IsFootInWater = IsBlockWater(BlockAtFoot);
|
||||||
|
bool IsFootInLiquid = IsFootInWater || IsBlockLava(BlockAtFoot) || (BlockAtFoot == E_BLOCK_COBWEB); // okay so cobweb is not _technically_ a liquid...
|
||||||
|
|
||||||
if (
|
if (
|
||||||
!IsSwimming() && !IsFlying() &&
|
!IsFlying() &&
|
||||||
(
|
(
|
||||||
(
|
(
|
||||||
((GetPosY() >= 1) && (GetPosY() <= 255) && ((GetPosY() - POSY_TOINT) <= EPS)) &&
|
((GetPosY() >= 1) && (GetPosY() <= 255) && ((GetPosY() - POSY_TOINT) <= EPS)) &&
|
||||||
@ -498,7 +503,7 @@ void cPlayer::SetTouchGround(bool a_bTouchGround)
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
auto Damage = static_cast<int>(m_LastGroundHeight - GetPosY() - 3.0);
|
auto Damage = static_cast<int>(m_LastGroundHeight - GetPosY() - 3.0);
|
||||||
if (Damage > 0)
|
if ((Damage > 0) && !IsFootInWater)
|
||||||
{
|
{
|
||||||
// cPlayer makes sure damage isn't applied in creative, no need to check here
|
// cPlayer makes sure damage isn't applied in creative, no need to check here
|
||||||
TakeDamage(dtFalling, nullptr, Damage, Damage, 0);
|
TakeDamage(dtFalling, nullptr, Damage, Damage, 0);
|
||||||
@ -523,7 +528,10 @@ void cPlayer::SetTouchGround(bool a_bTouchGround)
|
|||||||
m_bTouchGround = false;
|
m_bTouchGround = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsFlying() || IsSwimming() || IsClimbing())
|
/* Note: it is currently possible to fall through lava and still die from fall damage
|
||||||
|
because of the client skipping an update about the lava block. This can only be resolved by
|
||||||
|
interpolating between positions. */
|
||||||
|
if (IsFlying() || IsFootInLiquid || IsClimbing())
|
||||||
{
|
{
|
||||||
m_LastGroundHeight = GetPosY();
|
m_LastGroundHeight = GetPosY();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user