diff --git a/addons/sourcemod/scripting/include/shavit.inc b/addons/sourcemod/scripting/include/shavit.inc index 6b3da5a9..8663782a 100644 --- a/addons/sourcemod/scripting/include/shavit.inc +++ b/addons/sourcemod/scripting/include/shavit.inc @@ -618,6 +618,15 @@ forward Action Shavit_OnStartPre(int client, int track); */ forward Action Shavit_OnStart(int client, int track); +/** + * Called when a player uses the restart command. + * + * @param client Client index. + * @param track Timer track. + * @return Plugin_Continue to do nothing or anything else to not restart. + */ +forward Action Shavit_OnRestartPre(int client, int track); + /** * Called when a player uses the restart command. * diff --git a/addons/sourcemod/scripting/shavit-core.sp b/addons/sourcemod/scripting/shavit-core.sp index b7890764..5b7be30e 100644 --- a/addons/sourcemod/scripting/shavit-core.sp +++ b/addons/sourcemod/scripting/shavit-core.sp @@ -93,6 +93,7 @@ Handle gH_Forwards_Stop = null; Handle gH_Forwards_StopPre = null; Handle gH_Forwards_FinishPre = null; Handle gH_Forwards_Finish = null; +Handle gH_Forwards_OnRestartPre = null; Handle gH_Forwards_OnRestart = null; Handle gH_Forwards_OnEnd = null; Handle gH_Forwards_OnPause = null; @@ -274,7 +275,8 @@ public void OnPluginStart() gH_Forwards_StopPre = CreateGlobalForward("Shavit_OnStopPre", ET_Event, Param_Cell, Param_Cell); gH_Forwards_FinishPre = CreateGlobalForward("Shavit_OnFinishPre", ET_Event, Param_Cell, Param_Array); gH_Forwards_Finish = CreateGlobalForward("Shavit_OnFinish", ET_Event, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell, Param_Cell); - gH_Forwards_OnRestart = CreateGlobalForward("Shavit_OnRestart", ET_Event, Param_Cell, Param_Cell); + gH_Forwards_OnRestartPre = CreateGlobalForward("Shavit_OnRestartPre", ET_Event, Param_Cell, Param_Cell); + gH_Forwards_OnRestart = CreateGlobalForward("Shavit_OnRestart", ET_Ignore, Param_Cell, Param_Cell); gH_Forwards_OnEnd = CreateGlobalForward("Shavit_OnEnd", ET_Event, Param_Cell, Param_Cell); gH_Forwards_OnPause = CreateGlobalForward("Shavit_OnPause", ET_Event, Param_Cell, Param_Cell); gH_Forwards_OnResume = CreateGlobalForward("Shavit_OnResume", ET_Event, Param_Cell, Param_Cell); @@ -653,6 +655,17 @@ public Action Command_StartTimer(int client, int args) } else if(StrContains(sCommand, "sm_r", false) == 0 || StrContains(sCommand, "sm_s", false) == 0) { + Action result = Plugin_Continue; + Call_StartForward(gH_Forwards_OnRestartPre); + Call_PushCell(client); + Call_PushCell(track); + Call_Finish(result); + + if (result > Plugin_Continue) + { + return Plugin_Handled; + } + track = gA_Timers[client].iTrack; } diff --git a/addons/sourcemod/scripting/shavit-misc.sp b/addons/sourcemod/scripting/shavit-misc.sp index 6df7ab2a..ba3ae308 100644 --- a/addons/sourcemod/scripting/shavit-misc.sp +++ b/addons/sourcemod/scripting/shavit-misc.sp @@ -3220,12 +3220,10 @@ public void Shavit_OnRestart(int client, int track) { OpenKZCPMenu(client); } - - if(!gCV_RespawnOnRestart.BoolValue) - { - return; - } +} +public Action Shavit_OnRestartPre(int client, int track) +{ if(gCV_RespawnOnRestart.BoolValue && !IsPlayerAlive(client)) { if(gEV_Type == Engine_TF2) @@ -3245,7 +3243,11 @@ public void Shavit_OnRestart(int client, int track) { CS_RespawnPlayer(client); } + + return Plugin_Handled; } + + return Plugin_Continue; } public Action Respawn(Handle timer, any data)