From fbe70a5691d70d5997c55d31f77480c5e169a8ec Mon Sep 17 00:00:00 2001 From: Giegue Date: Thu, 1 Jun 2023 19:46:02 -0300 Subject: [PATCH] Fix sound replacements crashing the server. --- src/dlls/globalreplace.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/dlls/globalreplace.cpp b/src/dlls/globalreplace.cpp index 5e98afb..2774d6b 100644 --- a/src/dlls/globalreplace.cpp +++ b/src/dlls/globalreplace.cpp @@ -122,8 +122,20 @@ const char* FindSoundReplacement( edict_t *pMonster, const char *from ) // Individually set sounds takes priority! if ( pMonster ) { - CMBaseMonster *castMonster = GetClassPtr((CMBaseMonster *)VARS(pMonster)); - if (castMonster->m_isrSounds) + CMBaseMonster *castMonster = NULL; + + // Check if this is really a monster or not + if (pMonster->v.flags & FL_MONSTER) + castMonster = GetClassPtr((CMBaseMonster *)VARS(pMonster)); + else + { + // This is probably a monster-owned projectile of sorts + if (!FNullEnt(pMonster->v.owner)) + castMonster = GetClassPtr((CMBaseMonster *)VARS(pMonster->v.owner)); + } + + // If still no valid BaseMonster pointer, full stop, use GSR. + if (castMonster && castMonster->m_isrSounds) { for (int sound = 0; sound < castMonster->m_isrSounds; sound++) {