From 6c31780ccad14a4dd97e8dfc5cc60b5726a7913e Mon Sep 17 00:00:00 2001 From: mittorn Date: Wed, 8 Aug 2018 02:33:48 +0700 Subject: [PATCH] Add option to controls decals on server --- dlls/gravgunmod.cpp | 5 +++++ dlls/gravgunmod.h | 13 +++++++++++++ dlls/util.cpp | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/dlls/gravgunmod.cpp b/dlls/gravgunmod.cpp index a4c0243f..55c911b6 100644 --- a/dlls/gravgunmod.cpp +++ b/dlls/gravgunmod.cpp @@ -31,6 +31,7 @@ cvar_t mp_maxotherdist = { "mp_maxotherdist", "4096", FCVAR_SERVER}; cvar_t mp_maxmonsterdist = { "mp_maxmonsterdist", "4096", FCVAR_SERVER}; cvar_t mp_servercliptents = { "mp_servercliptents", "0", FCVAR_SERVER}; cvar_t mp_maxtentdist = { "mp_maxtentdist", "4096", FCVAR_SERVER}; +cvar_t mp_maxdecals = { "mp_maxdecals", "-1", FCVAR_SERVER }; void Ent_RunGC_f( void ); @@ -107,6 +108,7 @@ void GGM_RegisterCVars( void ) CVAR_REGISTER( &mp_maxotherdist ); CVAR_REGISTER( &mp_servercliptents ); CVAR_REGISTER( &mp_maxtentdist ); + CVAR_REGISTER( &mp_maxdecals ); g_engfuncs.pfnAddServerCommand( "ent_rungc", Ent_RunGC_f ); } @@ -751,6 +753,9 @@ void GGM_InitialMenus( CBasePlayer *pPlayer ) .Add("Join coop", "joincoop") .Add("Spectate", "spectate") .Show(); + + if( mp_maxdecals.value >= 0 ) + CLIENT_COMMAND( pPlayer->edict(), UTIL_VarArgs("r_decals %f\n", mp_maxdecals.value ) ); } bool GGM_TouchCommand( CBasePlayer *pPlayer, const char *pcmd ) diff --git a/dlls/gravgunmod.h b/dlls/gravgunmod.h index 3dd1d8ac..beaf980c 100644 --- a/dlls/gravgunmod.h +++ b/dlls/gravgunmod.h @@ -20,15 +20,28 @@ extern cvar_t mp_checkentities; extern cvar_t mp_touchmenu; // distance clipping (client.cpp) +// useful for open world extern cvar_t mp_serverdistclip; extern cvar_t mp_maxbmodeldist; extern cvar_t mp_maxtrashdist; extern cvar_t mp_maxwaterdist; extern cvar_t mp_maxmonsterdist; extern cvar_t mp_maxotherdist; + +// tempentity clipping +// if enabled, ignores PVS, so use only on open world extern cvar_t mp_servercliptents; extern cvar_t mp_maxtentdist; +// control decals count from server +// decals is unuseful on sandbox servers +// 100 instancs of single bmodel with 100 decals +// will cause in 10000 decals in frame +// r_decals limit does not cover it because it +// only limit decal count on different models + +extern cvar_t mp_maxdecals; + void GGM_RegisterCVars( void ); void Ent_RunGC( bool common, bool enttools, const char *userid, const char *pattern = NULL ); bool Q_stricmpext( const char *pattern, const char *text ); diff --git a/dlls/util.cpp b/dlls/util.cpp index 68ea0865..60567a5d 100644 --- a/dlls/util.cpp +++ b/dlls/util.cpp @@ -1251,6 +1251,9 @@ void UTIL_DecalTrace( TraceResult *pTrace, int decalNumber ) if( decalNumber < 0 ) return; + if( !mp_maxdecals.value ) // even do not send if decals disabled + return; + index = gDecals[decalNumber].index; if( index < 0 ) @@ -1363,6 +1366,9 @@ void UTIL_PlayerDecalTrace( TraceResult *pTrace, int playernum, int decalNumber, if( pTrace->flFraction == 1.0 ) return; + if( !mp_maxdecals.value ) // even do not send if decals disabled + return; + if( mp_serverdistclip.value && mp_servercliptents.value ) { // loop through all players @@ -1411,6 +1417,9 @@ void UTIL_PlayerDecalTrace( TraceResult *pTrace, int playernum, int decalNumber, void UTIL_GunshotDecalTrace( TraceResult *pTrace, int decalNumber ) { + if( !mp_maxdecals.value ) // even do not send if decals disabled + return; + if( decalNumber < 0 ) return;