示例#1
0
void COgre :: MonsterAttack( void )
{
	if( m_Activity == ACT_RANGE_ATTACK1 )
		AI_Face();

	if( m_Activity == ACT_MELEE_ATTACK1 )
		AI_Charge( 4 );

	if( m_iAIState == STATE_ATTACK && m_fSequenceFinished )
		MonsterRun();
}
void CHellKnight :: MonsterAttack( void )
{
	if( m_Activity == ACT_RANGE_ATTACK1 )
		AI_Face();

	if( m_Activity == ACT_MELEE_ATTACK1 )
		AI_Charge( 5 );

	if( m_Activity == ACT_SPECIAL_ATTACK1 )
		AI_Charge( 18 );

	if( m_iAIState == STATE_ATTACK && m_fSequenceFinished )
		MonsterRun();
}
void CShambler :: CastLightning( void )
{
	if( !m_iAttackCount )
	{
		// plays a ligtning sound
		EMIT_SOUND( edict(), CHAN_WEAPON, "shambler/sboom.wav", 1.0, ATTN_NORM );
	}

	if( pev->owner )
	{
		// remove lightning (if present)
		CBaseEntity *pLightning = CBaseEntity::Instance( pev->owner );
		if( pLightning ) UTIL_Remove( pLightning );
		pev->owner = NULL;
	}

	if( m_iAttackCount > 2 && g_iSkillLevel != SKILL_NIGHTMARE )
		return;

	if (m_hEnemy == NULL)
		return;

	pev->effects |= EF_MUZZLEFLASH;
	m_iAttackCount++; // count  shoots

	AI_Face ();

	// Lightning bolt effect
	TraceResult trace;
	Vector vecOrg = pev->origin + Vector(0,0,40);

	// adjust lightning origin
	Vector vecDir = (m_hEnemy->pev->origin + Vector(0,0,16) - vecOrg).Normalize();
	UTIL_TraceLine( vecOrg, pev->origin + vecDir * 600, ignore_monsters, ENT(pev), &trace );

	MESSAGE_BEGIN( MSG_BROADCAST, gmsgTempEntity );
		WRITE_BYTE( TE_LIGHTNING1 );
		WRITE_ENTITY( entindex() );
		WRITE_COORD( vecOrg.x );
		WRITE_COORD( vecOrg.y );
		WRITE_COORD( vecOrg.z );
		WRITE_COORD( trace.vecEndPos.x );
		WRITE_COORD( trace.vecEndPos.y );
		WRITE_COORD( trace.vecEndPos.z );
	MESSAGE_END();

	// Do damage
	CBasePlayer::LightningDamage(pev->origin, trace.vecEndPos, this, 10, vecDir );
}
示例#4
0
void CSoldier :: MonsterFire( void )
{
	if( m_fInAttack ) return;

	AI_Face();

	EMIT_SOUND( edict(), CHAN_VOICE, "soldier/sattck1.wav", 1.0, ATTN_NORM );

	// fire somewhat behind the player, so a dodging player is harder to hit
	Vector vecDir = ((m_hEnemy->pev->origin - m_hEnemy->pev->velocity * 0.2f) - pev->origin).Normalize();

	CBasePlayer::FireBullets( pev, 4, vecDir, Vector(0.1, 0.1, 0) );

	pev->effects |= EF_MUZZLEFLASH;
	m_fInAttack = TRUE;
}
示例#5
0
void CSoldier :: MonsterAttack( void )
{
	if( m_fAttackFinished )
	{
		m_fAttackFinished = FALSE;
		m_fInAttack = FALSE;

		if( CheckRefire())
		{
			MonsterMissileAttack ();
		}
		else
		{
			MonsterRun();
		}
	}

	AI_Face();
}