//------------------------------------------------------------------------------ // Purpose: //------------------------------------------------------------------------------ void CNPC_Launcher::LaunchGrenade( CBaseEntity* pEnemy ) { // If a path following missile, create a path following missile if (m_sPathCornerName != NULL_STRING) { CGrenadePathfollower *pGrenade = CGrenadePathfollower::CreateGrenadePathfollower( m_sMissileModel, m_sFlySound, GetAbsOrigin(), vec3_angle, edict() ); pGrenade->SetDamage(m_flDamage); pGrenade->SetDamageRadius(m_flDamageRadius); pGrenade->Launch(m_flLaunchSpeed,m_sPathCornerName); } else { Vector vUp; AngleVectors( GetAbsAngles(), NULL, NULL, &vUp ); Vector vLaunchVelocity = (vUp * m_flLaunchSpeed); CGrenadeHomer *pGrenade = CGrenadeHomer::CreateGrenadeHomer( m_sMissileModel, m_sFlySound, GetAbsOrigin(), vec3_angle, edict() ); pGrenade->Spawn( ); pGrenade->SetSpin(m_flSpinMagnitude,m_flSpinSpeed); pGrenade->SetHoming((0.01*m_nHomingStrength),m_flHomingDelay,m_flHomingRampUp,m_flHomingDuration,m_flHomingRampDown); pGrenade->SetDamage(m_flDamage); pGrenade->SetDamageRadius(m_flDamageRadius); pGrenade->Launch(this,pEnemy,vLaunchVelocity,m_flHomingSpeed,GetGravity(),m_nSmokeTrail); } CPASAttenuationFilter filter( this, 0.3 ); EmitSound_t ep; ep.m_nChannel = CHAN_WEAPON; ep.m_pSoundName = STRING(m_sLaunchSound); ep.m_SoundLevel = SNDLVL_NORM; EmitSound( filter, entindex(), ep ); if (m_bSmokeLaunch) { UTIL_Smoke(GetAbsOrigin(), random->RandomInt(20,30), random->RandomInt(10,15)); } m_flNextAttack = gpGlobals->curtime + LAUNCHER_REST_TIME; }
///------------------------------------------------------------------------------ // Purpose : // Input : // Output : //------------------------------------------------------------------------------ CGrenadePathfollower* CGrenadePathfollower::CreateGrenadePathfollower( string_t sModelName, string_t sFlySound, const Vector &vecOrigin, const QAngle &vecAngles, edict_t *pentOwner ) { CGrenadePathfollower *pGrenade = (CGrenadePathfollower*)CreateEntityByName( "grenade_pathfollower" ); if ( !pGrenade ) { Warning( "NULL Ent in CGrenadePathfollower!\n" ); return NULL; } if ( pGrenade->edict() ) { pGrenade->m_sFlySound = sFlySound; pGrenade->SetOwnerEntity( Instance( pentOwner ) ); pGrenade->SetLocalOrigin( vecOrigin ); pGrenade->SetLocalAngles( vecAngles ); pGrenade->SetModel( STRING(sModelName) ); pGrenade->Spawn(); } return pGrenade; }