diff --git a/dlls/ar2.cpp b/dlls/ar2.cpp index 38affdd0..be29e81b 100644 --- a/dlls/ar2.cpp +++ b/dlls/ar2.cpp @@ -16,6 +16,7 @@ #include "gamerules.h" #include "game.h" #include "customweapons.h" +#include "unpredictedweapon.h" #define AR2_BEAM_SPRITE "sprites/xbeam1.spr" enum AR2_e @@ -30,7 +31,7 @@ enum AR2_e AR2_FIRE3, }; -class CAR2 : public CBasePlayerWeapon +class CAR2 : public CBasePlayerWeaponU { public: void Spawn(void); @@ -50,13 +51,6 @@ public: void WeaponIdle(void); float m_flNextAnimTime; int m_iShell; - - virtual BOOL UseDecrement(void) - { - return false; - - } - }; LINK_ENTITY_TO_CLASS(weapon_ar2, CAR2); @@ -394,6 +388,11 @@ int CAR2::SecondaryAmmoIndex(void) void CAR2::Spawn() { + if( !cvar_allow_ar2.value ) + { + pev->flags = FL_KILLME; + return; + } pev->classname = MAKE_STRING("weapon_ar2"); Precache(); SET_MODEL(ENT(pev), "models/w_ar2.mdl"); @@ -407,6 +406,8 @@ void CAR2::Spawn() void CAR2::Precache(void) { + if( !cvar_allow_ar2.value ) + return; PRECACHE_MODEL("models/v_ar2.mdl"); PRECACHE_MODEL("models/w_ar2.mdl"); PRECACHE_MODEL("models/p_ar2.mdl"); @@ -426,6 +427,7 @@ void CAR2::Precache(void) PRECACHE_SOUND("ar2launch.wav"); PRECACHE_SOUND("weapons/357_cock1.wav"); + PRECACHE_GENERIC("sprites/weapon_ar2.txt"); } @@ -458,6 +460,8 @@ int CAR2::GetItemInfo(ItemInfo *p) int CAR2::AddToPlayer(CBasePlayer *pPlayer) { + if( !cvar_allow_ar2.value ) + return FALSE; if (CBasePlayerWeapon::AddToPlayer(pPlayer)) { MESSAGE_BEGIN(MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev); diff --git a/dlls/big_cock.cpp b/dlls/big_cock.cpp index c1af6a8e..702d1be6 100644 --- a/dlls/big_cock.cpp +++ b/dlls/big_cock.cpp @@ -13,6 +13,7 @@ #include "nodes.h" #include "player.h" #include "customweapons.h" +#include "unpredictedweapon.h" #define BIG_COCK_WEIGHT 21 @@ -30,7 +31,7 @@ enum glock_e { GLOCK_ADD_SILENCER }; -class CBig_Cock : public CBasePlayerWeapon +class CBig_Cock : public CBasePlayerWeaponU { public: void Spawn( void ); @@ -58,6 +59,11 @@ LINK_ENTITY_TO_CLASS(weapon_90mhandcock, CBig_Cock); void CBig_Cock::Spawn() { + if( !cvar_allow_bigcock.value ) + { + pev->flags = FL_KILLME; + return; + } pev->classname = MAKE_STRING("weapon_big_cock"); // hack to allow for old names Precache( ); m_iId = WEAPON_BIG_COCK; @@ -71,6 +77,8 @@ void CBig_Cock::Spawn() void CBig_Cock::Precache(void) { + if( !cvar_allow_bigcock.value ) + return; PRECACHE_MODEL("models/v_9mmcockgunn.mdl"); PRECACHE_MODEL("models/w_9mmcockgunn.mdl"); PRECACHE_MODEL("models/p_9mmcockgunn.mdl"); @@ -86,6 +94,7 @@ void CBig_Cock::Precache(void) m_usFireGlock1 = PRECACHE_EVENT( 1, "events/glock1.sc" ); m_usFireGlock2 = PRECACHE_EVENT( 1, "events/glock2.sc" ); + PRECACHE_GENERIC("sprites/weapon_big_cock.txt"); } int CBig_Cock::GetItemInfo(ItemInfo *p) @@ -294,7 +303,7 @@ void CBig_Cock::WeaponIdle(void) class CGlockAmmo : public CBasePlayerAmmo { void Spawn( void ) - { + { Precache( ); SET_MODEL(ENT(pev), "models/w_9mmclip.mdl"); CBasePlayerAmmo::Spawn( ); diff --git a/dlls/gateofbabylon.cpp b/dlls/gateofbabylon.cpp index 2bdd88dc..506f6491 100644 --- a/dlls/gateofbabylon.cpp +++ b/dlls/gateofbabylon.cpp @@ -25,6 +25,7 @@ #include "sprite.h" #include "com_model.h" #include "customweapons.h" +#include "unpredictedweapon.h" #ifndef CLIENT_DLL #define BOLT_AIR_VELOCITY 2700 @@ -32,7 +33,7 @@ class CGateOfBabylonSpawner; #define MAX_SPAWNERS 7 -class CGateOfBabylon : public CBasePlayerWeapon +class CGateOfBabylon : public CBasePlayerWeaponU { public: void Spawn( void ); @@ -53,16 +54,7 @@ public: void Reload( void ); void WeaponIdle( void ); - virtual BOOL UseDecrement( void ) - { -//#if defined( CLIENT_WEAPONS ) -// return ; -//#else - return false; -//#endif - } - - CGateOfBabylonSpawner *m_pSpawners[MAX_SPAWNERS]; + EHANDLE m_pSpawners[MAX_SPAWNERS]; bool IntersectOtherSpawner( CGateOfBabylonSpawner *spawner ); private: @@ -147,6 +139,11 @@ CGateOfBabylonBolt *CGateOfBabylonBolt::BoltCreate( void ) void CGateOfBabylonBolt::Spawn() { + if( !cvar_allow_gateofbabylon.value ) + { + pev->flags = FL_KILLME; + return; + } Precache(); pev->movetype = MOVETYPE_FLY; pev->solid = SOLID_BBOX; @@ -167,6 +164,10 @@ void CGateOfBabylonBolt::Spawn() void CGateOfBabylonBolt::Precache() { + if( !cvar_allow_gateofbabylon.value ) + { + return; + } PRECACHE_MODEL( "models/w_crowbar.mdl" ); PRECACHE_SOUND( "weapons/xbow_hitbod1.wav" ); PRECACHE_SOUND( "weapons/xbow_hitbod2.wav" ); @@ -174,6 +175,7 @@ void CGateOfBabylonBolt::Precache() PRECACHE_SOUND( "weapons/xbow_hit1.wav" ); PRECACHE_SOUND( "fvox/beep.wav" ); m_iTrail = PRECACHE_MODEL( "sprites/lgtning.spr" ); + PRECACHE_GENERIC("sprites/weapon_gateofbabylon.txt"); } void CGateOfBabylonBolt::RemoveThink( void ) @@ -466,6 +468,13 @@ CGateOfBabylonSpawner *CGateOfBabylonSpawner::CreateSpawner( bool CGateOfBabylonSpawner::FireBolts( void ) { TraceResult tr; + + if( !m_pGates ) + { + pev->flags = FL_KILLME; + return false; + } + CBasePlayer *pPlayer = m_pGates->m_pPlayer; if( m_flNextNPThrow > gpGlobals->time ) @@ -530,21 +539,18 @@ TYPEDESCRIPTION CGateOfBabylonSpawner::m_SaveData[] = DEFINE_FIELD( CGateOfBabylonSpawner, m_vecOffset, FIELD_VECTOR ), DEFINE_FIELD( CGateOfBabylonSpawner, m_flNextNPThrow, FIELD_TIME ), DEFINE_FIELD( CGateOfBabylonSpawner, m_flLastTimeAnim, FIELD_TIME ), - DEFINE_FIELD( CGateOfBabylonSpawner, m_pGates, FIELD_CLASSPTR ) + DEFINE_FIELD( CGateOfBabylonSpawner, m_pGates, FIELD_EHANDLE ) }; IMPLEMENT_SAVERESTORE( CGateOfBabylonSpawner, CBaseEntity ); TYPEDESCRIPTION CGateOfBabylon::m_SaveData[] = { - DEFINE_FIELD( CBasePlayerWeapon, m_flNextPrimaryAttack, FIELD_TIME ), - DEFINE_FIELD( CBasePlayerWeapon, m_flNextSecondaryAttack, FIELD_TIME ), - DEFINE_FIELD( CBasePlayerWeapon, m_flTimeWeaponIdle, FIELD_TIME ), DEFINE_FIELD( CGateOfBabylon, m_iSpawnerCount, FIELD_INTEGER ), - DEFINE_ARRAY( CGateOfBabylon, m_pSpawners, FIELD_CLASSPTR, MAX_SPAWNERS ) + DEFINE_ARRAY( CGateOfBabylon, m_pSpawners, FIELD_EHANDLE, MAX_SPAWNERS ) }; -IMPLEMENT_SAVERESTORE( CGateOfBabylon, CBasePlayerWeapon ); +IMPLEMENT_SAVERESTORE( CGateOfBabylon, CBasePlayerWeaponU ); int CGateOfBabylon::ObjectCaps() @@ -564,6 +570,10 @@ void CGateOfBabylon::Spawn() int CGateOfBabylon::AddToPlayer( CBasePlayer *pPlayer ) { + if( !cvar_allow_gateofbabylon.value ) + { + return FALSE; + } if( CBasePlayerWeapon::AddToPlayer( pPlayer ) ) { MESSAGE_BEGIN( MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev ); @@ -638,7 +648,7 @@ void CGateOfBabylon::PrimaryAttack( void ) if( m_pSpawners[i] ) { - fire = m_pSpawners[i]->FireBolts(); + fire = ((CGateOfBabylonSpawner *)((CBaseEntity*)m_pSpawners[i]))->FireBolts(); } } while( !fire && j++ < m_iSpawnerCount); // give up after some retries @@ -728,7 +738,7 @@ bool CGateOfBabylon::IntersectOtherSpawner( CGateOfBabylonSpawner *spawner ) { for( int i = 0; i < m_iSpawnerCount; i++ ) { - CGateOfBabylonSpawner *o = m_pSpawners[i]; + CGateOfBabylonSpawner *o = (CGateOfBabylonSpawner *)(CBaseEntity*)m_pSpawners[i]; if( spawner == o || !o ) continue; diff --git a/dlls/gravgun.cpp b/dlls/gravgun.cpp index 9bea43b9..233f3fa2 100644 --- a/dlls/gravgun.cpp +++ b/dlls/gravgun.cpp @@ -17,6 +17,7 @@ Created by Solexid #include "customentity.h" #include "gamerules.h" #include "customweapons.h" +#include "unpredictedweapon.h" #define GRAV_BEAM_SPRITE_PRIMARY_VOLUME 30 #define GRAV_BEAM_SPRITE "sprites/xbeam3.spr" @@ -40,7 +41,7 @@ enum gauss_e { }; -class CGravGun : public CBasePlayerWeapon +class CGravGun : public CBasePlayerWeaponU { public: @@ -87,11 +88,6 @@ public: CBeam *m_pNoise; CSprite *m_pSprite; - virtual BOOL UseDecrement(void) - { - return false; - } - private: float m_shootTime; GRAV_FIREMODE m_fireMode; @@ -104,7 +100,12 @@ LINK_ENTITY_TO_CLASS(weapon_gravgun, CGravGun); void CGravGun::Spawn() { - pev->classname = MAKE_STRING("weapon_gravgun"); // hack to allow for old names + if( !cvar_allow_gravgun.value ) + { + pev->flags = FL_KILLME; + return; + } + pev->classname = MAKE_STRING("weapon_gravgun"); Precache(); m_iId = WEAPON_GRAVGUN; SET_MODEL(ENT(pev), "models/w_gravcannon.mdl"); @@ -142,6 +143,8 @@ Vector CGravGun::PredictTarget(float length) void CGravGun::Precache(void) { + if( !cvar_allow_gravgun.value ) + return; PRECACHE_MODEL("models/w_gravcannon.mdl"); PRECACHE_MODEL("models/v_gravcannon.mdl"); PRECACHE_MODEL("models/p_gravcannon.mdl"); @@ -158,6 +161,7 @@ void CGravGun::Precache(void) PRECACHE_MODEL("sprites/hotglow.spr"); PRECACHE_SOUND("weapons/357_cock1.wav"); + PRECACHE_GENERIC("sprites/weapon_gravgun.txt"); } @@ -172,6 +176,9 @@ BOOL CGravGun::Deploy(void) int CGravGun::AddToPlayer(CBasePlayer *pPlayer) { + if( !cvar_allow_gravgun.value ) + return FALSE; + if (CBasePlayerWeapon::AddToPlayer(pPlayer)) { MESSAGE_BEGIN(MSG_ONE, gmsgWeapPickup, NULL, pPlayer->pev); diff --git a/dlls/gravgunmod.cpp b/dlls/gravgunmod.cpp index d4c4cab0..b80d2a99 100644 --- a/dlls/gravgunmod.cpp +++ b/dlls/gravgunmod.cpp @@ -4,13 +4,17 @@ #include "gravgunmod.h" #include "player.h" #include "coop_util.h" +#include "gamerules.h" -cvar_t cvar_allow_gravgun = { "mp_allow_gravgun","1", FCVAR_SERVER }; +cvar_t cvar_allow_gravgun = { "mp_allow_gravgun","2", FCVAR_SERVER }; cvar_t cvar_allow_ar2 = { "mp_allow_ar2","0", FCVAR_SERVER }; cvar_t cvar_ar2_mp5 = { "mp_ar2_mp5","0", FCVAR_SERVER }; cvar_t cvar_ar2_balls = { "mp_ar2_balls","0", FCVAR_SERVER }; cvar_t cvar_ar2_bullets = { "mp_ar2_bullets","0", FCVAR_SERVER }; +cvar_t cvar_allow_bigcock = { "mp_allow_bigcock","0", FCVAR_SERVER }; +cvar_t cvar_allow_gateofbabylon = { "mp_allow_gateofbabylon","0", FCVAR_SERVER }; + cvar_t cvar_wresptime = { "mp_wresptime","20", FCVAR_SERVER }; cvar_t cvar_iresptime = { "mp_iresptime","30", FCVAR_SERVER }; cvar_t cvar_gibtime = { "mp_gibtime","250", FCVAR_SERVER }; @@ -109,6 +113,8 @@ void GGM_RegisterCVars( void ) CVAR_REGISTER( &cvar_ar2_mp5 ); CVAR_REGISTER( &cvar_ar2_bullets ); CVAR_REGISTER( &cvar_ar2_balls ); + CVAR_REGISTER( &cvar_allow_bigcock ); + CVAR_REGISTER( &cvar_allow_gateofbabylon ); CVAR_REGISTER( &cvar_wresptime ); CVAR_REGISTER( &cvar_iresptime ); CVAR_REGISTER( &cvar_gibtime ); @@ -314,7 +320,7 @@ void GGM_ClientPutinServer(edict_t *pEntity, CBasePlayer *pPlayer) void GGM_ClientFirstSpawn(CBasePlayer *pPlayer) { // AGHL-like spectator - if( mp_spectator.value ) + if( mp_spectator.value && g_pGameRules->IsMultiplayer() ) { pPlayer->RemoveAllItems( TRUE ); UTIL_BecomeSpectator( pPlayer ); diff --git a/dlls/gravgunmod.h b/dlls/gravgunmod.h index af822914..e6881e23 100644 --- a/dlls/gravgunmod.h +++ b/dlls/gravgunmod.h @@ -7,6 +7,8 @@ extern cvar_t cvar_allow_ar2; extern cvar_t cvar_ar2_mp5; extern cvar_t cvar_ar2_bullets; extern cvar_t cvar_ar2_balls; +extern cvar_t cvar_allow_bigcock; +extern cvar_t cvar_allow_gateofbabylon; extern cvar_t cvar_wresptime; extern cvar_t cvar_iresptime; diff --git a/dlls/multiplay_gamerules.cpp b/dlls/multiplay_gamerules.cpp index 7953097d..e98b5b59 100644 --- a/dlls/multiplay_gamerules.cpp +++ b/dlls/multiplay_gamerules.cpp @@ -647,19 +647,24 @@ void CHalfLifeMultiplay::PlayerSpawn( CBasePlayer *pPlayer ) { pPlayer->GiveNamedItem( "weapon_crowbar" ); pPlayer->GiveNamedItem( "weapon_9mmhandgun" ); - if( cvar_allow_gravgun.value) - pPlayer->GiveNamedItem( "weapon_gravgun" ); - if( cvar_allow_ar2.value ) - pPlayer->GiveNamedItem( "weapon_ar2" ); - if( !cvar_ar2_mp5.value ) - { - pPlayer->GiveAmmo( cvar_ar2_bullets.value, "AR2", 120 ); - pPlayer->GiveAmmo( cvar_ar2_balls.value, "AR2grenades", 3 ); - } pPlayer->GiveAmmo( 68, "9mm", _9MM_MAX_CARRY );// 4 full reloads - } - if(mp_coop_changelevel.value) + + if( (int)cvar_allow_gravgun.value == 2 ) + pPlayer->GiveNamedItem( "weapon_gravgun" ); + if( (int)cvar_allow_ar2.value == 2 ) + pPlayer->GiveNamedItem( "weapon_ar2" ); + if( !cvar_ar2_mp5.value ) + { + pPlayer->GiveAmmo( cvar_ar2_bullets.value, "AR2", 120 ); + pPlayer->GiveAmmo( cvar_ar2_balls.value, "AR2grenades", 3 ); + } + if( (int)cvar_allow_bigcock.value == 2 ) + pPlayer->GiveNamedItem( "weapon_big_cock" ); + if( (int)cvar_allow_gateofbabylon.value == 2 ) + pPlayer->GiveNamedItem( "weapon_gateofbabylon" ); + + if( mp_coop_changelevel.value ) { // pPlayer->GiveNamedItem( "item_suit" ); g_WeaponList.GiveToPlayer(pPlayer); diff --git a/dlls/unpredictedweapon.h b/dlls/unpredictedweapon.h index dc0e3938..f59c60b7 100644 --- a/dlls/unpredictedweapon.h +++ b/dlls/unpredictedweapon.h @@ -3,7 +3,7 @@ #include "weapons.h" -class CBasePlayerWeaponU: CBasePlayerWeapon +class CBasePlayerWeaponU: public CBasePlayerWeapon { public: virtual int Save( CSave &save ); diff --git a/dlls/weapons.cpp b/dlls/weapons.cpp index 7f64b8e8..794b5d8e 100644 --- a/dlls/weapons.cpp +++ b/dlls/weapons.cpp @@ -355,10 +355,14 @@ void W_Precache( void ) // hornetgun UTIL_PrecacheOtherWeapon( "weapon_hornetgun" ); #endif - UTIL_PrecacheOtherWeapon( "weapon_gravgun" ); - UTIL_PrecacheOtherWeapon( "weapon_ar2" ); - UTIL_PrecacheOtherWeapon( "weapon_big_cock" ); - UTIL_PrecacheOtherWeapon( "weapon_gateofbabylon" ); + if( cvar_allow_gravgun.value ) + UTIL_PrecacheOtherWeapon( "weapon_gravgun" ); + if( cvar_allow_ar2.value ) + UTIL_PrecacheOtherWeapon( "weapon_ar2" ); + if( cvar_allow_bigcock.value ) + UTIL_PrecacheOtherWeapon( "weapon_big_cock" ); + if( cvar_allow_gateofbabylon.value ) + UTIL_PrecacheOtherWeapon( "weapon_gateofbabylon" ); #if !defined( OEM_BUILD ) && !defined( HLDEMO_BUILD )