Fix const-ness issue, and stabilise virtual function api

This commit is contained in:
Kenzzer 2025-04-29 14:08:01 +00:00
parent c31229be95
commit 5957edb9df
No known key found for this signature in database
GPG Key ID: 64C3FD4332686DC1
8 changed files with 17 additions and 17 deletions

View File

@ -9,7 +9,7 @@ for sdk_target in MMS.sdk_targets:
binary = MMS.HL2Library(builder, cxx, name, sdk)
binary.compiler.cxxincludes += [os.path.join(builder.sourcePath, 'third_party', 'khook', 'include')]
binary.compiler.defines += ['KHOOK_STANDALONE']
binary.compiler.defines += ['KHOOK_STANDALONE', 'KHOOK_EXPORT']
for task in MMS.libkhook:
if task.target.arch == binary.compiler.target.arch:
binary.compiler.linkflags += [task.binary]

View File

@ -64,9 +64,9 @@ public:
virtual void DLLInit_Post(int *isgdUnload)
{
#ifdef META_IS_SOURCE2
auto mfi = KHook::__GetMFPVtableIndex__(&ISource2ServerConfig::Disconnect);
auto mfi = KHook::GetVtableIndex(&ISource2ServerConfig::Disconnect);
#else
auto mfi = KHook::__GetMFPVtableIndex__(&IServerGameDLL::DLLShutdown);
auto mfi = KHook::GetVtableIndex(&IServerGameDLL::DLLShutdown);
#endif
assert(mfi != -1);
*isgdUnload = mfi;

View File

@ -82,7 +82,7 @@ void SourceProvider::SourceConVarAccessor::RemoveMetamodCommands()
*/
bool SourceProvider::SourceConVarAccessor::InitConCommandBaseList()
{
char *vfunc = (char *)KHook::GetVirtualFunction(&ICvar::GetCommands, icvar);
char *vfunc = (char *)KHook::ExtractMFP(KHook::GetVtableFunction(icvar, &ICvar::GetCommands));
if (*vfunc == '\xE9')
{

View File

@ -143,7 +143,7 @@ void Source2Provider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory,
}
#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER
m_AllowDedicatedServers.Configure(KHook::GetVirtualFunction(&ISource2ServerConfig::AllowDedicatedServers, serverconfig));
m_AllowDedicatedServers.Configure((void*)KHook::ExtractMFP(KHook::GetVtableFunction(serverconfig, &ISource2ServerConfig::AllowDedicatedServers)));
#endif
m_RegisterLoopMode.Add(enginesvcmgr);
@ -247,7 +247,7 @@ const char* Source2Provider::GetGameDescription()
}
#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER
KHook::Return<bool> Source2Provider::Hook_AllowDedicatedServers(ISource2ServerConfig*, EUniverse universe) const
KHook::Return<bool> Source2Provider::Hook_AllowDedicatedServers(const ISource2ServerConfig*, EUniverse universe)
{
return { KHook::Action::Supercede, true };
}

View File

@ -74,7 +74,7 @@ public:
public:
#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER
KHook::Member<ISource2ServerConfig, bool, EUniverse> m_AllowDedicatedServers;
bool Hook_AllowDedicatedServers(ISource2ServerConfig*, EUniverse universe) const;
KHook::Return<bool> Hook_AllowDedicatedServers(const ISource2ServerConfig*, EUniverse universe);
#endif
KHook::Virtual<IEngineServiceMgr, void, const char*, ILoopModeFactory*, void **> m_RegisterLoopMode;
KHook::Return<void> Hook_RegisterLoopMode(IEngineServiceMgr*, const char* pszLoopModeName, ILoopModeFactory *pLoopModeFactory, void **ppGlobalPointer);

View File

@ -614,11 +614,11 @@ mm_PatchDllInit(bool patch)
if (g_is_source2)
{
mfp = KHook::__GetMFPVtableIndex__(&ISource2Server::Init);
mfp = KHook::GetVtableIndex(&ISource2Server::Init);
}
else
{
mfp = KHook::__GetMFPVtableIndex__(&IServerGameDLL::DLLInit);
mfp = KHook::GetVtableIndex(&IServerGameDLL::DLLInit);
}
assert(mfp != -1);
@ -659,11 +659,11 @@ mm_PatchDllShutdown()
if (g_is_source2)
{
mfp = KHook::__GetMFPVtableIndex__(&ISource2ServerConfig::Disconnect);
mfp = KHook::GetVtableIndex(&ISource2ServerConfig::Disconnect);
}
else
{
mfp = KHook::__GetMFPVtableIndex__(&IServerGameDLL::DLLShutdown);
mfp = KHook::GetVtableIndex(&IServerGameDLL::DLLShutdown);
}
assert(mfp != -1);
@ -689,7 +689,7 @@ mm_PatchAllowDedicated(bool patch)
void **vtable_src;
void **vtable_dest;
std::int32_t mfp = KHook::__GetMFPVtableIndex__(&ISource2ServerConfig::AllowDedicatedServers);
std::int32_t mfp = KHook::GetVtableIndex(&ISource2ServerConfig::AllowDedicatedServers);
assert(mfp != -1);
@ -721,7 +721,7 @@ mm_PatchConnect(bool patch)
void **vtable_src;
void **vtable_dest;
std::int32_t mfp = KHook::__GetMFPVtableIndex__(&ISource2ServerConfig::Connect);
std::int32_t mfp = KHook::GetVtableIndex(&ISource2ServerConfig::Connect);
vtable_src = (void **) *(void **) &is2sc_thunk;
vtable_dest = (void **) *(void **) config_iface;

View File

@ -112,8 +112,8 @@ public:
void **vtable_src;
IRandomThings sample;
auto mfp_dest = KHook::__GetMFPVtableIndex__(&ServerPlugin::ClientCommand);
auto mfp_src = KHook::__GetMFPVtableIndex__(&IRandomThings::ClientCommand);
auto mfp_dest = KHook::GetVtableIndex(&ServerPlugin::ClientCommand);
auto mfp_src = KHook::GetVtableIndex(&IRandomThings::ClientCommand);
assert(mfp_dest != -1);
assert(mfp_src != -1);
@ -134,7 +134,7 @@ public:
&& mm_backend != MMBackend_CSGO
&& mm_backend != MMBackend_MCV)
{
auto mfp_fconnect = KHook::__GetMFPVtableIndex__(&ServerPlugin::ClientFullyConnect);
auto mfp_fconnect = KHook::GetVtableIndex(&ServerPlugin::ClientFullyConnect);
assert(mfp_fconnect != -1);

2
third_party/khook vendored

@ -1 +1 @@
Subproject commit d95c617b67bbffb519b0c788c47d2924ba39cd73
Subproject commit b95ce7df00cf3bbcbaf4d65a60c1d55d2a3b9c8f