diff --git a/source/ClientHandle.cpp b/source/ClientHandle.cpp index f019fd862..f526432b4 100644 --- a/source/ClientHandle.cpp +++ b/source/ClientHandle.cpp @@ -887,6 +887,15 @@ void cClientHandle::HandleUseEntity(int a_TargetEntityID, bool a_IsLeftClick) { virtual bool Item(cEntity * a_Entity) override { + if (a_Entity->GetWorld()->IsPVPEnabled() == false) + { + // PVP is disabled + if (a_Entity->IsA("cPlayer") && Instigator->IsA("cPlayer")) + { + // Player is hurting another player which is not allowed when PVP is disabled so ignore it + return true; + } + } if (a_Entity->IsA("cPawn")) { reinterpret_cast(a_Entity)->TakeDamage(Damage, Instigator); diff --git a/source/World.cpp b/source/World.cpp index 055a0a75e..fd4f5af6e 100644 --- a/source/World.cpp +++ b/source/World.cpp @@ -250,7 +250,8 @@ cWorld::cWorld( const AString & a_WorldName ) m_IsPumpkinBonemealable = IniFile.GetValueSetB("Plants", "IsPumpkinBonemealable", false); m_IsSugarcaneBonemealable = IniFile.GetValueSetB("Plants", "IsSugarcaneBonemealable", false); m_IsCactusBonemealable = IniFile.GetValueSetB("Plants", "IsCactusBonemealable", false); - + m_bEnabledPVP = IniFile.GetValueSetB("PVP", "Enabled", true); + m_GameMode = (eGameMode)IniFile.GetValueSetI("GameMode", "GameMode", m_GameMode ); if (!IniFile.WriteFile()) diff --git a/source/World.h b/source/World.h index 0fb2bac7c..654460737 100644 --- a/source/World.h +++ b/source/World.h @@ -68,6 +68,7 @@ public: long long GetWorldTime(void) const { return m_WorldTime; } //tolua_export eGameMode GetGameMode(void) const { return m_GameMode; } //tolua_export + bool IsPVPEnabled(void) const { return m_bEnabledPVP; } //tolua_export void SetWorldTime(long long a_WorldTime) { m_WorldTime = a_WorldTime; } //tolua_export @@ -416,6 +417,7 @@ private: long long m_WorldTime; // Time in seconds*20, this is sent to clients (is wrapped) unsigned long long CurrentTick; eGameMode m_GameMode; + bool m_bEnabledPVP; float m_WorldTimeFraction; // When this > 1.f m_WorldTime is incremented by 20 // The cRedstone class simulates redstone and needs access to m_RSList