mirror of https://github.com/FWGS/hlsdk-xash3d
Add working impulse 102 weapon cheat.
This commit is contained in:
parent
4a156e93bd
commit
db5a2d0cb1
|
@ -72,20 +72,20 @@ def build(bld):
|
|||
source += bld.path.parent.ant_glob('game_shared/*.cpp', excl=excluded_files)
|
||||
source += bld.path.parent.ant_glob([
|
||||
'pm_shared/*.c',
|
||||
'dlls/crossbow.cpp',
|
||||
'dlls/crowbar.cpp',
|
||||
'dlls/egon.cpp',
|
||||
'dlls/gauss.cpp',
|
||||
'dlls/glock.cpp',
|
||||
'dlls/handgrenade.cpp',
|
||||
'dlls/hornetgun.cpp',
|
||||
'dlls/mp5.cpp',
|
||||
'dlls/python.cpp',
|
||||
'dlls/rpg.cpp',
|
||||
'dlls/satchel.cpp',
|
||||
'dlls/shotgun.cpp',
|
||||
'dlls/squeakgrenade.cpp',
|
||||
'dlls/tripmine.cpp'
|
||||
# 'dlls/crossbow.cpp',
|
||||
# 'dlls/crowbar.cpp',
|
||||
# 'dlls/egon.cpp',
|
||||
# 'dlls/gauss.cpp',
|
||||
# 'dlls/glock.cpp',
|
||||
# 'dlls/handgrenade.cpp',
|
||||
# 'dlls/hornetgun.cpp',
|
||||
# 'dlls/mp5.cpp',
|
||||
# 'dlls/python.cpp',
|
||||
# 'dlls/rpg.cpp',
|
||||
# 'dlls/satchel.cpp',
|
||||
# 'dlls/shotgun.cpp',
|
||||
# 'dlls/squeakgrenade.cpp',
|
||||
# 'dlls/tripmine.cpp'
|
||||
])
|
||||
|
||||
|
||||
|
|
|
@ -75,12 +75,12 @@ set (SVDLL_SOURCES
|
|||
client.cpp
|
||||
combat.cpp
|
||||
controller.cpp
|
||||
# crossbow.cpp
|
||||
crossbow.cpp
|
||||
crowbar.cpp
|
||||
defaultai.cpp
|
||||
doors.cpp
|
||||
effects.cpp
|
||||
# egon.cpp
|
||||
egon.cpp
|
||||
explode.cpp
|
||||
flyingmonster.cpp
|
||||
func_break.cpp
|
||||
|
@ -88,7 +88,7 @@ set (SVDLL_SOURCES
|
|||
game.cpp
|
||||
gamerules.cpp
|
||||
gargantua.cpp
|
||||
# gauss.cpp
|
||||
gauss.cpp
|
||||
genericmonster.cpp
|
||||
ggrenade.cpp
|
||||
globals.cpp
|
||||
|
@ -99,13 +99,13 @@ set (SVDLL_SOURCES
|
|||
h_cine.cpp
|
||||
h_cycler.cpp
|
||||
h_export.cpp
|
||||
# handgrenade.cpp
|
||||
handgrenade.cpp
|
||||
hassassin.cpp
|
||||
headcrab.cpp
|
||||
healthkit.cpp
|
||||
hgrunt.cpp
|
||||
hornet.cpp
|
||||
# hornetgun.cpp
|
||||
hornetgun.cpp
|
||||
houndeye.cpp
|
||||
ichthyosaur.cpp
|
||||
islave.cpp
|
||||
|
@ -127,12 +127,12 @@ set (SVDLL_SOURCES
|
|||
plane.cpp
|
||||
plats.cpp
|
||||
player.cpp
|
||||
# python.cpp
|
||||
python.cpp
|
||||
playermonster.cpp
|
||||
rat.cpp
|
||||
roach.cpp
|
||||
rpg.cpp
|
||||
# satchel.cpp
|
||||
satchel.cpp
|
||||
schedule.cpp
|
||||
scientist.cpp
|
||||
scripted.cpp
|
||||
|
@ -143,7 +143,7 @@ set (SVDLL_SOURCES
|
|||
soundent.cpp
|
||||
spectator.cpp
|
||||
squadmonster.cpp
|
||||
# squeakgrenade.cpp
|
||||
squeakgrenade.cpp
|
||||
subs.cpp
|
||||
talkmonster.cpp
|
||||
teamplay_gamerules.cpp
|
||||
|
|
|
@ -466,19 +466,6 @@ void CAGrunt::HandleAnimEvent( MonsterEvent_t *pEvent )
|
|||
UTIL_MakeVectors( pHornet->pev->angles );
|
||||
pHornet->pev->velocity = gpGlobals->v_forward * 300.0f;
|
||||
|
||||
switch( RANDOM_LONG( 0, 2 ) )
|
||||
{
|
||||
case 0:
|
||||
EMIT_SOUND_DYN( ENT( pev ), CHAN_WEAPON, "agrunt/ag_fire1.wav", 1.0, ATTN_NORM, 0, 100 );
|
||||
break;
|
||||
case 1:
|
||||
EMIT_SOUND_DYN( ENT( pev ), CHAN_WEAPON, "agrunt/ag_fire2.wav", 1.0, ATTN_NORM, 0, 100 );
|
||||
break;
|
||||
case 2:
|
||||
EMIT_SOUND_DYN( ENT( pev ), CHAN_WEAPON, "agrunt/ag_fire3.wav", 1.0, ATTN_NORM, 0, 100 );
|
||||
break;
|
||||
}
|
||||
|
||||
CBaseMonster *pHornetMonster = pHornet->MyMonsterPointer();
|
||||
|
||||
if( pHornetMonster )
|
||||
|
|
|
@ -291,8 +291,8 @@ void CCrossbow::Precache( void )
|
|||
|
||||
UTIL_PrecacheOther( "crossbow_bolt" );
|
||||
|
||||
m_usCrossbow = PRECACHE_EVENT( 1, "events/crossbow1.sc" );
|
||||
m_usCrossbow2 = PRECACHE_EVENT( 1, "events/crossbow2.sc" );
|
||||
// m_usCrossbow = PRECACHE_EVENT( 1, "events/crossbow1.sc" );
|
||||
// m_usCrossbow2 = PRECACHE_EVENT( 1, "events/crossbow2.sc" );
|
||||
}
|
||||
|
||||
int CCrossbow::GetItemInfo( ItemInfo *p )
|
||||
|
@ -352,7 +352,7 @@ void CCrossbow::PrimaryAttack( void )
|
|||
// this function only gets called in multiplayer
|
||||
void CCrossbow::FireSniperBolt()
|
||||
{
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.75f );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.75f;
|
||||
|
||||
if( m_iClip == 0 )
|
||||
{
|
||||
|
@ -365,14 +365,16 @@ void CCrossbow::FireSniperBolt()
|
|||
m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME;
|
||||
m_iClip--;
|
||||
|
||||
int flags;
|
||||
#if CLIENT_WEAPONS
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usCrossbow2, 0.0f, g_vecZero, g_vecZero, 0, 0, m_iClip, 0, 0, 0 );
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_WEAPON, "weapons/xbow_fire1.wav", RANDOM_FLOAT( 0.95f, 1.0f ), ATTN_NORM, 0, 93 + RANDOM_LONG( 0, 0xF ) );
|
||||
if( m_iClip )
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/xbow_reload1.wav", RANDOM_FLOAT( 0.95f, 1.0f ), ATTN_NORM, 0, 93 + RANDOM_LONG( 0, 0xF ) );
|
||||
SendWeaponAnim( CROSSBOW_FIRE1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
SendWeaponAnim( CROSSBOW_FIRE3 );
|
||||
}
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
@ -408,14 +410,15 @@ void CCrossbow::FireBolt()
|
|||
|
||||
m_iClip--;
|
||||
|
||||
int flags;
|
||||
#if CLIENT_WEAPONS
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usCrossbow, 0.0f, g_vecZero, g_vecZero, 0, 0, m_iClip, 0, 0, 0 );
|
||||
if( m_iClip )
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/xbow_reload1.wav", RANDOM_FLOAT( 0.95f, 1.0f ), ATTN_NORM, 0, 93 + RANDOM_LONG( 0, 0xF ) );
|
||||
SendWeaponAnim( CROSSBOW_FIRE1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
SendWeaponAnim( CROSSBOW_FIRE3 );
|
||||
}
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
@ -451,7 +454,7 @@ void CCrossbow::FireBolt()
|
|||
// HEV suit - indicate out of ammo condition
|
||||
m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 );
|
||||
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.75f );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.75f;
|
||||
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.75f;
|
||||
|
||||
|
|
|
@ -275,7 +275,7 @@ int CCrowbar::Swing( int fFirst )
|
|||
if( !pEntity->IsAlive() )
|
||||
{
|
||||
#if CROWBAR_FIX_RAPID_CROWBAR
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay(0.25);
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.25f;
|
||||
#endif
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -51,6 +51,9 @@ enum egon_e {
|
|||
|
||||
LINK_ENTITY_TO_CLASS( weapon_egon, CEgon )
|
||||
|
||||
int CEgon::g_fireAnims1[] = { EGON_FIRE1, EGON_FIRE2, EGON_FIRE3, EGON_FIRE4 };
|
||||
int CEgon::g_fireAnims2[] = { EGON_ALTFIRECYCLE };
|
||||
|
||||
void CEgon::Spawn()
|
||||
{
|
||||
Precache();
|
||||
|
@ -80,8 +83,8 @@ void CEgon::Precache( void )
|
|||
|
||||
PRECACHE_SOUND( "weapons/357_cock1.wav" );
|
||||
|
||||
m_usEgonFire = PRECACHE_EVENT( 1, "events/egon_fire.sc" );
|
||||
m_usEgonStop = PRECACHE_EVENT( 1, "events/egon_stop.sc" );
|
||||
// m_usEgonFire = PRECACHE_EVENT( 1, "events/egon_fire.sc" );
|
||||
// m_usEgonStop = PRECACHE_EVENT( 1, "events/egon_stop.sc" );
|
||||
}
|
||||
|
||||
BOOL CEgon::Deploy( void )
|
||||
|
@ -197,13 +200,21 @@ void CEgon::Attack( void )
|
|||
|
||||
m_flAmmoUseTime = gpGlobals->time;// start using ammo ASAP.
|
||||
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usEgonFire, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 0, m_fireMode, 1, 0 );
|
||||
|
||||
SendWeaponAnim( g_fireAnims1[ RANDOM_LONG( 0, ARRAYSIZE( g_fireAnims1 ) - 1 ) ] );
|
||||
m_shakeTime = 0;
|
||||
|
||||
m_pPlayer->m_iWeaponVolume = EGON_PRIMARY_VOLUME;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.1f;
|
||||
pev->fuser1 = UTIL_WeaponTimeBase() + 2.0f;
|
||||
m_shootTime = UTIL_WeaponTimeBase() + 2.0f;
|
||||
|
||||
if( m_fireMode == FIRE_WIDE )
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_WEAPON, EGON_SOUND_STARTUP, 0.98f, ATTN_NORM, 0, 125 );
|
||||
}
|
||||
else
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_WEAPON, EGON_SOUND_STARTUP, 0.9f, ATTN_NORM, 0, 100 );
|
||||
}
|
||||
|
||||
pev->dmgtime = gpGlobals->time + GetPulseInterval();
|
||||
m_fireState = FIRE_CHARGE;
|
||||
|
@ -214,10 +225,17 @@ void CEgon::Attack( void )
|
|||
Fire( vecSrc, vecAiming );
|
||||
m_pPlayer->m_iWeaponVolume = EGON_PRIMARY_VOLUME;
|
||||
|
||||
if( pev->fuser1 <= UTIL_WeaponTimeBase() )
|
||||
if( m_shootTime != 0 && gpGlobals->time > m_shootTime )
|
||||
{
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usEgonFire, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 0, m_fireMode, 0, 0 );
|
||||
pev->fuser1 = 1000;
|
||||
if( m_fireMode == FIRE_WIDE )
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_STATIC, EGON_SOUND_RUN, 0.98f, ATTN_NORM, 0, 125 );
|
||||
}
|
||||
else
|
||||
{
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_STATIC, EGON_SOUND_RUN, 0.9f, ATTN_NORM, 0, 100 );
|
||||
}
|
||||
m_shootTime = 0;
|
||||
}
|
||||
|
||||
if( !HasAmmo() )
|
||||
|
@ -409,8 +427,8 @@ void CEgon::CreateEffect( void )
|
|||
m_pBeam->SetFlags( BEAM_FSINE );
|
||||
m_pBeam->SetEndAttachment( 1 );
|
||||
m_pBeam->pev->spawnflags |= SF_BEAM_TEMPORARY; // Flag these to be destroyed on save/restore or level transition
|
||||
m_pBeam->pev->flags |= FL_SKIPLOCALHOST;
|
||||
m_pBeam->pev->owner = m_pPlayer->edict();
|
||||
// m_pBeam->pev->flags |= FL_SKIPLOCALHOST;
|
||||
// m_pBeam->pev->owner = m_pPlayer->edict();
|
||||
|
||||
m_pNoise = CBeam::BeamCreate( EGON_BEAM_SPRITE, 55 );
|
||||
m_pNoise->PointEntInit( pev->origin, m_pPlayer->entindex() );
|
||||
|
@ -418,15 +436,15 @@ void CEgon::CreateEffect( void )
|
|||
m_pNoise->SetBrightness( 100 );
|
||||
m_pNoise->SetEndAttachment( 1 );
|
||||
m_pNoise->pev->spawnflags |= SF_BEAM_TEMPORARY;
|
||||
m_pNoise->pev->flags |= FL_SKIPLOCALHOST;
|
||||
m_pNoise->pev->owner = m_pPlayer->edict();
|
||||
// m_pNoise->pev->flags |= FL_SKIPLOCALHOST;
|
||||
// m_pNoise->pev->owner = m_pPlayer->edict();
|
||||
|
||||
m_pSprite = CSprite::SpriteCreate( EGON_FLARE_SPRITE, pev->origin, FALSE );
|
||||
m_pSprite->pev->scale = 1.0;
|
||||
m_pSprite->SetTransparency( kRenderGlow, 255, 255, 255, 255, kRenderFxNoDissipation );
|
||||
m_pSprite->pev->spawnflags |= SF_SPRITE_TEMPORARY;
|
||||
m_pSprite->pev->flags |= FL_SKIPLOCALHOST;
|
||||
m_pSprite->pev->owner = m_pPlayer->edict();
|
||||
// m_pSprite->pev->flags |= FL_SKIPLOCALHOST;
|
||||
// m_pSprite->pev->owner = m_pPlayer->edict();
|
||||
|
||||
if( m_fireMode == FIRE_WIDE )
|
||||
{
|
||||
|
@ -510,16 +528,11 @@ BOOL CEgon::CanHolster( void )
|
|||
|
||||
void CEgon::EndAttack( void )
|
||||
{
|
||||
bool bMakeNoise = false;
|
||||
|
||||
if( m_fireState != FIRE_OFF ) //Checking the button just in case!.
|
||||
bMakeNoise = true;
|
||||
|
||||
PLAYBACK_EVENT_FULL( FEV_GLOBAL | FEV_RELIABLE, m_pPlayer->edict(), m_usEgonStop, 0.0f, m_pPlayer->pev->origin, m_pPlayer->pev->angles, 0.0f, 0.0f, bMakeNoise, 0, 0, 0 );
|
||||
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 2.0f;
|
||||
m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
|
||||
STOP_SOUND( ENT( m_pPlayer->pev ), CHAN_STATIC, EGON_SOUND_RUN );
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_WEAPON, EGON_SOUND_OFF, 0.98, ATTN_NORM, 0, 100 );
|
||||
m_fireState = FIRE_OFF;
|
||||
|
||||
DestroyEffect();
|
||||
|
|
|
@ -51,7 +51,7 @@ const char *CBreakable::pSpawnObjects[] =
|
|||
"ammo_crossbow", // 11
|
||||
"weapon_357", // 12
|
||||
"ammo_357", // 13
|
||||
"weapon_rpg", // 14
|
||||
"weapon_sillyrocket", // 14
|
||||
"ammo_rpgclip", // 15
|
||||
"ammo_gaussclip", // 16
|
||||
"weapon_handgrenade", // 17
|
||||
|
|
|
@ -456,7 +456,7 @@ cvar_t sk_player_leg3 = { "sk_player_leg3","1" };
|
|||
// END Cvars for Skill Level settings
|
||||
|
||||
cvar_t sv_pushable_fixed_tick_fudge = { "sv_pushable_fixed_tick_fudge", "15" };
|
||||
// cvar_t sv_busters = { "sv_busters", "0" };
|
||||
cvar_t sv_busters = { "sv_busters", "0" };
|
||||
|
||||
// Register your console variables here
|
||||
// This gets called one time when the game is initialied
|
||||
|
@ -502,7 +502,7 @@ void GameDLLInit( void )
|
|||
CVAR_REGISTER( &multibyte_only );
|
||||
|
||||
CVAR_REGISTER( &mp_chattime );
|
||||
// CVAR_REGISTER( &sv_busters );
|
||||
CVAR_REGISTER( &sv_busters );
|
||||
|
||||
|
||||
// REGISTER CVARS FOR SKILL LEVEL STUFF
|
||||
|
|
|
@ -44,7 +44,7 @@ extern cvar_t defaultteam;
|
|||
extern cvar_t allowmonsters;
|
||||
extern cvar_t bhopcap;
|
||||
extern cvar_t sv_pushable_fixed_tick_fudge;
|
||||
// extern cvar_t sv_busters;
|
||||
extern cvar_t sv_busters;
|
||||
|
||||
// Engine Cvars
|
||||
extern cvar_t *g_psv_gravity;
|
||||
|
|
|
@ -162,7 +162,7 @@ public:
|
|||
|
||||
// Immediately end a multiplayer game
|
||||
virtual void EndMultiplayerGame( void ) {}
|
||||
// virtual BOOL IsBustingGame( void ){ return FALSE; };
|
||||
virtual BOOL IsBustingGame( void ){ return FALSE; };
|
||||
};
|
||||
|
||||
extern CGameRules *InstallGameRules( void );
|
||||
|
@ -362,7 +362,7 @@ protected:
|
|||
BOOL m_iEndIntermissionButtonHit;
|
||||
void SendMOTDToClient( edict_t *client );
|
||||
};
|
||||
/*
|
||||
|
||||
bool IsPlayerBusting( CBaseEntity *pPlayer );
|
||||
BOOL BustingCanHaveItem( CBasePlayer *pPlayer, CBaseEntity *pItem );
|
||||
|
||||
|
@ -387,6 +387,6 @@ public:
|
|||
protected:
|
||||
float m_flEgonBustingCheckTime;
|
||||
};
|
||||
*/
|
||||
|
||||
extern DLL_GLOBAL CGameRules *g_pGameRules;
|
||||
#endif // GAMERULES_H
|
||||
|
|
|
@ -132,12 +132,11 @@ BOOL CGauss::Deploy()
|
|||
|
||||
void CGauss::Holster( int skiplocal /* = 0 */ )
|
||||
{
|
||||
PLAYBACK_EVENT_FULL( FEV_RELIABLE | FEV_GLOBAL, m_pPlayer->edict(), m_usGaussFire, 0.01f, m_pPlayer->pev->origin, m_pPlayer->pev->angles, 0.0, 0.0, 0, 0, 0, 1 );
|
||||
|
||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
|
||||
SendWeaponAnim( GAUSS_HOLSTER );
|
||||
m_fInAttack = 0;
|
||||
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_WEAPON, "common/null.wav", 1.0, ATTN_NORM );
|
||||
}
|
||||
|
||||
void CGauss::PrimaryAttack()
|
||||
|
@ -146,7 +145,7 @@ void CGauss::PrimaryAttack()
|
|||
if( m_pPlayer->pev->waterlevel == 3 )
|
||||
{
|
||||
PlayEmptySound();
|
||||
m_flNextSecondaryAttack = m_flNextPrimaryAttack = GetNextAttackDelay( 0.15f );
|
||||
m_flNextSecondaryAttack = m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.15f;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -186,7 +185,7 @@ void CGauss::SecondaryAttack()
|
|||
PlayEmptySound();
|
||||
}
|
||||
|
||||
m_flNextSecondaryAttack = m_flNextPrimaryAttack = GetNextAttackDelay( 0.5f );
|
||||
m_flNextSecondaryAttack = m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -213,7 +212,7 @@ void CGauss::SecondaryAttack()
|
|||
m_pPlayer->m_flStartCharge = gpGlobals->time;
|
||||
m_pPlayer->m_flAmmoStartCharge = UTIL_WeaponTimeBase() + GetFullChargeTime();
|
||||
|
||||
PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussSpin, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 110, 0, 0, 0 );
|
||||
PLAYBACK_EVENT_FULL( 0, m_pPlayer->edict(), m_usGaussSpin, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 110, 0, 0, 0 );
|
||||
|
||||
m_iSoundState = SND_CHANGE_PITCH;
|
||||
}
|
||||
|
@ -276,7 +275,7 @@ void CGauss::SecondaryAttack()
|
|||
#if GAUSS_OVERCHARGE_FIX
|
||||
if (!overcharge)
|
||||
#endif
|
||||
PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussSpin, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, pitch, 0, ( m_iSoundState == SND_CHANGE_PITCH ) ? 1 : 0, 0 );
|
||||
PLAYBACK_EVENT_FULL( 0, m_pPlayer->edict(), m_usGaussSpin, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, pitch, 0, ( m_iSoundState == SND_CHANGE_PITCH ) ? 1 : 0, 0 );
|
||||
|
||||
m_iSoundState = SND_CHANGE_PITCH; // hack for going through level transitions
|
||||
|
||||
|
@ -287,7 +286,7 @@ void CGauss::SecondaryAttack()
|
|||
{
|
||||
// Player charged up too long. Zap him.
|
||||
#if GAUSS_OVERCHARGE_FIX
|
||||
PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussSpin, 0.0, g_vecZero, g_vecZero, 0.0, 0.0, pitch, 0, 0, 1 );
|
||||
PLAYBACK_EVENT_FULL( 0, m_pPlayer->edict(), m_usGaussSpin, 0.0, g_vecZero, g_vecZero, 0.0, 0.0, pitch, 0, 0, 1 );
|
||||
#endif
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_WEAPON, "weapons/electro4.wav", 1.0f, ATTN_NORM, 0, 80 + RANDOM_LONG( 0, 0x3f ) );
|
||||
EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/electro6.wav", 1.0f, ATTN_NORM, 0, 75 + RANDOM_LONG( 0, 0x3f ) );
|
||||
|
@ -389,13 +388,13 @@ void CGauss::Fire( Vector vecOrigSrc, Vector vecDir, float flDamage )
|
|||
g_irunninggausspred = true;
|
||||
#endif
|
||||
// The main firing event is sent unreliably so it won't be delayed.
|
||||
PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), m_usGaussFire, 0.0f, m_pPlayer->pev->origin, m_pPlayer->pev->angles, flDamage, 0.0, 0, 0, m_fPrimaryFire ? 1 : 0, 0 );
|
||||
PLAYBACK_EVENT_FULL( 0, m_pPlayer->edict(), m_usGaussFire, 0.0f, m_pPlayer->pev->origin, m_pPlayer->pev->angles, flDamage, 0.0, 0, 0, m_fPrimaryFire ? 1 : 0, 0 );
|
||||
|
||||
// This reliable event is used to stop the spinning sound
|
||||
// It's delayed by a fraction of second to make sure it is delayed by 1 frame on the client
|
||||
// It's sent reliably anyway, which could lead to other delays
|
||||
|
||||
PLAYBACK_EVENT_FULL( FEV_NOTHOST | FEV_RELIABLE | FEV_GLOBAL, m_pPlayer->edict(), m_usGaussFire, 0.01f, m_pPlayer->pev->origin, m_pPlayer->pev->angles, 0.0, 0.0, 0, 0, 0, 1 );
|
||||
PLAYBACK_EVENT_FULL( FEV_RELIABLE | FEV_GLOBAL, m_pPlayer->edict(), m_usGaussFire, 0.01f, m_pPlayer->pev->origin, m_pPlayer->pev->angles, 0.0, 0.0, 0, 0, 0, 1 );
|
||||
|
||||
/*ALERT( at_console, "%f %f %f\n%f %f %f\n",
|
||||
vecSrc.x, vecSrc.y, vecSrc.z,
|
||||
|
|
|
@ -101,14 +101,7 @@ int CGlock::AddToPlayer( CBasePlayer *pPlayer )
|
|||
|
||||
BOOL CGlock::Deploy()
|
||||
{
|
||||
BOOL bResult = DefaultDeploy( "models/v_9mmhandgun.mdl", "models/p_9mmhandgun.mdl", GLOCK_DRAW, "onehanded", /*UseDecrement() ? 1 : 0*/ 0 );
|
||||
|
||||
if( bResult )
|
||||
{
|
||||
m_fInAttack = 0;
|
||||
}
|
||||
|
||||
return bResult;
|
||||
return DefaultDeploy( "models/v_9mmhandgun.mdl", "models/p_9mmhandgun.mdl", GLOCK_DRAW, "onehanded", /*UseDecrement() ? 1 : 0*/ 0 );
|
||||
}
|
||||
|
||||
void CGlock::Holster( int skiplocal /*= 0*/ )
|
||||
|
@ -117,8 +110,6 @@ void CGlock::Holster( int skiplocal /*= 0*/ )
|
|||
|
||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
SendWeaponAnim( GLOCK_HOLSTER );
|
||||
|
||||
m_fInAttack = 0;
|
||||
}
|
||||
|
||||
void CGlock::SecondaryAttack( void )
|
||||
|
@ -135,10 +126,6 @@ void CGlock::PrimaryAttack( void )
|
|||
|
||||
void CGlock::GlockFire( float flSpread, float flCycleTime, BOOL fUseAutoAim )
|
||||
{
|
||||
// Do not allow attack unless primary attack key was released.
|
||||
if( m_fInAttack )
|
||||
return;
|
||||
|
||||
if( m_iClip <= 0 )
|
||||
{
|
||||
if( !m_fFireOnEmpty )
|
||||
|
@ -152,9 +139,6 @@ void CGlock::GlockFire( float flSpread, float flCycleTime, BOOL fUseAutoAim )
|
|||
return;
|
||||
}
|
||||
|
||||
// Prevent from continuously refire.
|
||||
m_fInAttack = 1;
|
||||
|
||||
m_iClip--;
|
||||
|
||||
m_pPlayer->pev->effects = (int)( m_pPlayer->pev->effects ) | EF_MUZZLEFLASH;
|
||||
|
@ -198,7 +182,7 @@ void CGlock::GlockFire( float flSpread, float flCycleTime, BOOL fUseAutoAim )
|
|||
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), fUseAutoAim ? m_usFireGlock1 : m_usFireGlock2, 0.0, g_vecZero, g_vecZero, vecDir.x, vecDir.y, 0, 0, ( m_iClip == 0 ) ? 1 : 0, 0 );
|
||||
|
||||
m_flNextPrimaryAttack = m_flNextSecondaryAttack = GetNextAttackDelay( flCycleTime );
|
||||
m_flNextPrimaryAttack = m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + flCycleTime;
|
||||
|
||||
if( !m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 )
|
||||
// HEV suit - indicate out of ammo condition
|
||||
|
@ -235,9 +219,6 @@ void CGlock::Reload( void )
|
|||
if( iResult )
|
||||
{
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
||||
|
||||
// Unblock primary attack.
|
||||
m_fInAttack = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -248,12 +229,6 @@ void CGlock::WeaponIdle( void )
|
|||
|
||||
m_pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES );
|
||||
|
||||
//
|
||||
// Unblock primary attack.
|
||||
// This will only occur if players released primary attack key.
|
||||
//
|
||||
m_fInAttack = 0;
|
||||
|
||||
if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
|
||||
return;
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ void CHandGrenade::WeaponIdle( void )
|
|||
m_flReleaseThrow = 0.0f;
|
||||
#endif
|
||||
m_flStartThrow = 0.0f;
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.5f );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5f;
|
||||
|
||||
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;
|
||||
|
@ -187,7 +187,7 @@ void CHandGrenade::WeaponIdle( void )
|
|||
// just threw last grenade
|
||||
// set attack times in the future, and weapon idle in the future so we can see the whole throw
|
||||
// animation, weapon idle will automatically retire the weapon for us.
|
||||
m_flTimeWeaponIdle = m_flNextSecondaryAttack = m_flNextPrimaryAttack = GetNextAttackDelay( 0.5f );// ensure that the animation can finish playing
|
||||
m_flTimeWeaponIdle = m_flNextSecondaryAttack = m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5f;// ensure that the animation can finish playing
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -95,9 +95,22 @@ void CHornet::Spawn( void )
|
|||
SetTouch( &CHornet::DieTouch );
|
||||
SetThink( &CHornet::StartTrack );
|
||||
|
||||
/*edict_t *pSoundEnt = pev->owner;
|
||||
edict_t *pSoundEnt = pev->owner;
|
||||
if( !pSoundEnt )
|
||||
pSoundEnt = edict();*/
|
||||
pSoundEnt = edict();
|
||||
|
||||
switch( RANDOM_LONG( 0, 2 ) )
|
||||
{
|
||||
case 0:
|
||||
EMIT_SOUND( pSoundEnt, CHAN_WEAPON, "agrunt/ag_fire1.wav", 1, ATTN_NORM );
|
||||
break;
|
||||
case 1:
|
||||
EMIT_SOUND( pSoundEnt, CHAN_WEAPON, "agrunt/ag_fire2.wav", 1, ATTN_NORM );
|
||||
break;
|
||||
case 2:
|
||||
EMIT_SOUND( pSoundEnt, CHAN_WEAPON, "agrunt/ag_fire3.wav", 1, ATTN_NORM );
|
||||
break;
|
||||
}
|
||||
|
||||
if( !FNullEnt( pev->owner ) && ( pev->owner->v.flags & FL_CLIENT ) )
|
||||
{
|
||||
|
|
|
@ -149,13 +149,7 @@ void CHgun::PrimaryAttack()
|
|||
m_pPlayer->m_iWeaponVolume = QUIET_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;
|
||||
|
||||
int flags;
|
||||
#if CLIENT_WEAPONS
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usHornetFire, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 0, 0, 0, 0 );
|
||||
SendWeaponAnim( HGUN_SHOOT );
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
@ -228,6 +222,10 @@ void CHgun::SecondaryAttack( void )
|
|||
|
||||
pHornet->SetThink( &CHornet::StartDart );
|
||||
|
||||
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;
|
||||
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;
|
||||
|
||||
float flRechargeTimePause = 0.5f;
|
||||
|
||||
if( g_pGameRules->IsMultiplayer() )
|
||||
|
@ -236,17 +234,7 @@ void CHgun::SecondaryAttack( void )
|
|||
m_flRechargeTime = gpGlobals->time + flRechargeTimePause;
|
||||
#endif
|
||||
|
||||
int flags;
|
||||
#if CLIENT_WEAPONS
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usHornetFire, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 0, 0, 0, 0 );
|
||||
|
||||
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;
|
||||
m_pPlayer->m_iWeaponVolume = NORMAL_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = DIM_GUN_FLASH;
|
||||
SendWeaponAnim( HGUN_SHOOT );
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
|
62
dlls/mp5.cpp
62
dlls/mp5.cpp
|
@ -104,10 +104,10 @@ void CMP5::Precache( void )
|
|||
int CMP5::GetItemInfo( ItemInfo *p )
|
||||
{
|
||||
p->pszName = STRING( pev->classname );
|
||||
p->pszAmmo1 = "ak47";
|
||||
p->pszAmmo1 = "akmm";
|
||||
p->iMaxAmmo1 = AK47_MAX_CARRY;
|
||||
p->pszAmmo2 = NULL;
|
||||
p->iMaxAmmo2 = -1;
|
||||
p->pszAmmo2 = "ARgrenades";
|
||||
p->iMaxAmmo2 = M203_GRENADE_MAX_CARRY;
|
||||
p->iMaxClip = MP5_MAX_CLIP;
|
||||
p->iSlot = 0;
|
||||
p->iPosition = 5;
|
||||
|
@ -267,7 +267,7 @@ class CMP5AmmoClip : public CBasePlayerAmmo
|
|||
}
|
||||
BOOL AddAmmo( CBaseEntity *pOther )
|
||||
{
|
||||
int bResult = ( pOther->GiveAmmo( AMMO_MP5CLIP_GIVE, "ak47", AK47_MAX_CARRY ) != -1 );
|
||||
int bResult = ( pOther->GiveAmmo( AMMO_MP5CLIP_GIVE, "akmm", AK47_MAX_CARRY ) != -1 );
|
||||
if( bResult )
|
||||
{
|
||||
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
||||
|
@ -278,3 +278,57 @@ class CMP5AmmoClip : public CBasePlayerAmmo
|
|||
|
||||
LINK_ENTITY_TO_CLASS( ammo_mp5clip, CMP5AmmoClip )
|
||||
LINK_ENTITY_TO_CLASS( ammo_9mmAR, CMP5AmmoClip )
|
||||
|
||||
class CMP5Chainammo : public CBasePlayerAmmo
|
||||
{
|
||||
void Spawn( void )
|
||||
{
|
||||
Precache();
|
||||
SET_MODEL( ENT( pev ), "models/w_chainammo.mdl" );
|
||||
CBasePlayerAmmo::Spawn();
|
||||
}
|
||||
void Precache( void )
|
||||
{
|
||||
PRECACHE_MODEL( "models/w_chainammo.mdl" );
|
||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||
}
|
||||
BOOL AddAmmo( CBaseEntity *pOther )
|
||||
{
|
||||
int bResult = ( pOther->GiveAmmo( AMMO_CHAINBOX_GIVE, "akmm", _9MM_MAX_CARRY ) != -1 );
|
||||
if( bResult )
|
||||
{
|
||||
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
||||
}
|
||||
return bResult;
|
||||
}
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( ammo_9mmbox, CMP5Chainammo )
|
||||
|
||||
class CMP5AmmoGrenade : public CBasePlayerAmmo
|
||||
{
|
||||
void Spawn( void )
|
||||
{
|
||||
Precache();
|
||||
SET_MODEL( ENT( pev ), "models/w_ARgrenade.mdl" );
|
||||
CBasePlayerAmmo::Spawn();
|
||||
}
|
||||
void Precache( void )
|
||||
{
|
||||
PRECACHE_MODEL( "models/w_ARgrenade.mdl" );
|
||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||
}
|
||||
BOOL AddAmmo( CBaseEntity *pOther )
|
||||
{
|
||||
int bResult = ( pOther->GiveAmmo( AMMO_M203BOX_GIVE, "ARgrenades", M203_GRENADE_MAX_CARRY ) != -1 );
|
||||
|
||||
if( bResult )
|
||||
{
|
||||
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
||||
}
|
||||
return bResult;
|
||||
}
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( ammo_mp5grenades, CMP5AmmoGrenade )
|
||||
LINK_ENTITY_TO_CLASS( ammo_ARgrenades, CMP5AmmoGrenade )
|
||||
|
|
|
@ -1664,7 +1664,7 @@ void CHalfLifeMultiplay::SendMOTDToClient( edict_t *client )
|
|||
|
||||
FREE_FILE( (void*)aFileList );
|
||||
}
|
||||
/*
|
||||
|
||||
int CMultiplayBusters::WeaponShouldRespawn( CBasePlayerItem *pWeapon )
|
||||
{
|
||||
if( pWeapon->m_iId == WEAPON_EGON )
|
||||
|
@ -1878,5 +1878,5 @@ void CMultiplayBusters::PlayerGotWeapon( CBasePlayer *pPlayer, CBasePlayerItem *
|
|||
pPlayer->pev->renderfx = kRenderFxGlowShell;
|
||||
pPlayer->pev->renderamt = 25;
|
||||
pPlayer->pev->rendercolor = Vector( 0, 75, 250 );
|
||||
pPlayer->m_rgAmmo[pWeapon->PrimaryAmmoIndex()] = pPlayer->ammo_uranium = 100;
|
||||
}*/
|
||||
pPlayer->m_rgAmmo[pWeapon->PrimaryAmmoIndex()] = 100;
|
||||
}
|
||||
|
|
|
@ -769,7 +769,7 @@ void CBasePlayer::PackDeadPlayerItems( void )
|
|||
iPA = 0;
|
||||
iPW = 0;
|
||||
|
||||
/*if( g_pGameRules->IsBustingGame())
|
||||
if( g_pGameRules->IsBustingGame())
|
||||
{
|
||||
while( rgpPackWeapons[iPW] )
|
||||
{
|
||||
|
@ -787,7 +787,7 @@ void CBasePlayer::PackDeadPlayerItems( void )
|
|||
iPW++;
|
||||
}
|
||||
}
|
||||
else*/
|
||||
else
|
||||
{
|
||||
// pack the ammo
|
||||
while( iPackAmmo[iPA] != -1 )
|
||||
|
@ -3526,8 +3526,25 @@ void CBasePlayer::CheatImpulseCommands( int iImpulse )
|
|||
gEvilImpulse101 = FALSE;
|
||||
break;
|
||||
case 102:
|
||||
// Gibbage!!!
|
||||
CGib::SpawnRandomGibs( pev, 1, 1 );
|
||||
gEvilImpulse101 = TRUE;
|
||||
|
||||
GiveNamedItem( "item_suit" );
|
||||
GiveNamedItem( "weapon_handgrenade" );
|
||||
GiveNamedItem( "weapon_tripmine" );
|
||||
GiveNamedItem( "weapon_357" );
|
||||
GiveNamedItem( "ammo_357" );
|
||||
GiveNamedItem( "weapon_crossbow" );
|
||||
GiveNamedItem( "ammo_crossbow" );
|
||||
GiveNamedItem( "weapon_egon" );
|
||||
GiveNamedItem( "weapon_gauss" );
|
||||
GiveNamedItem( "ammo_gaussclip" );
|
||||
GiveNamedItem( "weapon_sillyrocket" );
|
||||
GiveNamedItem( "ammo_rpgclip" );
|
||||
GiveNamedItem( "weapon_satchel" );
|
||||
GiveNamedItem( "weapon_snark" );
|
||||
GiveNamedItem( "weapon_hornetgun" );
|
||||
|
||||
gEvilImpulse101 = FALSE;
|
||||
break;
|
||||
case 103:
|
||||
// What the hell are you doing?
|
||||
|
|
|
@ -75,6 +75,8 @@ void CPython::Spawn()
|
|||
|
||||
m_iDefaultAmmo = PYTHON_DEFAULT_GIVE;
|
||||
|
||||
m_flSoundDelay = 0;
|
||||
|
||||
FallInit();// get ready to fall down.
|
||||
}
|
||||
|
||||
|
@ -206,7 +208,7 @@ void CPython::PrimaryAttack()
|
|||
// HEV suit - indicate out of ammo condition
|
||||
m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 );
|
||||
|
||||
m_flNextPrimaryAttack = 0.75f;
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.75f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10.0f, 15.0f );
|
||||
}
|
||||
|
||||
|
@ -229,7 +231,7 @@ void CPython::Reload( void )
|
|||
#endif
|
||||
if( DefaultReload( PYTHON_MAX_CLIP, PYTHON_RELOAD, 2.0f, bUseScope ) )
|
||||
{
|
||||
m_flSoundDelay = 1.5f;
|
||||
m_flSoundDelay = UTIL_WeaponTimeBase() + 1.5f;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
340
dlls/rpg.cpp
340
dlls/rpg.cpp
|
@ -23,6 +23,22 @@
|
|||
#include "player.h"
|
||||
#include "gamerules.h"
|
||||
|
||||
enum rpg_e
|
||||
{
|
||||
RPG_IDLE = 0,
|
||||
RPG_FIDGET,
|
||||
RPG_RELOAD, // to reload
|
||||
RPG_FIRE2, // to empty
|
||||
RPG_HOLSTER1, // loaded
|
||||
RPG_DRAW1, // loaded
|
||||
RPG_HOLSTER2, // unloaded
|
||||
RPG_DRAW_UL, // unloaded
|
||||
RPG_IDLE_UL, // unloaded idle
|
||||
RPG_FIDGET_UL // unloaded fidget
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( weapon_sillyrocket, CRpg )
|
||||
|
||||
#if !CLIENT_DLL
|
||||
|
||||
LINK_ENTITY_TO_CLASS( laser_spot, CLaserSpot )
|
||||
|
@ -288,4 +304,328 @@ void CRpgRocket::FollowThink( void )
|
|||
pev->nextthink = gpGlobals->time + 0.1f;
|
||||
}
|
||||
#endif
|
||||
|
||||
void CRpg::Reload( void )
|
||||
{
|
||||
int iResult = 0;
|
||||
|
||||
// don't bother with any of this if don't need to reload.
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == RPG_MAX_CLIP )
|
||||
return;
|
||||
|
||||
// because the RPG waits to autoreload when no missiles are active while the LTD is on, the
|
||||
// weapons code is constantly calling into this function, but is often denied because
|
||||
// a) missiles are in flight, but the LTD is on
|
||||
// or
|
||||
// b) player is totally out of ammo and has nothing to switch to, and should be allowed to
|
||||
// shine the designator around
|
||||
//
|
||||
// Set the next attack time into the future so that WeaponIdle will get called more often
|
||||
// than reload, allowing the RPG LTD to be updated
|
||||
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
|
||||
if( m_cActiveRockets && m_fSpotActive )
|
||||
{
|
||||
// no reloading when there are active missiles tracking the designator.
|
||||
// ward off future autoreload attempts by setting next attack time into the future for a bit.
|
||||
return;
|
||||
}
|
||||
|
||||
#if !CLIENT_DLL
|
||||
if( m_pSpot && m_fSpotActive )
|
||||
{
|
||||
m_pSpot->Suspend( 2.1f );
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 2.1f;
|
||||
}
|
||||
#endif
|
||||
|
||||
if( m_iClip == 0 )
|
||||
iResult = DefaultReload( RPG_MAX_CLIP, RPG_RELOAD, 2 );
|
||||
|
||||
if( iResult )
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
||||
}
|
||||
|
||||
void CRpg::Spawn()
|
||||
{
|
||||
Precache();
|
||||
m_iId = WEAPON_RPG;
|
||||
|
||||
SET_MODEL( ENT( pev ), "models/w_rpg.mdl" );
|
||||
m_fSpotActive = 1;
|
||||
|
||||
#if CLIENT_DLL
|
||||
if( bIsMultiplayer() )
|
||||
#else
|
||||
if( g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
{
|
||||
// more default ammo in multiplay.
|
||||
m_iDefaultAmmo = RPG_DEFAULT_GIVE * 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_iDefaultAmmo = RPG_DEFAULT_GIVE;
|
||||
}
|
||||
|
||||
FallInit();// get ready to fall down.
|
||||
}
|
||||
|
||||
void CRpg::Precache( void )
|
||||
{
|
||||
PRECACHE_MODEL( "models/w_rpg.mdl" );
|
||||
PRECACHE_MODEL( "models/v_rpg.mdl" );
|
||||
PRECACHE_MODEL( "models/p_rpg.mdl" );
|
||||
|
||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||
|
||||
UTIL_PrecacheOther( "laser_spot" );
|
||||
UTIL_PrecacheOther( "rpg_rocket" );
|
||||
|
||||
PRECACHE_SOUND( "weapons/rocketfire1.wav" );
|
||||
PRECACHE_SOUND( "weapons/glauncher.wav" ); // alternative fire sound
|
||||
|
||||
// m_usRpg = PRECACHE_EVENT( 1, "events/rpg.sc" );
|
||||
}
|
||||
|
||||
int CRpg::GetItemInfo( ItemInfo *p )
|
||||
{
|
||||
p->pszName = STRING( pev->classname );
|
||||
p->pszAmmo1 = "rockets";
|
||||
p->iMaxAmmo1 = ROCKET_MAX_CARRY;
|
||||
p->pszAmmo2 = NULL;
|
||||
p->iMaxAmmo2 = -1;
|
||||
p->iMaxClip = RPG_MAX_CLIP;
|
||||
p->iSlot = 3;
|
||||
p->iPosition = 0;
|
||||
p->iId = m_iId = WEAPON_RPG;
|
||||
p->iFlags = ITEM_FLAG_NOCHOICE;
|
||||
p->iWeight = RPG_WEIGHT;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int CRpg::AddToPlayer( CBasePlayer *pPlayer )
|
||||
{
|
||||
if( CBasePlayerWeapon::AddToPlayer( pPlayer ) )
|
||||
{
|
||||
MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev );
|
||||
WRITE_BYTE( m_iId );
|
||||
MESSAGE_END();
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CRpg::Deploy()
|
||||
{
|
||||
if( m_iClip == 0 )
|
||||
{
|
||||
return DefaultDeploy( "models/v_rpg.mdl", "models/p_rpg.mdl", RPG_DRAW_UL, "rpg" );
|
||||
}
|
||||
|
||||
return DefaultDeploy( "models/v_rpg.mdl", "models/p_rpg.mdl", RPG_DRAW1, "rpg" );
|
||||
}
|
||||
|
||||
BOOL CRpg::CanHolster( void )
|
||||
{
|
||||
if( m_fSpotActive && m_cActiveRockets )
|
||||
{
|
||||
// can't put away while guiding a missile.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void CRpg::Holster( int skiplocal /* = 0 */ )
|
||||
{
|
||||
m_fInReload = FALSE;// cancel any reload in progress.
|
||||
|
||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
|
||||
SendWeaponAnim( RPG_HOLSTER1 );
|
||||
|
||||
#if !CLIENT_DLL
|
||||
if( m_pSpot )
|
||||
{
|
||||
m_pSpot->Killed( NULL, GIB_NEVER );
|
||||
m_pSpot = NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void CRpg::PrimaryAttack()
|
||||
{
|
||||
if( m_iClip )
|
||||
{
|
||||
m_pPlayer->m_iWeaponVolume = LOUD_GUN_VOLUME;
|
||||
m_pPlayer->m_iWeaponFlash = BRIGHT_GUN_FLASH;
|
||||
|
||||
#if !CLIENT_DLL
|
||||
SendWeaponAnim( RPG_FIRE2 );
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
||||
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
|
||||
Vector vecSrc = m_pPlayer->GetGunPosition() + gpGlobals->v_forward * 16.0f + gpGlobals->v_right * 8.0f + gpGlobals->v_up * -8.0f;
|
||||
|
||||
CRpgRocket *pRocket = CRpgRocket::CreateRpgRocket( vecSrc, m_pPlayer->pev->v_angle, m_pPlayer, this );
|
||||
|
||||
UTIL_MakeVectors( m_pPlayer->pev->v_angle );// RpgRocket::Create stomps on globals, so remake.
|
||||
pRocket->pev->velocity = pRocket->pev->velocity + gpGlobals->v_forward * DotProduct( m_pPlayer->pev->velocity, gpGlobals->v_forward );
|
||||
#endif
|
||||
|
||||
// firing RPG no longer turns on the designator. ALT fire is a toggle switch for the LTD.
|
||||
// Ken signed up for this as a global change (sjb)
|
||||
|
||||
int flags;
|
||||
#if CLIENT_WEAPONS
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_WEAPON, "weapons/rocketfire1.wav", 0.9, ATTN_NORM );
|
||||
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/glauncher.wav", 0.7, ATTN_NORM );
|
||||
|
||||
m_iClip--;
|
||||
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1.5f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.5f;
|
||||
m_pPlayer->pev->punchangle.x -= 5;
|
||||
|
||||
ResetEmptySound();
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayEmptySound();
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.2f;
|
||||
}
|
||||
UpdateSpot();
|
||||
}
|
||||
|
||||
void CRpg::SecondaryAttack()
|
||||
{
|
||||
m_fSpotActive = !m_fSpotActive;
|
||||
|
||||
#if !CLIENT_DLL
|
||||
if( !m_fSpotActive && m_pSpot )
|
||||
{
|
||||
m_pSpot->Killed( NULL, GIB_NORMAL );
|
||||
m_pSpot = NULL;
|
||||
}
|
||||
#endif
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.2f;
|
||||
}
|
||||
|
||||
void CRpg::WeaponIdle( void )
|
||||
{
|
||||
UpdateSpot();
|
||||
|
||||
if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
|
||||
return;
|
||||
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] )
|
||||
{
|
||||
ResetEmptySound();
|
||||
|
||||
int iAnim;
|
||||
float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0.0f, 1.0f );
|
||||
if( flRand <= 0.75f || m_fSpotActive )
|
||||
{
|
||||
if( m_iClip == 0 )
|
||||
iAnim = RPG_IDLE_UL;
|
||||
else
|
||||
iAnim = RPG_IDLE;
|
||||
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 90.0f / 15.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( m_iClip == 0 )
|
||||
iAnim = RPG_FIDGET_UL;
|
||||
else
|
||||
iAnim = RPG_FIDGET;
|
||||
#if WEAPONS_ANIMATION_TIMES_FIX
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 6.1f;
|
||||
#else
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 3.0f;
|
||||
#endif
|
||||
}
|
||||
|
||||
SendWeaponAnim( iAnim );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void CRpg::UpdateSpot( void )
|
||||
{
|
||||
#if !CLIENT_DLL
|
||||
if( m_fSpotActive )
|
||||
{
|
||||
if (m_pPlayer->pev->viewmodel == 0)
|
||||
return;
|
||||
|
||||
if( !m_pSpot )
|
||||
{
|
||||
m_pSpot = CLaserSpot::CreateSpot();
|
||||
}
|
||||
|
||||
UTIL_MakeVectors( m_pPlayer->pev->v_angle );
|
||||
Vector vecSrc = m_pPlayer->GetGunPosition();
|
||||
Vector vecAiming = gpGlobals->v_forward;
|
||||
|
||||
TraceResult tr;
|
||||
UTIL_TraceLine( vecSrc, vecSrc + vecAiming * 8192.0f, dont_ignore_monsters, ENT( m_pPlayer->pev ), &tr );
|
||||
|
||||
UTIL_SetOrigin( m_pSpot->pev, tr.vecEndPos );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
class CRpgAmmo : public CBasePlayerAmmo
|
||||
{
|
||||
void Spawn( void )
|
||||
{
|
||||
Precache();
|
||||
SET_MODEL( ENT( pev ), "models/w_rpgammo.mdl" );
|
||||
CBasePlayerAmmo::Spawn();
|
||||
}
|
||||
void Precache( void )
|
||||
{
|
||||
PRECACHE_MODEL( "models/w_rpgammo.mdl" );
|
||||
PRECACHE_SOUND( "items/9mmclip1.wav" );
|
||||
}
|
||||
BOOL AddAmmo( CBaseEntity *pOther )
|
||||
{
|
||||
int iGive;
|
||||
#if CLIENT_DLL
|
||||
if( bIsMultiplayer() )
|
||||
#else
|
||||
if( g_pGameRules->IsMultiplayer() )
|
||||
#endif
|
||||
{
|
||||
// hand out more ammo per rocket in multiplayer.
|
||||
iGive = AMMO_RPGCLIP_GIVE * 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
iGive = AMMO_RPGCLIP_GIVE;
|
||||
}
|
||||
|
||||
if( pOther->GiveAmmo( iGive, "rockets", ROCKET_MAX_CARRY ) != -1 )
|
||||
{
|
||||
EMIT_SOUND( ENT( pev ), CHAN_ITEM, "items/9mmclip1.wav", 1, ATTN_NORM );
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
};
|
||||
|
||||
LINK_ENTITY_TO_CLASS( ammo_rpgclip, CRpgAmmo )
|
||||
#endif
|
||||
|
|
|
@ -377,7 +377,7 @@ void CSatchel::PrimaryAttack( void )
|
|||
}
|
||||
|
||||
m_chargeReady = SATCHEL_RELOAD;
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.5f );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5f;
|
||||
break;
|
||||
|
@ -426,7 +426,7 @@ void CSatchel::SecondaryAttack( void )
|
|||
}
|
||||
|
||||
m_chargeReady = SATCHEL_RELOAD;
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.5f );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5f;
|
||||
break;
|
||||
|
@ -466,7 +466,7 @@ void CSatchel::Throw( void )
|
|||
|
||||
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;
|
||||
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 1.0f );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1.0f;
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
}
|
||||
}
|
||||
|
@ -507,7 +507,7 @@ void CSatchel::WeaponIdle( void )
|
|||
// use tripmine animations
|
||||
strcpy( m_pPlayer->m_szAnimExtention, "trip" );
|
||||
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.5f );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
m_chargeReady = SATCHEL_IDLE;
|
||||
break;
|
||||
|
|
|
@ -434,7 +434,7 @@ void CSqueak::Precache( void )
|
|||
PRECACHE_SOUND( "squeek/sqk_hunt3.wav" );
|
||||
UTIL_PrecacheOther( "monster_snark" );
|
||||
|
||||
m_usSnarkFire = PRECACHE_EVENT( 1, "events/snarkfire.sc" );
|
||||
//m_usSnarkFire = PRECACHE_EVENT( 1, "events/snarkfire.sc" );
|
||||
}
|
||||
|
||||
int CSqueak::GetItemInfo( ItemInfo *p )
|
||||
|
@ -525,16 +525,10 @@ void CSqueak::PrimaryAttack()
|
|||
// find place to toss monster
|
||||
UTIL_TraceLine( trace_origin + forward * 24.0f, trace_origin + gpGlobals->v_forward * 60.0f, dont_ignore_monsters, NULL, &tr );
|
||||
|
||||
int flags;
|
||||
#if CLIENT_WEAPONS
|
||||
flags = FEV_NOTHOST;
|
||||
#else
|
||||
flags = 0;
|
||||
#endif
|
||||
PLAYBACK_EVENT_FULL( flags, m_pPlayer->edict(), m_usSnarkFire, 0.0f, g_vecZero, g_vecZero, 0.0f, 0.0f, 0, 0, 0, 0 );
|
||||
|
||||
if( tr.fAllSolid == 0 && tr.fStartSolid == 0 && tr.flFraction > 0 )
|
||||
{
|
||||
SendWeaponAnim( SQUEAK_THROW );
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
#if !CLIENT_DLL
|
||||
|
@ -555,7 +549,7 @@ void CSqueak::PrimaryAttack()
|
|||
|
||||
m_fJustThrown = 1;
|
||||
|
||||
m_flNextPrimaryAttack = GetNextAttackDelay( 0.3f );
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.3f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0f;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -367,3 +367,167 @@ void CTripmineGrenade::DelayDeathThink( void )
|
|||
}
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS( weapon_tripmine, CTripmine )
|
||||
|
||||
void CTripmine::Spawn()
|
||||
{
|
||||
Precache();
|
||||
m_iId = WEAPON_TRIPMINE;
|
||||
SET_MODEL( ENT( pev ), "models/v_tripmine.mdl" );
|
||||
pev->frame = 0;
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
pev->body = 0;
|
||||
#else
|
||||
pev->body = 3;
|
||||
#endif
|
||||
pev->sequence = TRIPMINE_GROUND;
|
||||
// ResetSequenceInfo();
|
||||
pev->framerate = 0;
|
||||
|
||||
FallInit();// get ready to fall down
|
||||
|
||||
m_iDefaultAmmo = TRIPMINE_DEFAULT_GIVE;
|
||||
|
||||
#if CLIENT_DLL
|
||||
if( !bIsMultiplayer() )
|
||||
#else
|
||||
if( !g_pGameRules->IsDeathmatch() )
|
||||
#endif
|
||||
{
|
||||
UTIL_SetSize( pev, Vector( -16.0f, -16.0f, 0.0f ), Vector( 16.0f, 16.0f, 28.0f ) );
|
||||
}
|
||||
}
|
||||
|
||||
void CTripmine::Precache( void )
|
||||
{
|
||||
PRECACHE_MODEL( "models/v_tripmine.mdl" );
|
||||
PRECACHE_MODEL( "models/p_tripmine.mdl" );
|
||||
UTIL_PrecacheOther( "monster_tripmine" );
|
||||
|
||||
//m_usTripFire = PRECACHE_EVENT( 1, "events/tripfire.sc" );
|
||||
}
|
||||
|
||||
int CTripmine::GetItemInfo( ItemInfo *p )
|
||||
{
|
||||
p->pszName = STRING( pev->classname );
|
||||
p->pszAmmo1 = "Trip Mine";
|
||||
p->iMaxAmmo1 = TRIPMINE_MAX_CARRY;
|
||||
p->pszAmmo2 = NULL;
|
||||
p->iMaxAmmo2 = -1;
|
||||
p->iMaxClip = WEAPON_NOCLIP;
|
||||
p->iSlot = 4;
|
||||
p->iPosition = 2;
|
||||
p->iId = m_iId = WEAPON_TRIPMINE;
|
||||
p->iWeight = TRIPMINE_WEIGHT;
|
||||
p->iFlags = ITEM_FLAG_LIMITINWORLD | ITEM_FLAG_EXHAUSTIBLE;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
BOOL CTripmine::Deploy()
|
||||
{
|
||||
pev->body = 0;
|
||||
return DefaultDeploy( "models/v_tripmine.mdl", "models/p_tripmine.mdl", TRIPMINE_DRAW, "trip" );
|
||||
}
|
||||
|
||||
void CTripmine::Holster( int skiplocal /* = 0 */ )
|
||||
{
|
||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
|
||||
if( !m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] )
|
||||
{
|
||||
// out of mines
|
||||
m_pPlayer->pev->weapons &= ~( 1 << WEAPON_TRIPMINE );
|
||||
DestroyItem();
|
||||
}
|
||||
|
||||
SendWeaponAnim( TRIPMINE_HOLSTER );
|
||||
EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_WEAPON, "common/null.wav", 1.0f, ATTN_NORM );
|
||||
}
|
||||
|
||||
void CTripmine::PrimaryAttack( void )
|
||||
{
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 )
|
||||
return;
|
||||
|
||||
UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle );
|
||||
Vector vecSrc = m_pPlayer->GetGunPosition();
|
||||
Vector vecAiming = gpGlobals->v_forward;
|
||||
|
||||
TraceResult tr;
|
||||
|
||||
UTIL_TraceLine( vecSrc, vecSrc + vecAiming * 128.0f, dont_ignore_monsters, ENT( m_pPlayer->pev ), &tr );
|
||||
|
||||
if( tr.flFraction < 1.0f )
|
||||
{
|
||||
CBaseEntity *pEntity = CBaseEntity::Instance( tr.pHit );
|
||||
if( pEntity && !( pEntity->pev->flags & FL_CONVEYOR ) )
|
||||
{
|
||||
Vector angles = UTIL_VecToAngles( tr.vecPlaneNormal );
|
||||
|
||||
CBaseEntity::Create( "monster_tripmine", tr.vecEndPos + tr.vecPlaneNormal * 8.0f, angles, m_pPlayer->edict() );
|
||||
|
||||
m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType]--;
|
||||
|
||||
// player "shoot" animation
|
||||
m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
|
||||
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 )
|
||||
{
|
||||
// no more mines!
|
||||
RetireWeapon();
|
||||
return;
|
||||
}
|
||||
}
|
||||
/*else
|
||||
{
|
||||
// ALERT( at_console, "no deploy\n" );
|
||||
}*/
|
||||
}
|
||||
/*else
|
||||
{
|
||||
|
||||
}*/
|
||||
|
||||
m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 0.3f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
|
||||
}
|
||||
|
||||
void CTripmine::WeaponIdle( void )
|
||||
{
|
||||
pev->body = 0;
|
||||
|
||||
if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() )
|
||||
return;
|
||||
|
||||
if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] > 0 )
|
||||
{
|
||||
SendWeaponAnim( TRIPMINE_DRAW );
|
||||
}
|
||||
else
|
||||
{
|
||||
RetireWeapon();
|
||||
return;
|
||||
}
|
||||
|
||||
int iAnim;
|
||||
float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 0, 1 );
|
||||
if( flRand <= 0.25f )
|
||||
{
|
||||
iAnim = TRIPMINE_IDLE1;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 90.0f / 30.0f;
|
||||
}
|
||||
else if( flRand <= 0.75f )
|
||||
{
|
||||
iAnim = TRIPMINE_IDLE2;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 60.0f / 30.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
iAnim = TRIPMINE_FIDGET;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 100.0f / 30.0f;
|
||||
}
|
||||
|
||||
SendWeaponAnim( iAnim );
|
||||
}
|
||||
|
|
|
@ -319,16 +319,16 @@ void W_Precache( void )
|
|||
UTIL_PrecacheOther( "item_security" );
|
||||
UTIL_PrecacheOther( "item_longjump" );
|
||||
|
||||
// holster
|
||||
UTIL_PrecacheOtherWeapon("weapon_holster");
|
||||
|
||||
// torch
|
||||
UTIL_PrecacheOtherWeapon("weapon_torch");
|
||||
|
||||
// shotgun
|
||||
UTIL_PrecacheOtherWeapon( "weapon_shotgun" );
|
||||
UTIL_PrecacheOther( "ammo_buckshot" );
|
||||
|
||||
// holster
|
||||
UTIL_PrecacheOtherWeapon( "weapon_holster" );
|
||||
|
||||
// torch
|
||||
UTIL_PrecacheOtherWeapon( "weapon_torch" );
|
||||
|
||||
// crowbar
|
||||
UTIL_PrecacheOtherWeapon( "weapon_crowbar" );
|
||||
|
||||
|
@ -339,8 +339,50 @@ void W_Precache( void )
|
|||
// mp5
|
||||
UTIL_PrecacheOtherWeapon( "weapon_9mmAR" );
|
||||
UTIL_PrecacheOther( "ammo_9mmAR" );
|
||||
UTIL_PrecacheOther( "ammo_ARgrenades" );
|
||||
|
||||
// 9mm ammo box
|
||||
UTIL_PrecacheOther( "ammo_9mmbox" );
|
||||
|
||||
#if !OEM_BUILD && !HLDEMO_BUILD
|
||||
// python
|
||||
UTIL_PrecacheOtherWeapon( "weapon_357" );
|
||||
UTIL_PrecacheOther( "ammo_357" );
|
||||
|
||||
// gauss
|
||||
UTIL_PrecacheOtherWeapon( "weapon_gauss" );
|
||||
UTIL_PrecacheOther( "ammo_gaussclip" );
|
||||
|
||||
// rpg
|
||||
UTIL_PrecacheOtherWeapon( "weapon_sillyrocket" );
|
||||
UTIL_PrecacheOther( "ammo_rpgclip" );
|
||||
|
||||
// crossbow
|
||||
UTIL_PrecacheOtherWeapon( "weapon_crossbow" );
|
||||
UTIL_PrecacheOther( "ammo_crossbow" );
|
||||
|
||||
// egon
|
||||
UTIL_PrecacheOtherWeapon( "weapon_egon" );
|
||||
#endif
|
||||
|
||||
// tripmine
|
||||
UTIL_PrecacheOtherWeapon( "weapon_tripmine" );
|
||||
|
||||
#if !OEM_BUILD && !HLDEMO_BUILD
|
||||
// satchel charge
|
||||
UTIL_PrecacheOtherWeapon( "weapon_satchel" );
|
||||
#endif
|
||||
|
||||
// hand grenade
|
||||
UTIL_PrecacheOtherWeapon( "weapon_handgrenade" );
|
||||
|
||||
#if !OEM_BUILD && !HLDEMO_BUILD
|
||||
// squeak grenade
|
||||
UTIL_PrecacheOtherWeapon( "weapon_snark" );
|
||||
|
||||
// hornetgun
|
||||
UTIL_PrecacheOtherWeapon( "weapon_hornetgun" );
|
||||
|
||||
if( g_pGameRules->IsDeathmatch() )
|
||||
{
|
||||
UTIL_PrecacheOther( "weaponbox" );// container for dropped deathmatch weapons
|
||||
|
@ -464,14 +506,14 @@ void CBasePlayerItem::FallThink( void )
|
|||
SetThink( NULL );
|
||||
}
|
||||
|
||||
/*if( g_pGameRules->IsBustingGame())
|
||||
if( g_pGameRules->IsBustingGame())
|
||||
{
|
||||
if( !FNullEnt( pev->owner ))
|
||||
return;
|
||||
|
||||
if( FClassnameIs( pev, "weapon_egon" ))
|
||||
UTIL_Remove( this );
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
//=========================================================
|
||||
|
@ -634,7 +676,7 @@ void CBasePlayerWeapon::ItemPostFrame( void )
|
|||
|
||||
if( !( m_pPlayer->pev->button & IN_ATTACK ) )
|
||||
{
|
||||
m_flLastFireTime = 0.0f;
|
||||
// m_flLastFireTime = 0.0f;
|
||||
}
|
||||
|
||||
if( ( m_pPlayer->pev->button & IN_ATTACK2 ) && CanAttack( m_flNextSecondaryAttack, gpGlobals->time, UseDecrement() ) )
|
||||
|
@ -987,7 +1029,7 @@ BOOL CBasePlayerWeapon::DefaultDeploy( const char *szViewModel, const char *szWe
|
|||
|
||||
m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.5f;
|
||||
m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.0f;
|
||||
m_flLastFireTime = 0.0f;
|
||||
// m_flLastFireTime = 0.0f;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -1090,7 +1132,7 @@ void CBasePlayerAmmo::Materialize( void )
|
|||
|
||||
void CBasePlayerAmmo::DefaultTouch( CBaseEntity *pOther )
|
||||
{
|
||||
if( !pOther->IsPlayer() /*|| IsPlayerBusting( pOther )*/)
|
||||
if( !pOther->IsPlayer() || IsPlayerBusting( pOther ))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -1187,7 +1229,7 @@ void CBasePlayerWeapon::RetireWeapon( void )
|
|||
}
|
||||
}
|
||||
|
||||
float CBasePlayerWeapon::GetNextAttackDelay( float delay )
|
||||
/*float CBasePlayerWeapon::GetNextAttackDelay( float delay )
|
||||
{
|
||||
if( m_flLastFireTime == 0 || m_flNextPrimaryAttack == -1.0f )
|
||||
{
|
||||
|
@ -1214,7 +1256,7 @@ float CBasePlayerWeapon::GetNextAttackDelay( float delay )
|
|||
//_snprintf( szMsg, sizeof(szMsg), "next attack time: %0.4f\n", gpGlobals->time + flNextAttack );
|
||||
//OutputDebugString( szMsg );
|
||||
return flNextAttack;
|
||||
}
|
||||
}*/
|
||||
|
||||
//*********************************************************
|
||||
// weaponbox code:
|
||||
|
@ -1595,7 +1637,7 @@ void CBasePlayerWeapon::PrintState( void )
|
|||
|
||||
ALERT( at_console, "m_iclip: %i\n", m_iClip );
|
||||
}
|
||||
/*
|
||||
|
||||
TYPEDESCRIPTION CRpg::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CRpg, m_fSpotActive, FIELD_INTEGER ),
|
||||
|
@ -1603,7 +1645,7 @@ TYPEDESCRIPTION CRpg::m_SaveData[] =
|
|||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CRpg, CBasePlayerWeapon )
|
||||
*/
|
||||
|
||||
TYPEDESCRIPTION CRpgRocket::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CRpgRocket, m_flIgniteTime, FIELD_TIME ),
|
||||
|
@ -1621,7 +1663,7 @@ TYPEDESCRIPTION CShotgun::m_SaveData[] =
|
|||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CShotgun, CBasePlayerWeapon )
|
||||
/*
|
||||
|
||||
TYPEDESCRIPTION CGauss::m_SaveData[] =
|
||||
{
|
||||
DEFINE_FIELD( CGauss, m_fInAttack, FIELD_INTEGER ),
|
||||
|
@ -1660,7 +1702,7 @@ TYPEDESCRIPTION CSatchel::m_SaveData[] =
|
|||
DEFINE_FIELD( CSatchel, m_chargeReady, FIELD_INTEGER ),
|
||||
};
|
||||
|
||||
IMPLEMENT_SAVERESTORE( CSatchel, CBasePlayerWeapon )*/
|
||||
IMPLEMENT_SAVERESTORE( CSatchel, CBasePlayerWeapon )
|
||||
|
||||
TYPEDESCRIPTION CTorch::m_SaveData[] =
|
||||
{
|
||||
|
|
|
@ -67,7 +67,18 @@ public:
|
|||
#define WEAPON_GLOCK 2
|
||||
#define WEAPON_TORCH 3
|
||||
#define WEAPON_MP5 4
|
||||
#define WEAPON_CHAINGUN 5
|
||||
#define WEAPON_CROSSBOW 6
|
||||
#define WEAPON_SHOTGUN 7
|
||||
#define WEAPON_RPG 8
|
||||
#define WEAPON_GAUSS 9
|
||||
#define WEAPON_EGON 10
|
||||
#define WEAPON_HORNETGUN 11
|
||||
#define WEAPON_HANDGRENADE 12
|
||||
#define WEAPON_TRIPMINE 13
|
||||
#define WEAPON_SATCHEL 14
|
||||
#define WEAPON_SNARK 15
|
||||
#define WEAPON_PYTHON 16
|
||||
#define WEAPON_HOLSTER 17
|
||||
|
||||
#define WEAPON_ALLWEAPONS (~(1<<WEAPON_SUIT))
|
||||
|
@ -81,32 +92,81 @@ public:
|
|||
#define TORCH_WEIGHT 1
|
||||
#define CROWBAR_WEIGHT 5
|
||||
#define GLOCK_WEIGHT 10
|
||||
#define PYTHON_WEIGHT 15
|
||||
#define MP5_WEIGHT 15
|
||||
#define SHOTGUN_WEIGHT 15
|
||||
#define CROSSBOW_WEIGHT 10
|
||||
#define RPG_WEIGHT 20
|
||||
#define GAUSS_WEIGHT 20
|
||||
#define EGON_WEIGHT 20
|
||||
#define HORNETGUN_WEIGHT 15
|
||||
#define HANDGRENADE_WEIGHT 5
|
||||
#define SNARK_WEIGHT 5
|
||||
#define SATCHEL_WEIGHT -10
|
||||
#define TRIPMINE_WEIGHT -10
|
||||
|
||||
// weapon clip/carry ammo capacities
|
||||
#define URANIUM_MAX_CARRY 100
|
||||
#define _9MM_MAX_CARRY 50
|
||||
#define _357_MAX_CARRY 36
|
||||
#define AK47_MAX_CARRY 150
|
||||
#define BUCKSHOT_MAX_CARRY 125
|
||||
#define BOLT_MAX_CARRY 50
|
||||
#define ROCKET_MAX_CARRY 5
|
||||
#define HANDGRENADE_MAX_CARRY 10
|
||||
#define SATCHEL_MAX_CARRY 5
|
||||
#define TRIPMINE_MAX_CARRY 5
|
||||
#define SNARK_MAX_CARRY 15
|
||||
#define HORNET_MAX_CARRY 8
|
||||
#define M203_GRENADE_MAX_CARRY 10
|
||||
|
||||
// the maximum amount of ammo each weapon's clip can hold
|
||||
#define WEAPON_NOCLIP -1
|
||||
|
||||
//#define CROWBAR_MAX_CLIP WEAPON_NOCLIP
|
||||
#define GLOCK_MAX_CLIP 17
|
||||
#define PYTHON_MAX_CLIP 6
|
||||
#define MP5_MAX_CLIP 40
|
||||
#define SHOTGUN_MAX_CLIP 2
|
||||
#define CROSSBOW_MAX_CLIP 5
|
||||
#define RPG_MAX_CLIP 1
|
||||
#define GAUSS_MAX_CLIP WEAPON_NOCLIP
|
||||
#define EGON_MAX_CLIP WEAPON_NOCLIP
|
||||
#define HORNETGUN_MAX_CLIP WEAPON_NOCLIP
|
||||
#define HANDGRENADE_MAX_CLIP WEAPON_NOCLIP
|
||||
#define SATCHEL_MAX_CLIP WEAPON_NOCLIP
|
||||
#define TRIPMINE_MAX_CLIP WEAPON_NOCLIP
|
||||
#define SNARK_MAX_CLIP WEAPON_NOCLIP
|
||||
|
||||
// the default amount of ammo that comes with each gun when it spawns
|
||||
#define GLOCK_DEFAULT_GIVE 17
|
||||
#define PYTHON_DEFAULT_GIVE 6
|
||||
#define MP5_DEFAULT_GIVE 25
|
||||
#define MP5_DEFAULT_GIVE_MP MP5_MAX_CLIP
|
||||
#define MP5_M203_DEFAULT_GIVE 0
|
||||
#define SHOTGUN_DEFAULT_GIVE 2
|
||||
#define CROSSBOW_DEFAULT_GIVE 5
|
||||
#define RPG_DEFAULT_GIVE 1
|
||||
#define GAUSS_DEFAULT_GIVE 20
|
||||
#define EGON_DEFAULT_GIVE 20
|
||||
#define HANDGRENADE_DEFAULT_GIVE 5
|
||||
#define SATCHEL_DEFAULT_GIVE 1
|
||||
#define TRIPMINE_DEFAULT_GIVE 1
|
||||
#define SNARK_DEFAULT_GIVE 5
|
||||
#define HIVEHAND_DEFAULT_GIVE 8
|
||||
|
||||
// The amount of ammo given to a player by an ammo item.
|
||||
#define AMMO_URANIUMBOX_GIVE 20
|
||||
#define AMMO_GLOCKCLIP_GIVE GLOCK_MAX_CLIP
|
||||
#define AMMO_357BOX_GIVE PYTHON_MAX_CLIP
|
||||
#define AMMO_MP5CLIP_GIVE MP5_MAX_CLIP
|
||||
#define AMMO_CHAINBOX_GIVE 200
|
||||
#define AMMO_M203BOX_GIVE 2
|
||||
#define AMMO_BUCKSHOTBOX_GIVE 12
|
||||
#define AMMO_CROSSBOWCLIP_GIVE CROSSBOW_MAX_CLIP
|
||||
#define AMMO_RPGCLIP_GIVE RPG_MAX_CLIP
|
||||
#define AMMO_URANIUMBOX_GIVE 20
|
||||
#define AMMO_SNARKBOX_GIVE 5
|
||||
|
||||
// bullet types
|
||||
typedef enum
|
||||
|
@ -292,8 +352,8 @@ public:
|
|||
int m_iDefaultAmmo;// how much ammo you get when you pick up this weapon as placed by a level designer.
|
||||
|
||||
// hle time creep vars
|
||||
float m_flPrevPrimaryAttack;
|
||||
float m_flLastFireTime;
|
||||
// float m_flPrevPrimaryAttack;
|
||||
// float m_flLastFireTime;
|
||||
};
|
||||
|
||||
class CBasePlayerAmmo : public CBaseEntity
|
||||
|
@ -430,7 +490,6 @@ private:
|
|||
int m_iShell;
|
||||
int m_iClipModel;
|
||||
|
||||
int m_fInAttack;
|
||||
unsigned short m_usFireGlock1;
|
||||
unsigned short m_usFireGlock2;
|
||||
};
|
||||
|
@ -466,7 +525,7 @@ public:
|
|||
void WeaponIdle( void );
|
||||
|
||||
private:
|
||||
unsigned short m_usCrowbar;
|
||||
//unsigned short m_usCrowbar;
|
||||
};
|
||||
|
||||
class CPython : public CBasePlayerWeapon
|
||||
|
@ -529,7 +588,7 @@ public:
|
|||
|
||||
private:
|
||||
unsigned short m_usMP5;
|
||||
unsigned short m_usMP52;
|
||||
//unsigned short m_usMP52;
|
||||
};
|
||||
|
||||
class CCrossbow : public CBasePlayerWeapon
|
||||
|
@ -562,8 +621,8 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
unsigned short m_usCrossbow;
|
||||
unsigned short m_usCrossbow2;
|
||||
//unsigned short m_usCrossbow;
|
||||
//unsigned short m_usCrossbow2;
|
||||
};
|
||||
|
||||
class CShotgun : public CBasePlayerWeapon
|
||||
|
@ -675,7 +734,7 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
unsigned short m_usRpg;
|
||||
//unsigned short m_usRpg;
|
||||
};
|
||||
|
||||
class CRpgRocket : public CGrenade
|
||||
|
@ -697,7 +756,7 @@ public:
|
|||
float m_flIgniteTime;
|
||||
EHANDLE m_hLauncher; // handle back to the launcher that fired me.
|
||||
};
|
||||
/*
|
||||
|
||||
class CGauss : public CBasePlayerWeapon
|
||||
{
|
||||
public:
|
||||
|
@ -722,6 +781,7 @@ public:
|
|||
void StartFire( void );
|
||||
void Fire( Vector vecOrigSrc, Vector vecDirShooting, float flDamage );
|
||||
float GetFullChargeTime( void );
|
||||
int m_fInAttack;
|
||||
int m_iBalls;
|
||||
int m_iGlow;
|
||||
int m_iBeam;
|
||||
|
@ -783,6 +843,9 @@ public:
|
|||
|
||||
void UseAmmo( int count );
|
||||
|
||||
static int g_fireAnims1[];
|
||||
static int g_fireAnims2[];
|
||||
enum EGON_FIRESTATE { FIRE_OFF, FIRE_CHARGE };
|
||||
enum EGON_FIREMODE { FIRE_NARROW, FIRE_WIDE};
|
||||
|
||||
CBeam *m_pBeam;
|
||||
|
@ -798,17 +861,18 @@ public:
|
|||
#endif
|
||||
}
|
||||
|
||||
unsigned short m_usEgonStop;
|
||||
//unsigned short m_usEgonStop;
|
||||
|
||||
private:
|
||||
#if !CLIENT_DLL
|
||||
float m_shootTime;
|
||||
#endif
|
||||
EGON_FIRESTATE m_fireState;
|
||||
EGON_FIREMODE m_fireMode;
|
||||
float m_shakeTime;
|
||||
BOOL m_deployed;
|
||||
|
||||
unsigned short m_usEgonFire;
|
||||
//unsigned short m_usEgonFire;
|
||||
};
|
||||
|
||||
class CHgun : public CBasePlayerWeapon
|
||||
|
@ -872,6 +936,8 @@ public:
|
|||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
float m_flStartThrow;
|
||||
float m_flReleaseThrow;
|
||||
};
|
||||
|
||||
class CSatchel : public CBasePlayerWeapon
|
||||
|
@ -906,8 +972,10 @@ public:
|
|||
return FALSE;
|
||||
#endif
|
||||
}
|
||||
private:
|
||||
int m_chargeReady;
|
||||
};
|
||||
*/
|
||||
|
||||
class CTripmine : public CBasePlayerWeapon
|
||||
{
|
||||
public:
|
||||
|
@ -965,7 +1033,7 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
unsigned short m_usSnarkFire;
|
||||
//unsigned short m_usSnarkFire;
|
||||
};
|
||||
|
||||
class CHolster : public CBasePlayerWeapon
|
||||
|
|
Loading…
Reference in New Issue