void CWeaponShotgun::FillClip( void ) { CBaseCombatCharacter *pOwner = GetOwner(); if ( pOwner == NULL ) return; // Add them to the clip m_iClip1++; pOwner->RemoveAmmo( 1, m_iPrimaryAmmoType ); }
//----------------------------------------------------------------------------- // Purpose: Play finish reload anim and fill clip // Input : // Output : //----------------------------------------------------------------------------- void CWeaponShotgun::FillClip( void ) { CBaseCombatCharacter *pOwner = GetOwner(); if ( pOwner == NULL ) return; // Add them to the clip if ( pOwner->GetAmmoCount( m_iPrimaryAmmoType ) > 0 ) { if ( Clip1() < GetMaxClip1() ) { m_iClip1++; pOwner->RemoveAmmo( 1, m_iPrimaryAmmoType ); } } }
//----------------------------------------------------------------------------- // Purpose: // Input : // Output : //----------------------------------------------------------------------------- void CWeapon_SLAM::SatchelAttach( void ) { CBaseCombatCharacter *pOwner = GetOwner(); if (!pOwner) { return; } m_bAttachSatchel = false; Vector vecSrc = pOwner->Weapon_ShootPosition( ); Vector vecAiming = pOwner->BodyDirection2D( ); trace_t tr; UTIL_TraceLine( vecSrc, vecSrc + (vecAiming * 128), MASK_SOLID, pOwner, COLLISION_GROUP_NONE, &tr ); if (tr.fraction < 1.0) { CBaseEntity *pEntity = tr.m_pEnt; if (pEntity && !(pEntity->GetFlags() & FL_CONVEYOR)) { QAngle angles; VectorAngles(tr.plane.normal, angles); angles.y -= 90; angles.z -= 90; tr.endpos.z -= 6.0f; EmitSound( "Weapon_SLAM.SatchelAttach" ); CSatchelCharge *pSatchel = (CSatchelCharge*)CBaseEntity::Create( "npc_satchel", tr.endpos + tr.plane.normal * 3, angles, NULL ); pSatchel->SetMoveType( MOVETYPE_FLY ); // no gravity pSatchel->m_bIsAttached = true; pSatchel->m_bIsLive = true; pSatchel->SetThrower( GetOwner() ); pSatchel->SetOwnerEntity( ((CBaseEntity*)GetOwner()) ); pSatchel->m_pMyWeaponSLAM = this; pOwner->RemoveAmmo( 1, m_iSecondaryAmmoType ); } } }
//----------------------------------------------------------------------------- // Purpose: // Input : // Output : //----------------------------------------------------------------------------- void CWeapon_SLAM::TripmineAttach( void ) { CBaseCombatCharacter *pOwner = GetOwner(); if (!pOwner) { return; } m_bAttachTripmine = false; Vector vecSrc = pOwner->Weapon_ShootPosition(); Vector vecAiming = pOwner->EyeDirection3D(); trace_t tr; UTIL_TraceLine( vecSrc, vecSrc + (vecAiming * 128), MASK_SOLID, pOwner, COLLISION_GROUP_NONE, &tr ); if (tr.fraction < 1.0) { CBaseEntity *pEntity = tr.m_pEnt; if (pEntity && !(pEntity->GetFlags() & FL_CONVEYOR)) { QAngle angles; VectorAngles(tr.plane.normal, angles); angles.x += 90; CBaseEntity *pEnt = CBaseEntity::Create( "npc_tripmine", tr.endpos + tr.plane.normal * 3, angles, NULL ); CTripmineGrenade *pMine = (CTripmineGrenade *)pEnt; pMine->m_hOwner = GetOwner(); pOwner->RemoveAmmo( 1, m_iSecondaryAmmoType ); EmitSound( "Weapon_SLAM.TripMineAttach" ); } } }
//----------------------------------------------------------------------------- // 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 ); }