From a8ae1a74b7ed002627be253da470c054463e4ead Mon Sep 17 00:00:00 2001 From: Jackz Date: Tue, 9 Nov 2021 10:26:22 -0600 Subject: [PATCH] epi: Disable on some gamemodes --- plugins/l4d2_extraplayeritems.smx | Bin 20694 -> 20108 bytes scripting/l4d2_extraplayeritems.sp | 279 ++++++++++++++++++++--------- 2 files changed, 190 insertions(+), 89 deletions(-) diff --git a/plugins/l4d2_extraplayeritems.smx b/plugins/l4d2_extraplayeritems.smx index 6340102cecd84c12ef61f60c885c4e026a4e8c3b..f62c9ae6c4e9edab6c8fc7102461329dda261b80 100644 GIT binary patch literal 20108 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 diff --git a/scripting/l4d2_extraplayeritems.sp b/scripting/l4d2_extraplayeritems.sp index bc18a1a..d24009c 100644 --- a/scripting/l4d2_extraplayeritems.sp +++ b/scripting/l4d2_extraplayeritems.sp @@ -71,12 +71,14 @@ public Plugin myinfo = url = "" }; -static ConVar hExtraItemBasePercentage, hAddExtraKits, hMinPlayers, hUpdateMinPlayers, hMinPlayersSaferoomDoor, hSaferoomDoorWaitSeconds, hSaferoomDoorAutoOpen, hEPIHudState; +static ConVar hExtraItemBasePercentage, hAddExtraKits, hMinPlayers, hUpdateMinPlayers, hMinPlayersSaferoomDoor, hSaferoomDoorWaitSeconds, hSaferoomDoorAutoOpen, hEPIHudState, hExtraFinaleTank; static int extraKitsAmount, extraKitsStarted, abmExtraCount, firstSaferoomDoorEntity, playersLoadedIn, playerstoWaitFor; static int isBeingGivenKit[MAXPLAYERS+1]; +static int finaleStage; static bool isCheckpointReached, isLateLoaded, firstGiven, isFailureRound; static ArrayList ammoPacks; static Handle updateHudTimer; +static char gamemode[32]; static StringMap weaponMaxClipSizes; @@ -92,9 +94,9 @@ static Cabinet cabinets[10]; //Store 10 cabinets public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) { if(late) isLateLoaded = true; + return APLRes_Success; } - public void OnPluginStart() { EngineVersion g_Game = GetEngineVersion(); if(g_Game != Engine_Left4Dead2) { @@ -104,7 +106,6 @@ public void OnPluginStart() { weaponMaxClipSizes = new StringMap(); ammoPacks = new ArrayList(2); // - HookEvent("player_hurt", Event_PlayerHurt); HookEvent("player_spawn", Event_PlayerSpawn); HookEvent("player_first_spawn", Event_PlayerFirstSpawn); //Tracking player items: @@ -124,7 +125,8 @@ public void OnPluginStart() { hSaferoomDoorWaitSeconds = CreateConVar("l4d2_extraitems_doorunlock_wait", "55", "How many seconds after to unlock saferoom door. 0 to disable", FCVAR_NONE, true, 0.0); hSaferoomDoorAutoOpen = CreateConVar("l4d2_extraitems_doorunlock_open", "0", "Controls when the door automatically opens after unlocked. Add bits together.\n0 = Never, 1 = When timer expires, 2 = When all players loaded in", FCVAR_NONE, true, 0.0); hEPIHudState = CreateConVar("l4d2_extraitems_hudstate", "1", "Controls when the hud displays.\n0 -> OFF, 1 = When 5+ players, 2 = ALWAYS", FCVAR_NONE, true, 0.0, true, 2.0); - + hExtraFinaleTank = CreateConVar("l4d2_extraitems_extra_finale_tank", "1", "0 = Normal tank spawning, 1 = Two tanks spawn on second stage (half health)", FCVAR_NONE, true, 0.0, true, 1.0); + hEPIHudState.AddChangeHook(Cvar_HudStateChange); if(hUpdateMinPlayers.BoolValue) { @@ -139,6 +141,7 @@ public void OnPluginStart() { SDKHook(i, SDKHook_WeaponEquip, Event_Pickup); } } + int count = GetRealSurvivorsCount(); abmExtraCount = count; int threshold = hEPIHudState.IntValue == 1 ? 5 : 0; @@ -151,8 +154,15 @@ public void OnPluginStart() { abmExtraCount = DEBUG_FORCE_PLAYERS; #endif + ConVar hGamemode = FindConVar("mp_gamemode"); + hGamemode.GetString(gamemode, sizeof(gamemode)); + hGamemode.AddChangeHook(Event_GamemodeChange); + Event_GamemodeChange(hGamemode, gamemode, gamemode); + + AutoExecConfig(true, "l4d2_extraplayeritems"); + RegAdminCmd("sm_epi_sc", Command_SetSurvivorCount, ADMFLAG_KICK); #if defined DEBUG_LEVEL RegAdminCmd("sm_epi_setkits", Command_SetKitAmount, ADMFLAG_CHEATS, "Sets the amount of extra kits that will be provided"); RegAdminCmd("sm_epi_lock", Command_ToggleDoorLocks, ADMFLAG_CHEATS, "Toggle all toggle\'s lock state"); @@ -162,6 +172,10 @@ public void OnPluginStart() { } +public void Event_GamemodeChange(ConVar cvar, const char[] oldValue, const char[] newValue) { + cvar.GetString(gamemode, sizeof(gamemode)); +} + public void OnPluginEnd() { delete weaponMaxClipSizes; delete ammoPacks; @@ -187,6 +201,34 @@ public void Cvar_HudStateChange(ConVar convar, const char[] oldValue, const char ///////////////////////////////////// /// COMMANDS //////////////////////////////////// +public Action Command_SetSurvivorCount(int client, int args) { + int oldCount = abmExtraCount; + if(args > 0) { + static char arg1[8]; + GetCmdArg(1, arg1, sizeof(arg1)); + int newCount; + if(StringToIntEx(arg1, newCount) > 0) { + if(newCount < 0 || newCount > MaxClients) { + ReplyToCommand(client, "Invalid survivor count. Must be between 0 and %d", MaxClients); + return Plugin_Handled; + } else { + abmExtraCount = newCount; + hMinPlayers.IntValue = abmExtraCount; + ReplyToCommand(client, "Changed extra survivor count to %d -> %d", oldCount, newCount); + bool add = (newCount - oldCount) > 0; + if(add) + ServerCommand("abm-mk -%d 2", newCount); + else + ServerCommand("abm-rm -%d 2", newCount); + } + } else { + ReplyToCommand(client, "Invalid number"); + } + } else { + ReplyToCommand(client, "Current extra count is %d.", oldCount); + } + return Plugin_Handled; +} #if defined DEBUG_LEVEL public Action Command_SetKitAmount(int client, int args) { char arg[32]; @@ -227,6 +269,56 @@ public Action Command_RunExtraItems(int client, int args) { /// EVENTS //////////////////////////////////// +// 0 = inactive | 1 = started | 2 = first tank round started | 3 = waiting for tank spawn | # > 3: Health for next tank + +public Action L4D2_OnChangeFinaleStage(int &finaleType, const char[] arg) { + if(finaleType == 1 && abmExtraCount > 4 && hExtraFinaleTank.BoolValue) { + finaleStage = 1; + PrintToConsoleAll("[EPI] Finale started and over threshold"); + } else if(finaleType == 8) { + if(finaleStage == 1) { + finaleStage = 2; + PrintToConsoleAll("[EPI] First tank has spawned"); + } else { + finaleStage = 3; + PrintToConsoleAll("[EPI] Waiting for second tank to spawn"); + } + } + return Plugin_Continue; +} + +public void Event_TankSpawn(Event event, const char[] name, bool dontBroadcast) { + int user = GetEventInt(event, "userid"); + int tank = GetClientOfUserId(user); + if(finaleStage == 3) { + PrintToConsoleAll("[EPI] Third tank spawned, setting health."); + if(tank > 0 && IsFakeClient(tank)) { + RequestFrame(Frame_ExtraTankWait, user); + } + finaleStage = 0; //Only set for a frame + } else if(finaleStage > 3) { + RequestFrame(Frame_SetExtraTankHealth, user); + } +} + +public void Frame_ExtraTankWait(int user) { + int tank = GetClientOfUserId(user); + if(tank > 0) { + // Half their HP, assign half to self and for next tank + int hp = GetEntProp(tank, Prop_Send, "m_iHealth") / 2; + SetEntProp(tank, Prop_Send, "m_iHealth", hp); + finaleStage = hp; + } +} + +public void Frame_SetExtraTankHealth(int user) { + int tank = GetClientOfUserId(user); + if(tank > 0) { + SetEntProp(tank, Prop_Send, "m_iHealth", finaleStage); + finaleStage = 0; + } +} + public void OnGetWeaponsInfo(int pThis, const char[] classname) { char clipsize[8]; InfoEditor_GetString(pThis, "clip_size", clipsize, sizeof(clipsize)); @@ -243,6 +335,8 @@ public Action Event_GameStart(Event event, const char[] name, bool dontBroadcast extraKitsStarted = 0; abmExtraCount = 4; hMinPlayers.IntValue = 4; + return Plugin_Continue; + } public Action Event_PlayerFirstSpawn(Event event, const char[] name, bool dontBroadcast) { @@ -270,8 +364,11 @@ public Action Event_PlayerFirstSpawn(Event event, const char[] name, bool dontBr CreateTimer(1.2, Timer_UpdateMinPlayers); } } + return Plugin_Continue; + } public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast) { + if(StrEqual(gamemode, "hideandseek")) return Plugin_Continue; int user = event.GetInt("userid"); int client = GetClientOfUserId(user); if(GetClientTeam(client) == 2) { @@ -299,6 +396,8 @@ public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadca updateHudTimer = CreateTimer(EXTRA_PLAYER_HUD_UPDATE_INTERVAL, Timer_UpdateHud, _, TIMER_REPEAT); } GetPlayerInventory(client); + return Plugin_Continue; + } public Action Event_ItemPickup(Event event, const char[] name, bool dontBroadcast) { @@ -306,6 +405,8 @@ public Action Event_ItemPickup(Event event, const char[] name, bool dontBroadcas if(client > 0) { GetPlayerInventory(client); } + return Plugin_Continue; + } @@ -328,6 +429,8 @@ public Action Timer_GiveClientKit(Handle hdl, int user) { if(client > 0 && !DoesClientHaveKit(client)) { UseExtraKit(client); } + return Plugin_Continue; + } public Action Timer_UpdateMinPlayers(Handle hdl) { //Set abm's min players to the amount of real survivors. Ran AFTER spawned incase they are pending joining @@ -342,9 +445,13 @@ public Action Timer_UpdateMinPlayers(Handle hdl) { hMinPlayers.IntValue = abmExtraCount; } } + return Plugin_Continue; } -public Action Timer_GiveKits(Handle timer) { GiveStartingKits(); } +public Action Timer_GiveKits(Handle timer) { + GiveStartingKits(); + return Plugin_Continue; +} public void OnMapStart() { //If previous round was a failure, restore the amount of kits that were left directly after map transition @@ -416,17 +523,19 @@ public void Event_RoundFreezeEnd(Event event, const char[] name, bool dontBroadc } public Action Timer_Populate(Handle h) { PopulateItems(); + return Plugin_Continue; + } public void EntityOutput_OnStartTouchSaferoom(const char[] output, int caller, int client, float time) { - if(!isCheckpointReached && client > 0 && client <= MaxClients && IsValidClient(client) && GetClientTeam(client) == 2) { + if(!isCheckpointReached && client > 0 && client <= MaxClients && IsValidClient(client) && GetClientTeam(client) == 2) { isCheckpointReached = true; abmExtraCount = GetSurvivorsCount(); if(abmExtraCount > 4) { int extraPlayers = abmExtraCount - 4; float averageTeamHP = GetAverageHP(); - if(averageTeamHP <= 30.0) extraPlayers += extraPlayers; //if perm. health < 30, give an extra 4 on top of the extra - else if(averageTeamHP <= 50.0) extraPlayers = (extraPlayers / 2); //if the team's average health is less than 50 (permament) then give another + if(averageTeamHP <= 30.0) extraPlayers += (extraPlayers / 2); //if perm. health < 30, give an extra 4 on top of the extra + else if(averageTeamHP <= 50.0) extraPlayers = (extraPlayers / 3); //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.3 && averageTeamHP <= 80.0) ++extraPlayers; @@ -441,11 +550,12 @@ public void EntityOutput_OnStartTouchSaferoom(const char[] output, int caller, i PrintToConsoleAll("CHECKPOINT REACHED BY %N | EXTRA KITS: %d", client, extraPlayers); PrintToServer("Player entered saferoom. Providing %d extra kits", extraKitsAmount); } - } + } } public Action Event_RoundEnd(Event event, const char[] name, bool dontBroadcast) { if(!isFailureRound) isFailureRound = true; + return Plugin_Continue; } public Action Event_MapTransition(Event event, const char[] name, bool dontBroadcast) { @@ -457,6 +567,7 @@ public Action Event_MapTransition(Event event, const char[] name, bool dontBroad extraKitsStarted = extraKitsAmount; abmExtraCount = GetRealSurvivorsCount(); playerstoWaitFor = GetRealSurvivorsCount(); + return Plugin_Continue; } //TODO: Possibly hacky logic of on third different ent id picked up, in short timespan, detect as set of 4 (pills, kits) & give extra public Action Event_Pickup(int client, int weapon) { @@ -500,11 +611,12 @@ public Action L4D2_OnChooseVictim(int attacker, int &curTarget) { for(int i = 1; i <= MaxClients; i++) { if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i)) { - //If a player does less than 50 damage, and has health add them to list + //If a player does less than 50 damage, and has green health add them to list if(totalTankDamage[i] < 100 && GetClientHealth(i) > 40) { GetClientAbsOrigin(i, clientPos); float dist = GetVectorDistance(clientPos, tankPos); - if(dist <= 5000) { + // Only add targets who are far enough away from tank + if(dist > 5000) { PrintDebug(DEBUG_ANY, "Adding player %N to possible victim list. Dist=%f, Dmg=%d", i, dist, totalTankDamage[i]); int index = clients.Push(i); clients.Set(index, dist, 1); @@ -538,24 +650,6 @@ int Sort_TankTargetter(int index1, int index2, Handle array, Handle hndl) { return (totalTankDamage[client1] + RoundFloat(distance1)) - (totalTankDamage[client2] + RoundFloat(distance2)); } -public void Event_PlayerHurt(Event event, const char[] name, bool dontBroadcast) { - int victim = GetClientOfUserId(event.GetInt("userid")); - int attacker = GetClientOfUserId(event.GetInt("attacker")); - int dmg = event.GetInt("dmg_health"); - if(dmg > 0 && attacker > 0 && victim > 0 && IsFakeClient(victim) && GetEntProp(victim, Prop_Send, "m_zombieClass") == TANK_CLASS_ID) { - if(GetClientTeam(victim) == 3 && GetClientTeam(attacker) == 2) { - totalTankDamage[victim] += dmg; - } - } -} - -public void Event_TankSpawn(Event event, const char[] name, bool dontBroadcast) { - int tank = GetClientOfUserId(GetEventInt(event, "userid")); - if(tank > 0 && IsFakeClient(tank)) { - tankChooseVictimTicks[tank] = -20; - } -} - /////////////////////////////////////////////////////////////////////////////// // Hooks /////////////////////////////////////////////////////////////////////////////// @@ -578,6 +672,8 @@ public Action Hook_CabinetItemSpawn(int entity) { } //If Cabinet is full, spawner can not be a part of cabinet and is ignored. } + return Plugin_Continue; + } public Action Hook_CabinetSpawn(int entity) { @@ -588,6 +684,8 @@ public Action Hook_CabinetSpawn(int entity) { } } PrintDebug(DEBUG_SPAWNLOGIC, "Adding cabinet %d", entity); + return Plugin_Continue; + } public Action OnUpgradePackUse(int entity, int activator, int caller, UseType type, float value) { @@ -681,16 +779,19 @@ public Action Timer_OpenSaferoomDoor(Handle h) { void UnlockDoor(int entity, int flag) { PrintDebug(DEBUG_GENERIC, "Door unlocked, flag %d", flag); - SetEntProp(entity, Prop_Send, "m_bLocked", 0); - SDKUnhook(entity, SDKHook_Use, Hook_Use); - if(hSaferoomDoorAutoOpen.IntValue % flag == flag) { - AcceptEntityInput(entity, "Open"); + if(IsValidEntity(entity)) { + SetEntProp(entity, Prop_Send, "m_bLocked", 0); + SDKUnhook(entity, SDKHook_Use, Hook_Use); + if(hSaferoomDoorAutoOpen.IntValue % flag == flag) { + AcceptEntityInput(entity, "Open"); + } + firstSaferoomDoorEntity = -1; } - firstSaferoomDoorEntity = -1; PopulateItems(); } public Action Timer_UpdateHud(Handle h) { + if(StrEqual(gamemode, "hideandseek")) return Plugin_Stop; int threshold = hEPIHudState.IntValue == 1 ? 4 : 0; if(hEPIHudState.IntValue == 0 || abmExtraCount <= threshold) { L4D2_RunScript("ExtraPlayerHUD <- { Fields = { } }; HUDSetLayout(ExtraPlayerHUD); HUDPlace( g_ModeScript.HUD_RIGHT_BOT, 0.72, 0.77, 0.25, 0.2); g_ModeScript"); @@ -708,7 +809,7 @@ public Action Timer_UpdateHud(Handle h) { if(IsFakeClient(i) && HasEntProp(i, Prop_Send, "m_humanSpectatorUserID")) { int client = GetClientOfUserId(GetEntProp(i, Prop_Send, "m_humanSpectatorUserID")); if(client > 0) { - Format(prefix, 13, "IDLE %N", client); + Format(prefix, 13, "AFK %N", client); }else{ Format(prefix, 8, "%N", i); } @@ -903,60 +1004,60 @@ stock float GetAverageHP() { } stock int GetClientRealHealth(int client) { - //First filter -> Must be a valid client, successfully in-game and not an spectator (The dont have health). - if(!client - || !IsValidEntity(client) - || !IsClientInGame(client) - || !IsPlayerAlive(client) - || IsClientObserver(client)) - { - return -1; - } - - //If the client is not on the survivors team, then just return the normal client health. - if(GetClientTeam(client) != 2) - { - return GetClientHealth(client); - } - - //First, we get the amount of temporal health the client has - float buffer = GetEntPropFloat(client, Prop_Send, "m_healthBuffer"); - - //We declare the permanent and temporal health variables - float TempHealth; - int PermHealth = GetClientHealth(client); - - //In case the buffer is 0 or less, we set the temporal health as 0, because the client has not used any pills or adrenaline yet - if(buffer <= 0.0) - { - TempHealth = 0.0; - } - - //In case it is higher than 0, we proceed to calculate the temporl health - else - { - //This is the difference between the time we used the temporal item, and the current time - float difference = GetGameTime() - GetEntPropFloat(client, Prop_Send, "m_healthBufferTime"); - - //We get the decay rate from this convar (Note: Adrenaline uses this value) - float decay = GetConVarFloat(FindConVar("pain_pills_decay_rate")); - - //This is a constant we create to determine the amount of health. This is the amount of time it has to pass - //before 1 Temporal HP is consumed. - float constant = 1.0/decay; - - //Then we do the calcs - TempHealth = buffer - (difference / constant); - } - - //If the temporal health resulted less than 0, then it is just 0. - if(TempHealth < 0.0) - { - TempHealth = 0.0; - } - - //Return the value - return RoundToFloor(PermHealth + TempHealth); + //First filter -> Must be a valid client, successfully in-game and not an spectator (The dont have health). + if(!client + || !IsValidEntity(client) + || !IsClientInGame(client) + || !IsPlayerAlive(client) + || IsClientObserver(client)) + { + return -1; + } + + //If the client is not on the survivors team, then just return the normal client health. + if(GetClientTeam(client) != 2) + { + return GetClientHealth(client); + } + + //First, we get the amount of temporal health the client has + float buffer = GetEntPropFloat(client, Prop_Send, "m_healthBuffer"); + + //We declare the permanent and temporal health variables + float TempHealth; + int PermHealth = GetClientHealth(client); + + //In case the buffer is 0 or less, we set the temporal health as 0, because the client has not used any pills or adrenaline yet + if(buffer <= 0.0) + { + TempHealth = 0.0; + } + + //In case it is higher than 0, we proceed to calculate the temporl health + else + { + //This is the difference between the time we used the temporal item, and the current time + float difference = GetGameTime() - GetEntPropFloat(client, Prop_Send, "m_healthBufferTime"); + + //We get the decay rate from this convar (Note: Adrenaline uses this value) + float decay = GetConVarFloat(FindConVar("pain_pills_decay_rate")); + + //This is a constant we create to determine the amount of health. This is the amount of time it has to pass + //before 1 Temporal HP is consumed. + float constant = 1.0/decay; + + //Then we do the calcs + TempHealth = buffer - (difference / constant); + } + + //If the temporal health resulted less than 0, then it is just 0. + if(TempHealth < 0.0) + { + TempHealth = 0.0; + } + + //Return the value + return RoundToFloor(PermHealth + TempHealth); } int FindCabinetIndex(int cabinetId) {