/* <2bae77> ../cstrike/dlls/wpn_shared/wpn_usp.cpp:147 */ void CUSP::__MAKE_VHOOK(SecondaryAttack)(void) { if (ShieldSecondaryFire(USP_SHIELD_UP, USP_SHIELD_DOWN)) { return; } if (m_iWeaponState & WPNSTATE_USP_SILENCED) { m_iWeaponState &= ~WPNSTATE_USP_SILENCED; SendWeaponAnim(USP_DETACH_SILENCER, UseDecrement() != FALSE); Q_strcpy(m_pPlayer->m_szAnimExtention, "onehanded"); } else { m_iWeaponState |= WPNSTATE_USP_SILENCED; SendWeaponAnim(USP_ATTACH_SILENCER, UseDecrement() != FALSE); Q_strcpy(m_pPlayer->m_szAnimExtention, "onehanded"); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3.0; m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 3.0; m_flNextPrimaryAttack = GetNextAttackDelay(3.0); }
bool CHEGrenade::ShieldSecondaryFire(int iUpAnim, int iDownAnim) { if (!m_pPlayer->HasShield() || m_flStartThrow > 0) { return false; } if (m_iWeaponState & WPNSTATE_SHIELD_DRAWN) { m_iWeaponState &= ~WPNSTATE_SHIELD_DRAWN; SendWeaponAnim(iDownAnim, UseDecrement() != FALSE); Q_strcpy(m_pPlayer->m_szAnimExtention, "shieldgren"); m_fMaxSpeed = HEGRENADE_MAX_SPEED; m_pPlayer->m_bShieldDrawn = false; } else { m_iWeaponState |= WPNSTATE_SHIELD_DRAWN; SendWeaponAnim(iUpAnim, UseDecrement() != FALSE); Q_strcpy(m_pPlayer->m_szAnimExtention, "shielded"); m_fMaxSpeed = HEGRENADE_MAX_SPEED_SHIELD; m_pPlayer->m_bShieldDrawn = true; } m_pPlayer->UpdateShieldCrosshair((m_iWeaponState & WPNSTATE_SHIELD_DRAWN) != WPNSTATE_SHIELD_DRAWN); m_pPlayer->ResetMaxSpeed(); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.4f; m_flNextPrimaryAttack = GetNextAttackDelay(0.4); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6f; return true; }
void CGauss::PrimaryAttack() { // don't fire underwater if ( m_pPlayer->pev->waterlevel == 3 ) { PlayEmptySound( ); m_flNextSecondaryAttack = m_flNextPrimaryAttack = GetNextAttackDelay(0.15); return; } if ( m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] < 2 ) { PlayEmptySound( ); m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5; return; } m_pPlayer->m_iWeaponVolume = GAUSS_PRIMARY_FIRE_VOLUME; m_fPrimaryFire = TRUE; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 2; StartFire(); m_fInAttack = 0; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0; m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.2; }
/* <2464c1> ../cstrike/dlls/wpn_shared/wpn_c4.cpp:358 */ void CC4::__MAKE_VHOOK(WeaponIdle)(void) { if (m_bStartedArming) { // if the player releases the attack button cancel the arming sequence m_bStartedArming = false; // release the player from being frozen m_pPlayer->ResetMaxSpeed(); m_flNextPrimaryAttack = GetNextAttackDelay(1.0); m_pPlayer->SetProgressBarTime(0); // this means the placement animation is canceled if (m_bBombPlacedAnimation) SendWeaponAnim(C4_DRAW, UseDecrement() != FALSE); else SendWeaponAnim(C4_IDLE1, UseDecrement() != FALSE); } if (m_flTimeWeaponIdle <= UTIL_WeaponTimeBase()) { if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { RetireWeapon(); return; } SendWeaponAnim(C4_DRAW, UseDecrement() != FALSE); SendWeaponAnim(C4_IDLE1, UseDecrement() != FALSE); } }
/* <2464c1> ../cstrike/dlls/wpn_shared/wpn_c4.cpp:358 */ void CC4::__MAKE_VHOOK(WeaponIdle)(void) { if (m_bStartedArming) { m_bStartedArming = false; m_pPlayer->ResetMaxSpeed(); m_flNextPrimaryAttack = GetNextAttackDelay(1.0); m_pPlayer->SetProgressBarTime(0); SendWeaponAnim(m_bBombPlacedAnimation ? C4_DRAW : C4_IDLE1, UseDecrement() != FALSE); } if (m_flTimeWeaponIdle <= UTIL_WeaponTimeBase()) { if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { RetireWeapon(); return; } SendWeaponAnim(C4_DRAW, UseDecrement() != FALSE); SendWeaponAnim(C4_IDLE1, UseDecrement() != FALSE); } }
void CSqueak::PrimaryAttack() { if ( m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { Vector forward = m_pPlayer->GetAimForwardWithOffset(); Vector forwardDeg = m_pPlayer->GetAimForwardWithOffset( true ); UTIL_MakeVectors( forwardDeg ); TraceResult tr; Vector trace_origin; // HACK HACK: Ugly hacks to handle change in origin based on new physics code for players // Move origin up if crouched and start trace a bit outside of body ( 20 units instead of 16 ) trace_origin = m_pPlayer->pev->origin; if ( m_pPlayer->pev->flags & FL_DUCKING ) { trace_origin = trace_origin - ( VEC_HULL_MIN - VEC_DUCK_HULL_MIN ); } // find place to toss monster UTIL_TraceLine( trace_origin + forward * 20, trace_origin + forward * 64, dont_ignore_monsters, NULL, &tr ); int flags; #ifdef CLIENT_WEAPONS flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usSnarkFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, 0, 0, 0 ); if ( tr.fAllSolid == 0 && tr.fStartSolid == 0 && tr.flFraction > 0.25 ) { // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); #ifndef CLIENT_DLL CBaseEntity *pSqueak = CBaseEntity::Create( "monster_snark", tr.vecEndPos, forwardDeg, m_pPlayer->edict() ); pSqueak->pev->velocity = forward * 200 + m_pPlayer->pev->velocity; #endif // play hunt sound #ifndef CLIENT_DLL EMIT_SOUND_DYN( ENT( pev ), CHAN_VOICE, gameplayMods::snarkPenguins.isActive() ? RANDOM_SOUND_ARRAY( pPinguHuntSounds ) : RANDOM_SOUND_ARRAY_PAYNED_DIE_MONSTER( pHuntSounds ), 1, ATTN_NORM, 0, 100 ); #endif // !CLIENT_DLL m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME; if ( !gameplayMods::infiniteAmmo.isActive() ) { m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; } m_fJustThrown = 1; m_flNextPrimaryAttack = GetNextAttackDelay(0.3); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0; } } }
void CSqueak::PrimaryAttack() { if ( m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { UTIL_MakeVectors( m_pPlayer->pev->v_angle ); TraceResult tr; Vector trace_origin; // HACK HACK: Ugly hacks to handle change in origin based on new physics code for players // Move origin up if crouched and start trace a bit outside of body ( 20 units instead of 16 ) trace_origin = m_pPlayer->pev->origin; if ( m_pPlayer->pev->flags & FL_DUCKING ) { trace_origin = trace_origin - ( VEC_HULL_MIN - VEC_DUCK_HULL_MIN ); } // find place to toss monster UTIL_TraceLine( trace_origin + gpGlobals->v_forward * 20, trace_origin + gpGlobals->v_forward * 64, dont_ignore_monsters, NULL, &tr ); int flags; #ifdef CLIENT_WEAPONS flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usSnarkFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, 0, 0, 0 ); if ( tr.fAllSolid == 0 && tr.fStartSolid == 0 && tr.flFraction > 0.25 ) { // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); #ifndef CLIENT_DLL CBaseEntity *pSqueak = CBaseEntity::Create( "monster_snark", tr.vecEndPos, m_pPlayer->pev->v_angle, m_pPlayer->edict() ); pSqueak->pev->velocity = gpGlobals->v_forward * 200 + m_pPlayer->pev->velocity; #endif // play hunt sound float flRndSound = RANDOM_FLOAT ( 0 , 1 ); if ( flRndSound <= 0.5 ) EMIT_SOUND_DYN(ENT(pev), CHAN_VOICE, "squeek/sqk_hunt2.wav", 1, ATTN_NORM, 0, 105); else EMIT_SOUND_DYN(ENT(pev), CHAN_VOICE, "squeek/sqk_hunt3.wav", 1, ATTN_NORM, 0, 105); m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; m_fJustThrown = 1; m_flNextPrimaryAttack = GetNextAttackDelay(0.3); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0; } } }
BOOL CAWP::Deploy(void) { if (DefaultDeploy("models/v_awp.mdl", "models/p_awp.mdl", AWP_DRAW, "rifle", UseDecrement() != FALSE)) { m_flNextPrimaryAttack = m_pPlayer->m_flNextAttack = GetNextAttackDelay(1.45); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0; return TRUE; } return FALSE; }
void CXM1014::Reload() { if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == iMaxClip()) return; // don't reload until recoil is done if (m_flNextPrimaryAttack > UTIL_WeaponTimeBase()) return; // check to see if we're ready to reload if (m_fInSpecialReload == 0) { m_pPlayer->SetAnimation(PLAYER_RELOAD); SendWeaponAnim(XM1014_START_RELOAD, UseDecrement() != FALSE); m_fInSpecialReload = 1; m_flNextSecondaryAttack = m_flTimeWeaponIdle = m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.55f; m_flNextPrimaryAttack = GetNextAttackDelay(0.55); } else if (m_fInSpecialReload == 1) { if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) return; // was waiting for gun to move to side m_fInSpecialReload = 2; if (RANDOM_LONG(0, 1)) EMIT_SOUND_DYN(m_pPlayer->edict(), CHAN_ITEM, "weapons/reload1.wav", VOL_NORM, ATTN_NORM, 0, 85 + RANDOM_LONG(0, 31)); else EMIT_SOUND_DYN(m_pPlayer->edict(), CHAN_ITEM, "weapons/reload3.wav", VOL_NORM, ATTN_NORM, 0, 85 + RANDOM_LONG(0, 31)); SendWeaponAnim(XM1014_RELOAD, UseDecrement()); m_flTimeWeaponIdle = m_flNextReload = UTIL_WeaponTimeBase() + 0.3f; } else { m_iClip++; #ifdef REGAMEDLL_ADD if (refill_bpammo_weapons.value < 3.0f) #endif { m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; m_pPlayer->ammo_buckshot--; } m_fInSpecialReload = 1; } }
void CMP5::SecondaryAttack( void ) { // don't fire underwater if (m_pPlayer->pev->waterlevel == 3) { PlayEmptySound( ); m_flNextPrimaryAttack = 0.15; return; } if (m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType] == 0) { PlayEmptySound( ); return; } m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; m_pPlayer->m_iExtraSoundTypes = bits_SOUND_DANGER; m_pPlayer->m_flStopExtraSoundTime = UTIL_WeaponTimeBase() + 0.2; m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType]--; // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); // we don't add in player velocity anymore. CGrenade::ShootContact( m_pPlayer->pev, m_pPlayer->pev->origin + m_pPlayer->pev->view_ofs + gpGlobals->v_forward * 16, gpGlobals->v_forward * 800 ); int flags; #if defined( CLIENT_WEAPONS ) flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT( flags, m_pPlayer->edict(), m_usMP52 ); m_flNextPrimaryAttack = GetNextAttackDelay(1); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 5;// idle pretty soon after shooting. if (!m_pPlayer->m_rgAmmo[m_iSecondaryAmmoType]) // HEV suit - indicate out of ammo condition m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); }
void CRpg::Reload( void ) { int iResult = 0; if ( m_iClip == 1 ) { // don't bother with any of this if don't need to reload. return; } if ( m_pPlayer->ammo_rockets <= 0 ) return; // because the RPG waits to autoreload when no missiles are active while the LTD is on, the // weapons code is constantly calling into this function, but is often denied because // a) missiles are in flight, but the LTD is on // or // b) player is totally out of ammo and has nothing to switch to, and should be allowed to // shine the designator around // // Set the next attack time into the future so that WeaponIdle will get called more often // than reload, allowing the RPG LTD to be updated m_flNextPrimaryAttack = GetNextAttackDelay(0.5); if ( m_cActiveRockets && m_fSpotActive ) { // no reloading when there are active missiles tracking the designator. // ward off future autoreload attempts by setting next attack time into the future for a bit. return; } #ifndef CLIENT_DLL if ( m_pSpot && m_fSpotActive ) { m_pSpot->Suspend( 2.1 ); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 2.1; } #endif if ( m_iClip == 0 ) iResult = DefaultReload( RPG_MAX_CLIP, RPG_RELOAD, 2 ); if ( iResult ) m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); }
/* <2cad77> ../cstrike/dlls/wpn_shared/wpn_xm1014.cpp:182 */ void CXM1014::__MAKE_VHOOK(Reload)() { if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == XM1014_MAX_CLIP) return; // don't reload until recoil is done if (m_flNextPrimaryAttack > UTIL_WeaponTimeBase()) return; // check to see if we're ready to reload if (m_fInSpecialReload == 0) { m_pPlayer->SetAnimation(PLAYER_RELOAD); SendWeaponAnim(XM1014_START_RELOAD, UseDecrement() != FALSE); m_fInSpecialReload = 1; m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.55f; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.55f; m_flNextPrimaryAttack = GetNextAttackDelay(0.55); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.55f; } else if (m_fInSpecialReload == 1) { if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) return; // was waiting for gun to move to side m_fInSpecialReload = 2; if (RANDOM_LONG(0, 1)) EMIT_SOUND_DYN(m_pPlayer->edict(), CHAN_ITEM, "weapons/reload1.wav", VOL_NORM, ATTN_NORM, 0, 85 + RANDOM_LONG(0, 31)); else EMIT_SOUND_DYN(m_pPlayer->edict(), CHAN_ITEM, "weapons/reload3.wav", VOL_NORM, ATTN_NORM, 0, 85 + RANDOM_LONG(0, 31)); SendWeaponAnim(XM1014_RELOAD, UseDecrement()); m_flNextReload = UTIL_WeaponTimeBase() + 0.3f; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.3f; } else { ++m_iClip; --m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]; --m_pPlayer->ammo_buckshot; m_fInSpecialReload = 1; } }
void CHgun::PrimaryAttack() { Reload( ); if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { return; } #ifndef CLIENT_DLL UTIL_MakeVectors( m_pPlayer->pev->v_angle ); CBaseEntity *pHornet = CBaseEntity::Create( "hornet", m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 16 + gpGlobals->v_right * 8 + gpGlobals->v_up * -12, m_pPlayer->pev->v_angle, m_pPlayer->edict() ); pHornet->pev->velocity = gpGlobals->v_forward * 300; m_flRechargeTime = gpGlobals->time + 0.5; #endif m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; int flags; #if defined( CLIENT_WEAPONS ) flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usHornetFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, FIREMODE_TRACK, 0, 0, 0 ); // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); m_flNextPrimaryAttack = GetNextAttackDelay(0.25); if (m_flNextPrimaryAttack < UTIL_WeaponTimeBase() ) { m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.25; } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); }
void CShotgun::Reload( void ) { if (m_pPlayer->m_rgAmmo[ PrimaryAmmoIndex() ] <= 0 || m_iClip == iMaxClip()) return; // don't reload until recoil is done if (m_flNextPrimaryAttack > UTIL_WeaponTimeBase()) return; // check to see if we're ready to reload if (m_InSpecialReload == ReloadState::NOT_RELOADING ) { SendWeaponAnim( SHOTGUN_START_RELOAD ); m_InSpecialReload = ReloadState::DO_RELOAD_EFFECTS; m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.6; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6; m_flNextPrimaryAttack = GetNextAttackDelay(1.0); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0; return; } else if ( m_InSpecialReload == ReloadState::DO_RELOAD_EFFECTS ) { if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) return; // was waiting for gun to move to side m_InSpecialReload = ReloadState::RELOAD_ONE; if (RANDOM_LONG(0,1)) EMIT_SOUND_DYN( m_pPlayer, CHAN_ITEM, "weapons/reload1.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f)); else EMIT_SOUND_DYN( m_pPlayer, CHAN_ITEM, "weapons/reload3.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f)); SendWeaponAnim( SHOTGUN_RELOAD ); m_flNextReload = UTIL_WeaponTimeBase() + 0.5; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5; } else { // Add them to the clip m_iClip += 1; m_pPlayer->m_rgAmmo[ PrimaryAmmoIndex() ] -= 1; m_InSpecialReload = ReloadState::DO_RELOAD_EFFECTS; } }
void CShotgun::Reload( void ) { if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == SHOTGUN_MAX_CLIP) return; // don't reload until recoil is done if (m_flNextPrimaryAttack > UTIL_WeaponTimeBase()) return; // check to see if we're ready to reload if (m_fInSpecialReload == 0) { SendWeaponAnim( SHOTGUN_START_RELOAD ); m_fInSpecialReload = 1; m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.6; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6; m_flNextPrimaryAttack = GetNextAttackDelay(1.0); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0; return; } else if (m_fInSpecialReload == 1) { if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) return; // was waiting for gun to move to side m_fInSpecialReload = 2; if (RANDOM_LONG(0,1)) EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/reload1.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f)); else EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/reload3.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG(0,0x1f)); SendWeaponAnim( SHOTGUN_RELOAD ); m_flNextReload = UTIL_WeaponTimeBase() + 0.5; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5; } else { // Add them to the clip m_iClip += 1; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 1; m_fInSpecialReload = 1; } }
// this function only gets called in multiplayer void CCrossbow::FireSniperBolt() { m_flNextPrimaryAttack = GetNextAttackDelay(0.75); if (m_iClip == 0) { PlayEmptySound( ); return; } TraceResult tr; m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME; m_iClip--; int flags; #if defined( CLIENT_WEAPONS ) flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usCrossbow2, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0, 0, m_iClip, m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType], 0, 0 ); // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); Vector anglesAim = m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle; UTIL_MakeVectors( anglesAim ); Vector vecSrc = m_pPlayer->GetGunPosition( ) - gpGlobals->v_up * 2; Vector vecDir = gpGlobals->v_forward; UTIL_TraceLine(vecSrc, vecSrc + vecDir * 8192, dont_ignore_monsters, m_pPlayer->edict(), &tr); #ifndef CLIENT_DLL if ( tr.pHit->v.takedamage ) { ClearMultiDamage( ); CBaseEntity::Instance(tr.pHit)->TraceAttack(m_pPlayer->pev, 120, vecDir, &tr, DMG_BULLET | DMG_NEVERGIB ); ApplyMultiDamage( pev, m_pPlayer->pev ); } #endif }
/* <281032> ../cstrike/dlls/wpn_shared/wpn_m4a1.cpp:127 */ void CM4A1::__MAKE_VHOOK(SecondaryAttack)() { if (m_iWeaponState & WPNSTATE_M4A1_SILENCED) { m_iWeaponState &= ~WPNSTATE_M4A1_SILENCED; SendWeaponAnim(M4A1_DETACH_SILENCER, UseDecrement() != FALSE); Q_strcpy(m_pPlayer->m_szAnimExtention, "rifle"); } else { m_iWeaponState |= WPNSTATE_M4A1_SILENCED; SendWeaponAnim(M4A1_ATTACH_SILENCER, UseDecrement() != FALSE); Q_strcpy(m_pPlayer->m_szAnimExtention, "rifle"); } m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 2.0; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 2.0; m_flNextPrimaryAttack = GetNextAttackDelay(2.0); }
void CRpg::PrimaryAttack() { if ( m_iClip ) { m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH; #ifndef CLIENT_DLL // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); UTIL_MakeVectors( m_pPlayer->pev->v_angle ); Vector vecSrc = m_pPlayer->GetGunPosition( ) + gpGlobals->v_forward * 16 + gpGlobals->v_right * 8 + gpGlobals->v_up * -8; CRpgRocket *pRocket = CRpgRocket::CreateRpgRocket( vecSrc, m_pPlayer->pev->v_angle, m_pPlayer, this ); UTIL_MakeVectors( m_pPlayer->pev->v_angle );// RpgRocket::Create stomps on globals, so remake. pRocket->pev->velocity = pRocket->pev->velocity + gpGlobals->v_forward * DotProduct( m_pPlayer->pev->velocity, gpGlobals->v_forward ); #endif // firing RPG no longer turns on the designator. ALT fire is a toggle switch for the LTD. // Ken signed up for this as a global change (sjb) int flags; #if defined( CLIENT_WEAPONS ) flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT( flags, m_pPlayer->edict(), m_usRpg ); m_iClip--; m_flNextPrimaryAttack = GetNextAttackDelay(1.5); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.5; } else { PlayEmptySound( ); } UpdateSpot( ); }
void CGalil::PrimaryAttack() { if (m_pPlayer->pev->waterlevel == 3) { PlayEmptySound(); m_flNextPrimaryAttack = GetNextAttackDelay(0.15); return; } if (!(m_pPlayer->pev->flags & FL_ONGROUND)) { GalilFire(0.04 + (0.3 * m_flAccuracy), 0.0875, FALSE); } else if (m_pPlayer->pev->velocity.Length2D() > 140) { GalilFire(0.04 + (0.07 * m_flAccuracy), 0.0875, FALSE); } else { GalilFire(0.0375 * m_flAccuracy, 0.0875, FALSE); } }
bool CSmokeGrenade::ShieldSecondaryFire( int up_anim, int down_anim ) { if( m_pPlayer->HasShield() || m_flStartThrow > 0 ) { return false; } if( FBitSet( m_iWeaponState, WPNSTATE_SHIELD_DRAWN ) ) { ClearBits( m_iWeaponState, WPNSTATE_SHIELD_DRAWN ); SendWeaponAnim( down_anim, UseDecrement() != FALSE ); strcpy( m_pPlayer->m_szAnimExtention, "shieldgren" ); m_fMaxSpeed = SMOKEGRENADE_MAX_SPEED; m_pPlayer->m_bShieldDrawn = false; } else { SetBits( m_iWeaponState, WPNSTATE_SHIELD_DRAWN ); SendWeaponAnim( up_anim, UseDecrement() != FALSE ); strcpy( m_pPlayer->m_szAnimExtention, "shielded" ); m_fMaxSpeed = SMOKEGRENADE_MAX_SPEED_SHIELD; m_pPlayer->m_bShieldDrawn = true; } m_pPlayer->UpdateShieldCrosshair( FBitSet( m_iWeaponState, WPNSTATE_SHIELD_DRAWN ) ? true : false ); m_pPlayer->ResetMaxSpeed(); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6; m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.4; m_flNextPrimaryAttack = GetNextAttackDelay( 0.4 ); return true; }
void CFamas::__MAKE_VHOOK(PrimaryAttack)() { if (m_pPlayer->pev->waterlevel == 3) { PlayEmptySound(); m_flNextPrimaryAttack = GetNextAttackDelay(0.15); return; } bool bFireBurst = (m_iWeaponState & WPNSTATE_FAMAS_BURST_MODE) == WPNSTATE_FAMAS_BURST_MODE; if (!(m_pPlayer->pev->flags & FL_ONGROUND)) { FamasFire(0.030 + 0.3 * m_flAccuracy, 0.0825, FALSE, bFireBurst); } else if (m_pPlayer->pev->velocity.Length2D() > 140) { FamasFire(0.030 + 0.07 * m_flAccuracy, 0.0825, FALSE, bFireBurst); } else { FamasFire(0.02 * m_flAccuracy, 0.0825, FALSE, bFireBurst); } }
/* <2464e8> ../cstrike/dlls/wpn_shared/wpn_c4.cpp:152 */ void CC4::__MAKE_VHOOK(PrimaryAttack)(void) { BOOL PlaceBomb; int inBombZone, onGround; if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { return; } inBombZone = (m_pPlayer->m_signals.GetState() & SIGNAL_BOMB) == SIGNAL_BOMB; onGround = (m_pPlayer->pev->flags & FL_ONGROUND) == FL_ONGROUND; PlaceBomb = (onGround && inBombZone); if (!m_bStartedArming) { if (!inBombZone) { ClientPrint(m_pPlayer->pev, HUD_PRINTCENTER, "#C4_Plant_At_Bomb_Spot"); m_flNextPrimaryAttack = GetNextAttackDelay(1.0); return; } if (!onGround) { ClientPrint(m_pPlayer->pev, HUD_PRINTCENTER, "#C4_Plant_Must_Be_On_Ground"); m_flNextPrimaryAttack = GetNextAttackDelay(1); return; } m_bStartedArming = true; m_bBombPlacedAnimation = false; m_fArmedTime = gpGlobals->time + C4_ARMING_ON_TIME; SendWeaponAnim(C4_ARM, UseDecrement() != FALSE); SET_CLIENT_MAXSPEED(m_pPlayer->edict(), 1.0); m_pPlayer->SetAnimation(PLAYER_ATTACK1); m_pPlayer->SetProgressBarTime(C4_ARMING_ON_TIME); } else { if (PlaceBomb) { CBaseEntity *pEntity = NULL; CBasePlayer *pTempPlayer = NULL; if (m_fArmedTime <= gpGlobals->time) { if (m_bStartedArming) { m_bStartedArming = false; m_fArmedTime = 0; Broadcast("BOMBPL"); m_pPlayer->m_bHasC4 = false; if (pev->speed != 0 && g_pGameRules != NULL) { g_pGameRules->m_iC4Timer = (int)pev->speed; } CGrenade *pBomb = CGrenade::ShootSatchelCharge(m_pPlayer->pev, m_pPlayer->pev->origin, Vector(0, 0, 0)); MESSAGE_BEGIN(MSG_SPEC, SVC_DIRECTOR); WRITE_BYTE(9); WRITE_BYTE(DRC_CMD_EVENT); WRITE_SHORT(m_pPlayer->entindex()); WRITE_SHORT(0); WRITE_LONG(DRC_FLAG_FACEPLAYER | 11); MESSAGE_END(); MESSAGE_BEGIN(MSG_ALL, gmsgBombDrop); WRITE_COORD(pBomb->pev->origin.x); WRITE_COORD(pBomb->pev->origin.y); WRITE_COORD(pBomb->pev->origin.z); WRITE_BYTE(1); MESSAGE_END(); UTIL_ClientPrintAll(HUD_PRINTCENTER, "#Bomb_Planted"); TheBots->OnEvent(EVENT_BOMB_PLANTED, m_pPlayer, pBomb); if (g_pGameRules->IsCareer() && !m_pPlayer->IsBot()) { TheCareerTasks->HandleEvent(EVENT_BOMB_PLANTED, m_pPlayer); } UTIL_LogPrintf ( "\"%s<%i><%s><TERRORIST>\" triggered \"Planted_The_Bomb\"\n", STRING(m_pPlayer->pev->netname), GETPLAYERUSERID(m_pPlayer->edict()), GETPLAYERAUTHID(m_pPlayer->edict()) ); g_pGameRules->m_bBombDropped = FALSE; EMIT_SOUND(edict(), CHAN_WEAPON, "weapons/c4_plant.wav", VOL_NORM, ATTN_NORM); m_pPlayer->pev->body = 0; m_pPlayer->ResetMaxSpeed(); m_pPlayer->SetBombIcon(FALSE); m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; if (!m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { RetireWeapon(); return; } } } else { if (m_fArmedTime - 0.75 <= gpGlobals->time && !m_bBombPlacedAnimation) { m_bBombPlacedAnimation = true; SendWeaponAnim(C4_DROP, UseDecrement() != FALSE); m_pPlayer->SetAnimation(PLAYER_HOLDBOMB); } } } else { if (inBombZone) ClientPrint(m_pPlayer->pev, HUD_PRINTCENTER, "#C4_Plant_Must_Be_On_Ground"); else ClientPrint(m_pPlayer->pev, HUD_PRINTCENTER, "#C4_Arming_Cancelled"); m_bStartedArming = false; m_flNextPrimaryAttack = GetNextAttackDelay(1.5); m_pPlayer->ResetMaxSpeed(); m_pPlayer->SetProgressBarTime(0); m_pPlayer->SetAnimation(PLAYER_HOLDBOMB); SendWeaponAnim(m_bBombPlacedAnimation ? C4_DRAW : C4_IDLE1, UseDecrement() != FALSE); return; } } m_flNextPrimaryAttack = GetNextAttackDelay(0.3); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); }
void CShotgun::PrimaryAttack() { // don't fire underwater if (m_pPlayer->GetWaterLevel() == WATERLEVEL_HEAD ) { PlayEmptySound( ); m_flNextPrimaryAttack = GetNextAttackDelay(0.15); return; } if (m_iClip <= 0) { Reload( ); if (m_iClip == 0) PlayEmptySound( ); return; } m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME; m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH; m_iClip--; int flags; #if defined( CLIENT_WEAPONS ) flags = FEV_NOTHOST; #else flags = 0; #endif m_pPlayer->pev->effects = (int)(m_pPlayer->pev->effects) | EF_MUZZLEFLASH; Vector vecSrc = m_pPlayer->GetGunPosition( ); Vector vecAiming = m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); Vector vecDir; if ( bIsMultiplayer() ) { vecDir = m_pPlayer->FireBulletsPlayer( 4, vecSrc, vecAiming, VECTOR_CONE_DM_SHOTGUN, 2048, BULLET_PLAYER_BUCKSHOT, 0, 0, m_pPlayer, m_pPlayer->random_seed ); } else { // regular old, untouched spread. vecDir = m_pPlayer->FireBulletsPlayer( 6, vecSrc, vecAiming, VECTOR_CONE_10DEGREES, 2048, BULLET_PLAYER_BUCKSHOT, 0, 0, m_pPlayer, m_pPlayer->random_seed ); } PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usSingleFire, 0.0, g_vecZero, g_vecZero, vecDir.x, vecDir.y, 0, 0, 0, 0 ); if (!m_iClip && m_pPlayer->m_rgAmmo[ PrimaryAmmoIndex() ] <= 0) // HEV suit - indicate out of ammo condition m_pPlayer->SetSuitUpdate("!HEV_AMO0", SUIT_SENTENCE, 0); //if (m_iClip != 0) m_flPumpTime = gpGlobals->time + 0.5; m_flNextPrimaryAttack = GetNextAttackDelay(0.75); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.75; if (m_iClip != 0) m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 5.0; else m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.75; m_InSpecialReload = ReloadState::NOT_RELOADING; }
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 CAWP::AWPFire(float flSpread, float flCycleTime, BOOL fUseAutoAim) { if (m_pPlayer->pev->fov != 90) { m_pPlayer->m_bResumeZoom = true; m_pPlayer->m_iLastZoom = m_pPlayer->m_iFOV; m_pPlayer->m_iFOV = m_pPlayer->pev->fov = 90; } else { flCycleTime += 0.08; } 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_flEjectBrass = gpGlobals->time + 0.55; m_pPlayer->m_iWeaponVolume = BIG_EXPLOSION_VOLUME; m_pPlayer->m_iWeaponFlash = NORMAL_GUN_FLASH; Vector vecDir = FireBullets3(m_pPlayer->GetGunPosition(), gpGlobals->v_forward, flSpread, AWP_DISTANCE, AWP_PENETRATION, BULLET_PLAYER_338MAG, AWP_DAMAGE, AWP_RANGE_MODIFER, m_pPlayer->pev, TRUE, 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_usFireAWP, 0, (float*)&g_vecZero, (float *)&g_vecZero, vecDir.x, vecDir.y, (int)(m_pPlayer->pev->punchangle.x * 100), (int)(m_pPlayer->pev->punchangle.x * 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() + 2.0; m_pPlayer->pev->punchangle.x -= 2; }
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 CELITE::ELITEFire(float flSpread, float flCycleTime, BOOL fUseSemi) { float flTimeDiff; int flag; Vector vecAiming; Vector vecSrc; Vector vecDir; flCycleTime -= 0.078f; if (++m_iShotsFired > 1) { return; } flTimeDiff = gpGlobals->time - m_flLastFire; if (m_flLastFire) { m_flAccuracy -= (0.325f - flTimeDiff) * 0.275f; if (m_flAccuracy > 0.88f) { m_flAccuracy = 0.88f; } else if (m_flAccuracy < 0.55f) { m_flAccuracy = 0.55f; } } m_flLastFire = gpGlobals->time; 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_flNextPrimaryAttack = m_flNextSecondaryAttack = GetNextAttackDelay(flCycleTime); --m_iClip; m_pPlayer->m_iWeaponVolume = BIG_EXPLOSION_VOLUME; m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH; UTIL_MakeVectors(m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle); m_pPlayer->pev->effects |= EF_MUZZLEFLASH; vecSrc = m_pPlayer->GetGunPosition(); vecAiming = gpGlobals->v_forward; #ifdef CLIENT_WEAPONS flag = FEV_NOTHOST; #else flag = 0; #endif // CLIENT_WEAPONS if (m_iWeaponState & WPNSTATE_ELITE_LEFT) { m_pPlayer->SetAnimation(PLAYER_ATTACK1); m_iWeaponState &= ~WPNSTATE_ELITE_LEFT; vecDir = m_pPlayer->FireBullets3(vecSrc - gpGlobals->v_right * 5, vecAiming, flSpread, 8192, BULLET_PLAYER_9MM, 1, ELITE_DAMAGE, ELITE_RANGE_MODIFER, m_pPlayer->pev, true, m_pPlayer->random_seed); PLAYBACK_EVENT_FULL(flag, m_pPlayer->edict(), m_usFireELITE_LEFT, 0, (float *)&g_vecZero, (float *)&g_vecZero, flTimeDiff, vecDir.x, (int)(vecDir.y * 100), m_iClip, FALSE, FALSE); } else { m_pPlayer->SetAnimation(PLAYER_ATTACK2); m_iWeaponState |= WPNSTATE_ELITE_LEFT; vecDir = m_pPlayer->FireBullets3(vecSrc + gpGlobals->v_right * 5, vecAiming, flSpread, 8192, BULLET_PLAYER_9MM, 1, ELITE_DAMAGE, ELITE_RANGE_MODIFER, m_pPlayer->pev, true, m_pPlayer->random_seed); PLAYBACK_EVENT_FULL(flag, m_pPlayer->edict(), m_usFireELITE_RIGHT, 0, (float *)&g_vecZero, (float *)&g_vecZero, flTimeDiff, vecDir.x, (int)(vecDir.y * 100), m_iClip, FALSE, FALSE); } if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 2.0f; m_pPlayer->pev->punchangle.x -= 2.0f; }
void CCrossbow::FireBolt() { TraceResult tr; if (m_iClip == 0) { PlayEmptySound( ); return; } m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME; m_iClip--; int flags; #if defined( CLIENT_WEAPONS ) flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usCrossbow, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0, 0, m_iClip, m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType], 0, 0 ); // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); Vector anglesAim = m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle; UTIL_MakeVectors( anglesAim ); anglesAim.x = -anglesAim.x; Vector vecSrc = m_pPlayer->GetGunPosition( ) - gpGlobals->v_up * 2; Vector vecDir = gpGlobals->v_forward; #ifndef CLIENT_DLL CCrossbowBolt *pBolt = CCrossbowBolt::BoltCreate(); pBolt->pev->origin = vecSrc; pBolt->pev->angles = anglesAim; pBolt->pev->owner = m_pPlayer->edict(); if (m_pPlayer->pev->waterlevel == 3) { pBolt->pev->velocity = vecDir * BOLT_WATER_VELOCITY; pBolt->pev->speed = BOLT_WATER_VELOCITY; } else { pBolt->pev->velocity = vecDir * BOLT_AIR_VELOCITY; pBolt->pev->speed = BOLT_AIR_VELOCITY; } pBolt->pev->avelocity.z = 10; #endif if (!m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) // HEV suit - indicate out of ammo condition m_pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); m_flNextPrimaryAttack = GetNextAttackDelay(0.75); m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.75; if (m_iClip != 0) m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 5.0; else m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.75; }
void CHEGrenade::__MAKE_VHOOK(WeaponIdle)() { if (m_flReleaseThrow == 0 && m_flStartThrow != 0.0f) m_flReleaseThrow = gpGlobals->time; if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) return; if (m_flStartThrow) { m_pPlayer->Radio("%!MRAD_FIREINHOLE", "#Fire_in_the_hole"); Vector angThrow = m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle; if (angThrow.x < 0) angThrow.x = -10 + angThrow.x * ((90 - 10) / 90.0); else angThrow.x = -10 + angThrow.x * ((90 + 10) / 90.0); float flVel = (90.0f - angThrow.x) * 6.0f; if (flVel > 750.0f) flVel = 750.0f; UTIL_MakeVectors(angThrow); Vector vecSrc = m_pPlayer->pev->origin + m_pPlayer->pev->view_ofs + gpGlobals->v_forward * 16; Vector vecThrow = gpGlobals->v_forward * flVel + m_pPlayer->pev->velocity; CGrenade::ShootTimed2(m_pPlayer->pev, vecSrc, vecThrow, 1.5, m_pPlayer->m_iTeam, m_usCreateExplosion); SendWeaponAnim(HEGRENADE_THROW, UseDecrement() != FALSE); SetPlayerShieldAnim(); // player "shoot" animation m_pPlayer->SetAnimation(PLAYER_ATTACK1); m_flStartThrow = 0; m_flNextPrimaryAttack = GetNextAttackDelay(0.5); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.75f; if (--m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) { // just threw last grenade // set attack times in the future, and weapon idle in the future so we can see the whole throw // animation, weapon idle will automatically retire the weapon for us. // ensure that the animation can finish playing m_flTimeWeaponIdle = m_flNextSecondaryAttack = m_flNextPrimaryAttack = GetNextAttackDelay(0.5); } ResetPlayerShieldAnim(); } else if (m_flReleaseThrow > 0) { // we've finished the throw, restart. m_flStartThrow = 0; if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { SendWeaponAnim(HEGRENADE_DRAW, UseDecrement() != FALSE); } else { RetireWeapon(); return; } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); m_flReleaseThrow = -1.0f; } else if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { if (m_pPlayer->HasShield()) { m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 20.0f; if (m_iWeaponState & WPNSTATE_SHIELD_DRAWN) { SendWeaponAnim(SHIELDREN_IDLE, UseDecrement() != FALSE); } } else { SendWeaponAnim(HEGRENADE_IDLE, UseDecrement() != FALSE); // how long till we do this again. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); } } }
void CGauss::SecondaryAttack() { // don't fire underwater if ( m_pPlayer->pev->waterlevel == 3 ) { if ( m_fInAttack != 0 ) { EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/electro4.wav", 1.0, ATTN_NORM, 0, 80 + RANDOM_LONG(0,0x3f)); SendWeaponAnim( GAUSS_IDLE ); m_fInAttack = 0; } else { PlayEmptySound( ); } m_flNextSecondaryAttack = m_flNextPrimaryAttack = GetNextAttackDelay(0.5); return; } if ( m_fInAttack == 0 ) { if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 ) { EMIT_SOUND(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/357_cock1.wav", 0.8, ATTN_NORM); m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5; return; } m_fPrimaryFire = FALSE; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;// take one ammo just to start the spin m_pPlayer->m_flNextAmmoBurn = UTIL_WeaponTimeBase(); // spin up m_pPlayer->m_iWeaponVolume = GAUSS_PRIMARY_CHARGE_VOLUME; SendWeaponAnim( GAUSS_SPINUP ); m_fInAttack = 1; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5; m_pPlayer->m_flStartCharge = gpGlobals->time; m_pPlayer->m_flAmmoStartCharge = UTIL_WeaponTimeBase() + GetFullChargeTime(); PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussSpin, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 110, 0, 0, 0 ); m_iSoundState = SND_CHANGE_PITCH; } else if (m_fInAttack == 1) { if (m_flTimeWeaponIdle < UTIL_WeaponTimeBase()) { SendWeaponAnim( GAUSS_SPIN ); m_fInAttack = 2; } } else { // during the charging process, eat one bit of ammo every once in a while if ( UTIL_WeaponTimeBase() >= m_pPlayer->m_flNextAmmoBurn && m_pPlayer->m_flNextAmmoBurn != 1000 ) { #ifdef CLIENT_DLL if ( bIsMultiplayer() ) #else if ( g_pGameRules->IsMultiplayer() ) #endif { m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; m_pPlayer->m_flNextAmmoBurn = UTIL_WeaponTimeBase() + 0.1; } else { m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; m_pPlayer->m_flNextAmmoBurn = UTIL_WeaponTimeBase() + 0.3; } } if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 ) { // out of ammo! force the gun to fire StartFire(); m_fInAttack = 0; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0; m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1; return; } if ( UTIL_WeaponTimeBase() >= m_pPlayer->m_flAmmoStartCharge ) { // don't eat any more ammo after gun is fully charged. m_pPlayer->m_flNextAmmoBurn = 1000; } int pitch = ( gpGlobals->time - m_pPlayer->m_flStartCharge ) * ( 150 / GetFullChargeTime() ) + 100; if ( pitch > 250 ) pitch = 250; // ALERT( at_console, "%d %d %d\n", m_fInAttack, m_iSoundState, pitch ); if ( m_iSoundState == 0 ) ALERT( at_console, "sound state %d\n", m_iSoundState ); PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussSpin, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, pitch, 0, ( m_iSoundState == SND_CHANGE_PITCH ) ? 1 : 0, 0 ); m_iSoundState = SND_CHANGE_PITCH; // hack for going through level transitions m_pPlayer->m_iWeaponVolume = GAUSS_PRIMARY_CHARGE_VOLUME; // m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.1; if ( m_pPlayer->m_flStartCharge < gpGlobals->time - 10 ) { // Player charged up too long. Zap him. EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_WEAPON, "weapons/electro4.wav", 1.0, ATTN_NORM, 0, 80 + RANDOM_LONG(0,0x3f)); EMIT_SOUND_DYN(ENT(m_pPlayer->pev), CHAN_ITEM, "weapons/electro6.wav", 1.0, ATTN_NORM, 0, 75 + RANDOM_LONG(0,0x3f)); m_fInAttack = 0; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0; m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 1.0; #ifndef CLIENT_DLL m_pPlayer->TakeDamage( VARS(eoNullEntity), VARS(eoNullEntity), 50, DMG_SHOCK ); UTIL_ScreenFade( m_pPlayer, Vector(255,128,0), 2, 0.5, 128, FFADE_IN ); #endif SendWeaponAnim( GAUSS_IDLE ); // Player may have been killed and this weapon dropped, don't execute any more code after this! return; } } }