diff --git a/addons/sourcemod/scripting/include/shavit.inc b/addons/sourcemod/scripting/include/shavit.inc index 0b5b0d39..f959dc4c 100644 --- a/addons/sourcemod/scripting/include/shavit.inc +++ b/addons/sourcemod/scripting/include/shavit.inc @@ -612,6 +612,16 @@ forward void Shavit_OnResume(int client, int track); */ forward void Shavit_OnStyleChanged(int client, int oldstyle, int newstyle, int track, bool manual); +/** + * Called when a player changes their bhop track. + * + * @param client Client index. + * @param oldtrack Old bhop track. + * @param newtrack New bhop track. + * @noreturn + */ +forward void Shavit_OnTrackChanged(int client, int oldtrack, int newtrack); + /** * Called when the styles configuration finishes loading and it's ready to load everything into the cache. * @@ -734,6 +744,13 @@ forward void Shavit_OnReplayStart(int client); */ forward void Shavit_OnReplayEnd(int client); +/** + * Called when all replays files have been loaded. + * + * @noreturn + */ +forward void Shavit_OnReplaysLoaded(); + /** * Called when top left HUD updates. * diff --git a/addons/sourcemod/scripting/shavit-core.sp b/addons/sourcemod/scripting/shavit-core.sp index 89b44755..1d220906 100644 --- a/addons/sourcemod/scripting/shavit-core.sp +++ b/addons/sourcemod/scripting/shavit-core.sp @@ -79,6 +79,7 @@ Handle gH_Forwards_OnEnd = null; Handle gH_Forwards_OnPause = null; Handle gH_Forwards_OnResume = null; Handle gH_Forwards_OnStyleChanged = null; +Handle gH_Forwards_OnTrackChanged = null; Handle gH_Forwards_OnStyleConfigLoaded = null; Handle gH_Forwards_OnDatabaseLoaded = null; Handle gH_Forwards_OnChatConfigLoaded = null; @@ -231,6 +232,7 @@ public void OnPluginStart() gH_Forwards_OnPause = CreateGlobalForward("Shavit_OnPause", ET_Event, Param_Cell, Param_Cell); gH_Forwards_OnResume = CreateGlobalForward("Shavit_OnResume", ET_Event, Param_Cell, Param_Cell); gH_Forwards_OnStyleChanged = CreateGlobalForward("Shavit_OnStyleChanged", ET_Event, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell); + gH_Forwards_OnTrackChanged = CreateGlobalForward("Shavit_OnTrackChanged", ET_Event, Param_Cell, Param_Cell, Param_Cell); gH_Forwards_OnStyleConfigLoaded = CreateGlobalForward("Shavit_OnStyleConfigLoaded", ET_Event, Param_Cell); gH_Forwards_OnDatabaseLoaded = CreateGlobalForward("Shavit_OnDatabaseLoaded", ET_Event); gH_Forwards_OnChatConfigLoaded = CreateGlobalForward("Shavit_OnChatConfigLoaded", ET_Event); @@ -1068,6 +1070,15 @@ public int StyleMenu_Handler(Menu menu, MenuAction action, int param1, int param return 0; } +void CallOnTrackChanged(int client, int oldtrack, int newtrack) +{ + Call_StartForward(gH_Forwards_OnTrackChanged); + Call_PushCell(client); + Call_PushCell(oldtrack); + Call_PushCell(newtrack); + Call_Finish(); +} + void CallOnStyleChanged(int client, int oldstyle, int newstyle, bool manual) { Call_StartForward(gH_Forwards_OnStyleChanged); @@ -1698,6 +1709,11 @@ public int Native_LoadSnapshot(Handle handler, int numParams) timer_snapshot_t snapshot; GetNativeArray(2, snapshot, sizeof(timer_snapshot_t)); + if(gA_Timers[client].iTrack != snapshot.iTimerTrack) + { + CallOnTrackChanged(client, gA_Timers[client].iTrack, snapshot.iTimerTrack); + } + gA_Timers[client].iTrack = snapshot.iTimerTrack; if(gA_Timers[client].iStyle != snapshot.bsStyle && Shavit_HasStyleAccess(client, snapshot.bsStyle)) @@ -1782,6 +1798,12 @@ void StartTimer(int client, int track) gA_Timers[client].iJumps = 0; gA_Timers[client].iTotalMeasures = 0; gA_Timers[client].iGoodGains = 0; + + if(gA_Timers[client].iTrack != track) + { + CallOnTrackChanged(client, gA_Timers[client].iTrack, track); + } + gA_Timers[client].iTrack = track; gA_Timers[client].bEnabled = true; gA_Timers[client].iSHSWCombination = -1; diff --git a/addons/sourcemod/scripting/shavit-replay.sp b/addons/sourcemod/scripting/shavit-replay.sp index 92c2feee..9b54894b 100644 --- a/addons/sourcemod/scripting/shavit-replay.sp +++ b/addons/sourcemod/scripting/shavit-replay.sp @@ -122,6 +122,7 @@ bool gB_Late = false; // forwards Handle gH_OnReplayStart = null; Handle gH_OnReplayEnd = null; +Handle gH_OnReplaysLoaded = null; // server specific float gF_Tickrate = 0.0; @@ -222,6 +223,7 @@ public void OnPluginStart() // forwards gH_OnReplayStart = CreateGlobalForward("Shavit_OnReplayStart", ET_Event, Param_Cell, Param_Cell, Param_Cell, Param_Cell); gH_OnReplayEnd = CreateGlobalForward("Shavit_OnReplayEnd", ET_Event, Param_Cell, Param_Cell, Param_Cell, Param_Cell); + gH_OnReplaysLoaded = CreateGlobalForward("Shavit_OnReplaysLoaded", ET_Event); // game specific gEV_Type = GetEngineVersion(); @@ -875,6 +877,9 @@ public void OnMapStart() loaded = DefaultLoadReplay(i, j); } + Call_StartForward(gH_OnReplaysLoaded); + Call_Finish(); + if(!gCV_CentralBot.BoolValue) { ServerCommand((gEV_Type != Engine_TF2)? "bot_add":"tf_bot_add");