updated translation file and mapvoting to allow weighted mapvotes
This commit is contained in:
parent
0b14a79482
commit
582703c271
@ -141,6 +141,9 @@ int g_mapFileSerial = -1;
|
|||||||
|
|
||||||
int g_NominateCount = 0;
|
int g_NominateCount = 0;
|
||||||
int g_NominateReservedCount = 0;
|
int g_NominateReservedCount = 0;
|
||||||
|
int g_iInterval;
|
||||||
|
float player_mapvote_worth[MAXPLAYERS + 1];
|
||||||
|
char player_mapvote[MAXPLAYERS + 1][PLATFORM_MAX_PATH];
|
||||||
MapChange g_ChangeTime;
|
MapChange g_ChangeTime;
|
||||||
|
|
||||||
//check if autismbot
|
//check if autismbot
|
||||||
@ -451,48 +454,50 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max
|
|||||||
|
|
||||||
public void OnMapStart()
|
public void OnMapStart()
|
||||||
{
|
{
|
||||||
static char folder[64];
|
ServerCommand("sm_cvar sm_vote_progress_hintbox 1"); //yeah its cheesy but does the job.
|
||||||
GetGameFolderName(folder, sizeof(folder));
|
g_iInterval = 0;
|
||||||
|
static char folder[64];
|
||||||
|
GetGameFolderName(folder, sizeof(folder));
|
||||||
|
|
||||||
g_RoundCounting = RoundCounting_Standard;
|
g_RoundCounting = RoundCounting_Standard;
|
||||||
g_ObjectiveEnt = -1;
|
g_ObjectiveEnt = -1;
|
||||||
|
|
||||||
if(strcmp(folder, "tf") == 0 && GameRules_GetProp("m_bPlayingMannVsMachine"))
|
if(strcmp(folder, "tf") == 0 && GameRules_GetProp("m_bPlayingMannVsMachine"))
|
||||||
{
|
{
|
||||||
g_RoundCounting = RoundCounting_MvM;
|
g_RoundCounting = RoundCounting_MvM;
|
||||||
g_ObjectiveEnt = EntIndexToEntRef(FindEntityByClassname(-1, "tf_objective_resource"));
|
g_ObjectiveEnt = EntIndexToEntRef(FindEntityByClassname(-1, "tf_objective_resource"));
|
||||||
}
|
}
|
||||||
else if(strcmp(folder, "csgo") == 0 && GetConVarInt(g_Cvar_GameType) == GameType_GunGame &&
|
else if(strcmp(folder, "csgo") == 0 && GetConVarInt(g_Cvar_GameType) == GameType_GunGame &&
|
||||||
GetConVarInt(g_Cvar_GameMode) == GunGameMode_ArmsRace)
|
GetConVarInt(g_Cvar_GameMode) == GunGameMode_ArmsRace)
|
||||||
{
|
{
|
||||||
g_RoundCounting = RoundCounting_ArmsRace;
|
g_RoundCounting = RoundCounting_ArmsRace;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(g_Config)
|
if(g_Config)
|
||||||
delete g_Config;
|
delete g_Config;
|
||||||
|
|
||||||
char sConfigFile[PLATFORM_MAX_PATH];
|
char sConfigFile[PLATFORM_MAX_PATH];
|
||||||
BuildPath(Path_SM, sConfigFile, sizeof(sConfigFile), "configs/mapchooser_extended.cfg");
|
BuildPath(Path_SM, sConfigFile, sizeof(sConfigFile), "configs/mapchooser_extended.cfg");
|
||||||
if(!FileExists(sConfigFile))
|
if(!FileExists(sConfigFile))
|
||||||
{
|
{
|
||||||
LogMessage("Could not find config: \"%s\"", sConfigFile);
|
LogMessage("Could not find config: \"%s\"", sConfigFile);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LogMessage("Found config: \"%s\"", sConfigFile);
|
LogMessage("Found config: \"%s\"", sConfigFile);
|
||||||
|
|
||||||
g_Config = new KeyValues("mapchooser_extended");
|
g_Config = new KeyValues("mapchooser_extended");
|
||||||
if(!g_Config.ImportFromFile(sConfigFile))
|
if(!g_Config.ImportFromFile(sConfigFile))
|
||||||
{
|
{
|
||||||
delete g_Config;
|
delete g_Config;
|
||||||
LogMessage("ImportFromFile() failed!");
|
LogMessage("ImportFromFile() failed!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
g_Config.Rewind();
|
g_Config.Rewind();
|
||||||
|
|
||||||
if(InternalAreRestrictionsActive())
|
if(InternalAreRestrictionsActive())
|
||||||
g_SaveCDOnMapEnd = true;
|
g_SaveCDOnMapEnd = true;
|
||||||
else
|
else
|
||||||
g_SaveCDOnMapEnd = false;
|
g_SaveCDOnMapEnd = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnConfigsExecuted()
|
public void OnConfigsExecuted()
|
||||||
@ -544,6 +549,8 @@ public void OnConfigsExecuted()
|
|||||||
|
|
||||||
public void OnMapEnd()
|
public void OnMapEnd()
|
||||||
{
|
{
|
||||||
|
ServerCommand("sm_cvar sm_vote_progress_hintbox 1"); //yeah its cheesy but does the job.
|
||||||
|
g_iInterval = 0;
|
||||||
g_HasVoteStarted = false;
|
g_HasVoteStarted = false;
|
||||||
g_WaitingForVote = false;
|
g_WaitingForVote = false;
|
||||||
g_ChangeMapAtRoundEnd = false;
|
g_ChangeMapAtRoundEnd = false;
|
||||||
@ -614,6 +621,8 @@ public void OnClientDisconnect_Post(int client)
|
|||||||
public void OnClientDisconnect(int client)
|
public void OnClientDisconnect(int client)
|
||||||
{
|
{
|
||||||
is_bot_player[client] = false;
|
is_bot_player[client] = false;
|
||||||
|
player_mapvote_worth[client] = 0.0;
|
||||||
|
Format(player_mapvote[client], 128, "");
|
||||||
int index = FindValueInArray(g_NominateOwners, client);
|
int index = FindValueInArray(g_NominateOwners, client);
|
||||||
|
|
||||||
if(index == -1)
|
if(index == -1)
|
||||||
@ -999,11 +1008,10 @@ public Handle get_most_nominated_maps()
|
|||||||
{
|
{
|
||||||
char map_iteration[PLATFORM_MAX_PATH];
|
char map_iteration[PLATFORM_MAX_PATH];
|
||||||
GetArrayString(g_NominateList[i], j, map_iteration, PLATFORM_MAX_PATH);
|
GetArrayString(g_NominateList[i], j, map_iteration, PLATFORM_MAX_PATH);
|
||||||
//PrintToChatAll("map_iteration: %s", map_iteration);
|
|
||||||
int nominate_count_for_particular_map = 0;
|
int nominate_count_for_particular_map = 0;
|
||||||
sm.GetValue(map_iteration, nominate_count_for_particular_map);
|
sm.GetValue(map_iteration, nominate_count_for_particular_map);
|
||||||
nominate_count_for_particular_map++;
|
nominate_count_for_particular_map++;
|
||||||
//if i is 0 its admin nominated map that most come into the vote
|
//if i is 0 its admin nominated map that must come into the vote
|
||||||
if(!i)
|
if(!i)
|
||||||
{
|
{
|
||||||
nominate_count_for_particular_map = 999;
|
nominate_count_for_particular_map = 999;
|
||||||
@ -1023,14 +1031,12 @@ public Handle get_most_nominated_maps()
|
|||||||
int size = keys.KeyBufferSize(j);
|
int size = keys.KeyBufferSize(j);
|
||||||
char[] buffer = new char[size];
|
char[] buffer = new char[size];
|
||||||
keys.GetKey(j, buffer, size);
|
keys.GetKey(j, buffer, size);
|
||||||
//PrintToChatAll("buffer: %s", buffer);
|
|
||||||
if (StrEqual(buffer, "nominated_maps"))
|
if (StrEqual(buffer, "nominated_maps"))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
int value = 0;
|
int value = 0;
|
||||||
sm.GetValue(buffer, value);
|
sm.GetValue(buffer, value);
|
||||||
//PrintToChatAll("value: %i", value);
|
|
||||||
|
|
||||||
//first selection has most nominates, second selection second most etc etc
|
//first selection has most nominates, second selection second most etc etc
|
||||||
if (value >= max_count)
|
if (value >= max_count)
|
||||||
@ -1084,7 +1090,6 @@ public Handle get_most_nominated_maps()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
PushArrayString(most_nominated_maps, picked_map);
|
PushArrayString(most_nominated_maps, picked_map);
|
||||||
//PrintToChatAll("picked_map: %s", picked_map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delete sm;
|
delete sm;
|
||||||
@ -1140,6 +1145,9 @@ void InitiateVote(MapChange when, Handle inputlist=INVALID_HANDLE)
|
|||||||
|
|
||||||
g_ChangeTime = when;
|
g_ChangeTime = when;
|
||||||
|
|
||||||
|
ServerCommand("sm_cvar sm_vote_progress_hintbox 0"); //yeah its cheesy but does the job.
|
||||||
|
g_iInterval = GetConVarInt(g_Cvar_VoteDuration);
|
||||||
|
CreateTimer(1.0, Timer_Countdown, _, TIMER_REPEAT);
|
||||||
|
|
||||||
g_HasVoteStarted = true;
|
g_HasVoteStarted = true;
|
||||||
|
|
||||||
@ -1352,7 +1360,22 @@ void InitiateVote(MapChange when, Handle inputlist=INVALID_HANDLE)
|
|||||||
if(GetConVarInt(g_Cvar_ShufflePerClient))
|
if(GetConVarInt(g_Cvar_ShufflePerClient))
|
||||||
MenuShufflePerClient(g_VoteMenu, MenuRandomShuffleStart, GetMenuItemCount(g_VoteMenu) - MenuRandomShuffleStop);
|
MenuShufflePerClient(g_VoteMenu, MenuRandomShuffleStart, GetMenuItemCount(g_VoteMenu) - MenuRandomShuffleStop);
|
||||||
|
|
||||||
VoteMenuToAll(g_VoteMenu, voteDuration);
|
//VoteMenuToAll(g_VoteMenu, voteDuration);
|
||||||
|
//2023 excluding nosteamers and autismbots.
|
||||||
|
|
||||||
|
int clients[MAXPLAYERS + 1];
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; i <= MaxClients; i++)
|
||||||
|
{
|
||||||
|
player_mapvote_worth[i] = 0.0;
|
||||||
|
Format(player_mapvote[i], 128, "");
|
||||||
|
if (IsValidClient(i) && PM_IsPlayerSteam(i) && !is_bot_player[i])
|
||||||
|
{
|
||||||
|
clients[count] = i;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
VoteMenu(g_VoteMenu, clients, sizeof(clients), voteDuration);
|
||||||
|
|
||||||
/* Call OnMapVoteStarted() Forward */
|
/* Call OnMapVoteStarted() Forward */
|
||||||
Call_StartForward(g_MapVoteStartForward); // Deprecated
|
Call_StartForward(g_MapVoteStartForward); // Deprecated
|
||||||
@ -1365,16 +1388,90 @@ void InitiateVote(MapChange when, Handle inputlist=INVALID_HANDLE)
|
|||||||
CPrintToChatAll("[MCE] %t", "Nextmap Voting Started");
|
CPrintToChatAll("[MCE] %t", "Nextmap Voting Started");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Handler_VoteFinishedGeneric(Handle menu,
|
public Action Timer_Countdown(Handle timer)
|
||||||
int num_votes,
|
|
||||||
int num_clients,
|
|
||||||
const int[][] client_info,
|
|
||||||
int num_items,
|
|
||||||
const int[][] item_info)
|
|
||||||
{
|
{
|
||||||
static char map[PLATFORM_MAX_PATH];
|
if (g_iInterval <= 0)
|
||||||
GetMapItem(menu, item_info[0][VOTEINFO_ITEM_INDEX], map, PLATFORM_MAX_PATH);
|
return Plugin_Stop;
|
||||||
|
|
||||||
|
float most_voted[3];
|
||||||
|
char most_voted_map[3][PLATFORM_MAX_PATH];
|
||||||
|
|
||||||
|
for (int j = 0; j < 3; j++)
|
||||||
|
{
|
||||||
|
float max_count = 0.0;
|
||||||
|
StringMap sm = new StringMap();
|
||||||
|
char picked_map[PLATFORM_MAX_PATH];
|
||||||
|
for (int i = 0; i < MaxClients; i++)
|
||||||
|
{
|
||||||
|
if (IsValidClient(i) && !StrEqual(player_mapvote[i], ""))
|
||||||
|
{
|
||||||
|
if (StrEqual(player_mapvote[i], most_voted_map[0]) || StrEqual(player_mapvote[i], most_voted_map[1]) ||
|
||||||
|
StrEqual(player_mapvote[i], most_voted_map[2]))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
float value = 0.0;
|
||||||
|
sm.GetValue(player_mapvote[i], value);
|
||||||
|
value += player_mapvote_worth[i];
|
||||||
|
sm.SetValue(player_mapvote[i], value, true);
|
||||||
|
if (value >= max_count)
|
||||||
|
{
|
||||||
|
max_count = value;
|
||||||
|
strcopy(picked_map, sizeof(picked_map), player_mapvote[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
most_voted[j] = max_count;
|
||||||
|
Format(most_voted_map[j], PLATFORM_MAX_PATH, picked_map);
|
||||||
|
delete sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
float total_votes = 0.0;
|
||||||
|
float voted_so_far = 0.0;
|
||||||
|
for (int i = 0; i < MaxClients; i++)
|
||||||
|
{
|
||||||
|
if (IsValidClient(i))
|
||||||
|
{
|
||||||
|
total_votes += player_mapvote_worth[i];
|
||||||
|
if (!StrEqual(player_mapvote[i], ""))
|
||||||
|
{
|
||||||
|
voted_so_far += player_mapvote_worth[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//why on earth is %%%s needed for formatting it to show a % lmao. just %s, "%" or %% on their own dont work.
|
||||||
|
if (strlen(most_voted_map[2]) > 0)
|
||||||
|
{
|
||||||
|
//displaying 3 most voted maps
|
||||||
|
PrintHintTextToAll("Votes: %i/100%%%s, %ds left\n1. %s: (%i%%%s)\n2. %s: (%i%%%s)\n3. %s: (%i%%%s)", RoundToFloor((voted_so_far/total_votes) * 100),
|
||||||
|
"%", g_iInterval, most_voted_map[0], RoundToFloor((most_voted[0]/total_votes) * 100), "%", most_voted_map[1], RoundToFloor((most_voted[1]/total_votes) * 100),
|
||||||
|
"%", most_voted_map[2], RoundToFloor((most_voted[2]/total_votes) * 100), "%");
|
||||||
|
}
|
||||||
|
else if (strlen(most_voted_map[1]) > 0)
|
||||||
|
{
|
||||||
|
//displaying 2 most voted maps
|
||||||
|
PrintHintTextToAll("Votes: %i/100%%%s, %ds left\n1. %s: (%i%%%s)\n2. %s: (%i%%%s)", RoundToFloor((voted_so_far/total_votes) * 100), "%", g_iInterval,
|
||||||
|
most_voted_map[0], RoundToFloor((most_voted[0]/total_votes) * 100), "%", most_voted_map[1], RoundToFloor((most_voted[1]/total_votes) * 100), "%");
|
||||||
|
}
|
||||||
|
else if (strlen(most_voted_map[0]) > 0)
|
||||||
|
{
|
||||||
|
//displaying the most voted map
|
||||||
|
PrintHintTextToAll("Votes: %i/100%%%s, %ds left\n1. %s: (%i%%%s)", RoundToFloor((voted_so_far/total_votes) * 100),
|
||||||
|
"%", g_iInterval, most_voted_map[0], RoundToFloor((most_voted[0]/total_votes) * 100), "%");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//displaying just the votecount and vote duration remaining
|
||||||
|
PrintHintTextToAll("Votes: %i/100%%%s, %ds left", RoundToFloor((voted_so_far/total_votes) * 100), "%", g_iInterval);
|
||||||
|
}
|
||||||
|
g_iInterval--;
|
||||||
|
return Plugin_Continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Handler_VoteFinishedGeneric(char[] map,
|
||||||
|
float num_votes,
|
||||||
|
float map_votes)
|
||||||
|
{
|
||||||
Call_StartForward(g_MapVoteEndForward);
|
Call_StartForward(g_MapVoteEndForward);
|
||||||
Call_PushString(map);
|
Call_PushString(map);
|
||||||
Call_Finish();
|
Call_Finish();
|
||||||
@ -1382,7 +1479,6 @@ public void Handler_VoteFinishedGeneric(Handle menu,
|
|||||||
if(strcmp(map, VOTE_EXTEND, false) == 0)
|
if(strcmp(map, VOTE_EXTEND, false) == 0)
|
||||||
{
|
{
|
||||||
g_Extends++;
|
g_Extends++;
|
||||||
|
|
||||||
int time;
|
int time;
|
||||||
if(GetMapTimeLimit(time))
|
if(GetMapTimeLimit(time))
|
||||||
{
|
{
|
||||||
@ -1402,7 +1498,7 @@ public void Handler_VoteFinishedGeneric(Handle menu,
|
|||||||
if(fraglimit)
|
if(fraglimit)
|
||||||
SetConVarInt(g_Cvar_Fraglimit, fraglimit + GetConVarInt(g_Cvar_ExtendFragStep));
|
SetConVarInt(g_Cvar_Fraglimit, fraglimit + GetConVarInt(g_Cvar_ExtendFragStep));
|
||||||
|
|
||||||
CPrintToChatAll("[MCE] %t", "Current Map Extended", RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100.0), num_votes);
|
CPrintToChatAll("[MCE] %t", "Current Map Extended", RoundToFloor(map_votes /num_votes*100.0));
|
||||||
LogAction(-1, -1, "Voting for next map has finished. The current map has been extended.");
|
LogAction(-1, -1, "Voting for next map has finished. The current map has been extended.");
|
||||||
CPrintToChatAll("[MCE] Available Extends: %d", GetConVarInt(g_Cvar_Extend) - g_Extends);
|
CPrintToChatAll("[MCE] Available Extends: %d", GetConVarInt(g_Cvar_Extend) - g_Extends);
|
||||||
|
|
||||||
@ -1413,7 +1509,7 @@ public void Handler_VoteFinishedGeneric(Handle menu,
|
|||||||
}
|
}
|
||||||
else if(strcmp(map, VOTE_DONTCHANGE, false) == 0)
|
else if(strcmp(map, VOTE_DONTCHANGE, false) == 0)
|
||||||
{
|
{
|
||||||
CPrintToChatAll("[MCE] %t", "Current Map Stays", RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100.0), num_votes);
|
CPrintToChatAll("[MCE] %t", "Current Map Stays", RoundToFloor(map_votes /num_votes*100.0));
|
||||||
LogAction(-1, -1, "Voting for next map has finished. 'No Change' was the winner");
|
LogAction(-1, -1, "Voting for next map has finished. 'No Change' was the winner");
|
||||||
|
|
||||||
g_RunoffCount = 0;
|
g_RunoffCount = 0;
|
||||||
@ -1442,7 +1538,8 @@ public void Handler_VoteFinishedGeneric(Handle menu,
|
|||||||
g_HasVoteStarted = false;
|
g_HasVoteStarted = false;
|
||||||
g_MapVoteCompleted = true;
|
g_MapVoteCompleted = true;
|
||||||
|
|
||||||
CPrintToChatAll("[MCE] %t", "Nextmap Voting Finished", map, RoundToFloor(float(item_info[0][VOTEINFO_ITEM_VOTES])/float(num_votes)*100.0), num_votes);
|
//PrintToChatAll("map: %s", map);
|
||||||
|
CPrintToChatAll("[MCE] %t", "Nextmap Voting Finished", map, RoundToFloor((map_votes /num_votes)*100.0));
|
||||||
LogAction(-1, -1, "Voting for next map has finished. Nextmap: %s.", map);
|
LogAction(-1, -1, "Voting for next map has finished. Nextmap: %s.", map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1454,17 +1551,79 @@ public void Handler_MapVoteFinished(Handle menu,
|
|||||||
int num_items,
|
int num_items,
|
||||||
const int[][] item_info)
|
const int[][] item_info)
|
||||||
{
|
{
|
||||||
|
g_iInterval = 1; //we display it shortly after finishing
|
||||||
|
ServerCommand("sm_cvar sm_vote_progress_hintbox 1"); //yeah its cheesy but does the job.
|
||||||
|
//reweighting votes
|
||||||
|
StringMap sm = new StringMap();
|
||||||
|
for (int i = 0; i < num_clients; i++)
|
||||||
|
{
|
||||||
|
int client = client_info[i][0];
|
||||||
|
//default intention is 1-5 votes, just like rtv.
|
||||||
|
float vote_ammount = GetPlayerWorthRTV_boost_(client);
|
||||||
|
int item_index = client_info[i][VOTEINFO_CLIENT_ITEM];
|
||||||
|
static char map[PLATFORM_MAX_PATH];
|
||||||
|
for(int j = 0; j < num_items; j++)
|
||||||
|
{
|
||||||
|
if (item_info[j][VOTEINFO_ITEM_INDEX] == item_index)
|
||||||
|
{
|
||||||
|
GetMapItem(menu, item_info[j][VOTEINFO_ITEM_INDEX], map, PLATFORM_MAX_PATH);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
float value = 0.0;
|
||||||
|
sm.GetValue(map, value);
|
||||||
|
value += vote_ammount;
|
||||||
|
sm.SetValue(map, value, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ordering stringmap by voteweight
|
||||||
|
float[] weighted_votes = new float[num_items];
|
||||||
|
char[][] weighted_maps = new char[num_items][PLATFORM_MAX_PATH];
|
||||||
|
for (int i = 0; i < num_items; i++)
|
||||||
|
{
|
||||||
|
StringMapSnapshot keys = sm.Snapshot();
|
||||||
|
float max_count = 0.0;
|
||||||
|
char picked_map[PLATFORM_MAX_PATH];
|
||||||
|
for (int j = 0; j < keys.Length; j++)
|
||||||
|
{
|
||||||
|
int size = keys.KeyBufferSize(j);
|
||||||
|
char[] buffer = new char[size];
|
||||||
|
keys.GetKey(j, buffer, size);
|
||||||
|
float value = 0.0;
|
||||||
|
sm.GetValue(buffer, value);
|
||||||
|
|
||||||
|
//first selection has most votes, second selection second most etc etc
|
||||||
|
if (value >= max_count)
|
||||||
|
{
|
||||||
|
max_count = value;
|
||||||
|
strcopy(picked_map, sizeof(picked_map), buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sm.Remove(picked_map);
|
||||||
|
weighted_votes[i] = max_count;
|
||||||
|
Format(weighted_maps[i], 128, picked_map);
|
||||||
|
delete keys;
|
||||||
|
}
|
||||||
|
delete sm;
|
||||||
|
|
||||||
|
float total_votes = 0.0;
|
||||||
|
for (int i = 0; i < MaxClients; i++)
|
||||||
|
{
|
||||||
|
if (IsValidClient(i))
|
||||||
|
{
|
||||||
|
total_votes += player_mapvote_worth[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
// Implement revote logic - Only run this` block if revotes are enabled and this isn't the last revote'
|
// Implement revote logic - Only run this` block if revotes are enabled and this isn't the last revote'
|
||||||
//LogMessage("Mapchooser_extended_avg Handler_MapVoteFinished.");
|
//LogMessage("Mapchooser_extended_avg Handler_MapVoteFinished.");
|
||||||
//LogMessage("Mapchooser_extended_avg g_Cvar_RunOff: %i num_items: %i g_RunoffCount %i g_Cvar_MaxRunOffs %i", GetConVarBool(g_Cvar_RunOff), num_items, g_RunoffCount, GetConVarInt(g_Cvar_MaxRunOffs));
|
int required_percent = GetConVarInt(g_Cvar_RunOffPercent);
|
||||||
if(GetConVarBool(g_Cvar_RunOff) && num_items > 1 && g_RunoffCount < GetConVarInt(g_Cvar_MaxRunOffs))
|
int required_votes = RoundToCeil(total_votes * float(required_percent) / 100.0);
|
||||||
|
if(GetConVarBool(g_Cvar_RunOff) && g_RunoffCount < GetConVarInt(g_Cvar_MaxRunOffs) && num_items > 1 &&
|
||||||
|
(weighted_votes[0] == weighted_votes[1] || weighted_votes[0] < required_votes))
|
||||||
{
|
{
|
||||||
//LogMessage("Mapchooser_extended_avg Handler_MapVoteFinished passed check1.");
|
//LogMessage("Mapchooser_extended_avg Handler_MapVoteFinished passed check1.");
|
||||||
g_RunoffCount++;
|
g_RunoffCount++;
|
||||||
int highest_votes = item_info[0][VOTEINFO_ITEM_VOTES];
|
if(weighted_votes[0] == weighted_votes[1])
|
||||||
int required_percent = GetConVarInt(g_Cvar_RunOffPercent);
|
|
||||||
int required_votes = RoundToCeil(float(num_votes) * float(required_percent) / 100.0);
|
|
||||||
if(highest_votes == item_info[1][VOTEINFO_ITEM_VOTES])
|
|
||||||
{
|
{
|
||||||
g_HasVoteStarted = false;
|
g_HasVoteStarted = false;
|
||||||
|
|
||||||
@ -1472,14 +1631,12 @@ public void Handler_MapVoteFinished(Handle menu,
|
|||||||
int arraySize = ByteCountToCells(PLATFORM_MAX_PATH);
|
int arraySize = ByteCountToCells(PLATFORM_MAX_PATH);
|
||||||
Handle mapList = CreateArray(arraySize);
|
Handle mapList = CreateArray(arraySize);
|
||||||
|
|
||||||
|
//adding all maps with same amount of votes
|
||||||
for(int i = 0; i < num_items; i++)
|
for(int i = 0; i < num_items; i++)
|
||||||
{
|
{
|
||||||
if(item_info[i][VOTEINFO_ITEM_VOTES] == highest_votes)
|
if(weighted_votes[i] == weighted_votes[0])
|
||||||
{
|
{
|
||||||
static char map[PLATFORM_MAX_PATH];
|
PushArrayString(mapList, weighted_maps[i]);
|
||||||
|
|
||||||
GetMapItem(menu, item_info[i][VOTEINFO_ITEM_INDEX], map, PLATFORM_MAX_PATH);
|
|
||||||
PushArrayString(mapList, map);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
@ -1490,7 +1647,7 @@ public void Handler_MapVoteFinished(Handle menu,
|
|||||||
SetupWarningTimer(WarningType_Revote, view_as<MapChange>(g_ChangeTime), mapList);
|
SetupWarningTimer(WarningType_Revote, view_as<MapChange>(g_ChangeTime), mapList);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(highest_votes < required_votes)
|
else if(weighted_votes[0] < required_votes)
|
||||||
{
|
{
|
||||||
g_HasVoteStarted = false;
|
g_HasVoteStarted = false;
|
||||||
|
|
||||||
@ -1498,19 +1655,13 @@ public void Handler_MapVoteFinished(Handle menu,
|
|||||||
int arraySize = ByteCountToCells(PLATFORM_MAX_PATH);
|
int arraySize = ByteCountToCells(PLATFORM_MAX_PATH);
|
||||||
Handle mapList = CreateArray(arraySize);
|
Handle mapList = CreateArray(arraySize);
|
||||||
|
|
||||||
static char map1[PLATFORM_MAX_PATH];
|
PushArrayString(mapList, weighted_maps[0]);
|
||||||
GetMapItem(menu, item_info[0][VOTEINFO_ITEM_INDEX], map1, PLATFORM_MAX_PATH);
|
|
||||||
|
|
||||||
PushArrayString(mapList, map1);
|
|
||||||
|
|
||||||
// We allow more than two maps for a revote if they are tied
|
// We allow more than two maps for a revote if they are tied
|
||||||
for(int i = 1; i < num_items; i++)
|
for(int i = 1; i < num_items; i++)
|
||||||
{
|
{
|
||||||
if(GetArraySize(mapList) < 2 || item_info[i][VOTEINFO_ITEM_VOTES] == item_info[i - 1][VOTEINFO_ITEM_VOTES])
|
if(GetArraySize(mapList) < 2 || weighted_votes[i] == weighted_votes[i - 1])
|
||||||
{
|
{
|
||||||
static char map[PLATFORM_MAX_PATH];
|
PushArrayString(mapList, weighted_maps[i]);
|
||||||
GetMapItem(menu, item_info[i][VOTEINFO_ITEM_INDEX], map, PLATFORM_MAX_PATH);
|
|
||||||
PushArrayString(mapList, map);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
@ -1526,7 +1677,7 @@ public void Handler_MapVoteFinished(Handle menu,
|
|||||||
g_WaitingForVote = false;
|
g_WaitingForVote = false;
|
||||||
//LogMessage("Mapchooser_extended_avg no revote needed, continue as normal.");
|
//LogMessage("Mapchooser_extended_avg no revote needed, continue as normal.");
|
||||||
// No revote needed, continue as normal.
|
// No revote needed, continue as normal.
|
||||||
Handler_VoteFinishedGeneric(menu, num_votes, num_clients, client_info, num_items, item_info);
|
Handler_VoteFinishedGeneric(weighted_maps[0], total_votes, weighted_votes[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int Handler_MapVoteMenu(Handle menu, MenuAction action, int param1, int param2)
|
public int Handler_MapVoteMenu(Handle menu, MenuAction action, int param1, int param2)
|
||||||
@ -1538,14 +1689,31 @@ public int Handler_MapVoteMenu(Handle menu, MenuAction action, int param1, int p
|
|||||||
g_VoteMenu = INVALID_HANDLE;
|
g_VoteMenu = INVALID_HANDLE;
|
||||||
delete menu;
|
delete menu;
|
||||||
}
|
}
|
||||||
|
case MenuAction_Select:
|
||||||
|
{
|
||||||
|
char map[PLATFORM_MAX_PATH];
|
||||||
|
GetMenuItem(menu, param2, map, PLATFORM_MAX_PATH, _, _, _, param1);
|
||||||
|
if (StrEqual(map, "##dontchange##"))
|
||||||
|
{
|
||||||
|
Format(map, sizeof(map), "Dont change");
|
||||||
|
}
|
||||||
|
else if (StrEqual(map, "##extend##"))
|
||||||
|
{
|
||||||
|
Format(map, sizeof(map), "Extend");
|
||||||
|
}
|
||||||
|
Format(player_mapvote[param1], 128, map);
|
||||||
|
}
|
||||||
case MenuAction_Display:
|
case MenuAction_Display:
|
||||||
{
|
{
|
||||||
static char buffer[255];
|
static char buffer[255];
|
||||||
Format(buffer, sizeof(buffer), "%T", "Vote Nextmap", param1);
|
GetPlayerWorthRTV_(param1);
|
||||||
|
float rtv_worth = GetPlayerWorthRTV_boost_(param1);
|
||||||
|
player_mapvote_worth[param1] = rtv_worth;
|
||||||
|
Format(buffer, sizeof(buffer), "%T", "Vote Nextmap", param1, rtv_worth);
|
||||||
Handle panel = view_as<Handle>(param2);
|
Handle panel = view_as<Handle>(param2);
|
||||||
SetPanelTitle(panel, buffer);
|
SetPanelTitle(panel, buffer);
|
||||||
DrawPanelText(panel, "Warning: The Position of the Maps are different for each Player.");
|
char PannelText[256] = "Warning: The Position of the Maps are different for each Player.";
|
||||||
|
DrawPanelText(panel, PannelText);
|
||||||
}
|
}
|
||||||
|
|
||||||
case MenuAction_DisplayItem:
|
case MenuAction_DisplayItem:
|
||||||
@ -1555,7 +1723,6 @@ public int Handler_MapVoteMenu(Handle menu, MenuAction action, int param1, int p
|
|||||||
int mark = GetConVarInt(g_Cvar_MarkCustomMaps);
|
int mark = GetConVarInt(g_Cvar_MarkCustomMaps);
|
||||||
|
|
||||||
GetMenuItem(menu, param2, map, PLATFORM_MAX_PATH, _, _, _, param1);
|
GetMenuItem(menu, param2, map, PLATFORM_MAX_PATH, _, _, _, param1);
|
||||||
|
|
||||||
if(StrEqual(map, VOTE_EXTEND, false))
|
if(StrEqual(map, VOTE_EXTEND, false))
|
||||||
{
|
{
|
||||||
Format(buffer, sizeof(buffer), "%T", "Extend Map", param1);
|
Format(buffer, sizeof(buffer), "%T", "Extend Map", param1);
|
||||||
@ -1633,6 +1800,8 @@ public int Handler_MapVoteMenu(Handle menu, MenuAction action, int param1, int p
|
|||||||
g_WaitingForVote = false;
|
g_WaitingForVote = false;
|
||||||
g_HasVoteStarted = false;
|
g_HasVoteStarted = false;
|
||||||
g_RunoffCount = 0;
|
g_RunoffCount = 0;
|
||||||
|
g_iInterval = 1; //we display it shortly after finishing
|
||||||
|
ServerCommand("sm_cvar sm_vote_progress_hintbox 1"); //yeah its cheesy but does the job.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -2814,6 +2983,8 @@ stock int InternalGetMapTimeRestriction(const char[] map)
|
|||||||
public void OnClientPostAdminCheck(int client)
|
public void OnClientPostAdminCheck(int client)
|
||||||
{
|
{
|
||||||
is_bot_player[client] = false;
|
is_bot_player[client] = false;
|
||||||
|
player_mapvote_worth[client] = 0.0;
|
||||||
|
Format(player_mapvote[client], 128, "");
|
||||||
char auth[50];
|
char auth[50];
|
||||||
GetClientAuthId(client, AuthId_Engine, auth, sizeof(auth));
|
GetClientAuthId(client, AuthId_Engine, auth, sizeof(auth));
|
||||||
if (StrEqual("[U:1:1221121532]", auth, false) || StrEqual("STEAM_0:0:610560766", auth, false))
|
if (StrEqual("[U:1:1221121532]", auth, false) || StrEqual("STEAM_0:0:610560766", auth, false))
|
||||||
@ -3047,3 +3218,10 @@ stock int TimeStrToSeconds(const char[] str)
|
|||||||
}
|
}
|
||||||
return seconds;
|
return seconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stock bool IsValidClient(int client)
|
||||||
|
{
|
||||||
|
if (client > 0 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client) && !IsFakeClient(client) && !IsClientSourceTV(client))
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
{
|
{
|
||||||
"Vote Nextmap"
|
"Vote Nextmap"
|
||||||
{
|
{
|
||||||
"en" "Vote for the next map!"
|
"#format" "{1:.1f}"
|
||||||
|
"en" "Vote for the next map! ({1} Mapvote Boost)"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Nextmap Voting Started"
|
"Nextmap Voting Started"
|
||||||
@ -12,14 +13,14 @@
|
|||||||
|
|
||||||
"Nextmap Voting Finished"
|
"Nextmap Voting Finished"
|
||||||
{
|
{
|
||||||
"#format" "{1:s},{2:i},{3:i}"
|
"#format" "{1:s},{2:i}"
|
||||||
"en" "Map voting has finished. The next map will be {1}. (Received {2}%% of {3} votes)"
|
"en" "Map voting has finished. The next map will be {1}. (Received {2}%% of votes)"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Current Map Extended"
|
"Current Map Extended"
|
||||||
{
|
{
|
||||||
"#format" "{1:i},{2:i}"
|
"#format" "{1:i}"
|
||||||
"en" "The current map has been extended. (Received {1}%% of {2} votes)"
|
"en" "The current map has been extended. (Received {1}%% of votes)"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Extend Map"
|
"Extend Map"
|
||||||
@ -34,8 +35,8 @@
|
|||||||
|
|
||||||
"Current Map Stays"
|
"Current Map Stays"
|
||||||
{
|
{
|
||||||
"#format" "{1:i},{2:i}"
|
"#format" "{1:i}"
|
||||||
"en" "Current map continues! The Vote has spoken! (Received {1}%% of {2} votes)"
|
"en" "Current map continues! The Vote has spoken! (Received {1}%% of votes)"
|
||||||
}
|
}
|
||||||
|
|
||||||
"Changed Next Map"
|
"Changed Next Map"
|
||||||
|
Loading…
Reference in New Issue
Block a user