From 9e083ec668ec114ca5d430d864ee835a76bc5fc8 Mon Sep 17 00:00:00 2001 From: Nick Hastings Date: Wed, 22 Sep 2021 22:09:39 -0400 Subject: [PATCH] Use new GetIServer call and updated IServerTools calls on Blade Symphony. --- core/HalfLife2.cpp | 1 + core/PlayerManager.cpp | 3 +- extensions/sdktools/tempents.cpp | 1 + extensions/sdktools/vglobals.cpp | 5 +- extensions/sdktools/vhelpers.cpp | 1 + extensions/sdktools/vnatives.cpp | 1 + gamedata/sdktools.games/engine.blade.txt | 124 ----------------------- 7 files changed, 9 insertions(+), 127 deletions(-) diff --git a/core/HalfLife2.cpp b/core/HalfLife2.cpp index 1932dbd8..aba2c2ed 100644 --- a/core/HalfLife2.cpp +++ b/core/HalfLife2.cpp @@ -183,6 +183,7 @@ void CHalfLife2::InitLogicalEntData() || SOURCE_ENGINE == SE_CSS \ || SOURCE_ENGINE == SE_SDK2013 \ || SOURCE_ENGINE == SE_BMS \ + || SOURCE_ENGINE == SE_BLADE \ || SOURCE_ENGINE == SE_NUCLEARDAWN if (g_SMAPI->GetServerFactory(false)("VSERVERTOOLS003", nullptr)) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index e2550058..ff1dd3ee 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -2066,7 +2066,8 @@ void CPlayer::Initialize(const char *name, const char *ip, edict_t *pEntity) || SOURCE_ENGINE == SE_HL2DM \ || SOURCE_ENGINE == SE_BMS \ || SOURCE_ENGINE == SE_INSURGENCY \ - || SOURCE_ENGINE == SE_DOI + || SOURCE_ENGINE == SE_DOI \ + || SOURCE_ENGINE == SE_BLADE m_pIClient = engine->GetIServer()->GetClient(m_iIndex - 1); #else #if SOURCE_ENGINE == SE_SDK2013 diff --git a/extensions/sdktools/tempents.cpp b/extensions/sdktools/tempents.cpp index 60783165..9e5f19e8 100644 --- a/extensions/sdktools/tempents.cpp +++ b/extensions/sdktools/tempents.cpp @@ -291,6 +291,7 @@ void TempEntityManager::Initialize() || SOURCE_ENGINE == SE_CSS \ || SOURCE_ENGINE == SE_SDK2013 \ || SOURCE_ENGINE == SE_BMS \ + || SOURCE_ENGINE == SE_BLADE \ || SOURCE_ENGINE == SE_NUCLEARDAWN if (g_SMAPI->GetServerFactory(false)("VSERVERTOOLS003", nullptr)) diff --git a/extensions/sdktools/vglobals.cpp b/extensions/sdktools/vglobals.cpp index 0f786685..41bb042a 100644 --- a/extensions/sdktools/vglobals.cpp +++ b/extensions/sdktools/vglobals.cpp @@ -229,11 +229,12 @@ void GetIServer() || SOURCE_ENGINE == SE_SDK2013 \ || SOURCE_ENGINE == SE_BMS \ || SOURCE_ENGINE == SE_DOI \ + || SOURCE_ENGINE == SE_BLADE \ || SOURCE_ENGINE == SE_INSURGENCY -#if SOURCE_ENGINE != SE_INSURGENCY && SOURCE_ENGINE != SE_DOI +#if SOURCE_ENGINE == SE_SDK2013 if (g_SMAPI->GetEngineFactory(false)("VEngineServer022", nullptr)) -#endif // !SE_INSURGENCY +#endif // SE_SDK2013 { iserver = engine->GetIServer(); return; diff --git a/extensions/sdktools/vhelpers.cpp b/extensions/sdktools/vhelpers.cpp index 187a15ae..3a463e02 100644 --- a/extensions/sdktools/vhelpers.cpp +++ b/extensions/sdktools/vhelpers.cpp @@ -617,6 +617,7 @@ CEntityFactoryDictionary *GetEntityFactoryDictionary() || SOURCE_ENGINE == SE_HL2DM \ || SOURCE_ENGINE == SE_SDK2013 \ || SOURCE_ENGINE == SE_BMS \ + || SOURCE_ENGINE == SE_BLADE \ || SOURCE_ENGINE == SE_NUCLEARDAWN dict = (CEntityFactoryDictionary *) servertools->GetEntityFactoryDictionary(); #else diff --git a/extensions/sdktools/vnatives.cpp b/extensions/sdktools/vnatives.cpp index 18597ad6..9b6a8a82 100644 --- a/extensions/sdktools/vnatives.cpp +++ b/extensions/sdktools/vnatives.cpp @@ -910,6 +910,7 @@ static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *para || SOURCE_ENGINE == SE_CSS \ || SOURCE_ENGINE == SE_BMS \ || SOURCE_ENGINE == SE_SDK2013 \ + || SOURCE_ENGINE == SE_BLADE \ || SOURCE_ENGINE == SE_NUCLEARDAWN static bool bHasServerTools3 = !!g_SMAPI->GetServerFactory(false)("VSERVERTOOLS003", nullptr); diff --git a/gamedata/sdktools.games/engine.blade.txt b/gamedata/sdktools.games/engine.blade.txt index 5f9e6df5..67453492 100644 --- a/gamedata/sdktools.games/engine.blade.txt +++ b/gamedata/sdktools.games/engine.blade.txt @@ -33,11 +33,6 @@ { "Offsets" { - /* Offset into CBaseTempEntity constructor */ - "s_pTempEntities" - { - "windows" "19" - } "GetTEName" { "windows" "4" @@ -60,125 +55,6 @@ "mac64" "0" } } - - "Signatures" - { - "CBaseTempEntity" - { - "library" "server" - "windows" "\x55\x8B\xEC\x8B\xC1\x8B\x4D\x08\xC7\x00\x2A\x2A\x2A\x2A\x89\x48\x2A\x8B" - } - "s_pTempEntities" - { - "library" "server" - "linux" "@_ZN15CBaseTempEntity15s_pTempEntitiesE" - "mac" "@_ZN15CBaseTempEntity15s_pTempEntitiesE" - } - } - } - - /* CGlobalEntityList */ - "#default" - { - "Signatures" - { - /* Functions in CGlobalEntityList */ - "FindEntityByClassname" - { - "library" "server" - "windows" "\x55\x8B\xEC\x53\x56\x8B\xF1\x8B\x4D\x08\x57\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x08\xFF\xD2\x8B\x00\x83\xF8\xFF\x75\x2A\xB8\xFF\x1F\x00\x00\x8D\x04\x40\x8B\x74\xC6\x2A\xEB" - "linux" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" - "mac" "@_ZN17CGlobalEntityList21FindEntityByClassnameEP11CBaseEntityPKc" - } - } - } - - /* General GameRules */ - "#default" - { - "Offsets" - { - /* Offset into CreateGameRulesObject */ - "g_pGameRules" - { - "windows" "2" - } - } - - "Signatures" - { - /* This signature sometimes has multiple matches, but this - * does not matter as g_pGameRules is involved in all of them. - * The same g_pGameRules offset applies to each match. - * - * Sometimes this block of bytes is at the beginning of the static - * CreateGameRulesObject function and sometimes it is in the middle - * of an entirely different function. This depends on the game. - */ - "CreateGameRulesObject" - { - "library" "server" - "windows" "\x8B\x0D\x2A\x2A\x2A\x2A\x85\xC9\x74\x2A\x8B\x01\x8B\x50\x2A\x6A\x01\xFF\xD2" - } - "g_pGameRules" - { - "library" "server" - "linux" "@g_pGameRules" - "mac" "@g_pGameRules" - } - } - } - - /* IServer interface pointer */ - "#default" - { - "Keys" - { - /* Signature for the beginning of IVEngineServer::CreateFakeClient. - * - * The engine binary is not actually scanned in order to look for - * this. SourceHook is used to used to determine the address of the - * function and this signature is used to verify that it contains - * the expected code. A pointer to sv (IServer interface) is used - * here. - */ - "CreateFakeClient_Windows" "\x55\x8B\xEC\x8B\x2A\x2A\x50\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x85\xC0\x75" - } - - "Offsets" - { - /* Offset into IVEngineServer::CreateFakeClient */ - "sv" - { - "windows" "8" - } - } - - "Signatures" - { - /* CBaseServer object for IServer interface */ - "sv" - { - "library" "engine" - "linux" "@sv" - "mac" "@sv" - } - } - } - - /* EntityFactoryDictionary function */ - "#default" - { - "Signatures" - { - "EntityFactory" - { - "library" "server" - "windows" "\xB8\x01\x00\x00\x00\x84\x2A\x2A\x2A\x2A\x2A\x75\x1D\x09\x2A\x2A\x2A\x2A\x2A\xB9\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x68\x2A\x2A\x2A\x2A\xE8\x2A\x2A\x2A\x2A\x83\xC4\x04\xB8\x2A\x2A\x2A\x2A\xC3" - "linux" "@_Z23EntityFactoryDictionaryv" - "mac" "@_Z23EntityFactoryDictionaryv" - } - } } /* CBaseEntityOutput::FireOutput */