Add OnStart & OnFinish and rework some things

This commit is contained in:
rtldg 2025-03-26 13:13:39 +00:00
parent 4cd43629b3
commit 791cf0de2c
2 changed files with 88 additions and 45 deletions

View File

@ -243,6 +243,11 @@ public void OnPluginStart()
if (gB_Late) if (gB_Late)
{ {
Shavit_OnChatConfigLoaded(); Shavit_OnChatConfigLoaded();
if (gB_VScript && VScript_IsScriptVMInitialized())
{
VScript_OnScriptVMInitialized();
}
} }
} }
@ -2284,44 +2289,48 @@ public any Native_SaveCheckpointCache(Handle plugin, int numParams)
public void VScript_OnScriptVMInitialized() public void VScript_OnScriptVMInitialized()
{ {
delete gH_VScript_Timer_OnCheckpointSave;
delete gH_VScript_Timer_OnCheckpointLoadPre;
delete gH_VScript_Timer_OnCheckpointLoadPost;
// ::Timer_OnCheckpointSave <- function(player) // ::Timer_OnCheckpointSave <- function(player)
if (VScript_GetGlobalFunction("Timer_OnCheckpointSave")) if (VScript_GetGlobalFunction("Timer_OnCheckpointSave"))
gH_VScript_Timer_OnCheckpointSave = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointSave")); gH_VScript_Timer_OnCheckpointSave = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointSave"));
else
gH_VScript_Timer_OnCheckpointSave = view_as<VScriptExecute>(Address_Null);
// ::Timer_OnCheckpointLoadPre <- function(player) // ::Timer_OnCheckpointLoadPre <- function(player)
if (VScript_GetGlobalFunction("Timer_OnCheckpointLoadPre")) if (VScript_GetGlobalFunction("Timer_OnCheckpointLoadPre"))
gH_VScript_Timer_OnCheckpointLoadPre = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointLoadPre")); gH_VScript_Timer_OnCheckpointLoadPre = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointLoadPre"));
else
gH_VScript_Timer_OnCheckpointLoadPre = view_as<VScriptExecute>(Address_Null);
// ::Timer_OnCheckpointLoadPost <- function(player) // ::Timer_OnCheckpointLoadPost <- function(player)
if (VScript_GetGlobalFunction("Timer_OnCheckpointLoadPost")) if (VScript_GetGlobalFunction("Timer_OnCheckpointLoadPost"))
gH_VScript_Timer_OnCheckpointLoadPost = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointLoadPost")); gH_VScript_Timer_OnCheckpointLoadPost = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnCheckpointLoadPost"));
else
gH_VScript_Timer_OnCheckpointLoadPost = view_as<VScriptExecute>(Address_Null);
// function Timer_SetCheckpointCustomData(player, key, value) // function Timer_SetCheckpointCustomData(player, key, value)
gH_VScript_Timer_SetCheckpointCustomData = VScript_CreateFunction(); if (!gH_VScript_Timer_SetCheckpointCustomData)
gH_VScript_Timer_SetCheckpointCustomData.SetScriptName("Timer_SetCheckpointCustomData"); {
gH_VScript_Timer_SetCheckpointCustomData.Return = FIELD_VOID; gH_VScript_Timer_SetCheckpointCustomData = VScript_CreateFunction();
gH_VScript_Timer_SetCheckpointCustomData.SetParam(1, FIELD_HSCRIPT); gH_VScript_Timer_SetCheckpointCustomData.SetScriptName("Timer_SetCheckpointCustomData");
gH_VScript_Timer_SetCheckpointCustomData.SetParam(2, FIELD_CSTRING); gH_VScript_Timer_SetCheckpointCustomData.Return = FIELD_VOID;
gH_VScript_Timer_SetCheckpointCustomData.SetParam(3, FIELD_CSTRING); gH_VScript_Timer_SetCheckpointCustomData.SetParam(1, FIELD_HSCRIPT);
gH_VScript_Timer_SetCheckpointCustomData.SetFunctionEmpty(); gH_VScript_Timer_SetCheckpointCustomData.SetParam(2, FIELD_CSTRING);
gH_VScript_Timer_SetCheckpointCustomData.SetParam(3, FIELD_CSTRING);
gH_VScript_Timer_SetCheckpointCustomData.SetFunctionEmpty();
gH_VScript_Timer_SetCheckpointCustomData.CreateDetour().Enable(Hook_Pre, Detour_Timer_SetCheckpointCustomData);
}
gH_VScript_Timer_SetCheckpointCustomData.Register(); gH_VScript_Timer_SetCheckpointCustomData.Register();
gH_VScript_Timer_SetCheckpointCustomData.CreateDetour().Enable(Hook_Pre, Detour_Timer_SetCheckpointCustomData);
// function Timer_GetCheckpointCustomData(player, key, value) // function Timer_GetCheckpointCustomData(player, key, value)
gH_VScript_Timer_GetCheckpointCustomData = VScript_CreateFunction(); if (!gH_VScript_Timer_GetCheckpointCustomData)
gH_VScript_Timer_GetCheckpointCustomData.SetScriptName("Timer_GetCheckpointCustomData"); {
gH_VScript_Timer_GetCheckpointCustomData.Return = FIELD_CSTRING; gH_VScript_Timer_GetCheckpointCustomData = VScript_CreateFunction();
gH_VScript_Timer_GetCheckpointCustomData.SetParam(1, FIELD_HSCRIPT); gH_VScript_Timer_GetCheckpointCustomData.SetScriptName("Timer_GetCheckpointCustomData");
gH_VScript_Timer_GetCheckpointCustomData.SetParam(2, FIELD_CSTRING); gH_VScript_Timer_GetCheckpointCustomData.Return = FIELD_CSTRING;
gH_VScript_Timer_GetCheckpointCustomData.SetFunctionEmpty(); gH_VScript_Timer_GetCheckpointCustomData.SetParam(1, FIELD_HSCRIPT);
gH_VScript_Timer_GetCheckpointCustomData.SetParam(2, FIELD_CSTRING);
gH_VScript_Timer_GetCheckpointCustomData.SetFunctionEmpty();
gH_VScript_Timer_GetCheckpointCustomData.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetCheckpointCustomData);
}
gH_VScript_Timer_GetCheckpointCustomData.Register(); gH_VScript_Timer_GetCheckpointCustomData.Register();
gH_VScript_Timer_GetCheckpointCustomData.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetCheckpointCustomData);
} }
MRESReturn Detour_Timer_SetCheckpointCustomData(DHookParam params) MRESReturn Detour_Timer_SetCheckpointCustomData(DHookParam params)

View File

@ -62,10 +62,8 @@ DynamicHook gH_TeleportDhook = null;
Address gI_TF2PreventBunnyJumpingAddr = Address_Null; Address gI_TF2PreventBunnyJumpingAddr = Address_Null;
// vscript (non-checkpoint natives) // vscript (non-checkpoint natives)
#if 0
VScriptExecute gH_VScript_OnStart; VScriptExecute gH_VScript_OnStart;
VScriptExecute gH_VScript_OnEnd; VScriptExecute gH_VScript_OnFinish;
#endif
VScriptFunction gH_VScript_Timer_GetTime; VScriptFunction gH_VScript_Timer_GetTime;
VScriptFunction gH_VScript_Timer_GetStatus; VScriptFunction gH_VScript_Timer_GetStatus;
@ -135,6 +133,7 @@ bool gB_ReplayPlayback = false;
bool gB_Rankings = false; bool gB_Rankings = false;
bool gB_HUD = false; bool gB_HUD = false;
bool gB_AdminMenu = false; bool gB_AdminMenu = false;
bool gB_VScript = false;
TopMenu gH_AdminMenu = null; TopMenu gH_AdminMenu = null;
TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT; TopMenuObject gH_TimerCommands = INVALID_TOPMENUOBJECT;
@ -452,6 +451,11 @@ public void OnPluginStart()
OnClientPutInServer(i); OnClientPutInServer(i);
} }
} }
if (gB_VScript && VScript_IsScriptVMInitialized())
{
VScript_OnScriptVMInitialized();
}
} }
} }
@ -648,6 +652,10 @@ public void OnLibraryAdded(const char[] name)
{ {
gB_AdminMenu = true; gB_AdminMenu = true;
} }
else if (StrEqual(name, "vscript"))
{
gB_VScript = true;
}
} }
public void OnLibraryRemoved(const char[] name) public void OnLibraryRemoved(const char[] name)
@ -678,6 +686,10 @@ public void OnLibraryRemoved(const char[] name)
gH_AdminMenu = null; gH_AdminMenu = null;
gH_TimerCommands = INVALID_TOPMENUOBJECT; gH_TimerCommands = INVALID_TOPMENUOBJECT;
} }
else if (StrEqual(name, "vscript"))
{
gB_VScript = false;
}
} }
public void OnMapStart() public void OnMapStart()
@ -2032,6 +2044,15 @@ public int Native_FinishMap(Handle handler, int numParams)
Call_PushCell(timestamp); Call_PushCell(timestamp);
Call_Finish(); Call_Finish();
if (gB_VScript)
{
if (gH_VScript_OnFinish)
{
gH_VScript_OnFinish.SetParam(1, FIELD_HSCRIPT, VScript_EntityToHScript(client));
gH_VScript_OnFinish.Execute();
}
}
StopTimer(client); StopTimer(client);
return 1; return 1;
} }
@ -2610,6 +2631,15 @@ void StartTimer(int client, int track, bool skipGroundCheck)
Call_PushCell(client); Call_PushCell(client);
Call_PushCell(track); Call_PushCell(track);
Call_Finish(); Call_Finish();
if (gB_VScript)
{
if (gH_VScript_OnStart)
{
gH_VScript_OnStart.SetParam(1, FIELD_HSCRIPT, VScript_EntityToHScript(client));
gH_VScript_OnStart.Execute();
}
}
} }
#if 0 #if 0
else if(result == Plugin_Handled || result == Plugin_Stop) else if(result == Plugin_Handled || result == Plugin_Stop)
@ -3895,36 +3925,40 @@ void UpdateStyleSettings(int client)
public void VScript_OnScriptVMInitialized() public void VScript_OnScriptVMInitialized()
{ {
#if 0 delete gH_VScript_OnStart;
delete gH_VScript_OnFinish;
// ::Timer_OnStart <- function(player) // ::Timer_OnStart <- function(player)
if (VScript_GetGlobalFunction("Timer_OnStart")) if (VScript_GetGlobalFunction("Timer_OnStart"))
gH_VScript_OnStart = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnStart")); gH_VScript_OnStart = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnStart"));
else
gH_VScript_OnStart = view_as<VScriptExecute>(Address_Null); // ::Timer_OnFinish <- function(player)
// ::Timer_OnEnd <- function(player) if (VScript_GetGlobalFunction("Timer_OnFinish"))
if (VScript_GetGlobalFunction("Timer_OnEnd")) gH_VScript_OnFinish = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnFinish"));
gH_VScript_OnEnd = new VScriptExecute(HSCRIPT_RootTable.GetValue("Timer_OnEnd"));
else
gH_VScript_OnEnd = view_as<VScriptExecute>(Address_Null);
#endif
// function Timer_GetTime(player) // returns a float // function Timer_GetTime(player) // returns a float
gH_VScript_Timer_GetTime = VScript_CreateFunction(); if (!gH_VScript_Timer_GetTime)
gH_VScript_Timer_GetTime.SetScriptName("Timer_GetTime"); {
gH_VScript_Timer_GetTime.Return = FIELD_FLOAT; gH_VScript_Timer_GetTime = VScript_CreateFunction();
gH_VScript_Timer_GetTime.SetParam(1, FIELD_HSCRIPT); gH_VScript_Timer_GetTime.SetScriptName("Timer_GetTime");
gH_VScript_Timer_GetTime.SetFunctionEmpty(); gH_VScript_Timer_GetTime.Return = FIELD_FLOAT;
gH_VScript_Timer_GetTime.SetParam(1, FIELD_HSCRIPT);
gH_VScript_Timer_GetTime.SetFunctionEmpty();
gH_VScript_Timer_GetTime.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetTime);
}
gH_VScript_Timer_GetTime.Register(); gH_VScript_Timer_GetTime.Register();
gH_VScript_Timer_GetTime.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetTime);
// function gH_VScript_Timer_GetStatus(player) // returns a int -- 0=stopped, 1=running, 2=paused // function gH_VScript_Timer_GetStatus(player) // returns a int -- 0=stopped, 1=running, 2=paused
gH_VScript_Timer_GetStatus = VScript_CreateFunction(); if (!gH_VScript_Timer_GetStatus)
gH_VScript_Timer_GetStatus.SetScriptName("Timer_GetStatus"); {
gH_VScript_Timer_GetStatus.Return = FIELD_INTEGER; gH_VScript_Timer_GetStatus = VScript_CreateFunction();
gH_VScript_Timer_GetStatus.SetParam(1, FIELD_HSCRIPT); gH_VScript_Timer_GetStatus.SetScriptName("Timer_GetStatus");
gH_VScript_Timer_GetStatus.SetFunctionEmpty(); gH_VScript_Timer_GetStatus.Return = FIELD_INTEGER;
gH_VScript_Timer_GetStatus.SetParam(1, FIELD_HSCRIPT);
gH_VScript_Timer_GetStatus.SetFunctionEmpty();
gH_VScript_Timer_GetStatus.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetStatus);
}
gH_VScript_Timer_GetStatus.Register(); gH_VScript_Timer_GetStatus.Register();
gH_VScript_Timer_GetStatus.CreateDetour().Enable(Hook_Pre, Detour_Timer_GetStatus);
} }
MRESReturn Detour_Timer_GetTime(DHookReturn hret, DHookParam params) MRESReturn Detour_Timer_GetTime(DHookReturn hret, DHookParam params)