From 7f243bb4b35eb299707d1f1470e1b8100835e155 Mon Sep 17 00:00:00 2001 From: Jackz Date: Mon, 11 Jan 2021 11:08:28 -0600 Subject: [PATCH] L4D2Tools: Refactor / Move extra player code to another plugin --- plugins/L4D2Tools.smx | Bin 13354 -> 11247 bytes plugins/l4d2_autobotcrown.smx | Bin 8213 -> 8213 bytes scripting/L4D2Tools.sp | 172 ++++++++------------------------- scripting/l4d2_autobotcrown.sp | 2 +- 4 files changed, 41 insertions(+), 133 deletions(-) diff --git a/plugins/L4D2Tools.smx b/plugins/L4D2Tools.smx index a0bf2230c52e5f17ca08ad3661f2ba657c7ac386..3c8430eda732b465109b5a0345325cd88213c646 100644 GIT binary patch literal 11247 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 literal 13354 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 CVQ}IA delta 7643 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 Je*sqzy-wtXRlxuN diff --git a/scripting/L4D2Tools.sp b/scripting/L4D2Tools.sp index 1d5cb58..e7c1880 100644 --- a/scripting/L4D2Tools.sp +++ b/scripting/L4D2Tools.sp @@ -10,17 +10,16 @@ #include #include #include "jutils.inc" +#include "l4d_survivor_identity_fix.inc" -static bool bLasersUsed[2048], waitingForPlayers; +static bool bLasersUsed[2048]; static ConVar hLaserNotice, hFinaleTimer, hFFNotice, hMPGamemode; -static int iFinaleStartTime, botDropMeleeWeapon[MAXPLAYERS+1], extraKitsAmount; -static Handle waitTimer = INVALID_HANDLE; +static int iFinaleStartTime, botDropMeleeWeapon[MAXPLAYERS+1]; static float OUT_OF_BOUNDS[3] = {0.0, -1000.0, 0.0}; -native int IdentityFix_SetPlayerModel(int client, int args); -//TODO: Remove the Plugin_Stop on pickup, and give item back instead. keep reference to dropped weapon to delete. + public Plugin myinfo = { name = "L4D2 Misc Tools", author = "Includes: Notice on laser use, Timer for gauntlet runs", @@ -35,7 +34,6 @@ public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max return APLRes_Success; } -//TODO: Implement automatic extra kits public void OnPluginStart() { EngineVersion g_Game = GetEngineVersion(); if(g_Game != Engine_Left4Dead && g_Game != Engine_Left4Dead2) { @@ -48,8 +46,12 @@ public void OnPluginStart() { hFFNotice = CreateConVar("sm_ff_notice", "0.0", "Notify players if a FF occurs. 0 -> Disabled, 1 -> In chat, 2 -> In Hint text", FCVAR_NONE, true, 0.0, true, 2.0); hMPGamemode = FindConVar("mp_gamemode"); + hFFNotice.AddChangeHook(CVC_FFNotice); + if(hFFNotice.IntValue > 0) { + HookEvent("player_hurt", Event_PlayerHurt); + } + HookEvent("player_use", Event_PlayerUse); - HookEvent("player_hurt", Event_PlayerHurt); HookEvent("round_end", Event_RoundEnd); HookEvent("gauntlet_finale_start", Event_GauntletStart); HookEvent("finale_start", Event_FinaleStart); @@ -57,91 +59,32 @@ public void OnPluginStart() { HookEvent("player_entered_checkpoint", Event_EnterSaferoom); HookEvent("player_bot_replace", Event_BotPlayerSwap); HookEvent("bot_player_replace", Event_BotPlayerSwap); - HookEvent("map_transition", Event_MapTransition); - HookEvent("player_spawn", Event_PlayerSpawn); AutoExecConfig(true, "l4d2_tools"); for(int client = 1; client < MaxClients; client++) { - if(IsClientConnected(client) && IsClientInGame(client) && GetClientTeam(client) == 2 && IsFakeClient(client)) { - SDKHook(client, SDKHook_WeaponDrop, Event_OnWeaponDrop); + if(IsClientConnected(client) && IsClientInGame(client) && GetClientTeam(client) == 2) { + if(IsFakeClient(client)) { + SDKHook(client, SDKHook_WeaponDrop, Event_OnWeaponDrop); + } } } RegAdminCmd("sm_model", Command_SetClientModel, ADMFLAG_ROOT); } -//TODO: Give kits on fresh start as well, need to set extraKitsAmount -public Action Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast) { - int client = GetClientOfUserId(event.GetInt("userid")); - if(extraKitsAmount > 0) { - char wpn[32]; - if(GetClientWeaponName(client, 3, wpn, sizeof(wpn))) { - if(!StrEqual(wpn, "weapon_first_aid_kit")) { - CheatCommand(client, "give", "first_aid_kit", ""); - extraKitsAmount--; - } - } + +public void CVC_FFNotice(ConVar convar, const char[] oldValue, const char[] newValue) { + if(convar.IntValue > 0) { + HookEvent("player_hurt", Event_PlayerHurt); + }else { + UnhookEvent("player_hurt", Event_PlayerHurt); } } -public void OnMapStart() { - if(L4D_IsFirstMapInScenario()) { - extraKitsAmount = GetSurvivorCount() - 4; - if(extraKitsAmount < 0) extraKitsAmount = 0; - waitingForPlayers = true; - PrintToServer("New map has started"); + +public Action Event_RoundEnd(Event event, const char[] name, bool dontBroadcast) { + for (int i = 1; i < sizeof(bLasersUsed) ;i++) { + bLasersUsed[i] = false; } - if(extraKitsAmount > 0 && !waitingForPlayers) { - int lastClient; - for(int i = 1; i < MaxClients + 1; i++) { - if(IsClientConnected(i) && IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2) { - PrintToServer("Found a client to spawn %d extra kits: %N", extraKitsAmount, i); - char wpn[32]; - if(GetClientWeaponName(i, 3, wpn, sizeof(wpn))) { - if(!StrEqual(wpn, "weapon_first_aid_kit")) { - lastClient = GetClientOfUserId(i); - CreateTimer(5.0, Timer_SpawnKits, lastClient); - extraKitsAmount--; - } - } - } - - } - if(extraKitsAmount > 0) { - CreateTimer(0.1, Timer_SpawnKits, lastClient); - } - } - int survivorCount = GetSurvivorCount(); - if(survivorCount > 4) - CreateTimer(60.0, Timer_AddExtraCounts, survivorCount); -} -public Action Timer_AddExtraCounts(Handle hd, int players) { - float percentage = 0.042 * players; - PrintToServer("Populating extra items based on player count (%d)", players); - char classname[32]; - for(int i = MaxClients + 1; i < 2048; i++) { - if(IsValidEntity(i)) { - GetEntityClassname(i, classname, sizeof(classname)); - if(StrContains(classname, "_spawn", true) > -1 && !StrEqual(classname, "info_zombie_spawn", true)) { - int count = GetEntProp(i, Prop_Data, "m_itemCount"); - if(GetRandomFloat() < percentage) { - PrintToServer("Debug: Incrementing spawn count for %s from %d", classname, count); - SetEntProp(i, Prop_Data, "m_itemCount", ++count); - } - PrintToServer("%s %d", classname, count); - } - } - } -} -public Action Timer_SpawnKits(Handle timer, int user) { - //After kits given, re-set number to same incase a round restarts. - int prevAmount = extraKitsAmount; - int client = GetClientOfUserId(user); - while(extraKitsAmount > 0) { - CheatCommand(client, "give", "first_aid_kit", ""); - extraKitsAmount--; - } - extraKitsAmount = prevAmount; - return Plugin_Handled; } public Action Command_SetClientModel(int client, int args) { @@ -177,7 +120,6 @@ public Action Command_SetClientModel(int client, int args) { ReplyToTargetError(client, target_count); return Plugin_Handled; } - bool identityFixAvailable = GetFeatureStatus(FeatureType_Native, "IdentityFix_SetPlayerModel") == FeatureStatus_Available; for (int i = 0; i < target_count; i++) { if(IsClientConnected(target_list[i]) && IsClientInGame(target_list[i]) && IsPlayerAlive(target_list[i]) && GetClientTeam(target_list[i]) == 2) { SetEntProp(target_list[i], Prop_Send, "m_survivorCharacter", modelID); @@ -187,8 +129,7 @@ public Action Command_SetClientModel(int client, int args) { GetSurvivorName(target_list[i], name, sizeof(name)); SetClientInfo(target_list[i], "name", name); } - if(identityFixAvailable) - IdentityFix_SetPlayerModel(target_list[i], modelID); + UpdatePlayerIdentity(target_list[i], view_as(modelID)); int primaryWeapon = GetPlayerWeaponSlot(target_list[i], 0); if(primaryWeapon > -1) { @@ -232,21 +173,6 @@ public Action Event_BotPlayerSwap(Event event, const char[] name, bool dontBroad SDKUnhook(bot, SDKHook_WeaponDrop, Event_OnWeaponDrop); } } -public bool OnClientConnect(int client) { - if(waitingForPlayers) { - if(waitTimer != INVALID_HANDLE) { - CloseHandle(waitTimer); - } - waitTimer = CreateTimer(2.0, Timer_Wait, client); - } - return true; -} -public Action Timer_Wait(Handle hdl, int client) { - waitingForPlayers = false; - extraKitsAmount = GetSurvivorCount(); - CreateTimer(5.0, Timer_SpawnKits, GetClientOfUserId(client)); - PrintToServer("Debug: No more players joining in 2.0s, spawning kits."); -} //TODO: Might have to actually check for the bot they control, or possibly the bot will call this itself. public void OnClientDisconnect(int client) { if(botDropMeleeWeapon[client] > -1) { @@ -275,20 +201,22 @@ public void Frame_HideEntity(int entity) { } public void Event_EnterSaferoom(Event event, const char[] name, bool dontBroadcast) { - int user = GetClientOfUserId(event.GetInt("userid")); - if(user == 0) return; - if(botDropMeleeWeapon[user] > 0) { - PrintToServer("Giving melee weapon back to %N", user); - float pos[3]; - GetClientAbsOrigin(user, pos); - TeleportEntity(botDropMeleeWeapon[user], pos, NULL_VECTOR, NULL_VECTOR); - botDropMeleeWeapon[user] = -1; - } - char currentGamemode[16]; - hMPGamemode.GetString(currentGamemode, sizeof(currentGamemode)); - if(StrEqual(currentGamemode, "tankrun", false)) { - if(!IsFakeClient(user)) { - CreateTimer(1.0, Timer_TPBots, user); + + int client = GetClientOfUserId(event.GetInt("userid")); + if(client > 0) { + if(botDropMeleeWeapon[client] > 0) { + PrintToServer("Giving melee weapon back to %N", client); + float pos[3]; + GetClientAbsOrigin(client, pos); + TeleportEntity(botDropMeleeWeapon[client], pos, NULL_VECTOR, NULL_VECTOR); + botDropMeleeWeapon[client] = -1; + } + char currentGamemode[16]; + hMPGamemode.GetString(currentGamemode, sizeof(currentGamemode)); + if(StrEqual(currentGamemode, "tankrun", false)) { + if(!IsFakeClient(client)) { + CreateTimer(1.0, Timer_TPBots, client); + } } } } @@ -340,11 +268,6 @@ public void Event_PlayerUse(Event event, const char[] name, bool dontBroadcast) } } } -public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast) { - for (int i = 1; i < sizeof(bLasersUsed) ;i++) { - bLasersUsed[i] = false; - } -} //finaletimer @@ -374,11 +297,6 @@ public void Event_CarAlarmTriggered(Event event, const char[] name, bool dontBro int userID = GetClientOfUserId(event.GetInt("userid")); PrintToChatAll("%N activated a car alarm!", userID); } -public Action Event_MapTransition(Event event, const char[] name, bool dontBroadcast) { - extraKitsAmount = GetSurvivorCount() - 4; - if(extraKitsAmount < 0) extraKitsAmount = 0; - PrintToServer("Will spawn an extra %d kits", extraKitsAmount); -} /** * Prints human readable duration from milliseconds * @@ -409,13 +327,3 @@ stock int GetAnyValidClient() { } return -1; } - -stock int GetSurvivorCount() { - int count = 0; - for(int i = 1; i < MaxClients + 1; i++) { - if(IsClientConnected(i) && IsClientInGame(i) && GetClientTeam(i) == 2) { - count++; - } - } - return count; -} \ No newline at end of file diff --git a/scripting/l4d2_autobotcrown.sp b/scripting/l4d2_autobotcrown.sp index 2752a5b..d68ff88 100644 --- a/scripting/l4d2_autobotcrown.sp +++ b/scripting/l4d2_autobotcrown.sp @@ -61,7 +61,7 @@ public void OnPluginStart() } hValidDifficulties = CreateConVar("l4d2_autocrown_allowed_difficulty", "7", "The difficulties the plugin is active on. 1=Easy, 2=Normal 4=Advanced 8=Expert. Add numbers together.", FCVAR_NONE); - hAllowedGamemodes = CreateConVar("l4d2_autocrown_modes_tog", "7", "Turn on the plugin in these game modes. 0=All, 1=Coop, 2=Survival, 4=Versus, 8=Scavenge. Add numbers together.", FCVAR_NONE); + hAllowedGamemodes = CreateConVar("l4d2_autocrown_modes_tog", "1", "Turn on the plugin in these game modes. 0=All, 1=Coop, 2=Survival, 4=Versus, 8=Scavenge. Add numbers together.", FCVAR_NONE); char diff[16]; FindConVar("z_difficulty").GetString(diff, sizeof(diff));