Skip to content

Commit 791cf0d

Browse files
committed
Add OnStart & OnFinish and rework some things
1 parent 4cd4362 commit 791cf0d

File tree

2 files changed

+88
-45
lines changed

2 files changed

+88
-45
lines changed

addons/sourcemod/scripting/shavit-checkpoints.sp

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,11 @@ public void OnPluginStart()
243243
if (gB_Late)
244244
{
245245
Shavit_OnChatConfigLoaded();
246+
247+
if (gB_VScript && VScript_IsScriptVMInitialized())
248+
{
249+
VScript_OnScriptVMInitialized();
250+
}
246251
}
247252
}
248253

@@ -2284,44 +2289,48 @@ public any Native_SaveCheckpointCache(Handle plugin, int numParams)
22842289

22852290
public void VScript_OnScriptVMInitialized()
22862291
{
2292+
delete gH_VScript_Timer_OnCheckpointSave;
2293+
delete gH_VScript_Timer_OnCheckpointLoadPre;
2294+
delete gH_VScript_Timer_OnCheckpointLoadPost;
2295+
22872296
// ::Timer_OnCheckpointSave <- function(player)
22882297
if (VScript_GetGlobalFunction("Timer_OnCheckpointSave"))
22892298
gH_VScript_Timer_OnCheckpointSave = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointSave"));
2290-
else
2291-
gH_VScript_Timer_OnCheckpointSave = view_as<VScriptExecute>(Address_Null);
22922299

22932300
// ::Timer_OnCheckpointLoadPre <- function(player)
22942301
if (VScript_GetGlobalFunction("Timer_OnCheckpointLoadPre"))
22952302
gH_VScript_Timer_OnCheckpointLoadPre = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointLoadPre"));
2296-
else
2297-
gH_VScript_Timer_OnCheckpointLoadPre = view_as<VScriptExecute>(Address_Null);
22982303

22992304
// ::Timer_OnCheckpointLoadPost <- function(player)
23002305
if (VScript_GetGlobalFunction("Timer_OnCheckpointLoadPost"))
23012306
gH_VScript_Timer_OnCheckpointLoadPost = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointLoadPost"));
2302-
else
2303-
gH_VScript_Timer_OnCheckpointLoadPost = view_as<VScriptExecute>(Address_Null);
23042307

23052308
// function Timer_SetCheckpointCustomData(player, key, value)
2306-
gH_VScript_Timer_SetCheckpointCustomData = VScript_CreateFunction();
2307-
gH_VScript_Timer_SetCheckpointCustomData.SetScriptName("Timer_SetCheckpointCustomData");
2308-
gH_VScript_Timer_SetCheckpointCustomData.Return = FIELD_VOID;
2309-
gH_VScript_Timer_SetCheckpointCustomData.SetParam(1, FIELD_HSCRIPT);
2310-
gH_VScript_Timer_SetCheckpointCustomData.SetParam(2, FIELD_CSTRING);
2311-
gH_VScript_Timer_SetCheckpointCustomData.SetParam(3, FIELD_CSTRING);
2312-
gH_VScript_Timer_SetCheckpointCustomData.SetFunctionEmpty();
2309+
if (!gH_VScript_Timer_SetCheckpointCustomData)
2310+
{
2311+
gH_VScript_Timer_SetCheckpointCustomData = VScript_CreateFunction();
2312+
gH_VScript_Timer_SetCheckpointCustomData.SetScriptName("Timer_SetCheckpointCustomData");
2313+
gH_VScript_Timer_SetCheckpointCustomData.Return = FIELD_VOID;
2314+
gH_VScript_Timer_SetCheckpointCustomData.SetParam(1, FIELD_HSCRIPT);
2315+
gH_VScript_Timer_SetCheckpointCustomData.SetParam(2, FIELD_CSTRING);
2316+
gH_VScript_Timer_SetCheckpointCustomData.SetParam(3, FIELD_CSTRING);
2317+
gH_VScript_Timer_SetCheckpointCustomData.SetFunctionEmpty();
2318+
gH_VScript_Timer_SetCheckpointCustomData.CreateDetour().Enable(Hook_Pre, Detour_Timer_SetCheckpointCustomData);
2319+
}
23132320
gH_VScript_Timer_SetCheckpointCustomData.Register();
2314-
gH_VScript_Timer_SetCheckpointCustomData.CreateDetour().Enable(Hook_Pre, Detour_Timer_SetCheckpointCustomData);
23152321

23162322
// function Timer_GetCheckpointCustomData(player, key, value)
2317-
gH_VScript_Timer_GetCheckpointCustomData = VScript_CreateFunction();
2318-
gH_VScript_Timer_GetCheckpointCustomData.SetScriptName("Timer_GetCheckpointCustomData");
2319-
gH_VScript_Timer_GetCheckpointCustomData.Return = FIELD_CSTRING;
2320-
gH_VScript_Timer_GetCheckpointCustomData.SetParam(1, FIELD_HSCRIPT);
2321-
gH_VScript_Timer_GetCheckpointCustomData.SetParam(2, FIELD_CSTRING);
2322-
gH_VScript_Timer_GetCheckpointCustomData.SetFunctionEmpty();
2323+
if (!gH_VScript_Timer_GetCheckpointCustomData)
2324+
{
2325+
gH_VScript_Timer_GetCheckpointCustomData = VScript_CreateFunction();
2326+
gH_VScript_Timer_GetCheckpointCustomData.SetScriptName("Timer_GetCheckpointCustomData");
2327+
gH_VScript_Timer_GetCheckpointCustomData.Return = FIELD_CSTRING;
2328+
gH_VScript_Timer_GetCheckpointCustomData.SetParam(1, FIELD_HSCRIPT);
2329+
gH_VScript_Timer_GetCheckpointCustomData.SetParam(2, FIELD_CSTRING);
2330+
gH_VScript_Timer_GetCheckpointCustomData.SetFunctionEmpty();
2331+
gH_VScript_Timer_GetCheckpointCustomData.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetCheckpointCustomData);
2332+
}
23232333
gH_VScript_Timer_GetCheckpointCustomData.Register();
2324-
gH_VScript_Timer_GetCheckpointCustomData.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetCheckpointCustomData);
23252334
}
23262335

23272336
MRESReturn Detour_Timer_SetCheckpointCustomData(DHookParam params)

addons/sourcemod/scripting/shavit-core.sp

Lines changed: 58 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,8 @@ DynamicHook gH_TeleportDhook = null;
6262
Address gI_TF2PreventBunnyJumpingAddr = Address_Null;
6363

6464
// vscript (non-checkpoint natives)
65-
#if 0
6665
VScriptExecute gH_VScript_OnStart;
67-
VScriptExecute gH_VScript_OnEnd;
68-
#endif
66+
VScriptExecute gH_VScript_OnFinish;
6967
VScriptFunction gH_VScript_Timer_GetTime;
7068
VScriptFunction gH_VScript_Timer_GetStatus;
7169

@@ -135,6 +133,7 @@ bool gB_ReplayPlayback = false;
135133
bool gB_Rankings = false;
136134
bool gB_HUD = false;
137135
bool gB_AdminMenu = false;
136+
bool gB_VScript = false;
138137

139138
TopMenu gH_AdminMenu = null;
140139
TopMenuObject 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

653661
public 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

683695
public 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

38963926
public 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

39303964
MRESReturn Detour_Timer_GetTime(DHookReturn hret, DHookParam params)

0 commit comments

Comments
 (0)