Scheduler works

This commit is contained in:
ineedbots 2021-06-29 15:02:28 -06:00
parent fbeca33cfb
commit 2be8cd138c
4 changed files with 35 additions and 9 deletions

View File

@ -43,7 +43,7 @@ namespace Components
void Scheduler::ReadyHandler() void Scheduler::ReadyHandler()
{ {
if (!false) if (!*Game::isDvarSystemActive)
{ {
Scheduler::Once(Scheduler::ReadyHandler); Scheduler::Once(Scheduler::ReadyHandler);
} }
@ -55,7 +55,7 @@ namespace Components
} }
} }
void Scheduler::FrameHandler() void Scheduler::FrameHandler([[maybe_unused]]bool isRenderer)
{ {
Scheduler::DelaySignal(); Scheduler::DelaySignal();
Scheduler::FrameSignal(); Scheduler::FrameSignal();
@ -95,10 +95,11 @@ namespace Components
signal(); signal();
} }
void Scheduler::ShutdownStub(int num) void Scheduler::ShutdownStub(const char* str)
{ {
Scheduler::ShutdownSignal(); Scheduler::ShutdownSignal();
//Utils::Hook::Call<void(int)>(0x46B370)(num);
Game::Com_Printf(str);
} }
void Scheduler::OnFrameAsync(Utils::Slot<Scheduler::Callback> callback) void Scheduler::OnFrameAsync(Utils::Slot<Scheduler::Callback> callback)
@ -111,13 +112,20 @@ namespace Components
Scheduler::AsyncFrameOnceSignal.connect(callback); Scheduler::AsyncFrameOnceSignal.connect(callback);
} }
void Scheduler::GameFrameStub()
{
FrameHandler();
Game::Com_DedicatedModified();
}
Scheduler::Scheduler() Scheduler::Scheduler()
{ {
Scheduler::ReadyPassed = false; Scheduler::ReadyPassed = false;
Scheduler::Once(Scheduler::ReadyHandler); Scheduler::Once(Scheduler::ReadyHandler);
// hook frames, Utils::Hook(0x4326C5, Scheduler::ShutdownStub, HOOK_CALL).install()->quick();
//Utils::Hook(0x4D697A, Scheduler::ShutdownStub, HOOK_CALL).install()->quick(); Utils::Hook(0x43503D, Scheduler::GameFrameStub, HOOK_CALL).install()->quick();
if (!Loader::IsPerformingUnitTests()) if (!Loader::IsPerformingUnitTests())
{ {

View File

@ -21,8 +21,6 @@ namespace Components
static void OnFrameAsync(Utils::Slot<Callback> callback); static void OnFrameAsync(Utils::Slot<Callback> callback);
static void OnceAsync(Utils::Slot<Callback> callback); static void OnceAsync(Utils::Slot<Callback> callback);
static void FrameHandler();
private: private:
class DelayedSlot class DelayedSlot
{ {
@ -49,6 +47,10 @@ namespace Components
static void ReadyHandler(); static void ReadyHandler();
static void DelaySignal(); static void DelaySignal();
static void ShutdownStub(int num); static void ShutdownStub(const char*);
static void GameFrameStub();
static void FrameHandler(bool = 0);
}; };
} }

View File

@ -34,6 +34,10 @@ namespace Game
GScr_LoadGameTypeScript_t* GScr_LoadGameTypeScript; GScr_LoadGameTypeScript_t* GScr_LoadGameTypeScript;
G_LoadStructs_t* G_LoadStructs; G_LoadStructs_t* G_LoadStructs;
Sys_Milliseconds_t* Sys_Milliseconds; Sys_Milliseconds_t* Sys_Milliseconds;
Com_Printf_t* Com_Printf;
Com_DedicatedModified_t* Com_DedicatedModified;
char* isDvarSystemActive;
bool IsDedicated() bool IsDedicated()
{ {
@ -48,8 +52,12 @@ namespace Game
GScr_LoadGameTypeScript = ASSIGN(GScr_LoadGameTypeScript_t*, 0x503F90); GScr_LoadGameTypeScript = ASSIGN(GScr_LoadGameTypeScript_t*, 0x503F90);
G_LoadStructs = ASSIGN(G_LoadStructs_t*, 0x5118A0); G_LoadStructs = ASSIGN(G_LoadStructs_t*, 0x5118A0);
Sys_Milliseconds = ASSIGN(Sys_Milliseconds_t*, 0x435200); 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); cls = ASSIGN(clientStatic_t*, 0x68A408);
svs = ASSIGN(serverStatic_t*, 0xD35700); svs = ASSIGN(serverStatic_t*, 0xD35700);
sv = ASSIGN(server_t*, 0xCD6180); sv = ASSIGN(server_t*, 0xCD6180);

View File

@ -8,6 +8,8 @@ namespace Game
void Init(GAMEEXE); void Init(GAMEEXE);
bool IsDedicated(); bool IsDedicated();
extern char* isDvarSystemActive;
extern clientStatic_t* cls; extern clientStatic_t* cls;
extern serverStatic_t* svs; extern serverStatic_t* svs;
extern server_t* sv; extern server_t* sv;
@ -46,6 +48,12 @@ namespace Game
typedef int (Sys_Milliseconds_t)(); typedef int (Sys_Milliseconds_t)();
extern Sys_Milliseconds_t* Sys_Milliseconds; 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 unsigned int Scr_GetFunctionHandle(char*, const char*);
extern __int16 Scr_ExecThread(int); extern __int16 Scr_ExecThread(int);
extern void RemoveRefToObject(int); extern void RemoveRefToObject(int);