1.1 --- a/extensions/sdktools/hooks.cpp Sat Mar 01 11:00:52 2014 -0500
1.2 +++ b/extensions/sdktools/hooks.cpp Sat Mar 01 14:25:35 2014 -0700
1.3 @@ -116,36 +116,18 @@
1.4 return;
1.5 }
1.6
1.7 - SH_ADD_MANUALHOOK(PlayerRunCmdHook, pEntity, SH_MEMBER(this, &CHookManager::PlayerRunCmd), false);
1.8 -}
1.9 -
1.10 -void CHookManager::OnClientDisconnecting(int client)
1.11 -{
1.12 - if (!PRCH_enabled)
1.13 - return;
1.14 -
1.15 - if (!PRCH_used)
1.16 - return;
1.17 -
1.18 - edict_t *pEdict = PEntityOfEntIndex(client);
1.19 - if (!pEdict)
1.20 + CVTableHook hook(pEntity);
1.21 + for (size_t i = 0; i < m_runUserCmdHooks.length(); ++i)
1.22 {
1.23 - return;
1.24 + if (hook == m_runUserCmdHooks[i])
1.25 + {
1.26 + return;
1.27 + }
1.28 }
1.29
1.30 - IServerUnknown *pUnknown = pEdict->GetUnknown();
1.31 - if (!pUnknown)
1.32 - {
1.33 - return;
1.34 - }
1.35 -
1.36 - CBaseEntity *pEntity = pUnknown->GetBaseEntity();
1.37 - if (!pEntity)
1.38 - {
1.39 - return;
1.40 - }
1.41 -
1.42 - SH_REMOVE_MANUALHOOK(PlayerRunCmdHook, pEntity, SH_MEMBER(this, &CHookManager::PlayerRunCmd), false);
1.43 + int hookid = SH_ADD_MANUALVPHOOK(PlayerRunCmdHook, pEntity, SH_MEMBER(this, &CHookManager::PlayerRunCmd), false);
1.44 + hook.SetHookID(hookid);
1.45 + m_runUserCmdHooks.append(new CVTableHook(hook));
1.46 }
1.47
1.48 void CHookManager::PlayerRunCmd(CUserCmd *ucmd, IMoveHelper *moveHelper)
1.49 @@ -245,15 +227,12 @@
1.50 if (m_usercmdsFwd->GetFunctionCount())
1.51 return;
1.52
1.53 - int MaxClients = playerhelpers->GetMaxClients();
1.54 - for (int i = 1; i <= MaxClients; i++)
1.55 + for (size_t i = 0; i < m_runUserCmdHooks.length(); ++i)
1.56 {
1.57 - if (playerhelpers->GetGamePlayer(i)->IsInGame())
1.58 - {
1.59 - OnClientDisconnecting(i);
1.60 - }
1.61 + delete m_runUserCmdHooks[i];
1.62 }
1.63
1.64 + m_runUserCmdHooks.clear();
1.65 PRCH_used = false;
1.66 }
1.67