From ae5975e674122148f979a211bcf82094c5d0a206 Mon Sep 17 00:00:00 2001 From: faketruth Date: Wed, 10 Oct 2012 19:46:12 +0000 Subject: Added an option to disable/enable PVP on a per world basis git-svn-id: http://mc-server.googlecode.com/svn/trunk@944 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/ClientHandle.cpp | 9 +++++++++ source/World.cpp | 3 ++- source/World.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) 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 -- cgit v1.2.3