//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CWeaponTranquilizer::CreateLaserPointer( void ) { #ifndef CLIENT_DLL if ( m_hLaserDot != NULL ) return; CBaseCombatCharacter *pOwner = GetOwner(); if ( pOwner == NULL ) return; if ( pOwner->GetAmmoCount(m_iPrimaryAmmoType) <= 0 ) return; m_hLaserDot = CLaserDot::Create( GetAbsOrigin(), GetOwner() ); m_hLaserDot->TurnOff(); m_hLaserDot->SetRenderMode(kRenderWorldGlow); if(HL2MPRules()->IsTeamplay()) { if(pOwner->GetTeamNumber() == TEAM_PINK) m_hLaserDot->SetRenderColor(255,100,255,255); else m_hLaserDot->SetRenderColor(153,255,153,255); } else m_hLaserDot->SetRenderColor(255,0,0,255); UpdateLaserPosition(); #endif }
void CTripmineGrenade::BeamBreakThink( void ) { // See if I can go solid yet (has dropper moved out of way?) if (IsSolidFlagSet( FSOLID_NOT_SOLID )) { trace_t tr; Vector vUpBit = GetAbsOrigin(); vUpBit.z += 5.0; UTIL_TraceEntity( this, GetAbsOrigin(), vUpBit, MASK_SHOT, &tr ); if ( !tr.startsolid && (tr.fraction == 1.0) ) { RemoveSolidFlags( FSOLID_NOT_SOLID ); } } trace_t tr; // NOT MASK_SHOT because we want only simple hit boxes UTIL_TraceLine( GetAbsOrigin(), m_vecEnd, MASK_SOLID, this, COLLISION_GROUP_NONE, &tr ); // ALERT( at_console, "%f : %f\n", tr.flFraction, m_flBeamLength ); // respawn detect. if ( !m_pBeam ) { MakeBeam( ); if ( tr.m_pEnt ) m_hOwner = tr.m_pEnt; // reset owner too } CBaseEntity *pEntity = tr.m_pEnt; CBaseCombatCharacter *pBCC = ToBaseCombatCharacter( pEntity ); if (pBCC && pBCC->GetTeamNumber() != m_nTeam && pBCC->m_floatCloakFactor < 1.0f) //if (pBCC || fabs( m_flBeamLength - tr.fraction ) > 0.001) { m_iHealth = 0; Event_Killed( CTakeDamageInfo( (CBaseEntity*)m_hOwner, this, 100, GIB_NORMAL ) ); return; } SetNextThink( gpGlobals->curtime + 0.05f ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFSniperRifle::CreateSniperDot( void ) { // Server specific. #ifdef GAME_DLL // Check to see if we have already been created? if ( m_hSniperDot ) return; // Get the owning player (make sure we have one). CBaseCombatCharacter *pPlayer = GetOwner(); if ( !pPlayer ) return; // Create the sniper dot, but do not make it visible yet. m_hSniperDot = CSniperDot::Create( GetAbsOrigin(), pPlayer, true ); m_hSniperDot->ChangeTeam( pPlayer->GetTeamNumber() ); #endif }
//----------------------------------------------------------------------------- // 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(); }