void CM249::M249Fire(float flSpread, float flCycleTime, BOOL fUseAutoAim) { m_bDelayFire = true; m_iShotsFired++; m_flAccuracy = ((m_iShotsFired * m_iShotsFired * m_iShotsFired) / 175.0) + 0.4; if (m_flAccuracy > 0.9) m_flAccuracy = 0.9; if (m_iClip <= 0) { if (m_fFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.2; } return; } m_iClip--; m_pPlayer->pev->effects |= EF_MUZZLEFLASH; #ifndef CLIENT_DLL m_pPlayer->SetAnimation(PLAYER_ATTACK1); #endif UTIL_MakeVectors(m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; Vector vecSrc = m_pPlayer->GetGunPosition(); Vector vecDir = m_pPlayer->FireBullets3(vecSrc, gpGlobals->v_forward, flSpread, 8192, 2, BULLET_PLAYER_556MM, 32, 0.97, m_pPlayer->pev, FALSE, m_pPlayer->random_seed); int flags; #ifdef CLIENT_WEAPONS flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL(flags, m_pPlayer->edict(), m_usFireM249, 0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, (int)(m_pPlayer->pev->punchangle.x * 100), (int)(m_pPlayer->pev->punchangle.y * 100), FALSE, FALSE); m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + flCycleTime; #ifndef CLIENT_DLL if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); #endif m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.6; if (!FBitSet(m_pPlayer->pev->flags, FL_ONGROUND)) KickBack(1.8, 0.65, 0.45, 0.125, 5.0, 3.5, 8); else if (m_pPlayer->pev->velocity.Length2D() > 0) KickBack(1.1, 0.5, 0.3, 0.06, 4.0, 3.0, 8); else if (FBitSet(m_pPlayer->pev->flags, FL_DUCKING)) KickBack(0.75, 0.325, 0.25, 0.025, 3.5, 2.5, 9); else KickBack(0.8, 0.35, 0.3, 0.03, 3.75, 3.0, 9); }
void CWeaponM4A1::M4A1Fire( float flSpread, float flCycleTime ) { if ( !CSBaseGunFire( flSpread, flCycleTime ) ) return; CCSPlayer *pPlayer = GetPlayerOwner(); if (pPlayer->GetAbsVelocity().Length2D() > 0) KickBack (1.0, 0.45, 0.28, 0.045, 3.75, 3, 7); else if ( !FBitSet( pPlayer->GetFlags(), FL_ONGROUND ) ) KickBack (1.2, 0.5, 0.23, 0.15, 5.5, 3.5, 6); else if ( FBitSet( pPlayer->GetFlags(), FL_DUCKING ) ) KickBack (0.6, 0.3, 0.2, 0.0125, 3.25, 2, 7); else KickBack (0.65, 0.35, 0.25, 0.015, 3.5, 2.25, 7); }
void CWeaponSG552::SG552Fire( float flSpread, float flCycleTime ) { if ( !CSBaseGunFire( flSpread, flCycleTime ) ) return; CCSPlayer *pPlayer = GetPlayerOwner(); if (pPlayer->GetAbsVelocity().Length2D() > 0) KickBack (1, 0.45, 0.28, 0.04, 4.25, 2.5, 7); else if ( !FBitSet( pPlayer->GetFlags(), FL_ONGROUND ) ) KickBack (1.25, 0.45, 0.22, 0.18, 6, 4, 5); else if ( FBitSet( pPlayer->GetFlags(), FL_DUCKING ) ) KickBack (0.6, 0.35, 0.2, 0.0125, 3.7, 2, 10); else KickBack (0.625, 0.375, 0.25, 0.0125, 4, 2.25, 9); }
void CAK47::AK47Fire( float flSpread, float flCycleTime ) { if ( !CSBaseGunFire( flSpread, flCycleTime ) ) return; CCSPlayer *pPlayer = GetPlayerOwner(); if (pPlayer->GetAbsVelocity().Length2D() > 0 ) KickBack ( 1.5, 0.45, 0.225, 0.05, 6.5, 2.5, 7 ); else if ( !FBitSet( pPlayer->GetFlags(), FL_ONGROUND ) ) KickBack ( 2, 1.0, 0.5, 0.35, 9, 6, 5 ); else if ( FBitSet( pPlayer->GetFlags(), FL_DUCKING ) ) KickBack ( 0.9, 0.35, 0.15, 0.025, 5.5, 1.5, 9 ); else KickBack ( 1, 0.375, 0.175, 0.0375, 5.75, 1.75, 8 ); }
void CP90::P90Fire(float flSpread, float flCycleTime, BOOL fUseAutoAim) { Vector vecAiming, vecSrc, vecDir; int flag; m_bDelayFire = true; ++m_iShotsFired; m_flAccuracy = (m_iShotsFired * m_iShotsFired / 175) + 0.45f; if (m_flAccuracy > 1) m_flAccuracy = 1; if (m_iClip <= 0) { if (m_fFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = GetNextAttackDelay(0.2); } if (TheBots != NULL) { TheBots->OnEvent(EVENT_WEAPON_FIRED_ON_EMPTY, m_pPlayer); } return; } --m_iClip; m_pPlayer->pev->effects |= EF_MUZZLEFLASH; m_pPlayer->SetAnimation(PLAYER_ATTACK1); UTIL_MakeVectors(m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; vecSrc = m_pPlayer->GetGunPosition(); vecAiming = gpGlobals->v_forward; vecDir = m_pPlayer->FireBullets3(vecSrc, vecAiming, flSpread, 8192, 1, BULLET_PLAYER_57MM, P90_DAMAGE, P90_RANGE_MODIFER, m_pPlayer->pev, false, m_pPlayer->random_seed); #ifdef CLIENT_WEAPONS flag = FEV_NOTHOST; #else flag = 0; #endif PLAYBACK_EVENT_FULL(flag, m_pPlayer->edict(), m_usFireP90, 0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, int(m_pPlayer->pev->punchangle.x * 100), int(m_pPlayer->pev->punchangle.y * 100), 5, FALSE); m_flNextPrimaryAttack = m_flNextSecondaryAttack = GetNextAttackDelay(flCycleTime); if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 2.0f; if (!(m_pPlayer->pev->flags & FL_ONGROUND)) { KickBack(0.9, 0.45, 0.35, 0.04, 5.25, 3.5, 4); } else if (m_pPlayer->pev->velocity.Length2D() > 0) { KickBack(0.45, 0.3, 0.2, 0.0275, 4.0, 2.25, 7); } else if (m_pPlayer->pev->flags & FL_DUCKING) { KickBack(0.275, 0.2, 0.125, 0.02, 3.0, 1.0, 9); } else { KickBack(0.3, 0.225, 0.125, 0.02, 3.25, 1.25, 8); } }
void CP90::P90Fire( float flSpread, float flCycleTime, BOOL fUseAutoAim ) { m_bDelayFire = true; m_iShotsFired++; m_flAccuracy = ( ( m_iShotsFired * m_iShotsFired * m_iShotsFired) / 175 ) + 0.45; if( m_flAccuracy > 1 ) m_flAccuracy = 1; if( m_iClip <= 0 ) { if( m_fFireOnEmpty ) { PlayEmptySound(); m_flNextPrimaryAttack = GetNextAttackDelay( 0.2 ); } // TODO: Implement me. // if( TheBots ) // { // TheBots->OnEvent( EVENT_WEAPON_FIRED_ON_EMPTY, m_pPlayer, NULL ); // } return; } m_iClip--; m_pPlayer->pev->effects |= EF_MUZZLEFLASH; m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; Vector vecDir = m_pPlayer->FireBullets3( m_pPlayer->GetGunPosition(), gpGlobals->v_forward, flSpread, P90_DISTANCE, P90_PENETRATION, BULLET_PLAYER_57MM, P90_DAMAGE, P90_RANGE_MODIFER, m_pPlayer->pev, FALSE, m_pPlayer->random_seed ); int flags; #if defined( CLIENT_WEAPONS ) flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usFireP90, 0, ( float* )&g_vecZero, ( float* )&g_vecZero, vecDir.x, vecDir.y, ( int )( m_pPlayer->pev->punchangle.x * 100 ), ( int )( m_pPlayer->pev->punchangle.y * 100 ), 5, FALSE ); m_flNextPrimaryAttack = m_flNextSecondaryAttack = GetNextAttackDelay( flCycleTime ); if( !m_iClip && m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] <= 0 ) { m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 ); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 2.0; if( !FBitSet( m_pPlayer->pev->flags, FL_ONGROUND ) ) { KickBack( 0.9, 0.45, 0.35, 0.04, 5.25, 3.5, 4 ); } else if( m_pPlayer->pev->velocity.Length2D() > 0 ) { KickBack( 0.45, 0.3, 0.2, 0.0275, 4.0, 2.25, 7 ); } else if( FBitSet(m_pPlayer->pev->flags, FL_DUCKING ) ) { KickBack( 0.275, 0.2, 0.125, 0.02, 3.0, 1.0, 9 ); } else { KickBack( 0.3, 0.225, 0.125, 0.02, 3.25, 1.25, 8 ); } }
void CMP5N::MP5NFire(float flSpread, float flCycleTime, BOOL fUseAutoAim) { Vector vecAiming, vecSrc, vecDir; int flag; m_bDelayFire = true; m_iShotsFired++; m_flAccuracy = ((m_iShotsFired * m_iShotsFired) / 220.1) + 0.45f; if (m_flAccuracy > 0.75f) m_flAccuracy = 0.75f; if (m_iClip <= 0) { if (m_fFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = GetNextAttackDelay(0.2); } if (TheBots) { TheBots->OnEvent(EVENT_WEAPON_FIRED_ON_EMPTY, m_pPlayer); } return; } m_iClip--; m_pPlayer->pev->effects |= EF_MUZZLEFLASH; m_pPlayer->SetAnimation(PLAYER_ATTACK1); UTIL_MakeVectors(m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle); vecSrc = m_pPlayer->GetGunPosition(); vecAiming = gpGlobals->v_forward; #ifdef REGAMEDLL_API float flBaseDamage = CSPlayerWeapon()->m_flBaseDamage; #else float flBaseDamage = MP5N_DAMAGE; #endif vecDir = m_pPlayer->FireBullets3(vecSrc, vecAiming, flSpread, 8192, 1, BULLET_PLAYER_9MM, flBaseDamage, MP5N_RANGE_MODIFER, m_pPlayer->pev, false, m_pPlayer->random_seed); #ifdef CLIENT_WEAPONS flag = FEV_NOTHOST; #else flag = 0; #endif PLAYBACK_EVENT_FULL(flag, m_pPlayer->edict(), m_usFireMP5N, 0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, int(m_pPlayer->pev->punchangle.x * 100), int(m_pPlayer->pev->punchangle.y * 100), FALSE, FALSE); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; m_flNextPrimaryAttack = m_flNextSecondaryAttack = GetNextAttackDelay(flCycleTime); if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { m_pPlayer->SetSuitUpdate("!HEV_AMO0", SUIT_SENTENCE, SUIT_REPEAT_OK); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 2.0f; if (!(m_pPlayer->pev->flags & FL_ONGROUND)) { KickBack(0.9, 0.475, 0.35, 0.0425, 5.0, 3.0, 6); } else if (m_pPlayer->pev->velocity.Length2D() > 0) { KickBack(0.5, 0.275, 0.2, 0.03, 3.0, 2.0, 10); } else if (m_pPlayer->pev->flags & FL_DUCKING) { KickBack(0.225, 0.15, 0.1, 0.015, 2.0, 1.0, 10); } else { KickBack(0.25, 0.175, 0.125, 0.02, 2.25, 1.25, 10); } }
void CFamas::FamasFire( float flSpread, float flCycleTime, BOOL fUseAutoAim, BOOL fUseBurst ) { if( fUseBurst ) { m_iFamasShotsFired = 0; flCycleTime = FAMAS_CYCLE_TIME; } else { flSpread += FAMAS_SPREAD_OFFSET; } m_iShotsFired++; m_fDelayFire = TRUE; m_flAccuracy = ( m_iShotsFired * m_iShotsFired * m_iShotsFired / FAMAS_ACCURACY_DIVISOR ) + FAMAS_ACCURACY_OFFSET; if( m_flAccuracy > FAMAS_MAX_INACCURACY ) { m_flAccuracy = FAMAS_MAX_INACCURACY; } if( m_iClip <= 0 ) { if( m_fFireOnEmpty ) { PlayEmptySound(); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.2; } /*! @todo Implements me : if( TheBots ) TheBots->OnEvent( EVENT_WEAPON_FIRED_ON_EMPTY, m_pPlayer->pev, NULL ); */ return; } m_iClip--; m_pPlayer->pev->effects |= EF_MUZZLEFLASH; m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); Vector vecDir = m_pPlayer->FireBullets3( m_pPlayer->GetGunPosition(), gpGlobals->v_forward, flSpread, 8192.0, FAMAS_PENETRATION, BULLET_PLAYER_556MM, fUseBurst ? FAMAS_DAMAGE_BURST : FAMAS_DAMAGE, FAMAS_RANGE_MODIFIER, m_pPlayer->pev, TRUE, m_pPlayer->random_seed ); PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usFamas, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, m_pPlayer->pev->punchangle.x * 10000000, m_pPlayer->pev->punchangle.y * 10000000, FALSE, FALSE ); m_flNextPrimaryAttack = m_flNextSecondaryAttack = gpGlobals->time + flCycleTime; if( !m_iClip && m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] <= 0 ) { m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 ); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + FAMAS_IDLE_TIME; if( m_pPlayer->pev->velocity.Length2D() > 0 ) { KickBack( 1, 0.45, 0.275, 0.05, 4, 2.5, 7 ); } else if( !FBitSet( m_pPlayer->pev->flags, FL_ONGROUND ) ) { KickBack( 1.25, 0.45, 0.22, 0.18, 5.5, 4, 5 ); } else if( FBitSet( m_pPlayer->pev->flags, FL_DUCKING ) ) { KickBack( 0.575, 0.325, 0.2, 0.011, 3.25, 2, 8 ); } else { KickBack( 0.625, 0.375, 0.25, 0.0125, 3.5, 2.25, 8 ); } if( fUseBurst ) { m_iFamasShotsFired++; m_fBurstSpread = flSpread; m_flFamasShoot = gpGlobals->time + 0.05; } }
/* <276c87> ../cstrike/dlls/wpn_shared/wpn_m249.cpp:121 */ void CM249::M249Fire(float flSpread, float flCycleTime, BOOL fUseAutoAim) { Vector vecAiming, vecSrc, vecDir; int flag; m_bDelayFire = true; m_iShotsFired++; m_flAccuracy = ((m_iShotsFired * m_iShotsFired * m_iShotsFired) / 175) + 0.4; if (m_flAccuracy > 0.9) m_flAccuracy = 0.9; if (m_iClip <= 0) { if (m_fFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = GetNextAttackDelay(0.2); } if (TheBots != NULL) { TheBots->OnEvent(EVENT_WEAPON_FIRED_ON_EMPTY, m_pPlayer); } return; } m_iClip--; m_pPlayer->pev->effects |= EF_MUZZLEFLASH; m_pPlayer->SetAnimation(PLAYER_ATTACK1); UTIL_MakeVectors(m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; vecSrc = m_pPlayer->GetGunPosition(); vecAiming = gpGlobals->v_forward; vecDir = m_pPlayer->FireBullets3(vecSrc, vecAiming, flSpread, 8192, 2, BULLET_PLAYER_556MM, M249_DAMAGE, M249_RANGE_MODIFER, m_pPlayer->pev, false, m_pPlayer->random_seed); #ifdef CLIENT_WEAPONS flag = FEV_NOTHOST; #else flag = 0; #endif // CLIENT_WEAPONS PLAYBACK_EVENT_FULL(flag, m_pPlayer->edict(), m_usFireM249, 0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, (int)(m_pPlayer->pev->punchangle.x * 100), (int)(m_pPlayer->pev->punchangle.y * 100), FALSE, FALSE); m_flNextPrimaryAttack = m_flNextSecondaryAttack = GetNextAttackDelay(flCycleTime); if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.6; if (!(m_pPlayer->pev->flags & FL_ONGROUND)) { KickBack(1.8, 0.65, 0.45, 0.125, 5.0, 3.5, 8); } else if (m_pPlayer->pev->velocity.Length2D() > 0) { KickBack(1.1, 0.5, 0.3, 0.06, 4.0, 3.0, 8); } else if (m_pPlayer->pev->flags & FL_DUCKING) { KickBack(0.75, 0.325, 0.25, 0.025, 3.5, 2.5, 9); } else { KickBack(0.8, 0.35, 0.3, 0.03, 3.75, 3.0, 9); } }
void CM4A1::M4A1Fire(float flSpread, float flCycleTime, BOOL fUseAutoAim) { m_bDelayFire = true; m_iShotsFired++; m_flAccuracy = ((float)(m_iShotsFired * m_iShotsFired * m_iShotsFired) / 220) + 0.3; if (m_flAccuracy > 1) m_flAccuracy = 1; if (m_iClip <= 0) { if (m_fFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.2; } return; } m_iClip--; m_pPlayer->SetAnimation(PLAYER_ATTACK1); UTIL_MakeVectors(m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; Vector vecSrc = m_pPlayer->GetGunPosition(); Vector vecDir; if (m_iWeaponState & WPNSTATE_M4A1_SILENCED) { vecDir = m_pPlayer->FireBullets3(vecSrc, gpGlobals->v_forward, flSpread, 8192, 2, BULLET_PLAYER_556MM, 33, 0.95, m_pPlayer->pev, FALSE, m_pPlayer->random_seed); } else { vecDir = m_pPlayer->FireBullets3(vecSrc, gpGlobals->v_forward, flSpread, 8192, 2, BULLET_PLAYER_556MM, 32, 0.97, m_pPlayer->pev, FALSE, m_pPlayer->random_seed); m_pPlayer->pev->effects |= EF_MUZZLEFLASH; } int flags; #ifdef CLIENT_WEAPONS flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL(flags, m_pPlayer->edict(), m_usFireM4A1, 0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, (int)(m_pPlayer->pev->punchangle.x * 100), (int)(m_pPlayer->pev->punchangle.y * 100), (m_iWeaponState & WPNSTATE_M4A1_SILENCED) ? true : false, FALSE); m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + flCycleTime; if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.5; if (m_pPlayer->pev->velocity.Length2D() > 0) KickBack(1.0, 0.45, 0.28, 0.045, 3.75, 3.0, 7); else if (!FBitSet(m_pPlayer->pev->flags, FL_ONGROUND)) KickBack(1.2, 0.5, 0.23, 0.15, 5.5, 3.5, 6); else if (FBitSet(m_pPlayer->pev->flags, FL_DUCKING)) KickBack(0.6, 0.3, 0.2, 0.0125, 3.25, 2.0, 7); else KickBack(0.65, 0.35, 0.25, 0.015, 3.5, 2.25, 7); }
void CFamas::FamasFire(float flSpread, float flCycleTime, BOOL fUseAutoAim, BOOL bFireBurst) { Vector vecAiming, vecSrc, vecDir; int flag; if (bFireBurst) { m_iFamasShotsFired = 0; flCycleTime = 0.55f; } else { flSpread += 0.01f; } m_bDelayFire = true; ++m_iShotsFired; m_flAccuracy = (m_iShotsFired * m_iShotsFired * m_iShotsFired / 215) + 0.3f; if (m_flAccuracy > 1.0f) m_flAccuracy = 1.0f; if (m_iClip <= 0) { if (m_fFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = GetNextAttackDelay(0.2); } if (TheBots != NULL) { TheBots->OnEvent(EVENT_WEAPON_FIRED_ON_EMPTY, m_pPlayer); } return; } --m_iClip; m_pPlayer->pev->effects |= EF_MUZZLEFLASH; m_pPlayer->SetAnimation(PLAYER_ATTACK1); UTIL_MakeVectors(m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; vecSrc = m_pPlayer->GetGunPosition(); vecAiming = gpGlobals->v_forward; vecDir = m_pPlayer->FireBullets3(vecSrc, vecAiming, flSpread, 8192, 2, BULLET_PLAYER_556MM, bFireBurst ? FAMAS_DAMAGE_BURST : FAMAS_DAMAGE, FAMAS_RANGE_MODIFER, m_pPlayer->pev, false, m_pPlayer->random_seed); #ifdef CLIENT_WEAPONS flag = FEV_NOTHOST; #else flag = 0; #endif PLAYBACK_EVENT_FULL(flag, m_pPlayer->edict(), m_usFireFamas, 0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, int(m_pPlayer->pev->punchangle.x * 10000000), int(m_pPlayer->pev->punchangle.y * 10000000), FALSE, FALSE); m_flNextPrimaryAttack = m_flNextSecondaryAttack = GetNextAttackDelay(flCycleTime); if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.1f; if (m_pPlayer->pev->velocity.Length2D() > 0) { KickBack(1.0, 0.45, 0.275, 0.05, 4.0, 2.5, 7); } else if (!(m_pPlayer->pev->flags & FL_ONGROUND)) { KickBack(1.25, 0.45, 0.22, 0.18, 5.5, 4.0, 5); } else if (m_pPlayer->pev->flags & FL_DUCKING) { KickBack(0.575, 0.325, 0.2, 0.011, 3.25, 2.0, 8); } else { KickBack(0.625, 0.375, 0.25, 0.0125, 3.5, 2.25, 8); } if (bFireBurst) { ++m_iFamasShotsFired; m_fBurstSpread = flSpread; m_flFamasShoot = gpGlobals->time + 0.05f; } }
/* <28140c> ../cstrike/dlls/wpn_shared/wpn_m4a1.cpp:173 */ void CM4A1::M4A1Fire(float flSpread, float flCycleTime, BOOL fUseAutoAim) { Vector vecAiming, vecSrc, vecDir; int flag; m_bDelayFire = true; ++m_iShotsFired; m_flAccuracy = ((m_iShotsFired * m_iShotsFired * m_iShotsFired) / 220) + 0.3f; if (m_flAccuracy > 1) m_flAccuracy = 1; if (m_iClip <= 0) { if (m_fFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = GetNextAttackDelay(0.2); } if (TheBots != NULL) { TheBots->OnEvent(EVENT_WEAPON_FIRED_ON_EMPTY, m_pPlayer); } return; } --m_iClip; m_pPlayer->SetAnimation(PLAYER_ATTACK1); UTIL_MakeVectors(m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; vecSrc = m_pPlayer->GetGunPosition(); vecAiming = gpGlobals->v_forward; if (m_iWeaponState & WPNSTATE_M4A1_SILENCED) { vecDir = m_pPlayer->FireBullets3(vecSrc, vecAiming, flSpread, 8192, 2, BULLET_PLAYER_556MM, M4A1_DAMAGE_SIL, M4A1_RANGE_MODIFER_SIL, m_pPlayer->pev, false, m_pPlayer->random_seed); } else { vecDir = m_pPlayer->FireBullets3(vecSrc, vecAiming, flSpread, 8192, 2, BULLET_PLAYER_556MM, M4A1_DAMAGE, M4A1_RANGE_MODIFER, m_pPlayer->pev, false, m_pPlayer->random_seed); m_pPlayer->pev->effects |= EF_MUZZLEFLASH; } #ifdef CLIENT_WEAPONS flag = FEV_NOTHOST; #else flag = 0; #endif // CLIENT_WEAPONS #ifndef REGAMEDLL_FIXES --m_pPlayer->ammo_556nato; #endif // REGAMEDLL_FIXES PLAYBACK_EVENT_FULL(flag, m_pPlayer->edict(), m_usFireM4A1, 0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, (int)(m_pPlayer->pev->punchangle.x * 100), (int)(m_pPlayer->pev->punchangle.y * 100), (m_iWeaponState & WPNSTATE_M4A1_SILENCED) == WPNSTATE_M4A1_SILENCED, FALSE); m_flNextPrimaryAttack = m_flNextSecondaryAttack = GetNextAttackDelay(flCycleTime); if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.5f; if (m_pPlayer->pev->velocity.Length2D() > 0) { KickBack(1.0, 0.45, 0.28, 0.045, 3.75, 3.0, 7); } else if (!(m_pPlayer->pev->flags & FL_ONGROUND)) { KickBack(1.2, 0.5, 0.23, 0.15, 5.5, 3.5, 6); } else if (m_pPlayer->pev->flags & FL_DUCKING) { KickBack(0.6, 0.3, 0.2, 0.0125, 3.25, 2.0, 7); } else { KickBack(0.65, 0.35, 0.25, 0.015, 3.5, 2.25, 7); } }
void CMP5N::MP5NFire( float flSpread, float flCycleTime, BOOL bUseSemi ) { m_iShotsFired++; m_fDelayFire = TRUE; m_flAccuracy = ( m_iShotsFired * m_iShotsFired ) / MP5N_ACCURACY_DIVISOR + MP5N_ACCURACY_OFFSET; if( m_flAccuracy > MP5N_MAX_INACCURACY ) { m_flAccuracy = MP5N_MAX_INACCURACY; } if( m_iClip <= 0 ) { if ( m_fFireOnEmpty ) { PlayEmptySound(); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.2; } /*! @todo Implements me : if( TheBots ) TheBots->OnEvent( EVENT_WEAPON_FIRED_ON_EMPTY, m_pPlayer->pev, NULL ); */ return; } m_iClip--; m_pPlayer->pev->effects |= EF_MUZZLEFLASH; m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); Vector vecDir = m_pPlayer->FireBullets3( m_pPlayer->GetGunPosition(), gpGlobals->v_forward, flSpread, 8192.0, MP5N_PENETRATION, BULLET_PLAYER_9MM, MP5N_DAMAGE, MP5N_RANGE_MODIFIER, m_pPlayer->pev, FALSE, m_pPlayer->random_seed ); PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usMP5N, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, m_pPlayer->pev->punchangle.x * 100, m_pPlayer->pev->punchangle.y * 100, 0, 0 ); m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + flCycleTime; if( !m_iClip && m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] <= 0 ) { m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 ); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + MP5N_IDLE_TIME; if( m_pPlayer->pev->velocity.Length2D() > 0 ) { KickBack( 0.9, 0.475, 0.35, 0.0425, 5, 3, 6 ); } else if( !FBitSet( m_pPlayer->pev->flags, FL_ONGROUND ) ) { KickBack( 0.5, 0.275, 0.2, 0.03, 3, 2, 10 ); } else if( FBitSet( m_pPlayer->pev->flags, FL_DUCKING ) ) { KickBack( 0.225, 0.15, 0.1, 0.015, 2, 1, 10 ); } else { KickBack( 0.25, 0.175, 0.125, 0.02, 2.25, 1.25, 10 ); } }