engine: server: check for invoker entity when filtering out host client during entities thinking
This commit is contained in:
parent
bcca9387de
commit
51945f002b
1 changed files with 10 additions and 1 deletions
|
@ -4182,7 +4182,16 @@ void GAME_EXPORT SV_PlaybackEventFull( int flags, const edict_t *pInvoker, word
|
|||
continue;
|
||||
}
|
||||
|
||||
if( FBitSet( flags, FEV_NOTHOST ) && cl == sv.current_client && FBitSet( cl->flags, FCL_LOCAL_WEAPONS ))
|
||||
// a1ba: GoldSrc never cleans up host_client pointer (similar to sv.current_client)
|
||||
// so it's always points at some client and in singleplayer this check always succeedes
|
||||
// in Xash, however, sv.current_client might be reset and set to NULL
|
||||
// this is especially dangerous when weapons play events in Think functions
|
||||
//
|
||||
// IMHO, it doesn't make sense to me to compare it against current client when we have
|
||||
// invoker edict pointer but to preserve behaviour check for them both
|
||||
//
|
||||
// if it breaks some mods, probably sv.current_client semantics must be reworked to match GoldSrc
|
||||
if( FBitSet( flags, FEV_NOTHOST ) && ( cl == sv.current_client || cl->edict == pInvoker ) && FBitSet( cl->flags, FCL_LOCAL_WEAPONS ))
|
||||
continue; // will be played on client side
|
||||
|
||||
if( FBitSet( flags, FEV_HOSTONLY ) && cl->edict != pInvoker )
|
||||
|
|
Loading…
Add table
Reference in a new issue