Beispiel #1
0
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 --;
	}
}