Fixed player teleport food drain
This commit is contained in:
parent
19caba5125
commit
c1ae5513ec
@ -71,6 +71,7 @@ cPlayer::cPlayer(cClientHandle* a_Client, const AString & a_PlayerName)
|
|||||||
, m_FloaterID(-1)
|
, m_FloaterID(-1)
|
||||||
, m_Team(NULL)
|
, m_Team(NULL)
|
||||||
, m_TicksUntilNextSave(PLAYER_INVENTORY_SAVE_INTERVAL)
|
, m_TicksUntilNextSave(PLAYER_INVENTORY_SAVE_INTERVAL)
|
||||||
|
, m_bIsTeleporting(false)
|
||||||
{
|
{
|
||||||
LOGD("Created a player object for \"%s\" @ \"%s\" at %p, ID %d",
|
LOGD("Created a player object for \"%s\" @ \"%s\" at %p, ID %d",
|
||||||
a_PlayerName.c_str(), a_Client->GetIPString().c_str(),
|
a_PlayerName.c_str(), a_Client->GetIPString().c_str(),
|
||||||
@ -225,7 +226,7 @@ void cPlayer::Tick(float a_Dt, cChunk & a_Chunk)
|
|||||||
SendExperience();
|
SendExperience();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetPosition() != m_LastPos) // Change in position from last tick?
|
if (!GetPosition().EqualsEps(m_LastPos, 0.01)) // Non negligible change in position from last tick?
|
||||||
{
|
{
|
||||||
// Apply food exhaustion from movement:
|
// Apply food exhaustion from movement:
|
||||||
ApplyFoodExhaustionFromMovement();
|
ApplyFoodExhaustionFromMovement();
|
||||||
@ -970,6 +971,7 @@ void cPlayer::Respawn(void)
|
|||||||
// Reset food level:
|
// Reset food level:
|
||||||
m_FoodLevel = MAX_FOOD_LEVEL;
|
m_FoodLevel = MAX_FOOD_LEVEL;
|
||||||
m_FoodSaturationLevel = 5;
|
m_FoodSaturationLevel = 5;
|
||||||
|
m_FoodExhaustionLevel = 0;
|
||||||
|
|
||||||
// Reset Experience
|
// Reset Experience
|
||||||
m_CurrentXp = 0;
|
m_CurrentXp = 0;
|
||||||
@ -1226,6 +1228,7 @@ void cPlayer::TeleportToCoords(double a_PosX, double a_PosY, double a_PosZ)
|
|||||||
SetPosition(a_PosX, a_PosY, a_PosZ);
|
SetPosition(a_PosX, a_PosY, a_PosZ);
|
||||||
m_LastGroundHeight = (float)a_PosY;
|
m_LastGroundHeight = (float)a_PosY;
|
||||||
m_LastJumpHeight = (float)a_PosY;
|
m_LastJumpHeight = (float)a_PosY;
|
||||||
|
m_bIsTeleporting = true;
|
||||||
|
|
||||||
m_World->BroadcastTeleportEntity(*this, GetClientHandle());
|
m_World->BroadcastTeleportEntity(*this, GetClientHandle());
|
||||||
m_ClientHandle->SendPlayerMoveLook();
|
m_ClientHandle->SendPlayerMoveLook();
|
||||||
@ -2079,6 +2082,11 @@ void cPlayer::ApplyFoodExhaustionFromMovement()
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (m_bIsTeleporting)
|
||||||
|
{
|
||||||
|
m_bIsTeleporting = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// If riding anything, apply no food exhaustion
|
// If riding anything, apply no food exhaustion
|
||||||
if (m_AttachedTo != NULL)
|
if (m_AttachedTo != NULL)
|
||||||
|
@ -546,6 +546,11 @@ protected:
|
|||||||
Default save interval is #defined in PLAYER_INVENTORY_SAVE_INTERVAL */
|
Default save interval is #defined in PLAYER_INVENTORY_SAVE_INTERVAL */
|
||||||
unsigned int m_TicksUntilNextSave;
|
unsigned int m_TicksUntilNextSave;
|
||||||
|
|
||||||
|
/** Flag used by food handling system to determine whether a teleport has just happened
|
||||||
|
Will not apply food penalties if found to be true; will set to false after processing
|
||||||
|
*/
|
||||||
|
bool m_bIsTeleporting;
|
||||||
|
|
||||||
} ; // tolua_export
|
} ; // tolua_export
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user