diff --git a/addons/sourcemod/scripting/shavit-tas.sp b/addons/sourcemod/scripting/shavit-tas.sp index a6488f28..a5b528c8 100644 --- a/addons/sourcemod/scripting/shavit-tas.sp +++ b/addons/sourcemod/scripting/shavit-tas.sp @@ -56,6 +56,7 @@ float g_fPower[MAXPLAYERS + 1] = {1.0, ...}; bool gB_AutogainBasicStrafer[MAXPLAYERS + 1]; bool gB_ForceJump[MAXPLAYERS+1]; +int gI_LastRestart[MAXPLAYERS+1]; ConVar sv_airaccelerate = null; ConVar sv_accelerate = null; @@ -251,6 +252,11 @@ public Action Shavit_OnStart(int client, int track) return Plugin_Continue; } +public void Shavit_OnRestart(int client, int track) +{ + gI_LastRestart[client] = GetGameTickCount(); +} + public void Shavit_OnEnterZone(int client, int type, int track, int id, int entity, int data) { if (!IsValidClient(client, true) || IsFakeClient(client)) @@ -269,6 +275,11 @@ public void Shavit_OnEnterZone(int client, int type, int track, int id, int enti public void Shavit_OnLeaveZone(int client, int type, int track, int id, int entity, int data) { + if (type != Zone_Start) + { + return; + } + if (!IsValidClient(client, true) || IsFakeClient(client)) { return; @@ -284,14 +295,24 @@ public void Shavit_OnLeaveZone(int client, int type, int track, int id, int enti return; } - if (type == Zone_Start) + // You can be inside multiple startzones... + if (Shavit_InsideZone(client, type, track)) { - if (GetEntityFlags(client) & FL_ONGROUND) + return; + } + + // Shavit_OnLeaveZone() will be called a couple times because of the shavit-zones event-clearing thing that happens on restart. + // 5 is a good value that works, but we'll use 6 just-in-case. + if (GetGameTickCount() - gI_LastRestart[client] < 6) + { + return; + } + + if (GetEntityFlags(client) & FL_ONGROUND) + { + if (gB_AutoJumpOnStart[client]) { - if (gB_AutoJumpOnStart[client]) - { - gB_ForceJump[client] = true; - } + gB_ForceJump[client] = true; } } }