From 744018aaafb218321907c4e0c0e0b4472fb7e1b9 Mon Sep 17 00:00:00 2001 From: Teetime Date: Sat, 5 Nov 2011 18:03:33 +0100 Subject: Added possibility to freeze players and improved and extended anticamper --- src/game/server/entities/character.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/game/server/entities/character.cpp') diff --git a/src/game/server/entities/character.cpp b/src/game/server/entities/character.cpp index 06c1c913..d09bc714 100644 --- a/src/game/server/entities/character.cpp +++ b/src/game/server/entities/character.cpp @@ -541,6 +541,12 @@ void CCharacter::OnPredictedInput(CNetObj_PlayerInput *pNewInput) void CCharacter::OnDirectInput(CNetObj_PlayerInput *pNewInput) { + if(m_pPlayer->m_FreezeTicks) + { + ResetInput(); + return; + } + mem_copy(&m_LatestPrevInput, &m_LatestInput, sizeof(m_LatestInput)); mem_copy(&m_LatestInput, pNewInput, sizeof(m_LatestInput)); @@ -579,6 +585,11 @@ void CCharacter::Tick() m_Core.m_Input = m_Input; m_Core.Tick(true); + //Set weapon back to the last one + if(m_pPlayer->m_FreezeTicks == 1) + SetWeapon(m_LastWeapon); + + // handle death-tiles and leaving gamelayer if(GameServer()->Collision()->GetCollisionAt(m_Pos.x+m_ProximityRadius/3.f, m_Pos.y-m_ProximityRadius/3.f)&CCollision::COLFLAG_DEATH || GameServer()->Collision()->GetCollisionAt(m_Pos.x+m_ProximityRadius/3.f, m_Pos.y+m_ProximityRadius/3.f)&CCollision::COLFLAG_DEATH || @@ -894,3 +905,11 @@ void CCharacter::Snap(int SnappingClient) pCharacter->m_PlayerFlags = GetPlayer()->m_PlayerFlags; } + +void CCharacter::Freeze(int Ticks) +{ + m_pPlayer->m_FreezeTicks = Ticks; + m_LastWeapon = m_ActiveWeapon; + m_ActiveWeapon = WEAPON_NINJA; + GameServer()->CreateSound(m_Pos, SOUND_PLAYER_PAIN_LONG); +} -- cgit 1.4.1