diff options
| author | Teetime <anton.tsoulos@yahoo.de> | 2011-10-31 17:30:56 +0100 |
|---|---|---|
| committer | Teetime <anton.tsoulos@yahoo.de> | 2011-10-31 17:30:56 +0100 |
| commit | de2647f67f3d8248dcaf6acf091c671d50e369f7 (patch) | |
| tree | 6a1df7cbb2f78281de8f14c4bb6871edde3ec406 /src/game | |
| parent | e4e31b1515435dddc425d7e1a637fee5aaadb9dc (diff) | |
| download | zcatch-de2647f67f3d8248dcaf6acf091c671d50e369f7.tar.gz zcatch-de2647f67f3d8248dcaf6acf091c671d50e369f7.zip | |
added anticamper
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/server/entities/character.h | 1 | ||||
| -rw-r--r-- | src/game/server/player.cpp | 38 | ||||
| -rw-r--r-- | src/game/server/player.h | 5 | ||||
| -rw-r--r-- | src/game/variables.h | 3 |
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 |