From 157e450907f7279485248d4f29b723f1f847a46c Mon Sep 17 00:00:00 2001 From: Jackz Date: Mon, 8 Feb 2021 11:34:47 -0600 Subject: [PATCH] l4d2_extraplayeritems: Logic fixes --- plugins/l4d2_extraplayeritems.smx | Bin 9170 -> 9743 bytes scripting/l4d2_extraplayeritems.sp | 92 ++++++++++++++++++++--------- 2 files changed, 64 insertions(+), 28 deletions(-) diff --git a/plugins/l4d2_extraplayeritems.smx b/plugins/l4d2_extraplayeritems.smx index e4dafa8a39eefb1cfbc09da6d1f05f206107cfdc..504e68789b3107bdf708a7fd3a5ab0de8246b824 100644 GIT binary patch delta 9604 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 delta 9027 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 Overwrites previous extra kits, 1 -> Adds onto previous extra kits"); - hMinPlayers = FindConVar("abm_minplayers"); - if(hMinPlayers != null) PrintToServer("Found convar abm_minplayers"); + hAddExtraKits = CreateConVar("l4d2_extraitems_kitmode", "0", "Decides how extra kits should be added.\n0 -> Overwrites previous extra kits, 1 -> Adds onto previous extra kits", FCVAR_NONE, true, 0.0, true, 1.0); + hUpdateMinPlayers = CreateConVar("l4d2_extraitems_updateminplayers", "1", "Should the plugin update abm's cvar min_players convar to the player count?\n 0 -> NO, 1 -> YES", FCVAR_NONE, true, 0.0, true, 1.0); + if(hUpdateMinPlayers.BoolValue) { + hMinPlayers = FindConVar("abm_minplayers"); + if(hMinPlayers != null) PrintToServer("Found convar abm_minplayers"); + } AutoExecConfig(true, "l4d2_extraplayeritems"); @@ -61,6 +64,8 @@ public void OnPluginStart() { RegAdminCmd("sm_epi_kits", Command_GetKitAmount, ADMFLAG_CHEATS); RegAdminCmd("sm_epi_items", Command_RunExtraItems, ADMFLAG_CHEATS); #endif + + } ///////////////////////////////////// @@ -100,47 +105,63 @@ public Action Command_RunExtraItems(int client, int args) { //Called on the first spawn in a mission. public Action Event_GameStart(Event event, const char[] name, bool dontBroadcast) { firstGiven = false; + extraKitsAmount = 0; + extraKitsStarted = 0; } public Action Event_PlayerFirstSpawn(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); - if(GetClientTeam(client) == 2) { + if(GetClientTeam(client) == 2 && !IsFakeClient(client)) { if(L4D_IsFirstMapInScenario()) { //Check if all clients are ready, and survivor count is > 4. abmExtraCount = GetSurvivorsCount(); if(AreAllClientsReady() && abmExtraCount > 4 && !firstGiven) { firstGiven = true; //Set the initial value ofhMinPlayers - if(hMinPlayers != null) { + if(hUpdateMinPlayers.BoolValue && hMinPlayers != null) { hMinPlayers.IntValue = abmExtraCount; } CreateTimer(1.0, Timer_GiveKits); } + //TODO: Some logic to give extra kits on round failure on first map? + //Give kit if first map and kits given + if(firstGiven) { + RequestFrame(Frame_GiveNewClientKit, client); + } }else { - //Set abm's min players to the amount of real survivors - int newPlayerCount = abmExtraCount + 1; - if(hMinPlayers != null && hMinPlayers.IntValue < newPlayerCount && newPlayerCount < 18) { - abmExtraCount = newPlayerCount; - #if defined DEBUG - PrintToServer("update abm_minplayers -> %d", abmExtraCount); - #endif - hMinPlayers.IntValue = abmExtraCount; - } - if(!DoesClientHaveKit(client)) { - CheatCommand(client, "give", "first_aid_kit", ""); - } + RequestFrame(Frame_GiveNewClientKit, client); } } } +public void Frame_GiveNewClientKit(int client) { + if(!DoesClientHaveKit(client)) { + CheatCommand(client, "give", "first_aid_kit", ""); + } +} +public void Frame_GiveClientKit(int client) { + if(!DoesClientHaveKit(client)) { + UseExtraKit(client); + } + //Set abm's min players to the amount of real survivors. Ran AFTER spawned incase they are pending joining + if(!hUpdateMinPlayers.BoolValue) return; + int newPlayerCount = abmExtraCount + 1; + if(hMinPlayers != null && newPlayerCount > 4 && hMinPlayers.IntValue < newPlayerCount && newPlayerCount < 18) { + abmExtraCount = newPlayerCount; + #if defined DEBUG + PrintToServer("update abm_minplayers -> %d", abmExtraCount); + #endif + hMinPlayers.IntValue = abmExtraCount; + } +} + public Action Timer_GiveKits(Handle timer) { GiveStartingKits(); } //Provide extra kits when a player spawns (aka after a map transition) public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); if(GetClientTeam(client) == 2) { - if(!DoesClientHaveKit(client)) - UseExtraKit(client); + RequestFrame(Frame_GiveClientKit, client); } } @@ -170,12 +191,19 @@ public void EntityOutput_OnStartTouchSaferoom(const char[] output, int caller, i if(client > 0 && client <= MaxClients && !isCheckpointReached && IsValidClient(client) && GetClientTeam(client) == 2){ isCheckpointReached = true; int extraPlayers = GetSurvivorsCount() - 4; + #if defined DEBUG + PrintToConsoleAll("CHECKPOINT REACHED BY %N | EXTRA KITS: %d", client, extraPlayers); + #endif + + float averageTeamHP = getAverageHP(); + if(averageTeamHP <= 30) extraPlayers += extraPlayers; //if perm. health < 30, give an extra 4 on top of the extra + else if(averageTeamHP <= 50) ++extraPlayers; //if the team's average health is less than 50 (permament) then give another + //Chance to get 1-2 extra kits (might need to be nerfed or restricted to > 50 HP) if(GetRandomFloat() < 0.5) ++extraPlayers; + if(GetRandomFloat() < 0.2) ++extraPlayers; if(extraPlayers > 0) { - #if defined DEBUG - PrintToConsoleAll("CHECKPOINT REACHED BY %N | EXTRA KITS: %d", client, extraPlayers); - #endif + //If hAddExtraKits TRUE: Append to previous, FALSE: Overwrite if(hAddExtraKits.BoolValue) @@ -207,9 +235,6 @@ public Action Event_MapTransition(Event event, const char[] name, bool dontBroad public Action Event_HealFinished(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); - #if defined DEBUG - PrintToConsoleAll("Client %N Used Kit (healed). Extras: %d", client, extraKitsAmount); - #endif UseExtraKit(client); } @@ -280,10 +305,10 @@ stock void GiveStartingKits() { } } -stock int GetSurvivorsCount(bool ignoreBots = false) { +stock int GetSurvivorsCount() { int count = 0; for(int i = 1; i <= MaxClients; i++) { - if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && (ignoreBots && !IsFakeClient(i))) { + if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 ) { ++count; } } @@ -319,4 +344,15 @@ stock void UseExtraKit(int client) { PrintToServer("Client %N used extra: %d", client, extraKitsAmount); #endif } +} + +stock float getAverageHP() { + int totalHP, clients; + for(int i = 1; i <= MaxClients; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i)) { + totalHP += GetClientHealth(i); + ++clients; + } + } + return totalHP / clients; } \ No newline at end of file