Skip to content

Commit

Permalink
get more stoptimer confirmation menus working
Browse files Browse the repository at this point in the history
  • Loading branch information
rtldg committed Dec 29, 2021
1 parent aa7887e commit 53aeec3
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 34 deletions.
20 changes: 20 additions & 0 deletions addons/sourcemod/scripting/include/shavit/core.inc
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,15 @@ forward Action Shavit_OnRestartPre(int client, int track);
*/
forward void Shavit_OnRestart(int client, int track);

/**
* Called when a player uses the !end command.
*
* @param client Client index.
* @param track Timer track.
* @return Plugin_Continue to do nothing or anything else to not goto the end.
*/
forward Action Shavit_OnEndPre(int client, int track);

/**
* Called when a player uses the !end command.
*
Expand Down Expand Up @@ -1317,6 +1326,16 @@ native bool Shavit_Core_CookiesRetrieved(int client);
*/
native bool Shavit_ShouldProcessFrame(int client);

/**
* Stops the player's timer and teleports them to the end zone.
*
* @param client
* @param track
*
* @noreturn
*/
native void Shavit_GotoEnd(int client, int track);

public SharedPlugin __pl_shavit_core =
{
name = "shavit",
Expand Down Expand Up @@ -1382,6 +1401,7 @@ public void __pl_shavit_core_SetNTVOptional()
MarkNativeAsOptional("Shavit_SetStyleSettingInt");
MarkNativeAsOptional("Shavit_Core_CookiesRetrieved");
MarkNativeAsOptional("Shavit_ShouldProcessFrame");
MarkNativeAsOptional("Shavit_GotoEnd");

__pl_shavit_bhopstats_SetNTVOptional();
}
Expand Down
95 changes: 61 additions & 34 deletions addons/sourcemod/scripting/shavit-core.sp
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Handle gH_Forwards_FinishPre = null;
Handle gH_Forwards_Finish = null;
Handle gH_Forwards_OnRestartPre = null;
Handle gH_Forwards_OnRestart = null;
Handle gH_Forwards_OnEndPre = null;
Handle gH_Forwards_OnEnd = null;
Handle gH_Forwards_OnPause = null;
Handle gH_Forwards_OnResume = null;
Expand Down Expand Up @@ -209,6 +210,7 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max
CreateNative("Shavit_SetMaxVelocity", Native_SetMaxVelocity);
CreateNative("Shavit_Core_CookiesRetrieved", Native_Core_CookiesRetrieved);
CreateNative("Shavit_ShouldProcessFrame", Native_ShouldProcessFrame);
CreateNative("Shavit_GotoEnd", Native_GotoEnd);

// registers library, check "bool LibraryExists(const char[] name)" in order to use with other plugins
RegPluginLibrary("shavit");
Expand All @@ -229,6 +231,7 @@ public void OnPluginStart()
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_OnRestartPre = CreateGlobalForward("Shavit_OnRestartPre", ET_Event, Param_Cell, Param_Cell);
gH_Forwards_OnRestart = CreateGlobalForward("Shavit_OnRestart", ET_Ignore, Param_Cell, Param_Cell);
gH_Forwards_OnEndPre = CreateGlobalForward("Shavit_OnEndPre", ET_Event, 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);
Expand Down Expand Up @@ -608,39 +611,39 @@ public Action Command_StartTimer(int client, int args)
else if(StrContains(sCommand, "sm_r", false) == 0 || StrContains(sCommand, "sm_s", false) == 0)
{
track = (DoIHateMain(client)) ? Track_Main : gA_Timers[client].iTimerTrack;

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;
}
}

if (gB_Zones && (Shavit_ZoneExists(Zone_Start, track) || gB_KZMap[track]))
{
if(!Shavit_StopTimer(client, false))
{
return Plugin_Handled;
}

Call_StartForward(gH_Forwards_OnRestart);
Call_PushCell(client);
Call_PushCell(track);
Call_Finish();
}
else
if (!gB_Zones || !(Shavit_ZoneExists(Zone_Start, track) || gB_KZMap[track]))
{
char sTrack[32];
GetTrackName(client, track, sTrack, 32);

Shavit_PrintToChat(client, "%T", "StartZoneUndefined", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText, gS_ChatStrings.sVariable2, sTrack, gS_ChatStrings.sText);

return Plugin_Handled;
}

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;
}

if (!Shavit_StopTimer(client, false))
{
return Plugin_Handled;
}

Call_StartForward(gH_Forwards_OnRestart);
Call_PushCell(client);
Call_PushCell(track);
Call_Finish();

return Plugin_Handled;
}

Expand Down Expand Up @@ -696,22 +699,33 @@ public Action Command_TeleportEnd(int client, int args)
}
}

if(gB_Zones && (Shavit_ZoneExists(Zone_End, track) || gB_KZMap[track]))
if (!gB_Zones || !(Shavit_ZoneExists(Zone_End, track) || gB_KZMap[track]))
{
if(Shavit_StopTimer(client, false))
{
Call_StartForward(gH_Forwards_OnEnd);
Call_PushCell(client);
Call_PushCell(track);
Call_Finish();
}
Shavit_PrintToChat(client, "%T", "EndZoneUndefined", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}

else
Action result = Plugin_Continue;
Call_StartForward(gH_Forwards_OnEndPre);
Call_PushCell(client);
Call_PushCell(track);
Call_Finish(result);

if (result > Plugin_Continue)
{
Shavit_PrintToChat(client, "%T", "EndZoneUndefined", client, gS_ChatStrings.sWarning, gS_ChatStrings.sText);
return Plugin_Handled;
}

if (!Shavit_StopTimer(client, false))
{
return Plugin_Handled;
}

Call_StartForward(gH_Forwards_OnEnd);
Call_PushCell(client);
Call_PushCell(track);
Call_Finish();

return Plugin_Handled;
}

Expand Down Expand Up @@ -1932,6 +1946,19 @@ public int SemiNative_PrintToChat(int client, int formatParam)
return true;
}

public int Native_GotoEnd(Handle handler, int numParams)
{
int client = GetNativeCell(1);
int track = GetNativeCell(2);

Shavit_StopTimer(client, true);

Call_StartForward(gH_Forwards_OnEnd);
Call_PushCell(client);
Call_PushCell(track);
Call_Finish();
}

public int Native_RestartTimer(Handle handler, int numParams)
{
int client = GetNativeCell(1);
Expand Down
36 changes: 36 additions & 0 deletions addons/sourcemod/scripting/shavit-misc.sp
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ int gI_Style[MAXPLAYERS+1];
Function gH_AfterWarningMenu[MAXPLAYERS+1];
int gI_LastWeaponTick[MAXPLAYERS+1];
int gI_LastNoclipTick[MAXPLAYERS+1];
int gI_LastRestartTrack[MAXPLAYERS+1];

// cookies
Handle gH_HideCookie = null;
Expand Down Expand Up @@ -1782,6 +1783,16 @@ void DoNoclip(int client)
SetEntityMoveType(client, MOVETYPE_NOCLIP);
}

void DoEnd(int client)
{
Shavit_GotoEnd(client, gI_LastRestartTrack[client]);
}

void DoRestart(int client)
{
Shavit_RestartTimer(client, gI_LastRestartTrack[client]);
}

void DoStopTimer(int client)
{
Shavit_StopTimer(client);
Expand Down Expand Up @@ -1956,6 +1967,12 @@ public Action CommandListener_Real_Noclip(int client, const char[] command, int
return Plugin_Stop;
}

if (ShouldDisplayStopWarning(client))
{
OpenStopWarningMenu(client, DoNoclip);
return Plugin_Stop;
}

gI_LastNoclipTick[client] = GetGameTickCount();
}

Expand Down Expand Up @@ -2141,6 +2158,18 @@ public void Shavit_OnRestart(int client, int track)
}
}

public Action Shavit_OnEndPre(int client, int track)
{
if (ShouldDisplayStopWarning(client))
{
gI_LastRestartTrack[client] = track;
OpenStopWarningMenu(client, DoEnd);
return Plugin_Handled;
}

return Plugin_Continue;
}

public Action Shavit_OnRestartPre(int client, int track)
{
if(gCV_RespawnOnRestart.BoolValue && !IsPlayerAlive(client))
Expand All @@ -2166,6 +2195,13 @@ public Action Shavit_OnRestartPre(int client, int track)
return Plugin_Handled;
}

if (ShouldDisplayStopWarning(client))
{
gI_LastRestartTrack[client] = track;
OpenStopWarningMenu(client, DoRestart);
return Plugin_Handled;
}

return Plugin_Continue;
}

Expand Down

0 comments on commit 53aeec3

Please sign in to comment.