diff options
Diffstat (limited to 'src/game/server/entities/character.cpp')
| -rw-r--r-- | src/game/server/entities/character.cpp | 19 |
1 files changed, 19 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); +} |