void CC4::WeaponIdle(void) { if (m_bStartedArming == true) { m_bStartedArming = false; m_pPlayer->ResetMaxSpeed(); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1; m_pPlayer->SetProgressBarTime(0); if (m_bBombPlacedAnimation == true) 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); } }
/* <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); } }
void CTripmine::WeaponIdle( void ) { if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) return; if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] > 0 ) { SendWeaponAnim( TRIPMINE_DRAW ); } else { RetireWeapon(); return; } int iAnim; float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 ); if (flRand <= 0.25) { iAnim = TRIPMINE_IDLE1; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 90.0 / 30.0; } else if (flRand <= 0.75) { iAnim = TRIPMINE_IDLE2; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 60.0 / 30.0; } else { iAnim = TRIPMINE_FIDGET; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 100.0 / 30.0; } SendWeaponAnim( iAnim ); }
void CTripmine::PrimaryAttack( void ) { if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) return; UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); Vector vecSrc = m_pPlayer->GetGunPosition( ); Vector vecAiming = gpGlobals->v_forward; TraceResult tr; UTIL_TraceLine( vecSrc, vecSrc + vecAiming * 128, dont_ignore_monsters, ENT( m_pPlayer->pev ), &tr ); int flags; #ifdef CLIENT_WEAPONS flags = FEV_NOTHOST; #else flags = 0; #endif PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usTripFire, 0.0, (float *)&g_vecZero, (float *)&g_vecZero, 0.0, 0.0, 0, 0, 0, 0 ); if (tr.flFraction < 1.0) { CBaseEntity *pEntity = CBaseEntity::Instance( tr.pHit ); if ( pEntity && !(pEntity->pev->flags & FL_CONVEYOR) ) { Vector angles = UTIL_VecToAngles( tr.vecPlaneNormal ); CBaseEntity *pEnt = CBaseEntity::Create( "monster_tripmine", tr.vecEndPos + tr.vecPlaneNormal * 8, angles, m_pPlayer->edict() ); m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 ) { // no more mines! RetireWeapon(); return; } } else { // ALERT( at_console, "no deploy\n" ); } } else { } m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.3; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); }
void CSatchel::WeaponIdle(void) { if (m_flTimeUpdate < UTIL_GlobalTimeBase() && m_iChargeLevel) { edict_t *pPlayer = m_pPlayer->edict(); CBaseEntity *pSatchel = NULL; while ((pSatchel = UTIL_FindEntityInSphere(pSatchel, m_pPlayer->pev->origin, 4096)) != NULL) { if (FClassnameIs(pSatchel->pev, "monster_satchel")) { if (pSatchel->pev->owner == pPlayer) { pSatchel->Use(m_pPlayer, m_pPlayer, USE_ON, 0); m_chargeReady = 2; } } } SendWeaponAnim(SATCHEL_RADIO_HOLSTER); m_iChargeLevel = 0; } if (m_flTimeWeaponIdle > UTIL_GlobalTimeBase()) return; switch (m_chargeReady) { case 0: SendWeaponAnim(SATCHEL_FIDGET1); // use tripmine animations strcpy(m_pPlayer->m_szAnimExtention, "trip"); break; case 1: SendWeaponAnim(SATCHEL_RADIO_FIDGET1); // use hivehand animations strcpy(m_pPlayer->m_szAnimExtention, "hive"); break; case 2: if (!m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { m_chargeReady = 0; RetireWeapon(); return; } m_pPlayer->pev->viewmodel = MAKE_STRING("models/v_satchel.mdl"); m_pPlayer->pev->weaponmodel = MAKE_STRING("models/p_satchel.mdl"); SendWeaponAnim(SATCHEL_DRAW); // use tripmine animations strcpy(m_pPlayer->m_szAnimExtention, "trip"); m_flNextPrimaryAttack = UTIL_GlobalTimeBase() + 0.5; m_flNextSecondaryAttack = UTIL_GlobalTimeBase() + 0.5; m_chargeReady = 0; break; } m_flTimeWeaponIdle = UTIL_GlobalTimeBase() + RANDOM_LONG(10, 15);// how long till we do this again. }
void CTripmine::PrimaryAttack( void ) { if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) return; UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); Vector vecSrc = m_pPlayer->GetGunPosition( ); Vector vecAiming = gpGlobals->v_forward; TraceResult tr; UTIL_TraceLine( vecSrc, vecSrc + vecAiming * 128, dont_ignore_monsters, ENT( m_pPlayer->pev ), &tr ); if (tr.flFraction < 1.0) { // ALERT( at_console, "hit %f\n", tr.flFraction ); CBaseEntity *pEntity = CBaseEntity::Instance( tr.pHit ); if (pEntity && !(pEntity->pev->flags & FL_CONVEYOR)) { Vector angles = UTIL_VecToAngles( tr.vecPlaneNormal ); CBaseEntity *pEnt = CBaseEntity::Create( "monster_tripmine", tr.vecEndPos + tr.vecPlaneNormal * 8, angles, m_pPlayer->edict() ); CTripmineGrenade *pMine = (CTripmineGrenade *)pEnt; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] > 0) { SendWeaponAnim( TRIPMINE_DRAW ); } else { // no more mines! RetireWeapon(); return; } } else { // ALERT( at_console, "no deploy\n" ); } } else { } m_flNextPrimaryAttack = gpGlobals->time + 0.3; m_flTimeWeaponIdle = gpGlobals->time + RANDOM_FLOAT ( 10, 15 ); }
void AvHMine::DeductCostForShot(void) { AvHBasePlayerWeapon::DeductCostForShot(); //this->m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; //if(this->m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) if(!this->m_iClip) { // no more mines! RetireWeapon(); } }
void CSqueak::WeaponIdle( void ) { #ifndef CLIENT_DLL if ( gameplayMods::snarkPenguins.isActive() ) { MESSAGE_BEGIN( MSG_ONE, gmsgSetSkin, NULL, m_pPlayer->pev ); WRITE_BYTE( gameplayMods::snarkNuclear.isActive() ? 0 : 1 ); MESSAGE_END(); } #endif if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) return; if (m_fJustThrown) { m_fJustThrown = 0; if ( !m_pPlayer->m_rgAmmo[PrimaryAmmoIndex()] ) { RetireWeapon(); return; } SendWeaponAnim( SQUEAK_UP, 1, !gameplayMods::snarkNuclear.isActive() ); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); return; } int iAnim; float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 ); if (flRand <= 0.75) { iAnim = SQUEAK_IDLE1; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 30.0 / 16 * (2); } else if (flRand <= 0.875) { iAnim = SQUEAK_FIDGETFIT; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 70.0 / 16.0; } else { iAnim = SQUEAK_FIDGETNIP; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 80.0 / 16.0; } SendWeaponAnim( iAnim, 1, !gameplayMods::snarkNuclear.isActive() ); }
void CSatchel::WeaponIdle( void ) { if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) return; switch( m_chargeReady ) { case 0: SendWeaponAnim( SATCHEL_FIDGET1 ); // use tripmine animations strcpy( m_pPlayer->m_szAnimExtention, "trip" ); break; case 1: SendWeaponAnim( SATCHEL_RADIO_FIDGET1 ); // use hivehand animations strcpy( m_pPlayer->m_szAnimExtention, "hive" ); break; case 2: if ( !m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] ) { m_chargeReady = 0; RetireWeapon(); return; } #ifndef CLIENT_DLL m_pPlayer->pev->viewmodel = MAKE_STRING("models/v_satchel.mdl"); m_pPlayer->pev->weaponmodel = MAKE_STRING("models/p_satchel.mdl"); #else LoadVModel ( "models/v_satchel.mdl", m_pPlayer ); #endif SendWeaponAnim( SATCHEL_DRAW ); // use tripmine animations strcpy( m_pPlayer->m_szAnimExtention, "trip" ); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5; m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5; m_chargeReady = 0; break; } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );// how long till we do this again. }
void CPenguin::WeaponIdle() { if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) return; if( m_bJustThrown ) { m_bJustThrown = false; if( !m_pPlayer->m_rgAmmo[ PrimaryAmmoIndex() ] ) { RetireWeapon(); return; } SendWeaponAnim( PENGUIN_UP ); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); return; } int iAnim; float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 ); if( flRand <= 0.75 ) { iAnim = PENGUIN_IDLE1; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 30.0 / 16 * ( 2 ); } else if( flRand <= 0.875 ) { iAnim = PENGUIN_FIDGETFIT; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 70.0 / 16.0; } else { iAnim = PENGUIN_FIDGETNIP; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 80.0 / 16.0; } SendWeaponAnim( iAnim ); }
void CTripmine::WeaponIdle( void ) { if (m_flTimeWeaponIdle > gpGlobals->time) return; if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] > 0) { SendWeaponAnim( TRIPMINE_DRAW ); } else { RetireWeapon(); return; } int iAnim; float flRand = RANDOM_FLOAT(0, 1); if (flRand <= 0.25) { iAnim = TRIPMINE_IDLE1; m_flTimeWeaponIdle = gpGlobals->time + 90.0 / 30.0; } else if (flRand <= 0.75) { iAnim = TRIPMINE_IDLE2; m_flTimeWeaponIdle = gpGlobals->time + 60.0 / 30.0; } else { iAnim = TRIPMINE_FIDGET; m_flTimeWeaponIdle = gpGlobals->time + 100.0 / 30.0; } SendWeaponAnim( iAnim ); }
/* <25a8bd> ../cstrike/dlls/wpn_shared/wpn_flashbang.cpp:198 */ void CFlashbang::__MAKE_VHOOK(WeaponIdle)(void) { 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_precision flVel = (90.0 - angThrow.x) * 6.0; 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::ShootTimed(m_pPlayer->pev, vecSrc, vecThrow, 1.5); SendWeaponAnim(FLASHBANG_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.75; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; if (!m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { // 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; RetireWeapon(); } else if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { int iAnim; float flRand = RANDOM_FLOAT(0, 1); if (m_pPlayer->HasShield()) { m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 20.0; if (m_iWeaponState & WPNSTATE_SHIELD_DRAWN) { SendWeaponAnim(SHIELDREN_IDLE, UseDecrement() != FALSE); } } else { if (flRand <= 0.75) { iAnim = FLASHBANG_IDLE; // how long till we do this again. m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); } else { #ifdef REGAMEDLL_FIXES iAnim = FLASHBANG_IDLE; #else // TODO: This is a bug? iAnim = *(int *)&flRand; #endif // REGAMEDLL_FIXES m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 75.0 / 30.0; } SendWeaponAnim(iAnim, UseDecrement() != FALSE); } } }
void CSmokeGrenade::WeaponIdle(void) { if (!m_flReleaseThrow && m_flStartThrow) 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 - angThrow.x) * 6; if (flVel > 750) flVel = 750; 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; float time = 1.5; CGrenade::ShootSmokeGrenade(m_pPlayer->pev, vecSrc, vecThrow, time, m_usCreateSmoke); SendWeaponAnim(SMOKEGRENADE_THROW, UseDecrement() != FALSE); SetPlayerShieldAnim(); m_pPlayer->SetAnimation(PLAYER_ATTACK1); m_flStartThrow = 0; m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.75; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; if (!m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) m_flTimeWeaponIdle = m_flNextSecondaryAttack = m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5; ResetPlayerShieldAnim(); return; } else if (m_flReleaseThrow > 0) { m_flStartThrow = 0; if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { SendWeaponAnim(SMOKEGRENADE_DRAW, UseDecrement() != FALSE); m_flReleaseThrow = -1; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); } else RetireWeapon(); return; } if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { if (m_pPlayer->HasShield() != false) { m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 20.0; if (m_iWeaponState & WPNSTATE_SHIELD_DRAWN) SendWeaponAnim(SHIELDREN_IDLE, UseDecrement() != FALSE); return; } int iAnim; float flRand = RANDOM_FLOAT(0, 1); if (flRand <= 0.75) { iAnim = SMOKEGRENADE_IDLE; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); } else { iAnim = SMOKEGRENADE_IDLE; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 75.0 / 30.0; } SendWeaponAnim(iAnim, UseDecrement() != FALSE); } }
void CSmokeGrenade::WeaponIdle() { if( !m_flReleaseThrow && m_flStartThrow ) { m_flReleaseThrow = gpGlobals->time; } if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) { return; } if( m_flStartThrow ) { m_pPlayer->Radio( "%!MRAD_FIREINHOLE", "#Fire_in_the_hole", PITCH_NORM, TRUE ); 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 - angThrow.x ) * 6; if( flVel > 750 ) { flVel = 750; } UTIL_MakeVectors( angThrow ); Vector vecSrc = m_pPlayer->GetGunPosition() + gpGlobals->v_forward * 16; Vector vecThrow = gpGlobals->v_forward * flVel + m_pPlayer->pev->velocity; CGrenade::ShootSmokeGrenade( m_pPlayer->pev, vecSrc, vecThrow, 1.5, m_usSmoke ); SendWeaponAnim( SMOKEGRENADE_THROW, UseDecrement() ); SetPlayerShieldAnim(); m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); m_flStartThrow = 0; m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.75; m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ]--; if( !m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5; m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5; m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5; } ResetPlayerShieldAnim(); return; } else if( m_flReleaseThrow ) { m_flStartThrow = 0; if( m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { SendWeaponAnim( SMOKEGRENADE_DEPLOY, UseDecrement() ); m_flReleaseThrow = -1.0; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT( 10.0, 15.0 ); } else { RetireWeapon(); } return; } if( m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { if( m_pPlayer->HasShield() ) { m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 20.0; if( !FBitSet( m_fWeaponState, WEAPONSTATE_SHIELD_DRAWN ) ) { SendWeaponAnim( GRENADE_SHIELD_IDLE, UseDecrement() ); } } else { SendWeaponAnim( SMOKEGRENADE_IDLE, UseDecrement() ); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT( 10.0, 15.0 ); } } }
void CHandGrenade::WeaponIdle(void) { if (m_flTimeUpdate < UTIL_GlobalTimeBase() && m_iChargeLevel) { // we've finished the throw, restart. m_flStartThrow = 0; m_iChargeLevel = 0; if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) SendWeaponAnim(HANDGRENADE_DRAW); else { RetireWeapon(); return; } m_flTimeWeaponIdle = UTIL_GlobalTimeBase() + RANDOM_LONG(10, 15); return; } if (m_flTimeWeaponIdle > UTIL_GlobalTimeBase()) return; if (m_flStartThrow) { 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 - angThrow.x) * 4; if (flVel > 500) flVel = 500; 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; // alway explode 3 seconds after the pin was pulled float time = m_flStartThrow - UTIL_GlobalTimeBase() + 3.0; if (time < 0) time = 0; CGrenade::ShootTimed(m_pPlayer->pev, vecSrc, vecThrow, time); if (flVel < 500) SendWeaponAnim(HANDGRENADE_THROW1); else if (flVel < 1000) SendWeaponAnim(HANDGRENADE_THROW2); else SendWeaponAnim(HANDGRENADE_THROW3); // player "shoot" animation m_pPlayer->SetAnimation(PLAYER_ATTACK1); m_flStartThrow = 0; m_iChargeLevel = 1; m_flNextPrimaryAttack = UTIL_GlobalTimeBase() + 0.5; m_flTimeWeaponIdle = UTIL_GlobalTimeBase() + 0.5; m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--; if (!m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { // 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. m_flTimeWeaponIdle = m_flNextSecondaryAttack = m_flNextPrimaryAttack = UTIL_GlobalTimeBase() + 0.5;// ensure that the animation can finish playing } m_flTimeUpdate = m_flNextSecondaryAttack = m_flNextPrimaryAttack = UTIL_GlobalTimeBase() + 1.0; m_flTimeWeaponIdle = UTIL_GlobalTimeBase() + 3.0; return; } if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]) { int iAnim; float flRand = RANDOM_FLOAT(0, 1); if (flRand <= 0.75) { iAnim = HANDGRENADE_IDLE; m_flTimeWeaponIdle = UTIL_GlobalTimeBase() + RANDOM_LONG(10, 15);// how long till we do this again. } else { iAnim = HANDGRENADE_FIDGET; m_flTimeWeaponIdle = UTIL_GlobalTimeBase() + 75.0 / 30.0; } SendWeaponAnim(iAnim); } }
/* <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 CHEGrenade::WeaponIdle( void ) { if ( m_flReleaseThrow == 0 && m_flStartThrow ) m_flReleaseThrow = gpGlobals->time; if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) return; if ( m_flStartThrow ) { 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 - angThrow.x ) * 6; if ( flVel > 750 ) { flVel = 750; } UTIL_MakeVectors( angThrow ); Vector vecSrc = m_pPlayer->GetGunPosition() + gpGlobals->v_forward * 16; Vector vecThrow = gpGlobals->v_forward * flVel + m_pPlayer->pev->velocity; CGrenade::ShootTimed2( m_pPlayer->pev, vecSrc, vecThrow, 1.5, "models/weapons/hegrenade/w_hegrenade.mdl", 120 ); SendWeaponAnim( HEGRENADE_THROW, UseDecrement() ); m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); m_flStartThrow = 0; m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.75; m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ]--; if ( !m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5; m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5; m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5; } return; } else if ( m_flReleaseThrow > 0 ) { // we've finished the throw, restart. m_flStartThrow = 0; if ( m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { SendWeaponAnim( HEGRENADE_DEPLOY ); } else { RetireWeapon(); return; } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); m_flReleaseThrow = -1; return; } if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] ) { SendWeaponAnim( HEGRENADE_IDLE, UseDecrement() ); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT( 10.0, 15.0 ); } }
void CC4::PrimaryAttack(void) { if (m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0) return; BOOL onBombZone = m_pPlayer->m_signals.GetState() & SIGNAL_BOMB; BOOL onGround = m_pPlayer->pev->flags & FL_ONGROUND; if (!m_bStartedArming) { if (!onBombZone) { ClientPrint(m_pPlayer->pev, HUD_PRINTCENTER, "#C4_Plant_At_Bomb_Spot"); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1; return; } if (!onGround) { ClientPrint(m_pPlayer->pev, HUD_PRINTCENTER, "#C4_Plant_Must_Be_On_Ground"); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1; return; } m_bStartedArming = true; m_bBombPlacedAnimation = false; m_fArmedTime = gpGlobals->time + 3; SendWeaponAnim(C4_ARM, UseDecrement() != FALSE); g_engfuncs.pfnSetClientMaxspeed(ENT(m_pPlayer->pev), 1); m_pPlayer->SetAnimation(PLAYER_ATTACK1); m_pPlayer->SetProgressBarTime(3); m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.3; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); } else { if (!onGround || !onBombZone) { if (onBombZone) 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 = UTIL_WeaponTimeBase() + 1.5; m_pPlayer->ResetMaxSpeed(); m_pPlayer->SetProgressBarTime(0); m_pPlayer->SetAnimation(PLAYER_HOLDBOMB); if (m_bBombPlacedAnimation == true) SendWeaponAnim(C4_DRAW, UseDecrement() != FALSE); else SendWeaponAnim(C4_IDLE1, UseDecrement() != FALSE); return; } if (gpGlobals->time > m_fArmedTime) { if (m_bStartedArming == true) { m_bStartedArming = false; m_fArmedTime = 0; Broadcast("BOMBPL"); m_pPlayer->m_bHasC4 = false; #ifndef CLIENT_WEAPONS if (pev->speed != 0 && g_pGameRules) g_pGameRules->m_iC4Timer = (int)pev->speed; #endif CGrenade *pGrenade = 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(ENTINDEX(m_pPlayer->edict())); WRITE_SHORT(0); WRITE_LONG(11 | DRC_FLAG_FACEPLAYER); MESSAGE_END(); #ifndef CLIENT_WEAPONS MESSAGE_BEGIN(MSG_ALL, gmsgBombDrop); WRITE_COORD(pGrenade->pev->origin.x); WRITE_COORD(pGrenade->pev->origin.y); WRITE_COORD(pGrenade->pev->origin.z); WRITE_BYTE(1); MESSAGE_END(); #endif UTIL_ClientPrintAll(HUD_PRINTCENTER, "#Bomb_Planted"); #ifndef CLIENT_WEAPONS if (g_pGameRules->IsCareer() && !m_pPlayer->IsBot()) { } #endif UTIL_LogPrintf("\"%s<%i><%s><TERRORIST>\" triggered \"Planted_The_Bomb\"\n", STRING(m_pPlayer->pev->netname), GETPLAYERUSERID(m_pPlayer->edict()), GETPLAYERAUTHID(m_pPlayer->edict())); #ifndef CLIENT_WEAPONS g_pGameRules->m_bBombDropped = false; #endif EMIT_SOUND(ENT(pev), 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 (gpGlobals->time >= m_fArmedTime - 0.75) { if (m_bBombPlacedAnimation == false) { m_bBombPlacedAnimation = true; SendWeaponAnim(C4_DROP, UseDecrement() != FALSE); m_pPlayer->SetAnimation(PLAYER_HOLDBOMB); } } } } m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.3; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + RANDOM_FLOAT(10, 15); }
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 CHandGrenade::WeaponIdle( void ) { if ( m_flReleaseThrow == 0 && m_flStartThrow ) m_flReleaseThrow = gpGlobals->time; if ( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) return; if ( m_flStartThrow ) { 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 - angThrow.x ) * 6; if ( flVel > 800 ) flVel = 800; ALERT( at_console, "flVel: %f\n", flVel ); 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; // alway explode 3 seconds after the pin was pulled float time = m_flStartThrow - gpGlobals->time + 3.0; if (time < 0) time = 0; CGrenade::ShootTimed( m_pPlayer->pev, vecSrc, vecThrow, time ); if ( flVel < 500 ) { SendWeaponAnim( HANDGRENADE_THROW1 ); } else if ( flVel < 1000 ) { SendWeaponAnim( HANDGRENADE_THROW2 ); } else { SendWeaponAnim( HANDGRENADE_THROW3 ); } // player "shoot" animation m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); m_flReleaseThrow = 0; m_flStartThrow = 0; m_flNextPrimaryAttack = GetNextAttackDelay(0.5); m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5; m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ]--; if ( !m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { // 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. m_flTimeWeaponIdle = m_flNextSecondaryAttack = m_flNextPrimaryAttack = GetNextAttackDelay(0.5);// ensure that the animation can finish playing } return; } else if ( m_flReleaseThrow > 0 ) { // we've finished the throw, restart. m_flStartThrow = 0; if ( m_pPlayer->m_rgAmmo[ m_iPrimaryAmmoType ] ) { SendWeaponAnim( HANDGRENADE_DRAW ); } else { RetireWeapon(); return; } m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); m_flReleaseThrow = -1; return; } if ( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] ) { int iAnim; float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 ); if (flRand <= 0.75) { iAnim = HANDGRENADE_IDLE; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );// how long till we do this again. } else { iAnim = HANDGRENADE_FIDGET; m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 75.0 / 30.0; } SendWeaponAnim( iAnim ); } }