mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-06-01 00:17:43 +03:00
Fixed bullsquid behavior, added test npc
This commit is contained in:
parent
40f8ec6487
commit
5c2c7c399c
@ -120,6 +120,7 @@ enum Class_T
|
|||||||
CLASS_EARTH_FAUNA,
|
CLASS_EARTH_FAUNA,
|
||||||
CLASS_HACKED_ROLLERMINE,
|
CLASS_HACKED_ROLLERMINE,
|
||||||
CLASS_COMBINE_HUNTER,
|
CLASS_COMBINE_HUNTER,
|
||||||
|
CLASS_TEST,
|
||||||
|
|
||||||
NUM_AI_CLASSES
|
NUM_AI_CLASSES
|
||||||
};
|
};
|
||||||
|
@ -128,6 +128,10 @@ void CGrenadeSpit::Event_Killed( const CTakeDamageInfo &info )
|
|||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
void CGrenadeSpit::GrenadeSpitTouch( CBaseEntity *pOther )
|
void CGrenadeSpit::GrenadeSpitTouch( CBaseEntity *pOther )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if ( pOther->Classify() == CLASS_BULLSQUID)
|
||||||
|
return; // Don't hit bullsquids!
|
||||||
|
|
||||||
if ( pOther->IsSolidFlagSet(FSOLID_VOLUME_CONTENTS | FSOLID_TRIGGER) )
|
if ( pOther->IsSolidFlagSet(FSOLID_VOLUME_CONTENTS | FSOLID_TRIGGER) )
|
||||||
{
|
{
|
||||||
// Some NPCs are triggers that can take damage (like antlion grubs). We should hit them.
|
// Some NPCs are triggers that can take damage (like antlion grubs). We should hit them.
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
#include "vstdlib/random.h"
|
#include "vstdlib/random.h"
|
||||||
#include "engine/IEngineSound.h"
|
#include "engine/IEngineSound.h"
|
||||||
#include "movevars_shared.h"
|
#include "movevars_shared.h"
|
||||||
|
#include "particle_parse.h" // DispatchParticleEffect
|
||||||
|
|
||||||
#include "AI_Hint.h"
|
#include "AI_Hint.h"
|
||||||
#include "AI_Senses.h"
|
#include "AI_Senses.h"
|
||||||
@ -41,6 +42,7 @@
|
|||||||
ConVar sk_bullsquid_health( "sk_bullsquid_health", "100" );
|
ConVar sk_bullsquid_health( "sk_bullsquid_health", "100" );
|
||||||
ConVar sk_bullsquid_dmg_bite( "sk_bullsquid_dmg_bite", "15" );
|
ConVar sk_bullsquid_dmg_bite( "sk_bullsquid_dmg_bite", "15" );
|
||||||
ConVar sk_bullsquid_dmg_whip( "sk_bullsquid_dmg_whip", "25" );
|
ConVar sk_bullsquid_dmg_whip( "sk_bullsquid_dmg_whip", "25" );
|
||||||
|
ConVar sk_bullsquid_spit_speed( "sk_bullsquid_spit_speed", "100", FCVAR_NONE, "Speed at which an antlion spit grenade travels." );
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
// monster-specific schedule types
|
// monster-specific schedule types
|
||||||
@ -87,6 +89,7 @@ int g_interactionBullsquidThrow = 0;
|
|||||||
#define BSQUID_AE_HOP ( 5 )
|
#define BSQUID_AE_HOP ( 5 )
|
||||||
#define BSQUID_AE_THROW ( 6 )
|
#define BSQUID_AE_THROW ( 6 )
|
||||||
#define BSQUID_AE_WHIP_SND ( 7 )
|
#define BSQUID_AE_WHIP_SND ( 7 )
|
||||||
|
//#define BSQUID_AE_TAILWHIP ( 8 )
|
||||||
|
|
||||||
LINK_ENTITY_TO_CLASS( npc_bullsquid, CNPC_Bullsquid );
|
LINK_ENTITY_TO_CLASS( npc_bullsquid, CNPC_Bullsquid );
|
||||||
|
|
||||||
@ -107,7 +110,9 @@ BEGIN_DATADESC( CNPC_Bullsquid )
|
|||||||
// DEFINE_FIELD( m_nSquidSpitSprite, FIELD_INTEGER ),
|
// DEFINE_FIELD( m_nSquidSpitSprite, FIELD_INTEGER ),
|
||||||
DEFINE_FIELD( m_flHungryTime, FIELD_TIME ),
|
DEFINE_FIELD( m_flHungryTime, FIELD_TIME ),
|
||||||
DEFINE_FIELD( m_nextSquidSoundTime, FIELD_TIME ),
|
DEFINE_FIELD( m_nextSquidSoundTime, FIELD_TIME ),
|
||||||
|
DEFINE_FIELD( m_vecSaveSpitVelocity, FIELD_VECTOR),
|
||||||
|
|
||||||
|
|
||||||
END_DATADESC()
|
END_DATADESC()
|
||||||
|
|
||||||
|
|
||||||
@ -154,6 +159,8 @@ void CNPC_Bullsquid::Precache()
|
|||||||
|
|
||||||
UTIL_PrecacheOther( "grenade_spit" );
|
UTIL_PrecacheOther( "grenade_spit" );
|
||||||
|
|
||||||
|
PrecacheParticleSystem( "blood_impact_yellow_01" );
|
||||||
|
|
||||||
PrecacheScriptSound( "NPC_Bullsquid.Idle" );
|
PrecacheScriptSound( "NPC_Bullsquid.Idle" );
|
||||||
PrecacheScriptSound( "NPC_Bullsquid.Pain" );
|
PrecacheScriptSound( "NPC_Bullsquid.Pain" );
|
||||||
PrecacheScriptSound( "NPC_Bullsquid.Alert" );
|
PrecacheScriptSound( "NPC_Bullsquid.Alert" );
|
||||||
@ -161,7 +168,9 @@ void CNPC_Bullsquid::Precache()
|
|||||||
PrecacheScriptSound( "NPC_Bullsquid.Attack1" );
|
PrecacheScriptSound( "NPC_Bullsquid.Attack1" );
|
||||||
PrecacheScriptSound( "NPC_Bullsquid.Growl" );
|
PrecacheScriptSound( "NPC_Bullsquid.Growl" );
|
||||||
PrecacheScriptSound( "NPC_Bullsquid.TailWhip");
|
PrecacheScriptSound( "NPC_Bullsquid.TailWhip");
|
||||||
|
PrecacheScriptSound( "NPC_Antlion.PoisonShoot" );
|
||||||
|
PrecacheScriptSound( "NPC_Antlion.PoisonBall" );
|
||||||
|
|
||||||
BaseClass::Precache();
|
BaseClass::Precache();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,6 +271,8 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
|||||||
{
|
{
|
||||||
if ( GetEnemy() )
|
if ( GetEnemy() )
|
||||||
{
|
{
|
||||||
|
// Replace original bullsquid spit code with antlion worker code
|
||||||
|
/*
|
||||||
Vector vSpitPos;
|
Vector vSpitPos;
|
||||||
|
|
||||||
GetAttachment( "Mouth", vSpitPos );
|
GetAttachment( "Mouth", vSpitPos );
|
||||||
@ -272,7 +283,8 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
|||||||
float flGravity = SPIT_GRAVITY;
|
float flGravity = SPIT_GRAVITY;
|
||||||
ThrowLimit(vSpitPos, vTarget, flGravity, 3, Vector(0,0,0), Vector(0,0,0), GetEnemy(), &vToss, &pBlocker);
|
ThrowLimit(vSpitPos, vTarget, flGravity, 3, Vector(0,0,0), Vector(0,0,0), GetEnemy(), &vToss, &pBlocker);
|
||||||
|
|
||||||
CGrenadeSpit *pGrenade = (CGrenadeSpit*)CreateNoSpawn( "grenade_spit", vSpitPos, vec3_angle, this );
|
//CGrenadeSpit *pGrenade = (CGrenadeSpit*)CreateNoSpawn( "grenade_spit", vSpitPos, vec3_angle, this );
|
||||||
|
CGrenadeSpit *pGrenade = (CGrenadeSpit*) CreateEntityByName( "grenade_spit" );
|
||||||
//pGrenade->KeyValue( "velocity", vToss );
|
//pGrenade->KeyValue( "velocity", vToss );
|
||||||
pGrenade->Spawn( );
|
pGrenade->Spawn( );
|
||||||
pGrenade->SetThrower( this );
|
pGrenade->SetThrower( this );
|
||||||
@ -292,11 +304,95 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
|||||||
AttackSound();
|
AttackSound();
|
||||||
|
|
||||||
CPVSFilter filter( vSpitPos );
|
CPVSFilter filter( vSpitPos );
|
||||||
te->SpriteSpray( filter, 0.0,
|
|
||||||
&vSpitPos, &vToss, m_nSquidSpitSprite, 5, 10, 15 );
|
//don't emit sprites
|
||||||
|
|
||||||
|
//te->SpriteSpray( filter, 0.0,
|
||||||
|
// &vSpitPos, &vToss, m_nSquidSpitSprite, 5, 10, 15 );
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
Vector vSpitPos;
|
||||||
|
GetAttachment( "Mouth", vSpitPos );
|
||||||
|
|
||||||
|
Vector vTarget;
|
||||||
|
|
||||||
|
// If our enemy is looking at us and far enough away, lead him
|
||||||
|
if ( HasCondition( COND_ENEMY_FACING_ME ) && UTIL_DistApprox( GetAbsOrigin(), GetEnemy()->GetAbsOrigin() ) > (40*12) )
|
||||||
|
{
|
||||||
|
UTIL_PredictedPosition( GetEnemy(), 0.5f, &vTarget );
|
||||||
|
vTarget.z = GetEnemy()->GetAbsOrigin().z;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Otherwise he can't see us and he won't be able to dodge
|
||||||
|
vTarget = GetEnemy()->BodyTarget( vSpitPos, true );
|
||||||
|
}
|
||||||
|
|
||||||
|
vTarget[2] += random->RandomFloat( 0.0f, 32.0f );
|
||||||
|
|
||||||
|
// Try and spit at our target
|
||||||
|
Vector vecToss;
|
||||||
|
if ( GetSpitVector( vSpitPos, vTarget, &vecToss ) == false )
|
||||||
|
{
|
||||||
|
// Now try where they were
|
||||||
|
if ( GetSpitVector( vSpitPos, m_vSavePosition, &vecToss ) == false )
|
||||||
|
{
|
||||||
|
// Failing that, just shoot with the old velocity we calculated initially!
|
||||||
|
vecToss = m_vecSaveSpitVelocity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find what our vertical theta is to estimate the time we'll impact the ground
|
||||||
|
Vector vecToTarget = ( vTarget - vSpitPos );
|
||||||
|
VectorNormalize( vecToTarget );
|
||||||
|
float flVelocity = VectorNormalize( vecToss );
|
||||||
|
float flCosTheta = DotProduct( vecToTarget, vecToss );
|
||||||
|
float flTime = (vSpitPos-vTarget).Length2D() / ( flVelocity * flCosTheta );
|
||||||
|
|
||||||
|
// Emit a sound where this is going to hit so that targets get a chance to act correctly
|
||||||
|
CSoundEnt::InsertSound( SOUND_DANGER, vTarget, (15*12), flTime, this );
|
||||||
|
|
||||||
|
// Don't fire again until this volley would have hit the ground (with some lag behind it)
|
||||||
|
SetNextAttack( gpGlobals->curtime + flTime + random->RandomFloat( 0.5f, 2.0f ) );
|
||||||
|
|
||||||
|
for ( int i = 0; i < 6; i++ )
|
||||||
|
{
|
||||||
|
CGrenadeSpit *pGrenade = (CGrenadeSpit*) CreateEntityByName( "grenade_spit" );
|
||||||
|
pGrenade->SetAbsOrigin( vSpitPos );
|
||||||
|
pGrenade->SetAbsAngles( vec3_angle );
|
||||||
|
DispatchSpawn( pGrenade );
|
||||||
|
pGrenade->SetThrower( this );
|
||||||
|
pGrenade->SetOwnerEntity( this );
|
||||||
|
|
||||||
|
if ( i == 0 )
|
||||||
|
{
|
||||||
|
pGrenade->SetSpitSize( SPIT_LARGE );
|
||||||
|
pGrenade->SetAbsVelocity( vecToss * flVelocity );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pGrenade->SetAbsVelocity( ( vecToss + RandomVector( -0.035f, 0.035f ) ) * flVelocity );
|
||||||
|
pGrenade->SetSpitSize( random->RandomInt( SPIT_SMALL, SPIT_MEDIUM ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tumble through the air
|
||||||
|
pGrenade->SetLocalAngularVelocity(
|
||||||
|
QAngle( random->RandomFloat( -250, -500 ),
|
||||||
|
random->RandomFloat( -250, -500 ),
|
||||||
|
random->RandomFloat( -250, -500 ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( int i = 0; i < 8; i++ )
|
||||||
|
{
|
||||||
|
DispatchParticleEffect( "blood_impact_yellow_01", vSpitPos + RandomVector( -12.0f, 12.0f ), RandomAngle( 0, 360 ) );
|
||||||
|
}
|
||||||
|
AttackSound();
|
||||||
|
EmitSound( "NPC_Antlion.PoisonShoot" );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
||||||
case BSQUID_AE_BITE:
|
case BSQUID_AE_BITE:
|
||||||
{
|
{
|
||||||
@ -319,7 +415,7 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
case BSQUID_AE_TAILWHIP:
|
case BSQUID_AE_TAILWHIP: // this function was commented out
|
||||||
{
|
{
|
||||||
CBaseEntity *pHurt = CheckTraceHullAttack( 70, Vector(-16,-16,-16), Vector(16,16,16), sk_bullsquid_dmg_whip.GetFloat(), DMG_SLASH | DMG_ALWAYSGIB );
|
CBaseEntity *pHurt = CheckTraceHullAttack( 70, Vector(-16,-16,-16), Vector(16,16,16), sk_bullsquid_dmg_whip.GetFloat(), DMG_SLASH | DMG_ALWAYSGIB );
|
||||||
if ( pHurt )
|
if ( pHurt )
|
||||||
@ -405,6 +501,8 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
|||||||
|
|
||||||
int CNPC_Bullsquid::RangeAttack1Conditions( float flDot, float flDist )
|
int CNPC_Bullsquid::RangeAttack1Conditions( float flDot, float flDist )
|
||||||
{
|
{
|
||||||
|
// Code to determine whether or not this NPC can attack ranged commented out until I can sort out the issue with the projectile
|
||||||
|
|
||||||
if ( IsMoving() && flDist >= 512 )
|
if ( IsMoving() && flDist >= 512 )
|
||||||
{
|
{
|
||||||
// squid will far too far behind if he stops running to spit at this distance from the enemy.
|
// squid will far too far behind if he stops running to spit at this distance from the enemy.
|
||||||
@ -435,10 +533,118 @@ int CNPC_Bullsquid::RangeAttack1Conditions( float flDot, float flDist )
|
|||||||
|
|
||||||
return( COND_CAN_RANGE_ATTACK1 );
|
return( COND_CAN_RANGE_ATTACK1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return( COND_NONE );
|
return( COND_NONE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// FIXME: Create this in a better fashion!
|
||||||
|
//
|
||||||
|
|
||||||
|
Vector VecCheckThrowToleranceSquid( CBaseEntity *pEdict, const Vector &vecSpot1, Vector vecSpot2, float flSpeed, float flTolerance )
|
||||||
|
{
|
||||||
|
flSpeed = MAX( 1.0f, flSpeed );
|
||||||
|
|
||||||
|
float flGravity = GetCurrentGravity();
|
||||||
|
|
||||||
|
Vector vecGrenadeVel = (vecSpot2 - vecSpot1);
|
||||||
|
|
||||||
|
// throw at a constant time
|
||||||
|
float time = vecGrenadeVel.Length( ) / flSpeed;
|
||||||
|
vecGrenadeVel = vecGrenadeVel * (1.0 / time);
|
||||||
|
|
||||||
|
// adjust upward toss to compensate for gravity loss
|
||||||
|
vecGrenadeVel.z += flGravity * time * 0.5;
|
||||||
|
|
||||||
|
Vector vecApex = vecSpot1 + (vecSpot2 - vecSpot1) * 0.5;
|
||||||
|
vecApex.z += 0.5 * flGravity * (time * 0.5) * (time * 0.5);
|
||||||
|
|
||||||
|
|
||||||
|
trace_t tr;
|
||||||
|
UTIL_TraceLine( vecSpot1, vecApex, MASK_SOLID, pEdict, COLLISION_GROUP_NONE, &tr );
|
||||||
|
if (tr.fraction != 1.0)
|
||||||
|
{
|
||||||
|
// fail!
|
||||||
|
//if ( g_debug_antlion_worker.GetBool() )
|
||||||
|
//{
|
||||||
|
NDebugOverlay::Line( vecSpot1, vecApex, 255, 0, 0, true, 5.0 );
|
||||||
|
//}
|
||||||
|
|
||||||
|
return vec3_origin;
|
||||||
|
}
|
||||||
|
|
||||||
|
//if ( g_debug_antlion_worker.GetBool() )
|
||||||
|
//{
|
||||||
|
NDebugOverlay::Line( vecSpot1, vecApex, 0, 255, 0, true, 5.0 );
|
||||||
|
//}
|
||||||
|
|
||||||
|
UTIL_TraceLine( vecApex, vecSpot2, MASK_SOLID_BRUSHONLY, pEdict, COLLISION_GROUP_NONE, &tr );
|
||||||
|
if ( tr.fraction != 1.0 )
|
||||||
|
{
|
||||||
|
bool bFail = true;
|
||||||
|
|
||||||
|
// Didn't make it all the way there, but check if we're within our tolerance range
|
||||||
|
if ( flTolerance > 0.0f )
|
||||||
|
{
|
||||||
|
float flNearness = ( tr.endpos - vecSpot2 ).LengthSqr();
|
||||||
|
if ( flNearness < Square( flTolerance ) )
|
||||||
|
{
|
||||||
|
//if ( g_debug_antlion_worker.GetBool() )
|
||||||
|
//{
|
||||||
|
NDebugOverlay::Sphere( tr.endpos, vec3_angle, flTolerance, 0, 255, 0, 0, true, 5.0 );
|
||||||
|
//}
|
||||||
|
|
||||||
|
bFail = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( bFail )
|
||||||
|
{
|
||||||
|
NDebugOverlay::Line( vecApex, vecSpot2, 255, 0, 0, true, 5.0 );
|
||||||
|
NDebugOverlay::Sphere( tr.endpos, vec3_angle, flTolerance, 255, 0, 0, 0, true, 5.0 );
|
||||||
|
|
||||||
|
return vec3_origin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return vecGrenadeVel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Purpose: Get a toss direction that will properly lob spit to hit a target
|
||||||
|
// Input : &vecStartPos - Where the spit will start from
|
||||||
|
// &vecTarget - Where the spit is meant to land
|
||||||
|
// *vecOut - The resulting vector to lob the spit
|
||||||
|
// Output : Returns true on success, false on failure.
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
bool CNPC_Bullsquid::GetSpitVector( const Vector &vecStartPos, const Vector &vecTarget, Vector *vecOut )
|
||||||
|
{
|
||||||
|
// Try the most direct route
|
||||||
|
Vector vecToss = VecCheckThrowToleranceSquid( this, vecStartPos, vecTarget, sk_bullsquid_spit_speed.GetFloat(), (10.0f*12.0f) );
|
||||||
|
|
||||||
|
// If this failed then try a little faster (flattens the arc)
|
||||||
|
if ( vecToss == vec3_origin )
|
||||||
|
{
|
||||||
|
vecToss = VecCheckThrowToleranceSquid( this, vecStartPos, vecTarget, sk_bullsquid_spit_speed.GetFloat() * 1.5f, (10.0f*12.0f) );
|
||||||
|
if ( vecToss == vec3_origin )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save out the result
|
||||||
|
if ( vecOut )
|
||||||
|
{
|
||||||
|
*vecOut = vecToss;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
// MeleeAttack2Conditions - bullsquid is a big guy, so has a longer
|
// MeleeAttack2Conditions - bullsquid is a big guy, so has a longer
|
||||||
// melee range than most monsters. This is the tailwhip attack
|
// melee range than most monsters. This is the tailwhip attack
|
||||||
|
@ -57,6 +57,9 @@ public:
|
|||||||
void StartTask ( const Task_t *pTask );
|
void StartTask ( const Task_t *pTask );
|
||||||
void RunTask ( const Task_t *pTask );
|
void RunTask ( const Task_t *pTask );
|
||||||
|
|
||||||
|
// Copied from antlion
|
||||||
|
virtual bool GetSpitVector( const Vector &vecStartPos, const Vector &vecTarget, Vector *vecOut );
|
||||||
|
|
||||||
NPC_STATE SelectIdealState ( void );
|
NPC_STATE SelectIdealState ( void );
|
||||||
|
|
||||||
DEFINE_CUSTOM_AI;
|
DEFINE_CUSTOM_AI;
|
||||||
@ -70,5 +73,7 @@ private:
|
|||||||
float m_flHungryTime;// set this is a future time to stop the monster from eating for a while.
|
float m_flHungryTime;// set this is a future time to stop the monster from eating for a while.
|
||||||
|
|
||||||
float m_nextSquidSoundTime;
|
float m_nextSquidSoundTime;
|
||||||
|
|
||||||
|
Vector m_vecSaveSpitVelocity;
|
||||||
};
|
};
|
||||||
#endif // NPC_BULLSQUID_H
|
#endif // NPC_BULLSQUID_H
|
176
sp/src/game/server/hl2/npc_test.cpp
Normal file
176
sp/src/game/server/hl2/npc_test.cpp
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||||
|
// This is a skeleton file for use when creating a new
|
||||||
|
// NPC. Copy and rename this file for the new
|
||||||
|
// NPC and add the copy to the build.
|
||||||
|
//
|
||||||
|
// Leave this file in the build until we ship! Allowing
|
||||||
|
// this file to be rebuilt with the rest of the game ensures
|
||||||
|
// that it stays up to date with the rest of the NPC code.
|
||||||
|
//
|
||||||
|
// Replace occurances of CNPC_Test with the new NPC's
|
||||||
|
// classname. Don't forget the lower-case occurance in
|
||||||
|
// LINK_ENTITY_TO_CLASS()
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// ASSUMPTIONS MADE:
|
||||||
|
//
|
||||||
|
// You're making a character based on CAI_BaseNPC. If this
|
||||||
|
// is not true, make sure you replace all occurances
|
||||||
|
// of 'CAI_BaseNPC' in this file with the appropriate
|
||||||
|
// parent class.
|
||||||
|
//
|
||||||
|
// You're making a human-sized NPC that walks.
|
||||||
|
//
|
||||||
|
//=============================================================================//
|
||||||
|
#include "cbase.h"
|
||||||
|
#include "ai_default.h"
|
||||||
|
#include "ai_task.h"
|
||||||
|
#include "ai_schedule.h"
|
||||||
|
#include "ai_hull.h"
|
||||||
|
#include "soundent.h"
|
||||||
|
#include "game.h"
|
||||||
|
#include "npcevent.h"
|
||||||
|
#include "entitylist.h"
|
||||||
|
#include "activitylist.h"
|
||||||
|
#include "ai_basenpc.h"
|
||||||
|
#include "engine/IEngineSound.h"
|
||||||
|
|
||||||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||||||
|
#include "tier0/memdbgon.h"
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
// Private activities
|
||||||
|
//=========================================================
|
||||||
|
int ACT_TESTCUSTOMACTIVITY = -1;
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
// Custom schedules
|
||||||
|
//=========================================================
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
SCHED_TESTCUSTOMSCHEDULE = LAST_SHARED_SCHEDULE,
|
||||||
|
};
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
// Custom tasks
|
||||||
|
//=========================================================
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TASK_TESTCUSTOMTASK = LAST_SHARED_TASK,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
// Custom Conditions
|
||||||
|
//=========================================================
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
COND_TESTCUSTOMCONDITION = LAST_SHARED_CONDITION,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//=========================================================
|
||||||
|
//=========================================================
|
||||||
|
class CNPC_Test : public CAI_BaseNPC
|
||||||
|
{
|
||||||
|
DECLARE_CLASS( CNPC_Test, CAI_BaseNPC );
|
||||||
|
|
||||||
|
public:
|
||||||
|
void Precache( void );
|
||||||
|
void Spawn( void );
|
||||||
|
Class_T Classify( void );
|
||||||
|
|
||||||
|
DECLARE_DATADESC();
|
||||||
|
|
||||||
|
// This is a dummy field. In order to provide save/restore
|
||||||
|
// code in this file, we must have at least one field
|
||||||
|
// for the code to operate on. Delete this field when
|
||||||
|
// you are ready to do your own save/restore for this
|
||||||
|
// character.
|
||||||
|
int m_iDeleteThisField;
|
||||||
|
|
||||||
|
DEFINE_CUSTOM_AI;
|
||||||
|
};
|
||||||
|
|
||||||
|
LINK_ENTITY_TO_CLASS( npc_test, CNPC_Test );
|
||||||
|
IMPLEMENT_CUSTOM_AI( npc_citizen,CNPC_Test );
|
||||||
|
|
||||||
|
|
||||||
|
//---------------------------------------------------------
|
||||||
|
// Save/Restore
|
||||||
|
//---------------------------------------------------------
|
||||||
|
BEGIN_DATADESC( CNPC_Test )
|
||||||
|
|
||||||
|
DEFINE_FIELD( m_iDeleteThisField, FIELD_INTEGER ),
|
||||||
|
|
||||||
|
END_DATADESC()
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Purpose: Initialize the custom schedules
|
||||||
|
// Input :
|
||||||
|
// Output :
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
void CNPC_Test::InitCustomSchedules(void)
|
||||||
|
{
|
||||||
|
INIT_CUSTOM_AI(CNPC_Test);
|
||||||
|
|
||||||
|
ADD_CUSTOM_TASK(CNPC_Test, TASK_TESTCUSTOMTASK);
|
||||||
|
|
||||||
|
ADD_CUSTOM_SCHEDULE(CNPC_Test, SCHED_TESTCUSTOMSCHEDULE);
|
||||||
|
|
||||||
|
ADD_CUSTOM_ACTIVITY(CNPC_Test, ACT_TESTCUSTOMACTIVITY);
|
||||||
|
|
||||||
|
ADD_CUSTOM_CONDITION(CNPC_Test, COND_TESTCUSTOMCONDITION);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
void CNPC_Test::Precache( void )
|
||||||
|
{
|
||||||
|
PrecacheModel("models/humans/group01/female_01.mdl");
|
||||||
|
|
||||||
|
BaseClass::Precache();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
void CNPC_Test::Spawn( void )
|
||||||
|
{
|
||||||
|
Precache();
|
||||||
|
|
||||||
|
SetModel( "models/humans/group01/female_01.mdl" );
|
||||||
|
SetHullType(HULL_HUMAN);
|
||||||
|
SetHullSizeNormal();
|
||||||
|
|
||||||
|
SetSolid( SOLID_BBOX );
|
||||||
|
AddSolidFlags( FSOLID_NOT_STANDABLE );
|
||||||
|
SetMoveType( MOVETYPE_STEP );
|
||||||
|
SetBloodColor( BLOOD_COLOR_RED );
|
||||||
|
m_iHealth = 20;
|
||||||
|
m_flFieldOfView = 0.5;
|
||||||
|
m_NPCState = NPC_STATE_NONE;
|
||||||
|
|
||||||
|
CapabilitiesClear();
|
||||||
|
//CapabilitiesAdd( bits_CAP_NONE );
|
||||||
|
|
||||||
|
NPCInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// Purpose:
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Output :
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
Class_T CNPC_Test::Classify( void )
|
||||||
|
{
|
||||||
|
return CLASS_TEST;
|
||||||
|
}
|
@ -404,6 +404,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_BARNACLE
|
// > CLASS_BARNACLE
|
||||||
@ -439,7 +440,8 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_BULLSEYE
|
// > CLASS_BULLSEYE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -504,6 +506,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BULLSQUID, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BULLSQUID, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BULLSQUID, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BULLSQUID, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BULLSQUID, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BULLSQUID, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BULLSQUID, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_CITIZEN_PASSIVE
|
// > CLASS_CITIZEN_PASSIVE
|
||||||
@ -536,7 +539,8 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_PASSIVE, CLASS_PLAYER_ALLY, D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_PASSIVE, CLASS_PLAYER_ALLY, D_NU, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_PASSIVE, CLASS_PLAYER_ALLY_VITAL,D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_PASSIVE, CLASS_PLAYER_ALLY_VITAL,D_NU, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_PASSIVE, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_PASSIVE, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_PASSIVE, CLASS_TEST,D_FR, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_CITIZEN_REBEL
|
// > CLASS_CITIZEN_REBEL
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -568,7 +572,8 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_REBEL, CLASS_PLAYER_ALLY, D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_REBEL, CLASS_PLAYER_ALLY, D_NU, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_REBEL, CLASS_PLAYER_ALLY_VITAL,D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_REBEL, CLASS_PLAYER_ALLY_VITAL,D_NU, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_REBEL, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_REBEL, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CITIZEN_REBEL, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_COMBINE
|
// > CLASS_COMBINE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -600,7 +605,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_COMBINE_GUNSHIP
|
// > CLASS_COMBINE_GUNSHIP
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -632,7 +637,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_GUNSHIP, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_GUNSHIP, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_GUNSHIP, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_GUNSHIP, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_GUNSHIP, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_GUNSHIP, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_GUNSHIP, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_COMBINE_HUNTER
|
// > CLASS_COMBINE_HUNTER
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -664,7 +669,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_HUNTER, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_HUNTER, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_HUNTER, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_HUNTER, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_HUNTER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_HUNTER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_COMBINE_HUNTER, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_CONSCRIPT
|
// > CLASS_CONSCRIPT
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -696,7 +701,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_PLAYER_ALLY, D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_PLAYER_ALLY, D_NU, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_PLAYER_ALLY_VITAL,D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_PLAYER_ALLY_VITAL,D_NU, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_FLARE
|
// > CLASS_FLARE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -761,7 +766,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_HACKED_ROLLERMINE,D_FR, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_HACKED_ROLLERMINE,D_FR, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_HOUNDEYE
|
// > CLASS_HOUNDEYE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -794,7 +799,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_MANHACK
|
// > CLASS_MANHACK
|
||||||
@ -827,7 +832,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_METROPOLICE
|
// > CLASS_METROPOLICE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -859,6 +864,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_MILITARY
|
// > CLASS_MILITARY
|
||||||
@ -891,7 +897,8 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_MISSILE
|
// > CLASS_MISSILE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -923,7 +930,8 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_NONE
|
// > CLASS_NONE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -986,7 +994,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER, CLASS_PLAYER_ALLY, D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER, CLASS_PLAYER_ALLY, D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_PLAYER_ALLY
|
// > CLASS_PLAYER_ALLY
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -1018,7 +1026,8 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY, CLASS_PLAYER_ALLY, D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY, CLASS_PLAYER_ALLY, D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY, CLASS_TEST,D_HT, 0);
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_PLAYER_ALLY_VITAL
|
// > CLASS_PLAYER_ALLY_VITAL
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -1050,7 +1059,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY_VITAL, CLASS_PLAYER_ALLY, D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY_VITAL, CLASS_PLAYER_ALLY, D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY_VITAL, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY_VITAL, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY_VITAL, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY_VITAL, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PLAYER_ALLY_VITAL, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_SCANNER
|
// > CLASS_SCANNER
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -1081,8 +1090,8 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_EARTH_FAUNA, D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_EARTH_FAUNA, D_NU, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_SCANNER, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_STALKER
|
// > CLASS_STALKER
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -1114,7 +1123,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_VORTIGAUNT
|
// > CLASS_VORTIGAUNT
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -1146,7 +1155,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_PLAYER_ALLY, D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_PLAYER_ALLY, D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_ZOMBIE
|
// > CLASS_ZOMBIE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -1178,7 +1187,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_PROTOSNIPER
|
// > CLASS_PROTOSNIPER
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -1210,7 +1219,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PROTOSNIPER, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PROTOSNIPER, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PROTOSNIPER, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PROTOSNIPER, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PROTOSNIPER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PROTOSNIPER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_PROTOSNIPER, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_EARTH_FAUNA
|
// > CLASS_EARTH_FAUNA
|
||||||
//
|
//
|
||||||
@ -1245,7 +1254,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_EARTH_FAUNA, CLASS_PLAYER_ALLY, D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_EARTH_FAUNA, CLASS_PLAYER_ALLY, D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_EARTH_FAUNA, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_EARTH_FAUNA, CLASS_PLAYER_ALLY_VITAL,D_HT, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_EARTH_FAUNA, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_EARTH_FAUNA, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_EARTH_FAUNA, CLASS_TEST,D_HT, 0);
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
// > CLASS_HACKED_ROLLERMINE
|
// > CLASS_HACKED_ROLLERMINE
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
@ -1277,6 +1286,7 @@ ConVar alyx_darkness_force( "alyx_darkness_force", "0", FCVAR_CHEAT | FCVAR_REP
|
|||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HACKED_ROLLERMINE, CLASS_PLAYER_ALLY, D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HACKED_ROLLERMINE, CLASS_PLAYER_ALLY, D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HACKED_ROLLERMINE, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HACKED_ROLLERMINE, CLASS_PLAYER_ALLY_VITAL,D_LI, 0);
|
||||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HACKED_ROLLERMINE, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HACKED_ROLLERMINE, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
||||||
|
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HACKED_ROLLERMINE, CLASS_TEST,D_HT, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user