now re-evaluting each rtv when a person disconnects or connects
This commit is contained in:
		
							parent
							
								
									50058d15f1
								
							
						
					
					
						commit
						59eb86fa23
					
				| @ -68,7 +68,6 @@ ConVar g_Cvar_RTVRevoteDelay; | ||||
| bool is_bot_player[MAXPLAYERS + 1]; | ||||
| bool g_CanRTV = false;			// True if RTV loaded maps and is active. | ||||
| bool g_RTVAllowed = false;		// True if RTV is available to players. Used to delay rtv votes. | ||||
| int g_Votes = 0;				// 2023: accumulated rtv average hours from typing "rtv". minimum each valid client is equal to GetAveragePlayerTimeOnServerRTV, but can be more | ||||
| int g_VotesNeeded = 0;			// Necessary votes before map vote begins. (2023: voters average hour count * percent_needed) | ||||
| bool g_Voted[MAXPLAYERS+1] = {false, ...}; | ||||
| int g_iTimeTillRTV[MAXPLAYERS+1] = {0, ...}; | ||||
| @ -106,7 +105,6 @@ public void OnPluginStart() | ||||
| 
 | ||||
| public void OnMapStart() | ||||
| { | ||||
| 	g_Votes = 0; | ||||
| 	g_VotesNeeded = 0; | ||||
| 	g_InChange = false; | ||||
| 
 | ||||
| @ -146,7 +144,6 @@ public void OnClientDisconnect(int client) | ||||
|     { | ||||
|         g_Voted[client] = false; | ||||
|         g_iTimeTillRTV[client] = 0; | ||||
|         g_Votes -= GetPlayerWorthRTV_(client); | ||||
|     } | ||||
| 
 | ||||
|     UpdateRTV(); | ||||
| @ -204,9 +201,10 @@ void UpdateRTV() | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (g_Votes && | ||||
|     int Votes = get_voted_rtv(); | ||||
|     if (Votes && | ||||
|         iVotersSteam && | ||||
|         g_Votes >= g_VotesNeeded && | ||||
|         Votes >= g_VotesNeeded && | ||||
|         RTVAllowed()) | ||||
|     { | ||||
|         if (g_Cvar_RTVPostVoteAction.IntValue == 1 && HasEndOfMapVoteFinished()) | ||||
| @ -218,6 +216,19 @@ void UpdateRTV() | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| public int get_voted_rtv() | ||||
| { | ||||
|     int Votes = 0; | ||||
|     for (int i = 0; i < MaxClients; i++) | ||||
|     { | ||||
|         if (IsValidClient(i) && g_Voted[i]) | ||||
|         { | ||||
|             Votes += GetPlayerWorthRTV_(i); | ||||
|         } | ||||
|     } | ||||
|     return Votes; | ||||
| } | ||||
| 
 | ||||
| public void OnClientSayCommand_Post(int client, const char[] command, const char[] sArgs) | ||||
| { | ||||
| 	if (!g_CanRTV || !client) | ||||
| @ -276,11 +287,16 @@ void AttemptRTV(int client) | ||||
|     if (g_Voted[client]) | ||||
|     { | ||||
|         float rtv_worth = GetPlayerWorthRTV_boost_(client); | ||||
|         int Votes = get_voted_rtv(); | ||||
|         if (g_VotesNeeded == 0) | ||||
|         { | ||||
|             g_VotesNeeded = g_Votes; | ||||
|             g_VotesNeeded = Votes; | ||||
|         } | ||||
|         int rtv_percentage_reached = RoundToFloor((float(Votes) / float(g_VotesNeeded)) * 100); | ||||
|         if (rtv_percentage_reached > 100) | ||||
|         { | ||||
|             rtv_percentage_reached = 100; | ||||
|         } | ||||
|         int rtv_percentage_reached = RoundToFloor((float(g_Votes) / float(g_VotesNeeded)) * 100); | ||||
|         ReplyToCommand(client, "[RTVE] %t", "Already Voted", rtv_percentage_reached, "%", rtv_worth); | ||||
|         return; | ||||
|     } | ||||
| @ -294,18 +310,22 @@ void AttemptRTV(int client) | ||||
|     char name[MAX_NAME_LENGTH]; | ||||
|     GetClientName(client, name, sizeof(name)); | ||||
| 
 | ||||
|     g_Votes += GetPlayerWorthRTV_(client); | ||||
|     g_Voted[client] = true; | ||||
| 
 | ||||
|     int Votes = get_voted_rtv(); | ||||
|     float rtv_worth = GetPlayerWorthRTV_boost_(client); | ||||
|     if (g_VotesNeeded == 0) | ||||
|     { | ||||
|         g_VotesNeeded = g_Votes; | ||||
|         g_VotesNeeded = Votes; | ||||
|     } | ||||
|     int rtv_percentage_reached = RoundToFloor((float(Votes) / float(g_VotesNeeded)) * 100); | ||||
|     if (rtv_percentage_reached > 100) | ||||
|     { | ||||
|         rtv_percentage_reached = 100; | ||||
|     } | ||||
|     int rtv_percentage_reached = RoundToFloor((float(g_Votes) / float(g_VotesNeeded)) * 100); | ||||
|     PrintToChatAll("[RTVE] %t", "RTV Requested", name, rtv_percentage_reached, "%", rtv_worth); | ||||
| 
 | ||||
|     if (g_Votes >= g_VotesNeeded) | ||||
|     if (Votes >= g_VotesNeeded) | ||||
|     { | ||||
|         StartRTV(); | ||||
|     } | ||||
| @ -334,7 +354,6 @@ void AttemptUnRTV(int client) | ||||
| 	char name[MAX_NAME_LENGTH]; | ||||
| 	GetClientName(client, name, sizeof(name)); | ||||
| 
 | ||||
| 	g_Votes -= GetPlayerWorthRTV_(client); | ||||
| 	g_Voted[client] = false; | ||||
| 	g_iTimeTillRTV[client] = GetTime() + g_Cvar_RTVRevoteDelay.IntValue; | ||||
| 
 | ||||
| @ -388,8 +407,6 @@ void StartRTV() | ||||
| 
 | ||||
| void ResetRTV() | ||||
| { | ||||
| 	g_Votes = 0; | ||||
| 
 | ||||
| 	for (int i=1; i<=MAXPLAYERS; i++) | ||||
| 	{ | ||||
| 		g_Voted[i] = false; | ||||
| @ -486,3 +503,10 @@ bool RTVAllowed() | ||||
| 
 | ||||
| 	return true; | ||||
| } | ||||
| 
 | ||||
| stock bool IsValidClient(int client) | ||||
| { | ||||
|     if (client > 0 && client <= MaxClients && IsClientConnected(client) && IsClientInGame(client)) | ||||
|         return true; | ||||
|     return false; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user