Fixed death on teleportation or leaving Minecart (#3181)
This commit is contained in:
parent
adac9cb68e
commit
b3d4e0fca6
|
@ -215,7 +215,7 @@ public:
|
||||||
void SetPosY (double a_PosY) { SetPosition({m_Position.x, a_PosY, m_Position.z}); }
|
void SetPosY (double a_PosY) { SetPosition({m_Position.x, a_PosY, m_Position.z}); }
|
||||||
void SetPosZ (double a_PosZ) { SetPosition({m_Position.x, m_Position.y, a_PosZ}); }
|
void SetPosZ (double a_PosZ) { SetPosition({m_Position.x, m_Position.y, a_PosZ}); }
|
||||||
void SetPosition(double a_PosX, double a_PosY, double a_PosZ) { SetPosition({a_PosX, a_PosY, a_PosZ}); }
|
void SetPosition(double a_PosX, double a_PosY, double a_PosZ) { SetPosition({a_PosX, a_PosY, a_PosZ}); }
|
||||||
void SetPosition(const Vector3d & a_Position);
|
virtual void SetPosition(const Vector3d & a_Position);
|
||||||
void SetYaw (double a_Yaw); // In degrees, normalizes to [-180, +180)
|
void SetYaw (double a_Yaw); // In degrees, normalizes to [-180, +180)
|
||||||
void SetPitch (double a_Pitch); // In degrees, normalizes to [-180, +180)
|
void SetPitch (double a_Pitch); // In degrees, normalizes to [-180, +180)
|
||||||
void SetRoll (double a_Roll); // In degrees, normalizes to [-180, +180)
|
void SetRoll (double a_Roll); // In degrees, normalizes to [-180, +180)
|
||||||
|
|
|
@ -250,6 +250,24 @@ void cPawn::TargetingMe(cMonster * a_Monster)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cPawn::SetPosition(double a_PosX, double a_PosY, double a_PosZ)
|
||||||
|
{
|
||||||
|
SetPosition({a_PosX, a_PosY, a_PosZ});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cPawn::SetPosition(const Vector3d & a_Position)
|
||||||
|
{
|
||||||
|
super::SetPosition(a_Position);
|
||||||
|
m_LastGroundHeight = a_Position.y; // Prevent fall damage on teleport
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cPawn::HandleFalling(void)
|
void cPawn::HandleFalling(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -69,6 +69,10 @@ public:
|
||||||
/** Add the monster to the list of monsters targeting this pawn. (Does not check if already in list!) */
|
/** Add the monster to the list of monsters targeting this pawn. (Does not check if already in list!) */
|
||||||
void TargetingMe(cMonster * a_Monster);
|
void TargetingMe(cMonster * a_Monster);
|
||||||
|
|
||||||
|
void SetPosition(double a_PosX, double a_PosY, double a_PosZ);
|
||||||
|
|
||||||
|
virtual void SetPosition(const Vector3d & a_Position) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef std::map<cEntityEffect::eType, cEntityEffect *> tEffectMap;
|
typedef std::map<cEntityEffect::eType, cEntityEffect *> tEffectMap;
|
||||||
tEffectMap m_EntityEffects;
|
tEffectMap m_EntityEffects;
|
||||||
|
|
|
@ -2468,17 +2468,21 @@ void cPlayer::Detach()
|
||||||
int PosZ = POSZ_TOINT;
|
int PosZ = POSZ_TOINT;
|
||||||
|
|
||||||
// Search for a position within an area to teleport player after detachment
|
// Search for a position within an area to teleport player after detachment
|
||||||
// Position must be solid land, and occupied by a nonsolid block
|
// Position must be solid land with two air blocks above.
|
||||||
// If nothing found, player remains where they are
|
// If nothing found, player remains where they are
|
||||||
for (int x = PosX - 2; x <= (PosX + 2); ++x)
|
for (int x = PosX - 1; x <= (PosX + 1); ++x)
|
||||||
{
|
{
|
||||||
for (int y = PosY; y <= (PosY + 3); ++y)
|
for (int y = PosY; y <= (PosY + 3); ++y)
|
||||||
{
|
{
|
||||||
for (int z = PosZ - 2; z <= (PosZ + 2); ++z)
|
for (int z = PosZ - 1; z <= (PosZ + 1); ++z)
|
||||||
{
|
{
|
||||||
if (!cBlockInfo::IsSolid(m_World->GetBlock(x, y, z)) && cBlockInfo::IsSolid(m_World->GetBlock(x, y - 1, z)))
|
if (
|
||||||
|
(m_World->GetBlock(x, y, z) == E_BLOCK_AIR) &&
|
||||||
|
(m_World->GetBlock(x, y + 1, z) == E_BLOCK_AIR) &&
|
||||||
|
cBlockInfo::IsSolid(m_World->GetBlock(x, y - 1, z))
|
||||||
|
)
|
||||||
{
|
{
|
||||||
TeleportToCoords(x, y, z);
|
TeleportToCoords(x + 0.5, y, z + 0.5);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user