Merge pull request #1437 from nesco/master
Implemented spectator gamemode.
This commit is contained in:
commit
0625556c37
@ -115,12 +115,14 @@ enum eGameMode
|
|||||||
eGameMode_Survival = 0,
|
eGameMode_Survival = 0,
|
||||||
eGameMode_Creative = 1,
|
eGameMode_Creative = 1,
|
||||||
eGameMode_Adventure = 2,
|
eGameMode_Adventure = 2,
|
||||||
|
eGameMode_Spectator = 3,
|
||||||
|
|
||||||
// Easier-to-use synonyms:
|
// Easier-to-use synonyms:
|
||||||
gmNotSet = eGameMode_NotSet,
|
gmNotSet = eGameMode_NotSet,
|
||||||
gmSurvival = eGameMode_Survival,
|
gmSurvival = eGameMode_Survival,
|
||||||
gmCreative = eGameMode_Creative,
|
gmCreative = eGameMode_Creative,
|
||||||
gmAdventure = eGameMode_Adventure,
|
gmAdventure = eGameMode_Adventure,
|
||||||
|
gmSpectator = eGameMode_Spectator,
|
||||||
|
|
||||||
// These two are used to check GameMode for validity when converting from integers.
|
// These two are used to check GameMode for validity when converting from integers.
|
||||||
gmMax, // Gets automatically assigned
|
gmMax, // Gets automatically assigned
|
||||||
|
@ -451,6 +451,11 @@ void cPlayer::CancelChargingBow(void)
|
|||||||
|
|
||||||
void cPlayer::SetTouchGround(bool a_bTouchGround)
|
void cPlayer::SetTouchGround(bool a_bTouchGround)
|
||||||
{
|
{
|
||||||
|
if (IsGameModeSpectator()) // You can fly through the ground in Spectator
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_bTouchGround = a_bTouchGround;
|
m_bTouchGround = a_bTouchGround;
|
||||||
|
|
||||||
if (!m_bTouchGround)
|
if (!m_bTouchGround)
|
||||||
@ -585,7 +590,7 @@ bool cPlayer::Feed(int a_Food, double a_Saturation)
|
|||||||
|
|
||||||
void cPlayer::AddFoodExhaustion(double a_Exhaustion)
|
void cPlayer::AddFoodExhaustion(double a_Exhaustion)
|
||||||
{
|
{
|
||||||
if (!IsGameModeCreative())
|
if (!(IsGameModeCreative() || IsGameModeSpectator()))
|
||||||
{
|
{
|
||||||
m_FoodExhaustionLevel = std::min(m_FoodExhaustionLevel + a_Exhaustion, 40.0);
|
m_FoodExhaustionLevel = std::min(m_FoodExhaustionLevel + a_Exhaustion, 40.0);
|
||||||
}
|
}
|
||||||
@ -823,9 +828,9 @@ bool cPlayer::DoTakeDamage(TakeDamageInfo & a_TDI)
|
|||||||
{
|
{
|
||||||
if ((a_TDI.DamageType != dtInVoid) && (a_TDI.DamageType != dtPlugin))
|
if ((a_TDI.DamageType != dtInVoid) && (a_TDI.DamageType != dtPlugin))
|
||||||
{
|
{
|
||||||
if (IsGameModeCreative())
|
if (IsGameModeCreative() || IsGameModeSpectator())
|
||||||
{
|
{
|
||||||
// No damage / health in creative mode if not void or plugin damage
|
// No damage / health in creative or spectator mode if not void or plugin damage
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1043,6 +1048,14 @@ bool cPlayer::IsGameModeAdventure(void) const
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cPlayer::IsGameModeSpectator(void) const
|
||||||
|
{
|
||||||
|
return (m_GameMode == gmSpectator) || // Either the player is explicitly in Spectator
|
||||||
|
((m_GameMode == gmNotSet) && m_World->IsGameModeSpectator()); // or they inherit from the world and the world is Adventure
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cPlayer::SetTeam(cTeam * a_Team)
|
void cPlayer::SetTeam(cTeam * a_Team)
|
||||||
{
|
{
|
||||||
@ -1158,7 +1171,7 @@ void cPlayer::SetGameMode(eGameMode a_GameMode)
|
|||||||
m_GameMode = a_GameMode;
|
m_GameMode = a_GameMode;
|
||||||
m_ClientHandle->SendGameMode(a_GameMode);
|
m_ClientHandle->SendGameMode(a_GameMode);
|
||||||
|
|
||||||
if (!IsGameModeCreative())
|
if (!(IsGameModeCreative() || IsGameModeSpectator()))
|
||||||
{
|
{
|
||||||
SetFlying(false);
|
SetFlying(false);
|
||||||
SetCanFly(false);
|
SetCanFly(false);
|
||||||
@ -1340,6 +1353,7 @@ void cPlayer::MoveTo( const Vector3d & a_NewPos)
|
|||||||
|
|
||||||
void cPlayer::SetVisible(bool a_bVisible)
|
void cPlayer::SetVisible(bool a_bVisible)
|
||||||
{
|
{
|
||||||
|
// Need to Check if the player or other players are in gamemode spectator, but will break compatibility
|
||||||
if (a_bVisible && !m_bVisible) // Make visible
|
if (a_bVisible && !m_bVisible) // Make visible
|
||||||
{
|
{
|
||||||
m_bVisible = true;
|
m_bVisible = true;
|
||||||
@ -1500,6 +1514,11 @@ void cPlayer::TossPickup(const cItem & a_Item)
|
|||||||
|
|
||||||
void cPlayer::TossItems(const cItems & a_Items)
|
void cPlayer::TossItems(const cItems & a_Items)
|
||||||
{
|
{
|
||||||
|
if (IsGameModeSpectator()) // Players can't toss items in spectator
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_Stats.AddValue(statItemsDropped, (StatValue)a_Items.Size());
|
m_Stats.AddValue(statItemsDropped, (StatValue)a_Items.Size());
|
||||||
|
|
||||||
double vX = 0, vY = 0, vZ = 0;
|
double vX = 0, vY = 0, vZ = 0;
|
||||||
@ -1786,7 +1805,7 @@ bool cPlayer::SaveToDisk()
|
|||||||
|
|
||||||
void cPlayer::UseEquippedItem(int a_Amount)
|
void cPlayer::UseEquippedItem(int a_Amount)
|
||||||
{
|
{
|
||||||
if (IsGameModeCreative()) // No damage in creative
|
if (IsGameModeCreative() || IsGameModeSpectator()) // No damage in creative or spectator
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -171,6 +171,9 @@ public:
|
|||||||
/** Returns true if the player is in Adventure mode, either explicitly, or by inheriting from current world */
|
/** Returns true if the player is in Adventure mode, either explicitly, or by inheriting from current world */
|
||||||
bool IsGameModeAdventure(void) const;
|
bool IsGameModeAdventure(void) const;
|
||||||
|
|
||||||
|
/** Returns true if the player is in Spectator mode, either explicitly, or by inheriting from current world */
|
||||||
|
bool IsGameModeSpectator(void) const;
|
||||||
|
|
||||||
AString GetIP(void) const { return m_IP; } // tolua_export
|
AString GetIP(void) const { return m_IP; } // tolua_export
|
||||||
|
|
||||||
/** Returns the associated team, NULL if none */
|
/** Returns the associated team, NULL if none */
|
||||||
|
@ -188,6 +188,9 @@ public:
|
|||||||
/** Returns true if the world is in Adventure mode */
|
/** Returns true if the world is in Adventure mode */
|
||||||
bool IsGameModeAdventure(void) const { return (m_GameMode == gmAdventure); }
|
bool IsGameModeAdventure(void) const { return (m_GameMode == gmAdventure); }
|
||||||
|
|
||||||
|
/** Returns true if the world is in Spectator mode */
|
||||||
|
bool IsGameModeSpectator(void) const { return (m_GameMode == gmSpectator); }
|
||||||
|
|
||||||
bool IsPVPEnabled(void) const { return m_bEnabledPVP; }
|
bool IsPVPEnabled(void) const { return m_bEnabledPVP; }
|
||||||
bool IsDeepSnowEnabled(void) const { return m_IsDeepSnowEnabled; }
|
bool IsDeepSnowEnabled(void) const { return m_IsDeepSnowEnabled; }
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user