void CWeaponPortalgun::FirePortal2( inputdata_t &inputdata ) { FirePortal( true ); m_iLastFiredPortal = 2; CBaseCombatCharacter *pOwner = GetOwner(); if( pOwner && pOwner->IsPlayer() ) { WeaponSound( WPN_DOUBLE ); } else { WeaponSound( DOUBLE_NPC ); } }
void CWeaponPortalgun::FirePortal1( inputdata_t &inputdata ) { FirePortal( false ); m_iLastFiredPortal = 1; CBaseCombatCharacter *pOwner = GetOwner(); if( pOwner && pOwner->IsPlayer() ) { WeaponSound( SINGLE ); } else { WeaponSound( SINGLE_NPC ); } }
void CWeaponPortalgun::FirePortalDirection2( inputdata_t &inputdata ) { Vector vDirection; inputdata.value.Vector3D( vDirection ); FirePortal( true, &vDirection ); m_iLastFiredPortal = 2; CBaseCombatCharacter *pOwner = GetOwner(); if( pOwner && pOwner->IsPlayer() ) { WeaponSound( WPN_DOUBLE ); } else { WeaponSound( DOUBLE_NPC ); } }
bool CWeaponDODBase::DefaultReload( int iClipSize1, int iClipSize2, int iActivity ) { CBaseCombatCharacter *pOwner = GetOwner(); if (!pOwner) return false; // If I don't have any spare ammo, I can't reload if ( pOwner->GetAmmoCount(m_iPrimaryAmmoType) <= 0 ) return false; bool bReload = false; // If you don't have clips, then don't try to reload them. if ( UsesClipsForAmmo1() ) { // need to reload primary clip? int primary = min(iClipSize1 - m_iClip1, pOwner->GetAmmoCount(m_iPrimaryAmmoType)); if ( primary != 0 ) { bReload = true; } } if ( UsesClipsForAmmo2() ) { // need to reload secondary clip? int secondary = min(iClipSize2 - m_iClip2, pOwner->GetAmmoCount(m_iSecondaryAmmoType)); if ( secondary != 0 ) { bReload = true; } } if ( !bReload ) return false; CDODPlayer *pPlayer = GetDODPlayerOwner(); if ( pPlayer ) { #ifdef CLIENT_DLL PlayWorldReloadSound( pPlayer ); #else pPlayer->DoAnimationEvent( PLAYERANIMEVENT_RELOAD ); #endif } SendWeaponAnim( iActivity ); // Play the player's reload animation if ( pOwner->IsPlayer() ) { ( ( CBasePlayer * )pOwner)->SetAnimation( PLAYER_RELOAD ); } float flSequenceEndTime = gpGlobals->curtime + SequenceDuration(); pOwner->SetNextAttack( flSequenceEndTime ); m_flNextPrimaryAttack = m_flNextSecondaryAttack = flSequenceEndTime; m_bInReload = true; return true; }
//----------------------------------------------------------------------------- // 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(); }
//----------------------------------------------------------------------------- // Purpose: Throw a primed grenade with timeleft of (gpGlobals->curtime - m_flPrimedTime) //----------------------------------------------------------------------------- void CGEWeaponGrenade::ThrowGrenade( float throwforce ) { CBaseCombatCharacter *pOwner = GetOwner(); if ( !pOwner ) return; // Remove the grenade from our ammo pool pOwner->RemoveAmmo( 1, m_iPrimaryAmmoType ); #ifndef CLIENT_DLL Vector vecEye = pOwner->EyePosition(); Vector vForward, vRight; AngleVectors( pOwner->EyeAngles(), &vForward, &vRight, NULL ); Vector vecSrc = vecEye + vForward * 18.0f + vRight * 8.0f; CheckThrowPosition( vecEye, vecSrc ); vForward[2] += 0.1f; Vector vecThrow; pOwner->GetVelocity( &vecThrow, NULL ); vecThrow += vForward * throwforce; // Convert us into a bot player :-D if ( pOwner->IsNPC() ) { CNPC_GEBase *pNPC = (CNPC_GEBase*) pOwner; if ( pNPC->GetBotPlayer() ) pOwner = pNPC->GetBotPlayer(); } CGEGrenade *pGrenade = (CGEGrenade *)CBaseEntity::Create( "npc_grenade", vecSrc, vec3_angle, NULL ); if ( pGrenade ) { pGrenade->SetThrower( pOwner ); pGrenade->SetOwnerEntity( pOwner ); pGrenade->SetVelocity( vecThrow, AngularImpulse(600,random->RandomInt(-1000,1000),0) ); pGrenade->SetDamage( GetGEWpnData().m_iDamage ); pGrenade->SetDamageRadius( GetGEWpnData().m_flDamageRadius ); pGrenade->SetSourceWeapon(this); if (throwforce == GE_GRENADE_THROW_FORCE / 5) // For acheivement tracking. pGrenade->m_bDroppedOnDeath = true; // The timer is whatever is left over from the primed time + our fuse minus our // current time to give us an absolute time in seconds pGrenade->SetTimer( (m_flPrimedTime + GE_GRENADE_FUSE_TIME) - gpGlobals->curtime ); // Tell the owner what we threw to implement anti-spamming if ( pOwner->IsPlayer() ) ToGEMPPlayer(pOwner)->AddThrownObject( pGrenade ); } #endif m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); m_flTimeWeaponIdle = gpGlobals->curtime + GE_GRENADE_IDLE_DELAY; m_bDrawNext = true; WeaponSound( SINGLE ); }