added a casual pool feature that will be prioritized when picking random maps for the mapvote

This commit is contained in:
jenz 2024-09-27 12:31:54 +02:00
parent c267fb1457
commit d9987c554d

View File

@ -147,6 +147,7 @@ bool g_DidRoundTerminate = false;
bool g_IniatedLastVote = false; bool g_IniatedLastVote = false;
int g_mapFileSerial = -1; int g_mapFileSerial = -1;
int g_iPlayerCount_excludeSpec; int g_iPlayerCount_excludeSpec;
int g_iMapsFromCasualPool;
int g_iPlayerAFKTime; int g_iPlayerAFKTime;
@ -294,6 +295,11 @@ public void OnPluginStart()
g_Cvar_VoteDuration = CreateConVar("mce_voteduration", "20", "Specifies how long the mapvote should be available for.", _, true, 5.0); g_Cvar_VoteDuration = CreateConVar("mce_voteduration", "20", "Specifies how long the mapvote should be available for.", _, true, 5.0);
ConVar cvar2;
HookConVarChange((cvar2 = CreateConVar("mce_randomized_maps_from_casual_pool", "2", "f we have space left over for randomized maps at the mapvote. how many should be prioritized from the casual pool?")), Cvar_mapsFromCasualPool);
g_iMapsFromCasualPool = cvar2.IntValue;
delete cvar2;
ConVar cvar1; ConVar cvar1;
HookConVarChange((cvar1 = CreateConVar("sm_active_players_required", "15", "Amount of players required to be considered active before any restrictions are enabled at all.")), Cvar_playerExcludeSpec); HookConVarChange((cvar1 = CreateConVar("sm_active_players_required", "15", "Amount of players required to be considered active before any restrictions are enabled at all.")), Cvar_playerExcludeSpec);
g_iPlayerCount_excludeSpec = cvar1.IntValue; g_iPlayerCount_excludeSpec = cvar1.IntValue;
@ -436,6 +442,11 @@ public void OnPluginStart()
ServerCommand("sm_cvar mp_chattime %i", total_time); //prevents map switching supposedly. ServerCommand("sm_cvar mp_chattime %i", total_time); //prevents map switching supposedly.
} }
public void Cvar_mapsFromCasualPool(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iMapsFromCasualPool = convar.IntValue;
}
public void Cvar_playerExcludeSpec(ConVar convar, const char[] oldValue, const char[] newValue) public void Cvar_playerExcludeSpec(ConVar convar, const char[] oldValue, const char[] newValue)
{ {
g_iPlayerCount_excludeSpec = convar.IntValue; g_iPlayerCount_excludeSpec = convar.IntValue;
@ -1015,13 +1026,8 @@ public Action CS_OnTerminateRound(float &delay, CSRoundEndReason &reason)
public Action unfreeze_players(Handle hTimer, Handle dp) public Action unfreeze_players(Handle hTimer, Handle dp)
{ {
char map[64]; ServerCommand("sm_testround");
GetCurrentMap(map, PLATFORM_MAX_PATH); CreateTimer(1.0, unfreeze_players2, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE);
if (StrContains(map, "ze_", false) != -1)
{
ServerCommand("sm_testround");
CreateTimer(1.0, unfreeze_players2, INVALID_HANDLE, TIMER_FLAG_NO_MAPCHANGE);
}
return Plugin_Handled; return Plugin_Handled;
} }
@ -2156,14 +2162,29 @@ void CreateNextVote()
} }
// find random maps which honor all restrictions // find random maps which honor all restrictions
int pickedFromCasualPool = 0;
for(int i = 0; i < limit; i++) for(int i = 0; i < limit; i++)
{ {
int b; int b;
for(int j = 0; j < 1000; j++) for(int j = 0; j < 1000; j++)
{ {
b = GetRandomInt(0, GetArraySize(tempMaps) - 1); b = GetRandomInt(0, GetArraySize(tempMaps) - 1);
GetArrayString(tempMaps, b, map, PLATFORM_MAX_PATH); GetArrayString(tempMaps, b, map, PLATFORM_MAX_PATH);
//if we abandon the feature again its important to just set mce_randomized_maps_from_casual_pool to 0.
if (pickedFromCasualPool < g_iMapsFromCasualPool)
{
if (!InternalGetCasualPool(map))
{
continue;
}
//requested by keen in september 2024 that we have a pool that is prioritized when taking random maps.
//it might be considered micro management which would indeed be bad. i guess this is mostly about pleasing a regular players request
//which does not seem too outlandish to make possible.
pickedFromCasualPool++;
break;
}
if(!InternalAreRestrictionsActive(false)) if(!InternalAreRestrictionsActive(false))
break; break;
@ -3307,6 +3328,18 @@ stock int FindIntInArray(int[] array, int size, int value)
return -1; return -1;
} }
stock bool InternalGetCasualPool(const char[] map)
{
int CasualPool = 0;
if(g_Config && g_Config.JumpToKey(map))
{
CasualPool = g_Config.GetNum("CasualPool", CasualPool);
g_Config.Rewind();
}
return view_as<bool>(CasualPool);
}
stock bool InternalGetMapVIPRestriction(const char[] map) stock bool InternalGetMapVIPRestriction(const char[] map)
{ {
int VIP = 0; int VIP = 0;