@@ -62,10 +62,8 @@ DynamicHook gH_TeleportDhook = null;
6262Address gI_TF2PreventBunnyJumpingAddr = Address_Null ;
6363
6464// vscript (non-checkpoint natives)
65- #if 0
6665VScriptExecute gH_VScript_OnStart ;
67- VScriptExecute gH_VScript_OnEnd ;
68- #endif
66+ VScriptExecute gH_VScript_OnFinish ;
6967VScriptFunction gH_VScript_Timer_GetTime ;
7068VScriptFunction gH_VScript_Timer_GetStatus ;
7169
@@ -135,6 +133,7 @@ bool gB_ReplayPlayback = false;
135133bool gB_Rankings = false ;
136134bool gB_HUD = false ;
137135bool gB_AdminMenu = false ;
136+ bool gB_VScript = false ;
138137
139138TopMenu gH_AdminMenu = null ;
140139TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT ;
@@ -452,6 +451,11 @@ public void OnPluginStart()
452451 OnClientPutInServer (i );
453452 }
454453 }
454+
455+ if (gB_VScript && VScript_IsScriptVMInitialized ())
456+ {
457+ VScript_OnScriptVMInitialized ();
458+ }
455459 }
456460}
457461
@@ -648,6 +652,10 @@ public void OnLibraryAdded(const char[] name)
648652 {
649653 gB_AdminMenu = true ;
650654 }
655+ else if (StrEqual (name , " vscript" ))
656+ {
657+ gB_VScript = true ;
658+ }
651659}
652660
653661public void OnLibraryRemoved (const char [] name )
@@ -678,6 +686,10 @@ public void OnLibraryRemoved(const char[] name)
678686 gH_AdminMenu = null ;
679687 gH_TimerCommands = INVALID_TOPMENUOBJECT ;
680688 }
689+ else if (StrEqual (name , " vscript" ))
690+ {
691+ gB_VScript = false ;
692+ }
681693}
682694
683695public void OnMapStart ()
@@ -2032,6 +2044,15 @@ public int Native_FinishMap(Handle handler, int numParams)
20322044 Call_PushCell (timestamp );
20332045 Call_Finish ();
20342046
2047+ if (gB_VScript )
2048+ {
2049+ if (gH_VScript_OnFinish )
2050+ {
2051+ gH_VScript_OnFinish .SetParam (1 , FIELD_HSCRIPT , VScript_EntityToHScript (client ));
2052+ gH_VScript_OnFinish .Execute ();
2053+ }
2054+ }
2055+
20352056 StopTimer (client );
20362057 return 1 ;
20372058}
@@ -2610,6 +2631,15 @@ void StartTimer(int client, int track, bool skipGroundCheck)
26102631 Call_PushCell (client );
26112632 Call_PushCell (track );
26122633 Call_Finish ();
2634+
2635+ if (gB_VScript )
2636+ {
2637+ if (gH_VScript_OnStart )
2638+ {
2639+ gH_VScript_OnStart .SetParam (1 , FIELD_HSCRIPT , VScript_EntityToHScript (client ));
2640+ gH_VScript_OnStart .Execute ();
2641+ }
2642+ }
26132643 }
26142644#if 0
26152645 else if (result == Plugin_Handled || result == Plugin_Stop )
@@ -3895,36 +3925,40 @@ void UpdateStyleSettings(int client)
38953925
38963926public void VScript_OnScriptVMInitialized ()
38973927{
3898- #if 0
3928+ delete gH_VScript_OnStart ;
3929+ delete gH_VScript_OnFinish ;
3930+
38993931 // ::Timer_OnStart <- function(player)
39003932 if (VScript_GetGlobalFunction (" Timer_OnStart" ))
39013933 gH_VScript_OnStart = new VScriptExecute (HSCRIPT_RootTable .GetValue (" Timer_OnStart" ));
3902- else
3903- gH_VScript_OnStart = view_as <VScriptExecute >(Address_Null );
3904- // ::Timer_OnEnd <- function(player)
3905- if (VScript_GetGlobalFunction (" Timer_OnEnd" ))
3906- gH_VScript_OnEnd = new VScriptExecute (HSCRIPT_RootTable .GetValue (" Timer_OnEnd" ));
3907- else
3908- gH_VScript_OnEnd = view_as <VScriptExecute >(Address_Null );
3909- #endif
3934+
3935+ // ::Timer_OnFinish <- function(player)
3936+ if (VScript_GetGlobalFunction (" Timer_OnFinish" ))
3937+ gH_VScript_OnFinish = new VScriptExecute (HSCRIPT_RootTable .GetValue (" Timer_OnFinish" ));
39103938
39113939 // function Timer_GetTime(player) // returns a float
3912- gH_VScript_Timer_GetTime = VScript_CreateFunction ();
3913- gH_VScript_Timer_GetTime .SetScriptName (" Timer_GetTime" );
3914- gH_VScript_Timer_GetTime .Return = FIELD_FLOAT ;
3915- gH_VScript_Timer_GetTime .SetParam (1 , FIELD_HSCRIPT );
3916- gH_VScript_Timer_GetTime .SetFunctionEmpty ();
3940+ if (! gH_VScript_Timer_GetTime )
3941+ {
3942+ gH_VScript_Timer_GetTime = VScript_CreateFunction ();
3943+ gH_VScript_Timer_GetTime .SetScriptName (" Timer_GetTime" );
3944+ gH_VScript_Timer_GetTime .Return = FIELD_FLOAT ;
3945+ gH_VScript_Timer_GetTime .SetParam (1 , FIELD_HSCRIPT );
3946+ gH_VScript_Timer_GetTime .SetFunctionEmpty ();
3947+ gH_VScript_Timer_GetTime .CreateDetour ().Enable (Hook_Pre , Detour_Timer_GetTime );
3948+ }
39173949 gH_VScript_Timer_GetTime .Register ();
3918- gH_VScript_Timer_GetTime .CreateDetour ().Enable (Hook_Pre , Detour_Timer_GetTime );
39193950
39203951 // function gH_VScript_Timer_GetStatus(player) // returns a int -- 0=stopped, 1=running, 2=paused
3921- gH_VScript_Timer_GetStatus = VScript_CreateFunction ();
3922- gH_VScript_Timer_GetStatus .SetScriptName (" Timer_GetStatus" );
3923- gH_VScript_Timer_GetStatus .Return = FIELD_INTEGER ;
3924- gH_VScript_Timer_GetStatus .SetParam (1 , FIELD_HSCRIPT );
3925- gH_VScript_Timer_GetStatus .SetFunctionEmpty ();
3952+ if (! gH_VScript_Timer_GetStatus )
3953+ {
3954+ gH_VScript_Timer_GetStatus = VScript_CreateFunction ();
3955+ gH_VScript_Timer_GetStatus .SetScriptName (" Timer_GetStatus" );
3956+ gH_VScript_Timer_GetStatus .Return = FIELD_INTEGER ;
3957+ gH_VScript_Timer_GetStatus .SetParam (1 , FIELD_HSCRIPT );
3958+ gH_VScript_Timer_GetStatus .SetFunctionEmpty ();
3959+ gH_VScript_Timer_GetStatus .CreateDetour ().Enable (Hook_Pre , Detour_Timer_GetStatus );
3960+ }
39263961 gH_VScript_Timer_GetStatus .Register ();
3927- gH_VScript_Timer_GetStatus .CreateDetour ().Enable (Hook_Pre , Detour_Timer_GetStatus );
39283962}
39293963
39303964MRESReturn Detour_Timer_GetTime (DHookReturn hret , DHookParam params )
0 commit comments