From 3b3127c2cffda42af215b4a1777a3b56d1057371 Mon Sep 17 00:00:00 2001 From: Kawe Mazidjatari <48657826+Mauler125@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:36:20 +0200 Subject: [PATCH] VScript: add code class script globals and registraction callbacks Will be used to register custom script class functions. --- src/core/init.cpp | 6 ++ src/game/client/vscript_client.cpp | 95 ++++++++++++++++++++++++++ src/game/client/vscript_client.h | 83 ++++++++++++++++++++++ src/game/server/vscript_server.cpp | 106 +++++++++++++++++++++++++++++ src/game/server/vscript_server.h | 91 +++++++++++++++++++++++++ 5 files changed, 381 insertions(+) diff --git a/src/core/init.cpp b/src/core/init.cpp index a45be9dc..7b867923 100644 --- a/src/core/init.cpp +++ b/src/core/init.cpp @@ -647,6 +647,12 @@ void DetourRegister() // Register detour classes to be searched and hooked. REGISTER(VSquirrel); REGISTER(VScript); REGISTER(VScriptShared); +#ifndef CLIENT_DLL + REGISTER(VScriptServer); +#endif // !CLIENT_DLL +#ifndef DEDICATED + REGISTER(VScriptClient); +#endif // !DEDICATED // Squirrel REGISTER(VSquirrelAPI); diff --git a/src/game/client/vscript_client.cpp b/src/game/client/vscript_client.cpp index e91fa0bc..673b2577 100644 --- a/src/game/client/vscript_client.cpp +++ b/src/game/client/vscript_client.cpp @@ -513,3 +513,98 @@ static ConVar promo_version_accepted("promo_version_accepted", "0", FCVAR_RELEAS static ConVar player_setting_damage_closes_deathbox_menu("player_setting_damage_closes_deathbox_menu", "1", FCVAR_ARCHIVE | FCVAR_RELEASE, "Controls whether death box automatically closes when taking damage (used for menus)."); static ConVar show_motd_on_server_first_join("show_motd_on_server_first_join", "0", FCVAR_ARCHIVE | FCVAR_RELEASE, "Controls whether or not the server message of the day shows on first join for that server."); + +//--------------------------------------------------------------------------------- +// Purpose: script code class function registration +//--------------------------------------------------------------------------------- +static void Script_RegisterClientEntityClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterClientPlayerClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterClientAIClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterClientWeaponClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterClientProjectileClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterClientTitanSoulClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterClientPlayerDecoyClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterClientFirstPersonProxyClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} + +void VScriptClient::Detour(const bool bAttach) const +{ + DetourSetup(&v_Script_RegisterClientEntityClassFuncs, &Script_RegisterClientEntityClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterClientPlayerClassFuncs, &Script_RegisterClientPlayerClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterClientAIClassFuncs, &Script_RegisterClientAIClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterClientWeaponClassFuncs, &Script_RegisterClientWeaponClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterClientProjectileClassFuncs, &Script_RegisterClientProjectileClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterClientTitanSoulClassFuncs, &Script_RegisterClientTitanSoulClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterClientPlayerDecoyClassFuncs, &Script_RegisterClientPlayerDecoyClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterClientFirstPersonProxyClassFuncs, &Script_RegisterClientFirstPersonProxyClassFuncs, bAttach); +} diff --git a/src/game/client/vscript_client.h b/src/game/client/vscript_client.h index a2066ba4..db04913c 100644 --- a/src/game/client/vscript_client.h +++ b/src/game/client/vscript_client.h @@ -37,4 +37,87 @@ void Script_RegisterCoreClientFunctions(CSquirrelVM* s); s->RegisterFunction(#functionName, MKSTRING(Script_##functionName), \ helpString, returnType, parameters, VScriptCode::Client::##functionName); \ +inline void (*v_Script_RegisterClientEntityClassFuncs)(); +inline void (*v_Script_RegisterClientPlayerClassFuncs)(); +inline void (*v_Script_RegisterClientAIClassFuncs)(); +inline void (*v_Script_RegisterClientWeaponClassFuncs)(); +inline void (*v_Script_RegisterClientProjectileClassFuncs)(); +inline void (*v_Script_RegisterClientTitanSoulClassFuncs)(); +inline void (*v_Script_RegisterClientPlayerDecoyClassFuncs)(); +inline void (*v_Script_RegisterClientFirstPersonProxyClassFuncs)(); + +inline ScriptClassDescriptor_t* g_clientScriptEntityStruct; +inline ScriptClassDescriptor_t* g_clientScriptPlayerStruct; +inline ScriptClassDescriptor_t* g_clientScriptAIStruct; +inline ScriptClassDescriptor_t* g_clientScriptWeaponStruct; +inline ScriptClassDescriptor_t* g_clientScriptProjectileStruct; +inline ScriptClassDescriptor_t* g_clientScriptTitanSoulStruct; +inline ScriptClassDescriptor_t* g_clientScriptPlayerDecoyStruct; +inline ScriptClassDescriptor_t* g_clientScriptFirstPersonProxyStruct; + +/////////////////////////////////////////////////////////////////////////////// +class VScriptClient : public IDetour +{ + virtual void GetAdr(void) const + { + LogFunAdr("Script_RegisterClientEntityClassFuncs", v_Script_RegisterClientEntityClassFuncs); + LogFunAdr("Script_RegisterClientPlayerClassFuncs", v_Script_RegisterClientPlayerClassFuncs); + LogFunAdr("Script_RegisterClientAIClassFuncs", v_Script_RegisterClientAIClassFuncs); + LogFunAdr("Script_RegisterClientWeaponClassFuncs", v_Script_RegisterClientWeaponClassFuncs); + LogFunAdr("Script_RegisterClientProjectileClassFuncs", v_Script_RegisterClientProjectileClassFuncs); + LogFunAdr("Script_RegisterClientTitanSoulClassFuncs", v_Script_RegisterClientTitanSoulClassFuncs); + LogFunAdr("Script_RegisterClientPlayerDecoyClassFuncs", v_Script_RegisterClientPlayerDecoyClassFuncs); + LogFunAdr("Script_RegisterClientFirstPersonProxyClassFuncs", v_Script_RegisterClientFirstPersonProxyClassFuncs); + + LogVarAdr("g_clientScriptEntityStruct", g_clientScriptEntityStruct); + LogVarAdr("g_clientScriptPlayerStruct", g_clientScriptPlayerStruct); + LogVarAdr("g_clientScriptAIStruct", g_clientScriptAIStruct); + LogVarAdr("g_clientScriptWeaponStruct", g_clientScriptWeaponStruct); + LogVarAdr("g_clientScriptProjectileStruct", g_clientScriptProjectileStruct); + LogVarAdr("g_clientScriptTitanSoulStruct", g_clientScriptTitanSoulStruct); + LogVarAdr("g_clientScriptPlayerDecoyStruct", g_clientScriptPlayerDecoyStruct); + LogVarAdr("g_clientScriptFirstPersonProxyStruct", g_clientScriptFirstPersonProxyStruct); + } + virtual void GetFun(void) const + { + g_GameDll.FindPatternSIMD("40 55 48 8B EC 48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? C6 05 ?? ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 C7 05") + .GetPtr(v_Script_RegisterClientEntityClassFuncs); + + g_GameDll.FindPatternSIMD("40 55 48 8B EC 48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? C6 05 ?? ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 C7 05 ?? ?? ?? ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 C8 48 6B C1 ?? 48 8D 0D ?? ?? ?? ?? 48 03 05 ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C6 40 ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 89 08 48 8D 0D ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 C8 48 6B C1 ?? 48 8D 0D ?? ?? ?? ?? 48 03 05 ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C6 40 ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 89 08 48 8D 0D ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 C8 4C 8D 45 ?? 48 6B D9 ?? 48 8D 05") + .GetPtr(v_Script_RegisterClientPlayerClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 63 1D") + .GetPtr(v_Script_RegisterClientAIClassFuncs); + + g_GameDll.FindPatternSIMD("40 55 48 8B EC 48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? C6 05 ?? ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 C7 05 ?? ?? ?? ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 C8 48 6B C1 ?? 48 8D 0D ?? ?? ?? ?? 48 03 05 ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C6 40 ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 89 08 48 8D 0D ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 C8 48 6B C1 ?? 48 8D 0D ?? ?? ?? ?? 48 03 05 ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C6 40 ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 89 08 48 8D 0D ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 C8 4C 8D 45 ?? 48 6B D9 ?? C7 45") + .GetPtr(v_Script_RegisterClientWeaponClassFuncs); + + g_GameDll.FindPatternSIMD("48 8B C4 48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 48 89 58 ?? 48 63 1D ?? ?? ?? ?? 48 89 68 ?? 33 ED 48 89 70 ?? 48 89 78 ?? 4C 89 60 ?? 4C 89 68 ?? 4C 89 70 ?? 44 8D 75 ?? 4C 89 78 ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 8D 43 ?? 4C 63 C8 49 8B C1 C6 05 ?? ?? ?? ?? ?? 48 2B C1 48 89 2D ?? ?? ?? ?? 48 85 C0 0F 8E ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 4D 85 C0 0F 88 ?? ?? ?? ?? 74 ?? 49 8D 49 ?? 48 8B C1 48 99 49 F7 F8 4C 2B C2 4C 03 C1 EB ?? 48 85 C9 4C 8B C1 4D 0F 44 C6 4D 3B C1 7D ?? 4D 03 C0 4D 3B C1 7C ?? 4D 3B C1 7D ?? 4D 85 C0 75 ?? 4D 85 C9 79 ?? 49 C7 C0 ?? ?? ?? ?? EB ?? 4B 8D 04 08 48 99 48 2B C2 48 D1 F8 4C 8B C0 49 3B C1 7C ?? 48 8B 15 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 4C 89 05 ?? ?? ?? ?? 48 85 D2 74 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 48 8B 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 08 48 8B C8 4D 6B C0 ?? 41 FF 51 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 49 6B F8 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 00 48 8B D7 48 8B C8 41 FF 50 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 48 8B 15 ?? ?? ?? ?? FF 05 ?? ?? ?? ?? 4C 8D 2D") + .GetPtr(v_Script_RegisterClientProjectileClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 6C 24 ?? 33 ED 48 89 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 89 74 24 ?? 48 89 7C 24 ?? 48 63 3D ?? ?? ?? ?? 4C 89 74 24 ?? 44 8D 75 ?? C6 05 ?? ?? ?? ?? ?? 48 89 2D ?? ?? ?? ?? 8D 47 ?? 4C 63 C0 49 8B C0 48 2B C1 48 85 C0 0F 8E ?? ?? ?? ?? 4C 8B 0D ?? ?? ?? ?? 4D 85 C9 0F 88 ?? ?? ?? ?? 74 ?? 49 8D 48 ?? 48 8B C1 48 99 49 F7 F9 48 2B CA 49 03 C9 EB ?? 48 85 C9 49 0F 44 CE 49 3B C8 7D ?? 48 03 C9 49 3B C8 7C ?? 49 3B C8 7D ?? 48 85 C9 75 ?? 4D 85 C0 79 ?? 48 C7 C1 ?? ?? ?? ?? EB ?? 0F 1F 40 ?? 0F 1F 84 00 ?? ?? ?? ?? 4A 8D 04 01 48 99 48 2B C2 48 D1 F8 48 8B C8 49 3B C0 7C ?? 48 8B 15 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 89 0D ?? ?? ?? ?? 48 85 D2 74 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 48 8B 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 08 4C 6B C1 ?? 48 8B C8 41 FF 51 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 48 6B D9 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 00 48 8B D3 48 8B C8 41 FF 50 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 48 8B 15 ?? ?? ?? ?? FF 05 ?? ?? ?? ?? 48 8D 35") + .GetPtr(v_Script_RegisterClientTitanSoulClassFuncs); + + g_GameDll.FindPatternSIMD("80 3D ?? ?? ?? ?? ?? 75 ?? 48 8D 05 ?? ?? ?? ?? C6 05 ?? ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 C7 05 ?? ?? ?? ?? ?? ?? ?? ?? C3 CC CC CC 48 8D 05 ?? ?? ?? ?? C3 CC CC CC CC CC CC CC CC 48 89 5C 24") + .GetPtr(v_Script_RegisterClientPlayerDecoyClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 74 24 ?? 33 F6 48 89 05 ?? ?? ?? ?? 48 89 7C 24 ?? 48 63 3D ?? ?? ?? ?? 4C 89 74 24 ?? 8D 6E ?? 4C 8D 35 ?? ?? ?? ?? C6 05 ?? ?? ?? ?? ?? 4C 89 35 ?? ?? ?? ?? 8D 47 ?? 48 89 35 ?? ?? ?? ?? 4C 63 C0") + .GetPtr(v_Script_RegisterClientFirstPersonProxyClassFuncs); + } + virtual void GetVar(void) const + { + CMemory(v_Script_RegisterClientEntityClassFuncs).FindPatternSelf("48 89 05", CMemory::Direction::DOWN, 150, 2).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_clientScriptEntityStruct); + CMemory(v_Script_RegisterClientPlayerClassFuncs).FindPatternSelf("48 89 05", CMemory::Direction::DOWN, 150, 2).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_clientScriptPlayerStruct); + CMemory(v_Script_RegisterClientAIClassFuncs).FindPatternSelf("48 89 05", CMemory::Direction::DOWN, 150, 2).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_clientScriptAIStruct); + CMemory(v_Script_RegisterClientWeaponClassFuncs).FindPatternSelf("48 89 05", CMemory::Direction::DOWN, 150, 2).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_clientScriptWeaponStruct); + CMemory(v_Script_RegisterClientProjectileClassFuncs).FindPatternSelf("48 89 05", CMemory::Direction::DOWN, 150, 2).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_clientScriptProjectileStruct); + CMemory(v_Script_RegisterClientTitanSoulClassFuncs).FindPatternSelf("48 89 05", CMemory::Direction::DOWN, 150, 2).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_clientScriptTitanSoulStruct); + CMemory(v_Script_RegisterClientPlayerDecoyClassFuncs).FindPatternSelf("48 89 05", CMemory::Direction::DOWN, 150, 2).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_clientScriptPlayerDecoyStruct); + CMemory(v_Script_RegisterClientFirstPersonProxyClassFuncs).FindPatternSelf("48 89 05", CMemory::Direction::DOWN, 150, 2).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_clientScriptFirstPersonProxyStruct); + } + virtual void GetCon(void) const { } + virtual void Detour(const bool bAttach) const; +}; +/////////////////////////////////////////////////////////////////////////////// + #endif // VSCRIPT_CLIENT_H diff --git a/src/game/server/vscript_server.cpp b/src/game/server/vscript_server.cpp index 0ca711d9..dc23e4bd 100644 --- a/src/game/server/vscript_server.cpp +++ b/src/game/server/vscript_server.cpp @@ -334,3 +334,109 @@ void Script_RegisterAdminPanelFunctions(CSquirrelVM* s) DEFINE_SERVER_SCRIPTFUNC_NAMED(s, UnbanPlayer, "Unbans a player from the server by nucleus id or ip address", "void", "string"); } + +//--------------------------------------------------------------------------------- +// Purpose: script code class function registration +//--------------------------------------------------------------------------------- +static void Script_RegisterServerEntityClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterServerPlayerClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterServerAIClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterServerWeaponClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterServerProjectileClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterServerTitanSoulClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterServerPlayerDecoyClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterServerSpawnpointClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} +//--------------------------------------------------------------------------------- +static void Script_RegisterServerFirstPersonProxyClassFuncs() +{ + static bool initialized = false; + + if (initialized) + return; + + initialized = true; +} + +void VScriptServer::Detour(const bool bAttach) const +{ + DetourSetup(&v_Script_RegisterServerEntityClassFuncs, &Script_RegisterServerEntityClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterServerPlayerClassFuncs, &Script_RegisterServerPlayerClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterServerAIClassFuncs, &Script_RegisterServerAIClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterServerWeaponClassFuncs, &Script_RegisterServerWeaponClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterServerProjectileClassFuncs, &Script_RegisterServerProjectileClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterServerTitanSoulClassFuncs, &Script_RegisterServerTitanSoulClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterServerPlayerDecoyClassFuncs, &Script_RegisterServerPlayerDecoyClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterServerSpawnpointClassFuncs, &Script_RegisterServerSpawnpointClassFuncs, bAttach); + DetourSetup(&v_Script_RegisterServerFirstPersonProxyClassFuncs, &Script_RegisterServerFirstPersonProxyClassFuncs, bAttach); +} diff --git a/src/game/server/vscript_server.h b/src/game/server/vscript_server.h index 8d811524..c2a88224 100644 --- a/src/game/server/vscript_server.h +++ b/src/game/server/vscript_server.h @@ -38,4 +38,95 @@ void Script_RegisterServerEnums(CSquirrelVM* const s); s->RegisterFunction(#functionName, MKSTRING(Script_##functionName), \ helpString, returnType, parameters, VScriptCode::Server::##functionName); \ +inline void (*v_Script_RegisterServerEntityClassFuncs)(); +inline void (*v_Script_RegisterServerPlayerClassFuncs)(); +inline void (*v_Script_RegisterServerAIClassFuncs)(); +inline void (*v_Script_RegisterServerWeaponClassFuncs)(); +inline void (*v_Script_RegisterServerProjectileClassFuncs)(); +inline void (*v_Script_RegisterServerTitanSoulClassFuncs)(); +inline void (*v_Script_RegisterServerPlayerDecoyClassFuncs)(); +inline void (*v_Script_RegisterServerSpawnpointClassFuncs)(); +inline void (*v_Script_RegisterServerFirstPersonProxyClassFuncs)(); + +inline ScriptClassDescriptor_t* g_serverScriptEntityStruct; +inline ScriptClassDescriptor_t* g_serverScriptPlayerStruct; +inline ScriptClassDescriptor_t* g_serverScriptAIStruct; +inline ScriptClassDescriptor_t* g_serverScriptWeaponStruct; +inline ScriptClassDescriptor_t* g_serverScriptProjectileStruct; +inline ScriptClassDescriptor_t* g_serverScriptTitanSoulStruct; +inline ScriptClassDescriptor_t* g_serverScriptPlayerDecoyStruct; +inline ScriptClassDescriptor_t* g_serverScriptSpawnpointStruct; +inline ScriptClassDescriptor_t* g_serverScriptFirstPersonProxyStruct; + +/////////////////////////////////////////////////////////////////////////////// +class VScriptServer : public IDetour +{ + virtual void GetAdr(void) const + { + LogFunAdr("Script_RegisterServerEntityClassFuncs", v_Script_RegisterServerEntityClassFuncs); + LogFunAdr("Script_RegisterServerPlayerClassFuncs", v_Script_RegisterServerPlayerClassFuncs); + LogFunAdr("Script_RegisterServerAIClassFuncs", v_Script_RegisterServerAIClassFuncs); + LogFunAdr("Script_RegisterServerWeaponClassFuncs", v_Script_RegisterServerWeaponClassFuncs); + LogFunAdr("Script_RegisterServerProjectileClassFuncs", v_Script_RegisterServerProjectileClassFuncs); + LogFunAdr("Script_RegisterServerTitanSoulClassFuncs", v_Script_RegisterServerTitanSoulClassFuncs); + LogFunAdr("Script_RegisterServerPlayerDecoyClassFuncs", v_Script_RegisterServerPlayerDecoyClassFuncs); + LogFunAdr("Script_RegisterServerSpawnpointClassFuncs", v_Script_RegisterServerSpawnpointClassFuncs); + LogFunAdr("Script_RegisterServerFirstPersonProxyClassFuncs", v_Script_RegisterServerFirstPersonProxyClassFuncs); + + LogVarAdr("g_serverScriptEntityStruct", g_serverScriptEntityStruct); + LogVarAdr("g_serverScriptPlayerStruct", g_serverScriptPlayerStruct); + LogVarAdr("g_serverScriptAIStruct", g_serverScriptAIStruct); + LogVarAdr("g_serverScriptWeaponStruct", g_serverScriptWeaponStruct); + LogVarAdr("g_serverScriptProjectileStruct", g_serverScriptProjectileStruct); + LogVarAdr("g_serverScriptTitanSoulStruct", g_serverScriptTitanSoulStruct); + LogVarAdr("g_serverScriptPlayerDecoyStruct", g_serverScriptPlayerDecoyStruct); + LogVarAdr("g_serverScriptSpawnpointStruct", g_serverScriptSpawnpointStruct); + LogVarAdr("g_serverScriptFirstPersonProxyStruct", g_serverScriptFirstPersonProxyStruct); + } + virtual void GetFun(void) const + { + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? C6 05 ?? ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 33 D2 48 8D 05 ?? ?? ?? ?? 48 C7 05") + .GetPtr(v_Script_RegisterServerEntityClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 05 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? C6 05 ?? ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 33 D2 48 8D 05 ?? ?? ?? ?? 48 89 05") + .GetPtr(v_Script_RegisterServerPlayerClassFuncs); + + g_GameDll.FindPatternSIMD("40 55 48 8B EC 48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 05 ?? ?? ?? ?? 48 8D 15 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? C6 05") + .GetPtr(v_Script_RegisterServerAIClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 5C 24 ?? 48 89 05 ?? ?? ?? ?? 48 8D 15 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? C6 05 ?? ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 33 C9 48 8D 05 ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? B0 ?? 48 89 15 ?? ?? ?? ?? 48 0F BE C0 48 8D 52 ?? 48 03 C1 48 69 C8 ?? ?? ?? ?? 48 8B C1 48 C1 E8 ?? 48 33 C8 0F B6 02 84 C0 75 ?? 48 8D 15 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8D 0D ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 C8 48 6B C1 ?? 48 8D 0D ?? ?? ?? ?? 48 03 05 ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? 48 89 08 48 8D 0D ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? 48 89 48 ?? 48 8D 0D ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C6 40 ?? ?? 48 C7 40 ?? ?? ?? ?? ?? 48 C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? C7 40 ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 C8 48 6B C1") + .GetPtr(v_Script_RegisterServerWeaponClassFuncs); + + g_GameDll.FindPatternSIMD("48 8B C4 48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 89 58 ?? 48 8D 15 ?? ?? ?? ?? 48 89 68 ?? 33 ED 48 89 70 ?? 8B CD 48 89 78 ?? 4C 89 60 ?? 4C 89 68 ?? 4C 89 70 ?? 4C 89 78 ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? B0 ?? C6 05 ?? ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 48 0F BE C0 48 8D 52 ?? 48 03 C1 48 69 C8 ?? ?? ?? ?? 48 8B C1 48 C1 E8 ?? 48 33 C8 0F B6 02 84 C0 75 ?? 48 8D 15 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 1D ?? ?? ?? ?? 41 BE ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 8D 43 ?? 4C 63 C8") + .GetPtr(v_Script_RegisterServerProjectileClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 89 5C 24 ?? 48 8D 05 ?? ?? ?? ?? 48 89 6C 24 ?? 48 8D 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 33 ED 48 89 74 24 ?? 48 8D 05 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 8B CD 48 8D 05 ?? ?? ?? ?? 48 89 7C 24 ?? 48 89 05 ?? ?? ?? ?? B0 ?? 4C 89 74 24 ?? 4C 89 7C 24 ?? C6 05 ?? ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 0F 1F 44 00 ?? 48 0F BE C0 48 8D 52 ?? 48 03 C1 48 69 C8 ?? ?? ?? ?? 48 8B C1 48 C1 E8 ?? 48 33 C8 0F B6 02 84 C0 75 ?? 48 8D 15 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 1D") + .GetPtr(v_Script_RegisterServerTitanSoulClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 89 5C 24 ?? 48 8D 05 ?? ?? ?? ?? 48 89 6C 24 ?? 48 8D 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 33 ED 48 8D 05 ?? ?? ?? ?? 48 89 74 24 ?? 48 89 05 ?? ?? ?? ?? 8B CD 48 8D 05 ?? ?? ?? ?? 48 89 7C 24 ?? 48 89 05 ?? ?? ?? ?? B0 ?? 4C 89 74 24 ?? C6 05 ?? ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 66 66 0F 1F 84 00 ?? ?? ?? ?? 48 0F BE C0 48 8D 52 ?? 48 03 C1 48 69 C8 ?? ?? ?? ?? 48 8B C1 48 C1 E8 ?? 48 33 C8 0F B6 02 84 C0 75 ?? 48 8D 15 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 3D ?? ?? ?? ?? 41 BE ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 8D 47 ?? 4C 63 C8 49 8B C1 48 2B C1 48 85 C0 0F 8E ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 4D 85 C0 0F 88 ?? ?? ?? ?? 74 ?? 49 8D 49 ?? 48 8B C1 48 99 49 F7 F8 4C 2B C2 4C 03 C1 EB ?? 48 85 C9 4C 8B C1 4D 0F 44 C6 4D 3B C1 7D ?? 0F 1F 00 4D 03 C0 4D 3B C1 7C ?? 4D 3B C1 7D ?? 4D 85 C0 75 ?? 4D 85 C9 79 ?? 49 C7 C0 ?? ?? ?? ?? EB ?? 4B 8D 04 08 48 99 48 2B C2 48 D1 F8 4C 8B C0 49 3B C1 7C ?? 48 8B 15 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 4C 89 05 ?? ?? ?? ?? 48 85 D2 74 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 48 8B 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 08 48 8B C8 4D 6B C0 ?? 41 FF 51 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 49 6B D8 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 00 48 8B D3 48 8B C8 41 FF 50 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 48 8B 15 ?? ?? ?? ?? FF 05 ?? ?? ?? ?? 48 6B CF ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 66 44 89 74 11 ?? C7 44 11 ?? ?? ?? ?? ?? 48 89 6C 11 ?? 89 6C 11 ?? 48 8D 15 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 48 89 54 01 ?? 48 8D 15 ?? ?? ?? ?? 48 89 14 01 48 8D 15 ?? ?? ?? ?? 48 89 54 01 ?? 48 8D 15 ?? ?? ?? ?? 48 89 54 01 ?? 48 89 6C 01 ?? 48 89 6C 01 ?? 40 88 6C 01 ?? 48 89 6C 01 ?? 48 89 6C 01 ?? 89 6C 01 ?? 48 63 3D ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 8D 47 ?? 4C 63 C8 49 8B C1 48 2B C1 48 85 C0 0F 8E ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 4D 85 C0 0F 88 ?? ?? ?? ?? 74 ?? 49 8D 49 ?? 48 8B C1 48 99 49 F7 F8 4C 2B C2 4C 03 C1 EB ?? 48 85 C9 4C 8B C1 4D 0F 44 C6 4D 3B C1 7D ?? 90 4D 03 C0 4D 3B C1 7C ?? 4D 3B C1 7D ?? 4D 85 C0 75 ?? 4D 85 C9 79 ?? 49 C7 C0 ?? ?? ?? ?? EB ?? 4B 8D 04 08 48 99 48 2B C2 48 D1 F8 4C 8B C0 49 3B C1 7C ?? 48 8B 15 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 4C 89 05 ?? ?? ?? ?? 48 85 D2 74 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 48 8B 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 08 48 8B C8 4D 6B C0 ?? 41 FF 51 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 49 6B D8 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 00 48 8B D3 48 8B C8 41 FF 50 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 48 8B 15 ?? ?? ?? ?? FF 05 ?? ?? ?? ?? 48 6B CF ?? 48 89 6C 11") + .GetPtr(v_Script_RegisterServerPlayerDecoyClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 89 5C 24 ?? 48 8D 05 ?? ?? ?? ?? 48 89 6C 24 ?? 48 8D 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 33 ED 48 8D 05 ?? ?? ?? ?? 48 89 74 24 ?? 48 89 05 ?? ?? ?? ?? 8B CD 48 8D 05 ?? ?? ?? ?? 48 89 7C 24 ?? 48 89 05 ?? ?? ?? ?? B0 ?? 4C 89 74 24 ?? C6 05 ?? ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 66 66 0F 1F 84 00 ?? ?? ?? ?? 48 0F BE C0 48 8D 52 ?? 48 03 C1 48 69 C8 ?? ?? ?? ?? 48 8B C1 48 C1 E8 ?? 48 33 C8 0F B6 02 84 C0 75 ?? 48 8D 15 ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 63 3D ?? ?? ?? ?? 41 BE ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 8D 47 ?? 4C 63 C8 49 8B C1 48 2B C1 48 85 C0 0F 8E ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 4D 85 C0 0F 88 ?? ?? ?? ?? 74 ?? 49 8D 49 ?? 48 8B C1 48 99 49 F7 F8 4C 2B C2 4C 03 C1 EB ?? 48 85 C9 4C 8B C1 4D 0F 44 C6 4D 3B C1 7D ?? 0F 1F 00 4D 03 C0 4D 3B C1 7C ?? 4D 3B C1 7D ?? 4D 85 C0 75 ?? 4D 85 C9 79 ?? 49 C7 C0 ?? ?? ?? ?? EB ?? 4B 8D 04 08 48 99 48 2B C2 48 D1 F8 4C 8B C0 49 3B C1 7C ?? 48 8B 15 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 4C 89 05 ?? ?? ?? ?? 48 85 D2 74 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 48 8B 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 08 48 8B C8 4D 6B C0 ?? 41 FF 51 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 49 6B D8 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 00 48 8B D3 48 8B C8 41 FF 50 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 48 8B 15 ?? ?? ?? ?? FF 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 6B CF ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 66 44 89 74 11 ?? C7 44 11 ?? ?? ?? ?? ?? 48 89 6C 11 ?? 89 6C 11 ?? 49 8B D6 48 8B 1D ?? ?? ?? ?? 48 03 D9 48 89 43 ?? 48 8D 4B ?? 48 89 6B ?? 48 8D 05 ?? ?? ?? ?? 48 89 03 48 8D 05 ?? ?? ?? ?? 48 89 43 ?? 89 6B ?? 40 88 6B ?? 48 89 6B ?? 48 89 6B ?? 89 6B ?? C7 43 ?? ?? ?? ?? ?? 4C 89 73 ?? E8 ?? ?? ?? ?? 48 63 73 ?? 8D 46 ?? 48 63 D0 8B C6 48 2B 53 ?? 48 85 D2 7E ?? 48 8D 4B ?? E8 ?? ?? ?? ?? 8B 43 ?? FF C0 89 43 ?? 48 8B 43 ?? C7 04 B0 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 89 43 ?? 48 63 3D ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 8D 47 ?? 4C 63 C8 49 8B C1 48 2B C1 48 85 C0 0F 8E ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 4D 85 C0 0F 88 ?? ?? ?? ?? 74 ?? 49 8D 49 ?? 48 8B C1 48 99 49 F7 F8 4C 2B C2 4C 03 C1 EB ?? 48 85 C9 4C 8B C1 4D 0F 44 C6 4D 3B C1 7D ?? 90 4D 03 C0 4D 3B C1 7C ?? 4D 3B C1 7D ?? 4D 85 C0 75 ?? 4D 85 C9 79 ?? 49 C7 C0 ?? ?? ?? ?? EB ?? 4B 8D 04 08 48 99 48 2B C2 48 D1 F8 4C 8B C0 49 3B C1 7C ?? 48 8B 15 ?? ?? ?? ?? 48 8B 05 ?? ?? ?? ?? 4C 89 05 ?? ?? ?? ?? 48 85 D2 74 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 4C 8B 05 ?? ?? ?? ?? 48 8B 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 08 48 8B C8 4D 6B C0 ?? 41 FF 51 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 49 6B D8 ?? 48 85 C0 75 ?? E8 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 8B 00 48 8B D3 48 8B C8 41 FF 50 ?? 48 8B D0 48 89 05 ?? ?? ?? ?? EB ?? 48 8B 15 ?? ?? ?? ?? FF 05 ?? ?? ?? ?? 48 8D 05 ?? ?? ?? ?? 48 6B CF ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 48 89 6C 11 ?? 66 44 89 74 11 ?? C7 44 11 ?? ?? ?? ?? ?? 48 89 6C 11 ?? 89 6C 11 ?? BA ?? ?? ?? ?? 48 8B 3D ?? ?? ?? ?? 48 03 F9 48 89 47 ?? 48 8D 4F ?? 48 89 6F ?? 48 8D 05 ?? ?? ?? ?? 48 89 07 48 8D 05 ?? ?? ?? ?? 48 89 47 ?? 89 6F ?? 40 88 6F ?? 48 89 6F ?? 48 89 6F ?? 89 6F ?? 44 89 77") + .GetPtr(v_Script_RegisterServerSpawnpointClassFuncs); + + g_GameDll.FindPatternSIMD("48 83 EC ?? 80 3D ?? ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 48 89 6C 24 ?? 48 8D 05 ?? ?? ?? ?? 48 89 74 24 ?? 48 8D 15 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 33 F6 48 8D 05 ?? ?? ?? ?? 48 89 7C 24 ?? 4C 89 74 24 ?? 8B CE 4C 8D 35 ?? ?? ?? ?? 48 89 05 ?? ?? ?? ?? 4C 89 35 ?? ?? ?? ?? B0 ?? C6 05 ?? ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 48 89 15 ?? ?? ?? ?? 48 0F BE C0 48 8D 52 ?? 48 03 C1 48 69 C8 ?? ?? ?? ?? 48 8B C1 48 C1 E8 ?? 48 33 C8 0F B6 02 84 C0 75 ?? 48 8D 15 ?? ?? ?? ?? 48 89 5C 24 ?? E8 ?? ?? ?? ?? 48 63 3D ?? ?? ?? ?? BD ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 8D 47 ?? 4C 63 C0") + .GetPtr(v_Script_RegisterServerFirstPersonProxyClassFuncs); + } + virtual void GetVar(void) const + { + CMemory(v_Script_RegisterServerEntityClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptEntityStruct); + CMemory(v_Script_RegisterServerPlayerClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptPlayerStruct); + CMemory(v_Script_RegisterServerAIClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptAIStruct); + CMemory(v_Script_RegisterServerWeaponClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptWeaponStruct); + CMemory(v_Script_RegisterServerProjectileClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptProjectileStruct); + CMemory(v_Script_RegisterServerTitanSoulClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptTitanSoulStruct); + CMemory(v_Script_RegisterServerPlayerDecoyClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptPlayerDecoyStruct); + CMemory(v_Script_RegisterServerSpawnpointClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptSpawnpointStruct); + CMemory(v_Script_RegisterServerFirstPersonProxyClassFuncs).Offset(0x50).FindPatternSelf("48 8D 15", CMemory::Direction::DOWN, 150).ResolveRelativeAddressSelf(0x3, 0x7).GetPtr(g_serverScriptFirstPersonProxyStruct); + } + virtual void GetCon(void) const { } + virtual void Detour(const bool bAttach) const; +}; +/////////////////////////////////////////////////////////////////////////////// + #endif // VSCRIPT_SERVER_H