void Monster_BladeSpirit::check()
{
	// Our current victim
	P_CHAR m_currentVictim = World::instance()->findChar( m_currentVictimSer );
	if ( !m_currentVictim )
	{
		m_currentVictimSer = INVALID_SERIAL;
	}

	if ( m_currentVictim && invalidTarget( m_npc, m_currentVictim ) ) {
		m_currentVictim = 0;
		m_currentVictimSer = INVALID_SERIAL;
		m_npc->fight( 0 );
	}

	if ( nextVictimCheck < Server::instance()->time() )
	{
		// Don't switch if we can hit it...
		if ( !m_currentVictim || m_currentVictim->dist( m_npc ) > 1 )
		{
			P_CHAR target = findBestTarget( m_npc );
			if ( target )
			{
				m_currentVictim = target;
				m_currentVictimSer = target->serial();
				m_npc->fight( target );
			}
		}

		nextVictimCheck = Server::instance()->time() + 1500;
	}

	AbstractAI::check();
}
示例#2
0
bool CAutoAirblast::move(CUserCmd *pUserCmd)
{
	if(!variables[0].bGet())
		return false;

	if(gLocalPlayerVars.activeWeapon == classId::CTFFlameThrower)
	{
		int closeIndex = findBestTarget();

		if(closeIndex == -1)
			return false;

		if(targets[closeIndex] <= 185.0f)
		{
			pUserCmd->buttons |= IN_ATTACK2;
		}

		targets.erase(closeIndex);
	}
	return true;
}