mirror of
https://github.com/mapbase-source/source-sdk-2013.git
synced 2025-04-20 16:32:30 +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_HACKED_ROLLERMINE,
|
||||
CLASS_COMBINE_HUNTER,
|
||||
CLASS_TEST,
|
||||
|
||||
NUM_AI_CLASSES
|
||||
};
|
||||
|
@ -128,6 +128,10 @@ void CGrenadeSpit::Event_Killed( const CTakeDamageInfo &info )
|
||||
//-----------------------------------------------------------------------------
|
||||
void CGrenadeSpit::GrenadeSpitTouch( CBaseEntity *pOther )
|
||||
{
|
||||
|
||||
if ( pOther->Classify() == CLASS_BULLSQUID)
|
||||
return; // Don't hit bullsquids!
|
||||
|
||||
if ( pOther->IsSolidFlagSet(FSOLID_VOLUME_CONTENTS | FSOLID_TRIGGER) )
|
||||
{
|
||||
// Some NPCs are triggers that can take damage (like antlion grubs). We should hit them.
|
||||
|
@ -29,6 +29,7 @@
|
||||
#include "vstdlib/random.h"
|
||||
#include "engine/IEngineSound.h"
|
||||
#include "movevars_shared.h"
|
||||
#include "particle_parse.h" // DispatchParticleEffect
|
||||
|
||||
#include "AI_Hint.h"
|
||||
#include "AI_Senses.h"
|
||||
@ -41,6 +42,7 @@
|
||||
ConVar sk_bullsquid_health( "sk_bullsquid_health", "100" );
|
||||
ConVar sk_bullsquid_dmg_bite( "sk_bullsquid_dmg_bite", "15" );
|
||||
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
|
||||
@ -87,6 +89,7 @@ int g_interactionBullsquidThrow = 0;
|
||||
#define BSQUID_AE_HOP ( 5 )
|
||||
#define BSQUID_AE_THROW ( 6 )
|
||||
#define BSQUID_AE_WHIP_SND ( 7 )
|
||||
//#define BSQUID_AE_TAILWHIP ( 8 )
|
||||
|
||||
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_flHungryTime, FIELD_TIME ),
|
||||
DEFINE_FIELD( m_nextSquidSoundTime, FIELD_TIME ),
|
||||
|
||||
DEFINE_FIELD( m_vecSaveSpitVelocity, FIELD_VECTOR),
|
||||
|
||||
|
||||
END_DATADESC()
|
||||
|
||||
|
||||
@ -154,6 +159,8 @@ void CNPC_Bullsquid::Precache()
|
||||
|
||||
UTIL_PrecacheOther( "grenade_spit" );
|
||||
|
||||
PrecacheParticleSystem( "blood_impact_yellow_01" );
|
||||
|
||||
PrecacheScriptSound( "NPC_Bullsquid.Idle" );
|
||||
PrecacheScriptSound( "NPC_Bullsquid.Pain" );
|
||||
PrecacheScriptSound( "NPC_Bullsquid.Alert" );
|
||||
@ -161,7 +168,9 @@ void CNPC_Bullsquid::Precache()
|
||||
PrecacheScriptSound( "NPC_Bullsquid.Attack1" );
|
||||
PrecacheScriptSound( "NPC_Bullsquid.Growl" );
|
||||
PrecacheScriptSound( "NPC_Bullsquid.TailWhip");
|
||||
|
||||
PrecacheScriptSound( "NPC_Antlion.PoisonShoot" );
|
||||
PrecacheScriptSound( "NPC_Antlion.PoisonBall" );
|
||||
|
||||
BaseClass::Precache();
|
||||
}
|
||||
|
||||
@ -262,6 +271,8 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
||||
{
|
||||
if ( GetEnemy() )
|
||||
{
|
||||
// Replace original bullsquid spit code with antlion worker code
|
||||
/*
|
||||
Vector vSpitPos;
|
||||
|
||||
GetAttachment( "Mouth", vSpitPos );
|
||||
@ -272,7 +283,8 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
||||
float flGravity = SPIT_GRAVITY;
|
||||
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->Spawn( );
|
||||
pGrenade->SetThrower( this );
|
||||
@ -292,11 +304,95 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
||||
AttackSound();
|
||||
|
||||
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;
|
||||
|
||||
|
||||
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 );
|
||||
if ( pHurt )
|
||||
@ -405,6 +501,8 @@ void CNPC_Bullsquid::HandleAnimEvent( animevent_t *pEvent )
|
||||
|
||||
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 )
|
||||
{
|
||||
// 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_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
|
||||
// melee range than most monsters. This is the tailwhip attack
|
||||
|
@ -57,6 +57,9 @@ public:
|
||||
void StartTask ( 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 );
|
||||
|
||||
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_nextSquidSoundTime;
|
||||
|
||||
Vector m_vecSaveSpitVelocity;
|
||||
};
|
||||
#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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ANTLION, CLASS_TEST,D_HT, 0);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_BARNACLE, CLASS_TEST,D_HT, 0);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,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
|
||||
@ -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_VITAL,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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,D_NU, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_HACKED_ROLLERMINE,D_NU, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_CONSCRIPT, CLASS_TEST,D_HT, 0);
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_HACKED_ROLLERMINE,D_FR, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HEADCRAB, CLASS_TEST,D_HT, 0);
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_HOUNDEYE, CLASS_TEST,D_HT, 0);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MANHACK, CLASS_TEST,D_HT, 0);
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_METROPOLICE, CLASS_TEST,D_HT, 0);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MILITARY, CLASS_TEST,D_HT, 0);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_MISSILE, CLASS_TEST,D_HT, 0);
|
||||
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_PLAYER_ALLY, 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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_STALKER, CLASS_TEST,D_HT, 0);
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_LI, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_HACKED_ROLLERMINE,D_LI, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_VORTIGAUNT, CLASS_TEST,D_HT, 0);
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,D_HT, 0);
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_HACKED_ROLLERMINE,D_HT, 0);
|
||||
|
||||
CBaseCombatCharacter::SetDefaultRelationship(CLASS_ZOMBIE, CLASS_TEST,D_HT, 0);
|
||||
// ------------------------------------------------------------
|
||||
// > 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_VITAL,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
|
||||
//
|
||||
@ -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_VITAL,D_HT, 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
|
||||
// ------------------------------------------------------------
|
||||
@ -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_VITAL,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