@@ -45,18 +45,21 @@ static ISource2ServerConfig* serverconfig = NULL;
4545INetworkServerService* netservice = NULL ;
4646IEngineServiceMgr* enginesvcmgr = NULL ;
4747
48- SH_DECL_HOOK2_void (IServerGameClients, ClientCommand, SH_NOATTRIB, 0 , CPlayerSlot, const CCommand&);
49- SH_DECL_HOOK3_void (IEngineServiceMgr, RegisterLoopMode, SH_NOATTRIB, 0 , const char *, ILoopModeFactory *, void **);
50- SH_DECL_HOOK3_void (IEngineServiceMgr, UnregisterLoopMode, SH_NOATTRIB, 0 , const char *, ILoopModeFactory*, void **);
51- SH_DECL_HOOK0 (ILoopModeFactory, CreateLoopMode, SH_NOATTRIB, 0 , ILoopMode *);
52- SH_DECL_HOOK1_void (ILoopModeFactory, DestroyLoopMode, SH_NOATTRIB, 0 , ILoopMode *);
53- SH_DECL_HOOK2 (ILoopMode, LoopInit, SH_NOATTRIB, 0 , bool , KeyValues*, ILoopModePrerequisiteRegistry *);
54- SH_DECL_HOOK0_void (ILoopMode, LoopShutdown, SH_NOATTRIB, 0 );
55-
5648#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER
5749SH_DECL_HOOK1 (ISource2ServerConfig, AllowDedicatedServers, const , 0 , bool , EUniverse);
5850#endif
5951
52+ Source2Provider::Source2Provider () :
53+ m_RegisterLoopMode(&IEngineServiceMgr::RegisterLoopMode, this , &Source2Provider::Hook_RegisterLoopMode, nullptr ),
54+ m_UnregisterLoopMode(&IEngineServiceMgr::UnregisterLoopMode, this , &Source2Provider::Hook_UnregisterLoopMode, nullptr ),
55+ m_CreateLoopMode(&ILoopModeFactory::CreateLoopMode, this , nullptr , &Source2Provider::Hook_CreateLoopModePost),
56+ m_DestroyLoopMode(&ILoopModeFactory::DestroyLoopMode, this , nullptr , &Source2Provider::Hook_DestroyLoopMode),
57+ m_LoopInit(&ILoopMode::LoopInit, this , nullptr , &Source2Provider::Hook_LoopInitPost),
58+ m_LoopShutdown(&ILoopMode::LoopShutdown, this , nullptr , &Source2Provider::Hook_LoopShutdownPost),
59+ m_ClientCommand(&IServerGameClients::ClientCommand, this , &Source2Provider::Hook_ClientCommand, nullptr )
60+ {
61+ }
62+
6063void Source2Provider::Notify_DLLInit_Pre (CreateInterfaceFn engineFactory,
6164 CreateInterfaceFn serverFactory)
6265{
@@ -138,15 +141,15 @@ void Source2Provider::Notify_DLLInit_Pre(CreateInterfaceFn engineFactory,
138141
139142 if (gameclients)
140143 {
141- SH_ADD_HOOK (IServerGameClients, ClientCommand, gameclients, SH_MEMBER ( this , &Source2Provider::Hook_ClientCommand), false );
144+ m_ClientCommand. Add ( gameclients);
142145 }
143146
144147#ifdef SHOULD_OVERRIDE_ALLOWDEDICATED_SERVER
145148 SH_ADD_VPHOOK (ISource2ServerConfig, AllowDedicatedServers, serverconfig, SH_MEMBER (this , &Source2Provider::Hook_AllowDedicatedServers), false );
146149#endif
147150
148- SH_ADD_HOOK (IEngineServiceMgr, RegisterLoopMode, enginesvcmgr, SH_MEMBER ( this , &Source2Provider::Hook_RegisterLoopMode), false );
149- SH_ADD_HOOK (IEngineServiceMgr, UnregisterLoopMode, enginesvcmgr, SH_MEMBER ( this , &Source2Provider::Hook_UnregisterLoopMode), false );
151+ m_RegisterLoopMode. Add ( enginesvcmgr);
152+ m_UnregisterLoopMode. Add ( enginesvcmgr);
150153}
151154
152155void Source2Provider::Notify_DLLShutdown_Pre ()
@@ -156,12 +159,12 @@ void Source2Provider::Notify_DLLShutdown_Pre()
156159
157160 ConVar_Unregister ();
158161
159- SH_REMOVE_HOOK (IEngineServiceMgr, RegisterLoopMode, enginesvcmgr, SH_MEMBER ( this , &Source2Provider::Hook_RegisterLoopMode), false );
160- SH_REMOVE_HOOK (IEngineServiceMgr, UnregisterLoopMode, enginesvcmgr, SH_MEMBER ( this , &Source2Provider::Hook_UnregisterLoopMode), false );
162+ m_RegisterLoopMode. Remove ( enginesvcmgr);
163+ m_UnregisterLoopMode. Remove ( enginesvcmgr);
161164
162165 if (gameclients)
163166 {
164- SH_REMOVE_HOOK (IServerGameClients, ClientCommand, gameclients, SH_MEMBER ( this , &Source2Provider::Hook_ClientCommand), false );
167+ m_ClientCommand. Remove ( gameclients);
165168 }
166169}
167170
@@ -387,48 +390,52 @@ void LocalCommand_Meta(const CCommandContext &, const CCommand& args)
387390 }
388391}
389392
390- void Source2Provider::Hook_RegisterLoopMode (const char *pszLoopModeName, ILoopModeFactory *pLoopModeFactory, void **ppGlobalPointer)
393+ KHook::Return< void > Source2Provider::Hook_RegisterLoopMode (IEngineServiceMgr*, const char *pszLoopModeName, ILoopModeFactory *pLoopModeFactory, void **ppGlobalPointer)
391394{
392395 if (!strcmp (pszLoopModeName, " game" ))
393396 {
394- SH_ADD_HOOK (ILoopModeFactory, CreateLoopMode, pLoopModeFactory, SH_MEMBER ( this , &Source2Provider::Hook_CreateLoopModePost), true );
395- SH_ADD_HOOK (ILoopModeFactory, DestroyLoopMode, pLoopModeFactory, SH_MEMBER ( this , &Source2Provider::Hook_DestroyLoopMode), false );
397+ m_CreateLoopMode. Add ( pLoopModeFactory);
398+ m_DestroyLoopMode. Add ( pLoopModeFactory);
396399
397400 if (nullptr != m_pCallbacks)
398401 {
399402 m_pCallbacks->OnGameInit ();
400403 }
401404 }
405+
406+ return { KHook::Action::Ignore };
402407}
403408
404- void Source2Provider::Hook_UnregisterLoopMode (const char * pszLoopModeName, ILoopModeFactory* pLoopModeFactory, void ** ppGlobalPointer)
409+ KHook::Return< void > Source2Provider::Hook_UnregisterLoopMode (IEngineServiceMgr*, const char * pszLoopModeName, ILoopModeFactory* pLoopModeFactory, void ** ppGlobalPointer)
405410{
406411 if (!strcmp (pszLoopModeName, " game" ))
407412 {
408- SH_REMOVE_HOOK (ILoopModeFactory, CreateLoopMode, pLoopModeFactory, SH_MEMBER ( this , &Source2Provider::Hook_CreateLoopModePost), true );
409- SH_REMOVE_HOOK (ILoopModeFactory, DestroyLoopMode, pLoopModeFactory, SH_MEMBER ( this , &Source2Provider::Hook_DestroyLoopMode), false );
413+ m_CreateLoopMode. Remove ( pLoopModeFactory);
414+ m_DestroyLoopMode. Remove ( pLoopModeFactory);
410415 }
411416
412- RETURN_META (MRES_IGNORED) ;
417+ return { KHook::Action::Ignore } ;
413418}
414419
415- ILoopMode * Source2Provider::Hook_CreateLoopModePost ()
420+ KHook::Return< ILoopMode*> Source2Provider::Hook_CreateLoopModePost (ILoopModeFactory* )
416421{
417- ILoopMode * pLoopMode = META_RESULT_ORIG_RET (ILoopMode * );
418- SH_ADD_HOOK (ILoopMode, LoopInit, pLoopMode, SH_MEMBER ( this , &Source2Provider::Hook_LoopInitPost), true );
419- SH_ADD_HOOK (ILoopMode, LoopShutdown, pLoopMode, SH_MEMBER ( this , &Source2Provider::Hook_LoopShutdownPost), true );
422+ auto pLoopMode = (ILoopMode*) KHook::GetOriginalValuePtr ( );
423+ m_LoopInit. Add ( pLoopMode);
424+ m_LoopShutdown. Add ( pLoopMode);
420425
421426 // Post-hook. Ignored
422- return nullptr ;
427+ return { KHook::Action::Ignore, nullptr } ;
423428}
424429
425- void Source2Provider::Hook_DestroyLoopMode (ILoopMode* pLoopMode)
430+ KHook::Return< void > Source2Provider::Hook_DestroyLoopMode (ILoopModeFactory*, ILoopMode* pLoopMode)
426431{
427- SH_REMOVE_HOOK (ILoopMode, LoopInit, pLoopMode, SH_MEMBER (this , &Source2Provider::Hook_LoopInitPost), true );
428- SH_REMOVE_HOOK (ILoopMode, LoopShutdown, pLoopMode, SH_MEMBER (this , &Source2Provider::Hook_LoopShutdownPost), true );
432+ m_LoopInit.Remove (pLoopMode);
433+ m_LoopShutdown.Remove (pLoopMode);
434+
435+ return { KHook::Action::Ignore };
429436}
430437
431- bool Source2Provider::Hook_LoopInitPost (KeyValues* pKeyValues, ILoopModePrerequisiteRegistry *pRegistry)
438+ KHook::Return< bool > Source2Provider::Hook_LoopInitPost (ILoopMode*, KeyValues* pKeyValues, ILoopModePrerequisiteRegistry *pRegistry)
432439{
433440 if (nullptr != m_pCallbacks)
434441 {
@@ -443,18 +450,20 @@ bool Source2Provider::Hook_LoopInitPost(KeyValues* pKeyValues, ILoopModePrerequi
443450 }
444451
445452 // Post-hook. Ignored
446- return true ;
453+ return { KHook::Action::Ignore } ;
447454}
448455
449- void Source2Provider::Hook_LoopShutdownPost ()
456+ KHook::Return< void > Source2Provider::Hook_LoopShutdownPost (ILoopMode* )
450457{
451458 if (nullptr != m_pCallbacks)
452459 {
453460 m_pCallbacks->OnLevelShutdown ();
454461 }
462+
463+ return { KHook::Action::Ignore };
455464}
456465
457- void Source2Provider::Hook_ClientCommand (CPlayerSlot nSlot, const CCommand& _cmd)
466+ KHook::Return< void > Source2Provider::Hook_ClientCommand (IServerGameClients*, CPlayerSlot nSlot, const CCommand& _cmd)
458467{
459468 GlobCommand cmd (&_cmd);
460469
@@ -465,8 +474,8 @@ void Source2Provider::Hook_ClientCommand(CPlayerSlot nSlot, const CCommand& _cmd
465474 m_pCallbacks->OnCommand_ClientMeta (nSlot, &cmd);
466475 }
467476
468- RETURN_META (MRES_SUPERCEDE) ;
477+ return { KHook::Action::Supercede } ;
469478 }
470479
471- RETURN_META (MRES_IGNORED) ;
480+ return { KHook::Action::Ignore } ;
472481}
0 commit comments