From 2bcf9facf4f4a495e56acd47b45a8215875ba91c Mon Sep 17 00:00:00 2001 From: rtldg Date: Wed, 26 Mar 2025 13:19:39 +0000 Subject: [PATCH] Add Timer_GetTrack --- addons/sourcemod/scripting/shavit-core.sp | 42 ++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/addons/sourcemod/scripting/shavit-core.sp b/addons/sourcemod/scripting/shavit-core.sp index 4d124136..70ee5d2e 100644 --- a/addons/sourcemod/scripting/shavit-core.sp +++ b/addons/sourcemod/scripting/shavit-core.sp @@ -66,6 +66,7 @@ VScriptExecute gH_VScript_OnStart; VScriptExecute gH_VScript_OnFinish; VScriptFunction gH_VScript_Timer_GetTime; VScriptFunction gH_VScript_Timer_GetStatus; +VScriptFunction gH_VScript_Timer_GetTrack; // database handle @@ -2049,6 +2050,7 @@ public int Native_FinishMap(Handle handler, int numParams) if (gH_VScript_OnFinish) { gH_VScript_OnFinish.SetParam(1, FIELD_HSCRIPT, VScript_EntityToHScript(client)); + gH_VScript_OnFinish.SetParam(2, FIELD_INTEGER, snapshot.iTimerTrack); gH_VScript_OnFinish.Execute(); } } @@ -2637,6 +2639,7 @@ void StartTimer(int client, int track, bool skipGroundCheck) if (gH_VScript_OnStart) { gH_VScript_OnStart.SetParam(1, FIELD_HSCRIPT, VScript_EntityToHScript(client)); + gH_VScript_OnStart.SetParam(2, FIELD_INTEGER, track); gH_VScript_OnStart.Execute(); } } @@ -3948,7 +3951,7 @@ public void VScript_OnScriptVMInitialized() } gH_VScript_Timer_GetTime.Register(); - // function gH_VScript_Timer_GetStatus(player) // returns a int -- 0=stopped, 1=running, 2=paused + // function Timer_GetStatus(player) // returns an int -- 0=stopped, 1=running, 2=paused if (!gH_VScript_Timer_GetStatus) { gH_VScript_Timer_GetStatus = VScript_CreateFunction(); @@ -3959,6 +3962,18 @@ public void VScript_OnScriptVMInitialized() gH_VScript_Timer_GetStatus.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetStatus); } gH_VScript_Timer_GetStatus.Register(); + + // function Timer_GetTrack(player) // returns an int -- 0=main, 1 or higher = a bonus track + if (!gH_VScript_Timer_GetTrack) + { + gH_VScript_Timer_GetTrack = VScript_CreateFunction(); + gH_VScript_Timer_GetTrack.SetScriptName("Timer_GetTrack"); + gH_VScript_Timer_GetTrack.Return = FIELD_INTEGER; + gH_VScript_Timer_GetTrack.SetParam(1, FIELD_HSCRIPT); + gH_VScript_Timer_GetTrack.SetFunctionEmpty(); + gH_VScript_Timer_GetTrack.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetTrack); + } + gH_VScript_Timer_GetTrack.Register(); } MRESReturn Detour_Timer_GetTime(DHookReturn hret, DHookParam params) @@ -4010,3 +4025,28 @@ MRESReturn Detour_Timer_GetStatus(DHookReturn hret, DHookParam params) return MRES_Supercede; } + +MRESReturn Detour_Timer_GetTrack(DHookReturn hret, DHookParam params) +{ + HSCRIPT clienthandle = params.Get(1); + + if (clienthandle == view_as(0)) + { + // null object passed in probably + hret.Value = -1; + return MRES_Supercede; + } + + int client = VScript_HScriptToEntity(clienthandle); + + if (client < 1 || client > MaxClients || !IsClientInGame(client)) + { + // Log error or something... + hret.Value = -1; + return MRES_Supercede; + } + + hret.Value = view_as(gA_Timers[client].iTimerTrack); + + return MRES_Supercede; +}