about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorTeetime <anton.tsoulos@yahoo.de>2011-10-31 17:30:56 +0100
committerTeetime <anton.tsoulos@yahoo.de>2011-10-31 17:30:56 +0100
commitde2647f67f3d8248dcaf6acf091c671d50e369f7 (patch)
tree6a1df7cbb2f78281de8f14c4bb6871edde3ec406 /src
parente4e31b1515435dddc425d7e1a637fee5aaadb9dc (diff)
downloadzcatch-de2647f67f3d8248dcaf6acf091c671d50e369f7.tar.gz
zcatch-de2647f67f3d8248dcaf6acf091c671d50e369f7.zip
added anticamper
Diffstat (limited to 'src')
-rw-r--r--src/game/server/entities/character.h1
-rw-r--r--src/game/server/player.cpp38
-rw-r--r--src/game/server/player.h5
-rw-r--r--src/game/variables.h3
4 files changed, 47 insertions, 0 deletions
diff --git a/src/game/server/entities/character.h b/src/game/server/entities/character.h
index 02a779bb..a311a6f9 100644
--- a/src/game/server/entities/character.h
+++ b/src/game/server/entities/character.h
@@ -11,6 +11,7 @@
 
 enum
 {
+	WEAPON_ANTICAMPER = -4,
 	WEAPON_GAME = -3, // team switching etc
 	WEAPON_SELF = -2, // console kill command
 	WEAPON_WORLD = -1, // death tiles etc
diff --git a/src/game/server/player.cpp b/src/game/server/player.cpp
index ea1e0233..7464e3c7 100644
--- a/src/game/server/player.cpp
+++ b/src/game/server/player.cpp
@@ -60,6 +60,8 @@ void CPlayer::Tick()
 	if(m_ChatTicks > 0)
 		m_ChatTicks--;
 	
+	if(g_Config.m_SvAnticamper && m_pCharacter && !GameServer()->m_World.m_Paused)
+		Anticamper();
 	/* end zCatch*/
 
 	// do latency stuff
@@ -303,3 +305,39 @@ void CPlayer::TryRespawn()
 	m_pCharacter->Spawn(this, SpawnPos);
 	GameServer()->CreatePlayerSpawn(SpawnPos);
 }
+
+int CPlayer::Anticamper()
+{
+	int AnticamperTime = g_Config.m_SvAnticamperTime;
+	int AnticamperRange = g_Config.m_SvAnticamperRange;
+
+	if(m_CampTick == -1)
+	{
+		m_CampPos = m_pCharacter->m_Pos;
+		m_CampTick = Server()->Tick() + Server()->TickSpeed()*AnticamperTime;
+	}
+
+	// Check if the player is moving
+	if((m_CampPos.x - m_pCharacter->m_Pos.x >= (float)AnticamperRange || m_CampPos.x - m_pCharacter->m_Pos.x <= -(float)AnticamperRange)
+	|| (m_CampPos.y - m_pCharacter->m_Pos.y >= (float)AnticamperRange || m_CampPos.y - m_pCharacter->m_Pos.y <= -(float)AnticamperRange))
+		{
+			m_CampTick = -1;
+		}
+
+	// Send warning to the player
+	if(m_CampTick <= Server()->Tick() + Server()->TickSpeed() * AnticamperTime/2 && m_CampTick != -1 && !m_SentCampMsg)
+	{
+		GameServer()->SendBroadcast("ANTICAMPER: Move or die", m_ClientID);
+		m_SentCampMsg = true;
+	}
+
+	// Kill him
+	if((m_CampTick <= Server()->Tick()) && (m_CampTick > 0))
+	{
+		m_pCharacter->Die(m_ClientID, WEAPON_ANTICAMPER);
+		m_CampTick = -1;
+		m_SentCampMsg = false;
+		return 1;
+	}
+	return 0;
+}
diff --git a/src/game/server/player.h b/src/game/server/player.h
index fdad4b09..99de2952 100644
--- a/src/game/server/player.h
+++ b/src/game/server/player.h
@@ -108,6 +108,11 @@ public:
 	int m_TicksSpec;
 	int m_TicksIngame;
 	int m_ChatTicks;
+	//Anticamper
+	int Anticamper();
+	bool m_SentCampMsg;
+	int m_CampTick;
+	vec2 m_CampPos;
 	
 private:
 	CCharacter *m_pCharacter;
diff --git a/src/game/variables.h b/src/game/variables.h
index b2ed91d6..3f0d7bf9 100644
--- a/src/game/variables.h
+++ b/src/game/variables.h
@@ -100,4 +100,7 @@ MACRO_CONFIG_INT(SvFollowCatcher, sv_follow_catcher, 1, 0, 1, CFGFLAG_SERVER, "I
 MACRO_CONFIG_INT(SvChatValue, sv_chat_value, 250, 100, 1000, CFGFLAG_SERVER, "A value wich is added on each message and decreased on each tick")
 MACRO_CONFIG_INT(SvChatThreshold, sv_chat_threshold, 1000, 250, 10000, CFGFLAG_SERVER, "If this threshold will exceed by too many messages the player will be muted")
 MACRO_CONFIG_INT(SvMuteDuration, sv_mute_duration, 60, 0, 3600, CFGFLAG_SERVER, "How long the player will be muted (in seconds)")
+MACRO_CONFIG_INT(SvAnticamper, sv_anticamper, 1, 0, 1, CFGFLAG_SERVER, "Toggle to enable/disable Anticamper")
+MACRO_CONFIG_INT(SvAnticamperTime, sv_anticamper_time, 10, 5, 120, CFGFLAG_SERVER, "How long to wait till the player dies/freezes")
+MACRO_CONFIG_INT(SvAnticamperRange, sv_anticamper_range, 200, 0, 1000, CFGFLAG_SERVER, "Distance how far away the player must move to escape anticamper")
 #endif