void CNPC_Portal_FloorTurret::InactiveThink( void ) { LaserOff(); RopesOff(); // Update our PVS state CheckPVSCondition(); SetNextThink( gpGlobals->curtime + 1.0f ); // Wake up if we're not on our side if ( !OnSide() && VPhysicsGetObject()->GetContactPoint( NULL, NULL ) && m_bEnabled ) { // Never return to life! SetCollisionGroup( COLLISION_GROUP_NONE ); //ReturnToLife(); } else { IPhysicsObject *pTurretPhys = VPhysicsGetObject(); if ( !(pTurretPhys->GetGameFlags() & FVPHYSICS_PLAYER_HELD) && pTurretPhys->IsAsleep() ) SetCollisionGroup( COLLISION_GROUP_DEBRIS_TRIGGER ); else SetCollisionGroup( COLLISION_GROUP_NONE ); } }
//----------------------------------------------------------------------------- // Purpose: Plays the engine sound. //----------------------------------------------------------------------------- void CNPC_Houndeye::NPCThink(void) { if (m_pEnergyWave) { if (gpGlobals->curtime > m_flEndEnergyWaveTime) { UTIL_Remove(m_pEnergyWave); m_pEnergyWave = NULL; } } // ----------------------------------------------------- // Update collision group // While I'm running I'm allowed to penetrate // other houndeyes // ----------------------------------------------------- Vector vVelocity; GetVelocity( &vVelocity, NULL ); if (vVelocity.Length() > 10) { SetCollisionGroup( HL2COLLISION_GROUP_HOUNDEYE ); } else { // Don't go solid if resting in another houndeye trace_t tr; AI_TraceHull( GetAbsOrigin(), GetAbsOrigin() + Vector(0,0,1), GetHullMins(), GetHullMaxs(), MASK_NPCSOLID, this, COLLISION_GROUP_NONE, &tr ); if (!tr.startsolid) { SetCollisionGroup( COLLISION_GROUP_NONE ); } else { SetCollisionGroup( HL2COLLISION_GROUP_HOUNDEYE ); } } /* if (GetCollisionGroup() == HL2COLLISION_GROUP_HOUNDEYE) { NDebugOverlay::Box(GetAbsOrigin(), GetHullMins(), GetHullMaxs(), 0, 255, 0, 0, 0); } else { NDebugOverlay::Box(GetAbsOrigin(), GetHullMins(), GetHullMaxs(), 255, 0, 0, 0, 0); } */ BaseClass::NPCThink(); }
bool CBoneFollower::Init( CBaseEntity *pOwner, const char *pModelName, solid_t &solid, const Vector &position, const QAngle &orientation ) { SetOwnerEntity( pOwner ); UTIL_SetModel( this, pModelName ); m_fEffects |= EF_NODRAW; // invisible #if VISUALIZE_FOLLOWERS_BOUNDINGBOX m_debugOverlays |= OVERLAY_BBOX_BIT; #endif m_modelIndex = modelinfo->GetModelIndex( pModelName ); m_solidIndex = solid.index; SetAbsOrigin( position ); SetAbsAngles( orientation ); SetMoveType( MOVETYPE_PUSH ); SetSolid( SOLID_VPHYSICS ); SetCollisionGroup( pOwner->GetCollisionGroup() ); AddSolidFlags( FSOLID_CUSTOMRAYTEST | FSOLID_CUSTOMBOXTEST ); solid.params.pGameData = (void *)this; IPhysicsObject *pPhysics = VPhysicsInitShadow( false, false, &solid ); if ( !pPhysics ) return false; pPhysics->SetCallbackFlags( pPhysics->GetCallbackFlags() | CALLBACK_GLOBAL_TOUCH ); pPhysics->EnableGravity( false ); return true; }
void CGrenadeSpit::Spawn( void ) { Precache( ); SetSolid( SOLID_BBOX ); SetMoveType( MOVETYPE_FLYGRAVITY ); // FIXME, if these is a sprite, then we need a base class derived from CSprite rather than // CBaseAnimating. pev->scale becomes m_flSpriteScale in that case. SetModel( "models/spitball_large.mdl" ); UTIL_SetSize(this, Vector(0, 0, 0), Vector(0, 0, 0)); m_nRenderMode = kRenderTransAdd; SetRenderColor( 255, 255, 255, 255 ); m_nRenderFX = kRenderFxNone; SetThink( SpitThink ); SetUse( DetonateUse ); SetTouch( GrenadeSpitTouch ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_dmg_spit_grenade.GetFloat(); m_DmgRadius = sk_spit_grenade_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( SPIT_GRAVITY ) ); SetFriction( 0.8 ); SetSequence( 1 ); SetCollisionGroup( HL2COLLISION_GROUP_SPIT ); }
void CSatchelCharge::Spawn( void ) { Precache( ); SetModel( "models/Weapons/w_slam.mdl" ); VPhysicsInitNormal( SOLID_BBOX, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); SetCollisionGroup( COLLISION_GROUP_WEAPON ); UTIL_SetSize(this, Vector( -6, -6, -2), Vector(6, 6, 2)); SetThink( &CSatchelCharge::SatchelThink ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_plr_dmg_satchel.GetFloat(); m_DmgRadius = sk_satchel_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( 560 ) ); // slightly lower gravity SetFriction( 1.0 ); SetSequence( 1 ); SetDamage( 150 ); m_bIsAttached = false; m_bInAir = true; m_flNextBounceSoundTime = 0; m_vLastPosition = vec3_origin; m_hGlowSprite = NULL; CreateEffects(); }
//------------------------------------------------ // Spawn //------------------------------------------------ void CPropCannon::Spawn( void ) { Precache(); SetModel( STRING( GetModelName() ) ); SetCollisionGroup( COLLISION_GROUP_VEHICLE ); BaseClass::Spawn(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_SOLID ); SetMoveType( MOVETYPE_NOCLIP ); m_takedamage = DAMAGE_EVENTS_ONLY; m_takedamage = DAMAGE_EVENTS_ONLY; m_flTurn = 0; m_flExtension = 0; m_flFlyTime = 0.0f; m_flNextAttackTime = gpGlobals->curtime; InitCannonSpeeds(); SetPoseParameter( "armextensionpose", m_flExtension ); CreateVPhysics(); SetNextThink( gpGlobals->curtime ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CGETKnife::Spawn( void ) { Precache(); BaseClass::Spawn(); SetModel( "models/weapons/knife/w_tknife.mdl" ); SetSize( -Vector(8,8,8), Vector(8,8,8) ); // Init our physics definition VPhysicsInitNormal( SOLID_VPHYSICS, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); SetCollisionGroup( COLLISION_GROUP_GRENADE ); // No Air-Drag, lower gravity VPhysicsGetObject()->EnableDrag( false ); SetGravity( UTIL_ScaleForGravity( 540.0f ) ); m_bInAir = true; m_takedamage = DAMAGE_NO; AddSolidFlags( FSOLID_NOT_STANDABLE ); m_flStopFlyingTime = gpGlobals->curtime + 4.5f; // const CBaseEntity *host = te->GetSuppressHost(); // te->SetSuppressHost( NULL ); // DispatchParticleEffect( "tracer_tknife", PATTACH_POINT_FOLLOW, this, "tip" ); // te->SetSuppressHost( (CBaseEntity*)host ); SetTouch( &CGETKnife::DamageTouch ); SetThink( &CGETKnife::SoundThink ); SetNextThink( gpGlobals->curtime ); }
void CASW_Rocket::Spawn( void ) { Precache(); SetSolid( SOLID_BBOX ); SetModel(ASW_ROCKET_MODEL); UTIL_SetSize( this, -Vector(4,4,4), Vector(4,4,4) ); SetTouch( &CASW_Rocket::MissileTouch ); SetCollisionGroup( ASW_COLLISION_GROUP_PLAYER_MISSILE ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetThink( &CASW_Rocket::IgniteThink ); SetNextThink( gpGlobals->curtime + 0.01f ); SetDamage( 200.0f ); AddEffects( EF_NOSHADOW ); m_takedamage = DAMAGE_NO; m_iHealth = m_iMaxHealth = 100; m_bloodColor = DONT_BLEED; m_flGracePeriodEndsAt = 0; m_flNextWobbleTime = gpGlobals->curtime + asw_rocket_wobble_freq.GetFloat(); m_fSpawnTime = gpGlobals->curtime; m_fDieTime = gpGlobals->curtime + ASW_ROCKET_LIFETIME; AddFlag( FL_OBJECT ); }
void CGEGrenade::Spawn( void ) { Precache(); BaseClass::Spawn(); SetModel( "models/weapons/grenade/w_grenade.mdl" ); // So NPC's can "see" us AddFlag( FL_OBJECT ); m_takedamage = DAMAGE_YES; m_iHealth = 1; m_bHitSomething = false; m_bDroppedOnDeath = false; // Default Damages they should be modified by the thrower SetDamage( 320 ); SetDamageRadius( 260 ); SetSize( -Vector(4,4,4), Vector(4,4,4) ); SetCollisionGroup( COLLISION_GROUP_MINE ); // Init our physics definition VPhysicsInitNormal( SOLID_VPHYSICS, GetSolidFlags() | FSOLID_TRIGGER, false ); SetMoveType( MOVETYPE_VPHYSICS ); // Don't think until we have a time to think about! SetThink( NULL ); // Bounce if we hit something! SetTouch( &BaseClass::BounceTouch ); AddSolidFlags( FSOLID_NOT_STANDABLE ); }
// set the mine up for exploding void CASW_Mine::Prime() { if (asw_debug_mine.GetBool()) Msg("Mine primed!\n"); EmitSound("ASW_Mine.Lay"); SetSolid( SOLID_BBOX ); float boxWidth = 150; UTIL_SetSize(this, Vector(-boxWidth,-boxWidth,-boxWidth),Vector(boxWidth,boxWidth,boxWidth * 2)); SetCollisionGroup( ASW_COLLISION_GROUP_PASSABLE ); CollisionProp()->UseTriggerBounds( true, 24 ); AddSolidFlags(FSOLID_TRIGGER); AddSolidFlags(FSOLID_NOT_SOLID); SetTouch( &CASW_Mine::MineTouch ); m_bPrimed = true; // attach to whatever we're standing on CBaseEntity *pGround = GetGroundEntity(); if ( pGround && !pGround->IsWorld() ) { if (asw_debug_mine.GetBool()) Msg( "Parenting mine to %s\n", GetGroundEntity()->GetClassname() ); SetParent( GetGroundEntity() ); SetMoveType( MOVETYPE_NONE ); } }
//----------------------------------------------------------------------------- // Purpose: Called when spawning, after keyvalues have been handled. //----------------------------------------------------------------------------- void CASWEnvSpark::Spawn(void) { SetSolid( SOLID_NONE ); SetMoveType( MOVETYPE_NONE ); SetCollisionGroup( COLLISION_GROUP_NONE ); SetThink( NULL ); if ( FBitSet(m_spawnflags, SF_ASW_SPARK_START_ON) ) { m_bEnabled = true; } if ( FBitSet(m_spawnflags, SF_ASW_SPARK_SILENT) ) { m_bPlaySound = false; } if ( FBitSet(m_spawnflags, SF_ASW_SPARK_ELECTRICAL) ) { m_bElectrical = true; } // Clamp the delay and percentage of aolliding particles m_flMinDelay = clamp( m_flMinDelay, 0, 100 ); m_flMaxDelay = clamp( m_flMaxDelay, 0, 100 ); m_flPercentCollide = clamp( m_flPercentCollide, 0, 100 ); Precache( ); }
//----------------------------------------------------------------------------- // Purpose: Spawns this entitye //----------------------------------------------------------------------------- void CTFFlameEntity::Spawn( void ) { BaseClass::Spawn(); // don't collide with anything, we do our own collision detection in our think method SetSolid( SOLID_NONE ); SetSolidFlags( FSOLID_NOT_SOLID ); SetCollisionGroup( COLLISION_GROUP_NONE ); // move noclip: update position from velocity, that's it SetMoveType( MOVETYPE_NOCLIP, MOVECOLLIDE_DEFAULT ); AddEFlags( EFL_NO_WATER_VELOCITY_CHANGE ); float flBoxSize = tf_flamethrower_boxsize.GetFloat(); CALL_ATTRIB_HOOK_FLOAT_ON_OTHER( GetOwnerEntity(), flBoxSize, mult_flame_size ); UTIL_SetSize( this, -Vector( flBoxSize, flBoxSize, flBoxSize ), Vector( flBoxSize, flBoxSize, flBoxSize ) ); // Setup attributes. m_takedamage = DAMAGE_NO; m_vecInitialPos = GetAbsOrigin(); m_vecPrevPos = m_vecInitialPos; m_flTimeRemove = gpGlobals->curtime + ( tf_flamethrower_flametime.GetFloat() * random->RandomFloat( 0.9, 1.1 ) ); m_hLauncher = dynamic_cast<CTFFlameThrower *>( GetOwnerEntity() ); // Setup the think function. SetThink( &CTFFlameEntity::FlameThink ); SetNextThink( gpGlobals->curtime ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CPropAirboat::Spawn( void ) { // Setup vehicle as a ray-cast airboat. SetVehicleType( VEHICLE_TYPE_AIRBOAT_RAYCAST ); SetCollisionGroup( COLLISION_GROUP_VEHICLE ); BaseClass::Spawn(); // Handbrake data. m_flHandbrakeTime = gpGlobals->curtime + 0.1; m_bInitialHandbrake = false; m_VehiclePhysics.SetHasBrakePedal( false ); // Slow reverse. m_VehiclePhysics.SetMaxReverseThrottle( -0.3f ); // Setup vehicle variables. m_pVehicle = m_VehiclePhysics.GetVehicle(); m_takedamage = DAMAGE_EVENTS_ONLY; // Get the physics object so we can adjust the buoyancy. IPhysicsObject *pPhysAirboat = VPhysicsGetObject(); if ( pPhysAirboat ) { pPhysAirboat->SetBuoyancyRatio( 0.0f ); } }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CResourceChunk::Spawn( ) { // Init model if ( IsProcessed() ) { SetModelName( AllocPooledString( sProcessedResourceChunkModel ) ); } else { SetModelName( AllocPooledString( sResourceChunkModel ) ); } BaseClass::Spawn(); UTIL_SetSize( this, Vector(-4,-4,-4), Vector(4,4,4) ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_TRIGGER ); CollisionProp()->UseTriggerBounds( true, 24 ); SetCollisionGroup( TFCOLLISION_GROUP_RESOURCE_CHUNK ); SetGravity( 1.0 ); SetFriction( 1 ); SetTouch( ChunkTouch ); SetThink( ChunkRemove ); SetNextThink( gpGlobals->curtime + random->RandomFloat( 50.0, 80.0 ) ); // Remove myself the }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CGrenadeBugBait::Spawn( void ) { Precache(); SetModel( GRENADE_MODEL ); SetCollisionGroup( COLLISION_GROUP_PROJECTILE ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_DEFAULT ); SetSolid( SOLID_BBOX ); UTIL_SetSize( this, Vector( -2, -2, -2), Vector( 2, 2, 2 ) ); SetTouch( &CGrenadeBugBait::BugBaitTouch ); m_takedamage = DAMAGE_NO; m_pSporeTrail = NULL; /* m_pSporeTrail = SporeTrail::CreateSporeTrail(); m_pSporeTrail->m_bEmit = true; m_pSporeTrail->m_flSpawnRate = 100.0f; m_pSporeTrail->m_flParticleLifetime = 1.0f; m_pSporeTrail->m_flStartSize = 1.0f; m_pSporeTrail->m_flEndSize = 1.0f; m_pSporeTrail->m_flSpawnRadius = 8.0f; m_pSporeTrail->m_vecEndColor = Vector( 0, 0, 0 ); */ }
void CASW_Flamer_Projectile::Spawn( void ) { Precache( ); //SetModel( PELLET_MODEL ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_CUSTOM ); m_flDamage = sk_plr_dmg_asw_f.GetFloat(); m_takedamage = DAMAGE_NO; SetSize( -Vector(1,1,1), Vector(1,1,1) ); SetSolid( SOLID_BBOX ); SetGravity( 0.05f ); SetCollisionGroup( ASW_COLLISION_GROUP_FLAMER_PELLETS ); // ASW_COLLISION_GROUP_SHOTGUN_PELLET SetTouch( &CASW_Flamer_Projectile::ProjectileTouch ); CreateEffects(); m_vecOldPos = vec3_origin; m_fDieTime = gpGlobals->curtime + 1.0f; // will need to change size scale algos below if this changes SetThink( &CASW_Flamer_Projectile::CollideThink ); SetNextThink( gpGlobals->curtime ); // flamer projectile only lasts 1 second //SetThink( &CASW_Flamer_Projectile::SUB_Remove ); //SetNextThink( gpGlobals->curtime + 1.0f ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CDODBaseRocket::Spawn( void ) { Precache(); SetSolid( SOLID_BBOX ); Assert( GetModel() ); //derived classes must have set model UTIL_SetSize( this, -Vector(2,2,2), Vector(2,2,2) ); SetTouch( &CDODBaseRocket::RocketTouch ); SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_CUSTOM ); m_takedamage = DAMAGE_NO; SetGravity( 0.1 ); SetDamage( mp_rocketdamage.GetFloat() ); AddFlag( FL_OBJECT ); SetCollisionGroup( COLLISION_GROUP_PROJECTILE ); EmitSound( "Weapon_Bazooka.Shoot" ); // Smoke trail. CreateSmokeTrail(); SetThink( &CDODBaseRocket::FlyThink ); SetNextThink( gpGlobals->curtime ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CItem::Spawn( void ) { if ( g_pGameRules->IsAllowedToSpawn( this ) == false ) { UTIL_Remove( this ); return; } SetMoveType( MOVETYPE_FLYGRAVITY ); SetSolid( SOLID_BBOX ); SetBlocksLOS( false ); AddEFlags( EFL_NO_ROTORWASH_PUSH ); if( IsXbox() ) { AddEffects( EF_ITEM_BLINK ); } // This will make them not collide with the player, but will collide // against other items + weapons SetCollisionGroup( COLLISION_GROUP_WEAPON ); CollisionProp()->UseTriggerBounds( true, ITEM_PICKUP_BOX_BLOAT ); SetTouch(&CItem::ItemTouch); if ( CreateItemVPhysicsObject() == false ) return; m_takedamage = DAMAGE_EVENTS_ONLY; #if defined( HL2MP ) SetThink( &CItem::FallThink ); SetNextThink( gpGlobals->curtime + 0.1f ); #endif }
// // Throw a chunk // void CGib::Spawn( const char *szGibModel ) { SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetFriction(0.55); // deading the bounce a bit // sometimes an entity inherits the edict from a former piece of glass, // and will spawn using the same render FX or m_nRenderMode! bad! SetRenderAlpha( 255 ); m_nRenderMode = kRenderNormal; m_nRenderFX = kRenderFxNone; // hopefully this will fix the VELOCITY TOO LOW crap m_takedamage = DAMAGE_EVENTS_ONLY; SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetCollisionGroup( COLLISION_GROUP_DEBRIS ); SetModel( szGibModel ); SetNextThink( gpGlobals->curtime + 4 ); m_lifeTime = 25; SetTouch ( &CGib::BounceGibTouch ); m_bForceRemove = false; m_material = matNone; m_cBloodDecals = 5;// how many blood decals this gib can place (1 per bounce until none remain). }
void CBaseGrenadeContact::Spawn( void ) { // point sized, solid, bouncing SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetSolid( SOLID_BBOX ); SetCollisionGroup( COLLISION_GROUP_PROJECTILE ); SetModel( "models/weapons/w_grenade.mdl" ); // BUG: wrong model UTIL_SetSize(this, vec3_origin, vec3_origin); // contact grenades arc lower SetGravity( UTIL_ScaleForGravity( 400 ) ); // use a lower gravity for grenades to make them easier to see QAngle angles; VectorAngles(GetAbsVelocity(), angles); SetLocalAngles( angles ); // make NPCs afaid of it while in the air SetThink( &CBaseGrenadeContact::DangerSoundThink ); SetNextThink( gpGlobals->curtime ); // Tumble in air QAngle vecAngVelocity( random->RandomFloat ( -100, -500 ), 0, 0 ); SetLocalAngularVelocity( vecAngVelocity ); // Explode on contact SetTouch( &CBaseGrenadeContact::ExplodeTouch ); m_flDamage = 100; // BOXBOX was sk_plr_dmg_grenade.GetFloat(); // Allow player to blow this puppy up in the air m_takedamage = DAMAGE_YES; m_iszBounceSound = NULL_STRING; }
void CASW_Parasite::Spawn( void ) { SetHullType(HULL_TINY); BaseClass::Spawn(); SetModel( SWARM_PARASITE_MODEL); if (FClassnameIs(this, "asw_parasite_defanged")) { m_bDefanged = true; m_iHealth = ASWGameRules()->ModifyAlienHealthBySkillLevel(10); SetBodygroup( 0, 1 ); m_fSuicideTime = gpGlobals->curtime + 60; } else { m_bDefanged = false; m_iHealth = ASWGameRules()->ModifyAlienHealthBySkillLevel(25); SetBodygroup( 0, 0 ); m_fSuicideTime = 0; } SetMoveType( MOVETYPE_STEP ); SetHullType(HULL_TINY); SetCollisionGroup( ASW_COLLISION_GROUP_PARASITE ); SetViewOffset( Vector(6, 0, 11) ) ; // Position of the eyes relative to NPC's origin. m_NPCState = NPC_STATE_NONE; CapabilitiesAdd( bits_CAP_MOVE_GROUND | bits_CAP_INNATE_RANGE_ATTACK1 ); m_bInfesting = false; }
//==================================================================== // Creación en el mapa //==================================================================== void CAP_PlayerInfected::Spawn() { ConVarRef infected_health("sk_infected_health"); int iMaxHealth = infected_health.GetInt() + RandomInt( 1, 5 ); CB_MeleeCharacter::SetOuter( this ); BaseClass::Spawn(); // El Director será el responsable de crearnos // Mientras tanto seremos invisibles y no nos moveremos AddEffects( EF_NODRAW ); AddFlag( FL_FREEZING ); SetCollisionGroup( COLLISION_GROUP_NONE ); m_takedamage = DAMAGE_NO; // Esto hará que el Director lo tome como uno de sus hijos SetName( AllocPooledString(DIRECTOR_CHILD_NAME) ); // Seleccionamos un color para nuestra ropa SetClothColor(); // Establecemos la salud SetMaxHealth( iMaxHealth ); SetHealth( iMaxHealth ); // Más información m_iNextIdleSound = IDLE_SOUND_INTERVAL; m_iNextAttack = ATTACK_INTERVAL; // Solicitamos un lugar para el Spawn RegisterThinkContext( "RequestDirectorSpawn" ); SetContextThink( &CAP_PlayerInfected::RequestDirectorSpawn, gpGlobals->curtime, "RequestDirectorSpawn" ); }
//----------------------------------------------------------------------------- // Purpose: // Input : *pszModelName - // vecOrigin - // vecForceDir - // vecAngularImp - // Output : Returns true on success, false on failure. //----------------------------------------------------------------------------- bool C_Gib::InitializeGib( const char *pszModelName, Vector vecOrigin, Vector vecForceDir, AngularImpulse vecAngularImp, float flLifetime ) { if ( InitializeAsClientEntity( pszModelName, RENDER_GROUP_OPAQUE_ENTITY ) == false ) { Release(); return false; } SetAbsOrigin( vecOrigin ); SetCollisionGroup( COLLISION_GROUP_DEBRIS ); solid_t tmpSolid; PhysModelParseSolid( tmpSolid, this, GetModelIndex() ); m_pPhysicsObject = VPhysicsInitNormal( SOLID_VPHYSICS, 0, false, &tmpSolid ); if ( m_pPhysicsObject ) { float flForce = m_pPhysicsObject->GetMass(); vecForceDir *= flForce; m_pPhysicsObject->ApplyForceOffset( vecForceDir, GetAbsOrigin() ); m_pPhysicsObject->SetCallbackFlags( m_pPhysicsObject->GetCallbackFlags() | CALLBACK_GLOBAL_TOUCH | CALLBACK_GLOBAL_TOUCH_STATIC ); } else { // failed to create a physics object Release(); return false; } SetNextClientThink( gpGlobals->curtime + flLifetime ); return true; }
//==================================================================== // Solicita al Director un lugar para la creación //==================================================================== void CAP_PlayerInfected::RequestDirectorSpawn() { Vector vecSpawnPosition; // Le preguntamos al Administrador sobre un lugar para aparecer DirectorManager->Update(); bool result = DirectorManager->GetSpawnLocation( &vecSpawnPosition, DIRECTOR_CHILD ); // El Director te quiere aquí if ( result && DirectorManager->PostSpawn(this) ) { // Establecemos la ubicación SetLocalOrigin( vecSpawnPosition + Vector(0, 0, 5) ); SetAbsVelocity( vec3_origin ); m_Local.m_vecPunchAngle = vec3_angle; m_Local.m_vecPunchAngleVel = vec3_angle; // Ahora somos visibles RemoveEffects( EF_NODRAW ); RemoveFlag( FL_FREEZING ); SetCollisionGroup( COLLISION_GROUP_PLAYER ); m_takedamage = DAMAGE_YES; // No volvemos a pensar SetNextThink( TICK_NEVER_THINK, "RequestDirectorSpawn" ); return; } // Volvemos a intentarlo en .3s SetNextThink( gpGlobals->curtime + .3, "RequestDirectorSpawn" ); }
//========================================================= // Spawn //========================================================= void CNPC_Houndeye::Spawn() { Precache( ); SetModel("models/houndeye.mdl"); SetHullType(HULL_WIDE_SHORT); SetHullSizeNormal(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_STANDABLE ); SetMoveType( MOVETYPE_STEP ); SetBloodColor( BLOOD_COLOR_YELLOW ); m_iHealth = sk_Houndeye_health.GetFloat(); m_flFieldOfView = 0.5;// indicates the width of this monster's forward view cone ( as a dotproduct result ) m_NPCState = NPC_STATE_NONE; m_fAsleep = false; // everyone spawns awake m_fDontBlink = false; CapabilitiesAdd( bits_CAP_SQUAD ); CapabilitiesAdd( bits_CAP_MOVE_GROUND ); CapabilitiesAdd( bits_CAP_INNATE_RANGE_ATTACK1 ); CapabilitiesAdd( bits_CAP_TURN_HEAD ); m_flNextSecondaryAttack = 0; m_bLoopClockwise = random->RandomInt(0,1) ? true : false; m_pEnergyWave = NULL; m_flEndEnergyWaveTime = 0; SetCollisionGroup( HL2COLLISION_GROUP_HOUNDEYE ); NPCInit(); }
void CGrenadeEnergy::Spawn( void ) { Precache( ); SetSolid( SOLID_BBOX ); SetMoveType( MOVETYPE_FLY ); SetModel( "Models/weapons/w_energy_grenade.mdl" ); SetUse( &CBaseGrenade::DetonateUse ); SetTouch( &CGrenadeEnergy::GrenadeEnergyTouch ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_dmg_energy_grenade.GetFloat(); m_DmgRadius = sk_energy_grenade_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 1; SetCycle(0); m_flLaunchTime = gpGlobals->curtime; SetCollisionGroup( HL2COLLISION_GROUP_HOUNDEYE ); UTIL_SetSize( this, vec3_origin, vec3_origin ); m_flMaxFrame = modelinfo->GetModelFrameCount( GetModel() ) - 1; }
//------------------------------------------------ // Spawn //------------------------------------------------ void CPropCrane::Spawn( void ) { Precache(); SetModel( STRING( GetModelName() ) ); SetCollisionGroup( COLLISION_GROUP_VEHICLE ); BaseClass::Spawn(); SetSolid( SOLID_BBOX ); AddSolidFlags( FSOLID_NOT_SOLID ); SetMoveType( MOVETYPE_NOCLIP ); m_takedamage = DAMAGE_EVENTS_ONLY; m_flTurn = 0; m_flExtension = 0; m_flNextDangerSoundTime = 0; m_flNextCreakSound = 0; m_flNextDropAllowedTime = 0; m_flSlowRaiseTime = 0; m_bDropping = false; m_bMagnetOn = false; InitCraneSpeeds(); SetPoseParameter( "armextensionpose", m_flExtension ); CreateVPhysics(); SetNextThink( gpGlobals->curtime ); }
//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CItem::Spawn( void ) { if ( g_pGameRules->IsAllowedToSpawn( this ) == false ) { UTIL_Remove( this ); return; } SetMoveType( MOVETYPE_FLYGRAVITY ); SetSolid( SOLID_BBOX ); SetBlocksLOS( false ); AddEFlags( EFL_NO_ROTORWASH_PUSH ); if( IsX360() ) { AddEffects( EF_ITEM_BLINK ); } // This will make them not collide with the player, but will collide // against other items + weapons SetCollisionGroup( COLLISION_GROUP_WEAPON ); CollisionProp()->UseTriggerBounds( true, ITEM_PICKUP_BOX_BLOAT ); SetTouch(&CItem::ItemTouch); if ( CreateItemVPhysicsObject() == false ) return; m_takedamage = DAMAGE_EVENTS_ONLY; #if !defined( CLIENT_DLL ) // Constrained start? if ( HasSpawnFlags( SF_ITEM_START_CONSTRAINED ) ) { //Constrain the weapon in place IPhysicsObject *pReferenceObject, *pAttachedObject; pReferenceObject = g_PhysWorldObject; pAttachedObject = VPhysicsGetObject(); if ( pReferenceObject && pAttachedObject ) { constraint_fixedparams_t fixed; fixed.Defaults(); fixed.InitWithCurrentObjectState( pReferenceObject, pAttachedObject ); fixed.constraint.forceLimit = lbs2kg( 10000 ); fixed.constraint.torqueLimit = lbs2kg( 10000 ); m_pConstraint = physenv->CreateFixedConstraint( pReferenceObject, pAttachedObject, NULL, fixed ); m_pConstraint->SetGameData( (void *) this ); } } #endif //CLIENT_DLL #if defined( HL2MP ) SetThink( &CItem::FallThink ); SetNextThink( gpGlobals->curtime + 0.1f ); #endif }
void CWeaponHL2MPBase::Spawn() { BaseClass::Spawn(); // Set this here to allow players to shoot dropped weapons SetCollisionGroup( COLLISION_GROUP_WEAPON ); }
void CSatchelCharge::Spawn( void ) { Precache( ); // motor SetMoveType( MOVETYPE_FLYGRAVITY, MOVECOLLIDE_FLY_BOUNCE ); SetSolid( SOLID_BBOX ); SetCollisionGroup( COLLISION_GROUP_PROJECTILE ); SetModel( "models/Weapons/w_slam.mdl" ); UTIL_SetSize(this, Vector( -6, -6, -2), Vector(6, 6, 2)); SetTouch( SatchelTouch ); SetUse( SatchelUse ); SetThink( SatchelThink ); SetNextThink( gpGlobals->curtime + 0.1f ); m_flDamage = sk_plr_dmg_satchel.GetFloat(); m_DmgRadius = sk_satchel_radius.GetFloat(); m_takedamage = DAMAGE_YES; m_iHealth = 1; SetGravity( UTIL_ScaleForGravity( 560 ) ); // slightly lower gravity SetFriction( 1.0 ); SetSequence( 1 ); m_bIsAttached = false; m_bInAir = true; m_flSlideVolume = -1.0; m_flNextBounceSoundTime = 0; m_vLastPosition = vec3_origin; InitSlideSound(); }