bool CGEWeaponRocketLauncher::Deploy( void ) { m_bPreLaunch = false; m_flRocketSpawnTime = -1; bool success = BaseClass::Deploy(); if (m_iClip1 > 0) SwitchBodygroup(1, 0); else SwitchBodygroup(1, 1); return success; }
//----------------------------------------------------------------------------- // Purpose: Put the rocket back on the end of the rocket launcher after we reload it. //----------------------------------------------------------------------------- void CGEWeaponRocketLauncher::OnReloadOffscreen(void) { BaseClass::OnReloadOffscreen(); CBaseCombatCharacter *pOwner = GetOwner(); if (!pOwner) return; if (pOwner->GetActiveWeapon() == this) SwitchBodygroup(1, 0); }
void CWeaponShotgun::CalculateShellVis(bool fillclip) { // Shells on the shotgun viewmodel will be removed if the reserve ammo is less than 5. // Each time we draw and reload, we check to see if this is the case, and if it is we change bodygroups accordingly. CBaseCombatCharacter *pOwner = GetOwner(); if (!pOwner) return; int reserveammo = pOwner->GetAmmoCount(m_iPrimaryAmmoType); if (fillclip) //If we need to fill the clip, just subtract the difference between the max capacity and the current value. reserveammo -= GetMaxClip1() - m_iClip1; //This can be negative, it won't change the comparision results. for (int i = 4; i >= 0; i--) { if (reserveammo > i) SwitchBodygroup(m_iShellBodyGroup[i], 0); else SwitchBodygroup(m_iShellBodyGroup[i], 1); } }
//----------------------------------------------------------------------------- // Purpose: Launch a bounce/impact grenade //----------------------------------------------------------------------------- void CGEWeaponRocketLauncher::LaunchRocket( void ) { CBaseCombatCharacter *pOwner = GetOwner(); if ( !pOwner ) return; #ifndef CLIENT_DLL Vector vForward, vRight, vUp; AngleVectors( pOwner->EyeAngles(), &vForward, &vRight, &vUp ); // Manipulate the shoot position such that it is in front of our gun muzzle Vector vecSrc = pOwner->Weapon_ShootPosition(); if ( pOwner->IsPlayer() ) { VectorMA( vecSrc, 4.5f, vRight, vecSrc ); // 3.0, 5.0 VectorMA( vecSrc, 16.5f, vForward, vecSrc ); // 20, 19 VectorMA( vecSrc, -5.25f, vUp, vecSrc ); // -2, -6, -5, 5.25 } else { VectorMA( vecSrc, 20.0, vForward, vecSrc ); } CheckLaunchPosition( pOwner->EyePosition(), vecSrc ); if ( pOwner->MyNPCPointer() ) vForward = pOwner->MyNPCPointer()->GetActualShootTrajectory( vecSrc ); QAngle angAiming; VectorAngles( vForward, angAiming ); // Convert us into a bot player :-D if ( pOwner->IsNPC() ) { CNPC_GEBase *pNPC = (CNPC_GEBase*) pOwner; if ( pNPC->GetBotPlayer() ) pOwner = pNPC->GetBotPlayer(); } CGERocket *pRocket = (CGERocket*)CBaseEntity::Create( "npc_rocket", vecSrc, angAiming, NULL ); if ( pRocket ) { pRocket->SetThrower( pOwner ); pRocket->SetOwnerEntity( pOwner ); pRocket->SetSourceWeapon(this); pRocket->SetDamage( GetGEWpnData().m_iDamage ); pRocket->SetDamageRadius( GetGEWpnData().m_flDamageRadius ); if (pOwner->GetTeamNumber() == TEAM_JANUS) pRocket->SetCollisionGroup( COLLISION_GROUP_GRENADE_JANUS ); else if (pOwner->GetTeamNumber() == TEAM_MI6) pRocket->SetCollisionGroup( COLLISION_GROUP_GRENADE_MI6 ); // Tell the owner what we threw to implement anti-spamming if ( pOwner->IsPlayer() ) ToGEMPPlayer( pOwner )->AddThrownObject( pRocket ); } #endif // Remove the rocket from our ammo pool m_iClip1 -= 1; WeaponSound( SINGLE ); SwitchBodygroup(1, 1); //Add our view kick in AddViewKick(); }