From a697e81427f6c17b1bbf8b0ed0b4ce86a7f6b811 Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Wed, 11 Jun 2014 22:44:42 -0400 Subject: [PATCH 1/2] Use updated IServerTools iface on TF2 for getting tempent list and FindEntityByClassname. --- extensions/sdktools/tempents.cpp | 4 ++++ extensions/sdktools/vnatives.cpp | 22 +++++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/extensions/sdktools/tempents.cpp b/extensions/sdktools/tempents.cpp index 6e726d80..882811d2 100644 --- a/extensions/sdktools/tempents.cpp +++ b/extensions/sdktools/tempents.cpp @@ -285,6 +285,9 @@ void TempEntityManager::Initialize() int offset; m_Loaded = false; +#if SOURCE_ENGINE == SE_TF2 + m_ListHead = servertools->GetTempEntList(); +#else /* * First try to lookup s_pTempEntities directly for platforms with symbols. * If symbols aren't present (Windows or stripped Linux/Mac), @@ -311,6 +314,7 @@ void TempEntityManager::Initialize() { return; } +#endif if (!g_pGameConf->GetOffset("GetTEName", &m_NameOffs)) { diff --git a/extensions/sdktools/vnatives.cpp b/extensions/sdktools/vnatives.cpp index aeaf26e5..d053ca6a 100644 --- a/extensions/sdktools/vnatives.cpp +++ b/extensions/sdktools/vnatives.cpp @@ -714,7 +714,7 @@ static cell_t GetClientEyeAngles(IPluginContext *pContext, const cell_t *params) return got_angles ? 1 : 0; } -#if SOURCE_ENGINE >= SE_ORANGEBOX +#if SOURCE_ENGINE >= SE_ORANGEBOX && SOURCE_ENGINE != SE_TF2 static cell_t NativeFindEntityByClassname(IPluginContext *pContext, const cell_t *params) { char *searchname; @@ -793,6 +793,25 @@ static cell_t NativeFindEntityByClassname(IPluginContext *pContext, const cell_t static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *params) { +#if SOURCE_ENGINE == SE_TF2 + CBaseEntity *pStartEnt = NULL; + if (params[1] != -1) + { + pStartEnt = gamehelpers->ReferenceToEntity(params[1]); + if (!pStartEnt) + { + return pContext->ThrowNativeError("Entity %d (%d) is invalid", + gamehelpers->ReferenceToIndex(params[1]), + params[1]); + } + } + + char *searchname; + pContext->LocalToString(params[2], &searchname); + + CBaseEntity *pEntity = servertools->FindEntityByClassname(pStartEnt, searchname); + return gamehelpers->EntityToBCompatRef(pEntity); +#else static ValveCall *pCall = NULL; static bool bProbablyNoFEBC = false; @@ -850,6 +869,7 @@ static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *para FINISH_CALL_SIMPLE(&pEntity); return gamehelpers->EntityToBCompatRef(pEntity); +#endif } #if SOURCE_ENGINE >= SE_ORANGEBOX From e7870da5ff48510d87a2a71818c70fd42e583618 Mon Sep 17 00:00:00 2001 From: Nicholas Hastings Date: Wed, 11 Jun 2014 23:37:02 -0400 Subject: [PATCH 2/2] Add ifdef section notes on endifs. --- extensions/sdktools/tempents.cpp | 2 +- extensions/sdktools/vnatives.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/extensions/sdktools/tempents.cpp b/extensions/sdktools/tempents.cpp index 882811d2..e492fff2 100644 --- a/extensions/sdktools/tempents.cpp +++ b/extensions/sdktools/tempents.cpp @@ -314,7 +314,7 @@ void TempEntityManager::Initialize() { return; } -#endif +#endif // == TF2 if (!g_pGameConf->GetOffset("GetTEName", &m_NameOffs)) { diff --git a/extensions/sdktools/vnatives.cpp b/extensions/sdktools/vnatives.cpp index d053ca6a..45be5c03 100644 --- a/extensions/sdktools/vnatives.cpp +++ b/extensions/sdktools/vnatives.cpp @@ -789,7 +789,7 @@ static cell_t NativeFindEntityByClassname(IPluginContext *pContext, const cell_t return -1; } -#endif +#endif // >= ORANGEBOX && != TF2 static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *params) { @@ -820,7 +820,7 @@ static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *para { return NativeFindEntityByClassname(pContext, params); } -#endif +#endif // >= SE_ORANGEBOX if (!pCall) { @@ -857,7 +857,7 @@ static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *para return NativeFindEntityByClassname(pContext, params); #else return pContext->ThrowNativeError("%s", error); -#endif +#endif // >= ORANGEBOX } } @@ -869,7 +869,7 @@ static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *para FINISH_CALL_SIMPLE(&pEntity); return gamehelpers->EntityToBCompatRef(pEntity); -#endif +#endif // == TF2 } #if SOURCE_ENGINE >= SE_ORANGEBOX