summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/ClientHandle.cpp9
-rw-r--r--source/World.cpp3
-rw-r--r--source/World.h2
3 files changed, 13 insertions, 1 deletions
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<cPawn *>(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