From 5102f661a9dd72312c6df9a35404bbb4f8e40421 Mon Sep 17 00:00:00 2001 From: Jackz Date: Thu, 21 Jan 2021 16:55:32 -0600 Subject: [PATCH] l4d2_extraplayeritems: Hopefully fixed some issues. I have no idea why it doesnt work. It should work in theory. --- plugins/l4d2_extraplayeritems.smx | Bin 8157 -> 8892 bytes scripting/l4d2_extraplayeritems.sp | 180 +++++++++++++++++++---------- 2 files changed, 116 insertions(+), 64 deletions(-) diff --git a/plugins/l4d2_extraplayeritems.smx b/plugins/l4d2_extraplayeritems.smx index dcaaefd1a220129153f1847dccb2b2a5624b821b..6324bafc71332a70801eb6786b49684de0d371d3 100644 GIT binary patch delta 8747 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 TYvQ}e8Y9oJb862kH0S>VR=J3l delta 8006 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 diff --git a/scripting/l4d2_extraplayeritems.sp b/scripting/l4d2_extraplayeritems.sp index 80fbf97..ef6f1d0 100644 --- a/scripting/l4d2_extraplayeritems.sp +++ b/scripting/l4d2_extraplayeritems.sp @@ -21,9 +21,9 @@ public Plugin myinfo = url = "" }; -static ConVar hExtraItemBasePercentage, hAddExtraKits; -static int extraKitsAmount, extraKitsStarted, isFailureRound; -static bool isCheckpointReached, isLateLoaded; +static ConVar hExtraItemBasePercentage, hAddExtraKits, hMinPlayers; +static int extraKitsAmount, extraKitsStarted, isFailureRound, abmExtraCount; +static bool isCheckpointReached, isLateLoaded, firstGiven; /* on first start: Everyone has a kit, new comers also get a kit. @@ -59,9 +59,12 @@ public void OnPluginStart() HookEvent("player_entered_checkpoint", Event_EnterSaferoom); HookEvent("heal_success", Event_HealFinished); HookEvent("map_transition", Event_MapTransition); + HookEvent("game_start", Event_GameStart); hExtraItemBasePercentage = CreateConVar("l4d2_extraitem_chance", "0.056", "The base chance (multiplied by player count) of an extra item being spawned.", FCVAR_NONE, true, 0.0, true, 1.0); hAddExtraKits = CreateConVar("l4d2_extraitems_kitmode", "0", "Decides how extra kits should be added. 0 -> Overwrites previous extra kits, 1 -> Adds onto previous extra kits"); + hMinPlayers = FindConVar("abm_minplayers"); + if(hMinPlayers != null) PrintToServer("Found convar abm_minplayers"); AutoExecConfig(true, "l4d2_extraplayeritems"); @@ -92,7 +95,8 @@ public Action Command_SetKitAmount(int client, int args) { #if defined DEBUG public Action Command_GetKitAmount(int client, int args) { - ReplyToCommand(client, "Extra kits available: %d | Survivors: %d", extraKitsAmount, GetSurvivorsCount()); + ReplyToCommand(client, "Extra kits available: %d (%d) | Survivors: %d", extraKitsAmount, extraKitsStarted, GetSurvivorsCount()); + ReplyToCommand(client, "isCheckpointReached %b, isLateLoaded %b, firstGiven %b", isCheckpointReached, isLateLoaded, firstGiven); return Plugin_Handled; } public Action Command_RunExtraItems(int client, int args) { @@ -106,73 +110,81 @@ 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; +} + public Action Event_PlayerFirstSpawn(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); - if(L4D_IsFirstMapInScenario() && GetClientTeam(client) == 2) { - //Check if all clients are ready, and survivor count is > 4. - //TODO: Possibly stop redudant double loops (ready check & survivor count)0 - if(AreAllClientsReady() && GetSurvivorsCount() > 4) { - int skipLeft = 4; - for(int i = 1; i < MaxClients + 1; i++) { - if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { - //Skip at least the first 4 players, as they will pickup default kits. - //If player somehow already has it ,also skip them. - if(skipLeft > 0 || DoesClientHaveKit(i)) { - skipLeft--; - continue; - }else{ - CheatCommand(i, "give", "first_aid_kit", ""); - } - } + if(GetClientTeam(client) == 2) { + if(L4D_IsFirstMapInScenario()) { + //Check if all clients are ready, and survivor count is > 4. + //TODO: Possibly stop redudant double loops (ready check & survivor count)0 + if(AreAllClientsReady() && GetSurvivorsCount() > 4 && !firstGiven) { + firstGiven = true; + CreateTimer(1.0, Timer_GiveKits); } - //do for loop, skip 4 people + }else{ + if(!DoesClientHaveKit(client)) { + CheatCommand(client, "give", "first_aid_kit", ""); + } } - }else{ - if(!DoesClientHaveKit(client) && GetClientTeam(client) == 2) { - CheatCommand(client, "give", "first_aid_kit", ""); - } } } +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 && extraKitsAmount > 0) { - if(!DoesClientHaveKit(client)) { - CheatCommand(client, "give", "first_aid_kit", ""); - UseExtraKit(); - } + if(GetClientTeam(client) == 2) { + if(!DoesClientHaveKit(client)) + UseExtraKit(client); + + int survivors = GetSurvivorsCount(); + if(hMinPlayers != null && hMinPlayers.IntValue < abmExtraCount) { + #if defined DEBUG + PrintToServer("update abm_minplayers -> %d", abmExtraCount); + #endif + hMinPlayers.IntValue = abmExtraCount; + } } } -//TODO: Possibly switch to game_init or game_newmap ? + public void OnMapStart() { //If previous round was a failure, restore the amount of kits that were left directly after map transition if(isFailureRound) { extraKitsAmount = extraKitsStarted; + //give kits if first + if(L4D_IsFirstMapInScenario()) { + GiveStartingKits(); + } isFailureRound = false; } - - if(!isLateLoaded && GetSurvivorsCount() > 4 && GetEntityCount() < MAX_ENTITY_LIMIT) - CreateTimer(20.0, Timer_AddExtraCounts); + #if defined DEBUG + PrintToServer(">>> MAP START. Extra Kits: %d", extraKitsAmount); + #endif + if(!isLateLoaded) { + CreateTimer(30.0, Timer_AddExtraCounts); + isLateLoaded = false; + } } public void Event_EnterSaferoom(Event event, const char[] name, bool dontBroadcast) { - int client = GetClientOfUserId(event.GetInt("userid")); - if(client > 0 && !isCheckpointReached) { - PrintToConsoleAll("saferoom | EKA %d | Client %d | SafeRoom %b", extraKitsAmount, client, L4D_IsInLastCheckpoint(client)); - if(L4D_IsInLastCheckpoint(client)) { - isCheckpointReached = true; - int extraPlayers = GetSurvivorsCount() - 4; - if(extraPlayers > 0) { - //If hAddExtraKits TRUE: Append to previous, FALSE: Overwrite - if(hAddExtraKits.BoolValue) - extraKitsAmount += extraPlayers; - else - extraKitsAmount = extraPlayers; - extraKitsStarted = extraKitsAmount; - PrintToServer(">>> Player entered saferoom. An extra %d kits will be provided", extraKitsAmount); - } + if(client > 0 && !isCheckpointReached && GetClientTeam(client) == 2 && L4D_IsInLastCheckpoint(client)) { + isCheckpointReached = true; + int extraPlayers = GetSurvivorsCount() - 4; + 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) + extraKitsAmount += extraPlayers; + else + extraKitsAmount = extraPlayers; + extraKitsStarted = extraKitsAmount; + PrintToServer(">>> Player entered saferoom. An extra %d kits will be provided", extraKitsAmount); } } } @@ -184,16 +196,20 @@ public Action Event_MapTransition(Event event, const char[] name, bool dontBroad isCheckpointReached = false; isLateLoaded = false; //If any kits were consumed before map transition, decrease from reset-amount (for if a round fails) + #if defined DEBUG + PrintToServer("Map transition | Extra Kits Left %d | Starting Amount %d", extraKitsAmount, extraKitsStarted); + #endif extraKitsStarted = extraKitsAmount; + abmExtraCount = GetSurvivorsCount(); } public Action Event_HealFinished(Event event, const char[] name, bool dontBroadcast) { int client = GetClientOfUserId(event.GetInt("userid")); - if(extraKitsAmount > 0) { - CheatCommand(client, "give", "first_aid_kit", ""); - UseExtraKit(); - } + #if defined DEBUG + PrintToConsoleAll("Client %N Used Kit (healed). Extras: %d", client, extraKitsAmount); + #endif + UseExtraKit(client); } @@ -212,24 +228,29 @@ public Action Event_HealFinished(Event event, const char[] name, bool dontBroadc */ public Action Timer_AddExtraCounts(Handle hd) { int survivors = GetSurvivorsCount(); + if(survivors <= 4) return; + float percentage = hExtraItemBasePercentage.FloatValue * survivors; PrintToServer("Populating extra items based on player count (%d) | Percentage %f%%", survivors, percentage * 100); + PrintToConsoleAll("Populating extra items based on player count (%d) | Percentage %f%%", survivors, percentage * 100); char classname[32]; - int entityCount = GetEntityCount(); int affected = 0; for(int i = MaxClients + 1; i < 2048; i++) { - if(IsValidEntity(i) && entityCount < MAX_ENTITY_LIMIT) { + if(IsValidEntity(i)) { GetEntityClassname(i, classname, sizeof(classname)); if(StrContains(classname, "_spawn", true) > -1 - && !StrEqual(classname, "info_zombie_spawn", true) + && StrContains(classname, "zombie", true) == -1 && StrContains(classname, "scavenge", true) == -1 ) { int count = GetEntProp(i, Prop_Data, "m_itemCount"); - if(count > 0 && GetRandomFloat() < percentage) { + //Add extra kits (equal to player count) to any 4 set of kits. + if(count == 4 && StrEqual(classname, "weapon_first_aid_kit_spawn", true)) { + SetEntProp(i, Prop_Data, "m_itemCount", survivors); + ++affected; + }else if(count > 0 && GetRandomFloat() < percentage) { SetEntProp(i, Prop_Data, "m_itemCount", ++count); ++affected; } - entityCount++; } } } @@ -240,19 +261,44 @@ public Action Timer_AddExtraCounts(Handle hd) { /// Stocks //////////////////////////////////// +stock void GiveStartingKits() { + int skipLeft = 4, realPlayersCount = 0; + for(int i = 1; i < MaxClients + 1; i++) { + if(IsClientConnected(i) && IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2) { + if(!IsFakeClient(i)) + ++realPlayersCount; + //Skip at least the first 4 players, as they will pickup default kits. + //If player somehow already has it ,also skip them. + if(skipLeft > 0 || DoesClientHaveKit(i)) { + --skipLeft; + continue; + }else{ + CheatCommand(i, "give", "first_aid_kit", ""); + } + } + } + //Set abm's min players to the amount of real survivors + //TODO: Reset on map start when changed + if(hMinPlayers != null && hMinPlayers.IntValue < realPlayersCount) { + #if defined DEBUG + PrintToServer("Found abm_minplayers, setting to %d", realPlayersCount); + #endif + hMinPlayers.IntValue = realPlayersCount; + } +} + stock int GetSurvivorsCount() { int count = 0; - for(int i = 1; i < MaxClients + 1; i++) { + for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { ++count; } } - PrintToServer("debug >>> survivors %d", count); return count; } stock bool AreAllClientsReady() { - for(int i = 1; i < MaxClients + 1; i++) { + for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && !IsClientInGame(i)) { return false; } @@ -270,8 +316,14 @@ stock bool DoesClientHaveKit(int client) { return false; } -stock void UseExtraKit() { - if(--extraKitsAmount <= 0) { - extraKitsAmount = 0; +stock void UseExtraKit(int client) { + if(extraKitsAmount > 0) { + CheatCommand(client, "give", "first_aid_kit", ""); + if(--extraKitsAmount <= 0) { + extraKitsAmount = 0; + } + #if defined DEBUG + PrintToServer("Client %N used extra: %d", client, extraKitsAmount); + #endif } } \ No newline at end of file