about summary refs log tree commit diff
path: root/src/game/server/entities
diff options
context:
space:
mode:
authorTeetime <teetimetw@yahoo.de>2011-11-05 18:03:33 +0100
committerTeetime <teetimetw@yahoo.de>2011-11-05 18:03:33 +0100
commit744018aaafb218321907c4e0c0e0b4472fb7e1b9 (patch)
tree50323eec409c701dfd16c5275ef17d795b85efc9 /src/game/server/entities
parent24718cc8d6f8021f6c54e1c2207f7e68b75a22c3 (diff)
downloadzcatch-744018aaafb218321907c4e0c0e0b4472fb7e1b9.tar.gz
zcatch-744018aaafb218321907c4e0c0e0b4472fb7e1b9.zip
Added possibility to freeze players and improved and extended anticamper
Diffstat (limited to 'src/game/server/entities')
-rw-r--r--src/game/server/entities/character.cpp19
-rw-r--r--src/game/server/entities/character.h2
2 files changed, 21 insertions, 0 deletions
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);
+}
diff --git a/src/game/server/entities/character.h b/src/game/server/entities/character.h
index a311a6f9..f90e4d80 100644
--- a/src/game/server/entities/character.h
+++ b/src/game/server/entities/character.h
@@ -64,6 +64,8 @@ public:
 	bool IsAlive() const { return m_Alive; }
 	class CPlayer *GetPlayer() { return m_pPlayer; }
 
+	void Freeze(int Tick);
+
 private:
 	// player controlling this character
 	class CPlayer *m_pPlayer;