From 3589dd66a38afc5006bced111592973c3808dd59 Mon Sep 17 00:00:00 2001 From: jenz Date: Sat, 21 Sep 2024 11:18:03 +0200 Subject: [PATCH] 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 --- .../mapchooser_extended_avg_mapend.sp | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/mapchooser_extended/scripting/mapchooser_extended_avg_mapend.sp b/mapchooser_extended/scripting/mapchooser_extended_avg_mapend.sp index 33b264f3..550a26b5 100755 --- a/mapchooser_extended/scripting/mapchooser_extended_avg_mapend.sp +++ b/mapchooser_extended/scripting/mapchooser_extended_avg_mapend.sp @@ -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);