From 2be8cd138c40611c419edc4bbe01fc50018f596a Mon Sep 17 00:00:00 2001 From: ineedbots Date: Tue, 29 Jun 2021 15:02:28 -0600 Subject: [PATCH] Scheduler works --- src/Components/Modules/Scheduler.cpp | 20 ++++++++++++++------ src/Components/Modules/Scheduler.hpp | 8 +++++--- src/Game/Game.cpp | 8 ++++++++ src/Game/Game.hpp | 8 ++++++++ 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/src/Components/Modules/Scheduler.cpp b/src/Components/Modules/Scheduler.cpp index 6c94f28..b2f0f6a 100644 --- a/src/Components/Modules/Scheduler.cpp +++ b/src/Components/Modules/Scheduler.cpp @@ -43,7 +43,7 @@ namespace Components void Scheduler::ReadyHandler() { - if (!false) + if (!*Game::isDvarSystemActive) { Scheduler::Once(Scheduler::ReadyHandler); } @@ -55,7 +55,7 @@ namespace Components } } - void Scheduler::FrameHandler() + void Scheduler::FrameHandler([[maybe_unused]]bool isRenderer) { Scheduler::DelaySignal(); Scheduler::FrameSignal(); @@ -95,10 +95,11 @@ namespace Components signal(); } - void Scheduler::ShutdownStub(int num) + void Scheduler::ShutdownStub(const char* str) { Scheduler::ShutdownSignal(); - //Utils::Hook::Call(0x46B370)(num); + + Game::Com_Printf(str); } void Scheduler::OnFrameAsync(Utils::Slot callback) @@ -111,13 +112,20 @@ namespace Components Scheduler::AsyncFrameOnceSignal.connect(callback); } + void Scheduler::GameFrameStub() + { + FrameHandler(); + + Game::Com_DedicatedModified(); + } + Scheduler::Scheduler() { Scheduler::ReadyPassed = false; Scheduler::Once(Scheduler::ReadyHandler); - // hook frames, - //Utils::Hook(0x4D697A, Scheduler::ShutdownStub, HOOK_CALL).install()->quick(); + Utils::Hook(0x4326C5, Scheduler::ShutdownStub, HOOK_CALL).install()->quick(); + Utils::Hook(0x43503D, Scheduler::GameFrameStub, HOOK_CALL).install()->quick(); if (!Loader::IsPerformingUnitTests()) { diff --git a/src/Components/Modules/Scheduler.hpp b/src/Components/Modules/Scheduler.hpp index 7b187b8..a94bb66 100644 --- a/src/Components/Modules/Scheduler.hpp +++ b/src/Components/Modules/Scheduler.hpp @@ -21,8 +21,6 @@ namespace Components static void OnFrameAsync(Utils::Slot callback); static void OnceAsync(Utils::Slot callback); - static void FrameHandler(); - private: class DelayedSlot { @@ -49,6 +47,10 @@ namespace Components static void ReadyHandler(); static void DelaySignal(); - static void ShutdownStub(int num); + static void ShutdownStub(const char*); + + static void GameFrameStub(); + + static void FrameHandler(bool = 0); }; } diff --git a/src/Game/Game.cpp b/src/Game/Game.cpp index 351d963..25309c3 100644 --- a/src/Game/Game.cpp +++ b/src/Game/Game.cpp @@ -34,6 +34,10 @@ namespace Game GScr_LoadGameTypeScript_t* GScr_LoadGameTypeScript; G_LoadStructs_t* G_LoadStructs; Sys_Milliseconds_t* Sys_Milliseconds; + Com_Printf_t* Com_Printf; + Com_DedicatedModified_t* Com_DedicatedModified; + + char* isDvarSystemActive; bool IsDedicated() { @@ -48,8 +52,12 @@ namespace Game GScr_LoadGameTypeScript = ASSIGN(GScr_LoadGameTypeScript_t*, 0x503F90); G_LoadStructs = ASSIGN(G_LoadStructs_t*, 0x5118A0); Sys_Milliseconds = ASSIGN(Sys_Milliseconds_t*, 0x435200); + Com_Printf = ASSIGN(Com_Printf_t*, 0x431EE0); + Com_DedicatedModified = ASSIGN(Com_DedicatedModified_t*, 0x434DC0); + isDvarSystemActive = ASSIGN(char*, 0xC5C5C8); + cls = ASSIGN(clientStatic_t*, 0x68A408); svs = ASSIGN(serverStatic_t*, 0xD35700); sv = ASSIGN(server_t*, 0xCD6180); diff --git a/src/Game/Game.hpp b/src/Game/Game.hpp index cf5a72c..e114b88 100644 --- a/src/Game/Game.hpp +++ b/src/Game/Game.hpp @@ -8,6 +8,8 @@ namespace Game void Init(GAMEEXE); bool IsDedicated(); + extern char* isDvarSystemActive; + extern clientStatic_t* cls; extern serverStatic_t* svs; extern server_t* sv; @@ -45,6 +47,12 @@ namespace Game typedef int (Sys_Milliseconds_t)(); extern Sys_Milliseconds_t* Sys_Milliseconds; + + typedef void (Com_DedicatedModified_t)(); + extern Com_DedicatedModified_t* Com_DedicatedModified; + + typedef void(Com_Printf_t)(const char *, ...); + extern Com_Printf_t* Com_Printf; extern unsigned int Scr_GetFunctionHandle(char*, const char*); extern __int16 Scr_ExecThread(int);