From 05c1e76ca1eed0e5108ec5278368407bab935051 Mon Sep 17 00:00:00 2001 From: RAINBOW2000 Date: Tue, 24 Jan 2017 18:32:57 +0300 Subject: [PATCH] Mmkm --- dlls/pepsigun.cpp | 120 +++++++++++++++++++++++++++++++++++++++++----- dlls/sniper.cpp | 4 +- dlls/weapons.h | 23 --------- 3 files changed, 111 insertions(+), 36 deletions(-) diff --git a/dlls/pepsigun.cpp b/dlls/pepsigun.cpp index 80c132aa..6f45eccb 100644 --- a/dlls/pepsigun.cpp +++ b/dlls/pepsigun.cpp @@ -11,7 +11,7 @@ #include "player.h" #define HANDGRENADE_PRIMARY_VOLUME 450 - +#define WEAPON_PEPSIGUN 22 enum handgrenade_e { HANDGRENADE_IDLE = 0, @@ -22,6 +22,32 @@ enum handgrenade_e HANDGRENADE_DRAW }; +class CPepsigun : public CBasePlayerWeapon +{ +public: + void Spawn( void ); + void Precache( void ); + int iItemSlot( void ) { return 4; } + int GetItemInfo(ItemInfo *p); + + void PrimaryAttack( void ); + void Reload( void ); + BOOL Deploy( void ); + BOOL CanHolster( void ); + void Holster( int skiplocal = 0 ); + void WeaponIdle( void ); + int m_fInReload; + float m_flNextReload; + + virtual BOOL UseDecrement( void ) + { +#if defined( CLIENT_WEAPONS ) + return TRUE; +#else + return FALSE; +#endif + } +} LINK_ENTITY_TO_CLASS( weapon_pepsigun, CPepsigun ) LINK_ENTITY_TO_CLASS( ammo_pepsi, CPepsigun ) @@ -35,7 +61,7 @@ void CPepsigun::Spawn() #ifndef CLIENT_DLL pev->dmg = 80; #endif - m_iDefaultAmmo = 10000; + m_iDefaultAmmo = 100; FallInit();// get ready to fall down. } @@ -45,6 +71,7 @@ void CPepsigun::Precache( void ) PRECACHE_MODEL( "models/w_pepsigun.mdl" ); PRECACHE_MODEL( "models/v_pepsigun.mdl" ); PRECACHE_MODEL( "models/p_pepsigun.mdl" ); + PRECACHE_SOUND( "weapons/pepsigun_shoot.wav"); } int CPepsigun::GetItemInfo( ItemInfo *p ) @@ -54,11 +81,11 @@ int CPepsigun::GetItemInfo( ItemInfo *p ) p->iMaxAmmo1 = 20000; p->pszAmmo2 = NULL; p->iMaxAmmo2 = -1; - p->iMaxClip = -1; + p->iMaxClip = 8; p->iSlot = 2; p->iPosition = 4; p->iId = m_iId = WEAPON_PEPSIGUN; - p->iWeight = PEPSIGUN_WEIGHT; + p->iWeight = 10; p->iFlags = ITEM_FLAG_LIMITINWORLD | ITEM_FLAG_EXHAUSTIBLE; return 1; @@ -97,13 +124,79 @@ void CPepsigun::Holster( int skiplocal /* = 0 */ ) void CPepsigun::PrimaryAttack() { - m_flStartThrow = gpGlobals->time; - m_flReleaseThrow = 0; - m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.25; + if(m_iClip > 0) + { + m_flStartThrow = gpGlobals->time; + m_flReleaseThrow = 0; + m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.25; + } +} +void CPepsigun::Reload( void ) +{ + if( m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 || m_iClip == SHOTGUN_MAX_CLIP ) + return; + + // don't reload until recoil is done + if( m_flNextPrimaryAttack > UTIL_WeaponTimeBase() ) + return; + + // check to see if we're ready to reload + if( m_fInSpecialReload == 0 ) + { + SendWeaponAnim( HANDGRENADE_OPEN ); + m_fInSpecialReload = 1; + m_pPlayer->m_flNextAttack = UTIL_WeaponTimeBase() + 0.6; + m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.6; + m_flNextPrimaryAttack = UTIL_WeaponTimeBase() + 1.0; + m_flNextSecondaryAttack = UTIL_WeaponTimeBase() + 1.0; + return; + } + else if( m_fInSpecialReload == 1 ) + { + if( m_flTimeWeaponIdle > UTIL_WeaponTimeBase() ) + return; + // was waiting for gun to move to side + m_fInSpecialReload = 2; + + if( RANDOM_LONG( 0, 1 ) ) + EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/reload1.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG( 0, 0x1f ) ); + else + EMIT_SOUND_DYN( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/reload3.wav", 1, ATTN_NORM, 0, 85 + RANDOM_LONG( 0, 0x1f ) ); + + SendWeaponAnim( HANDGRENADE_INSERT ); + + m_flNextReload = UTIL_WeaponTimeBase() + 0.5; + m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 0.5; + } + else + { + // Add them to the clip + m_iClip += 1; + m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] -= 1; + m_fInSpecialReload = 1; + } } void CPepsigun::WeaponIdle( void ) { + if( m_iClip == 0 && m_fInSpecialReload == 0 && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] ) + { + Reload(); + } + else if( m_fInSpecialReload != 0 ) + { + if( m_iClip != 8 && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] ) + { + Reload(); + } + else + { + // reload debounce has timed out + SendWeaponAnim( HANDGRENADE_CLOSE ); + m_fInSpecialReload = 0; + m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 1.5; + } + } if( m_flReleaseThrow == 0 && m_flStartThrow ) m_flReleaseThrow = gpGlobals->time; @@ -135,17 +228,20 @@ void CPepsigun::WeaponIdle( void ) time = 0; CGrenade::ShootTimed( m_pPlayer->pev, vecSrc, vecThrow, time ); - + m_iClip--; if( flVel < 500 ) { - SendWeaponAnim( HANDGRENADE_FIRE ); + EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/pepsigun_shoot.wav", 1, ATTN_NORM ); + SendWeaponAnim( HANDGRENADE_FIRE ); } else if( flVel < 1000 ) { + EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/pepsigun_shoot.wav", 1, ATTN_NORM ); SendWeaponAnim( HANDGRENADE_FIRE ); } else { + EMIT_SOUND( ENT( m_pPlayer->pev ), CHAN_ITEM, "weapons/pepsigun_shoot.wav", 1, ATTN_NORM ); SendWeaponAnim( HANDGRENADE_FIRE ); } @@ -200,6 +296,8 @@ void CPepsigun::WeaponIdle( void ) { m_flTimeWeaponIdle = UTIL_WeaponTimeBase() + 75.0 / 30.0; } - - } + if( !m_iClip && m_pPlayer->m_rgAmmo[m_iPrimaryAmmoType] <= 0 ) + // HEV suit - indicate out of ammo condition + m_pPlayer->SetSuitUpdate( "!HEV_AMO0", FALSE, 0 ); } +} \ No newline at end of file diff --git a/dlls/sniper.cpp b/dlls/sniper.cpp index 68bb7fde..c69b6ea6 100644 --- a/dlls/sniper.cpp +++ b/dlls/sniper.cpp @@ -212,9 +212,9 @@ m_fInZoom = FALSE; m_pPlayer->pev->fov = m_pPlayer->m_iFOV = 0; // 0 means reset to default fov } if (m_iClip == 0) -DefaultReload( 5, SNIPARS_FIRE, 1.5 ); +DefaultReload( 5, SNIPARS_RELOAD, 1.5 ); else -DefaultReload( 5, SNIPARS_FIRE, 1.5 ); +DefaultReload( 5, SNIPARS_RELOAD, 1.5 ); } void CSnipars::WeaponIdle( void ) diff --git a/dlls/weapons.h b/dlls/weapons.h index dced64d2..fc00cbea 100644 --- a/dlls/weapons.h +++ b/dlls/weapons.h @@ -99,7 +99,6 @@ public: #define WEAPON_GLOCK2 19 #define WEAPON_KATANA 20 #define WEAPON_ROCK 21 -#define WEAPON_PEPSIGUN 22 #define WEAPON_HAMMER 23 @@ -1166,29 +1165,7 @@ public: #endif } }; -class CPepsigun : public CBasePlayerWeapon -{ -public: - void Spawn( void ); - void Precache( void ); - int iItemSlot( void ) { return 4; } - int GetItemInfo(ItemInfo *p); - void PrimaryAttack( void ); - BOOL Deploy( void ); - BOOL CanHolster( void ); - void Holster( int skiplocal = 0 ); - void WeaponIdle( void ); - - virtual BOOL UseDecrement( void ) - { -#if defined( CLIENT_WEAPONS ) - return TRUE; -#else - return FALSE; -#endif - } -}; class CCrowbar2 : public CBasePlayerWeapon { public: