void CWeaponG3SG1::G3SG1Fire(float flSpread) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return; // If we are not zoomed in, or we have very recently zoomed and are still transitioning, the bullet diverts more. if (pPlayer->GetFOV() == pPlayer->GetDefaultFOV() || (gpGlobals->curtime < m_zoomFullyActiveTime)) flSpread += 0.025; // Mark the time of this shot and determine the accuracy modifier based on the last shot fired... m_flAccuracy = 0.55 + (0.3) * (gpGlobals->curtime - m_flLastFire); if (m_flAccuracy > 0.98) m_flAccuracy = 0.98; m_flLastFire = gpGlobals->curtime; if (!CSBaseGunFire(flSpread, GetCSWpnData().m_flCycleTime, true)) return; // Adjust the punch angle. QAngle angle = pPlayer->GetPunchAngle(); angle.x -= SharedRandomFloat("G3SG1PunchAngleX", 0.75, 1.75) + (angle.x / 4); angle.y += SharedRandomFloat("G3SG1PunchAngleY", -0.75, 0.75); pPlayer->SetPunchAngle(angle); }
void CWeaponScout::SCOUTFire(float flSpread) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer == NULL) { Assert(pPlayer != NULL); return; } // If we are not zoomed in, or we have very recently zoomed and are still transitioning, the bullet diverts more. if (pPlayer->GetFOV() == pPlayer->GetDefaultFOV() || (gpGlobals->curtime < m_zoomFullyActiveTime)) { flSpread += 0.025; } if (pPlayer->GetFOV() != pPlayer->GetDefaultFOV()) { pPlayer->m_bResumeZoom = true; pPlayer->m_iLastZoom = pPlayer->GetFOV(); #ifndef CLIENT_DLL pPlayer->SetFOV(pPlayer, pPlayer->GetDefaultFOV(), 0.05f); #endif } if (!CSBaseGunFire(flSpread, GetCSWpnData().m_flCycleTime, true)) return; QAngle angle = pPlayer->GetPunchAngle(); angle.x -= 2; pPlayer->SetPunchAngle(angle); }
bool CWeaponBaseGun::BaseGunFire(float flSpread, float flCycleTime, bool bPrimaryMode) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) return false; m_bDelayFire = true; pPlayer->m_iShotsFired++; // Out of ammo? #ifdef WEAPONS_USE_AMMO if (m_iClip1 <= 0) { if (m_bFireOnEmpty) { PlayEmptySound(); m_flNextPrimaryAttack = gpGlobals->curtime + 0.2; } return false; } m_iClip1--; #endif SendWeaponAnim(ACT_VM_PRIMARYATTACK); // player "shoot" animation pPlayer->SetAnimation(PLAYER_ATTACK1); FX_FireBullets(pPlayer->entindex(), pPlayer->Weapon_ShootPosition(), pPlayer->EyeAngles() + 2.0f * pPlayer->GetPunchAngle(), GetWeaponID(), bPrimaryMode ? Primary_Mode : Secondary_Mode, CBaseEntity::GetPredictionRandomSeed() & 255, flSpread); DoFireEffects(); m_flNextPrimaryAttack = m_flNextSecondaryAttack = gpGlobals->curtime + flCycleTime; #ifdef WEAPONS_USE_AMMO if (!m_iClip1 && pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0) { // HEV suit - indicate out of ammo condition pPlayer->SetSuitUpdate("!HEV_AMO0", false, 0); } #endif SetWeaponIdleTime(gpGlobals->curtime + m_flTimeToIdleAfterFire); return true; }
// GOOSEMAN : FireRemaining used by Glock18 void CWeaponFamas::FireRemaining(int &shotsFired, float &shootTime) { float nexttime = 0.1; m_iClip1--; if (m_iClip1 < 0) { m_iClip1 = 0; shotsFired = 3; shootTime = 0.0f; return; } CMomentumPlayer *pPlayer = GetPlayerOwner(); if (!pPlayer) Error("!pPlayer"); // Famas burst mode FX_FireBullets( pPlayer->entindex(), pPlayer->Weapon_ShootPosition(), pPlayer->EyeAngles() + 2.0f * pPlayer->GetPunchAngle(), GetWeaponID(), Secondary_Mode, CBaseEntity::GetPredictionRandomSeed() & 255, m_fBurstSpread); SendWeaponAnim(ACT_VM_PRIMARYATTACK); pPlayer->DoMuzzleFlash(); pPlayer->SetAnimation(PLAYER_ATTACK1); shotsFired++; if (shotsFired != 3) shootTime = gpGlobals->curtime + nexttime; else shootTime = 0.0; }
void CWeaponAWP::AWPFire(float flSpread) { CMomentumPlayer *pPlayer = GetPlayerOwner(); if (pPlayer == nullptr) { Assert(pPlayer != nullptr); return; } // If we are not zoomed in, or we have very recently zoomed and are still transitioning, the bullet diverts more. if (pPlayer->GetFOV() == pPlayer->GetDefaultFOV() || (gpGlobals->curtime < m_zoomFullyActiveTime)) { flSpread += 0.08; } if (pPlayer->GetFOV() != pPlayer->GetDefaultFOV()) { pPlayer->m_iLastZoom = pPlayer->GetFOV(); #ifndef CLIENT_DLL #ifdef AWP_UNZOOM SetContextThink(&CWeaponAWP::UnzoomThink, gpGlobals->curtime + sv_awpunzoomdelay.GetFloat(), SNIPER_ZOOM_CONTEXT); #else pPlayer->m_bResumeZoom = true; pPlayer->SetFOV(pPlayer, pPlayer->GetDefaultFOV(), 0.1f); #endif #endif } if (!CSBaseGunFire(flSpread, GetCSWpnData().m_flCycleTime, true)) return; QAngle angle = pPlayer->GetPunchAngle(); angle.x -= 2; pPlayer->SetPunchAngle(angle); }