Yet another GMR/GSR fix.
Monster maximum viewable distance is now customizable.
This commit is contained in:
@@ -424,7 +424,7 @@ void CMApache :: HuntThink( void )
|
||||
|
||||
// if (m_hEnemy == NULL)
|
||||
{
|
||||
Look( 4092 );
|
||||
Look( 4096 );
|
||||
m_hEnemy = BestVisibleEnemy( );
|
||||
}
|
||||
|
||||
|
||||
@@ -31,6 +31,8 @@
|
||||
#include "effects.h"
|
||||
#include "customentity.h"
|
||||
|
||||
extern cvar_t *monster_default_maxrange;
|
||||
|
||||
//=========================================================
|
||||
// monster-specific DEFINE's
|
||||
//=========================================================
|
||||
@@ -265,6 +267,10 @@ void CMMassn::Spawn()
|
||||
{
|
||||
SetBodygroup(GUN_GROUP, GUN_SNIPERRIFLE);
|
||||
m_cClipSize = 5;
|
||||
|
||||
// if no attack range set, set 2x default
|
||||
if (!m_flDistLook)
|
||||
m_flDistLook = monster_default_maxrange->value * 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -280,7 +286,12 @@ void CMMassn::Spawn()
|
||||
CMTalkMonster::g_talkWaitTime = 0;
|
||||
|
||||
MonsterInit();
|
||||
|
||||
if (FBitSet(pev->weapons, MASSN_SNIPERRIFLE))
|
||||
{
|
||||
// override for snipers
|
||||
m_flDistTooFar = m_flDistLook / 1.33;
|
||||
}
|
||||
|
||||
pev->classname = MAKE_STRING( "monster_male_assassin" );
|
||||
if ( strlen( STRING( m_szMonsterName ) ) == 0 )
|
||||
{
|
||||
|
||||
@@ -95,6 +95,8 @@ cvar_t init_globalmodellist = {"monster_gmr", "", FCVAR_EXTDLL, 0, NULL};
|
||||
cvar_t *globalmodellist = NULL;
|
||||
cvar_t init_globalsoundlist = {"monster_gsr", "", FCVAR_EXTDLL, 0, NULL};
|
||||
cvar_t *globalsoundlist = NULL;
|
||||
cvar_t init_monster_default_maxrange = {"monster_default_maxrange", "2048", FCVAR_EXTDLL, 0, NULL};
|
||||
cvar_t *monster_default_maxrange = NULL;
|
||||
|
||||
|
||||
// Metamod requesting info about this plugin:
|
||||
@@ -165,6 +167,9 @@ C_DLLEXPORT int Meta_Attach(PLUG_LOADTIME now, META_FUNCTIONS *pFunctionTable, m
|
||||
CVAR_REGISTER(&init_globalsoundlist);
|
||||
globalsoundlist = CVAR_GET_POINTER("monster_gsr");
|
||||
|
||||
CVAR_REGISTER(&init_monster_default_maxrange);
|
||||
monster_default_maxrange = CVAR_GET_POINTER("monster_default_maxrange");
|
||||
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
|
||||
@@ -890,6 +890,10 @@ void scan_monster_replace(FILE *fp, bool toGSR )
|
||||
|
||||
while (get_input(fp, input))
|
||||
{
|
||||
// might slip through
|
||||
if (strlen(input) == 0)
|
||||
continue;
|
||||
|
||||
char *source = strtok(input, " ");
|
||||
char *destination = strtok(NULL, " ");
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ extern DLL_GLOBAL BOOL g_fDrawLines;
|
||||
extern CGraph WorldGraph;// the world node graph
|
||||
|
||||
extern cvar_t *monster_turn_coeficient;
|
||||
extern cvar_t *monster_default_maxrange;
|
||||
|
||||
extern void process_monster_sound(edict_t *pMonster, char *fileName);
|
||||
|
||||
@@ -1663,8 +1664,9 @@ void CMBaseMonster :: MonsterInit ( void )
|
||||
for (int i=0; i < MAX_OLD_ENEMIES; i++)
|
||||
m_hOldEnemy[ i ] = NULL;
|
||||
|
||||
m_flDistTooFar = 1024.0;
|
||||
m_flDistLook = 2048.0;
|
||||
if (!m_flDistLook)
|
||||
m_flDistLook = monster_default_maxrange->value;
|
||||
m_flDistTooFar = m_flDistLook / 2; // always 50%
|
||||
|
||||
// set eye position
|
||||
SetEyePosition();
|
||||
@@ -2651,6 +2653,11 @@ void CMBaseMonster :: KeyValue( KeyValueData *pkvd )
|
||||
}
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else if (FStrEq(pkvd->szKeyName, "attackrange"))
|
||||
{
|
||||
m_flDistLook = atof(pkvd->szValue);
|
||||
pkvd->fHandled = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
CMBaseToggle::KeyValue( pkvd );
|
||||
|
||||
@@ -92,6 +92,9 @@ void CMBaseTurret::Spawn()
|
||||
m_iAutoStart = TRUE;
|
||||
}
|
||||
|
||||
if (!m_flDistLook)
|
||||
m_flDistLook = TURRET_RANGE;
|
||||
|
||||
ResetSequenceInfo( );
|
||||
SetBoneController( 0, 0 );
|
||||
SetBoneController( 1, 0 );
|
||||
@@ -348,7 +351,7 @@ void CMBaseTurret::ActiveThink(void)
|
||||
Vector vec = UTIL_VecToAngles(vecMidEnemy - vecMid);
|
||||
|
||||
// Current enemy is not visible.
|
||||
if (!fEnemyVisible || (flDistToEnemy > TURRET_RANGE))
|
||||
if (!fEnemyVisible || (flDistToEnemy > m_flDistLook))
|
||||
{
|
||||
if (!m_flLastSight)
|
||||
m_flLastSight = gpGlobals->time + 0.5;
|
||||
@@ -459,7 +462,7 @@ void CMBaseTurret::ActiveThink(void)
|
||||
|
||||
void CMTurret::Shoot(Vector &vecSrc, Vector &vecDirToEnemy)
|
||||
{
|
||||
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, TURRET_RANGE, BULLET_MONSTER_12MM, 1 );
|
||||
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, m_flDistLook, BULLET_MONSTER_12MM, 1 );
|
||||
EMIT_SOUND(ENT(pev), CHAN_WEAPON, "turret/tu_fire1.wav", 1, 0.6);
|
||||
pev->effects = pev->effects | EF_MUZZLEFLASH;
|
||||
}
|
||||
@@ -467,7 +470,7 @@ void CMTurret::Shoot(Vector &vecSrc, Vector &vecDirToEnemy)
|
||||
|
||||
void CMMiniTurret::Shoot(Vector &vecSrc, Vector &vecDirToEnemy)
|
||||
{
|
||||
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, TURRET_RANGE, BULLET_MONSTER_9MM, 1 );
|
||||
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, m_flDistLook, BULLET_MONSTER_9MM, 1 );
|
||||
|
||||
switch(RANDOM_LONG(0,2))
|
||||
{
|
||||
@@ -721,7 +724,7 @@ void CMBaseTurret::SearchThink(void)
|
||||
// Acquire Target
|
||||
if (m_hEnemy == NULL)
|
||||
{
|
||||
Look(TURRET_RANGE);
|
||||
Look(m_flDistLook);
|
||||
m_hEnemy = BestVisibleEnemy();
|
||||
}
|
||||
|
||||
@@ -779,7 +782,7 @@ void CMBaseTurret::AutoSearchThink(void)
|
||||
|
||||
if (m_hEnemy == NULL)
|
||||
{
|
||||
Look( TURRET_RANGE );
|
||||
Look( m_flDistLook );
|
||||
m_hEnemy = BestVisibleEnemy();
|
||||
}
|
||||
|
||||
@@ -1042,7 +1045,7 @@ void CMSentry::Spawn()
|
||||
|
||||
void CMSentry::Shoot(Vector &vecSrc, Vector &vecDirToEnemy)
|
||||
{
|
||||
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, TURRET_RANGE, BULLET_MONSTER_MP5, 1 );
|
||||
FireBullets( 1, vecSrc, vecDirToEnemy, TURRET_SPREAD, m_flDistLook, BULLET_MONSTER_MP5, 1 );
|
||||
|
||||
switch(RANDOM_LONG(0,2))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user