instead of randomly picking eligble clients we sort eligble clients by lowest tier

This commit is contained in:
jenz 2026-06-18 11:09:58 +02:00
parent 208ddb392d
commit ca9f7b0d13
2 changed files with 55 additions and 16 deletions

26
env/include/unloze_playtime.inc vendored Executable file
View File

@ -0,0 +1,26 @@
#if defined _unloze_playtime_included_
#endinput
#endif
#define _unloze_playtime_included_
/**
* @returns the average playtime of all connected players excluding autism bots, fakeclients, AFKS and nosteamers
*/
native int GetAveragePlayerTimeOnServer();
/**
* @returns the players rtv amount boost
*/
native int GetPlayerWorthRTV_boost_(int client);
/**
* returns a players hours for a specific server
*
* @int the actual client
* @int Game time hours that the client has on the server.
* @int Game time minutes the client has on the server.
*/
native int GetPlayerTier_native(int client); //just the clients tier
forward void GetPlayerHoursServer(int client, int hours, int minutes);
forward void GetPlayerTier(int client, int tier);

View File

@ -32,6 +32,7 @@
#tryinclude "AFKManager.inc" #tryinclude "AFKManager.inc"
#tryinclude "TeamManager.inc" #tryinclude "TeamManager.inc"
#include "unloze_playtime.inc"
/* Restore old REQUIRE_PLUGIN value if necessary */ /* Restore old REQUIRE_PLUGIN value if necessary */
#if defined TEMP_REQUIRE_PLUGIN #if defined TEMP_REQUIRE_PLUGIN
@ -704,18 +705,24 @@ public Action:InfectMotherZombie(Handle:timer)
// Infect one of the main candidates. // Infect one of the main candidates.
if (candidatesMain) if (candidatesMain)
{ {
// Get a random array index. // Find lowest tier candidate.
new i = Math_GetRandomInt(0, candidatesMain - 1); new lowestIndex = 0;
new lowestTier = GetPlayerTier_native(GetArrayCell(aCandidatesMain, 0));
for (new n = 1; n < candidatesMain; n++)
{
new tier = GetPlayerTier_native(GetArrayCell(aCandidatesMain, n));
if (tier < lowestTier)
{
lowestTier = tier;
lowestIndex = n;
}
}
new client = GetArrayCell(aCandidatesMain, lowestIndex);
// Get the client stored in the random array index.
new client = GetArrayCell(aCandidatesMain, i);
// Infect player.
if (InfectHumanToZombie(client, _, true)) if (InfectHumanToZombie(client, _, true))
infected++; infected++;
// Remove player from eligible client list. RemoveFromArray(aCandidatesMain, lowestIndex);
RemoveFromArray(aCandidatesMain, i);
candidatesMain--; candidatesMain--;
} }
else else
@ -735,18 +742,24 @@ public Action:InfectMotherZombie(Handle:timer)
// Infect one of the alternate candidates. // Infect one of the alternate candidates.
if (candidatesAlt) if (candidatesAlt)
{ {
// Get a random array index. // Find lowest tier candidate.
new i = Math_GetRandomInt(0, candidatesAlt - 1); new lowestIndex = 0;
new lowestTier = GetPlayerTier_native(GetArrayCell(aCandidatesAlt, 0));
for (new n = 1; n < candidatesAlt; n++)
{
new tier = GetPlayerTier_native(GetArrayCell(aCandidatesAlt, n));
if (tier < lowestTier)
{
lowestTier = tier;
lowestIndex = n;
}
}
new client = GetArrayCell(aCandidatesAlt, lowestIndex);
// Get the client stored in the random array index.
new client = GetArrayCell(aCandidatesAlt, i);
// Infect player.
if (InfectHumanToZombie(client, _, true)) if (InfectHumanToZombie(client, _, true))
infected++; infected++;
// Remove player from eligible client list. RemoveFromArray(aCandidatesAlt, lowestIndex);
RemoveFromArray(aCandidatesAlt, i);
candidatesAlt--; candidatesAlt--;
} }
else // We have no candidates at all. time to fuck over random people! else // We have no candidates at all. time to fuck over random people!