Skip to content

Commit 2bcf9fa

Browse files
committed
Add Timer_GetTrack
1 parent 791cf0d commit 2bcf9fa

File tree

1 file changed

+41
-1
lines changed

1 file changed

+41
-1
lines changed

addons/sourcemod/scripting/shavit-core.sp

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ VScriptExecute gH_VScript_OnStart;
6666
VScriptExecute gH_VScript_OnFinish;
6767
VScriptFunction gH_VScript_Timer_GetTime;
6868
VScriptFunction gH_VScript_Timer_GetStatus;
69+
VScriptFunction gH_VScript_Timer_GetTrack;
6970

7071

7172
// database handle
@@ -2049,6 +2050,7 @@ public int Native_FinishMap(Handle handler, int numParams)
20492050
if (gH_VScript_OnFinish)
20502051
{
20512052
gH_VScript_OnFinish.SetParam(1, FIELD_HSCRIPT, VScript_EntityToHScript(client));
2053+
gH_VScript_OnFinish.SetParam(2, FIELD_INTEGER, snapshot.iTimerTrack);
20522054
gH_VScript_OnFinish.Execute();
20532055
}
20542056
}
@@ -2637,6 +2639,7 @@ void StartTimer(int client, int track, bool skipGroundCheck)
26372639
if (gH_VScript_OnStart)
26382640
{
26392641
gH_VScript_OnStart.SetParam(1, FIELD_HSCRIPT, VScript_EntityToHScript(client));
2642+
gH_VScript_OnStart.SetParam(2, FIELD_INTEGER, track);
26402643
gH_VScript_OnStart.Execute();
26412644
}
26422645
}
@@ -3948,7 +3951,7 @@ public void VScript_OnScriptVMInitialized()
39483951
}
39493952
gH_VScript_Timer_GetTime.Register();
39503953

3951-
// function gH_VScript_Timer_GetStatus(player) // returns a int -- 0=stopped, 1=running, 2=paused
3954+
// function Timer_GetStatus(player) // returns an int -- 0=stopped, 1=running, 2=paused
39523955
if (!gH_VScript_Timer_GetStatus)
39533956
{
39543957
gH_VScript_Timer_GetStatus = VScript_CreateFunction();
@@ -3959,6 +3962,18 @@ public void VScript_OnScriptVMInitialized()
39593962
gH_VScript_Timer_GetStatus.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetStatus);
39603963
}
39613964
gH_VScript_Timer_GetStatus.Register();
3965+
3966+
// function Timer_GetTrack(player) // returns an int -- 0=main, 1 or higher = a bonus track
3967+
if (!gH_VScript_Timer_GetTrack)
3968+
{
3969+
gH_VScript_Timer_GetTrack = VScript_CreateFunction();
3970+
gH_VScript_Timer_GetTrack.SetScriptName("Timer_GetTrack");
3971+
gH_VScript_Timer_GetTrack.Return = FIELD_INTEGER;
3972+
gH_VScript_Timer_GetTrack.SetParam(1, FIELD_HSCRIPT);
3973+
gH_VScript_Timer_GetTrack.SetFunctionEmpty();
3974+
gH_VScript_Timer_GetTrack.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetTrack);
3975+
}
3976+
gH_VScript_Timer_GetTrack.Register();
39623977
}
39633978

39643979
MRESReturn Detour_Timer_GetTime(DHookReturn hret, DHookParam params)
@@ -4010,3 +4025,28 @@ MRESReturn Detour_Timer_GetStatus(DHookReturn hret, DHookParam params)
40104025

40114026
return MRES_Supercede;
40124027
}
4028+
4029+
MRESReturn Detour_Timer_GetTrack(DHookReturn hret, DHookParam params)
4030+
{
4031+
HSCRIPT clienthandle = params.Get(1);
4032+
4033+
if (clienthandle == view_as<HSCRIPT>(0))
4034+
{
4035+
// null object passed in probably
4036+
hret.Value = -1;
4037+
return MRES_Supercede;
4038+
}
4039+
4040+
int client = VScript_HScriptToEntity(clienthandle);
4041+
4042+
if (client < 1 || client > MaxClients || !IsClientInGame(client))
4043+
{
4044+
// Log error or something...
4045+
hret.Value = -1;
4046+
return MRES_Supercede;
4047+
}
4048+
4049+
hret.Value = view_as<int>(gA_Timers[client].iTimerTrack);
4050+
4051+
return MRES_Supercede;
4052+
}

0 commit comments

Comments
 (0)