From 6b27a7fe4616908fc133ab20f58b27879e742298 Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Sat, 10 May 2014 22:21:42 -0400 Subject: [PATCH] Consolidate duplicate OnEntityCreated logic (bug 6119, r=KyleS). --HG-- extra : rebase_source : b0f563081c5d98c3fbc2769ee89e3ce0ec093624 --- extensions/sdkhooks/extension.cpp | 60 ++++++++++++++----------------- extensions/sdkhooks/extension.h | 1 + 2 files changed, 27 insertions(+), 34 deletions(-) diff --git a/extensions/sdkhooks/extension.cpp b/extensions/sdkhooks/extension.cpp index 7aee5948..0fef0268 100644 --- a/extensions/sdkhooks/extension.cpp +++ b/extensions/sdkhooks/extension.cpp @@ -403,23 +403,8 @@ void SDKHooks::OnPluginUnloaded(IPlugin *plugin) void SDKHooks::OnClientPutInServer(int client) { CBaseEntity *pPlayer = gamehelpers->ReferenceToEntity(client); - const char *pName = gamehelpers->GetEntityClassname(pPlayer); - // Send OnEntityCreated to SM listeners - SourceHook::List::iterator iter; - ISMEntityListener *pListener = NULL; - for (iter=m_EntListeners.begin(); iter!=m_EntListeners.end(); iter++) - { - pListener = (*iter); - pListener->OnEntityCreated(pPlayer, pName ? pName : ""); - } - - // Call OnEntityCreated forward - g_pOnEntityCreated->PushCell(client); - g_pOnEntityCreated->PushString(pName ? pName : ""); - g_pOnEntityCreated->Execute(NULL); - - m_EntityExists.Set(client); + HandleEntityCreated(pPlayer, client); } void SDKHooks::OnClientDisconnecting(int client) @@ -827,28 +812,14 @@ void SDKHooks::Unhook(int entity, SDKHookType type, IPluginFunction *pCallback) void SDKHooks::OnEntityCreated(CBaseEntity *pEntity) { // Call OnEntityCreated forward - int entity = gamehelpers->ReferenceToIndex(gamehelpers->EntityToBCompatRef(pEntity)); - if (m_EntityExists.IsBitSet(entity) || (entity > 0 && entity <= playerhelpers->GetMaxClients())) + int ref = gamehelpers->EntityToBCompatRef(pEntity); + int index = gamehelpers->ReferenceToIndex(ref); + if (m_EntityExists.IsBitSet(index) || (index > 0 && index <= playerhelpers->GetMaxClients())) { return; } - const char *pName = gamehelpers->GetEntityClassname(pEntity); - - // Send OnEntityCreated to SM listeners - SourceHook::List::iterator iter; - ISMEntityListener *pListener = NULL; - for (iter=m_EntListeners.begin(); iter!=m_EntListeners.end(); iter++) - { - pListener = (*iter); - pListener->OnEntityCreated(pEntity, pName ? pName : ""); - } - - g_pOnEntityCreated->PushCell(gamehelpers->EntityToBCompatRef(pEntity)); - g_pOnEntityCreated->PushString(pName ? pName : ""); - g_pOnEntityCreated->Execute(NULL); - - m_EntityExists.Set(entity); + HandleEntityCreated(pEntity, ref); } #ifdef GAMEDESC_CAN_CHANGE @@ -1716,6 +1687,27 @@ bool SDKHooks::Hook_WeaponSwitchPost(CBaseCombatWeapon *pWeapon, int viewmodelin RETURN_META_VALUE(MRES_IGNORED, true); } +void SDKHooks::HandleEntityCreated(CBaseEntity *pEntity, int ref) +{ + const char *pName = gamehelpers->GetEntityClassname(pEntity); + + // Send OnEntityCreated to SM listeners + SourceHook::List::iterator iter; + ISMEntityListener *pListener = NULL; + for (iter = m_EntListeners.begin(); iter != m_EntListeners.end(); iter++) + { + pListener = (*iter); + pListener->OnEntityCreated(pEntity, pName ? pName : ""); + } + + // Call OnEntityCreated forward + g_pOnEntityCreated->PushCell(ref); + g_pOnEntityCreated->PushString(pName ? pName : ""); + g_pOnEntityCreated->Execute(NULL); + + m_EntityExists.Set(gamehelpers->ReferenceToIndex(ref)); +} + void SDKHooks::HandleEntityDeleted(CBaseEntity *pEntity, int ref) { // Send OnEntityDestroyed to SM listeners diff --git a/extensions/sdkhooks/extension.h b/extensions/sdkhooks/extension.h index 736f0eb1..5c88ff9c 100644 --- a/extensions/sdkhooks/extension.h +++ b/extensions/sdkhooks/extension.h @@ -331,6 +331,7 @@ public: bool Hook_WeaponSwitchPost(CBaseCombatWeapon *pWeapon, int viewmodelindex); private: + void HandleEntityCreated(CBaseEntity *pEntity, int ref); void HandleEntityDeleted(CBaseEntity *pEntity, int ref); void Unhook(CBaseEntity *pEntity); void Unhook(IPluginContext *pContext);