From c326853617c2cea82173441b5958d240343a4867 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Thu, 21 Jul 2022 01:52:10 +0300 Subject: [PATCH] engine: server: restore original PEntityOfEntIndex function, but still bug-compatible with GoldSrc --- engine/server/sv_game.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/engine/server/sv_game.c b/engine/server/sv_game.c index d7343fb0..f3fe6e6e 100644 --- a/engine/server/sv_game.c +++ b/engine/server/sv_game.c @@ -62,16 +62,23 @@ qboolean SV_CheckEdict( const edict_t *e, const char *file, const int line ) static edict_t *SV_PEntityOfEntIndex( const int iEntIndex, const qboolean allentities ) { - edict_t *pEdict = EDICT_NUM( iEntIndex ); - qboolean player = allentities ? iEntIndex <= svs.maxclients : iEntIndex < svs.maxclients; + if( iEntIndex >= 0 && iEntIndex < GI->max_edicts ) + { + edict_t *pEdict = EDICT_NUM( iEntIndex ); + qboolean player = allentities ? iEntIndex <= svs.maxclients : iEntIndex < svs.maxclients; - if( !SV_IsValidEdict( pEdict )) - return NULL; + if( !iEntIndex || FBitSet( host.features, ENGINE_QUAKE_COMPATIBLE )) + return pEdict; // just get access to array - if( !player && !pEdict->pvPrivateData ) - return NULL; + if( SV_IsValidEdict( pEdict ) && pEdict->pvPrivateData ) + return pEdict; - return pEdict; + // g-cont: world and clients can be accessed even without private data + if( SV_IsValidEdict( pEdict ) && player ) + return pEdict; + } + + return NULL; }