From 8bbb937f6fadb182673db074cb0ff55ed8a8461c Mon Sep 17 00:00:00 2001 From: jenz Date: Tue, 12 Sep 2023 16:11:09 +0200 Subject: [PATCH] added support for average hour to rtv --- .../scripting/include/unloze_playtime.inc | 10 ++ .../scripting/unloze_player_time.sp | 96 +++++++++++++++++++ 2 files changed, 106 insertions(+) diff --git a/discord_verificiation/scripting/include/unloze_playtime.inc b/discord_verificiation/scripting/include/unloze_playtime.inc index 277e555e..7d1036af 100755 --- a/discord_verificiation/scripting/include/unloze_playtime.inc +++ b/discord_verificiation/scripting/include/unloze_playtime.inc @@ -7,3 +7,13 @@ * @returns the average playtime of all connected players excluding autism bots, fakeclients, AFKS and nosteamers */ native int GetAveragePlayerTimeOnServer(); + +/** +* @returns the average playtime of all connected players for rtv, excluding autism bots and fakeclients. +*/ +native int GetAveragePlayerTimeOnServerRTV(); + +/** +* @returns the players worth in connected hours for the rtv +*/ +native int GetPlayerWorthRTV_(int client); diff --git a/discord_verificiation/scripting/unloze_player_time.sp b/discord_verificiation/scripting/unloze_player_time.sp index f7b49e49..8182826b 100644 --- a/discord_verificiation/scripting/unloze_player_time.sp +++ b/discord_verificiation/scripting/unloze_player_time.sp @@ -15,6 +15,9 @@ char g_cTimeRecords[100][128]; int g_iPlayerTimeServer[MAXPLAYERS + 1]; int g_iPlayerAFKTime; int g_iPlayerCount_excludeSpec; +int g_iPlayerRTVCapacity; + +float g_fPlayerRTVWorth[MAXPLAYERS + 1]; public Plugin myinfo = { @@ -98,6 +101,11 @@ public void OnPluginStart() g_iPlayerCount_excludeSpec = cvar1.IntValue; delete cvar1; //g_hTimer_avg_hour_count = CreateTimer(1800.0, log_average_hour_count, _, TIMER_REPEAT); + + ConVar cvar2; + HookConVarChange((cvar2 = CreateConVar("sm_rtv_avg_capacity", "5", "The capacity for how many times the average a players rtv can be worth.")), Cvar_playerRTVAverageCap); + g_iPlayerRTVCapacity = cvar2.IntValue; + delete cvar2; } /* @@ -126,9 +134,17 @@ public void Cvar_playerExcludeSpec(ConVar convar, const char[] oldValue, const c g_iPlayerCount_excludeSpec = convar.IntValue; } +public void Cvar_playerRTVAverageCap(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iPlayerRTVCapacity = convar.IntValue; +} + public APLRes AskPluginLoad2(Handle myself, bool late, char [] error, int err_max) { CreateNative("GetAveragePlayerTimeOnServer", Native_GetAveragePlayerActiveTimeServer); + CreateNative("GetAveragePlayerTimeOnServerRTV", Native_GetAveragePlayerActiveTimeServerRTV); + CreateNative("GetPlayerWorthRTV_", Native_GetPlayerWorthRTV); + CreateNative("GetPlayerWorthRTV_boost_", Native_GetPlayerWorthRTV_boost); return APLRes_Success; } @@ -170,6 +186,84 @@ public int Native_GetAveragePlayerActiveTimeServer(Handle plugin, int numParams) { return GetAveragePlayerActiveTimeServer(); } + +public int Native_GetAveragePlayerActiveTimeServerRTV(Handle plugin, int numParams) +{ + return GetAveragePlayerActiveTimeServerRTV(); +} + +public int Native_GetPlayerWorthRTV_boost(Handle plugin, int numParams) +{ + int client = GetNativeCell(1); + if(client > MaxClients || client <= 0) + { + ThrowNativeError(SP_ERROR_NATIVE, "Client is not valid."); + return view_as(-1); + } + + if(!IsClientInGame(client)) + { + ThrowNativeError(SP_ERROR_NATIVE, "Client is not in-game."); + return view_as(-1); + } + return view_as(g_fPlayerRTVWorth[client]); +} + +public int Native_GetPlayerWorthRTV(Handle plugin, int numParams) +{ + int client = GetNativeCell(1); + + if(client > MaxClients || client <= 0) + { + ThrowNativeError(SP_ERROR_NATIVE, "Client is not valid."); + return -1; + } + + if(!IsClientInGame(client)) + { + ThrowNativeError(SP_ERROR_NATIVE, "Client is not in-game."); + return -1; + } + return GetPlayerWorthRTV(client); +} + +public int GetPlayerWorthRTV(int client) +{ + int avg = GetAveragePlayerActiveTimeServerRTV(); + if (g_iPlayerTimeServer[client] <= avg || avg == 0 || is_bot_player[client]) + { + g_fPlayerRTVWorth[client] = 1.0; + return avg; + } + if ((g_iPlayerTimeServer[client] / avg) > g_iPlayerRTVCapacity) + { + g_fPlayerRTVWorth[client] = float(g_iPlayerRTVCapacity); + return avg * g_iPlayerRTVCapacity; + } + g_fPlayerRTVWorth[client] = float(g_iPlayerTimeServer[client] / avg); + return avg * (g_iPlayerTimeServer[client] / avg); +} + +public int GetAveragePlayerActiveTimeServerRTV() +{ + //for rockthevote average we include spectators and afks. just not fakes, nosteamers and autismbots, thats why a different function is made. + int total_hours = 0; + int total_players = 0; + for (int i = 0; i < MaxClients; i++) + { + if (IsValidClient(i) && !IsFakeClient(i) && !IsClientSourceTV(i) && !is_bot_player[i] && PM_IsPlayerSteam(i)) + { + total_hours += g_iPlayerTimeServer[i]; + total_players++; + } + } + if (total_hours == 0) + { + return 0; + } + return total_hours / total_players; +} + public void OnPluginEnd() { if (g_h_time_activity != null) @@ -202,6 +296,7 @@ public void OnClientPostAdminCheck(int client) { GetClientAuthId(client, AuthId_Steam2, g_csSID[client], sizeof(g_csSID[])); is_bot_player[client] = false; + g_fPlayerRTVWorth[client] = 0.0; g_iPlayerTimeServer[client] = 0; if(!IsValidClient(client) || IsFakeClient(client)) return; @@ -294,6 +389,7 @@ public void OnClientDisconnect(int client) { Format(g_csSID[client], sizeof(g_csSID[]), ""); is_bot_player[client] = false; + g_fPlayerRTVWorth[client] = 0.0; g_iPlayerTimeServer[client] = 0; }