Compare commits

...

1 Commits

Author SHA1 Message Date
BotoX
ed598e9b28 Fix HookEntityOutput/HookSingleEntityOutput bugs in sdktools. 2019-09-10 11:26:39 +02:00
2 changed files with 13 additions and 32 deletions

View File

@ -52,7 +52,6 @@ void EntityOutputManager::Shutdown()
return; return;
} }
EntityOutputs->Destroy();
ClassNames->Destroy(); ClassNames->Destroy();
fireOutputDetour->Destroy(); fireOutputDetour->Destroy();
} }
@ -66,7 +65,6 @@ void EntityOutputManager::Init()
return; return;
} }
EntityOutputs = adtfactory->CreateBasicTrie();
ClassNames = adtfactory->CreateBasicTrie(); ClassNames = adtfactory->CreateBasicTrie();
} }
@ -120,45 +118,30 @@ bool EntityOutputManager::FireEventDetour(void *pOutput, CBaseEntity *pActivator
return true; return true;
} }
char sOutput[20];
ke::SafeSprintf(sOutput, sizeof(sOutput), "%p", pOutput);
// attempt to directly lookup a hook using the pOutput pointer // attempt to directly lookup a hook using the pOutput pointer
OutputNameStruct *pOutputName = NULL; OutputNameStruct *pOutputName = NULL;
bool fastLookup = false; const char *classname = gamehelpers->GetEntityClassname(pCaller);
if (!classname)
// Fast lookup failed - check the slow way for hooks that haven't fired yet
if ((fastLookup = EntityOutputs->Retrieve(sOutput, (void **)&pOutputName)) == false)
{ {
const char *classname = gamehelpers->GetEntityClassname(pCaller); return true;
if (!classname) }
{
return true;
}
const char *outputname = FindOutputName(pOutput, pCaller); const char *outputname = FindOutputName(pOutput, pCaller);
if (!outputname) if (!outputname)
{ {
return true; return true;
} }
pOutputName = FindOutputPointer(classname, outputname, false); pOutputName = FindOutputPointer(classname, outputname, false);
if (!pOutputName) if (!pOutputName)
{ {
return true; return true;
}
} }
if (!pOutputName->hooks.empty()) if (!pOutputName->hooks.empty())
{ {
if (!fastLookup)
{
// hook exists on this classname and output - map it into our quick find trie
EntityOutputs->Insert(sOutput, pOutputName);
}
SourceHook::List<omg_hooks *>::iterator _iter; SourceHook::List<omg_hooks *>::iterator _iter;
omg_hooks *hook; omg_hooks *hook;

View File

@ -121,8 +121,6 @@ private:
const char *FindOutputName(void *pOutput, CBaseEntity *pCaller); const char *FindOutputName(void *pOutput, CBaseEntity *pCaller);
//Maps CEntityOutput * to a OutputNameStruct
IBasicTrie *EntityOutputs;
// Maps classname to a ClassNameStruct // Maps classname to a ClassNameStruct
IBasicTrie *ClassNames; IBasicTrie *ClassNames;