From 2812f227b74f70e66be8dbff2bfc09c69256e4bb Mon Sep 17 00:00:00 2001 From: Kyle Sanderson Date: Tue, 29 Dec 2015 12:44:03 -0800 Subject: [PATCH] Change SDKHooks CanBeAutoBalanced to only MRES_SUPERCEDE if the return changes. --- extensions/sdkhooks/extension.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/extensions/sdkhooks/extension.cpp b/extensions/sdkhooks/extension.cpp index ef90d000..9a2ee906 100644 --- a/extensions/sdkhooks/extension.cpp +++ b/extensions/sdkhooks/extension.cpp @@ -916,10 +916,6 @@ bool SDKHooks::Hook_LevelInit(char const *pMapName, char const *pMapEntities, ch bool SDKHooks::Hook_CanBeAutobalanced() { CBaseEntity *pPlayer = META_IFACEPTR(CBaseEntity); - int entity = gamehelpers->EntityToBCompatRef(pPlayer); - - bool origRet = SH_MCALL(pPlayer, CanBeAutobalanced)(); - bool newRet = origRet; CVTableHook vhook(pPlayer); ke::Vector &vtablehooklist = g_HookList[SDKHook_CanBeAutobalanced]; @@ -930,11 +926,16 @@ bool SDKHooks::Hook_CanBeAutobalanced() continue; } + int entity = gamehelpers->EntityToBCompatRef(pPlayer); + + bool origRet = SH_MCALL(pPlayer, CanBeAutobalanced)(); + bool newRet = origRet; + ke::Vector callbackList; PopulateCallbackList(vtablehooklist[entry]->hooks, callbackList, entity); for (entry = 0; entry < callbackList.length(); ++entry) { - cell_t res; + cell_t res = origRet; IPluginFunction *callback = callbackList[entry]; callback->PushCell(entity); callback->PushCell(origRet); @@ -943,14 +944,17 @@ bool SDKHooks::Hook_CanBeAutobalanced() // Only update our new ret if different from original // (so if multiple plugins returning different answers, // the one(s) that changed it win) - if ((res != 0) != origRet) + if (res != origRet) newRet = !origRet; } + if (newRet != origRet) + RETURN_META_VALUE(MRES_SUPERCEDE, newRet); + break; } - RETURN_META_VALUE(MRES_SUPERCEDE, newRet); + RETURN_META_VALUE(MRES_IGNORED, false); } void SDKHooks::Hook_EndTouch(CBaseEntity *pOther)