@@ -66,6 +66,7 @@ VScriptExecute gH_VScript_OnStart;
6666VScriptExecute gH_VScript_OnFinish ;
6767VScriptFunction gH_VScript_Timer_GetTime ;
6868VScriptFunction 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
39643979MRESReturn 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