All pastes #498425 Raw Edit

Unnamed

public cpp v1 · immutable
·published 2007-05-20 12:29 UTC
rendered paste body
void CMissile::DumbFire( void ){	SetThink( &CMissile::DumbThink );	SetMoveType( MOVETYPE_FLY );	SetModel("models/weapons/w_missile.mdl");	UTIL_SetSize( this, vec3_origin, vec3_origin );	EmitSound( "Missile.Ignite" );	Vector vecForward;	//QAngle angles;		//angles.x += 1;	//angles.y += 1;	//SetLocalAngles( angles );	AngleVectors( GetLocalAngles(), &vecForward );	SetAbsVelocity( vecForward * RPG_SPEED );	// Smoke trail.	CreateSmokeTrail();}void CMissile::DumbThink( void )	//Added this so I can make my missiles spiral around each other later{	SetMoveType( MOVETYPE_FLY );	SetModel("models/weapons/w_missile.mdl");	UTIL_SetSize( this, vec3_origin, vec3_origin ); 	RemoveSolidFlags( FSOLID_NOT_SOLID );	//TODO: Play opening sound	Vector vecForward;	QAngle angForward;	EmitSound( "Missile.Ignite" );		angForward = GetAbsAngles();	//angForward.z += 10;	//SetLocalAngles( angForward );	AngleVectors( GetLocalAngles(), &vecForward );	SetAbsVelocity( vecForward * ( RPG_SPEED - 800 ));	SetNextThink( gpGlobals->curtime );	CreateSmokeTrail();}void CWeaponRPG::SecondaryAttack( void ){	CBasePlayer *pOwner = ToBasePlayer( GetOwner() );	// Can't have a missile out.	if ( m_hMissile != NULL )		return;	// Can't be reloading.	if ( GetActivity() == ACT_VM_RELOAD )		return;	if ( pOwner == NULL )		return;		int intAmmoAmount;	Vector vecOrigin;	Vector vecForward;	m_flNextSecondaryAttack = gpGlobals->curtime + 2.0f;	Vector	vForward, vRight, vUp;	pOwner->EyeVectors( &vForward, &vRight, &vUp );	Vector	muzzlePoint = pOwner->Weapon_ShootPosition() + vForward * 12.0f + vRight * 6.0f + vUp * -3.0f;		intAmmoAmount =	Clip1();	if ( intAmmoAmount <= 0 )	{		WeaponSound( EMPTY );		return;	}	for ( int i = 0; i < intAmmoAmount; i++ )	{		QAngle vecAngles;		VectorAngles( vForward, vecAngles );				vecAngles.x += ((rand() % 250) / 100.0) * (rand() % 2 == 1 ? -1 : 1);		vecAngles.y += ((rand() % 250) / 100.0) * (rand() % 2 == 1 ? -1 : 1);		muzzlePoint.x += i * -2;		m_hMissile = CMissile::Create( muzzlePoint, vecAngles, GetOwner()->edict() );			m_hMissile->m_hOwner = this;		m_hMissile->DumbFire();	}	// If the shot is clear to the player, give the missile a grace period	trace_t	tr;	Vector vecEye = pOwner->EyePosition();	UTIL_TraceLine( vecEye, vecEye + vForward * 128, MASK_SHOT, this, COLLISION_GROUP_NONE, &tr );	if ( tr.fraction == 1.0 )	{		m_hMissile->SetGracePeriod( 0.3 );	}		m_iClip1 -= intAmmoAmount;	Reload();	// Register a muzzleflash for the AI	pOwner->SetMuzzleFlashTime( gpGlobals->curtime + 0.5 );	SendWeaponAnim( ACT_VM_PRIMARYATTACK );	WeaponSound( SINGLE );	pOwner->RumbleEffect( RUMBLE_SHOTGUN_SINGLE, 0, RUMBLE_FLAG_RESTART );	// Check to see if we should trigger any RPG firing triggers	int iCount = g_hWeaponFireTriggers.Count();	for ( int i = 0; i < iCount; i++ )	{		if ( g_hWeaponFireTriggers[i]->IsTouching( pOwner ) )		{			if ( FClassnameIs( g_hWeaponFireTriggers[i], "trigger_rpgfire" ) )			{				g_hWeaponFireTriggers[i]->ActivateMultiTrigger( pOwner );			}		}	}	if( hl2_episodic.GetBool() )	{		CAI_BaseNPC **ppAIs = g_AI_Manager.AccessAIs();		int nAIs = g_AI_Manager.NumAIs();		string_t iszStriderClassname = AllocPooledString( "npc_strider" );		for ( int i = 0; i < nAIs; i++ )		{			if( ppAIs[ i ]->m_iClassname == iszStriderClassname )			{				ppAIs[ i ]->DispatchInteraction( g_interactionPlayerLaunchedRPG, NULL, m_hMissile );			}		}	}}