void CTurret::Tick() { CCharacter *OwnerChar = GameServer()->GetPlayerChar(m_Owner); if(OwnerChar && !OwnerChar->IsAlive()) { Reset(); return; } if((Server()->Tick() - m_EvalTick) / Server()->TickSpeed() < 10) //let the turret live for 90 seconds { if((Server()->Tick() - m_LastFire) / Server()->TickSpeed() > 0) { CCharacter *pChr = GameServer()->m_World.ClosestCharacter(m_Pos, 16.0f, 0); if(pChr && pChr->IsAlive() && pChr->GetPlayer()->GetCID() != m_Owner) { pChr->TakeDamage(vec2(0.f, 0.f), 15, m_Owner, WEAPON_RIFLE); GameServer()->CreateSound(m_Pos, SOUND_RIFLE_FIRE); Reset(); } else { pChr = GameServer()->m_World.ClosestCharacter(m_Pos, 182.0f, 0); if(pChr && pChr->IsAlive() && pChr != OwnerChar && ((Server()->Tick() - pChr->GetLastSpawn()) / Server()->TickSpeed() > 1)) { vec2 targetDirection = normalize(pChr->m_Pos - m_Pos); new CLaser(GameWorld(), m_Pos, targetDirection, GameServer()->Tuning()->m_LaserReach, m_Owner); GameServer()->CreateSound(m_Pos, SOUND_RIFLE_FIRE); m_LastFire = Server()->Tick(); } } } } else { Reset(); if(OwnerChar && OwnerChar->IsAlive() && OwnerChar->GetPlayer()->m_TurretsCreated > 0) OwnerChar->GetPlayer()->m_TurretsCreated --; } }