forgot what i updated again but looks good on ze now. the random extend vote should hopefully not happen anymore when not intended. the mp_chattime stuff was moved to pluginstart, mapstart and mapend and seems to let the vote run fine now instead of switching map

This commit is contained in:
jenz 2024-09-21 11:18:03 +02:00
parent e35b6a55ab
commit 3589dd66a3

View File

@ -430,6 +430,10 @@ public void OnPluginStart()
InternalRestoreMapCooldowns();
int total_time = (GetConVarInt(g_Cvar_VoteDuration) * 2) + GetConVarInt(g_Cvar_WarningTime) + 10;
ServerCommand("sm_cvar mp_chattime %i", total_time); //prevents map switching supposedly.
}
public void Cvar_playerExcludeSpec(ConVar convar, const char[] oldValue, const char[] newValue)
@ -490,6 +494,8 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max
public void OnMapStart()
{
int total_time = (GetConVarInt(g_Cvar_VoteDuration) * 2) + GetConVarInt(g_Cvar_WarningTime) + 10;
ServerCommand("sm_cvar mp_chattime %i", total_time); //prevents map switching supposedly.
g_DidRoundTerminate = false;
g_IniatedLastVote = false;
g_DidNotExtend = false;
@ -589,6 +595,9 @@ public void OnConfigsExecuted()
public void OnMapEnd()
{
int total_time = (GetConVarInt(g_Cvar_VoteDuration) * 2) + GetConVarInt(g_Cvar_WarningTime) + 10;
ServerCommand("sm_cvar mp_chattime %i", total_time);
g_DidNotExtend = false;
ServerCommand("sm_cvar sm_vote_progress_hintbox 1"); //yeah its cheesy but does the job.
g_iInterval = 0;
@ -820,6 +829,13 @@ public Action Timer_StartWarningTimer(Handle timer)
{
g_VoteTimer = INVALID_HANDLE;
int timeleft;
GetMapTimeLeft(timeleft);
if (timeleft <= 0 && !g_ChangeMapAtRoundEnd) //somehow a random vote might get triggered. this should prevent it
{
return Plugin_Stop;
}
if(!g_WarningInProgress || g_WarningTimer == INVALID_HANDLE)
{
if (!g_IniatedLastVote)
@ -959,19 +975,34 @@ public Action CS_OnTerminateRound(float &delay, CSRoundEndReason &reason)
g_DidRoundTerminate = true;
return Plugin_Handled; //it keeps retriggering this Action.
}
if (g_IniatedLastVote)
{
return Plugin_Handled; //just extra safety check
}
if (timeleft <= 0 && !g_ChangeMapAtRoundEnd)
{
int total_time = (GetConVarInt(g_Cvar_VoteDuration) * 2) + GetConVarInt(g_Cvar_WarningTime) + 10;
if (!g_IniatedLastVote)
{
g_IniatedLastVote = true;
CreateTimer(float(total_time + 10), Timer_fall_back_map_switch, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE);
//sometimes it will simply happen that theres a mapvote where nobody votes anything.
//have to prevent server from being stuck in those situations with this timer.
InitiateVote(MapChange_Instant); //feature so mapvote happens at actual mapend
}
return Plugin_Handled;
delay = float(total_time);
return Plugin_Changed;
}
g_DidRoundTerminate = false;
return Plugin_Continue;
}
public Action Timer_fall_back_map_switch(Handle hTimer, Handle dp)
{
ForceChangeLevel("ze_random_v9", "nobody voted at mapvote");
return Plugin_Handled;
}
/* You ask, why don't you just use team_score event? And I answer... Because CSS doesn't. */
public void Event_RoundEnd(Handle event, const char[] name, bool dontBroadcast)
{
@ -2351,6 +2382,12 @@ public int Native_InitiateVote(Handle plugin, int numParams)
LogAction(-1, -1, "Starting map vote because outside request");
int timeleft;
GetMapTimeLeft(timeleft);
if (timeleft <= 0 && !g_ChangeMapAtRoundEnd) //somehow a random vote might get triggered. this should prevent it
{
return 0;
}
if (!g_IniatedLastVote)
{
SetupWarningTimer(WarningType_Vote, when, inputarray);