From a5bae11f13a5990cb202581ed7d41a33ae852091 Mon Sep 17 00:00:00 2001 From: nikita1824 Date: Sat, 20 Jan 2024 22:31:27 +0500 Subject: [PATCH 01/11] confoglcompmod: tab to spaces --- addons/sourcemod/scripting/confoglcompmod.sp | 430 ++-- .../scripting/confoglcompmod/BossSpawning.sp | 308 +-- .../scripting/confoglcompmod/BotKick.sp | 124 +- .../confoglcompmod/ClientSettings.sp | 650 +++--- .../scripting/confoglcompmod/CvarSettings.sp | 462 ++-- .../scripting/confoglcompmod/EntityRemover.sp | 596 ++--- .../scripting/confoglcompmod/FinaleSpawn.sp | 112 +- .../scripting/confoglcompmod/GhostTank.sp | 426 ++-- .../scripting/confoglcompmod/GhostWarp.sp | 204 +- .../scripting/confoglcompmod/ItemTracking.sp | 8 +- .../scripting/confoglcompmod/MapInfo.sp | 550 ++--- .../confoglcompmod/PasswordSystem.sp | 202 +- .../scripting/confoglcompmod/ReqMatch.sp | 972 ++++---- .../scripting/confoglcompmod/ScoreMod.sp | 750 +++--- .../confoglcompmod/UnprohibitBosses.sp | 66 +- .../confoglcompmod/UnreserveLobby.sp | 30 +- .../scripting/confoglcompmod/WaterSlowdown.sp | 138 +- .../confoglcompmod/WeaponCustomization.sp | 170 +- .../confoglcompmod/WeaponInformation.sp | 2066 ++++++++--------- .../confoglcompmod/includes/configs.sp | 240 +- .../confoglcompmod/includes/constants.sp | 174 +- .../confoglcompmod/includes/customtags.sp | 120 +- .../confoglcompmod/includes/debug.sp | 88 +- .../confoglcompmod/includes/functions.sp | 176 +- .../confoglcompmod/includes/survivorindex.sp | 104 +- 25 files changed, 4583 insertions(+), 4583 deletions(-) diff --git a/addons/sourcemod/scripting/confoglcompmod.sp b/addons/sourcemod/scripting/confoglcompmod.sp index e3b6d7115..d40be4b27 100644 --- a/addons/sourcemod/scripting/confoglcompmod.sp +++ b/addons/sourcemod/scripting/confoglcompmod.sp @@ -1,31 +1,31 @@ #pragma semicolon 1 #pragma newdecls required -#define DEBUG_ALL 0 +#define DEBUG_ALL 0 -#define PLUGIN_VERSION "2.4.3" +#define PLUGIN_VERSION "2.4.3" // Using these macros, you can disable unnecessary modules, // and they will not be included in the plugin at compile time, // to disable, specify 0 for the required module. -#define MODULE_MAPINFO 1 // MapInfo -#define MODULE_WEAPONINFORMATION 1 // WeaponInformation -#define MODULE_REQMATCH 1 // ReqMatch -#define MODULE_CVARSETTINGS 1 // CvarSettings -#define MODULE_GHOSTTANK 1 // GhostTank -#define MODULE_UNRESERVELOBBY 1 // UnreserveLobby -#define MODULE_GHOSTWARP 0 // GhostWarp (plugin l4d2_ghost_warp replaces this functionality) -#define MODULE_PASSWORDSYSTEM 1 // PasswordSystem -#define MODULE_BOTKICK 1 // BotKick -#define MODULE_SCOREMOD 1 // ScoreMod -#define MODULE_FINALESPAWN 1 // FinaleSpawn -#define MODULE_BOSSSPAWNING 1 // BossSpawning -#define MODULE_CLIENTSETTINGS 1 // ClientSettings -#define MODULE_ITEMTRACKING 1 // ItemTracking -#define MODULE_WATERSLOWDOWN 1 // WaterSlowdown (config 'pmelite' uses it) -#define MODULE_UNPROHIBITBOSSES 0 // UnprohibitBosses (duplicate code, plugin 'bossspawningfix' does the same). -#define MODULE_ENTITYREMOVER 0 // EntityRemover (the same can be done with the extension 'stripper'). -#define MODULE_WEAPONCUSTOMIZATION 0 // WeaponCustomization (this is deprecated and disabled, plugin 'l4d_weapon_limits' does the same). +#define MODULE_MAPINFO 1 // MapInfo +#define MODULE_WEAPONINFORMATION 1 // WeaponInformation +#define MODULE_REQMATCH 1 // ReqMatch +#define MODULE_CVARSETTINGS 1 // CvarSettings +#define MODULE_GHOSTTANK 1 // GhostTank +#define MODULE_UNRESERVELOBBY 1 // UnreserveLobby +#define MODULE_GHOSTWARP 0 // GhostWarp (plugin l4d2_ghost_warp replaces this functionality) +#define MODULE_PASSWORDSYSTEM 1 // PasswordSystem +#define MODULE_BOTKICK 1 // BotKick +#define MODULE_SCOREMOD 1 // ScoreMod +#define MODULE_FINALESPAWN 1 // FinaleSpawn +#define MODULE_BOSSSPAWNING 1 // BossSpawning +#define MODULE_CLIENTSETTINGS 1 // ClientSettings +#define MODULE_ITEMTRACKING 1 // ItemTracking +#define MODULE_WATERSLOWDOWN 1 // WaterSlowdown (config 'pmelite' uses it) +#define MODULE_UNPROHIBITBOSSES 0 // UnprohibitBosses (duplicate code, plugin 'bossspawningfix' does the same). +#define MODULE_ENTITYREMOVER 0 // EntityRemover (the same can be done with the extension 'stripper'). +#define MODULE_WEAPONCUSTOMIZATION 0 // WeaponCustomization (this is deprecated and disabled, plugin 'l4d_weapon_limits' does the same). #include #include @@ -44,250 +44,250 @@ #include "confoglcompmod/includes/customtags.sp" #if MODULE_MAPINFO - #include "confoglcompmod/MapInfo.sp" + #include "confoglcompmod/MapInfo.sp" #endif #if MODULE_WEAPONINFORMATION - #include "confoglcompmod/WeaponInformation.sp" + #include "confoglcompmod/WeaponInformation.sp" #endif #if MODULE_REQMATCH - #include "confoglcompmod/ReqMatch.sp" + #include "confoglcompmod/ReqMatch.sp" #endif #if MODULE_CVARSETTINGS - #include "confoglcompmod/CvarSettings.sp" + #include "confoglcompmod/CvarSettings.sp" #endif #if MODULE_GHOSTTANK - #include "confoglcompmod/GhostTank.sp" + #include "confoglcompmod/GhostTank.sp" #endif #if MODULE_UNRESERVELOBBY - #include "confoglcompmod/UnreserveLobby.sp" + #include "confoglcompmod/UnreserveLobby.sp" #endif #if MODULE_GHOSTWARP - #include "confoglcompmod/GhostWarp.sp" + #include "confoglcompmod/GhostWarp.sp" #endif #if MODULE_PASSWORDSYSTEM - #include "confoglcompmod/PasswordSystem.sp" + #include "confoglcompmod/PasswordSystem.sp" #endif #if MODULE_BOTKICK - #include "confoglcompmod/BotKick.sp" + #include "confoglcompmod/BotKick.sp" #endif #if MODULE_SCOREMOD - #include "confoglcompmod/ScoreMod.sp" + #include "confoglcompmod/ScoreMod.sp" #endif #if MODULE_FINALESPAWN - #include "confoglcompmod/FinaleSpawn.sp" + #include "confoglcompmod/FinaleSpawn.sp" #endif #if MODULE_BOSSSPAWNING - #include "confoglcompmod/BossSpawning.sp" + #include "confoglcompmod/BossSpawning.sp" #endif #if MODULE_CLIENTSETTINGS - #include "confoglcompmod/ClientSettings.sp" + #include "confoglcompmod/ClientSettings.sp" #endif #if MODULE_ITEMTRACKING - #include "confoglcompmod/ItemTracking.sp" + #include "confoglcompmod/ItemTracking.sp" #endif #if MODULE_WATERSLOWDOWN - #include "confoglcompmod/WaterSlowdown.sp" + #include "confoglcompmod/WaterSlowdown.sp" #endif #if MODULE_UNPROHIBITBOSSES - #include "confoglcompmod/UnprohibitBosses.sp" + #include "confoglcompmod/UnprohibitBosses.sp" #endif #if MODULE_ENTITYREMOVER - #include "confoglcompmod/EntityRemover.sp" + #include "confoglcompmod/EntityRemover.sp" #endif #if MODULE_WEAPONCUSTOMIZATION - #include "confoglcompmod/WeaponCustomization.sp" + #include "confoglcompmod/WeaponCustomization.sp" #endif public Plugin myinfo = { - name = "Confogl's Competitive Mod", - author = "Confogl Team, A1m`", - description = "A competitive mod for L4D2", - version = PLUGIN_VERSION, - url = "https://github.com/L4D-Community/L4D2-Competitive-Framework" + name = "Confogl's Competitive Mod", + author = "Confogl Team, A1m`", + description = "A competitive mod for L4D2", + version = PLUGIN_VERSION, + url = "https://github.com/L4D-Community/L4D2-Competitive-Framework" }; public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) { - // Plugin functions - Configs_APL(); // configs + // Plugin functions + Configs_APL(); // configs - // Modules + // Modules #if MODULE_REQMATCH - RM_APL(); // ReqMatch + RM_APL(); // ReqMatch #endif #if MODULE_MAPINFO - MI_APL(); // MapInfo + MI_APL(); // MapInfo #endif #if MODULE_SCOREMOD - SM_APL(); + SM_APL(); #endif - // Other - RegPluginLibrary("confogl"); - return APLRes_Success; + // Other + RegPluginLibrary("confogl"); + return APLRes_Success; } public void OnPluginStart() { - // Plugin functions - Fns_OnModuleStart(); // functions - Debug_OnModuleStart(); // debug - Configs_OnModuleStart(); // configs - SI_OnModuleStart(); // survivorindex - CT_OnModuleStart(); // customtags - - // Modules + // Plugin functions + Fns_OnModuleStart(); // functions + Debug_OnModuleStart(); // debug + Configs_OnModuleStart(); // configs + SI_OnModuleStart(); // survivorindex + CT_OnModuleStart(); // customtags + + // Modules #if MODULE_MAPINFO - MI_OnModuleStart(); // MapInfo + MI_OnModuleStart(); // MapInfo #endif #if MODULE_WEAPONINFORMATION - WI_OnModuleStart(); // WeaponInformation + WI_OnModuleStart(); // WeaponInformation #endif #if MODULE_REQMATCH - RM_OnModuleStart(); // ReqMatch + RM_OnModuleStart(); // ReqMatch #endif #if MODULE_CVARSETTINGS - CVS_OnModuleStart(); // CvarSettings + CVS_OnModuleStart(); // CvarSettings #endif #if MODULE_PASSWORDSYSTEM - PS_OnModuleStart(); // PasswordSystem + PS_OnModuleStart(); // PasswordSystem #endif #if MODULE_UNRESERVELOBBY - UL_OnModuleStart(); // UnreserveLobby + UL_OnModuleStart(); // UnreserveLobby #endif #if MODULE_ENTITYREMOVER - ER_OnModuleStart(); // EntityRemover + ER_OnModuleStart(); // EntityRemover #endif #if MODULE_GHOSTWARP - GW_OnModuleStart(); // GhostWarp + GW_OnModuleStart(); // GhostWarp #endif #if MODULE_WATERSLOWDOWN - WS_OnModuleStart(); // WaterSlowdown + WS_OnModuleStart(); // WaterSlowdown #endif #if MODULE_GHOSTTANK - GT_OnModuleStart(); // GhostTank + GT_OnModuleStart(); // GhostTank #endif #if MODULE_UNPROHIBITBOSSES - UB_OnModuleStart(); // UnprohibitBosses + UB_OnModuleStart(); // UnprohibitBosses #endif #if MODULE_BOTKICK - BK_OnModuleStart(); // BotKick + BK_OnModuleStart(); // BotKick #endif #if MODULE_SCOREMOD - SM_OnModuleStart(); // ScoreMod + SM_OnModuleStart(); // ScoreMod #endif #if MODULE_FINALESPAWN - FS_OnModuleStart(); // FinaleSpawn + FS_OnModuleStart(); // FinaleSpawn #endif #if MODULE_BOSSSPAWNING - BS_OnModuleStart(); // BossSpawning + BS_OnModuleStart(); // BossSpawning #endif #if MODULE_WEAPONCUSTOMIZATION - WC_OnModuleStart(); // WeaponCustomization + WC_OnModuleStart(); // WeaponCustomization #endif #if MODULE_CLIENTSETTINGS - CLS_OnModuleStart(); // ClientSettings + CLS_OnModuleStart(); // ClientSettings #endif #if MODULE_ITEMTRACKING - IT_OnModuleStart(); // ItemTracking + IT_OnModuleStart(); // ItemTracking #endif - // Other - AddCustomServerTag("confogl"); + // Other + AddCustomServerTag("confogl"); } public void OnPluginEnd() { - // Modules + // Modules #if MODULE_CVARSETTINGS - CVS_OnModuleEnd(); // CvarSettings + CVS_OnModuleEnd(); // CvarSettings #endif #if MODULE_PASSWORDSYSTEM - PS_OnModuleEnd(); // PasswordSystem + PS_OnModuleEnd(); // PasswordSystem #endif #if MODULE_ENTITYREMOVER - ER_OnModuleEnd(); // EntityRemover + ER_OnModuleEnd(); // EntityRemover #endif #if MODULE_SCOREMOD - SM_OnModuleEnd(); // ScoreMod + SM_OnModuleEnd(); // ScoreMod #endif #if MODULE_WATERSLOWDOWN - WS_OnModuleEnd(); // WaterSlowdown + WS_OnModuleEnd(); // WaterSlowdown #endif #if MODULE_MAPINFO - MI_OnModuleEnd(); // MapInfo + MI_OnModuleEnd(); // MapInfo #endif - // Other - RemoveCustomServerTag("confogl"); + // Other + RemoveCustomServerTag("confogl"); } #if MODULE_MAPINFO || MODULE_REQMATCH || MODULE_SCOREMOD || MODULE_BOSSSPAWNING || MODULE_ITEMTRACKING public void OnMapStart() { - // Modules - #if MODULE_MAPINFO - MI_OnMapStart(); // MapInfo - #endif - - #if MODULE_REQMATCH - RM_OnMapStart(); // ReqMatch - #endif - - #if MODULE_SCOREMOD - SM_OnMapStart(); // ScoreMod - #endif - - #if MODULE_BOSSSPAWNING - BS_OnMapStart(); // BossSpawning - #endif - - #if MODULE_ITEMTRACKING - IT_OnMapStart(); // ItemTracking - #endif + // Modules + #if MODULE_MAPINFO + MI_OnMapStart(); // MapInfo + #endif + + #if MODULE_REQMATCH + RM_OnMapStart(); // ReqMatch + #endif + + #if MODULE_SCOREMOD + SM_OnMapStart(); // ScoreMod + #endif + + #if MODULE_BOSSSPAWNING + BS_OnMapStart(); // BossSpawning + #endif + + #if MODULE_ITEMTRACKING + IT_OnMapStart(); // ItemTracking + #endif } #endif @@ -295,22 +295,22 @@ public void OnMapStart() public void OnMapEnd() { - // Modules - #if MODULE_MAPINFO - MI_OnMapEnd(); // MapInfo - #endif - - #if MODULE_WEAPONINFORMATION - WI_OnMapEnd(); // WeaponInformation - #endif - - #if MODULE_PASSWORDSYSTEM - PS_OnMapEnd(); // PasswordSystem - #endif - - #if MODULE_WATERSLOWDOWN - WS_OnMapEnd(); // WaterSlowdown - #endif + // Modules + #if MODULE_MAPINFO + MI_OnMapEnd(); // MapInfo + #endif + + #if MODULE_WEAPONINFORMATION + WI_OnMapEnd(); // WeaponInformation + #endif + + #if MODULE_PASSWORDSYSTEM + PS_OnMapEnd(); // PasswordSystem + #endif + + #if MODULE_WATERSLOWDOWN + WS_OnMapEnd(); // WaterSlowdown + #endif } #endif @@ -318,8 +318,8 @@ public void OnMapEnd() public void OnConfigsExecuted() { - // Modules - CVS_OnConfigsExecuted(); // CvarSettings + // Modules + CVS_OnConfigsExecuted(); // CvarSettings } #endif @@ -327,8 +327,8 @@ public void OnConfigsExecuted() public void OnClientDisconnect(int client) { - // Modules - RM_OnClientDisconnect(client); // ReqMatch + // Modules + RM_OnClientDisconnect(client); // ReqMatch } #endif @@ -336,13 +336,13 @@ public void OnClientDisconnect(int client) public bool OnClientConnect(int client, char[] rejectmsg, int maxlen) { - // Modules - if (!BK_OnClientConnect(client)) - { // BotKick - return false; - } + // Modules + if (!BK_OnClientConnect(client)) + { // BotKick + return false; + } - return true; + return true; } #endif @@ -350,22 +350,22 @@ public bool OnClientConnect(int client, char[] rejectmsg, int maxlen) public void OnClientPutInServer(int client) { - // Modules - #if MODULE_REQMATCH - RM_OnClientPutInServer(); // ReqMatch - #endif - - #if MODULE_UNRESERVELOBBY - UL_OnClientPutInServer(); // UnreserveLobby - #endif - - #if MODULE_PASSWORDSYSTEM - PS_OnClientPutInServer(client); // PasswordSystem - #endif - - #if MODULE_FINALESPAWN - FS_OnClientPutInServer(client); // FinaleSpawn - #endif + // Modules + #if MODULE_REQMATCH + RM_OnClientPutInServer(); // ReqMatch + #endif + + #if MODULE_UNRESERVELOBBY + UL_OnClientPutInServer(); // UnreserveLobby + #endif + + #if MODULE_PASSWORDSYSTEM + PS_OnClientPutInServer(client); // PasswordSystem + #endif + + #if MODULE_FINALESPAWN + FS_OnClientPutInServer(client); // FinaleSpawn + #endif } #endif @@ -375,23 +375,23 @@ public void OnClientPutInServer(int client) public void OnGameFrame() { - // Modules - WS_OnGameFrame(); // WaterSlowdown + // Modules + WS_OnGameFrame(); // WaterSlowdown } #endif #if MODULE_GHOSTWARP public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3], float angles[3], int &weapon, - int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2]) + int &subtype, int &cmdnum, int &tickcount, int &seed, int mouse[2]) { - // Modules - if (GW_OnPlayerRunCmd(client, buttons)) - { // GhostWarp - return Plugin_Handled; - } + // Modules + if (GW_OnPlayerRunCmd(client, buttons)) + { // GhostWarp + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; } #endif @@ -401,13 +401,13 @@ public Action OnPlayerRunCmd(int client, int &buttons, int &impulse, float vel[3 public Action L4D_OnCThrowActivate(int ability) { - // Modules - if (GT_OnCThrowActivate() == Plugin_Handled) - { // GhostTank - return Plugin_Handled; - } + // Modules + if (GT_OnCThrowActivate() == Plugin_Handled) + { // GhostTank + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; } #endif @@ -415,13 +415,13 @@ public Action L4D_OnCThrowActivate(int ability) public Action L4D_OnSpawnTank(const float vector[3], const float qangle[3]) { - // Modules - if (GT_OnTankSpawn_Forward() == Plugin_Handled) - { // GhostTank - return Plugin_Handled; - } + // Modules + if (GT_OnTankSpawn_Forward() == Plugin_Handled) + { // GhostTank + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; } #endif @@ -429,8 +429,8 @@ public Action L4D_OnSpawnTank(const float vector[3], const float qangle[3]) public void L4D_OnSpawnTank_Post(int client, const float vecPos[3], const float vecAng[3]) { - // Modules - BS_OnTankSpawnPost_Forward(client); // BossSpawning + // Modules + BS_OnTankSpawnPost_Forward(client); // BossSpawning } #endif @@ -438,13 +438,13 @@ public void L4D_OnSpawnTank_Post(int client, const float vecPos[3], const float public Action L4D_OnSpawnMob(int &amount) { - // Modules - if (GT_OnSpawnMob_Forward(amount) == Plugin_Handled) - { // GhostTank - return Plugin_Handled; - } + // Modules + if (GT_OnSpawnMob_Forward(amount) == Plugin_Handled) + { // GhostTank + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; } #endif @@ -452,13 +452,13 @@ public Action L4D_OnSpawnMob(int &amount) public Action L4D_OnTryOfferingTankBot(int tank_index, bool &enterStasis) { - // Modules - if (GT_OnTryOfferingTankBot(enterStasis) == Plugin_Handled) - { // GhostTank - return Plugin_Handled; - } + // Modules + if (GT_OnTryOfferingTankBot(enterStasis) == Plugin_Handled) + { // GhostTank + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; } #endif @@ -466,13 +466,13 @@ public Action L4D_OnTryOfferingTankBot(int tank_index, bool &enterStasis) public Action L4D_OnGetMissionVSBossSpawning(float &spawn_pos_min, float &spawn_pos_max, float &tank_chance, float &witch_chance) { - // Modules - if (UB_OnGetMissionVSBossSpawning() == Plugin_Handled) - { // UnprohibitBosses - return Plugin_Handled; - } + // Modules + if (UB_OnGetMissionVSBossSpawning() == Plugin_Handled) + { // UnprohibitBosses + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; } #endif @@ -480,41 +480,41 @@ public Action L4D_OnGetMissionVSBossSpawning(float &spawn_pos_min, float &spawn_ public Action L4D_OnGetScriptValueInt(const char[] key, int &retVal) { - // Modules - if (UB_OnGetScriptValueInt(key, retVal) == Plugin_Handled) - { // UnprohibitBosses - return Plugin_Handled; - } + // Modules + if (UB_OnGetScriptValueInt(key, retVal) == Plugin_Handled) + { // UnprohibitBosses + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; } #endif public Action L4D_OnFirstSurvivorLeftSafeArea(int client) { - if (IsPluginEnabled()) - { - CreateTimer(0.1, OFSLA_ForceMobSpawnTimer); - } + if (IsPluginEnabled()) + { + CreateTimer(0.1, OFSLA_ForceMobSpawnTimer); + } - return Plugin_Continue; + return Plugin_Continue; } public Action OFSLA_ForceMobSpawnTimer(Handle hTimer) { - // Workaround to make tank horde blocking always work - // Makes the first horde always start 100s after survivors leave saferoom - static ConVar hCvarMobSpawnTimeMin = null; - static ConVar hCvarMobSpawnTimeMax = null; + // Workaround to make tank horde blocking always work + // Makes the first horde always start 100s after survivors leave saferoom + static ConVar hCvarMobSpawnTimeMin = null; + static ConVar hCvarMobSpawnTimeMax = null; - if (hCvarMobSpawnTimeMin == null) - { - hCvarMobSpawnTimeMin = FindConVar("z_mob_spawn_min_interval_normal"); - hCvarMobSpawnTimeMax = FindConVar("z_mob_spawn_max_interval_normal"); - } + if (hCvarMobSpawnTimeMin == null) + { + hCvarMobSpawnTimeMin = FindConVar("z_mob_spawn_min_interval_normal"); + hCvarMobSpawnTimeMax = FindConVar("z_mob_spawn_max_interval_normal"); + } - float fRand = GetRandomFloat(hCvarMobSpawnTimeMin.FloatValue, hCvarMobSpawnTimeMax.FloatValue); - L4D2_CTimerStart(L4D2CT_MobSpawnTimer, fRand); + float fRand = GetRandomFloat(hCvarMobSpawnTimeMin.FloatValue, hCvarMobSpawnTimeMax.FloatValue); + L4D2_CTimerStart(L4D2CT_MobSpawnTimer, fRand); - return Plugin_Stop; + return Plugin_Stop; } diff --git a/addons/sourcemod/scripting/confoglcompmod/BossSpawning.sp b/addons/sourcemod/scripting/confoglcompmod/BossSpawning.sp index e10719d62..5c94660bd 100644 --- a/addons/sourcemod/scripting/confoglcompmod/BossSpawning.sp +++ b/addons/sourcemod/scripting/confoglcompmod/BossSpawning.sp @@ -1,213 +1,213 @@ #if defined __boss_spawning_included - #endinput + #endinput #endif #define __boss_spawning_included -#define DEBUG_BS 0 -#define BS_MODULE_NAME "BossSpawning" +#define DEBUG_BS 0 +#define BS_MODULE_NAME "BossSpawning" -#define MAX_TANKS 5 -#define MAX_WITCHES 5 -#define ROUND_MAX_COUNT 2 +#define MAX_TANKS 5 +#define MAX_WITCHES 5 +#define ROUND_MAX_COUNT 2 static char - BS_sMap[64] = "\0"; + BS_sMap[64] = "\0"; static bool - BS_bEnabled = true, - BS_bIsFirstRound = true, - BS_bDeleteWitches = false, - BS_bFinaleStarted = false; + BS_bEnabled = true, + BS_bIsFirstRound = true, + BS_bDeleteWitches = false, + BS_bFinaleStarted = false; static int - BS_iTankCount[ROUND_MAX_COUNT] = {0, ...}, - BS_iWitchCount[ROUND_MAX_COUNT] = {0, ...}; + BS_iTankCount[ROUND_MAX_COUNT] = {0, ...}, + BS_iWitchCount[ROUND_MAX_COUNT] = {0, ...}; static float - BS_fTankSpawn[MAX_TANKS][3], - BS_fWitchSpawn[MAX_WITCHES][2][3]; + BS_fTankSpawn[MAX_TANKS][3], + BS_fWitchSpawn[MAX_WITCHES][2][3]; static ConVar - BS_hEnabled = null; + BS_hEnabled = null; void BS_OnModuleStart() { - BS_hEnabled = CreateConVarEx("lock_boss_spawns", "1", "Enables forcing same coordinates for tank and witch spawns", _, true, 0.0, true, 1.0); + BS_hEnabled = CreateConVarEx("lock_boss_spawns", "1", "Enables forcing same coordinates for tank and witch spawns", _, true, 0.0, true, 1.0); - BS_bEnabled = BS_hEnabled.BoolValue; - BS_hEnabled.AddChangeHook(BS_ConVarChange); + BS_bEnabled = BS_hEnabled.BoolValue; + BS_hEnabled.AddChangeHook(BS_ConVarChange); - HookEvent("witch_spawn", BS_WitchSpawn); - HookEvent("round_end", BS_RoundEnd, EventHookMode_PostNoCopy); - HookEvent("finale_start", BS_FinaleStart, EventHookMode_PostNoCopy); + HookEvent("witch_spawn", BS_WitchSpawn); + HookEvent("round_end", BS_RoundEnd, EventHookMode_PostNoCopy); + HookEvent("finale_start", BS_FinaleStart, EventHookMode_PostNoCopy); - GetCurrentMap(BS_sMap, sizeof(BS_sMap)); + GetCurrentMap(BS_sMap, sizeof(BS_sMap)); } void BS_OnMapStart() { - BS_bIsFirstRound = true; - BS_bFinaleStarted = false; + BS_bIsFirstRound = true; + BS_bFinaleStarted = false; - for (int i = 0; i < ROUND_MAX_COUNT; i++) { - BS_iTankCount[i] = 0; - BS_iWitchCount[i] = 0; - } + for (int i = 0; i < ROUND_MAX_COUNT; i++) { + BS_iTankCount[i] = 0; + BS_iWitchCount[i] = 0; + } - GetCurrentMap(BS_sMap, sizeof(BS_sMap)); + GetCurrentMap(BS_sMap, sizeof(BS_sMap)); } public void BS_ConVarChange(ConVar convar, const char[] oldValue, const char[] newValue) { - BS_bEnabled = BS_hEnabled.BoolValue; + BS_bEnabled = BS_hEnabled.BoolValue; } public void BS_WitchSpawn(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!BS_bEnabled || !IsPluginEnabled()) { - return; - } - - int iWitch = hEvent.GetInt("witchid"); - - if (BS_bDeleteWitches) { - // Used to delete round2 extra witches, which spawn on round start instead of by flow - KillEntity(iWitch); - - return; - } - - // Can't track more witches if our witch array is full - if (BS_iWitchCount[view_as(!BS_bIsFirstRound)] >= MAX_WITCHES) { - Debug_LogError(BS_MODULE_NAME, "Failed to save a large number of witches to the array. Count: %d, Max: %d", \ - BS_iWitchCount[view_as(!BS_bIsFirstRound)], MAX_WITCHES); - return; - } - - if (BS_bIsFirstRound) { - // If it's the first round, track our witch. - GetEntPropVector(iWitch, Prop_Send, "m_vecOrigin", BS_fWitchSpawn[BS_iWitchCount[0]][0]); - GetEntPropVector(iWitch, Prop_Send, "m_angRotation", BS_fWitchSpawn[BS_iWitchCount[0]][1]); - BS_iWitchCount[0]++; - } else if (BS_iWitchCount[0] > BS_iWitchCount[1]) { - // Until we have found the same number of witches as from round1, teleport them to round1 locations - TeleportEntity(iWitch, BS_fWitchSpawn[BS_iWitchCount[1]][0], BS_fWitchSpawn[BS_iWitchCount[1]][1], NULL_VECTOR); - BS_iWitchCount[1]++; - } + if (!BS_bEnabled || !IsPluginEnabled()) { + return; + } + + int iWitch = hEvent.GetInt("witchid"); + + if (BS_bDeleteWitches) { + // Used to delete round2 extra witches, which spawn on round start instead of by flow + KillEntity(iWitch); + + return; + } + + // Can't track more witches if our witch array is full + if (BS_iWitchCount[view_as(!BS_bIsFirstRound)] >= MAX_WITCHES) { + Debug_LogError(BS_MODULE_NAME, "Failed to save a large number of witches to the array. Count: %d, Max: %d", \ + BS_iWitchCount[view_as(!BS_bIsFirstRound)], MAX_WITCHES); + return; + } + + if (BS_bIsFirstRound) { + // If it's the first round, track our witch. + GetEntPropVector(iWitch, Prop_Send, "m_vecOrigin", BS_fWitchSpawn[BS_iWitchCount[0]][0]); + GetEntPropVector(iWitch, Prop_Send, "m_angRotation", BS_fWitchSpawn[BS_iWitchCount[0]][1]); + BS_iWitchCount[0]++; + } else if (BS_iWitchCount[0] > BS_iWitchCount[1]) { + // Until we have found the same number of witches as from round1, teleport them to round1 locations + TeleportEntity(iWitch, BS_fWitchSpawn[BS_iWitchCount[1]][0], BS_fWitchSpawn[BS_iWitchCount[1]][1], NULL_VECTOR); + BS_iWitchCount[1]++; + } } void BS_OnTankSpawnPost_Forward(int iTankClient) { - if (!BS_bEnabled || !IsPluginEnabled()) { - return; - } - - // Don't touch tanks on finale events - if (BS_bFinaleStarted) { - return; - } - - // Don't track tank spawns on c5m5 or tank can spawn behind other team. - if (strcmp(BS_sMap, "c5m5_bridge") == 0) { - return; - } - - if (GetMapValueInt("tank_z_fix")) { - FixZDistance(iTankClient); // fix stuck tank spawns, ex c1m1 - } - - // If we reach MAX_TANKS, we don't have any room to store their locations - if (BS_iTankCount[view_as(!BS_bIsFirstRound)] >= MAX_TANKS) { - Debug_LogError(BS_MODULE_NAME, "Failed to save a large number of tanks to the array. Count: %d, Max: %d", \ - BS_iTankCount[view_as(!BS_bIsFirstRound)], MAX_TANKS); - return; - } - - if (DEBUG_BS || IsDebugEnabled()) { - LogMessage("[%s] Tracking this tank spawn. Currently, %d tanks", BS_MODULE_NAME, BS_iTankCount[view_as(!BS_bIsFirstRound)]); - } - - if (BS_bIsFirstRound) { - GetClientAbsOrigin(iTankClient, BS_fTankSpawn[BS_iTankCount[0]]); - if (DEBUG_BS || IsDebugEnabled()) { - LogMessage("[%s] Saving tank at %f %f %f", \ - BS_MODULE_NAME, BS_fTankSpawn[BS_iTankCount[0]][0], BS_fTankSpawn[BS_iTankCount[0]][1], BS_fTankSpawn[BS_iTankCount[0]][2]); - } - - BS_iTankCount[0]++; - } else if (BS_iTankCount[0] > BS_iTankCount[1]) { - TeleportEntity(iTankClient, BS_fTankSpawn[BS_iTankCount[1]], NULL_VECTOR, NULL_VECTOR); - - if (DEBUG_BS || IsDebugEnabled()) { - LogMessage("[%s] Teleporting tank to tank at %f %f %f", \ - BS_MODULE_NAME, BS_fTankSpawn[BS_iTankCount[1]][0], BS_fTankSpawn[BS_iTankCount[1]][1], BS_fTankSpawn[BS_iTankCount[1]][2]); - } - - BS_iTankCount[1]++; - } else if (DEBUG_BS || IsDebugEnabled()) { - LogMessage("[%s] Not first round and not acceptable tank", BS_MODULE_NAME); - LogMessage("[%s] IsFirstRound: %d R1Count: %d R2Count: %d", BS_MODULE_NAME, BS_bIsFirstRound, BS_iTankCount[0], BS_iTankCount[1]); - } + if (!BS_bEnabled || !IsPluginEnabled()) { + return; + } + + // Don't touch tanks on finale events + if (BS_bFinaleStarted) { + return; + } + + // Don't track tank spawns on c5m5 or tank can spawn behind other team. + if (strcmp(BS_sMap, "c5m5_bridge") == 0) { + return; + } + + if (GetMapValueInt("tank_z_fix")) { + FixZDistance(iTankClient); // fix stuck tank spawns, ex c1m1 + } + + // If we reach MAX_TANKS, we don't have any room to store their locations + if (BS_iTankCount[view_as(!BS_bIsFirstRound)] >= MAX_TANKS) { + Debug_LogError(BS_MODULE_NAME, "Failed to save a large number of tanks to the array. Count: %d, Max: %d", \ + BS_iTankCount[view_as(!BS_bIsFirstRound)], MAX_TANKS); + return; + } + + if (DEBUG_BS || IsDebugEnabled()) { + LogMessage("[%s] Tracking this tank spawn. Currently, %d tanks", BS_MODULE_NAME, BS_iTankCount[view_as(!BS_bIsFirstRound)]); + } + + if (BS_bIsFirstRound) { + GetClientAbsOrigin(iTankClient, BS_fTankSpawn[BS_iTankCount[0]]); + if (DEBUG_BS || IsDebugEnabled()) { + LogMessage("[%s] Saving tank at %f %f %f", \ + BS_MODULE_NAME, BS_fTankSpawn[BS_iTankCount[0]][0], BS_fTankSpawn[BS_iTankCount[0]][1], BS_fTankSpawn[BS_iTankCount[0]][2]); + } + + BS_iTankCount[0]++; + } else if (BS_iTankCount[0] > BS_iTankCount[1]) { + TeleportEntity(iTankClient, BS_fTankSpawn[BS_iTankCount[1]], NULL_VECTOR, NULL_VECTOR); + + if (DEBUG_BS || IsDebugEnabled()) { + LogMessage("[%s] Teleporting tank to tank at %f %f %f", \ + BS_MODULE_NAME, BS_fTankSpawn[BS_iTankCount[1]][0], BS_fTankSpawn[BS_iTankCount[1]][1], BS_fTankSpawn[BS_iTankCount[1]][2]); + } + + BS_iTankCount[1]++; + } else if (DEBUG_BS || IsDebugEnabled()) { + LogMessage("[%s] Not first round and not acceptable tank", BS_MODULE_NAME); + LogMessage("[%s] IsFirstRound: %d R1Count: %d R2Count: %d", BS_MODULE_NAME, BS_bIsFirstRound, BS_iTankCount[0], BS_iTankCount[1]); + } } public void BS_RoundEnd(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - BS_bIsFirstRound = false; - BS_bFinaleStarted = false; + BS_bIsFirstRound = false; + BS_bFinaleStarted = false; - if (strcmp(BS_sMap, "c6m1_riverbank") == 0) { - BS_bDeleteWitches = false; - } else { - BS_bDeleteWitches = true; + if (strcmp(BS_sMap, "c6m1_riverbank") == 0) { + BS_bDeleteWitches = false; + } else { + BS_bDeleteWitches = true; - CreateTimer(5.0, BS_WitchTimerReset); - } + CreateTimer(5.0, BS_WitchTimerReset); + } } public void BS_FinaleStart(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - BS_bFinaleStarted = true; + BS_bFinaleStarted = true; } public Action BS_WitchTimerReset(Handle hTimer) { - BS_bDeleteWitches = false; + BS_bDeleteWitches = false; - return Plugin_Stop; + return Plugin_Stop; } static void FixZDistance(int iTankClient) { - int index = 0; - float distance = 99999999999999.9; - float WarpToLocation[3], TankLocation[3], TempSurvivorLocation[3]; - GetClientAbsOrigin(iTankClient, TankLocation); - - if (DEBUG_BS || IsDebugEnabled()) { - LogMessage("[%s] tank z spawn check... Map: %s, Tank Location: %f, %f, %f", BS_MODULE_NAME, BS_sMap, TankLocation[0], TankLocation[1], TankLocation[2]); - } - - for (int i = 0; i < NUM_OF_SURVIVORS; i++) { - distance = GetMapValueFloat("max_tank_z", 99999999999999.9); - index = GetSurvivorIndex(i); - - if (index != 0 && IsValidEntity(index)) { - GetClientAbsOrigin(index, TempSurvivorLocation); - - if (DEBUG_BS || IsDebugEnabled()) { - LogMessage("[%s] Survivor %d Location: %f, %f, %f", BS_MODULE_NAME, i, TempSurvivorLocation[0], TempSurvivorLocation[1], TempSurvivorLocation[2]); - } - - if (FloatAbs(TempSurvivorLocation[2] - TankLocation[2]) > distance) { - GetMapValueVector("tank_warpto", WarpToLocation); - - if (!GetVectorLength(WarpToLocation, true)) { - LogMessage("[%s] tank_warpto missing from mapinfo.txt", BS_MODULE_NAME); - return; - } - - TeleportEntity(iTankClient, WarpToLocation, NULL_VECTOR, NULL_VECTOR); - } - } - } + int index = 0; + float distance = 99999999999999.9; + float WarpToLocation[3], TankLocation[3], TempSurvivorLocation[3]; + GetClientAbsOrigin(iTankClient, TankLocation); + + if (DEBUG_BS || IsDebugEnabled()) { + LogMessage("[%s] tank z spawn check... Map: %s, Tank Location: %f, %f, %f", BS_MODULE_NAME, BS_sMap, TankLocation[0], TankLocation[1], TankLocation[2]); + } + + for (int i = 0; i < NUM_OF_SURVIVORS; i++) { + distance = GetMapValueFloat("max_tank_z", 99999999999999.9); + index = GetSurvivorIndex(i); + + if (index != 0 && IsValidEntity(index)) { + GetClientAbsOrigin(index, TempSurvivorLocation); + + if (DEBUG_BS || IsDebugEnabled()) { + LogMessage("[%s] Survivor %d Location: %f, %f, %f", BS_MODULE_NAME, i, TempSurvivorLocation[0], TempSurvivorLocation[1], TempSurvivorLocation[2]); + } + + if (FloatAbs(TempSurvivorLocation[2] - TankLocation[2]) > distance) { + GetMapValueVector("tank_warpto", WarpToLocation); + + if (!GetVectorLength(WarpToLocation, true)) { + LogMessage("[%s] tank_warpto missing from mapinfo.txt", BS_MODULE_NAME); + return; + } + + TeleportEntity(iTankClient, WarpToLocation, NULL_VECTOR, NULL_VECTOR); + } + } + } } diff --git a/addons/sourcemod/scripting/confoglcompmod/BotKick.sp b/addons/sourcemod/scripting/confoglcompmod/BotKick.sp index a8dd0ff92..f86e13dad 100644 --- a/addons/sourcemod/scripting/confoglcompmod/BotKick.sp +++ b/addons/sourcemod/scripting/confoglcompmod/BotKick.sp @@ -1,115 +1,115 @@ #if defined __bot_kick_included - #endinput + #endinput #endif #define __bot_kick_included -#define BK_MODULE_NAME "BotKick" +#define BK_MODULE_NAME "BotKick" -#define CHECKALLOWEDTIME 0.1 -#define BOTREPLACEVALIDTIME 0.2 +#define CHECKALLOWEDTIME 0.1 +#define BOTREPLACEVALIDTIME 0.2 static const char InfectedNames[][] = { - "smoker", - "boomer", - "hunter", - "spitter", - "jockey", - "charger" + "smoker", + "boomer", + "hunter", + "spitter", + "jockey", + "charger" }; static int - BK_iEnable = 0, - BK_lastvalidbot = -1; + BK_iEnable = 0, + BK_lastvalidbot = -1; static ConVar - BK_hEnable = null; + BK_hEnable = null; void BK_OnModuleStart() { - BK_hEnable = CreateConVarEx( \ - "blockinfectedbots", \ - "1", \ - "Blocks infected bots from joining the game, minus when a tank spawns (1 allows bots from tank spawns, 2 removes all infected bots)", \ - _, true, 0.0, true, 2.0 \ - ); + BK_hEnable = CreateConVarEx( \ + "blockinfectedbots", \ + "1", \ + "Blocks infected bots from joining the game, minus when a tank spawns (1 allows bots from tank spawns, 2 removes all infected bots)", \ + _, true, 0.0, true, 2.0 \ + ); - BK_iEnable = BK_hEnable.IntValue; - BK_hEnable.AddChangeHook(BK_ConVarChange); + BK_iEnable = BK_hEnable.IntValue; + BK_hEnable.AddChangeHook(BK_ConVarChange); - HookEvent("player_bot_replace", BK_PlayerBotReplace); + HookEvent("player_bot_replace", BK_PlayerBotReplace); } public void BK_ConVarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - BK_iEnable = BK_hEnable.IntValue; + BK_iEnable = BK_hEnable.IntValue; } bool BK_OnClientConnect(int iClient) { - if (BK_iEnable == 0 || !IsPluginEnabled() || !IsFakeClient(iClient)) { // If the BK_iEnable is 0, we don't do anything - return true; - } + if (BK_iEnable == 0 || !IsPluginEnabled() || !IsFakeClient(iClient)) { // If the BK_iEnable is 0, we don't do anything + return true; + } - // If the client doesn't have a bot infected's name, let it in - if (IsInvalidInfected(iClient)) { - return true; - } + // If the client doesn't have a bot infected's name, let it in + if (IsInvalidInfected(iClient)) { + return true; + } - if (BK_iEnable == 1 && GT_IsTankInPlay()) { // Bots only allowed to try to connect when there's a tank in play. - // Check this bot in CHECKALLOWEDTIME seconds to see if he's supposed to be allowed. - CreateTimer(CHECKALLOWEDTIME, BK_CheckInfBotReplace_Timer, iClient, TIMER_FLAG_NO_MAPCHANGE); - //BK_bAllowBot = false; - return true; - } + if (BK_iEnable == 1 && GT_IsTankInPlay()) { // Bots only allowed to try to connect when there's a tank in play. + // Check this bot in CHECKALLOWEDTIME seconds to see if he's supposed to be allowed. + CreateTimer(CHECKALLOWEDTIME, BK_CheckInfBotReplace_Timer, iClient, TIMER_FLAG_NO_MAPCHANGE); + //BK_bAllowBot = false; + return true; + } - KickClient(iClient, "[Confogl] Kicking infected bot..."); // If all else fails, bots arent allowed and must be kicked + KickClient(iClient, "[Confogl] Kicking infected bot..."); // If all else fails, bots arent allowed and must be kicked - return false; + return false; } public Action BK_CheckInfBotReplace_Timer(Handle hTimer, any iClient) { - if (iClient != BK_lastvalidbot && IsClientInGame(iClient) && IsFakeClient(iClient)) { - KickClient(iClient, "[Confogl] Kicking late infected bot..."); - } else { - BK_lastvalidbot = -1; - } + if (iClient != BK_lastvalidbot && IsClientInGame(iClient) && IsFakeClient(iClient)) { + KickClient(iClient, "[Confogl] Kicking late infected bot..."); + } else { + BK_lastvalidbot = -1; + } - return Plugin_Stop; + return Plugin_Stop; } public void BK_PlayerBotReplace(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!GT_IsTankInPlay()) { - return; - } + if (!GT_IsTankInPlay()) { + return; + } - int iClient = GetClientOfUserId(hEvent.GetInt("player")); + int iClient = GetClientOfUserId(hEvent.GetInt("player")); - if (iClient > 0 && IsClientInGame(iClient) && GetClientTeam(iClient) == L4D2Team_Infected) { - BK_lastvalidbot = GetClientOfUserId(hEvent.GetInt("bot")); - CreateTimer(BOTREPLACEVALIDTIME, BK_CancelValidBot_Timer, _, TIMER_FLAG_NO_MAPCHANGE); - } + if (iClient > 0 && IsClientInGame(iClient) && GetClientTeam(iClient) == L4D2Team_Infected) { + BK_lastvalidbot = GetClientOfUserId(hEvent.GetInt("bot")); + CreateTimer(BOTREPLACEVALIDTIME, BK_CancelValidBot_Timer, _, TIMER_FLAG_NO_MAPCHANGE); + } } public Action BK_CancelValidBot_Timer(Handle hTimer) { - BK_lastvalidbot = -1; + BK_lastvalidbot = -1; - return Plugin_Stop; + return Plugin_Stop; } static bool IsInvalidInfected(int iClient) { - char sBotName[11]; - GetClientName(iClient, sBotName, sizeof(sBotName)); + char sBotName[11]; + GetClientName(iClient, sBotName, sizeof(sBotName)); - for (int i = 0; i < sizeof(InfectedNames); i++) { - if (StrContains(sBotName, InfectedNames[i], false) != -1) { - return false; - } - } + for (int i = 0; i < sizeof(InfectedNames); i++) { + if (StrContains(sBotName, InfectedNames[i], false) != -1) { + return false; + } + } - return true; + return true; } diff --git a/addons/sourcemod/scripting/confoglcompmod/ClientSettings.sp b/addons/sourcemod/scripting/confoglcompmod/ClientSettings.sp index a1685aebb..76d1e2da9 100644 --- a/addons/sourcemod/scripting/confoglcompmod/ClientSettings.sp +++ b/addons/sourcemod/scripting/confoglcompmod/ClientSettings.sp @@ -1,457 +1,457 @@ #if defined __client_settings_include - #endinput + #endinput #endif #define __client_settings_include -#define CLS_MODULE_NAME "ClientSettings" +#define CLS_MODULE_NAME "ClientSettings" -#define CLS_CVAR_MAXLEN 64 -#define CLIENT_CHECK_INTERVAL 5.0 +#define CLS_CVAR_MAXLEN 64 +#define CLIENT_CHECK_INTERVAL 5.0 enum /*CLSAction*/ { - CLSA_Kick = 0, - CLSA_Log + CLSA_Kick = 0, + CLSA_Log }; #if SOURCEMOD_V_MINOR > 9 enum struct CLSEntry { - bool CLSE_hasMin; - float CLSE_min; - bool CLSE_hasMax; - float CLSE_max; - int CLSE_action; - char CLSE_cvar[CLS_CVAR_MAXLEN]; + bool CLSE_hasMin; + float CLSE_min; + bool CLSE_hasMax; + float CLSE_max; + int CLSE_action; + char CLSE_cvar[CLS_CVAR_MAXLEN]; } #else enum CLSEntry { - bool:CLSE_hasMin, - Float:CLSE_min, - bool:CLSE_hasMax, - Float:CLSE_max, - CLSE_action, - String:CLSE_cvar[CLS_CVAR_MAXLEN] + bool:CLSE_hasMin, + Float:CLSE_min, + bool:CLSE_hasMax, + Float:CLSE_max, + CLSE_action, + String:CLSE_cvar[CLS_CVAR_MAXLEN] }; #endif static ArrayList - ClientSettingsArray = null; + ClientSettingsArray = null; static Handle - ClientSettingsCheckTimer = null; + ClientSettingsCheckTimer = null; void CLS_OnModuleStart() { #if SOURCEMOD_V_MINOR > 9 - CLSEntry clsetting; + CLSEntry clsetting; #else - CLSEntry clsetting[CLSEntry]; + CLSEntry clsetting[CLSEntry]; #endif - ClientSettingsArray = new ArrayList(sizeof(clsetting)); + ClientSettingsArray = new ArrayList(sizeof(clsetting)); - RegConsoleCmd("confogl_clientsettings", _ClientSettings_Cmd, "List Client settings enforced by confogl"); + RegConsoleCmd("confogl_clientsettings", _ClientSettings_Cmd, "List Client settings enforced by confogl"); - /* Using Server Cmd instead of admin because these shouldn't really be changed on the fly */ - RegServerCmd("confogl_trackclientcvar", _TrackClientCvar_Cmd, "Add a Client CVar to be tracked and enforced by confogl"); - RegServerCmd("confogl_resetclientcvars", _ResetTracking_Cmd, "Remove all tracked client cvars. Cannot be called during matchmode"); - RegServerCmd("confogl_startclientchecking", _StartClientChecking_Cmd, "Start checking and enforcing client cvars tracked by this plugin"); + /* Using Server Cmd instead of admin because these shouldn't really be changed on the fly */ + RegServerCmd("confogl_trackclientcvar", _TrackClientCvar_Cmd, "Add a Client CVar to be tracked and enforced by confogl"); + RegServerCmd("confogl_resetclientcvars", _ResetTracking_Cmd, "Remove all tracked client cvars. Cannot be called during matchmode"); + RegServerCmd("confogl_startclientchecking", _StartClientChecking_Cmd, "Start checking and enforcing client cvars tracked by this plugin"); } static void ClearAllSettings() { - ClientSettingsArray.Clear(); + ClientSettingsArray.Clear(); } /*#if SOURCEMOD_V_MINOR > 9 static void ClearCLSEntry(CLSEntry entry) { - entry.CLSE_hasMin = false; - entry.CLSE_min = 0.0; - entry.CLSE_hasMax = false; - entry.CLSE_max = 0.0; - entry.CLSE_cvar[0] = 0; + entry.CLSE_hasMin = false; + entry.CLSE_min = 0.0; + entry.CLSE_hasMax = false; + entry.CLSE_max = 0.0; + entry.CLSE_cvar[0] = 0; } #else static void ClearCLSEntry(CLSEntry entry[CLSEntry]) { - entry[CLSE_hasMin] = false; - entry[CLSE_min] = 0.0; - entry[CLSE_hasMax] = false; - entry[CLSE_max] = 0.0; - entry[CLSE_cvar][0] = 0; + entry[CLSE_hasMin] = false; + entry[CLSE_min] = 0.0; + entry[CLSE_hasMax] = false; + entry[CLSE_max] = 0.0; + entry[CLSE_cvar][0] = 0; } #endif*/ public Action _CheckClientSettings_Timer(Handle hTimer) { - if (!IsPluginEnabled()) { - if (IsDebugEnabled()) { - LogMessage("[%s] Stopping client settings tracking", CLS_MODULE_NAME); - } + if (!IsPluginEnabled()) { + if (IsDebugEnabled()) { + LogMessage("[%s] Stopping client settings tracking", CLS_MODULE_NAME); + } - ClientSettingsCheckTimer = null; - return Plugin_Stop; - } + ClientSettingsCheckTimer = null; + return Plugin_Stop; + } - EnforceAllCliSettings(); - return Plugin_Continue; + EnforceAllCliSettings(); + return Plugin_Continue; } static void EnforceAllCliSettings() { - for (int i = 1; i <= MaxClients; i++) { - if (IsClientInGame(i) && !IsFakeClient(i)) { - EnforceCliSettings(i); - } - } + for (int i = 1; i <= MaxClients; i++) { + if (IsClientInGame(i) && !IsFakeClient(i)) { + EnforceCliSettings(i); + } + } } static void EnforceCliSettings(int client) { - int iSize = ClientSettingsArray.Length; + int iSize = ClientSettingsArray.Length; #if SOURCEMOD_V_MINOR > 9 - CLSEntry clsetting; - for (int i = 0; i < iSize; i++) { - ClientSettingsArray.GetArray(i, clsetting, sizeof(clsetting)); + CLSEntry clsetting; + for (int i = 0; i < iSize; i++) { + ClientSettingsArray.GetArray(i, clsetting, sizeof(clsetting)); - QueryClientConVar(client, clsetting.CLSE_cvar, _EnforceCliSettings_QueryReply, i); - } + QueryClientConVar(client, clsetting.CLSE_cvar, _EnforceCliSettings_QueryReply, i); + } #else - CLSEntry clsetting[CLSEntry]; - for (int i = 0; i < iSize; i++) { - ClientSettingsArray.GetArray(i, clsetting[0], sizeof(clsetting)); + CLSEntry clsetting[CLSEntry]; + for (int i = 0; i < iSize; i++) { + ClientSettingsArray.GetArray(i, clsetting[0], sizeof(clsetting)); - QueryClientConVar(client, clsetting[CLSE_cvar], _EnforceCliSettings_QueryReply, i); - } + QueryClientConVar(client, clsetting[CLSE_cvar], _EnforceCliSettings_QueryReply, i); + } #endif } public void _EnforceCliSettings_QueryReply(QueryCookie cookie, int client, ConVarQueryResult result, \ - const char[] cvarName, const char[] cvarValue, any value) + const char[] cvarName, const char[] cvarValue, any value) { - if (!IsClientConnected(client) || !IsClientInGame(client) || IsClientInKickQueue(client)) { - // Client disconnected or got kicked already - return; - } + if (!IsClientConnected(client) || !IsClientInGame(client) || IsClientInKickQueue(client)) { + // Client disconnected or got kicked already + return; + } - if (result) { - LogMessage("[%s] Couldn't retrieve cvar %s from %L, kicked from server", CLS_MODULE_NAME, cvarName, client); - KickClient(client, "CVar '%s' protected or missing! Hax?", cvarName); - return; - } + if (result) { + LogMessage("[%s] Couldn't retrieve cvar %s from %L, kicked from server", CLS_MODULE_NAME, cvarName, client); + KickClient(client, "CVar '%s' protected or missing! Hax?", cvarName); + return; + } - float fCvarVal = StringToFloat(cvarValue); - int clsetting_index = value; + float fCvarVal = StringToFloat(cvarValue); + int clsetting_index = value; #if SOURCEMOD_V_MINOR > 9 - CLSEntry clsetting; - ClientSettingsArray.GetArray(clsetting_index, clsetting, sizeof(clsetting)); - - if ((clsetting.CLSE_hasMin && fCvarVal < clsetting.CLSE_min) - || (clsetting.CLSE_hasMax && fCvarVal > clsetting.CLSE_max) - ) { - switch (clsetting.CLSE_action) { - case CLSA_Kick: { - LogMessage("[%s] Kicking %L for bad %s value (%f). Min: %d %f Max: %d %f", \ - CLS_MODULE_NAME, client, cvarName, fCvarVal, clsetting.CLSE_hasMin, \ - clsetting.CLSE_min, clsetting.CLSE_hasMax, clsetting.CLSE_max); - - /*PrintToChatAll("\x01[\x05Confogl\x01] Kicking \x04%L\x01 for having an illegal value for '\x04%s\x01' (\x04%f\x01) !!!", \ - client, cvarName, fCvarVal);*/ - CPrintToChatAll("{blue}[{default}Confogl{blue}] {olive}%L{default} was kicked for having an illegal value for '{green}%s{default}' {blue}({default}%f{blue})", \ - client, cvarName, fCvarVal); - - char kickMessage[256] = "Illegal Client Value for "; - Format(kickMessage, sizeof(kickMessage), "%s%s (%.2f)", kickMessage, cvarName, fCvarVal); - - if (clsetting.CLSE_hasMin) { - Format(kickMessage, sizeof(kickMessage), "%s, Min %.2f", kickMessage, clsetting.CLSE_min); - } - - if (clsetting.CLSE_hasMax) { - Format(kickMessage, sizeof(kickMessage), "%s, Max %.2f", kickMessage, clsetting.CLSE_max); - } - - KickClient(client, "%s", kickMessage); - } - case CLSA_Log: { - LogMessage("[%s] Client %L has a bad %s value (%f). Min: %d %f Max: %d %f", \ - CLS_MODULE_NAME, client, cvarName, fCvarVal, clsetting.CLSE_hasMin, \ - clsetting.CLSE_min, clsetting.CLSE_hasMax, clsetting.CLSE_max); - } - } - } + CLSEntry clsetting; + ClientSettingsArray.GetArray(clsetting_index, clsetting, sizeof(clsetting)); + + if ((clsetting.CLSE_hasMin && fCvarVal < clsetting.CLSE_min) + || (clsetting.CLSE_hasMax && fCvarVal > clsetting.CLSE_max) + ) { + switch (clsetting.CLSE_action) { + case CLSA_Kick: { + LogMessage("[%s] Kicking %L for bad %s value (%f). Min: %d %f Max: %d %f", \ + CLS_MODULE_NAME, client, cvarName, fCvarVal, clsetting.CLSE_hasMin, \ + clsetting.CLSE_min, clsetting.CLSE_hasMax, clsetting.CLSE_max); + + /*PrintToChatAll("\x01[\x05Confogl\x01] Kicking \x04%L\x01 for having an illegal value for '\x04%s\x01' (\x04%f\x01) !!!", \ + client, cvarName, fCvarVal);*/ + CPrintToChatAll("{blue}[{default}Confogl{blue}] {olive}%L{default} was kicked for having an illegal value for '{green}%s{default}' {blue}({default}%f{blue})", \ + client, cvarName, fCvarVal); + + char kickMessage[256] = "Illegal Client Value for "; + Format(kickMessage, sizeof(kickMessage), "%s%s (%.2f)", kickMessage, cvarName, fCvarVal); + + if (clsetting.CLSE_hasMin) { + Format(kickMessage, sizeof(kickMessage), "%s, Min %.2f", kickMessage, clsetting.CLSE_min); + } + + if (clsetting.CLSE_hasMax) { + Format(kickMessage, sizeof(kickMessage), "%s, Max %.2f", kickMessage, clsetting.CLSE_max); + } + + KickClient(client, "%s", kickMessage); + } + case CLSA_Log: { + LogMessage("[%s] Client %L has a bad %s value (%f). Min: %d %f Max: %d %f", \ + CLS_MODULE_NAME, client, cvarName, fCvarVal, clsetting.CLSE_hasMin, \ + clsetting.CLSE_min, clsetting.CLSE_hasMax, clsetting.CLSE_max); + } + } + } #else - CLSEntry clsetting[CLSEntry]; - ClientSettingsArray.GetArray(clsetting_index, clsetting[0], sizeof(clsetting)); - - if ((clsetting[CLSE_hasMin] && fCvarVal < clsetting[CLSE_min]) - || (clsetting[CLSE_hasMax] && fCvarVal > clsetting[CLSE_max]) - ) { - switch (clsetting[CLSE_action]) { - case CLSA_Kick: { - LogMessage("[%s] Kicking %L for bad %s value (%f). Min: %d %f Max: %d %f", \ - CLS_MODULE_NAME, client, cvarName, fCvarVal, clsetting[CLSE_hasMin], \ - clsetting[CLSE_min], clsetting[CLSE_hasMax], clsetting[CLSE_max]); - - /*PrintToChatAll("\x01[\x05Confogl\x01] Kicking \x04%L\x01 for having an illegal value for '\x04%s\x01' (\x04%f\x01) !!!", \ - client, cvarName, fCvarVal);*/ - CPrintToChatAll("{blue}[{default}Confogl{blue}] {olive}%L{default} was kicked for having an illegal value for '{green}%s{default}' {blue}({default}%f{blue})", \ - client, cvarName, fCvarVal); - - char kickMessage[256] = "Illegal Client Value for "; - Format(kickMessage, sizeof(kickMessage), "%s%s (%.2f)", kickMessage, cvarName, fCvarVal); - - if (clsetting[CLSE_hasMin]) { - Format(kickMessage, sizeof(kickMessage), "%s, Min %.2f", kickMessage, clsetting[CLSE_min]); - } - - if (clsetting[CLSE_hasMax]) { - Format(kickMessage, sizeof(kickMessage), "%s, Max %.2f", kickMessage, clsetting[CLSE_max]); - } - - KickClient(client, "%s", kickMessage); - } - case CLSA_Log: { - LogMessage("[%s] Client %L has a bad %s value (%f). Min: %d %f Max: %d %f", \ - CLS_MODULE_NAME, client, cvarName, fCvarVal, clsetting[CLSE_hasMin], \ - clsetting[CLSE_min], clsetting[CLSE_hasMax], clsetting[CLSE_max]); - } - } - } + CLSEntry clsetting[CLSEntry]; + ClientSettingsArray.GetArray(clsetting_index, clsetting[0], sizeof(clsetting)); + + if ((clsetting[CLSE_hasMin] && fCvarVal < clsetting[CLSE_min]) + || (clsetting[CLSE_hasMax] && fCvarVal > clsetting[CLSE_max]) + ) { + switch (clsetting[CLSE_action]) { + case CLSA_Kick: { + LogMessage("[%s] Kicking %L for bad %s value (%f). Min: %d %f Max: %d %f", \ + CLS_MODULE_NAME, client, cvarName, fCvarVal, clsetting[CLSE_hasMin], \ + clsetting[CLSE_min], clsetting[CLSE_hasMax], clsetting[CLSE_max]); + + /*PrintToChatAll("\x01[\x05Confogl\x01] Kicking \x04%L\x01 for having an illegal value for '\x04%s\x01' (\x04%f\x01) !!!", \ + client, cvarName, fCvarVal);*/ + CPrintToChatAll("{blue}[{default}Confogl{blue}] {olive}%L{default} was kicked for having an illegal value for '{green}%s{default}' {blue}({default}%f{blue})", \ + client, cvarName, fCvarVal); + + char kickMessage[256] = "Illegal Client Value for "; + Format(kickMessage, sizeof(kickMessage), "%s%s (%.2f)", kickMessage, cvarName, fCvarVal); + + if (clsetting[CLSE_hasMin]) { + Format(kickMessage, sizeof(kickMessage), "%s, Min %.2f", kickMessage, clsetting[CLSE_min]); + } + + if (clsetting[CLSE_hasMax]) { + Format(kickMessage, sizeof(kickMessage), "%s, Max %.2f", kickMessage, clsetting[CLSE_max]); + } + + KickClient(client, "%s", kickMessage); + } + case CLSA_Log: { + LogMessage("[%s] Client %L has a bad %s value (%f). Min: %d %f Max: %d %f", \ + CLS_MODULE_NAME, client, cvarName, fCvarVal, clsetting[CLSE_hasMin], \ + clsetting[CLSE_min], clsetting[CLSE_hasMax], clsetting[CLSE_max]); + } + } + } #endif } public Action _ClientSettings_Cmd(int client, int args) { - int iSize = ClientSettingsArray.Length; - ReplyToCommand(client, "[Confogl] Tracked Client CVars (Total %d)", iSize); + int iSize = ClientSettingsArray.Length; + ReplyToCommand(client, "[Confogl] Tracked Client CVars (Total %d)", iSize); #if SOURCEMOD_V_MINOR > 9 - CLSEntry clsetting; + CLSEntry clsetting; #else - CLSEntry clsetting[CLSEntry]; + CLSEntry clsetting[CLSEntry]; #endif - char message[256], shortbuf[64]; - for (int i = 0; i < iSize; i++) { - #if SOURCEMOD_V_MINOR > 9 - ClientSettingsArray.GetArray(i, clsetting, sizeof(clsetting)); - Format(message, sizeof(message), "[Confogl] Client CVar: %s ", clsetting.CLSE_cvar); - - if (clsetting.CLSE_hasMin) { - Format(shortbuf, sizeof(shortbuf), "Min: %f ", clsetting.CLSE_min); - StrCat(message, sizeof(message), shortbuf); - } - - if (clsetting.CLSE_hasMax) { - Format(shortbuf, sizeof(shortbuf), "Max: %f ", clsetting.CLSE_max); - StrCat(message, sizeof(message), shortbuf); - } - - switch (clsetting.CLSE_action) { - case CLSA_Kick: { - StrCat(message, sizeof(message), "Action: Kick"); - } - case CLSA_Log: { - StrCat(message, sizeof(message), "Action: Log"); - } - } - #else - ClientSettingsArray.GetArray(i, clsetting[0], sizeof(clsetting)); - Format(message, sizeof(message), "[Confogl] Client CVar: %s ", clsetting[CLSE_cvar]); - - if (clsetting[CLSE_hasMin]) { - Format(shortbuf, sizeof(shortbuf), "Min: %f ", clsetting[CLSE_min]); - StrCat(message, sizeof(message), shortbuf); - } - - if (clsetting[CLSE_hasMax]) { - Format(shortbuf, sizeof(shortbuf), "Max: %f ", clsetting[CLSE_max]); - StrCat(message, sizeof(message), shortbuf); - } - - switch (clsetting[CLSE_action]) { - case CLSA_Kick: { - StrCat(message, sizeof(message), "Action: Kick"); - } - case CLSA_Log: { - StrCat(message, sizeof(message), "Action: Log"); - } - } - #endif - - ReplyToCommand(client, message); - } - - return Plugin_Handled; + char message[256], shortbuf[64]; + for (int i = 0; i < iSize; i++) { + #if SOURCEMOD_V_MINOR > 9 + ClientSettingsArray.GetArray(i, clsetting, sizeof(clsetting)); + Format(message, sizeof(message), "[Confogl] Client CVar: %s ", clsetting.CLSE_cvar); + + if (clsetting.CLSE_hasMin) { + Format(shortbuf, sizeof(shortbuf), "Min: %f ", clsetting.CLSE_min); + StrCat(message, sizeof(message), shortbuf); + } + + if (clsetting.CLSE_hasMax) { + Format(shortbuf, sizeof(shortbuf), "Max: %f ", clsetting.CLSE_max); + StrCat(message, sizeof(message), shortbuf); + } + + switch (clsetting.CLSE_action) { + case CLSA_Kick: { + StrCat(message, sizeof(message), "Action: Kick"); + } + case CLSA_Log: { + StrCat(message, sizeof(message), "Action: Log"); + } + } + #else + ClientSettingsArray.GetArray(i, clsetting[0], sizeof(clsetting)); + Format(message, sizeof(message), "[Confogl] Client CVar: %s ", clsetting[CLSE_cvar]); + + if (clsetting[CLSE_hasMin]) { + Format(shortbuf, sizeof(shortbuf), "Min: %f ", clsetting[CLSE_min]); + StrCat(message, sizeof(message), shortbuf); + } + + if (clsetting[CLSE_hasMax]) { + Format(shortbuf, sizeof(shortbuf), "Max: %f ", clsetting[CLSE_max]); + StrCat(message, sizeof(message), shortbuf); + } + + switch (clsetting[CLSE_action]) { + case CLSA_Kick: { + StrCat(message, sizeof(message), "Action: Kick"); + } + case CLSA_Log: { + StrCat(message, sizeof(message), "Action: Log"); + } + } + #endif + + ReplyToCommand(client, message); + } + + return Plugin_Handled; } public Action _TrackClientCvar_Cmd(int args) { - if (args < 3 || args == 4) { - PrintToServer("Usage: confogl_trackclientcvar [ []]"); + if (args < 3 || args == 4) { + PrintToServer("Usage: confogl_trackclientcvar [ []]"); - if (IsDebugEnabled()) { - char cmdbuf[128]; - GetCmdArgString(cmdbuf, sizeof(cmdbuf)); - Debug_LogError(CLS_MODULE_NAME, "Invalid track client cvar: %s", cmdbuf); - } + if (IsDebugEnabled()) { + char cmdbuf[128]; + GetCmdArgString(cmdbuf, sizeof(cmdbuf)); + Debug_LogError(CLS_MODULE_NAME, "Invalid track client cvar: %s", cmdbuf); + } - return Plugin_Handled; - } + return Plugin_Handled; + } - char sBuffer[CLS_CVAR_MAXLEN], cvar[CLS_CVAR_MAXLEN]; - bool hasMax; - float max; - int action = CLSA_Kick; + char sBuffer[CLS_CVAR_MAXLEN], cvar[CLS_CVAR_MAXLEN]; + bool hasMax; + float max; + int action = CLSA_Kick; - GetCmdArg(1, cvar, sizeof(cvar)); + GetCmdArg(1, cvar, sizeof(cvar)); - if (!strlen(cvar)) { - PrintToServer("Unreadable cvar"); + if (!strlen(cvar)) { + PrintToServer("Unreadable cvar"); - if (IsDebugEnabled()) { - char cmdbuf[128]; - GetCmdArgString(cmdbuf, sizeof(cmdbuf)); - Debug_LogError(CLS_MODULE_NAME, "Invalid track client cvar: %s", cmdbuf); - } + if (IsDebugEnabled()) { + char cmdbuf[128]; + GetCmdArgString(cmdbuf, sizeof(cmdbuf)); + Debug_LogError(CLS_MODULE_NAME, "Invalid track client cvar: %s", cmdbuf); + } - return Plugin_Handled; - } + return Plugin_Handled; + } - GetCmdArg(2, sBuffer, sizeof(sBuffer)); - bool hasMin = view_as(StringToInt(sBuffer)); + GetCmdArg(2, sBuffer, sizeof(sBuffer)); + bool hasMin = view_as(StringToInt(sBuffer)); - GetCmdArg(3, sBuffer, sizeof(sBuffer)); - float min = StringToFloat(sBuffer); + GetCmdArg(3, sBuffer, sizeof(sBuffer)); + float min = StringToFloat(sBuffer); - if (args >= 5) { - GetCmdArg(4, sBuffer, sizeof(sBuffer)); - hasMax = view_as(StringToInt(sBuffer)); + if (args >= 5) { + GetCmdArg(4, sBuffer, sizeof(sBuffer)); + hasMax = view_as(StringToInt(sBuffer)); - GetCmdArg(5, sBuffer, sizeof(sBuffer)); - max = StringToFloat(sBuffer); - } + GetCmdArg(5, sBuffer, sizeof(sBuffer)); + max = StringToFloat(sBuffer); + } - if (args >= 6) { - GetCmdArg(6, sBuffer, sizeof(sBuffer)); - action = StringToInt(sBuffer); - } + if (args >= 6) { + GetCmdArg(6, sBuffer, sizeof(sBuffer)); + action = StringToInt(sBuffer); + } - _AddClientCvar(cvar, hasMin, min, hasMax, max, action); + _AddClientCvar(cvar, hasMin, min, hasMax, max, action); - return Plugin_Handled; + return Plugin_Handled; } public Action _ResetTracking_Cmd(int args) { - if (ClientSettingsCheckTimer != null) { - PrintToServer("Can't reset tracking in the middle of a match"); - return Plugin_Handled; - } + if (ClientSettingsCheckTimer != null) { + PrintToServer("Can't reset tracking in the middle of a match"); + return Plugin_Handled; + } - ClearAllSettings(); - PrintToServer("Client CVar Tracking Information Reset!"); + ClearAllSettings(); + PrintToServer("Client CVar Tracking Information Reset!"); - return Plugin_Handled; + return Plugin_Handled; } public Action _StartClientChecking_Cmd(int args) { - _StartTracking(); + _StartTracking(); - return Plugin_Handled; + return Plugin_Handled; } static void _StartTracking() { - if (IsPluginEnabled() && ClientSettingsCheckTimer == null) { - if (IsDebugEnabled()) { - LogMessage("[%s] Starting repeating check timer", CLS_MODULE_NAME); - } - - ClientSettingsCheckTimer = CreateTimer(CLIENT_CHECK_INTERVAL, _CheckClientSettings_Timer, _, TIMER_REPEAT); - } else { - PrintToServer("Can't start plugin tracking or tracking already started"); - } + if (IsPluginEnabled() && ClientSettingsCheckTimer == null) { + if (IsDebugEnabled()) { + LogMessage("[%s] Starting repeating check timer", CLS_MODULE_NAME); + } + + ClientSettingsCheckTimer = CreateTimer(CLIENT_CHECK_INTERVAL, _CheckClientSettings_Timer, _, TIMER_REPEAT); + } else { + PrintToServer("Can't start plugin tracking or tracking already started"); + } } static void _AddClientCvar(const char[] cvar, bool hasMin, float min, bool hasMax, float max, int action) { - if (ClientSettingsCheckTimer != null) { - PrintToServer("Can't track new cvars in the middle of a match"); + if (ClientSettingsCheckTimer != null) { + PrintToServer("Can't track new cvars in the middle of a match"); - if (IsDebugEnabled()) { - LogMessage("[%s] Attempt to track new cvar %s during a match!", CLS_MODULE_NAME, cvar); - } + if (IsDebugEnabled()) { + LogMessage("[%s] Attempt to track new cvar %s during a match!", CLS_MODULE_NAME, cvar); + } - return; - } + return; + } - if (!(hasMin || hasMax)) { - Debug_LogError(CLS_MODULE_NAME, "Client CVar %s specified without max or min", cvar); - return; - } + if (!(hasMin || hasMax)) { + Debug_LogError(CLS_MODULE_NAME, "Client CVar %s specified without max or min", cvar); + return; + } - if (hasMin && hasMax && max < min) { - Debug_LogError(CLS_MODULE_NAME, "Client CVar %s specified max < min (%f < %f)", cvar, max, min); - return; - } + if (hasMin && hasMax && max < min) { + Debug_LogError(CLS_MODULE_NAME, "Client CVar %s specified max < min (%f < %f)", cvar, max, min); + return; + } - if (strlen(cvar) >= CLS_CVAR_MAXLEN) { - Debug_LogError(CLS_MODULE_NAME, "CVar Specified (%s) is longer than max cvar length (%d)", cvar, CLS_CVAR_MAXLEN); - return; - } + if (strlen(cvar) >= CLS_CVAR_MAXLEN) { + Debug_LogError(CLS_MODULE_NAME, "CVar Specified (%s) is longer than max cvar length (%d)", cvar, CLS_CVAR_MAXLEN); + return; + } - int iSize = ClientSettingsArray.Length; + int iSize = ClientSettingsArray.Length; #if SOURCEMOD_V_MINOR > 9 - CLSEntry newEntry; - for (int i = 0; i < iSize; i++) { - ClientSettingsArray.GetArray(i, newEntry, sizeof(newEntry)); - if (strcmp(newEntry.CLSE_cvar, cvar, false) == 0) { - Debug_LogError(CLS_MODULE_NAME, "Attempt to track CVar %s, which is already being tracked.", cvar); - return; - } - } - - newEntry.CLSE_hasMin = hasMin; - newEntry.CLSE_min = min; - newEntry.CLSE_hasMax = hasMax; - newEntry.CLSE_max = max; - newEntry.CLSE_action = action; - strcopy(newEntry.CLSE_cvar, CLS_CVAR_MAXLEN, cvar); - - if (IsDebugEnabled()) { - LogMessage("[%s] Tracking Cvar %s Min %d %f Max %d %f Action %d", CLS_MODULE_NAME, cvar, hasMin, min, hasMax, max, action); - } - - ClientSettingsArray.PushArray(newEntry, sizeof(newEntry)); + CLSEntry newEntry; + for (int i = 0; i < iSize; i++) { + ClientSettingsArray.GetArray(i, newEntry, sizeof(newEntry)); + if (strcmp(newEntry.CLSE_cvar, cvar, false) == 0) { + Debug_LogError(CLS_MODULE_NAME, "Attempt to track CVar %s, which is already being tracked.", cvar); + return; + } + } + + newEntry.CLSE_hasMin = hasMin; + newEntry.CLSE_min = min; + newEntry.CLSE_hasMax = hasMax; + newEntry.CLSE_max = max; + newEntry.CLSE_action = action; + strcopy(newEntry.CLSE_cvar, CLS_CVAR_MAXLEN, cvar); + + if (IsDebugEnabled()) { + LogMessage("[%s] Tracking Cvar %s Min %d %f Max %d %f Action %d", CLS_MODULE_NAME, cvar, hasMin, min, hasMax, max, action); + } + + ClientSettingsArray.PushArray(newEntry, sizeof(newEntry)); #else - CLSEntry newEntry[CLSEntry]; - for (int i = 0; i < iSize; i++) { - ClientSettingsArray.GetArray(i, newEntry[0], sizeof(newEntry)); - if (strcmp(newEntry[CLSE_cvar], cvar, false) == 0) { - Debug_LogError(CLS_MODULE_NAME, "Attempt to track CVar %s, which is already being tracked.", cvar); - return; - } - } - - newEntry[CLSE_hasMin] = hasMin; - newEntry[CLSE_min] = min; - newEntry[CLSE_hasMax] = hasMax; - newEntry[CLSE_max] = max; - newEntry[CLSE_action] = action; - strcopy(newEntry[CLSE_cvar], CLS_CVAR_MAXLEN, cvar); - - if (IsDebugEnabled()) { - LogMessage("[%s] Tracking Cvar %s Min %d %f Max %d %f Action %d", CLS_MODULE_NAME, cvar, hasMin, min, hasMax, max, action); - } - - ClientSettingsArray.PushArray(newEntry[0], sizeof(newEntry)); + CLSEntry newEntry[CLSEntry]; + for (int i = 0; i < iSize; i++) { + ClientSettingsArray.GetArray(i, newEntry[0], sizeof(newEntry)); + if (strcmp(newEntry[CLSE_cvar], cvar, false) == 0) { + Debug_LogError(CLS_MODULE_NAME, "Attempt to track CVar %s, which is already being tracked.", cvar); + return; + } + } + + newEntry[CLSE_hasMin] = hasMin; + newEntry[CLSE_min] = min; + newEntry[CLSE_hasMax] = hasMax; + newEntry[CLSE_max] = max; + newEntry[CLSE_action] = action; + strcopy(newEntry[CLSE_cvar], CLS_CVAR_MAXLEN, cvar); + + if (IsDebugEnabled()) { + LogMessage("[%s] Tracking Cvar %s Min %d %f Max %d %f Action %d", CLS_MODULE_NAME, cvar, hasMin, min, hasMax, max, action); + } + + ClientSettingsArray.PushArray(newEntry[0], sizeof(newEntry)); #endif } diff --git a/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp b/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp index 55395df47..466854d9f 100644 --- a/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp +++ b/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp @@ -1,402 +1,402 @@ #if defined __cvar_settings_included - #endinput + #endinput #endif #define __cvar_settings_included -#define CVS_MODULE_NAME "CvarSettings" +#define CVS_MODULE_NAME "CvarSettings" -#define CVARS_DEBUG 0 -#define CVS_CVAR_MAXLEN 64 +#define CVARS_DEBUG 0 +#define CVS_CVAR_MAXLEN 64 #if SOURCEMOD_V_MINOR > 9 enum struct CVSEntry { - ConVar CVSE_cvar; - char CVSE_oldval[CVS_CVAR_MAXLEN]; - char CVSE_newval[CVS_CVAR_MAXLEN]; + ConVar CVSE_cvar; + char CVSE_oldval[CVS_CVAR_MAXLEN]; + char CVSE_newval[CVS_CVAR_MAXLEN]; } #else enum CVSEntry { - ConVar:CVSE_cvar, - String:CVSE_oldval[CVS_CVAR_MAXLEN], - String:CVSE_newval[CVS_CVAR_MAXLEN] + ConVar:CVSE_cvar, + String:CVSE_oldval[CVS_CVAR_MAXLEN], + String:CVSE_newval[CVS_CVAR_MAXLEN] }; #endif static bool - bTrackingStarted = false; + bTrackingStarted = false; static ArrayList - CvarSettingsArray = null; + CvarSettingsArray = null; void CVS_OnModuleStart() { #if SOURCEMOD_V_MINOR > 9 - CVSEntry cvsetting; + CVSEntry cvsetting; #else - CVSEntry cvsetting[CVSEntry]; + CVSEntry cvsetting[CVSEntry]; #endif - CvarSettingsArray = new ArrayList(sizeof(cvsetting)); + CvarSettingsArray = new ArrayList(sizeof(cvsetting)); - RegConsoleCmd("confogl_cvarsettings", CVS_CvarSettings_Cmd, "List all ConVars being enforced by Confogl"); - RegConsoleCmd("confogl_cvardiff", CVS_CvarDiff_Cmd, "List any ConVars that have been changed from their initialized values"); + RegConsoleCmd("confogl_cvarsettings", CVS_CvarSettings_Cmd, "List all ConVars being enforced by Confogl"); + RegConsoleCmd("confogl_cvardiff", CVS_CvarDiff_Cmd, "List any ConVars that have been changed from their initialized values"); - RegServerCmd("confogl_addcvar", CVS_AddCvar_Cmd, "Add a ConVar to be set by Confogl"); - RegServerCmd("confogl_setcvars", CVS_SetCvars_Cmd, "Starts enforcing ConVars that have been added."); - RegServerCmd("confogl_resetcvars", CVS_ResetCvars_Cmd, "Resets enforced ConVars. Cannot be used during a match!"); + RegServerCmd("confogl_addcvar", CVS_AddCvar_Cmd, "Add a ConVar to be set by Confogl"); + RegServerCmd("confogl_setcvars", CVS_SetCvars_Cmd, "Starts enforcing ConVars that have been added."); + RegServerCmd("confogl_resetcvars", CVS_ResetCvars_Cmd, "Resets enforced ConVars. Cannot be used during a match!"); } void CVS_OnModuleEnd() { - ClearAllSettings(); + ClearAllSettings(); } void CVS_OnConfigsExecuted() { - if (bTrackingStarted) { - SetEnforcedCvars(); - } + if (bTrackingStarted) { + SetEnforcedCvars(); + } } public Action CVS_SetCvars_Cmd(int args) { - if (!IsPluginEnabled()) { - return Plugin_Handled; - } + if (!IsPluginEnabled()) { + return Plugin_Handled; + } - if (bTrackingStarted) { - PrintToServer("Tracking has already been started"); - return Plugin_Handled; - } + if (bTrackingStarted) { + PrintToServer("Tracking has already been started"); + return Plugin_Handled; + } #if CVARS_DEBUG - LogMessage("[%s] No longer accepting new ConVars", CVS_MODULE_NAME); + LogMessage("[%s] No longer accepting new ConVars", CVS_MODULE_NAME); #endif - SetEnforcedCvars(); - bTrackingStarted = true; + SetEnforcedCvars(); + bTrackingStarted = true; - return Plugin_Handled; + return Plugin_Handled; } public Action CVS_AddCvar_Cmd(int args) { - if (args != 2) { - PrintToServer("Usage: confogl_addcvar "); + if (args != 2) { + PrintToServer("Usage: confogl_addcvar "); - if (IsDebugEnabled()) { - char cmdbuf[MAX_NAME_LENGTH]; - GetCmdArgString(cmdbuf, sizeof(cmdbuf)); - Debug_LogError(CVS_MODULE_NAME, "Invalid Cvar Add: %s", cmdbuf); - } + if (IsDebugEnabled()) { + char cmdbuf[MAX_NAME_LENGTH]; + GetCmdArgString(cmdbuf, sizeof(cmdbuf)); + Debug_LogError(CVS_MODULE_NAME, "Invalid Cvar Add: %s", cmdbuf); + } - return Plugin_Handled; - } + return Plugin_Handled; + } - char cvar[CVS_CVAR_MAXLEN], newval[CVS_CVAR_MAXLEN]; - GetCmdArg(1, cvar, sizeof(cvar)); - GetCmdArg(2, newval, sizeof(newval)); + char cvar[CVS_CVAR_MAXLEN], newval[CVS_CVAR_MAXLEN]; + GetCmdArg(1, cvar, sizeof(cvar)); + GetCmdArg(2, newval, sizeof(newval)); - AddCvar(cvar, newval); + AddCvar(cvar, newval); - return Plugin_Handled; + return Plugin_Handled; } public Action CVS_ResetCvars_Cmd(int args) { - if (IsPluginEnabled()) { - PrintToServer("Can't reset tracking in the middle of a match"); - return Plugin_Handled; - } + if (IsPluginEnabled()) { + PrintToServer("Can't reset tracking in the middle of a match"); + return Plugin_Handled; + } - ClearAllSettings(); - PrintToServer("Server CVar Tracking Information Reset!"); + ClearAllSettings(); + PrintToServer("Server CVar Tracking Information Reset!"); - return Plugin_Handled; + return Plugin_Handled; } public Action CVS_CvarSettings_Cmd(int client, int args) { - if (!IsPluginEnabled()) { - return Plugin_Handled; - } + if (!IsPluginEnabled()) { + return Plugin_Handled; + } - if (!bTrackingStarted) { - ReplyToCommand(client, "[Confogl] CVar tracking has not been started!! THIS SHOULD NOT OCCUR DURING A MATCH!"); - return Plugin_Handled; - } + if (!bTrackingStarted) { + ReplyToCommand(client, "[Confogl] CVar tracking has not been started!! THIS SHOULD NOT OCCUR DURING A MATCH!"); + return Plugin_Handled; + } - char buffer[CVS_CVAR_MAXLEN], name[CVS_CVAR_MAXLEN]; - int cvscount = CvarSettingsArray.Length; + char buffer[CVS_CVAR_MAXLEN], name[CVS_CVAR_MAXLEN]; + int cvscount = CvarSettingsArray.Length; - ReplyToCommand(client, "[Confogl] Enforced Server CVars (Total %d)", cvscount); + ReplyToCommand(client, "[Confogl] Enforced Server CVars (Total %d)", cvscount); - GetCmdArg(1, buffer, sizeof(buffer)); - int offset = StringToInt(buffer); + GetCmdArg(1, buffer, sizeof(buffer)); + int offset = StringToInt(buffer); - if (offset < 0 || offset > cvscount) { - return Plugin_Handled; - } + if (offset < 0 || offset > cvscount) { + return Plugin_Handled; + } - int temp = cvscount; - if ((offset + 20) < cvscount) { - temp = offset + 20; - } + int temp = cvscount; + if ((offset + 20) < cvscount) { + temp = offset + 20; + } #if SOURCEMOD_V_MINOR > 9 - CVSEntry cvsetting; + CVSEntry cvsetting; - for (int i = offset; i < temp && i < cvscount; i++) { - CvarSettingsArray.GetArray(i, cvsetting, sizeof(cvsetting)); + for (int i = offset; i < temp && i < cvscount; i++) { + CvarSettingsArray.GetArray(i, cvsetting, sizeof(cvsetting)); - (cvsetting.CVSE_cvar).GetString(buffer, sizeof(buffer)); - (cvsetting.CVSE_cvar).GetName(name, sizeof(name)); + (cvsetting.CVSE_cvar).GetString(buffer, sizeof(buffer)); + (cvsetting.CVSE_cvar).GetName(name, sizeof(name)); - ReplyToCommand(client, "[Confogl] Server CVar: %s, Desired Value: %s, Current Value: %s", name, cvsetting.CVSE_newval, buffer); - } + ReplyToCommand(client, "[Confogl] Server CVar: %s, Desired Value: %s, Current Value: %s", name, cvsetting.CVSE_newval, buffer); + } #else - CVSEntry cvsetting[CVSEntry]; + CVSEntry cvsetting[CVSEntry]; - for (int i = offset; i < temp && i < cvscount; i++) { - CvarSettingsArray.GetArray(i, cvsetting[0], sizeof(cvsetting)); + for (int i = offset; i < temp && i < cvscount; i++) { + CvarSettingsArray.GetArray(i, cvsetting[0], sizeof(cvsetting)); - cvsetting[CVSE_cvar].GetString(buffer, sizeof(buffer)); - cvsetting[CVSE_cvar].GetName(name, sizeof(name)); + cvsetting[CVSE_cvar].GetString(buffer, sizeof(buffer)); + cvsetting[CVSE_cvar].GetName(name, sizeof(name)); - ReplyToCommand(client, "[Confogl] Server CVar: %s, Desired Value: %s, Current Value: %s", name, cvsetting[CVSE_newval], buffer); - } + ReplyToCommand(client, "[Confogl] Server CVar: %s, Desired Value: %s, Current Value: %s", name, cvsetting[CVSE_newval], buffer); + } #endif - if ((offset + 20) < cvscount) { - ReplyToCommand(client, "[Confogl] To see more CVars, use confogl_cvarsettings %d", offset + 20); - } + if ((offset + 20) < cvscount) { + ReplyToCommand(client, "[Confogl] To see more CVars, use confogl_cvarsettings %d", offset + 20); + } - return Plugin_Handled; + return Plugin_Handled; } public Action CVS_CvarDiff_Cmd(int client, int args) { - if (!IsPluginEnabled()) { - return Plugin_Handled; - } + if (!IsPluginEnabled()) { + return Plugin_Handled; + } - if (!bTrackingStarted) { - ReplyToCommand(client, "[Confogl] CVar tracking has not been started!! THIS SHOULD NOT OCCUR DURING A MATCH!"); - return Plugin_Handled; - } + if (!bTrackingStarted) { + ReplyToCommand(client, "[Confogl] CVar tracking has not been started!! THIS SHOULD NOT OCCUR DURING A MATCH!"); + return Plugin_Handled; + } - char buffer[CVS_CVAR_MAXLEN], name[CVS_CVAR_MAXLEN]; - int cvscount = CvarSettingsArray.Length; + char buffer[CVS_CVAR_MAXLEN], name[CVS_CVAR_MAXLEN]; + int cvscount = CvarSettingsArray.Length; - GetCmdArg(1, buffer, sizeof(buffer)); - int offset = StringToInt(buffer); + GetCmdArg(1, buffer, sizeof(buffer)); + int offset = StringToInt(buffer); - if (offset > cvscount) { - return Plugin_Handled; - } + if (offset > cvscount) { + return Plugin_Handled; + } - int foundCvars = 0; + int foundCvars = 0; #if SOURCEMOD_V_MINOR > 9 - CVSEntry cvsetting; + CVSEntry cvsetting; - while (offset < cvscount && foundCvars < 20) { - CvarSettingsArray.GetArray(offset, cvsetting, sizeof(cvsetting)); + while (offset < cvscount && foundCvars < 20) { + CvarSettingsArray.GetArray(offset, cvsetting, sizeof(cvsetting)); - (cvsetting.CVSE_cvar).GetString(buffer, sizeof(buffer)); - (cvsetting.CVSE_cvar).GetName(name, sizeof(name)); + (cvsetting.CVSE_cvar).GetString(buffer, sizeof(buffer)); + (cvsetting.CVSE_cvar).GetName(name, sizeof(name)); - if (strcmp(cvsetting.CVSE_newval, buffer) != 0) { - ReplyToCommand(client, "[Confogl] Server CVar: %s, Desired Value: %s, Current Value: %s", name, cvsetting.CVSE_newval, buffer); - foundCvars++; - } + if (strcmp(cvsetting.CVSE_newval, buffer) != 0) { + ReplyToCommand(client, "[Confogl] Server CVar: %s, Desired Value: %s, Current Value: %s", name, cvsetting.CVSE_newval, buffer); + foundCvars++; + } - offset++; - } + offset++; + } #else - CVSEntry cvsetting[CVSEntry]; + CVSEntry cvsetting[CVSEntry]; - while (offset < cvscount && foundCvars < 20) { - CvarSettingsArray.GetArray(offset, cvsetting[0], sizeof(cvsetting)); + while (offset < cvscount && foundCvars < 20) { + CvarSettingsArray.GetArray(offset, cvsetting[0], sizeof(cvsetting)); - cvsetting[CVSE_cvar].GetString(buffer, sizeof(buffer)); - cvsetting[CVSE_cvar].GetName(name, sizeof(name)); + cvsetting[CVSE_cvar].GetString(buffer, sizeof(buffer)); + cvsetting[CVSE_cvar].GetName(name, sizeof(name)); - if (strcmp(cvsetting[CVSE_newval], buffer) != 0) { - ReplyToCommand(client, "[Confogl] Server CVar: %s, Desired Value: %s, Current Value: %s", name, cvsetting[CVSE_newval], buffer); - foundCvars++; - } + if (strcmp(cvsetting[CVSE_newval], buffer) != 0) { + ReplyToCommand(client, "[Confogl] Server CVar: %s, Desired Value: %s, Current Value: %s", name, cvsetting[CVSE_newval], buffer); + foundCvars++; + } - offset++; - } + offset++; + } #endif - if (offset < cvscount) { - ReplyToCommand(client, "[Confogl] To see more CVars, use confogl_cvarsettings %d", offset); - } + if (offset < cvscount) { + ReplyToCommand(client, "[Confogl] To see more CVars, use confogl_cvarsettings %d", offset); + } - return Plugin_Handled; + return Plugin_Handled; } static void ClearAllSettings() { - bTrackingStarted = false; - int iSize = CvarSettingsArray.Length; + bTrackingStarted = false; + int iSize = CvarSettingsArray.Length; #if SOURCEMOD_V_MINOR > 9 - CVSEntry cvsetting; + CVSEntry cvsetting; - for (int i = 0; i < iSize; i++) { - CvarSettingsArray.GetArray(i, cvsetting, sizeof(cvsetting)); + for (int i = 0; i < iSize; i++) { + CvarSettingsArray.GetArray(i, cvsetting, sizeof(cvsetting)); - (cvsetting.CVSE_cvar).RemoveChangeHook(CVS_ConVarChange); - (cvsetting.CVSE_cvar).SetString(cvsetting.CVSE_oldval); - } + (cvsetting.CVSE_cvar).RemoveChangeHook(CVS_ConVarChange); + (cvsetting.CVSE_cvar).SetString(cvsetting.CVSE_oldval); + } #else - CVSEntry cvsetting[CVSEntry]; + CVSEntry cvsetting[CVSEntry]; - for (int i = 0; i < iSize; i++) { - CvarSettingsArray.GetArray(i, cvsetting[0], sizeof(cvsetting)); + for (int i = 0; i < iSize; i++) { + CvarSettingsArray.GetArray(i, cvsetting[0], sizeof(cvsetting)); - cvsetting[CVSE_cvar].RemoveChangeHook(CVS_ConVarChange); - cvsetting[CVSE_cvar].SetString(cvsetting[CVSE_oldval]); - } + cvsetting[CVSE_cvar].RemoveChangeHook(CVS_ConVarChange); + cvsetting[CVSE_cvar].SetString(cvsetting[CVSE_oldval]); + } #endif - CvarSettingsArray.Clear(); + CvarSettingsArray.Clear(); } static void SetEnforcedCvars() { - int iSize = CvarSettingsArray.Length; + int iSize = CvarSettingsArray.Length; #if SOURCEMOD_V_MINOR > 9 - CVSEntry cvsetting; + CVSEntry cvsetting; - for (int i = 0; i < iSize; i++) { - CvarSettingsArray.GetArray(i, cvsetting, sizeof(cvsetting)); + for (int i = 0; i < iSize; i++) { + CvarSettingsArray.GetArray(i, cvsetting, sizeof(cvsetting)); - #if CVARS_DEBUG - char debug_buffer[CVS_CVAR_MAXLEN]; - (cvsetting.CVSE_cvar).GetName(debug_buffer, sizeof(debug_buffer)); - LogMessage("[%s] cvar = %s, newval = %s", CVS_MODULE_NAME, debug_buffer, cvsetting.CVSE_newval); - #endif + #if CVARS_DEBUG + char debug_buffer[CVS_CVAR_MAXLEN]; + (cvsetting.CVSE_cvar).GetName(debug_buffer, sizeof(debug_buffer)); + LogMessage("[%s] cvar = %s, newval = %s", CVS_MODULE_NAME, debug_buffer, cvsetting.CVSE_newval); + #endif - (cvsetting.CVSE_cvar).SetString(cvsetting.CVSE_newval); - } + (cvsetting.CVSE_cvar).SetString(cvsetting.CVSE_newval); + } #else - CVSEntry cvsetting[CVSEntry]; + CVSEntry cvsetting[CVSEntry]; - for (int i = 0; i < iSize; i++) { - CvarSettingsArray.GetArray(i, cvsetting[0], sizeof(cvsetting)); + for (int i = 0; i < iSize; i++) { + CvarSettingsArray.GetArray(i, cvsetting[0], sizeof(cvsetting)); - #if CVARS_DEBUG - char debug_buffer[CVS_CVAR_MAXLEN]; - cvsetting[CVSE_cvar].GetName(debug_buffer, sizeof(debug_buffer)); - LogMessage("[%s] cvar = %s, newval = %s", CVS_MODULE_NAME, debug_buffer, cvsetting[CVSE_newval]); - #endif + #if CVARS_DEBUG + char debug_buffer[CVS_CVAR_MAXLEN]; + cvsetting[CVSE_cvar].GetName(debug_buffer, sizeof(debug_buffer)); + LogMessage("[%s] cvar = %s, newval = %s", CVS_MODULE_NAME, debug_buffer, cvsetting[CVSE_newval]); + #endif - cvsetting[CVSE_cvar].SetString(cvsetting[CVSE_newval]); - } + cvsetting[CVSE_cvar].SetString(cvsetting[CVSE_newval]); + } #endif } static void AddCvar(const char[] cvar, const char[] newval) { - if (bTrackingStarted) { - #if CVARS_DEBUG - LogMessage("[%s] Attempt to track new cvar %s during a match!", CVS_MODULE_NAME, cvar); - #endif - return; - } + if (bTrackingStarted) { + #if CVARS_DEBUG + LogMessage("[%s] Attempt to track new cvar %s during a match!", CVS_MODULE_NAME, cvar); + #endif + return; + } - if (strlen(cvar) >= CVS_CVAR_MAXLEN) { - Debug_LogError(CVS_MODULE_NAME, "CVar Specified (%s) is longer than max cvar/value length (%d)", cvar, CVS_CVAR_MAXLEN); - return; - } + if (strlen(cvar) >= CVS_CVAR_MAXLEN) { + Debug_LogError(CVS_MODULE_NAME, "CVar Specified (%s) is longer than max cvar/value length (%d)", cvar, CVS_CVAR_MAXLEN); + return; + } - if (strlen(newval) >= CVS_CVAR_MAXLEN) { - Debug_LogError(CVS_MODULE_NAME, "New Value Specified (%s) is longer than max cvar/value length (%d)", newval, CVS_CVAR_MAXLEN); - return; - } + if (strlen(newval) >= CVS_CVAR_MAXLEN) { + Debug_LogError(CVS_MODULE_NAME, "New Value Specified (%s) is longer than max cvar/value length (%d)", newval, CVS_CVAR_MAXLEN); + return; + } - ConVar newCvar = FindConVar(cvar); + ConVar newCvar = FindConVar(cvar); - if (newCvar == null) { - Debug_LogError(CVS_MODULE_NAME, "Could not find CVar specified (%s)", cvar); - return; - } + if (newCvar == null) { + Debug_LogError(CVS_MODULE_NAME, "Could not find CVar specified (%s)", cvar); + return; + } - char cvarBuffer[CVS_CVAR_MAXLEN]; - int iSize = CvarSettingsArray.Length; + char cvarBuffer[CVS_CVAR_MAXLEN]; + int iSize = CvarSettingsArray.Length; #if SOURCEMOD_V_MINOR > 9 - CVSEntry newEntry; + CVSEntry newEntry; - for (int i = 0; i < iSize; i++) { - CvarSettingsArray.GetArray(i, newEntry, sizeof(newEntry)); + for (int i = 0; i < iSize; i++) { + CvarSettingsArray.GetArray(i, newEntry, sizeof(newEntry)); - (newEntry.CVSE_cvar).GetName(cvarBuffer, CVS_CVAR_MAXLEN); + (newEntry.CVSE_cvar).GetName(cvarBuffer, CVS_CVAR_MAXLEN); - if (strcmp(cvar, cvarBuffer, false) == 0) { - Debug_LogError(CVS_MODULE_NAME, "Attempt to track ConVar %s, which is already being tracked.", cvar); - return; - } - } + if (strcmp(cvar, cvarBuffer, false) == 0) { + Debug_LogError(CVS_MODULE_NAME, "Attempt to track ConVar %s, which is already being tracked.", cvar); + return; + } + } - newCvar.GetString(cvarBuffer, CVS_CVAR_MAXLEN); + newCvar.GetString(cvarBuffer, CVS_CVAR_MAXLEN); - newEntry.CVSE_cvar = newCvar; - strcopy(newEntry.CVSE_oldval, CVS_CVAR_MAXLEN, cvarBuffer); - strcopy(newEntry.CVSE_newval, CVS_CVAR_MAXLEN, newval); + newEntry.CVSE_cvar = newCvar; + strcopy(newEntry.CVSE_oldval, CVS_CVAR_MAXLEN, cvarBuffer); + strcopy(newEntry.CVSE_newval, CVS_CVAR_MAXLEN, newval); - newCvar.AddChangeHook(CVS_ConVarChange); + newCvar.AddChangeHook(CVS_ConVarChange); #if CVARS_DEBUG - LogMessage("[%s] cvar = %s, newval = %s, oldval = %s", CVS_MODULE_NAME, cvar, newval, cvarBuffer); + LogMessage("[%s] cvar = %s, newval = %s, oldval = %s", CVS_MODULE_NAME, cvar, newval, cvarBuffer); #endif - CvarSettingsArray.PushArray(newEntry, sizeof(newEntry)); + CvarSettingsArray.PushArray(newEntry, sizeof(newEntry)); #else - CVSEntry newEntry[CVSEntry]; + CVSEntry newEntry[CVSEntry]; - for (int i = 0; i < iSize; i++) { - CvarSettingsArray.GetArray(i, newEntry[0], sizeof(newEntry)); + for (int i = 0; i < iSize; i++) { + CvarSettingsArray.GetArray(i, newEntry[0], sizeof(newEntry)); - newEntry[CVSE_cvar].GetName(cvarBuffer, CVS_CVAR_MAXLEN); + newEntry[CVSE_cvar].GetName(cvarBuffer, CVS_CVAR_MAXLEN); - if (strcmp(cvar, cvarBuffer, false) == 0) { - Debug_LogError(CVS_MODULE_NAME, "Attempt to track ConVar %s, which is already being tracked.", cvar); - return; - } - } + if (strcmp(cvar, cvarBuffer, false) == 0) { + Debug_LogError(CVS_MODULE_NAME, "Attempt to track ConVar %s, which is already being tracked.", cvar); + return; + } + } - newCvar.GetString(cvarBuffer, CVS_CVAR_MAXLEN); + newCvar.GetString(cvarBuffer, CVS_CVAR_MAXLEN); - newEntry[CVSE_cvar] = newCvar; - strcopy(newEntry[CVSE_oldval], CVS_CVAR_MAXLEN, cvarBuffer); - strcopy(newEntry[CVSE_newval], CVS_CVAR_MAXLEN, newval); + newEntry[CVSE_cvar] = newCvar; + strcopy(newEntry[CVSE_oldval], CVS_CVAR_MAXLEN, cvarBuffer); + strcopy(newEntry[CVSE_newval], CVS_CVAR_MAXLEN, newval); - newCvar.AddChangeHook(CVS_ConVarChange); + newCvar.AddChangeHook(CVS_ConVarChange); #if CVARS_DEBUG - LogMessage("[%s] cvar = %s, newval = %s, oldval = %s", CVS_MODULE_NAME, cvar, newval, cvarBuffer); + LogMessage("[%s] cvar = %s, newval = %s, oldval = %s", CVS_MODULE_NAME, cvar, newval, cvarBuffer); #endif - CvarSettingsArray.PushArray(newEntry[0], sizeof(newEntry)); + CvarSettingsArray.PushArray(newEntry[0], sizeof(newEntry)); #endif } public void CVS_ConVarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - if (bTrackingStarted) { - char sName[CVS_CVAR_MAXLEN]; - hConVar.GetName(sName, sizeof(sName)); - - PrintToServer("[Confogl] Tracked Server CVar '%s' changed from '%s' to '%s' !!!", sName, sOldValue, sNewValue); - //PrintToChatAll("[Confogl] Tracked Server CVar '%s' changed from '%s' to '%s' !!!", sName, sOldValue, sNewValue); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Tracked Server CVar '{green}%s{default}' changed from '{blue}%s{default}' to '{blue}%s{default}' !!!", sName, sOldValue, sNewValue); - } + if (bTrackingStarted) { + char sName[CVS_CVAR_MAXLEN]; + hConVar.GetName(sName, sizeof(sName)); + + PrintToServer("[Confogl] Tracked Server CVar '%s' changed from '%s' to '%s' !!!", sName, sOldValue, sNewValue); + //PrintToChatAll("[Confogl] Tracked Server CVar '%s' changed from '%s' to '%s' !!!", sName, sOldValue, sNewValue); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Tracked Server CVar '{green}%s{default}' changed from '{blue}%s{default}' to '{blue}%s{default}' !!!", sName, sOldValue, sNewValue); + } } diff --git a/addons/sourcemod/scripting/confoglcompmod/EntityRemover.sp b/addons/sourcemod/scripting/confoglcompmod/EntityRemover.sp index 4f73d4d04..f43cb6f04 100644 --- a/addons/sourcemod/scripting/confoglcompmod/EntityRemover.sp +++ b/addons/sourcemod/scripting/confoglcompmod/EntityRemover.sp @@ -1,403 +1,403 @@ #if defined __entity_remover_included - #endinput + #endinput #endif #define __entity_remover_included -#define ER_MODULE_NAME "EntityRemover" +#define ER_MODULE_NAME "EntityRemover" -#define DEBUG_ER 0 +#define DEBUG_ER 0 -#define ER_KV_ACTION_KILL 1 +#define ER_KV_ACTION_KILL 1 -#define ER_KV_PROPTYPE_INT 1 -#define ER_KV_PROPTYPE_FLOAT 2 -#define ER_KV_PROPTYPE_BOOL 3 -#define ER_KV_PROPTYPE_STRING 4 +#define ER_KV_PROPTYPE_INT 1 +#define ER_KV_PROPTYPE_FLOAT 2 +#define ER_KV_PROPTYPE_BOOL 3 +#define ER_KV_PROPTYPE_STRING 4 -#define ER_KV_CONDITION_EQUAL 1 -#define ER_KV_CONDITION_NEQUAL 2 -#define ER_KV_CONDITION_LESS 3 -#define ER_KV_CONDITION_GREAT 4 -#define ER_KV_CONDITION_CONTAINS 5 +#define ER_KV_CONDITION_EQUAL 1 +#define ER_KV_CONDITION_NEQUAL 2 +#define ER_KV_CONDITION_LESS 3 +#define ER_KV_CONDITION_GREAT 4 +#define ER_KV_CONDITION_CONTAINS 5 static bool - ER_bKillParachutist = true, - ER_bReplaceGhostHurt = false; + ER_bKillParachutist = true, + ER_bReplaceGhostHurt = false; static ConVar - ER_hKillParachutist = null, - ER_hReplaceGhostHurt = null; + ER_hKillParachutist = null, + ER_hReplaceGhostHurt = null; static KeyValues - kERData = null; + kERData = null; void ER_OnModuleStart() { - ER_hKillParachutist = CreateConVarEx("remove_parachutist", "1", "Removes the parachutist from c3m2", _, true, 0.0, true, 1.0); - ER_hReplaceGhostHurt = CreateConVarEx( \ - "disable_ghost_hurt", \ - "0", \ - "Replaces all trigger_ghost_hurt with trigger_hurt, blocking ghost spawns from dying.", \ - _, true, 0.0, true, 1.0 \ - ); + ER_hKillParachutist = CreateConVarEx("remove_parachutist", "1", "Removes the parachutist from c3m2", _, true, 0.0, true, 1.0); + ER_hReplaceGhostHurt = CreateConVarEx( \ + "disable_ghost_hurt", \ + "0", \ + "Replaces all trigger_ghost_hurt with trigger_hurt, blocking ghost spawns from dying.", \ + _, true, 0.0, true, 1.0 \ + ); - ER_bKillParachutist = ER_hKillParachutist.BoolValue; - ER_bReplaceGhostHurt = ER_hReplaceGhostHurt.BoolValue; + ER_bKillParachutist = ER_hKillParachutist.BoolValue; + ER_bReplaceGhostHurt = ER_hReplaceGhostHurt.BoolValue; - ER_hKillParachutist.AddChangeHook(ER_ConVarChange); - ER_hReplaceGhostHurt.AddChangeHook(ER_ConVarChange); + ER_hKillParachutist.AddChangeHook(ER_ConVarChange); + ER_hReplaceGhostHurt.AddChangeHook(ER_ConVarChange); - ER_KV_Load(); + ER_KV_Load(); - RegAdminCmd("confogl_erdata_reload", ER_KV_CmdReload, ADMFLAG_CONFIG); + RegAdminCmd("confogl_erdata_reload", ER_KV_CmdReload, ADMFLAG_CONFIG); - HookEvent("round_start", ER_RoundStart_Event, EventHookMode_PostNoCopy); + HookEvent("round_start", ER_RoundStart_Event, EventHookMode_PostNoCopy); } public void ER_ConVarChange(ConVar hConvar, const char[] sOldValue, const char[] sNewValue) { - ER_bKillParachutist = ER_hKillParachutist.BoolValue; - ER_bReplaceGhostHurt = ER_hReplaceGhostHurt.BoolValue; + ER_bKillParachutist = ER_hKillParachutist.BoolValue; + ER_bReplaceGhostHurt = ER_hReplaceGhostHurt.BoolValue; } void ER_OnModuleEnd() { - ER_KV_Close(); + ER_KV_Close(); } static void ER_KV_Close() { - if (kERData != null) { - delete kERData; - kERData = null; - } + if (kERData != null) { + delete kERData; + kERData = null; + } } static void ER_KV_Load() { - char sNameBuff[PLATFORM_MAX_PATH], sDescBuff[256], sValBuff[32]; + char sNameBuff[PLATFORM_MAX_PATH], sDescBuff[256], sValBuff[32]; - if (DEBUG_ER || IsDebugEnabled()) { - LogMessage("[%s] Loading EntityRemover KeyValues", ER_MODULE_NAME); - } + if (DEBUG_ER || IsDebugEnabled()) { + LogMessage("[%s] Loading EntityRemover KeyValues", ER_MODULE_NAME); + } - kERData = new KeyValues("EntityRemover"); + kERData = new KeyValues("EntityRemover"); - BuildConfigPath(sNameBuff, sizeof(sNameBuff), "entityremove.txt"); //Build our filepath + BuildConfigPath(sNameBuff, sizeof(sNameBuff), "entityremove.txt"); //Build our filepath - if (!kERData.ImportFromFile(sNameBuff)) { - Debug_LogError(ER_MODULE_NAME, "Couldn't load EntityRemover data!"); - ER_KV_Close(); - return; - } + if (!kERData.ImportFromFile(sNameBuff)) { + Debug_LogError(ER_MODULE_NAME, "Couldn't load EntityRemover data!"); + ER_KV_Close(); + return; + } - // Create cvars for all entity removes - if (DEBUG_ER || IsDebugEnabled()) { - LogMessage("[%s] Creating entry CVARs", ER_MODULE_NAME); - } + // Create cvars for all entity removes + if (DEBUG_ER || IsDebugEnabled()) { + LogMessage("[%s] Creating entry CVARs", ER_MODULE_NAME); + } - kERData.GotoFirstSubKey(); + kERData.GotoFirstSubKey(); - do { - kERData.GotoFirstSubKey(); + do { + kERData.GotoFirstSubKey(); - do { - kERData.GetString("cvar", sNameBuff, sizeof(sNameBuff)); - kERData.GetString("cvar_desc", sDescBuff, sizeof(sDescBuff)); - kERData.GetString("cvar_val", sValBuff, sizeof(sValBuff)); + do { + kERData.GetString("cvar", sNameBuff, sizeof(sNameBuff)); + kERData.GetString("cvar_desc", sDescBuff, sizeof(sDescBuff)); + kERData.GetString("cvar_val", sValBuff, sizeof(sValBuff)); - CreateConVarEx(sNameBuff, sValBuff, sDescBuff); + CreateConVarEx(sNameBuff, sValBuff, sDescBuff); - if (DEBUG_ER || IsDebugEnabled()) { - LogMessage("[%s] Creating CVAR %s", ER_MODULE_NAME, sNameBuff); - } + if (DEBUG_ER || IsDebugEnabled()) { + LogMessage("[%s] Creating CVAR %s", ER_MODULE_NAME, sNameBuff); + } - } while(kERData.GotoNextKey()); + } while(kERData.GotoNextKey()); - kERData.GoBack(); - } while(kERData.GotoNextKey()); + kERData.GoBack(); + } while(kERData.GotoNextKey()); - kERData.Rewind(); + kERData.Rewind(); } public Action ER_KV_CmdReload(int client, int args) { - if (!IsPluginEnabled()) { - return Plugin_Continue; - } + if (!IsPluginEnabled()) { + return Plugin_Continue; + } - ReplyToCommand(client, "[ER] Reloading EntityRemoveData"); - ER_KV_Reload(); + ReplyToCommand(client, "[ER] Reloading EntityRemoveData"); + ER_KV_Reload(); - return Plugin_Handled; + return Plugin_Handled; } static void ER_KV_Reload() { - ER_KV_Close(); - ER_KV_Load(); + ER_KV_Close(); + ER_KV_Load(); } static bool ER_KV_TestCondition(int lhsval, int rhsval, int condition) { - switch (condition) { - case ER_KV_CONDITION_EQUAL: { - return (lhsval == rhsval); - } - case ER_KV_CONDITION_NEQUAL: { - return (lhsval != rhsval); - } - case ER_KV_CONDITION_LESS: { - return (lhsval < rhsval); - } - case ER_KV_CONDITION_GREAT: { - return (lhsval > rhsval); - } - } - - return false; + switch (condition) { + case ER_KV_CONDITION_EQUAL: { + return (lhsval == rhsval); + } + case ER_KV_CONDITION_NEQUAL: { + return (lhsval != rhsval); + } + case ER_KV_CONDITION_LESS: { + return (lhsval < rhsval); + } + case ER_KV_CONDITION_GREAT: { + return (lhsval > rhsval); + } + } + + return false; } static bool ER_KV_TestConditionFloat(float lhsval, float rhsval, int condition) { - switch (condition) { - case ER_KV_CONDITION_EQUAL: { - return (lhsval == rhsval); - } - case ER_KV_CONDITION_NEQUAL: { - return (lhsval != rhsval); - } - case ER_KV_CONDITION_LESS: { - return (lhsval < rhsval); - } - case ER_KV_CONDITION_GREAT: { - return (lhsval > rhsval); - } - } - - return false; + switch (condition) { + case ER_KV_CONDITION_EQUAL: { + return (lhsval == rhsval); + } + case ER_KV_CONDITION_NEQUAL: { + return (lhsval != rhsval); + } + case ER_KV_CONDITION_LESS: { + return (lhsval < rhsval); + } + case ER_KV_CONDITION_GREAT: { + return (lhsval > rhsval); + } + } + + return false; } static bool ER_KV_TestConditionString(const char[] lhsval, const char[] rhsval, int condition) { - switch (condition) { - case ER_KV_CONDITION_EQUAL: { - return (strcmp(lhsval, rhsval) == 0); - } - case ER_KV_CONDITION_NEQUAL: { - return (strcmp(lhsval, rhsval) != 0); - } - case ER_KV_CONDITION_CONTAINS: { - return (StrContains(lhsval, rhsval) != -1); - } - } - - return false; + switch (condition) { + case ER_KV_CONDITION_EQUAL: { + return (strcmp(lhsval, rhsval) == 0); + } + case ER_KV_CONDITION_NEQUAL: { + return (strcmp(lhsval, rhsval) != 0); + } + case ER_KV_CONDITION_CONTAINS: { + return (StrContains(lhsval, rhsval) != -1); + } + } + + return false; } // Returns true if the entity is still alive (not killed) static bool ER_KV_ParseEntity(KeyValues kEntry, int iEntity) { - char sBuffer[64], mapname[64]; - - // Check CVAR for this entry - kEntry.GetString("cvar", sBuffer, sizeof(sBuffer)); - - if (strlen(sBuffer) && !(FindConVarEx(sBuffer).BoolValue)) { - return true; - } - - // Check MapName for this entry - GetCurrentMap(mapname, sizeof(mapname)); - - kEntry.GetString("map", sBuffer, sizeof(sBuffer)); - if (strlen(sBuffer) && StrContains(sBuffer, mapname) == -1) { - return true; - } - - kEntry.GetString("excludemap", sBuffer, sizeof(sBuffer)); - if (strlen(sBuffer) && StrContains(sBuffer, mapname) != -1) { - return true; - } - - // Do property check for this entry - kEntry.GetString("property", sBuffer, sizeof(sBuffer)); - if (strlen(sBuffer)) { - int proptype = kEntry.GetNum("proptype"); - - switch (proptype) { - case ER_KV_PROPTYPE_INT, ER_KV_PROPTYPE_BOOL: { - int rhsval = kEntry.GetNum("propval"); - PropType prop_type = view_as(kEntry.GetNum("propdata")); - int lhsval = GetEntProp(iEntity, prop_type, sBuffer); - - if (!ER_KV_TestCondition(lhsval, rhsval, kEntry.GetNum("condition"))) { - return true; - } - } - case ER_KV_PROPTYPE_FLOAT: { - float rhsval = kEntry.GetFloat("propval"); - PropType prop_type = view_as(kEntry.GetNum("propdata")); - float lhsval = GetEntPropFloat(iEntity, prop_type, sBuffer); - - if (!ER_KV_TestConditionFloat(lhsval, rhsval, kEntry.GetNum("condition"))) { - return true; - } - } - case ER_KV_PROPTYPE_STRING: { - char rhsval[64], lhsval[64]; - kEntry.GetString("propval", rhsval, sizeof(rhsval)); - PropType prop_type = view_as(kEntry.GetNum("propdata")); - GetEntPropString(iEntity, prop_type, sBuffer, lhsval, sizeof(lhsval)); - - if (!ER_KV_TestConditionString(lhsval, rhsval, kEntry.GetNum("condition"))) { - return true; - } - } - } - } - - int iAction = kEntry.GetNum("action"); - return (ER_KV_TakeAction(iAction, iEntity)); + char sBuffer[64], mapname[64]; + + // Check CVAR for this entry + kEntry.GetString("cvar", sBuffer, sizeof(sBuffer)); + + if (strlen(sBuffer) && !(FindConVarEx(sBuffer).BoolValue)) { + return true; + } + + // Check MapName for this entry + GetCurrentMap(mapname, sizeof(mapname)); + + kEntry.GetString("map", sBuffer, sizeof(sBuffer)); + if (strlen(sBuffer) && StrContains(sBuffer, mapname) == -1) { + return true; + } + + kEntry.GetString("excludemap", sBuffer, sizeof(sBuffer)); + if (strlen(sBuffer) && StrContains(sBuffer, mapname) != -1) { + return true; + } + + // Do property check for this entry + kEntry.GetString("property", sBuffer, sizeof(sBuffer)); + if (strlen(sBuffer)) { + int proptype = kEntry.GetNum("proptype"); + + switch (proptype) { + case ER_KV_PROPTYPE_INT, ER_KV_PROPTYPE_BOOL: { + int rhsval = kEntry.GetNum("propval"); + PropType prop_type = view_as(kEntry.GetNum("propdata")); + int lhsval = GetEntProp(iEntity, prop_type, sBuffer); + + if (!ER_KV_TestCondition(lhsval, rhsval, kEntry.GetNum("condition"))) { + return true; + } + } + case ER_KV_PROPTYPE_FLOAT: { + float rhsval = kEntry.GetFloat("propval"); + PropType prop_type = view_as(kEntry.GetNum("propdata")); + float lhsval = GetEntPropFloat(iEntity, prop_type, sBuffer); + + if (!ER_KV_TestConditionFloat(lhsval, rhsval, kEntry.GetNum("condition"))) { + return true; + } + } + case ER_KV_PROPTYPE_STRING: { + char rhsval[64], lhsval[64]; + kEntry.GetString("propval", rhsval, sizeof(rhsval)); + PropType prop_type = view_as(kEntry.GetNum("propdata")); + GetEntPropString(iEntity, prop_type, sBuffer, lhsval, sizeof(lhsval)); + + if (!ER_KV_TestConditionString(lhsval, rhsval, kEntry.GetNum("condition"))) { + return true; + } + } + } + } + + int iAction = kEntry.GetNum("action"); + return (ER_KV_TakeAction(iAction, iEntity)); } // Returns true if the entity is still alive (not killed) static bool ER_KV_TakeAction(int action, int iEntity) { - switch (action) { - case ER_KV_ACTION_KILL: { - if (DEBUG_ER || IsDebugEnabled()) { - LogMessage("[%s] Killing!", ER_MODULE_NAME); - } - - KillEntity(iEntity); - - return false; - } - default: { - Debug_LogError(ER_MODULE_NAME, "ParseEntity Encountered bad action!"); - } - } - - return true; + switch (action) { + case ER_KV_ACTION_KILL: { + if (DEBUG_ER || IsDebugEnabled()) { + LogMessage("[%s] Killing!", ER_MODULE_NAME); + } + + KillEntity(iEntity); + + return false; + } + default: { + Debug_LogError(ER_MODULE_NAME, "ParseEntity Encountered bad action!"); + } + } + + return true; } static bool ER_KillParachutist(int ent) { - char buf[32]; - GetCurrentMap(buf, sizeof(buf)); + char buf[32]; + GetCurrentMap(buf, sizeof(buf)); - if (strcmp(buf, "c3m2_swamp") == 0) { - GetEntPropString(ent, Prop_Data, "m_iName", buf, sizeof(buf)); + if (strcmp(buf, "c3m2_swamp") == 0) { + GetEntPropString(ent, Prop_Data, "m_iName", buf, sizeof(buf)); - if (!strncmp(buf, "parachute_", 10)) { - KillEntity(ent); + if (!strncmp(buf, "parachute_", 10)) { + KillEntity(ent); - return true; - } - } + return true; + } + } - return false; + return false; } static bool ER_ReplaceTriggerHurtGhost(int ent) { - char buf[MAX_ENTITY_NAME_LENGTH]; - GetEdictClassname(ent, buf, sizeof(buf)); - - if (strcmp(buf, "trigger_hurt_ghost") == 0) { - // Replace trigger_hurt_ghost with trigger_hurt - int replace = CreateEntityByName("trigger_hurt"); - if (replace == -1) { - Debug_LogError(ER_MODULE_NAME, "Could not create trigger_hurt entity!"); - return false; - } - - // Get modelname - char model[PLATFORM_MAX_PATH]; - GetEntPropString(ent, Prop_Data, "m_ModelName", model, sizeof(model)); - - // Get position and rotation - float pos[3], ang[3]; - GetEntPropVector(ent, Prop_Send, "m_vecOrigin", pos); - GetEntPropVector(ent, Prop_Send, "m_angRotation", ang); - - // Kill the old one - KillEntity(ent); - - // Set the values for the new one - DispatchKeyValue(replace, "StartDisabled", "0"); - DispatchKeyValue(replace, "spawnflags", "67"); - DispatchKeyValue(replace, "damagetype", "32"); - DispatchKeyValue(replace, "damagemodel", "0"); - DispatchKeyValue(replace, "damagecap", "10000"); - DispatchKeyValue(replace, "damage", "10000"); - DispatchKeyValue(replace, "model", model); - - DispatchKeyValue(replace, "filtername", "filter_infected"); - - // Spawn the new one - TeleportEntity(replace, pos, ang, NULL_VECTOR); - DispatchSpawn(replace); - ActivateEntity(replace); - - return true; - } - - return false; + char buf[MAX_ENTITY_NAME_LENGTH]; + GetEdictClassname(ent, buf, sizeof(buf)); + + if (strcmp(buf, "trigger_hurt_ghost") == 0) { + // Replace trigger_hurt_ghost with trigger_hurt + int replace = CreateEntityByName("trigger_hurt"); + if (replace == -1) { + Debug_LogError(ER_MODULE_NAME, "Could not create trigger_hurt entity!"); + return false; + } + + // Get modelname + char model[PLATFORM_MAX_PATH]; + GetEntPropString(ent, Prop_Data, "m_ModelName", model, sizeof(model)); + + // Get position and rotation + float pos[3], ang[3]; + GetEntPropVector(ent, Prop_Send, "m_vecOrigin", pos); + GetEntPropVector(ent, Prop_Send, "m_angRotation", ang); + + // Kill the old one + KillEntity(ent); + + // Set the values for the new one + DispatchKeyValue(replace, "StartDisabled", "0"); + DispatchKeyValue(replace, "spawnflags", "67"); + DispatchKeyValue(replace, "damagetype", "32"); + DispatchKeyValue(replace, "damagemodel", "0"); + DispatchKeyValue(replace, "damagecap", "10000"); + DispatchKeyValue(replace, "damage", "10000"); + DispatchKeyValue(replace, "model", model); + + DispatchKeyValue(replace, "filtername", "filter_infected"); + + // Spawn the new one + TeleportEntity(replace, pos, ang, NULL_VECTOR); + DispatchSpawn(replace); + ActivateEntity(replace); + + return true; + } + + return false; } public void ER_RoundStart_Event(Event hEvent, const char[] sEventName, bool bdontBroadcast) { - if (!IsPluginEnabled()) { - return; - } + if (!IsPluginEnabled()) { + return; + } - CreateTimer(0.3, ER_RoundStart_Timer, _, TIMER_FLAG_NO_MAPCHANGE); + CreateTimer(0.3, ER_RoundStart_Timer, _, TIMER_FLAG_NO_MAPCHANGE); } public Action ER_RoundStart_Timer(Handle hTimer) { - char sBuffer[MAX_ENTITY_NAME_LENGTH]; - if (DEBUG_ER || IsDebugEnabled()) { - LogMessage("[%s] Starting RoundStart Event", ER_MODULE_NAME); - } - - if (kERData != null) { - kERData.Rewind(); - } - - int iEntCount = GetEntityCount(); - - for (int ent = (MaxClients + 1); ent <= iEntCount; ent++) { - if (!IsValidEdict(ent)) { - continue; - } - - GetEdictClassname(ent, sBuffer, sizeof(sBuffer)); - - if (ER_bKillParachutist && ER_KillParachutist(ent)) { - //empty - } else if (ER_bReplaceGhostHurt && ER_ReplaceTriggerHurtGhost(ent)) { - //empty - } else if (kERData != null && kERData.JumpToKey(sBuffer)) { - if (DEBUG_ER || IsDebugEnabled()) { - LogMessage("[%s] Dealing with an instance of %s", ER_MODULE_NAME, sBuffer); - } - - kERData.GotoFirstSubKey(); - - do { - // Parse each entry for this entity's classname - // Stop if we run out of entries or we have killed the entity - if (!ER_KV_ParseEntity(kERData, ent)) { - break; - } - } while (kERData.GotoNextKey()); - - kERData.Rewind(); - } - } - - return Plugin_Stop; + char sBuffer[MAX_ENTITY_NAME_LENGTH]; + if (DEBUG_ER || IsDebugEnabled()) { + LogMessage("[%s] Starting RoundStart Event", ER_MODULE_NAME); + } + + if (kERData != null) { + kERData.Rewind(); + } + + int iEntCount = GetEntityCount(); + + for (int ent = (MaxClients + 1); ent <= iEntCount; ent++) { + if (!IsValidEdict(ent)) { + continue; + } + + GetEdictClassname(ent, sBuffer, sizeof(sBuffer)); + + if (ER_bKillParachutist && ER_KillParachutist(ent)) { + //empty + } else if (ER_bReplaceGhostHurt && ER_ReplaceTriggerHurtGhost(ent)) { + //empty + } else if (kERData != null && kERData.JumpToKey(sBuffer)) { + if (DEBUG_ER || IsDebugEnabled()) { + LogMessage("[%s] Dealing with an instance of %s", ER_MODULE_NAME, sBuffer); + } + + kERData.GotoFirstSubKey(); + + do { + // Parse each entry for this entity's classname + // Stop if we run out of entries or we have killed the entity + if (!ER_KV_ParseEntity(kERData, ent)) { + break; + } + } while (kERData.GotoNextKey()); + + kERData.Rewind(); + } + } + + return Plugin_Stop; } diff --git a/addons/sourcemod/scripting/confoglcompmod/FinaleSpawn.sp b/addons/sourcemod/scripting/confoglcompmod/FinaleSpawn.sp index 2bd6cd56a..7cc6d7cef 100644 --- a/addons/sourcemod/scripting/confoglcompmod/FinaleSpawn.sp +++ b/addons/sourcemod/scripting/confoglcompmod/FinaleSpawn.sp @@ -1,100 +1,100 @@ #if defined __finale_spawn_included - #endinput + #endinput #endif #define __finale_spawn_included -#define FS_MODULE_NAME "FinaleSpawn" +#define FS_MODULE_NAME "FinaleSpawn" -#define SPAWN_RANGE 150 +#define SPAWN_RANGE 150 static ConVar - FS_hEnabled = null; + FS_hEnabled = null; static bool - FS_bIsFinale = false, - FS_bEnabled = true; + FS_bIsFinale = false, + FS_bEnabled = true; void FS_OnModuleStart() { - FS_hEnabled = CreateConVarEx("reduce_finalespawnrange", "1", "Adjust the spawn range on finales for infected, to normal spawning range", _, true, 0.0, true, 1.0); + FS_hEnabled = CreateConVarEx("reduce_finalespawnrange", "1", "Adjust the spawn range on finales for infected, to normal spawning range", _, true, 0.0, true, 1.0); - FS_bEnabled = FS_hEnabled.BoolValue; - FS_hEnabled.AddChangeHook(FS_ConVarChange); + FS_bEnabled = FS_hEnabled.BoolValue; + FS_hEnabled.AddChangeHook(FS_ConVarChange); - HookEvent("round_end", FS_Round_Event, EventHookMode_PostNoCopy); - HookEvent("round_start", FS_Round_Event, EventHookMode_PostNoCopy); - HookEvent("finale_start", FS_FinaleStart_Event, EventHookMode_PostNoCopy); + HookEvent("round_end", FS_Round_Event, EventHookMode_PostNoCopy); + HookEvent("round_start", FS_Round_Event, EventHookMode_PostNoCopy); + HookEvent("finale_start", FS_FinaleStart_Event, EventHookMode_PostNoCopy); } public void FS_Round_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - FS_bIsFinale = false; + FS_bIsFinale = false; } public void FS_FinaleStart_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - FS_bIsFinale = true; + FS_bIsFinale = true; } public void FS_ConVarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - FS_bEnabled = FS_hEnabled.BoolValue; + FS_bEnabled = FS_hEnabled.BoolValue; } void FS_OnClientPutInServer(int client) { - SDKHook(client, SDKHook_PreThinkPost, HookCallback); + SDKHook(client, SDKHook_PreThinkPost, HookCallback); } public void HookCallback(int client) { - if (!FS_bIsFinale) { - return; - } - - //if (!FS_bEnabled) { // rework version - if (!FS_bEnabled || !IsPluginEnabled()) { // original - return; - } - - if (GetClientTeam(client) != L4D2Team_Infected) { - return; - } - - if (GetEntProp(client, Prop_Send, "m_isGhost", 1) != 1) { - return; - } - - if (GetEntProp(client, Prop_Send, "m_ghostSpawnState") == SPAWNFLAG_TOOCLOSE) { - if (!TooClose(client)) { - SetEntProp(client, Prop_Send, "m_ghostSpawnState", SPAWNFLAG_READY); - } - } + if (!FS_bIsFinale) { + return; + } + + //if (!FS_bEnabled) { // rework version + if (!FS_bEnabled || !IsPluginEnabled()) { // original + return; + } + + if (GetClientTeam(client) != L4D2Team_Infected) { + return; + } + + if (GetEntProp(client, Prop_Send, "m_isGhost", 1) != 1) { + return; + } + + if (GetEntProp(client, Prop_Send, "m_ghostSpawnState") == SPAWNFLAG_TOOCLOSE) { + if (!TooClose(client)) { + SetEntProp(client, Prop_Send, "m_ghostSpawnState", SPAWNFLAG_READY); + } + } } static bool TooClose(int client) { - int index = 0; - float fInfLocation[3], fSurvLocation[3], fVector[3]; - GetClientAbsOrigin(client, fInfLocation); + int index = 0; + float fInfLocation[3], fSurvLocation[3], fVector[3]; + GetClientAbsOrigin(client, fInfLocation); - for (int i = 0; i < 4; i++) { - index = GetSurvivorIndex(i); - if (index == 0) { - continue; - } + for (int i = 0; i < 4; i++) { + index = GetSurvivorIndex(i); + if (index == 0) { + continue; + } - if (!IsPlayerAlive(index)) { - continue; - } + if (!IsPlayerAlive(index)) { + continue; + } - GetClientAbsOrigin(index, fSurvLocation); - MakeVectorFromPoints(fInfLocation, fSurvLocation, fVector); + GetClientAbsOrigin(index, fSurvLocation); + MakeVectorFromPoints(fInfLocation, fSurvLocation, fVector); - if (GetVectorLength(fVector) <= SPAWN_RANGE) { - return true; - } - } + if (GetVectorLength(fVector) <= SPAWN_RANGE) { + return true; + } + } - return false; + return false; } diff --git a/addons/sourcemod/scripting/confoglcompmod/GhostTank.sp b/addons/sourcemod/scripting/confoglcompmod/GhostTank.sp index b21893138..97623aac3 100644 --- a/addons/sourcemod/scripting/confoglcompmod/GhostTank.sp +++ b/addons/sourcemod/scripting/confoglcompmod/GhostTank.sp @@ -1,346 +1,346 @@ #if defined __ghost_tank_included - #endinput + #endinput #endif #define __ghost_tank_included -#define GT_MODULE_NAME "GhostTank" +#define GT_MODULE_NAME "GhostTank" -#define THROWRANGE 99999999.0 -#define FIREIMMUNITY_TIME 5.0 +#define THROWRANGE 99999999.0 +#define FIREIMMUNITY_TIME 5.0 static int - g_iPasses = 0, - g_iGT_TankClient = 0; + g_iPasses = 0, + g_iGT_TankClient = 0; static bool - g_bGT_FinaleVehicleIncoming = false, - g_bGT_TankIsInPlay = false, - g_bGT_TankHasFireImmunity = false, - g_bGT_HordesDisabled = false; + g_bGT_FinaleVehicleIncoming = false, + g_bGT_TankIsInPlay = false, + g_bGT_TankHasFireImmunity = false, + g_bGT_HordesDisabled = false; static Handle - g_hGT_TankDeathTimer = null; + g_hGT_TankDeathTimer = null; static ConVar - g_hGT_Enabled = null, - g_hCvarTankThrowAllowRange = null, - g_hCvarDirectorTankLotterySelectionTime = null, - g_hCvarZMobSpawnMinIntervalNormal = null, - g_hCvarZMobSpawnMaxIntervalNormal = null, - g_hCvarMobSpawnMinSize = null, - g_hCvarMobSpawnMaxSize = null, - g_hCvarSurvivorIncapHealth = null, - g_hGT_RemoveEscapeTank = null, - g_hGT_BlockPunchRock = null, - g_hGT_DisableTankHordes = null; // Disable Tank Hordes items + g_hGT_Enabled = null, + g_hCvarTankThrowAllowRange = null, + g_hCvarDirectorTankLotterySelectionTime = null, + g_hCvarZMobSpawnMinIntervalNormal = null, + g_hCvarZMobSpawnMaxIntervalNormal = null, + g_hCvarMobSpawnMinSize = null, + g_hCvarMobSpawnMaxSize = null, + g_hCvarSurvivorIncapHealth = null, + g_hGT_RemoveEscapeTank = null, + g_hGT_BlockPunchRock = null, + g_hGT_DisableTankHordes = null; // Disable Tank Hordes items void GT_OnModuleStart() { - g_hGT_Enabled = CreateConVarEx( \ - "boss_tank", \ - "1", \ - "Tank can't be prelight, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player", \ - _, true, 0.0, true, 1.0 \ - ); - - g_hGT_RemoveEscapeTank = CreateConVarEx("remove_escape_tank", "1", "Remove tanks that spawn as the rescue vehicle is incoming on finales.", _, true, 0.0, true, 1.0); - g_hGT_DisableTankHordes = CreateConVarEx("disable_tank_hordes", "0", "Disable natural hordes while tanks are in play", _, true, 0.0, true, 1.0); - g_hGT_BlockPunchRock = CreateConVarEx("block_punch_rock", "0", "Block tanks from punching and throwing a rock at the same time", _, true, 0.0, true, 1.0); - - g_hCvarSurvivorIncapHealth = FindConVar("survivor_incap_health"); - g_hCvarTankThrowAllowRange = FindConVar("tank_throw_allow_range"); - g_hCvarDirectorTankLotterySelectionTime = FindConVar("director_tank_lottery_selection_time"); - g_hCvarZMobSpawnMinIntervalNormal = FindConVar("z_mob_spawn_min_interval_normal"); - g_hCvarZMobSpawnMaxIntervalNormal = FindConVar("z_mob_spawn_max_interval_normal"); - g_hCvarMobSpawnMinSize = FindConVar("z_mob_spawn_min_size"); - g_hCvarMobSpawnMaxSize = FindConVar("z_mob_spawn_max_size"); - - HookEvent("round_start", GT_RoundStart, EventHookMode_PostNoCopy); - HookEvent("tank_spawn", GT_TankSpawn); - HookEvent("player_death", GT_TankKilled); - HookEvent("player_hurt", GT_TankOnFire); - HookEvent("item_pickup", GT_ItemPickup); - HookEvent("player_incapacitated", GT_PlayerIncap); - HookEvent("finale_vehicle_incoming", GT_FinaleVehicleIncoming, EventHookMode_PostNoCopy); - HookEvent("finale_vehicle_ready", GT_FinaleVehicleIncoming, EventHookMode_PostNoCopy); + g_hGT_Enabled = CreateConVarEx( \ + "boss_tank", \ + "1", \ + "Tank can't be prelight, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player", \ + _, true, 0.0, true, 1.0 \ + ); + + g_hGT_RemoveEscapeTank = CreateConVarEx("remove_escape_tank", "1", "Remove tanks that spawn as the rescue vehicle is incoming on finales.", _, true, 0.0, true, 1.0); + g_hGT_DisableTankHordes = CreateConVarEx("disable_tank_hordes", "0", "Disable natural hordes while tanks are in play", _, true, 0.0, true, 1.0); + g_hGT_BlockPunchRock = CreateConVarEx("block_punch_rock", "0", "Block tanks from punching and throwing a rock at the same time", _, true, 0.0, true, 1.0); + + g_hCvarSurvivorIncapHealth = FindConVar("survivor_incap_health"); + g_hCvarTankThrowAllowRange = FindConVar("tank_throw_allow_range"); + g_hCvarDirectorTankLotterySelectionTime = FindConVar("director_tank_lottery_selection_time"); + g_hCvarZMobSpawnMinIntervalNormal = FindConVar("z_mob_spawn_min_interval_normal"); + g_hCvarZMobSpawnMaxIntervalNormal = FindConVar("z_mob_spawn_max_interval_normal"); + g_hCvarMobSpawnMinSize = FindConVar("z_mob_spawn_min_size"); + g_hCvarMobSpawnMaxSize = FindConVar("z_mob_spawn_max_size"); + + HookEvent("round_start", GT_RoundStart, EventHookMode_PostNoCopy); + HookEvent("tank_spawn", GT_TankSpawn); + HookEvent("player_death", GT_TankKilled); + HookEvent("player_hurt", GT_TankOnFire); + HookEvent("item_pickup", GT_ItemPickup); + HookEvent("player_incapacitated", GT_PlayerIncap); + HookEvent("finale_vehicle_incoming", GT_FinaleVehicleIncoming, EventHookMode_PostNoCopy); + HookEvent("finale_vehicle_ready", GT_FinaleVehicleIncoming, EventHookMode_PostNoCopy); } Action GT_OnTankSpawn_Forward() { - if (IsPluginEnabled() && g_hGT_RemoveEscapeTank.BoolValue && g_bGT_FinaleVehicleIncoming) { - return Plugin_Handled; - } + if (IsPluginEnabled() && g_hGT_RemoveEscapeTank.BoolValue && g_bGT_FinaleVehicleIncoming) { + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; } Action GT_OnCThrowActivate() { - if (IsPluginEnabled() - && g_bGT_TankIsInPlay - && g_hGT_BlockPunchRock.BoolValue - && GetClientButtons(g_iGT_TankClient) & IN_ATTACK - ) { - if (IsDebugEnabled()) { - LogMessage("[%s] Blocking Haymaker on %L", GT_MODULE_NAME, g_iGT_TankClient); - } - - return Plugin_Handled; - } - - return Plugin_Continue; + if (IsPluginEnabled() + && g_bGT_TankIsInPlay + && g_hGT_BlockPunchRock.BoolValue + && GetClientButtons(g_iGT_TankClient) & IN_ATTACK + ) { + if (IsDebugEnabled()) { + LogMessage("[%s] Blocking Haymaker on %L", GT_MODULE_NAME, g_iGT_TankClient); + } + + return Plugin_Handled; + } + + return Plugin_Continue; } Action GT_OnSpawnMob_Forward(int &amount) { - // quick fix. needs normalize_hordes 1 - if (IsPluginEnabled()) { - if (IsDebugEnabled()) { - LogMessage("[%s] SpawnMob(%d), HordesDisabled: %d TimerDuration: %f Minimum: %f Remaining: %f", \ - GT_MODULE_NAME, amount, g_bGT_HordesDisabled, L4D2_CTimerGetCountdownDuration(L4D2CT_MobSpawnTimer), \ - g_hCvarZMobSpawnMinIntervalNormal.FloatValue, L4D2_CTimerGetRemainingTime(L4D2CT_MobSpawnTimer)); - } - - if (g_bGT_HordesDisabled) { - if (amount < g_hCvarMobSpawnMinSize.IntValue || amount > g_hCvarMobSpawnMaxSize.IntValue) { - return Plugin_Continue; - } - - if (!L4D2_CTimerIsElapsed(L4D2CT_MobSpawnTimer)) { - return Plugin_Continue; - } - - float duration = L4D2_CTimerGetCountdownDuration(L4D2CT_MobSpawnTimer); - if (duration < g_hCvarZMobSpawnMinIntervalNormal.FloatValue || duration > g_hCvarZMobSpawnMaxIntervalNormal.FloatValue) { - return Plugin_Continue; - } - - return Plugin_Handled; - } - } - - return Plugin_Continue; + // quick fix. needs normalize_hordes 1 + if (IsPluginEnabled()) { + if (IsDebugEnabled()) { + LogMessage("[%s] SpawnMob(%d), HordesDisabled: %d TimerDuration: %f Minimum: %f Remaining: %f", \ + GT_MODULE_NAME, amount, g_bGT_HordesDisabled, L4D2_CTimerGetCountdownDuration(L4D2CT_MobSpawnTimer), \ + g_hCvarZMobSpawnMinIntervalNormal.FloatValue, L4D2_CTimerGetRemainingTime(L4D2CT_MobSpawnTimer)); + } + + if (g_bGT_HordesDisabled) { + if (amount < g_hCvarMobSpawnMinSize.IntValue || amount > g_hCvarMobSpawnMaxSize.IntValue) { + return Plugin_Continue; + } + + if (!L4D2_CTimerIsElapsed(L4D2CT_MobSpawnTimer)) { + return Plugin_Continue; + } + + float duration = L4D2_CTimerGetCountdownDuration(L4D2CT_MobSpawnTimer); + if (duration < g_hCvarZMobSpawnMinIntervalNormal.FloatValue || duration > g_hCvarZMobSpawnMaxIntervalNormal.FloatValue) { + return Plugin_Continue; + } + + return Plugin_Handled; + } + } + + return Plugin_Continue; } // Disable stasis when we're using GhostTank Action GT_OnTryOfferingTankBot(bool &enterStasis) { - g_iPasses++; + g_iPasses++; - if (IsPluginEnabled()) { - if (g_hGT_Enabled.BoolValue) { - enterStasis = false; - } + if (IsPluginEnabled()) { + if (g_hGT_Enabled.BoolValue) { + enterStasis = false; + } - if (g_hGT_RemoveEscapeTank.BoolValue && g_bGT_FinaleVehicleIncoming) { - return Plugin_Handled; - } - } + if (g_hGT_RemoveEscapeTank.BoolValue && g_bGT_FinaleVehicleIncoming) { + return Plugin_Handled; + } + } - return Plugin_Continue; + return Plugin_Continue; } public void GT_FinaleVehicleIncoming(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - g_bGT_FinaleVehicleIncoming = true; + g_bGT_FinaleVehicleIncoming = true; - if (g_bGT_TankIsInPlay && IsFakeClient(g_iGT_TankClient)) { - KickClient(g_iGT_TankClient); - GT_Reset(); - } + if (g_bGT_TankIsInPlay && IsFakeClient(g_iGT_TankClient)) { + KickClient(g_iGT_TankClient); + GT_Reset(); + } } public void GT_ItemPickup(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!g_bGT_TankIsInPlay) { - return; - } + if (!g_bGT_TankIsInPlay) { + return; + } - char item[MAX_ENTITY_NAME_LENGTH]; - hEvent.GetString("item", item, sizeof(item)); + char item[MAX_ENTITY_NAME_LENGTH]; + hEvent.GetString("item", item, sizeof(item)); - if (strcmp(item, "tank_claw") != 0) { - return; - } + if (strcmp(item, "tank_claw") != 0) { + return; + } - g_iGT_TankClient = GetClientOfUserId(hEvent.GetInt("userid")); + g_iGT_TankClient = GetClientOfUserId(hEvent.GetInt("userid")); - if (g_hGT_TankDeathTimer != null) { - KillTimer(g_hGT_TankDeathTimer); - g_hGT_TankDeathTimer = null; - } + if (g_hGT_TankDeathTimer != null) { + KillTimer(g_hGT_TankDeathTimer); + g_hGT_TankDeathTimer = null; + } } public void GT_RoundStart(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - g_bGT_FinaleVehicleIncoming = false; - GT_Reset(); + g_bGT_FinaleVehicleIncoming = false; + GT_Reset(); } public void GT_TankKilled(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!g_bGT_TankIsInPlay) { - return; - } + if (!g_bGT_TankIsInPlay) { + return; + } - int client = GetClientOfUserId(hEvent.GetInt("userid")); - if (client != g_iGT_TankClient) { - return; - } + int client = GetClientOfUserId(hEvent.GetInt("userid")); + if (client != g_iGT_TankClient) { + return; + } - g_hGT_TankDeathTimer = CreateTimer(1.0, GT_TankKilled_Timer); + g_hGT_TankDeathTimer = CreateTimer(1.0, GT_TankKilled_Timer); } public void GT_TankSpawn(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - int client = GetClientOfUserId(hEvent.GetInt("userid")); - g_iGT_TankClient = client; + int client = GetClientOfUserId(hEvent.GetInt("userid")); + g_iGT_TankClient = client; - if (g_bGT_TankIsInPlay) { - return; - } + if (g_bGT_TankIsInPlay) { + return; + } - g_bGT_TankIsInPlay = true; + g_bGT_TankIsInPlay = true; - if (g_hGT_DisableTankHordes.BoolValue) { - g_bGT_HordesDisabled = true; - } + if (g_hGT_DisableTankHordes.BoolValue) { + g_bGT_HordesDisabled = true; + } - if (!IsPluginEnabled() || !g_hGT_Enabled.BoolValue) { - return; - } + if (!IsPluginEnabled() || !g_hGT_Enabled.BoolValue) { + return; + } - float fFireImmunityTime = FIREIMMUNITY_TIME; - float fSelectionTime = g_hCvarDirectorTankLotterySelectionTime.FloatValue; + float fFireImmunityTime = FIREIMMUNITY_TIME; + float fSelectionTime = g_hCvarDirectorTankLotterySelectionTime.FloatValue; - if (IsFakeClient(client)) { - GT_PauseTank(); - CreateTimer(fSelectionTime, GT_ResumeTankTimer); - fFireImmunityTime += fSelectionTime; - } + if (IsFakeClient(client)) { + GT_PauseTank(); + CreateTimer(fSelectionTime, GT_ResumeTankTimer); + fFireImmunityTime += fSelectionTime; + } - CreateTimer(fFireImmunityTime, GT_FireImmunityTimer); + CreateTimer(fFireImmunityTime, GT_FireImmunityTimer); } public void GT_TankOnFire(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - int dmgtype = hEvent.GetInt("type"); + int dmgtype = hEvent.GetInt("type"); - if (!(dmgtype & DMG_BURN)) { //more performance - return; - } + if (!(dmgtype & DMG_BURN)) { //more performance + return; + } - if (!g_bGT_TankIsInPlay || !g_bGT_TankHasFireImmunity || !IsPluginEnabled() || !g_hGT_Enabled.BoolValue) { - return; - } + if (!g_bGT_TankIsInPlay || !g_bGT_TankHasFireImmunity || !IsPluginEnabled() || !g_hGT_Enabled.BoolValue) { + return; + } - int client = GetClientOfUserId(hEvent.GetInt("userid")); - if (client < 1 || g_iGT_TankClient != client || !IsClientInGame(client) || GetClientTeam(client) != L4D2Team_Infected) { - return; - } + int client = GetClientOfUserId(hEvent.GetInt("userid")); + if (client < 1 || g_iGT_TankClient != client || !IsClientInGame(client) || GetClientTeam(client) != L4D2Team_Infected) { + return; + } - ExtinguishEntity(client); + ExtinguishEntity(client); - int iSetHealth = GetClientHealth(client) + hEvent.GetInt("dmg_health"); - SetEntityHealth(client, iSetHealth); + int iSetHealth = GetClientHealth(client) + hEvent.GetInt("dmg_health"); + SetEntityHealth(client, iSetHealth); } public void GT_PlayerIncap(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!g_bGT_TankIsInPlay || !IsPluginEnabled() || !g_hGT_Enabled.BoolValue) { - return; - } + if (!g_bGT_TankIsInPlay || !IsPluginEnabled() || !g_hGT_Enabled.BoolValue) { + return; + } - char weapon[MAX_ENTITY_NAME_LENGTH]; - hEvent.GetString("weapon", weapon, sizeof(weapon)); + char weapon[MAX_ENTITY_NAME_LENGTH]; + hEvent.GetString("weapon", weapon, sizeof(weapon)); - if (strcmp(weapon, "tank_claw") != 0) { - return; - } + if (strcmp(weapon, "tank_claw") != 0) { + return; + } - int userid = hEvent.GetInt("userid"); - int client = GetClientOfUserId(userid); - if (client < 1 || !IsClientInGame(client) || GetClientTeam(client) != L4D2Team_Survivor) { - return; - } + int userid = hEvent.GetInt("userid"); + int client = GetClientOfUserId(userid); + if (client < 1 || !IsClientInGame(client) || GetClientTeam(client) != L4D2Team_Survivor) { + return; + } - SetEntProp(client, Prop_Send, "m_isIncapacitated", 0, 1); - SetEntityHealth(client, 1); + SetEntProp(client, Prop_Send, "m_isIncapacitated", 0, 1); + SetEntityHealth(client, 1); - CreateTimer(0.4, GT_IncapTimer, userid, TIMER_FLAG_NO_MAPCHANGE); + CreateTimer(0.4, GT_IncapTimer, userid, TIMER_FLAG_NO_MAPCHANGE); } public Action GT_IncapTimer(Handle hTimer, int userid) { - int client = GetClientOfUserId(userid); - if (client > 0) { - SetEntProp(client, Prop_Send, "m_isIncapacitated", 1, 1); - SetEntityHealth(client, g_hCvarSurvivorIncapHealth.IntValue); - } + int client = GetClientOfUserId(userid); + if (client > 0) { + SetEntProp(client, Prop_Send, "m_isIncapacitated", 1, 1); + SetEntityHealth(client, g_hCvarSurvivorIncapHealth.IntValue); + } - return Plugin_Stop; + return Plugin_Stop; } public Action GT_ResumeTankTimer(Handle hTimer) { - GT_ResumeTank(); + GT_ResumeTank(); - return Plugin_Stop; + return Plugin_Stop; } public Action GT_FireImmunityTimer(Handle hTimer) { - g_bGT_TankHasFireImmunity = false; + g_bGT_TankHasFireImmunity = false; - return Plugin_Stop; + return Plugin_Stop; } static void GT_PauseTank() { - g_hCvarTankThrowAllowRange.SetFloat(THROWRANGE); + g_hCvarTankThrowAllowRange.SetFloat(THROWRANGE); - if (!IsValidEntity(g_iGT_TankClient)) { - return; - } + if (!IsValidEntity(g_iGT_TankClient)) { + return; + } - SetEntityMoveType(g_iGT_TankClient, MOVETYPE_NONE); - SetEntProp(g_iGT_TankClient, Prop_Send, "m_isGhost", 1, 1); + SetEntityMoveType(g_iGT_TankClient, MOVETYPE_NONE); + SetEntProp(g_iGT_TankClient, Prop_Send, "m_isGhost", 1, 1); } static void GT_ResumeTank() { - g_hCvarTankThrowAllowRange.RestoreDefault(); + g_hCvarTankThrowAllowRange.RestoreDefault(); - if (!IsValidEntity(g_iGT_TankClient)) { - return; - } + if (!IsValidEntity(g_iGT_TankClient)) { + return; + } - SetEntityMoveType(g_iGT_TankClient, MOVETYPE_CUSTOM); - SetEntProp(g_iGT_TankClient, Prop_Send, "m_isGhost", 0, 1); + SetEntityMoveType(g_iGT_TankClient, MOVETYPE_CUSTOM); + SetEntProp(g_iGT_TankClient, Prop_Send, "m_isGhost", 0, 1); } static void GT_Reset() { - g_iPasses = 0; - g_hGT_TankDeathTimer = null; + g_iPasses = 0; + g_hGT_TankDeathTimer = null; - if (g_bGT_HordesDisabled) { - g_bGT_HordesDisabled = false; - } + if (g_bGT_HordesDisabled) { + g_bGT_HordesDisabled = false; + } - g_bGT_TankIsInPlay = false; - g_bGT_TankHasFireImmunity = true; + g_bGT_TankIsInPlay = false; + g_bGT_TankHasFireImmunity = true; } public Action GT_TankKilled_Timer(Handle hTimer) { - GT_Reset(); + GT_Reset(); - return Plugin_Stop; + return Plugin_Stop; } // For other modules to use stock bool GT_IsTankInPlay() { - return (g_bGT_TankIsInPlay); + return (g_bGT_TankIsInPlay); } diff --git a/addons/sourcemod/scripting/confoglcompmod/GhostWarp.sp b/addons/sourcemod/scripting/confoglcompmod/GhostWarp.sp index 076e7a23f..762798bf0 100644 --- a/addons/sourcemod/scripting/confoglcompmod/GhostWarp.sp +++ b/addons/sourcemod/scripting/confoglcompmod/GhostWarp.sp @@ -1,176 +1,176 @@ #if defined __ghost_warp_included - #endinput + #endinput #endif #define __ghost_warp_included -#define GW_MODULE_NAME "GhostWarp" +#define GW_MODULE_NAME "GhostWarp" static int - GW_iLastTarget[MAXPLAYERS + 1] = {-1, ...}; + GW_iLastTarget[MAXPLAYERS + 1] = {-1, ...}; static bool - GW_bEnabled = true, - GW_bReload = false, - GW_bDelay[MAXPLAYERS + 1] = {false, ...}; + GW_bEnabled = true, + GW_bReload = false, + GW_bDelay[MAXPLAYERS + 1] = {false, ...}; static ConVar - GW_hGhostWarp = null, - GW_hGhostWarpReload = null; + GW_hGhostWarp = null, + GW_hGhostWarpReload = null; void GW_OnModuleStart() { - // GhostWarp - GW_hGhostWarp = CreateConVarEx("ghost_warp", "1", "Sets whether infected ghosts can right click for warp to next survivor", _, true, 0.0, true, 1.0); - GW_hGhostWarpReload = CreateConVarEx("ghost_warp_reload", "0", "Sets whether to use mouse2 or reload for ghost warp.", _, true, 0.0, true, 1.0); + // GhostWarp + GW_hGhostWarp = CreateConVarEx("ghost_warp", "1", "Sets whether infected ghosts can right click for warp to next survivor", _, true, 0.0, true, 1.0); + GW_hGhostWarpReload = CreateConVarEx("ghost_warp_reload", "0", "Sets whether to use mouse2 or reload for ghost warp.", _, true, 0.0, true, 1.0); - // Ghost Warp - GW_bEnabled = GW_hGhostWarp.BoolValue; - GW_bReload = GW_hGhostWarpReload.BoolValue; + // Ghost Warp + GW_bEnabled = GW_hGhostWarp.BoolValue; + GW_bReload = GW_hGhostWarpReload.BoolValue; - GW_hGhostWarp.AddChangeHook(GW_ConVarsChanged); - GW_hGhostWarpReload.AddChangeHook(GW_ConVarsChanged); + GW_hGhostWarp.AddChangeHook(GW_ConVarsChanged); + GW_hGhostWarpReload.AddChangeHook(GW_ConVarsChanged); - RegConsoleCmd("sm_warptosurvivor", GW_Cmd_WarpToSurvivor); + RegConsoleCmd("sm_warptosurvivor", GW_Cmd_WarpToSurvivor); - HookEvent("player_death", GW_PlayerDeath_Event); - HookEvent("round_start", GW_RoundStart); + HookEvent("player_death", GW_PlayerDeath_Event); + HookEvent("round_start", GW_RoundStart); } public void GW_ConVarsChanged(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - GW_bEnabled = GW_hGhostWarp.BoolValue; - GW_bReload = GW_hGhostWarpReload.BoolValue; + GW_bEnabled = GW_hGhostWarp.BoolValue; + GW_bReload = GW_hGhostWarpReload.BoolValue; } bool GW_OnPlayerRunCmd(int iClient, int iButtons) { - if (!IsPluginEnabled() || !GW_bEnabled || GW_bDelay[iClient]) { - return false; - } + if (!IsPluginEnabled() || !GW_bEnabled || GW_bDelay[iClient]) { + return false; + } - if (/*!IsClientInGame(iClient) || */GetClientTeam(iClient) != L4D2Team_Infected || GetEntProp(iClient, Prop_Send, "m_isGhost", 1) != 1) { - return false; - } + if (/*!IsClientInGame(iClient) || */GetClientTeam(iClient) != L4D2Team_Infected || GetEntProp(iClient, Prop_Send, "m_isGhost", 1) != 1) { + return false; + } - if (GW_bReload && !(iButtons & IN_RELOAD)) { - return false; - } + if (GW_bReload && !(iButtons & IN_RELOAD)) { + return false; + } - if (!GW_bReload && !(iButtons & IN_ATTACK2)) { - return false; - } + if (!GW_bReload && !(iButtons & IN_ATTACK2)) { + return false; + } - GW_bDelay[iClient] = true; - CreateTimer(0.25, GW_ResetDelay, iClient, TIMER_FLAG_NO_MAPCHANGE); - GW_WarpToSurvivor(iClient, 0); + GW_bDelay[iClient] = true; + CreateTimer(0.25, GW_ResetDelay, iClient, TIMER_FLAG_NO_MAPCHANGE); + GW_WarpToSurvivor(iClient, 0); - return true; + return true; } public void GW_RoundStart(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - for (int i = 1; i <= MaxClients; i++) { - GW_bDelay[i] = false; - GW_iLastTarget[i] = -1; - } + for (int i = 1; i <= MaxClients; i++) { + GW_bDelay[i] = false; + GW_iLastTarget[i] = -1; + } } public void GW_PlayerDeath_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - int iClient = GetClientOfUserId(hEvent.GetInt("userid")); + int iClient = GetClientOfUserId(hEvent.GetInt("userid")); - GW_iLastTarget[iClient] = -1; + GW_iLastTarget[iClient] = -1; } public Action GW_ResetDelay(Handle hTimer, any iClient) { - GW_bDelay[iClient] = false; + GW_bDelay[iClient] = false; - return Plugin_Stop; + return Plugin_Stop; } public Action GW_Cmd_WarpToSurvivor(int iClient, int iArgs) { - if (iClient < 1 || iArgs != 1) { - return Plugin_Handled; - } + if (iClient < 1 || iArgs != 1) { + return Plugin_Handled; + } - if (!IsPluginEnabled() || !GW_bEnabled) { - return Plugin_Handled; - } + if (!IsPluginEnabled() || !GW_bEnabled) { + return Plugin_Handled; + } - if (GetClientTeam(iClient) != L4D2Team_Infected || GetEntProp(iClient, Prop_Send, "m_isGhost", 1) != 1) { - return Plugin_Handled; - } + if (GetClientTeam(iClient) != L4D2Team_Infected || GetEntProp(iClient, Prop_Send, "m_isGhost", 1) != 1) { + return Plugin_Handled; + } - char sBuffer[2]; - GetCmdArg(1, sBuffer, sizeof(sBuffer)); - if (strlen(sBuffer) == 0) { - return Plugin_Handled; - } + char sBuffer[2]; + GetCmdArg(1, sBuffer, sizeof(sBuffer)); + if (strlen(sBuffer) == 0) { + return Plugin_Handled; + } - int iCharacter = StringToInt(sBuffer); - GW_WarpToSurvivor(iClient, iCharacter); + int iCharacter = StringToInt(sBuffer); + GW_WarpToSurvivor(iClient, iCharacter); - return Plugin_Handled; + return Plugin_Handled; } static void GW_WarpToSurvivor(int iClient, int iCharacter) { - int iTarget = 0; + int iTarget = 0; - if (iCharacter <= 0) { - iTarget = GW_FindNextSurvivor(iClient, GW_iLastTarget[iClient]); - } else if (iCharacter <= 4) { - iTarget = GetSurvivorIndex(iCharacter - 1); - } else { - return; - } + if (iCharacter <= 0) { + iTarget = GW_FindNextSurvivor(iClient, GW_iLastTarget[iClient]); + } else if (iCharacter <= 4) { + iTarget = GetSurvivorIndex(iCharacter - 1); + } else { + return; + } - if (iTarget == 0) { - return; - } + if (iTarget == 0) { + return; + } - // Prevent people from spawning and then warp to survivor - SetEntProp(iClient, Prop_Send, "m_ghostSpawnState", SPAWNFLAG_TOOCLOSE); + // Prevent people from spawning and then warp to survivor + SetEntProp(iClient, Prop_Send, "m_ghostSpawnState", SPAWNFLAG_TOOCLOSE); - float fPosition[3], fAnglestarget[3]; - GetClientAbsOrigin(iTarget, fPosition); - GetClientAbsAngles(iTarget, fAnglestarget); + float fPosition[3], fAnglestarget[3]; + GetClientAbsOrigin(iTarget, fPosition); + GetClientAbsAngles(iTarget, fAnglestarget); - TeleportEntity(iClient, fPosition, fAnglestarget, NULL_VECTOR); + TeleportEntity(iClient, fPosition, fAnglestarget, NULL_VECTOR); } static int GW_FindNextSurvivor(int iClient, int iCharacter) { - if (!IsAnySurvivorsAlive()) { - return 0; - } + if (!IsAnySurvivorsAlive()) { + return 0; + } - bool bHavelooped = false; - iCharacter++; + bool bHavelooped = false; + iCharacter++; - if (iCharacter >= NUM_OF_SURVIVORS) { - iCharacter = 0; - } + if (iCharacter >= NUM_OF_SURVIVORS) { + iCharacter = 0; + } - for (int i = iCharacter; i <= MaxClients; i++) { - if (i >= NUM_OF_SURVIVORS) { - if (bHavelooped) { - break; - } + for (int i = iCharacter; i <= MaxClients; i++) { + if (i >= NUM_OF_SURVIVORS) { + if (bHavelooped) { + break; + } - bHavelooped = true; - i = 0; - } + bHavelooped = true; + i = 0; + } - if (GetSurvivorIndex(i) == 0) { - continue; - } + if (GetSurvivorIndex(i) == 0) { + continue; + } - GW_iLastTarget[iClient] = i; - return GetSurvivorIndex(i); - } + GW_iLastTarget[iClient] = i; + return GetSurvivorIndex(i); + } - return 0; + return 0; } diff --git a/addons/sourcemod/scripting/confoglcompmod/ItemTracking.sp b/addons/sourcemod/scripting/confoglcompmod/ItemTracking.sp index 9ef1f9082..546f6b529 100644 --- a/addons/sourcemod/scripting/confoglcompmod/ItemTracking.sp +++ b/addons/sourcemod/scripting/confoglcompmod/ItemTracking.sp @@ -3,7 +3,7 @@ #endif #define __item_tracking_included -#define IT_MODULE_NAME "ItemTracking" +#define IT_MODULE_NAME "ItemTracking" // Item lists for tracking/decoding/etc enum /*ItemList*/ @@ -207,7 +207,7 @@ public void _IT_RoundStartEvent(Event hEvent, const char[] sEventName, bool bDon g_iSaferoomCount[START_SAFEROOM - 1] = 0; g_iSaferoomCount[END_SAFEROOM - 1] = 0; - // Since OnMapStart only happens once on scavenge mode, g_bIsRound1Over can only be once false because + // Since OnMapStart only happens once on scavenge mode, g_bIsRound1Over can only be once false because // evey round_end event will turn it to true. This casues items spawning at the same position during the whole scavenge match. if (IsScavengeMode()) { if (!InSecondHalfOfRound()) { @@ -275,7 +275,7 @@ static void GenerateStoredSpawns() }*/ // Produces the lookup trie for weapon spawn entities -// to translate to our ADT array of spawns +// to translate to our ADT array of spawns static void CreateItemListTrie() { g_hItemListTrie = new StringMap(); @@ -313,7 +313,7 @@ static void KillRegisteredItems() // Exception for if the item is in a player's inventory. if (bKeepPlayerItems && HasEntProp(i, Prop_Send, "m_hOwner") && GetEntPropEnt(i, Prop_Send, "m_hOwner") > 0) continue; - + KillEntity(i); /*if (!AcceptEntityInput(i, "kill")) { Debug_LogError(IT_MODULE_NAME, "Error killing instance of item %s", g_sItemNames[itemindex][IN_longname]); diff --git a/addons/sourcemod/scripting/confoglcompmod/MapInfo.sp b/addons/sourcemod/scripting/confoglcompmod/MapInfo.sp index a095b785d..8708758c8 100644 --- a/addons/sourcemod/scripting/confoglcompmod/MapInfo.sp +++ b/addons/sourcemod/scripting/confoglcompmod/MapInfo.sp @@ -1,434 +1,434 @@ #if defined __map_info_included - #endinput + #endinput #endif #define __map_info_included -#define DEBUG_MI 0 -#define MI_MODULE_NAME "MapInfo" +#define DEBUG_MI 0 +#define MI_MODULE_NAME "MapInfo" static int - iMapMaxDistance = 0, - iIsInEditMode[MAXPLAYERS + 1] = {0, ...}; + iMapMaxDistance = 0, + iIsInEditMode[MAXPLAYERS + 1] = {0, ...}; static bool - MapDataAvailable = false; + MapDataAvailable = false; static float - Start_Point[3] = {0.0, ...}, - End_Point[3] = {0.0, ...}, - Start_Dist = 0.0, - Start_Extra_Dist = 0.0, - End_Dist = 0.0, - fLocTemp[MAXPLAYERS + 1][3]; + Start_Point[3] = {0.0, ...}, + End_Point[3] = {0.0, ...}, + Start_Dist = 0.0, + Start_Extra_Dist = 0.0, + End_Dist = 0.0, + fLocTemp[MAXPLAYERS + 1][3]; static KeyValues - kMIData = null; + kMIData = null; void MI_APL() { - CreateNative("LGO_IsMapDataAvailable", _native_IsMapDataAvailable); - CreateNative("LGO_GetMapValueInt", _native_GetMapValueInt); - CreateNative("LGO_GetMapValueFloat", _native_GetMapValueFloat); - CreateNative("LGO_GetMapValueVector", _native_GetMapValueVector); - CreateNative("LGO_GetMapValueString", _native_GetMapValueString); - CreateNative("LGO_CopyMapSubsection", _native_CopyMapSubsection); + CreateNative("LGO_IsMapDataAvailable", _native_IsMapDataAvailable); + CreateNative("LGO_GetMapValueInt", _native_GetMapValueInt); + CreateNative("LGO_GetMapValueFloat", _native_GetMapValueFloat); + CreateNative("LGO_GetMapValueVector", _native_GetMapValueVector); + CreateNative("LGO_GetMapValueString", _native_GetMapValueString); + CreateNative("LGO_CopyMapSubsection", _native_CopyMapSubsection); } void MI_OnModuleStart() { - MI_KV_Load(); + MI_KV_Load(); - //RegAdminCmd("confogl_midata_reload", MI_KV_CmdReload, ADMFLAG_CONFIG); - RegAdminCmd("confogl_midata_save", MI_KV_CmdSave, ADMFLAG_CONFIG); - RegAdminCmd("confogl_save_location", MI_KV_CmdSaveLoc, ADMFLAG_CONFIG); + //RegAdminCmd("confogl_midata_reload", MI_KV_CmdReload, ADMFLAG_CONFIG); + RegAdminCmd("confogl_midata_save", MI_KV_CmdSave, ADMFLAG_CONFIG); + RegAdminCmd("confogl_save_location", MI_KV_CmdSaveLoc, ADMFLAG_CONFIG); - HookEvent("player_disconnect", PlayerDisconnect_Event); + HookEvent("player_disconnect", PlayerDisconnect_Event); } void MI_OnMapStart() { - MI_KV_UpdateMapInfo(); + MI_KV_UpdateMapInfo(); } void MI_OnMapEnd() { - kMIData.Rewind(); + kMIData.Rewind(); - MapDataAvailable = false; + MapDataAvailable = false; - // 0 - server index? - for (int i = 0; i <= MaxClients; i++) { - iIsInEditMode[i] = 0; - } + // 0 - server index? + for (int i = 0; i <= MaxClients; i++) { + iIsInEditMode[i] = 0; + } } void MI_OnModuleEnd() { - MI_KV_Close(); + MI_KV_Close(); } public void PlayerDisconnect_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - int client = GetClientOfUserId(hEvent.GetInt("userid")); - if (client > 0 && client <= MaxClients) { - iIsInEditMode[client] = 0; - } + int client = GetClientOfUserId(hEvent.GetInt("userid")); + if (client > 0 && client <= MaxClients) { + iIsInEditMode[client] = 0; + } } public Action MI_KV_CmdSave(int client, int args) { - char sCurMap[128]; - GetCurrentMap(sCurMap, sizeof(sCurMap)); + char sCurMap[128]; + GetCurrentMap(sCurMap, sizeof(sCurMap)); - if (kMIData.JumpToKey(sCurMap, true)) { - kMIData.SetVector("start_point", Start_Point); - kMIData.SetFloat("start_dist", Start_Dist); - kMIData.SetFloat("start_extra_dist", Start_Extra_Dist); + if (kMIData.JumpToKey(sCurMap, true)) { + kMIData.SetVector("start_point", Start_Point); + kMIData.SetFloat("start_dist", Start_Dist); + kMIData.SetFloat("start_extra_dist", Start_Extra_Dist); - char sNameBuff[PLATFORM_MAX_PATH]; - BuildConfigPath(sNameBuff, sizeof(sNameBuff), "mapinfo.txt"); + char sNameBuff[PLATFORM_MAX_PATH]; + BuildConfigPath(sNameBuff, sizeof(sNameBuff), "mapinfo.txt"); - kMIData.Rewind(); - kMIData.ExportToFile(sNameBuff); + kMIData.Rewind(); + kMIData.ExportToFile(sNameBuff); - ReplyToCommand(client, "%s has been added to %s.", sCurMap, sNameBuff); - } + ReplyToCommand(client, "%s has been added to %s.", sCurMap, sNameBuff); + } - return Plugin_Handled; + return Plugin_Handled; } public Action MI_KV_CmdSaveLoc(int client, int args) { - bool updateinfo = false; - char sCurMap[128]; - GetCurrentMap(sCurMap, sizeof(sCurMap)); + bool updateinfo = false; + char sCurMap[128]; + GetCurrentMap(sCurMap, sizeof(sCurMap)); - if (!iIsInEditMode[client]) { - if (!args) { - ReplyToCommand(client, "Move to the location of the medkits, then enter the point type (start_point or end_point)"); - return Plugin_Handled; - } + if (!iIsInEditMode[client]) { + if (!args) { + ReplyToCommand(client, "Move to the location of the medkits, then enter the point type (start_point or end_point)"); + return Plugin_Handled; + } - char sBuffer[16]; - GetCmdArg(1, sBuffer, sizeof(sBuffer)); + char sBuffer[16]; + GetCmdArg(1, sBuffer, sizeof(sBuffer)); - if (strcmp(sBuffer, "start_point", true) == 0) { - iIsInEditMode[client] = 1; - ReplyToCommand(client, "Move a few feet from the medkits and enter this command again to set the start_dist for this point"); - } else if (strcmp(sBuffer, "end_point", true) == 0) { - iIsInEditMode[client] = 2; - ReplyToCommand(client, "Move to the farthest point in the saferoom and enter this command again to set the end_dist for this point"); - } else { - ReplyToCommand(client, "Please enter the location type: start_point, end_point"); - return Plugin_Handled; - } + if (strcmp(sBuffer, "start_point", true) == 0) { + iIsInEditMode[client] = 1; + ReplyToCommand(client, "Move a few feet from the medkits and enter this command again to set the start_dist for this point"); + } else if (strcmp(sBuffer, "end_point", true) == 0) { + iIsInEditMode[client] = 2; + ReplyToCommand(client, "Move to the farthest point in the saferoom and enter this command again to set the end_dist for this point"); + } else { + ReplyToCommand(client, "Please enter the location type: start_point, end_point"); + return Plugin_Handled; + } - if (kMIData.JumpToKey(sCurMap, true)) { - GetClientAbsOrigin(client, fLocTemp[client]); - kMIData.SetVector(sBuffer, fLocTemp[client]); - } + if (kMIData.JumpToKey(sCurMap, true)) { + GetClientAbsOrigin(client, fLocTemp[client]); + kMIData.SetVector(sBuffer, fLocTemp[client]); + } - updateinfo = true; - } else if (iIsInEditMode[client] == 1) { - iIsInEditMode[client] = 3; + updateinfo = true; + } else if (iIsInEditMode[client] == 1) { + iIsInEditMode[client] = 3; - float fDistLoc[3], fDistance; - GetClientAbsOrigin(client, fDistLoc); + float fDistLoc[3], fDistance; + GetClientAbsOrigin(client, fDistLoc); - fDistance = GetVectorDistance(fDistLoc, fLocTemp[client]); - if (kMIData.JumpToKey(sCurMap, true)) { - kMIData.SetFloat("start_dist", fDistance); - } + fDistance = GetVectorDistance(fDistLoc, fLocTemp[client]); + if (kMIData.JumpToKey(sCurMap, true)) { + kMIData.SetFloat("start_dist", fDistance); + } - ReplyToCommand(client, "Move to the farthest point in the saferoom and enter this command again to set start_extra_dist for this point"); + ReplyToCommand(client, "Move to the farthest point in the saferoom and enter this command again to set start_extra_dist for this point"); - updateinfo = true; - } else if (iIsInEditMode[client] == 2) { - iIsInEditMode[client] = 0; + updateinfo = true; + } else if (iIsInEditMode[client] == 2) { + iIsInEditMode[client] = 0; - float fDistLoc[3], fDistance; - GetClientAbsOrigin(client, fDistLoc); + float fDistLoc[3], fDistance; + GetClientAbsOrigin(client, fDistLoc); - fDistance = GetVectorDistance(fDistLoc, fLocTemp[client]); - if (kMIData.JumpToKey(sCurMap, true)) { - kMIData.SetFloat("end_dist", fDistance); - } + fDistance = GetVectorDistance(fDistLoc, fLocTemp[client]); + if (kMIData.JumpToKey(sCurMap, true)) { + kMIData.SetFloat("end_dist", fDistance); + } - updateinfo = true; - } else if (iIsInEditMode[client] == 3) { - iIsInEditMode[client] = 0; + updateinfo = true; + } else if (iIsInEditMode[client] == 3) { + iIsInEditMode[client] = 0; - float fDistLoc[3], fDistance; - GetClientAbsOrigin(client, fDistLoc); + float fDistLoc[3], fDistance; + GetClientAbsOrigin(client, fDistLoc); - fDistance = GetVectorDistance(fDistLoc, fLocTemp[client]); - if (kMIData.JumpToKey(sCurMap, true)) { - kMIData.SetFloat("start_extra_dist", fDistance); - } + fDistance = GetVectorDistance(fDistLoc, fLocTemp[client]); + if (kMIData.JumpToKey(sCurMap, true)) { + kMIData.SetFloat("start_extra_dist", fDistance); + } - updateinfo = true; - } + updateinfo = true; + } - if (updateinfo) { - char sNameBuff[PLATFORM_MAX_PATH]; - BuildConfigPath(sNameBuff, sizeof(sNameBuff), "mapinfo.txt"); + if (updateinfo) { + char sNameBuff[PLATFORM_MAX_PATH]; + BuildConfigPath(sNameBuff, sizeof(sNameBuff), "mapinfo.txt"); - kMIData.Rewind(); - kMIData.ExportToFile(sNameBuff); + kMIData.Rewind(); + kMIData.ExportToFile(sNameBuff); - ReplyToCommand(client, "mapinfo.txt has been updated!"); - } + ReplyToCommand(client, "mapinfo.txt has been updated!"); + } - return Plugin_Handled; + return Plugin_Handled; } static void MI_KV_Close() { - if (kMIData != null) { - delete kMIData; - kMIData = null; - } + if (kMIData != null) { + delete kMIData; + kMIData = null; + } } static void MI_KV_Load() { - char sNameBuff[PLATFORM_MAX_PATH]; + char sNameBuff[PLATFORM_MAX_PATH]; - if (DEBUG_MI || IsDebugEnabled()) { - LogMessage("[%s] Loading MapInfo KeyValues", MI_MODULE_NAME); - } + if (DEBUG_MI || IsDebugEnabled()) { + LogMessage("[%s] Loading MapInfo KeyValues", MI_MODULE_NAME); + } - kMIData = new KeyValues("MapInfo"); - BuildConfigPath(sNameBuff, sizeof(sNameBuff), "mapinfo.txt"); //Build our filepath - if (!kMIData.ImportFromFile(sNameBuff)) { - Debug_LogError(MI_MODULE_NAME, "Couldn't load MapInfo data!"); - MI_KV_Close(); - return; - } + kMIData = new KeyValues("MapInfo"); + BuildConfigPath(sNameBuff, sizeof(sNameBuff), "mapinfo.txt"); //Build our filepath + if (!kMIData.ImportFromFile(sNameBuff)) { + Debug_LogError(MI_MODULE_NAME, "Couldn't load MapInfo data!"); + MI_KV_Close(); + return; + } } static void MI_KV_UpdateMapInfo() { - char sCurMap[128]; - GetCurrentMap(sCurMap, sizeof(sCurMap)); + char sCurMap[128]; + GetCurrentMap(sCurMap, sizeof(sCurMap)); - if (kMIData.JumpToKey(sCurMap)) { - kMIData.GetVector("start_point", Start_Point); - kMIData.GetVector("end_point", End_Point); + if (kMIData.JumpToKey(sCurMap)) { + kMIData.GetVector("start_point", Start_Point); + kMIData.GetVector("end_point", End_Point); - Start_Dist = kMIData.GetFloat("start_dist"); - Start_Extra_Dist = kMIData.GetFloat("start_extra_dist"); - End_Dist = kMIData.GetFloat("end_dist"); + Start_Dist = kMIData.GetFloat("start_dist"); + Start_Extra_Dist = kMIData.GetFloat("start_extra_dist"); + End_Dist = kMIData.GetFloat("end_dist"); - iMapMaxDistance = kMIData.GetNum("max_distance", -1); + iMapMaxDistance = kMIData.GetNum("max_distance", -1); - // kMIData.Rewind(); - MapDataAvailable = true; - } else { - MapDataAvailable = false; - Start_Dist = FindStartPointHeuristic(Start_Point); - if (Start_Dist > 0.0) { - // This is the largest Start Extra Dist we've encountered; - // May be too much - Start_Extra_Dist = 500.0; - } else { - ZeroVector(Start_Point); - Start_Dist = -1.0; - Start_Extra_Dist = -1.0; - } + // kMIData.Rewind(); + MapDataAvailable = true; + } else { + MapDataAvailable = false; + Start_Dist = FindStartPointHeuristic(Start_Point); + if (Start_Dist > 0.0) { + // This is the largest Start Extra Dist we've encountered; + // May be too much + Start_Extra_Dist = 500.0; + } else { + ZeroVector(Start_Point); + Start_Dist = -1.0; + Start_Extra_Dist = -1.0; + } - ZeroVector(End_Point); - End_Dist = -1.0; - iMapMaxDistance = -1; - LogMessage("[%s] MapInfo for %s is missing.", MI_MODULE_NAME, sCurMap); - } + ZeroVector(End_Point); + End_Dist = -1.0; + iMapMaxDistance = -1; + LogMessage("[%s] MapInfo for %s is missing.", MI_MODULE_NAME, sCurMap); + } - // Let's leave MIData on the current map - // kMIData.Rewind(); + // Let's leave MIData on the current map + // kMIData.Rewind(); } static float FindStartPointHeuristic(float result[3]) { - char entclass[MAX_ENTITY_NAME_LENGTH]; - float kitOrigin[4][3], averageOrigin[3]; - int kits = 0, entcount = GetEntityCount(); + char entclass[MAX_ENTITY_NAME_LENGTH]; + float kitOrigin[4][3], averageOrigin[3]; + int kits = 0, entcount = GetEntityCount(); - for (int iEntity = (MaxClients + 1); iEntity <= entcount && kits < 4; iEntity++) { - if (!IsValidEdict(iEntity)) { - continue; - } + for (int iEntity = (MaxClients + 1); iEntity <= entcount && kits < 4; iEntity++) { + if (!IsValidEdict(iEntity)) { + continue; + } - GetEdictClassname(iEntity, entclass, sizeof(entclass)); - if (strcmp(entclass, "weapon_first_aid_kit_spawn") == 0) { - GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", kitOrigin[kits]); - AddToVector(averageOrigin, kitOrigin[kits]); - kits++; - } - } + GetEdictClassname(iEntity, entclass, sizeof(entclass)); + if (strcmp(entclass, "weapon_first_aid_kit_spawn") == 0) { + GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", kitOrigin[kits]); + AddToVector(averageOrigin, kitOrigin[kits]); + kits++; + } + } - if (kits < 4) { - return -1.0; - } + if (kits < 4) { + return -1.0; + } - ScaleVector(averageOrigin, 0.25); + ScaleVector(averageOrigin, 0.25); - float greatestDist, tempDist; - for (int i = 0; i < 4; i++) { - tempDist = GetVectorDistance(averageOrigin, kitOrigin[i]); + float greatestDist, tempDist; + for (int i = 0; i < 4; i++) { + tempDist = GetVectorDistance(averageOrigin, kitOrigin[i]); - if (tempDist > greatestDist) { - greatestDist = tempDist; - } - } + if (tempDist > greatestDist) { + greatestDist = tempDist; + } + } - CopyVector(result, averageOrigin); - return (greatestDist + 1.0); + CopyVector(result, averageOrigin); + return (greatestDist + 1.0); } // Old Functions (Avoid using these, use the ones below) stock float GetMapStartOriginX() { - return Start_Point[0]; + return Start_Point[0]; } stock float GetMapStartOriginY() { - return Start_Point[1]; + return Start_Point[1]; } stock float GetMapStartOriginZ() { - return Start_Point[2]; + return Start_Point[2]; } stock float GetMapEndOriginX() { - return End_Point[0]; + return End_Point[0]; } stock float GetMapEndOriginY() { - return End_Point[1]; + return End_Point[1]; } stock float GetMapEndOriginZ() { - return End_Point[2]; + return End_Point[2]; } // New Super Awesome Functions!!! stock int GetCustomMapMaxScore() { - return iMapMaxDistance; + return iMapMaxDistance; } stock bool IsMapDataAvailable() { - return MapDataAvailable; + return MapDataAvailable; } /** * Determines if an entity is in a start or end saferoom (based on mapinfo.txt or automatically generated info) * - * @param ent The entity to be checked - * @param saferoom START_SAFEROOM (1) = Start saferoom, END_SAFEROOM (2) = End saferoom (including finale area), 3 = both - * @return True if it is one of the specified saferoom(s) - * False if it is not in the specified saferoom(s) - * False if no saferoom specified + * @param ent The entity to be checked + * @param saferoom START_SAFEROOM (1) = Start saferoom, END_SAFEROOM (2) = End saferoom (including finale area), 3 = both + * @return True if it is one of the specified saferoom(s) + * False if it is not in the specified saferoom(s) + * False if no saferoom specified */ stock bool IsEntityInSaferoom(int ent, int saferoom = 3) //ItemTracking (commented out) { - float origins[3]; - GetEntPropVector(ent, Prop_Send, "m_vecOrigin", origins); + float origins[3]; + GetEntPropVector(ent, Prop_Send, "m_vecOrigin", origins); - if ((saferoom & START_SAFEROOM) - && (GetVectorDistance(origins, Start_Point) <= ((Start_Extra_Dist > Start_Dist) ? Start_Extra_Dist : Start_Dist)) - ) { - return true; - } else if ((saferoom & END_SAFEROOM) && (GetVectorDistance(origins, End_Point) <= End_Dist)) { - return true; - } else { - return false; - } + if ((saferoom & START_SAFEROOM) + && (GetVectorDistance(origins, Start_Point) <= ((Start_Extra_Dist > Start_Dist) ? Start_Extra_Dist : Start_Dist)) + ) { + return true; + } else if ((saferoom & END_SAFEROOM) && (GetVectorDistance(origins, End_Point) <= End_Dist)) { + return true; + } else { + return false; + } -// return ((GetVectorDistance(origins, Start_Point) <= ((Start_Extra_Dist > Start_Dist) ? Start_Extra_Dist : Start_Dist)) -// || (GetVectorDistance(origins, End_Point) <= End_Dist)); +// return ((GetVectorDistance(origins, Start_Point) <= ((Start_Extra_Dist > Start_Dist) ? Start_Extra_Dist : Start_Dist)) +// || (GetVectorDistance(origins, End_Point) <= End_Dist)); } stock int GetMapValueInt(const char[] key, int defvalue = 0) //BossSpawning { - return kMIData.GetNum(key, defvalue); + return kMIData.GetNum(key, defvalue); } stock float GetMapValueFloat(const char[] key, float defvalue = 0.0) //BossSpawning { - return kMIData.GetFloat(key, defvalue); + return kMIData.GetFloat(key, defvalue); } stock void GetMapValueVector(const char[] key, float vector[3], float defvalue[3] = NULL_VECTOR) //BossSpawning { - kMIData.GetVector(key, vector, defvalue); + kMIData.GetVector(key, vector, defvalue); } stock void GetMapValueString(const char[] key, char[] value, const int maxlength, const char[] defvalue) { - kMIData.GetString(key, value, maxlength, defvalue); + kMIData.GetString(key, value, maxlength, defvalue); } stock void CopyMapSubsection(KeyValues kv, const char[] section) //ItemTracking { - if (kMIData.JumpToKey(section, false)) { - kv.Import(kMIData); // KvCopySubkeys(kMIData, kv); - kMIData.GoBack(); - } + if (kMIData.JumpToKey(section, false)) { + kv.Import(kMIData); // KvCopySubkeys(kMIData, kv); + kMIData.GoBack(); + } } stock void GetMapStartOrigin(float origin[3]) //not used { - origin[0] = Start_Point[0]; - origin[1] = Start_Point[1]; - origin[2] = Start_Point[2]; + origin[0] = Start_Point[0]; + origin[1] = Start_Point[1]; + origin[2] = Start_Point[2]; } stock void GetMapEndOrigin(float origin[3]) //not used { - origin[0] = End_Point[0]; - origin[1] = End_Point[1]; - origin[2] = End_Point[2]; + origin[0] = End_Point[0]; + origin[1] = End_Point[1]; + origin[2] = End_Point[2]; } stock float GetMapEndDist() //WeaponInformation use it { - return End_Dist; + return End_Dist; } stock float GetMapStartDist() //WeaponInformation use it { - return Start_Dist; + return Start_Dist; } stock float GetMapStartExtraDist() //WeaponInformation use it { - return Start_Extra_Dist; + return Start_Extra_Dist; } // Natives public int _native_IsMapDataAvailable(Handle plugin, int numParams) { - return IsMapDataAvailable(); + return IsMapDataAvailable(); } public int _native_GetMapValueInt(Handle plugin, int numParams) { - int iLen = 0; - GetNativeStringLength(1, iLen); + int iLen = 0; + GetNativeStringLength(1, iLen); - int iNewLen = iLen + 1; - char[] sKey = new char[iNewLen]; - GetNativeString(1, sKey, iNewLen); + int iNewLen = iLen + 1; + char[] sKey = new char[iNewLen]; + GetNativeString(1, sKey, iNewLen); - int iDefVal = GetNativeCell(2); - return GetMapValueInt(sKey, iDefVal); + int iDefVal = GetNativeCell(2); + return GetMapValueInt(sKey, iDefVal); } #if SOURCEMOD_V_MINOR > 9 @@ -437,75 +437,75 @@ public any _native_GetMapValueFloat(Handle plugin, int numParams) public int _native_GetMapValueFloat(Handle plugin, int numParams) #endif { - int iLen = 0; - GetNativeStringLength(1, iLen); + int iLen = 0; + GetNativeStringLength(1, iLen); - int iNewLen = iLen + 1; - char[] sKey = new char[iNewLen]; - GetNativeString(1, sKey, iNewLen); + int iNewLen = iLen + 1; + char[] sKey = new char[iNewLen]; + GetNativeString(1, sKey, iNewLen); - float iDefVal = GetNativeCell(2); + float iDefVal = GetNativeCell(2); #if SOURCEMOD_V_MINOR > 9 - return GetMapValueFloat(sKey, iDefVal); + return GetMapValueFloat(sKey, iDefVal); #else - return view_as(GetMapValueFloat(sKey, iDefVal)); + return view_as(GetMapValueFloat(sKey, iDefVal)); #endif } public int _native_GetMapValueVector(Handle plugin, int numParams) { - int iLen = 0; - GetNativeStringLength(1, iLen); + int iLen = 0; + GetNativeStringLength(1, iLen); - int iNewLen = iLen + 1; - char[] sKey = new char[iNewLen]; - GetNativeString(1, sKey, iNewLen); + int iNewLen = iLen + 1; + char[] sKey = new char[iNewLen]; + GetNativeString(1, sKey, iNewLen); - float fDefVal[3], fValue[3]; - GetNativeArray(3, fDefVal, sizeof(fDefVal)); - GetMapValueVector(sKey, fValue, fDefVal); + float fDefVal[3], fValue[3]; + GetNativeArray(3, fDefVal, sizeof(fDefVal)); + GetMapValueVector(sKey, fValue, fDefVal); - SetNativeArray(2, fValue, sizeof(fValue)); - return 1; + SetNativeArray(2, fValue, sizeof(fValue)); + return 1; } public int _native_GetMapValueString(Handle plugin, int numParams) { - int iLen = 0; - GetNativeStringLength(1, iLen); + int iLen = 0; + GetNativeStringLength(1, iLen); - int iNewLen = iLen + 1; - char[] sKey = new char[iNewLen]; - GetNativeString(1, sKey, iNewLen); + int iNewLen = iLen + 1; + char[] sKey = new char[iNewLen]; + GetNativeString(1, sKey, iNewLen); - GetNativeStringLength(4, iLen); + GetNativeStringLength(4, iLen); - iNewLen = iLen + 1; - char[] sDefVal = new char[iNewLen]; - GetNativeString(4, sDefVal, iNewLen); + iNewLen = iLen + 1; + char[] sDefVal = new char[iNewLen]; + GetNativeString(4, sDefVal, iNewLen); - iLen = GetNativeCell(3); + iLen = GetNativeCell(3); - iNewLen = iLen + 1; - char[] sBuf = new char[iNewLen]; - GetMapValueString(sKey, sBuf, iNewLen, sDefVal); + iNewLen = iLen + 1; + char[] sBuf = new char[iNewLen]; + GetMapValueString(sKey, sBuf, iNewLen, sDefVal); - SetNativeString(2, sBuf, iNewLen); - return 1; + SetNativeString(2, sBuf, iNewLen); + return 1; } public int _native_CopyMapSubsection(Handle plugin, int numParams) { - int iLen = 0; - GetNativeStringLength(2, iLen); + int iLen = 0; + GetNativeStringLength(2, iLen); - int iNewLen = iLen + 1; - char[] sKey = new char[iNewLen]; - GetNativeString(2, sKey, iNewLen); + int iNewLen = iLen + 1; + char[] sKey = new char[iNewLen]; + GetNativeString(2, sKey, iNewLen); - KeyValues hKv = GetNativeCell(1); - CopyMapSubsection(hKv, sKey); + KeyValues hKv = GetNativeCell(1); + CopyMapSubsection(hKv, sKey); - return 1; + return 1; } diff --git a/addons/sourcemod/scripting/confoglcompmod/PasswordSystem.sp b/addons/sourcemod/scripting/confoglcompmod/PasswordSystem.sp index 8ab847d3e..99d2d9c1b 100644 --- a/addons/sourcemod/scripting/confoglcompmod/PasswordSystem.sp +++ b/addons/sourcemod/scripting/confoglcompmod/PasswordSystem.sp @@ -1,166 +1,166 @@ #if defined __password_system_included - #endinput + #endinput #endif #define __password_system_included -#define PS_MODULE_NAME "PasswordSystem" +#define PS_MODULE_NAME "PasswordSystem" static char - PS_sPassword[128] = "\0"; + PS_sPassword[128] = "\0"; static bool - PS_bIsPassworded = false, - PS_bSuppress = false; + PS_bIsPassworded = false, + PS_bSuppress = false; static ConVar - PS_hReloaded = null, - PS_hPassword = null; + PS_hReloaded = null, + PS_hPassword = null; void PS_OnModuleStart() { - PS_hPassword = CreateConVarEx( \ - "password", \ - "", \ - "Set a password on the server, if empty password disabled. See Confogl's wiki for more information", \ - FCVAR_DONTRECORD|FCVAR_PROTECTED \ - ); - - PS_hReloaded = FindConVarEx("password_reloaded"); - - if (PS_hReloaded == null) { - PS_hReloaded = CreateConVarEx( \ - "password_reloaded", \ - "", \ - "DONT TOUCH THIS CVAR! This will is to make sure that the password gets set upon the plugin is reloaded", \ - FCVAR_DONTRECORD|FCVAR_UNLOGGED \ - ); - } else { - char sBuffer[128]; - PS_hReloaded.GetString(sBuffer, sizeof(sBuffer)); - - PS_hPassword.SetString(sBuffer); - PS_hReloaded.SetString(""); - - PS_hPassword.GetString(PS_sPassword, sizeof(PS_sPassword)); - - PS_bIsPassworded = true; - PS_SetPasswordOnClients(); - } - - PS_hPassword.AddChangeHook(PS_ConVarChange); - - HookEvent("player_disconnect", PS_SuppressDisconnectMsg, EventHookMode_Pre); + PS_hPassword = CreateConVarEx( \ + "password", \ + "", \ + "Set a password on the server, if empty password disabled. See Confogl's wiki for more information", \ + FCVAR_DONTRECORD|FCVAR_PROTECTED \ + ); + + PS_hReloaded = FindConVarEx("password_reloaded"); + + if (PS_hReloaded == null) { + PS_hReloaded = CreateConVarEx( \ + "password_reloaded", \ + "", \ + "DONT TOUCH THIS CVAR! This will is to make sure that the password gets set upon the plugin is reloaded", \ + FCVAR_DONTRECORD|FCVAR_UNLOGGED \ + ); + } else { + char sBuffer[128]; + PS_hReloaded.GetString(sBuffer, sizeof(sBuffer)); + + PS_hPassword.SetString(sBuffer); + PS_hReloaded.SetString(""); + + PS_hPassword.GetString(PS_sPassword, sizeof(PS_sPassword)); + + PS_bIsPassworded = true; + PS_SetPasswordOnClients(); + } + + PS_hPassword.AddChangeHook(PS_ConVarChange); + + HookEvent("player_disconnect", PS_SuppressDisconnectMsg, EventHookMode_Pre); } void PS_OnModuleEnd() { - if (!PS_bIsPassworded) { - return; - } + if (!PS_bIsPassworded) { + return; + } - PS_hReloaded.SetString(PS_sPassword); + PS_hReloaded.SetString(PS_sPassword); } static void PS_CheckPassword(int client) { - if (!PS_bIsPassworded || !IsPluginEnabled() || IsFakeClient(client)) { - return; - } + if (!PS_bIsPassworded || !IsPluginEnabled() || IsFakeClient(client)) { + return; + } - CreateTimer(0.1, PS_CheckPassword_Timer, GetClientUserId(client), TIMER_REPEAT); + CreateTimer(0.1, PS_CheckPassword_Timer, GetClientUserId(client), TIMER_REPEAT); } public Action PS_CheckPassword_Timer(Handle hTimer, int userid) { - int client = GetClientOfUserId(userid); + int client = GetClientOfUserId(userid); - if (client < 1) { - return Plugin_Stop; - } + if (client < 1) { + return Plugin_Stop; + } - if (!IsClientInGame(client)) { - return Plugin_Continue; - } + if (!IsClientInGame(client)) { + return Plugin_Continue; + } - QueryClientConVar(client, "sv_password", PS_ConVarDone, userid); + QueryClientConVar(client, "sv_password", PS_ConVarDone, userid); - return Plugin_Stop; + return Plugin_Stop; } public void PS_ConVarDone(QueryCookie cookie, int client, ConVarQueryResult result, const char[] cvarName, const char[] cvarValue, int userid) { - if (result == ConVarQuery_Okay) { - char buffer[128]; - PS_hPassword.GetString(buffer, sizeof(buffer)); + if (result == ConVarQuery_Okay) { + char buffer[128]; + PS_hPassword.GetString(buffer, sizeof(buffer)); - if (strcmp(buffer, cvarValue) == 0) { - return; - } - } + if (strcmp(buffer, cvarValue) == 0) { + return; + } + } - if (client == GetClientOfUserId(userid) && IsClientConnected(client)) { - PS_bSuppress = true; + if (client == GetClientOfUserId(userid) && IsClientConnected(client)) { + PS_bSuppress = true; - KickClient(client, "Bad password"); - } + KickClient(client, "Bad password"); + } } public void PS_ConVarChange(ConVar convar, const char[] oldValue, const char[] newValue) { - PS_hPassword.GetString(PS_sPassword, sizeof(PS_sPassword)); - - if (strlen(PS_sPassword) > 0) { - PS_bIsPassworded = true; - PS_SetPasswordOnClients(); - } else { - PS_bIsPassworded = false; - } + PS_hPassword.GetString(PS_sPassword, sizeof(PS_sPassword)); + + if (strlen(PS_sPassword) > 0) { + PS_bIsPassworded = true; + PS_SetPasswordOnClients(); + } else { + PS_bIsPassworded = false; + } } public Action PS_SuppressDisconnectMsg(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (bDontBroadcast || !PS_bSuppress) { - return Plugin_Continue; - } + if (bDontBroadcast || !PS_bSuppress) { + return Plugin_Continue; + } - char clientName[33], networkID[22], reason[65]; - hEvent.GetString("name", clientName, sizeof(clientName)); - hEvent.GetString("networkid", networkID, sizeof(networkID)); - hEvent.GetString("reason", reason, sizeof(reason)); + char clientName[33], networkID[22], reason[65]; + hEvent.GetString("name", clientName, sizeof(clientName)); + hEvent.GetString("networkid", networkID, sizeof(networkID)); + hEvent.GetString("reason", reason, sizeof(reason)); - Handle newEvent = CreateEvent("player_disconnect", true); - SetEventInt(newEvent, "userid", hEvent.GetInt("userid")); - SetEventString(newEvent, "reason", reason); - SetEventString(newEvent, "name", clientName); - SetEventString(newEvent, "networkid", networkID); - FireEvent(newEvent, true); + Handle newEvent = CreateEvent("player_disconnect", true); + SetEventInt(newEvent, "userid", hEvent.GetInt("userid")); + SetEventString(newEvent, "reason", reason); + SetEventString(newEvent, "name", clientName); + SetEventString(newEvent, "networkid", networkID); + FireEvent(newEvent, true); - PS_bSuppress = false; + PS_bSuppress = false; - return Plugin_Handled; + return Plugin_Handled; } void PS_OnMapEnd() { - PS_SetPasswordOnClients(); + PS_SetPasswordOnClients(); } void PS_OnClientPutInServer(int client) { - PS_CheckPassword(client); + PS_CheckPassword(client); } static void PS_SetPasswordOnClients() { - char pwbuffer[128]; - PS_hPassword.GetString(pwbuffer, sizeof(pwbuffer)); + char pwbuffer[128]; + PS_hPassword.GetString(pwbuffer, sizeof(pwbuffer)); - for (int client = 1; client <= MaxClients; client++) { - if (!IsClientInGame(client) || IsFakeClient(client)){ - continue; - } + for (int client = 1; client <= MaxClients; client++) { + if (!IsClientInGame(client) || IsFakeClient(client)){ + continue; + } - LogMessage("[%s] Set password on %N, password %s", PS_MODULE_NAME, client, pwbuffer); - ClientCommand(client, "sv_password \"%s\"", pwbuffer); - } + LogMessage("[%s] Set password on %N, password %s", PS_MODULE_NAME, client, pwbuffer); + ClientCommand(client, "sv_password \"%s\"", pwbuffer); + } } diff --git a/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp b/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp index 234466bc8..197c65c7d 100644 --- a/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp +++ b/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp @@ -1,604 +1,604 @@ #if defined __reg_match_included - #endinput + #endinput #endif #define __reg_match_included -#define RM_DEBUG 0 +#define RM_DEBUG 0 #define RM_MODULE_NAME "ReqMatch" #define MAPRESTARTTIME 3.0 #define RESETMINTIME 60.0 static bool - // RM_bMatchRequest[2] = {false, ...}, - RM_bIsMatchModeLoaded = false, - RM_bIsAMatchActive = false, - RM_bIsPluginsLoaded = false, - RM_bIsMapRestarted = false; - RM_bIsChangeLevelAvailable = false; - RM_bIsChmatchRequest = false; + // RM_bMatchRequest[2] = {false, ...}, + RM_bIsMatchModeLoaded = false, + RM_bIsAMatchActive = false, + RM_bIsPluginsLoaded = false, + RM_bIsMapRestarted = false; + RM_bIsChangeLevelAvailable = false; + RM_bIsChmatchRequest = false; static Handle - RM_hFwdMatchLoad = null, - RM_hFwdMatchUnload = null; + RM_hFwdMatchLoad = null, + RM_hFwdMatchUnload = null; static ConVar - RM_hSbAllBotGame = null, - RM_hDoRestart = null, - // RM_hAllowVoting = null, - RM_hReloaded = null, - RM_hChangeMap = null, - RM_hAutoLoad = null, - RM_hAutoCfg = null, - RM_hConfigFile_On = null, - RM_hConfigFile_Plugins = null, - RM_hConfigFile_Off = null; + RM_hSbAllBotGame = null, + RM_hDoRestart = null, + // RM_hAllowVoting = null, + RM_hReloaded = null, + RM_hChangeMap = null, + RM_hAutoLoad = null, + RM_hAutoCfg = null, + RM_hConfigFile_On = null, + RM_hConfigFile_Plugins = null, + RM_hConfigFile_Off = null; void RM_APL() { - RM_hFwdMatchLoad = CreateGlobalForward("LGO_OnMatchModeLoaded", ET_Ignore); - RM_hFwdMatchUnload = CreateGlobalForward("LGO_OnMatchModeUnloaded", ET_Ignore); + RM_hFwdMatchLoad = CreateGlobalForward("LGO_OnMatchModeLoaded", ET_Ignore); + RM_hFwdMatchUnload = CreateGlobalForward("LGO_OnMatchModeUnloaded", ET_Ignore); - CreateNative("LGO_IsMatchModeLoaded", native_IsMatchModeLoaded); + CreateNative("LGO_IsMatchModeLoaded", native_IsMatchModeLoaded); } public void OnLibraryAdded(const char[] name) { - if (strcmp(name, "l4d2_changelevel") == 0) - { - RM_bIsChangeLevelAvailable = true; - } + if (strcmp(name, "l4d2_changelevel") == 0) + { + RM_bIsChangeLevelAvailable = true; + } } public void OnLibraryRemoved(const char[] name) { - if (strcmp(name, "l4d2_changelevel") == 0) - { - RM_bIsChangeLevelAvailable = false; - } + if (strcmp(name, "l4d2_changelevel") == 0) + { + RM_bIsChangeLevelAvailable = false; + } } void RM_OnModuleStart() { - RM_hDoRestart = CreateConVarEx("match_restart", "1", "Sets whether the plugin will restart the map upon match mode being forced or requested", _, true, 0.0, true, 1.0); - // RM_hAllowVoting = CreateConVarEx("match_allowvoting", "1", "Sets whether players can vote/request for match mode", _, true, 0.0, true, 1.0); - RM_hAutoLoad = CreateConVarEx("match_autoload", "0", "Has match mode start up automatically when a player connects and the server is not in match mode", _, true, 0.0, true, 1.0); - RM_hAutoCfg = CreateConVarEx("match_autoconfig", "", "Specify which config to load if the autoloader is enabled"); - RM_hConfigFile_On = CreateConVarEx("match_execcfg_on", "confogl.cfg", "Execute this config file upon match mode starts and every map after that."); - // RM_hConfigFile_Plugins = CreateConVarEx("match_execcfg_plugins", "confogl_plugins.cfg", "Execute this config file upon match mode starts. This will only get executed once and meant for plugins that needs to be loaded."); //original - RM_hConfigFile_Plugins = CreateConVarEx("match_execcfg_plugins", "generalfixes.cfg;confogl_plugins.cfg;sharedplugins.cfg", "Execute this config file upon match mode starts. This will only get executed once and meant for plugins that needs to be loaded."); // rework - RM_hConfigFile_Off = CreateConVarEx("match_execcfg_off", "confogl_off.cfg", "Execute this config file upon match mode ends."); - - // RegConsoleCmd("sm_match", RM_Cmd_Match); - RegAdminCmd("sm_forcematch", RM_Cmd_ForceMatch, ADMFLAG_CONFIG, "Forces the game to use match mode"); - RegAdminCmd("sm_fm", RM_Cmd_ForceMatch, ADMFLAG_CONFIG, "Forces the game to use match mode"); - RegAdminCmd("sm_resetmatch", RM_Cmd_ResetMatch, ADMFLAG_CONFIG, "Forces match mode to turn off REGRADLESS for always on or forced match"); - RegAdminCmd("sm_forcechangematch", RM_CMD_ChangeMatch, ADMFLAG_CONFIG, "Forces the match to be changed"); - RegAdminCmd("sm_fchmatch", RM_CMD_ChangeMatch, ADMFLAG_CONFIG, "Forces the match to be changed"); - - RM_hSbAllBotGame = FindConVar("sb_all_bot_game"); - - RM_hReloaded = FindConVarEx("match_reloaded"); - if (RM_hReloaded == null) - { - RM_hReloaded = CreateConVarEx("match_reloaded", "0", "DONT TOUCH THIS CVAR! This is to prevent match feature keep looping, however the plugin takes care of it. Don't change it!", FCVAR_DONTRECORD | FCVAR_UNLOGGED); - } - - RM_hChangeMap = FindConVarEx("match_map"); - if (RM_hChangeMap == null) - { - RM_hChangeMap = CreateConVarEx("match_map", "", "DONT TOUCH THIS CVAR! This is to store the map that we'll be changing to", FCVAR_DONTRECORD | FCVAR_UNLOGGED); - } - - if (RM_hReloaded.BoolValue) - { - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Plugin was reloaded from match mode, executing match load", RM_MODULE_NAME); - } - - RM_bIsPluginsLoaded = true; - RM_hReloaded.SetInt(0); - RM_Match_Load(); - } - - // ChangeLevel - if (LibraryExists("l4d2_changelevel")) - { - RM_bIsChangeLevelAvailable = true; - } + RM_hDoRestart = CreateConVarEx("match_restart", "1", "Sets whether the plugin will restart the map upon match mode being forced or requested", _, true, 0.0, true, 1.0); + // RM_hAllowVoting = CreateConVarEx("match_allowvoting", "1", "Sets whether players can vote/request for match mode", _, true, 0.0, true, 1.0); + RM_hAutoLoad = CreateConVarEx("match_autoload", "0", "Has match mode start up automatically when a player connects and the server is not in match mode", _, true, 0.0, true, 1.0); + RM_hAutoCfg = CreateConVarEx("match_autoconfig", "", "Specify which config to load if the autoloader is enabled"); + RM_hConfigFile_On = CreateConVarEx("match_execcfg_on", "confogl.cfg", "Execute this config file upon match mode starts and every map after that."); + // RM_hConfigFile_Plugins = CreateConVarEx("match_execcfg_plugins", "confogl_plugins.cfg", "Execute this config file upon match mode starts. This will only get executed once and meant for plugins that needs to be loaded."); //original + RM_hConfigFile_Plugins = CreateConVarEx("match_execcfg_plugins", "generalfixes.cfg;confogl_plugins.cfg;sharedplugins.cfg", "Execute this config file upon match mode starts. This will only get executed once and meant for plugins that needs to be loaded."); // rework + RM_hConfigFile_Off = CreateConVarEx("match_execcfg_off", "confogl_off.cfg", "Execute this config file upon match mode ends."); + + // RegConsoleCmd("sm_match", RM_Cmd_Match); + RegAdminCmd("sm_forcematch", RM_Cmd_ForceMatch, ADMFLAG_CONFIG, "Forces the game to use match mode"); + RegAdminCmd("sm_fm", RM_Cmd_ForceMatch, ADMFLAG_CONFIG, "Forces the game to use match mode"); + RegAdminCmd("sm_resetmatch", RM_Cmd_ResetMatch, ADMFLAG_CONFIG, "Forces match mode to turn off REGRADLESS for always on or forced match"); + RegAdminCmd("sm_forcechangematch", RM_CMD_ChangeMatch, ADMFLAG_CONFIG, "Forces the match to be changed"); + RegAdminCmd("sm_fchmatch", RM_CMD_ChangeMatch, ADMFLAG_CONFIG, "Forces the match to be changed"); + + RM_hSbAllBotGame = FindConVar("sb_all_bot_game"); + + RM_hReloaded = FindConVarEx("match_reloaded"); + if (RM_hReloaded == null) + { + RM_hReloaded = CreateConVarEx("match_reloaded", "0", "DONT TOUCH THIS CVAR! This is to prevent match feature keep looping, however the plugin takes care of it. Don't change it!", FCVAR_DONTRECORD | FCVAR_UNLOGGED); + } + + RM_hChangeMap = FindConVarEx("match_map"); + if (RM_hChangeMap == null) + { + RM_hChangeMap = CreateConVarEx("match_map", "", "DONT TOUCH THIS CVAR! This is to store the map that we'll be changing to", FCVAR_DONTRECORD | FCVAR_UNLOGGED); + } + + if (RM_hReloaded.BoolValue) + { + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Plugin was reloaded from match mode, executing match load", RM_MODULE_NAME); + } + + RM_bIsPluginsLoaded = true; + RM_hReloaded.SetInt(0); + RM_Match_Load(); + } + + // ChangeLevel + if (LibraryExists("l4d2_changelevel")) + { + RM_bIsChangeLevelAvailable = true; + } } void RM_OnMapStart() { - if (!RM_bIsMatchModeLoaded) - { - return; - } + if (!RM_bIsMatchModeLoaded) + { + return; + } - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] New map, executing match config...", RM_MODULE_NAME); - } + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] New map, executing match config...", RM_MODULE_NAME); + } - RM_Match_Load(); + RM_Match_Load(); } void RM_OnClientPutInServer() { - if (!RM_hAutoLoad.BoolValue || RM_bIsAMatchActive) - { - return; - } + if (!RM_hAutoLoad.BoolValue || RM_bIsAMatchActive) + { + return; + } - char buffer[128]; - RM_hAutoCfg.GetString(buffer, sizeof(buffer)); + char buffer[128]; + RM_hAutoCfg.GetString(buffer, sizeof(buffer)); - RM_UpdateCfgOn(buffer); - RM_Match_Load(); + RM_UpdateCfgOn(buffer); + RM_Match_Load(); } static void RM_Match_Load() { - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match Load", RM_MODULE_NAME); - } - - if (!RM_bIsAMatchActive) - { - RM_bIsAMatchActive = true; - } - - RM_hSbAllBotGame.SetInt(1); - char sBuffer[128]; - - if (!RM_bIsPluginsLoaded) - { - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Loading plugins and reload self", RM_MODULE_NAME); - } - - RM_hReloaded.SetInt(1); - RM_hConfigFile_Plugins.GetString(sBuffer, sizeof(sBuffer)); - - // ExecuteCfg(sBuffer); //original - // rework - char sPieces[32][256]; - int iNumPieces = ExplodeString(sBuffer, ";", sPieces, sizeof(sPieces), sizeof(sPieces[])); - - // Unlocking and Unloading Plugins. - ServerCommand("sm plugins load_unlock"); - ServerCommand("sm plugins unload_all"); - - // Loading Plugins. - for (int i = 0; i < iNumPieces; i++) - { - ExecuteCfg(sPieces[i]); - } - // rework end - - return; - } - - RM_hConfigFile_On.GetString(sBuffer, sizeof(sBuffer)); - ExecuteCfg(sBuffer); - - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match config executed", RM_MODULE_NAME); - } - - if (RM_bIsMatchModeLoaded) - { - return; - } - - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Setting match mode active", RM_MODULE_NAME); - } - - RM_bIsMatchModeLoaded = true; - IsPluginEnabled(true, true); - - // PrintToChatAll("\x01[\x05Confogl\x01] Match mode loaded!"); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Match mode loaded!"); - - if (!RM_bIsMapRestarted && RM_hDoRestart.BoolValue) - { - char sMap[PLATFORM_MAX_PATH]; - RM_hChangeMap.GetString(sMap, sizeof(sMap)); - - if (strlen(sMap) > 0) - { - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Changing map to {green}%s{default}!", sMap); - } - else { - GetCurrentMap(sMap, sizeof(sMap)); - - // PrintToChatAll("\x01[\x05Confogl\x01] Restarting map!"); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Restarting map!"); - } - - DataPack hDp; - CreateDataTimer(MAPRESTARTTIME, RM_Match_MapRestart_Timer, hDp); - hDp.WriteString(sMap); - } - - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match mode loaded!", RM_MODULE_NAME); - } - - RM_bIsChmatchRequest = false; - - Call_StartForward(RM_hFwdMatchLoad); - Call_Finish(); + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match Load", RM_MODULE_NAME); + } + + if (!RM_bIsAMatchActive) + { + RM_bIsAMatchActive = true; + } + + RM_hSbAllBotGame.SetInt(1); + char sBuffer[128]; + + if (!RM_bIsPluginsLoaded) + { + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Loading plugins and reload self", RM_MODULE_NAME); + } + + RM_hReloaded.SetInt(1); + RM_hConfigFile_Plugins.GetString(sBuffer, sizeof(sBuffer)); + + // ExecuteCfg(sBuffer); //original + // rework + char sPieces[32][256]; + int iNumPieces = ExplodeString(sBuffer, ";", sPieces, sizeof(sPieces), sizeof(sPieces[])); + + // Unlocking and Unloading Plugins. + ServerCommand("sm plugins load_unlock"); + ServerCommand("sm plugins unload_all"); + + // Loading Plugins. + for (int i = 0; i < iNumPieces; i++) + { + ExecuteCfg(sPieces[i]); + } + // rework end + + return; + } + + RM_hConfigFile_On.GetString(sBuffer, sizeof(sBuffer)); + ExecuteCfg(sBuffer); + + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match config executed", RM_MODULE_NAME); + } + + if (RM_bIsMatchModeLoaded) + { + return; + } + + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Setting match mode active", RM_MODULE_NAME); + } + + RM_bIsMatchModeLoaded = true; + IsPluginEnabled(true, true); + + // PrintToChatAll("\x01[\x05Confogl\x01] Match mode loaded!"); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Match mode loaded!"); + + if (!RM_bIsMapRestarted && RM_hDoRestart.BoolValue) + { + char sMap[PLATFORM_MAX_PATH]; + RM_hChangeMap.GetString(sMap, sizeof(sMap)); + + if (strlen(sMap) > 0) + { + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Changing map to {green}%s{default}!", sMap); + } + else { + GetCurrentMap(sMap, sizeof(sMap)); + + // PrintToChatAll("\x01[\x05Confogl\x01] Restarting map!"); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Restarting map!"); + } + + DataPack hDp; + CreateDataTimer(MAPRESTARTTIME, RM_Match_MapRestart_Timer, hDp); + hDp.WriteString(sMap); + } + + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match mode loaded!", RM_MODULE_NAME); + } + + RM_bIsChmatchRequest = false; + + Call_StartForward(RM_hFwdMatchLoad); + Call_Finish(); } static void RM_Match_Unload(bool bForced = false) { - bool bIsHumansOnServer = IsHumansOnServer(); - - if (!bIsHumansOnServer || bForced) - { - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match is no longer active, sb_all_bot_game reset to 0, IsHumansOnServer %b, bForced %b", RM_MODULE_NAME, bIsHumansOnServer, bForced); - } - - RM_bIsAMatchActive = false; - RM_hSbAllBotGame.SetInt(0); - } - - if (bIsHumansOnServer && !bForced) - { - return; - } - - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Unloading match mode...", RM_MODULE_NAME); - } - - char sBuffer[128]; - RM_bIsMatchModeLoaded = false; - IsPluginEnabled(true, false); - RM_bIsMapRestarted = false; - RM_bIsPluginsLoaded = false; - - Call_StartForward(RM_hFwdMatchUnload); - Call_Finish(); - - // PrintToChatAll("\x01[\x05Confogl\x01] Match mode unloaded!"); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Match mode unloaded!"); - - RM_hConfigFile_Off.GetString(sBuffer, sizeof(sBuffer)); - - if (!RM_bIsChmatchRequest) - { - ExecuteCfg(sBuffer); - } - else - { - // if we are using chmatch, don't let predictable_unloader unload confogl itself. - // all plugins will be unload and load when the new config excuted. - ServerCommand("sm plugins load_unlock"); - ServerCommand("sm plugins unload optional/predictable_unloader.smx"); - ExecuteCfg(sBuffer); - } - - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match mode unloaded!", RM_MODULE_NAME); - } + bool bIsHumansOnServer = IsHumansOnServer(); + + if (!bIsHumansOnServer || bForced) + { + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match is no longer active, sb_all_bot_game reset to 0, IsHumansOnServer %b, bForced %b", RM_MODULE_NAME, bIsHumansOnServer, bForced); + } + + RM_bIsAMatchActive = false; + RM_hSbAllBotGame.SetInt(0); + } + + if (bIsHumansOnServer && !bForced) + { + return; + } + + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Unloading match mode...", RM_MODULE_NAME); + } + + char sBuffer[128]; + RM_bIsMatchModeLoaded = false; + IsPluginEnabled(true, false); + RM_bIsMapRestarted = false; + RM_bIsPluginsLoaded = false; + + Call_StartForward(RM_hFwdMatchUnload); + Call_Finish(); + + // PrintToChatAll("\x01[\x05Confogl\x01] Match mode unloaded!"); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Match mode unloaded!"); + + RM_hConfigFile_Off.GetString(sBuffer, sizeof(sBuffer)); + + if (!RM_bIsChmatchRequest) + { + ExecuteCfg(sBuffer); + } + else + { + // if we are using chmatch, don't let predictable_unloader unload confogl itself. + // all plugins will be unload and load when the new config excuted. + ServerCommand("sm plugins load_unlock"); + ServerCommand("sm plugins unload optional/predictable_unloader.smx"); + ExecuteCfg(sBuffer); + } + + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match mode unloaded!", RM_MODULE_NAME); + } } public Action RM_Match_MapRestart_Timer(Handle hTimer, DataPack hDp) { - ServerCommand("sm plugins load_lock"); // rework + ServerCommand("sm plugins load_lock"); // rework - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Restarting map...", RM_MODULE_NAME); - } + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Restarting map...", RM_MODULE_NAME); + } - char sMap[PLATFORM_MAX_PATH]; - hDp.Reset(); - hDp.ReadString(sMap, sizeof(sMap)); + char sMap[PLATFORM_MAX_PATH]; + hDp.Reset(); + hDp.ReadString(sMap, sizeof(sMap)); - if (RM_bIsChangeLevelAvailable) L4D2_ChangeLevel(sMap); - else ServerCommand("changelevel %s", sMap); + if (RM_bIsChangeLevelAvailable) L4D2_ChangeLevel(sMap); + else ServerCommand("changelevel %s", sMap); - RM_bIsMapRestarted = true; + RM_bIsMapRestarted = true; - return Plugin_Stop; + return Plugin_Stop; } static bool RM_UpdateCfgOn(const char[] cfgfile, bool bIsPrint = true) { - if (SetCustomCfg(cfgfile)) - { - // PrintToChatAll("\x01[\x05Confogl\x01] Using \"\x04%s\x01\" config.", cfgfile); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Loading '{olive}%s{default}'.", cfgfile); - - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Starting match on config %s", RM_MODULE_NAME, cfgfile); - } - - return true; - } - - if (bIsPrint) - { - // PrintToChatAll("\x01[\x05Confogl\x01] Config \"\x04%s\x01\" not found, using default config!", cfgfile); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Config '{olive}%s{default}' not found, using default config!", cfgfile); - } - - return false; + if (SetCustomCfg(cfgfile)) + { + // PrintToChatAll("\x01[\x05Confogl\x01] Using \"\x04%s\x01\" config.", cfgfile); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Loading '{olive}%s{default}'.", cfgfile); + + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Starting match on config %s", RM_MODULE_NAME, cfgfile); + } + + return true; + } + + if (bIsPrint) + { + // PrintToChatAll("\x01[\x05Confogl\x01] Config \"\x04%s\x01\" not found, using default config!", cfgfile); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Config '{olive}%s{default}' not found, using default config!", cfgfile); + } + + return false; } public Action RM_Cmd_ForceMatch(int client, int args) { - if (RM_bIsMatchModeLoaded) - { - return Plugin_Handled; - } - - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match mode forced to load!", RM_MODULE_NAME); - } - - if (args < 1) - { - // SetCustomCfg(""); //old code - // RM_Match_Load(); //old code - - if (client == 0) - { - PrintToServer("[Confogl] Please specify a config to load."); - } - else { - // PrintToChat(client, "\x01[\x05Confogl\x01] Please specify a \x04config\x01 to load."); - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Please specify a {olive}config{default} to load."); - } - return Plugin_Handled; - } - - char sBuffer[128]; - GetCmdArg(1, sBuffer, sizeof(sBuffer)); - - // RM_UpdateCfgOn(sBuffer); //old code - - if (!RM_UpdateCfgOn(sBuffer, false)) - { - if (client == 0) - { - PrintToServer("[Confogl] Config %s not found!", sBuffer); - } - else { - // PrintToChat(client, "\x01[\x05Confogl\x01] Please specify a \"\x04%s\x01\" to load.", sBuffer); - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Config '{olive}%s{default}' not found!", sBuffer); - } - - return Plugin_Handled; - } - - char sMap[PLATFORM_MAX_PATH], sDisplayName[PLATFORM_MAX_PATH]; - - if (args == 2) - { - GetCmdArg(2, sMap, sizeof(sMap)); - - if (FindMap(sMap, sDisplayName, sizeof(sDisplayName)) == FindMap_NotFound) - { - if (client == 0) - { - PrintToServer("[Confogl] Map %s not found!", sMap); - } - else { - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Map '{olive}%s{default}' not found!", sMap); - } - return Plugin_Handled; - } - - GetMapDisplayName(sDisplayName, sDisplayName, sizeof(sDisplayName)); - RM_hChangeMap.SetString(sDisplayName); - } - - RM_Match_Load(); - - return Plugin_Handled; + if (RM_bIsMatchModeLoaded) + { + return Plugin_Handled; + } + + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match mode forced to load!", RM_MODULE_NAME); + } + + if (args < 1) + { + // SetCustomCfg(""); //old code + // RM_Match_Load(); //old code + + if (client == 0) + { + PrintToServer("[Confogl] Please specify a config to load."); + } + else { + // PrintToChat(client, "\x01[\x05Confogl\x01] Please specify a \x04config\x01 to load."); + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Please specify a {olive}config{default} to load."); + } + return Plugin_Handled; + } + + char sBuffer[128]; + GetCmdArg(1, sBuffer, sizeof(sBuffer)); + + // RM_UpdateCfgOn(sBuffer); //old code + + if (!RM_UpdateCfgOn(sBuffer, false)) + { + if (client == 0) + { + PrintToServer("[Confogl] Config %s not found!", sBuffer); + } + else { + // PrintToChat(client, "\x01[\x05Confogl\x01] Please specify a \"\x04%s\x01\" to load.", sBuffer); + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Config '{olive}%s{default}' not found!", sBuffer); + } + + return Plugin_Handled; + } + + char sMap[PLATFORM_MAX_PATH], sDisplayName[PLATFORM_MAX_PATH]; + + if (args == 2) + { + GetCmdArg(2, sMap, sizeof(sMap)); + + if (FindMap(sMap, sDisplayName, sizeof(sDisplayName)) == FindMap_NotFound) + { + if (client == 0) + { + PrintToServer("[Confogl] Map %s not found!", sMap); + } + else { + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Map '{olive}%s{default}' not found!", sMap); + } + return Plugin_Handled; + } + + GetMapDisplayName(sDisplayName, sDisplayName, sizeof(sDisplayName)); + RM_hChangeMap.SetString(sDisplayName); + } + + RM_Match_Load(); + + return Plugin_Handled; } public Action RM_Cmd_ResetMatch(int client, int args) { - if (!RM_bIsMatchModeLoaded) - { - return Plugin_Handled; - } + if (!RM_bIsMatchModeLoaded) + { + return Plugin_Handled; + } - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match mode forced to unload!", RM_MODULE_NAME); - } + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match mode forced to unload!", RM_MODULE_NAME); + } - RM_Match_Unload(true); + RM_Match_Unload(true); - return Plugin_Handled; + return Plugin_Handled; } public Action RM_CMD_ChangeMatch(int client, int args) { - if (args < 1) - { - if (client == 0) - { - PrintToServer("[Confogl] Please specify a config to load."); - } - else { - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Please specify a {olive}config{default} to load."); - } - return Plugin_Handled; - } - - char sBuffer[128]; - GetCmdArg(1, sBuffer, sizeof(sBuffer)); - - if (!RM_UpdateCfgOn(sBuffer, false)) - { - if (client == 0) - { - PrintToServer("[Confogl] Config %s not found!", sBuffer); - } - else { - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Config '{olive}%s{default}' not found!", sBuffer); - } - - return Plugin_Handled; - } - - char sMap[PLATFORM_MAX_PATH], sDisplayName[PLATFORM_MAX_PATH]; - - if (args == 2) - { - GetCmdArg(2, sMap, sizeof(sMap)); - - if (FindMap(sMap, sDisplayName, sizeof(sDisplayName)) == FindMap_NotFound) - { - if (client == 0) - { - PrintToServer("[Confogl] Map %s not found!", sMap); - } - else { - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Map '{olive}%s{default}' not found!", sMap); - } - return Plugin_Handled; - } - - GetMapDisplayName(sDisplayName, sDisplayName, sizeof(sDisplayName)); - RM_hChangeMap.SetString(sDisplayName); - } - - // Unload - if (!RM_bIsMatchModeLoaded) - { - return Plugin_Handled; - } - - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match mode forced to unload! [Change in this case!]", RM_MODULE_NAME); - } - - RM_bIsChmatchRequest = true; - - RM_Match_Unload(true); - - // give time to fully finish unloading. - CreateTimer(1.0, Timer_DelayToLoadMatchMode); - - return Plugin_Handled; + if (args < 1) + { + if (client == 0) + { + PrintToServer("[Confogl] Please specify a config to load."); + } + else { + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Please specify a {olive}config{default} to load."); + } + return Plugin_Handled; + } + + char sBuffer[128]; + GetCmdArg(1, sBuffer, sizeof(sBuffer)); + + if (!RM_UpdateCfgOn(sBuffer, false)) + { + if (client == 0) + { + PrintToServer("[Confogl] Config %s not found!", sBuffer); + } + else { + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Config '{olive}%s{default}' not found!", sBuffer); + } + + return Plugin_Handled; + } + + char sMap[PLATFORM_MAX_PATH], sDisplayName[PLATFORM_MAX_PATH]; + + if (args == 2) + { + GetCmdArg(2, sMap, sizeof(sMap)); + + if (FindMap(sMap, sDisplayName, sizeof(sDisplayName)) == FindMap_NotFound) + { + if (client == 0) + { + PrintToServer("[Confogl] Map %s not found!", sMap); + } + else { + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Map '{olive}%s{default}' not found!", sMap); + } + return Plugin_Handled; + } + + GetMapDisplayName(sDisplayName, sDisplayName, sizeof(sDisplayName)); + RM_hChangeMap.SetString(sDisplayName); + } + + // Unload + if (!RM_bIsMatchModeLoaded) + { + return Plugin_Handled; + } + + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match mode forced to unload! [Change in this case!]", RM_MODULE_NAME); + } + + RM_bIsChmatchRequest = true; + + RM_Match_Unload(true); + + // give time to fully finish unloading. + CreateTimer(1.0, Timer_DelayToLoadMatchMode); + + return Plugin_Handled; } public Action Timer_DelayToLoadMatchMode(Handle timer) { - // Load - if (RM_bIsMatchModeLoaded) - { - return Plugin_Handled; - } + // Load + if (RM_bIsMatchModeLoaded) + { + return Plugin_Handled; + } - if (RM_DEBUG || IsDebugEnabled()) - { - LogMessage("[%s] Match mode forced to load! [Change in this case!]", RM_MODULE_NAME); - } + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Match mode forced to load! [Change in this case!]", RM_MODULE_NAME); + } - RM_Match_Load(); + RM_Match_Load(); - return Plugin_Handled; + return Plugin_Handled; } /*public Action RM_Cmd_Match(int client, int args) { - if (RM_bIsMatchModeLoaded || (!IsVersus() && !IsScavenge()) || !RM_hAllowVoting.BoolValue) { - return Plugin_Handled; - } - - int iTeam = GetClientTeam(client); - if ((iTeam == L4D2Team_Survivor || iTeam == L4D2Team_Infected) && !RM_bMatchRequest[iTeam - 2]) { - RM_bMatchRequest[iTeam - 2] = true; - } else { - return Plugin_Handled; - } - - if (RM_bMatchRequest[0] && RM_bMatchRequest[1]) { - //PrintToChatAll("\x01[\x05Confogl\x01] Both teams have agreed to start a competitive match!"); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Both teams have agreed to start a competitive match!"); - - RM_Match_Load(); - } else if (RM_bMatchRequest[0] || RM_bMatchRequest[1]) { - //PrintToChatAll("\x01[\x05Confogl\x01] The \x04%s\x01 have requested to start a competitive match. The \x04%s\x01 must accept with match command!", - //g_sTeamName[iTeam + 4], g_sTeamName[iTeam + 3]); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} The {olive}%s{default} have requested to start a competitive match. The {olive}%s{default} must accept with match command!", \ - g_sTeamName[iTeam + 4], g_sTeamName[iTeam + 3]); - - if (args > 0) { // cfgfile specified - char sBuffer[128]; - GetCmdArg(1, sBuffer, sizeof(sBuffer)); - RM_UpdateCfgOn(sBuffer); - } else { - SetCustomCfg(""); - } - - CreateTimer(30.0, RM_MatchRequestTimeout); - } - - return Plugin_Handled; + if (RM_bIsMatchModeLoaded || (!IsVersus() && !IsScavenge()) || !RM_hAllowVoting.BoolValue) { + return Plugin_Handled; + } + + int iTeam = GetClientTeam(client); + if ((iTeam == L4D2Team_Survivor || iTeam == L4D2Team_Infected) && !RM_bMatchRequest[iTeam - 2]) { + RM_bMatchRequest[iTeam - 2] = true; + } else { + return Plugin_Handled; + } + + if (RM_bMatchRequest[0] && RM_bMatchRequest[1]) { + //PrintToChatAll("\x01[\x05Confogl\x01] Both teams have agreed to start a competitive match!"); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Both teams have agreed to start a competitive match!"); + + RM_Match_Load(); + } else if (RM_bMatchRequest[0] || RM_bMatchRequest[1]) { + //PrintToChatAll("\x01[\x05Confogl\x01] The \x04%s\x01 have requested to start a competitive match. The \x04%s\x01 must accept with match command!", + //g_sTeamName[iTeam + 4], g_sTeamName[iTeam + 3]); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} The {olive}%s{default} have requested to start a competitive match. The {olive}%s{default} must accept with match command!", \ + g_sTeamName[iTeam + 4], g_sTeamName[iTeam + 3]); + + if (args > 0) { // cfgfile specified + char sBuffer[128]; + GetCmdArg(1, sBuffer, sizeof(sBuffer)); + RM_UpdateCfgOn(sBuffer); + } else { + SetCustomCfg(""); + } + + CreateTimer(30.0, RM_MatchRequestTimeout); + } + + return Plugin_Handled; } public Action RM_MatchRequestTimeout(Handle hTimer) { - RM_ResetMatchRequest(); + RM_ResetMatchRequest(); - return Plugin_Stop; + return Plugin_Stop; }*/ void RM_OnClientDisconnect(int client) { - if (!RM_bIsMatchModeLoaded || IsFakeClient(client)) - { - return; - } + if (!RM_bIsMatchModeLoaded || IsFakeClient(client)) + { + return; + } - CreateTimer(RESETMINTIME, RM_MatchResetTimer); + CreateTimer(RESETMINTIME, RM_MatchResetTimer); } public Action RM_MatchResetTimer(Handle hTimer) { - RM_Match_Unload(); + RM_Match_Unload(); - return Plugin_Stop; + return Plugin_Stop; } /*static void RM_ResetMatchRequest() { - RM_hConfigFile_On.RestoreDefault(); + RM_hConfigFile_On.RestoreDefault(); - RM_bMatchRequest[0] = false; - RM_bMatchRequest[1] = false; + RM_bMatchRequest[0] = false; + RM_bMatchRequest[1] = false; }*/ stock bool IsAMatchActive() { - return RM_bIsAMatchActive; + return RM_bIsAMatchActive; } public int native_IsMatchModeLoaded(Handle plugin, int numParams) { - return RM_bIsMatchModeLoaded; + return RM_bIsMatchModeLoaded; } diff --git a/addons/sourcemod/scripting/confoglcompmod/ScoreMod.sp b/addons/sourcemod/scripting/confoglcompmod/ScoreMod.sp index 87dcdea33..80756bda7 100644 --- a/addons/sourcemod/scripting/confoglcompmod/ScoreMod.sp +++ b/addons/sourcemod/scripting/confoglcompmod/ScoreMod.sp @@ -1,515 +1,515 @@ #if defined __scoremod_included - #endinput + #endinput #endif #define __scoremod_included -#define DEBUG_SM 0 -#define SM_MODULE_NAME "ScoreMod" +#define DEBUG_SM 0 +#define SM_MODULE_NAME "ScoreMod" static int - SM_iDefaultSurvivalBonus = 0, - SM_iDefaultTieBreaker = 0, - SM_iPillPercent = 0, - SM_iAdrenPercent = 0, - SM_iFirstScore = 0; + SM_iDefaultSurvivalBonus = 0, + SM_iDefaultTieBreaker = 0, + SM_iPillPercent = 0, + SM_iAdrenPercent = 0, + SM_iFirstScore = 0; static float - SM_fHealPercent = 0.0, - SM_fMapMulti = 0.0, - SM_fHBRatio = 0.0, - SM_fSurvivalBonusRatio = 0.0, - SM_fTempMulti[3] = {0.0, ...}; + SM_fHealPercent = 0.0, + SM_fMapMulti = 0.0, + SM_fHBRatio = 0.0, + SM_fSurvivalBonusRatio = 0.0, + SM_fTempMulti[3] = {0.0, ...}; static bool - SM_bEventsHooked = false, - SM_bModuleIsEnabled = false, - SM_bHooked = false, - SM_bIsFirstRoundOver = false, - SM_bIsSecondRoundStarted = false, - SM_bIsSecondRoundOver = false; + SM_bEventsHooked = false, + SM_bModuleIsEnabled = false, + SM_bHooked = false, + SM_bIsFirstRoundOver = false, + SM_bIsSecondRoundStarted = false, + SM_bIsSecondRoundOver = false; // Cvars static ConVar - SM_hEnable = null, - SM_hHBRatio = null, - SM_hSurvivalBonusRatio = null, - SM_hMapMulti = null, - SM_hCustomMaxDistance = null; + SM_hEnable = null, + SM_hHBRatio = null, + SM_hSurvivalBonusRatio = null, + SM_hMapMulti = null, + SM_hCustomMaxDistance = null; // Default Cvar Values static ConVar - SM_hSurvivalBonus = null, - SM_hTieBreaker = null, - SM_hHealPercent = null, - SM_hPillPercent = null, - SM_hAdrenPercent = null, - SM_hTempMulti0 = null, - SM_hTempMulti1 = null, - SM_hTempMulti2 = null; + SM_hSurvivalBonus = null, + SM_hTieBreaker = null, + SM_hHealPercent = null, + SM_hPillPercent = null, + SM_hAdrenPercent = null, + SM_hTempMulti0 = null, + SM_hTempMulti1 = null, + SM_hTempMulti2 = null; void SM_APL() { - CreateNative("LGO_IsScoremodEnabled", Native_IsScoremodEnabled); - CreateNative("LGO_GetScoremodBonus", Native_GetScoremodBonus); + CreateNative("LGO_IsScoremodEnabled", Native_IsScoremodEnabled); + CreateNative("LGO_GetScoremodBonus", Native_GetScoremodBonus); } void SM_OnModuleStart() { - SM_hEnable = CreateConVarEx("SM_enable", "1", "L4D2 Custom Scoring - Enable/Disable", _, true, 0.0, true, 1.0); - SM_hHBRatio = CreateConVarEx("SM_healthbonusratio", "2.0", "L4D2 Custom Scoring - Healthbonus Multiplier", _, true, 0.25, true, 5.0); - SM_hSurvivalBonusRatio = CreateConVarEx("SM_survivalbonusratio", "0.0", "Ratio to be used for a static survival bonus against Map distance. 25% == 100 points maximum health bonus on a 400 distance map", _); - SM_hTempMulti0 = CreateConVarEx("SM_tempmulti_incap_0", "0.30625", "L4D2 Custom Scoring - How important temp health is on survivors who have had no incaps", _, true, 0.0, true, 1.0); - SM_hTempMulti1 = CreateConVarEx("SM_tempmulti_incap_1", "0.17500", "L4D2 Custom Scoring - How important temp health is on survivors who have had one incap", _, true, 0.0, true, 1.0); - SM_hTempMulti2 = CreateConVarEx("SM_tempmulti_incap_2", "0.10000", "L4D2 Custom Scoring - How important temp health is on survivors who have had two incaps (black and white)", _, true, 0.0, true, 1.0); - SM_hMapMulti = CreateConVarEx("SM_mapmulti", "1", "L4D2 Custom Scoring - Increases Healthbonus Max to Distance Max", _, true, 0.0, true, 1.0); - SM_hCustomMaxDistance = CreateConVarEx("SM_custommaxdistance", "0", "L4D2 Custom Scoring - Custom max distance from config", _, true, 0.0, true, 1.0); - - SM_fTempMulti[0] = SM_hTempMulti0.FloatValue; - SM_fTempMulti[1] = SM_hTempMulti1.FloatValue; - SM_fTempMulti[2] = SM_hTempMulti2.FloatValue; - - SM_hEnable.AddChangeHook(SM_ConVarChanged_Enable); - SM_hHBRatio.AddChangeHook(SM_CVChanged_HealthBonusRatio); - SM_hSurvivalBonusRatio.AddChangeHook(SM_CVChanged_SurvivalBonusRatio); - SM_hTempMulti0.AddChangeHook(SM_ConVarChanged_TempMulti0); - SM_hTempMulti1.AddChangeHook(SM_ConVarChanged_TempMulti1); - SM_hTempMulti2.AddChangeHook(SM_ConVarChanged_TempMulti2); - - SM_hSurvivalBonus = FindConVar("vs_survival_bonus"); - SM_hTieBreaker = FindConVar("vs_tiebreak_bonus"); - SM_hHealPercent = FindConVar("first_aid_heal_percent"); - SM_hPillPercent = FindConVar("pain_pills_health_value"); - SM_hAdrenPercent = FindConVar("adrenaline_health_buffer"); - - SM_fHealPercent = SM_hHealPercent.FloatValue; - SM_iPillPercent = SM_hPillPercent.IntValue; - SM_iAdrenPercent = SM_hAdrenPercent.IntValue; - SM_iDefaultSurvivalBonus = SM_hSurvivalBonus.IntValue; - SM_iDefaultTieBreaker = SM_hTieBreaker.IntValue; - - SM_hHealPercent.AddChangeHook(SM_ConVarChanged_Health); - SM_hPillPercent.AddChangeHook(SM_ConVarChanged_Health); - SM_hAdrenPercent.AddChangeHook(SM_ConVarChanged_Health); - - RegConsoleCmd("sm_health", SM_Cmd_Health); - RegConsoleCmd("sm_bonus", SM_Cmd_Health); + SM_hEnable = CreateConVarEx("SM_enable", "1", "L4D2 Custom Scoring - Enable/Disable", _, true, 0.0, true, 1.0); + SM_hHBRatio = CreateConVarEx("SM_healthbonusratio", "2.0", "L4D2 Custom Scoring - Healthbonus Multiplier", _, true, 0.25, true, 5.0); + SM_hSurvivalBonusRatio = CreateConVarEx("SM_survivalbonusratio", "0.0", "Ratio to be used for a static survival bonus against Map distance. 25% == 100 points maximum health bonus on a 400 distance map", _); + SM_hTempMulti0 = CreateConVarEx("SM_tempmulti_incap_0", "0.30625", "L4D2 Custom Scoring - How important temp health is on survivors who have had no incaps", _, true, 0.0, true, 1.0); + SM_hTempMulti1 = CreateConVarEx("SM_tempmulti_incap_1", "0.17500", "L4D2 Custom Scoring - How important temp health is on survivors who have had one incap", _, true, 0.0, true, 1.0); + SM_hTempMulti2 = CreateConVarEx("SM_tempmulti_incap_2", "0.10000", "L4D2 Custom Scoring - How important temp health is on survivors who have had two incaps (black and white)", _, true, 0.0, true, 1.0); + SM_hMapMulti = CreateConVarEx("SM_mapmulti", "1", "L4D2 Custom Scoring - Increases Healthbonus Max to Distance Max", _, true, 0.0, true, 1.0); + SM_hCustomMaxDistance = CreateConVarEx("SM_custommaxdistance", "0", "L4D2 Custom Scoring - Custom max distance from config", _, true, 0.0, true, 1.0); + + SM_fTempMulti[0] = SM_hTempMulti0.FloatValue; + SM_fTempMulti[1] = SM_hTempMulti1.FloatValue; + SM_fTempMulti[2] = SM_hTempMulti2.FloatValue; + + SM_hEnable.AddChangeHook(SM_ConVarChanged_Enable); + SM_hHBRatio.AddChangeHook(SM_CVChanged_HealthBonusRatio); + SM_hSurvivalBonusRatio.AddChangeHook(SM_CVChanged_SurvivalBonusRatio); + SM_hTempMulti0.AddChangeHook(SM_ConVarChanged_TempMulti0); + SM_hTempMulti1.AddChangeHook(SM_ConVarChanged_TempMulti1); + SM_hTempMulti2.AddChangeHook(SM_ConVarChanged_TempMulti2); + + SM_hSurvivalBonus = FindConVar("vs_survival_bonus"); + SM_hTieBreaker = FindConVar("vs_tiebreak_bonus"); + SM_hHealPercent = FindConVar("first_aid_heal_percent"); + SM_hPillPercent = FindConVar("pain_pills_health_value"); + SM_hAdrenPercent = FindConVar("adrenaline_health_buffer"); + + SM_fHealPercent = SM_hHealPercent.FloatValue; + SM_iPillPercent = SM_hPillPercent.IntValue; + SM_iAdrenPercent = SM_hAdrenPercent.IntValue; + SM_iDefaultSurvivalBonus = SM_hSurvivalBonus.IntValue; + SM_iDefaultTieBreaker = SM_hTieBreaker.IntValue; + + SM_hHealPercent.AddChangeHook(SM_ConVarChanged_Health); + SM_hPillPercent.AddChangeHook(SM_ConVarChanged_Health); + SM_hAdrenPercent.AddChangeHook(SM_ConVarChanged_Health); + + RegConsoleCmd("sm_health", SM_Cmd_Health); + RegConsoleCmd("sm_bonus", SM_Cmd_Health); } void SM_OnModuleEnd() { - PluginDisable(false); + PluginDisable(false); } void SM_OnMapStart() { - if (!IsPluginEnabled()) { - return; - } - - SM_fMapMulti = (!SM_hMapMulti.BoolValue) ? 1.00 : float(L4D_GetVersusMaxCompletionScore()) / 400.0; - - SM_bModuleIsEnabled = SM_hEnable.BoolValue; - - if (SM_bModuleIsEnabled && !SM_bHooked) { - PluginEnable(); - } - - if (SM_bModuleIsEnabled) { - SM_hTieBreaker.SetInt(0); - } - - if (SM_bModuleIsEnabled && SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { - L4D_SetVersusMaxCompletionScore(GetCustomMapMaxScore()); - // to allow a distance score of 0 and a health bonus - if (GetCustomMapMaxScore() > 0) { - SM_fMapMulti = float(GetCustomMapMaxScore()) / 400.0; - } - } - - SM_bIsFirstRoundOver = false; - SM_bIsSecondRoundStarted = false; - SM_bIsSecondRoundOver = false; - SM_iFirstScore = 0; - - SM_fTempMulti[0] = SM_hTempMulti0.FloatValue; - SM_fTempMulti[1] = SM_hTempMulti1.FloatValue; - SM_fTempMulti[2] = SM_hTempMulti2.FloatValue; + if (!IsPluginEnabled()) { + return; + } + + SM_fMapMulti = (!SM_hMapMulti.BoolValue) ? 1.00 : float(L4D_GetVersusMaxCompletionScore()) / 400.0; + + SM_bModuleIsEnabled = SM_hEnable.BoolValue; + + if (SM_bModuleIsEnabled && !SM_bHooked) { + PluginEnable(); + } + + if (SM_bModuleIsEnabled) { + SM_hTieBreaker.SetInt(0); + } + + if (SM_bModuleIsEnabled && SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { + L4D_SetVersusMaxCompletionScore(GetCustomMapMaxScore()); + // to allow a distance score of 0 and a health bonus + if (GetCustomMapMaxScore() > 0) { + SM_fMapMulti = float(GetCustomMapMaxScore()) / 400.0; + } + } + + SM_bIsFirstRoundOver = false; + SM_bIsSecondRoundStarted = false; + SM_bIsSecondRoundOver = false; + SM_iFirstScore = 0; + + SM_fTempMulti[0] = SM_hTempMulti0.FloatValue; + SM_fTempMulti[1] = SM_hTempMulti1.FloatValue; + SM_fTempMulti[2] = SM_hTempMulti2.FloatValue; } public void SM_ConVarChanged_Enable(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - if (StringToInt(sNewValue) == 0) { - PluginDisable(); - SM_bModuleIsEnabled = false; - } else { - PluginEnable(); - SM_bModuleIsEnabled = true; - } + if (StringToInt(sNewValue) == 0) { + PluginDisable(); + SM_bModuleIsEnabled = false; + } else { + PluginEnable(); + SM_bModuleIsEnabled = true; + } } public void SM_ConVarChanged_TempMulti0(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - SM_fTempMulti[0] = StringToFloat(sNewValue); + SM_fTempMulti[0] = StringToFloat(sNewValue); } public void SM_ConVarChanged_TempMulti1(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - SM_fTempMulti[1] = StringToFloat(sNewValue); + SM_fTempMulti[1] = StringToFloat(sNewValue); } public void SM_ConVarChanged_TempMulti2(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - SM_fTempMulti[2] = StringToFloat(sNewValue); + SM_fTempMulti[2] = StringToFloat(sNewValue); } public void SM_CVChanged_HealthBonusRatio(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - SM_fHBRatio = StringToFloat(sNewValue); + SM_fHBRatio = StringToFloat(sNewValue); } public void SM_CVChanged_SurvivalBonusRatio(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - SM_fSurvivalBonusRatio = StringToFloat(sNewValue); + SM_fSurvivalBonusRatio = StringToFloat(sNewValue); } public void SM_ConVarChanged_Health(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - SM_fHealPercent = SM_hHealPercent.FloatValue; - SM_iPillPercent = SM_hPillPercent.IntValue; - SM_iAdrenPercent = SM_hAdrenPercent.IntValue; + SM_fHealPercent = SM_hHealPercent.FloatValue; + SM_iPillPercent = SM_hPillPercent.IntValue; + SM_iAdrenPercent = SM_hAdrenPercent.IntValue; } static void PluginEnable() { - ToggleHook(true); + ToggleHook(true); - SM_fHBRatio = SM_hHBRatio.FloatValue; - SM_fSurvivalBonusRatio = SM_hSurvivalBonusRatio.FloatValue; - SM_iDefaultSurvivalBonus = SM_hSurvivalBonus.IntValue; - SM_iDefaultTieBreaker = SM_hTieBreaker.IntValue; + SM_fHBRatio = SM_hHBRatio.FloatValue; + SM_fSurvivalBonusRatio = SM_hSurvivalBonusRatio.FloatValue; + SM_iDefaultSurvivalBonus = SM_hSurvivalBonus.IntValue; + SM_iDefaultTieBreaker = SM_hTieBreaker.IntValue; - SM_hTieBreaker.SetInt(0); + SM_hTieBreaker.SetInt(0); - SM_fHealPercent = SM_hHealPercent.FloatValue; - SM_iPillPercent = SM_hPillPercent.IntValue; - SM_iAdrenPercent = SM_hAdrenPercent.IntValue; + SM_fHealPercent = SM_hHealPercent.FloatValue; + SM_iPillPercent = SM_hPillPercent.IntValue; + SM_iAdrenPercent = SM_hAdrenPercent.IntValue; - SM_bHooked = true; + SM_bHooked = true; } static void ToggleHook(bool bIsHook) { - if (bIsHook) { - if (!SM_bEventsHooked) { - HookEvent("door_close", SM_DoorClose_Event); - HookEvent("player_death", SM_PlayerDeath_Event); - HookEvent("round_end", SM_RoundEnd_Event, EventHookMode_PostNoCopy); - HookEvent("round_start", SM_RoundStart_Event, EventHookMode_PostNoCopy); - HookEvent("finale_vehicle_leaving", SM_FinaleVehicleLeaving_Event, EventHookMode_PostNoCopy); - - /*AddCommandListener(SM_Command_Say, "say"); - AddCommandListener(SM_Command_Say, "say_team");*/ - - SM_bEventsHooked = true; - } - } else { - if (SM_bEventsHooked) { - UnhookEvent("door_close", SM_DoorClose_Event); - UnhookEvent("player_death", SM_PlayerDeath_Event); - UnhookEvent("round_end", SM_RoundEnd_Event, EventHookMode_PostNoCopy); - UnhookEvent("round_start", SM_RoundStart_Event, EventHookMode_PostNoCopy); - UnhookEvent("finale_vehicle_leaving", SM_FinaleVehicleLeaving_Event, EventHookMode_PostNoCopy); - - /*RemoveCommandListener(SM_Command_Say, "say"); - RemoveCommandListener(SM_Command_Say, "say_team");*/ - - SM_bEventsHooked = false; - } - } + if (bIsHook) { + if (!SM_bEventsHooked) { + HookEvent("door_close", SM_DoorClose_Event); + HookEvent("player_death", SM_PlayerDeath_Event); + HookEvent("round_end", SM_RoundEnd_Event, EventHookMode_PostNoCopy); + HookEvent("round_start", SM_RoundStart_Event, EventHookMode_PostNoCopy); + HookEvent("finale_vehicle_leaving", SM_FinaleVehicleLeaving_Event, EventHookMode_PostNoCopy); + + /*AddCommandListener(SM_Command_Say, "say"); + AddCommandListener(SM_Command_Say, "say_team");*/ + + SM_bEventsHooked = true; + } + } else { + if (SM_bEventsHooked) { + UnhookEvent("door_close", SM_DoorClose_Event); + UnhookEvent("player_death", SM_PlayerDeath_Event); + UnhookEvent("round_end", SM_RoundEnd_Event, EventHookMode_PostNoCopy); + UnhookEvent("round_start", SM_RoundStart_Event, EventHookMode_PostNoCopy); + UnhookEvent("finale_vehicle_leaving", SM_FinaleVehicleLeaving_Event, EventHookMode_PostNoCopy); + + /*RemoveCommandListener(SM_Command_Say, "say"); + RemoveCommandListener(SM_Command_Say, "say_team");*/ + + SM_bEventsHooked = false; + } + } } static void PluginDisable(bool unhook = true) { - if (unhook) { - ToggleHook(false); - } + if (unhook) { + ToggleHook(false); + } - SM_hSurvivalBonus.SetInt(SM_iDefaultSurvivalBonus); - SM_hTieBreaker.SetInt(SM_iDefaultTieBreaker); + SM_hSurvivalBonus.SetInt(SM_iDefaultSurvivalBonus); + SM_hTieBreaker.SetInt(SM_iDefaultTieBreaker); - SM_bHooked = false; + SM_bHooked = false; } public void SM_DoorClose_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!SM_bModuleIsEnabled || !IsPluginEnabled() || !hEvent.GetBool("checkpoint")) { - return; - } + if (!SM_bModuleIsEnabled || !IsPluginEnabled() || !hEvent.GetBool("checkpoint")) { + return; + } - SM_hSurvivalBonus.SetInt(SM_CalculateSurvivalBonus()); + SM_hSurvivalBonus.SetInt(SM_CalculateSurvivalBonus()); } public void SM_PlayerDeath_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { - return; - } + if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { + return; + } - int client = GetClientOfUserId(hEvent.GetInt("userid")); + int client = GetClientOfUserId(hEvent.GetInt("userid")); - // Can't just check for fakeclient - if (client > 0 && GetClientTeam(client) == L4D2Team_Survivor) { - SM_hSurvivalBonus.SetInt(SM_CalculateSurvivalBonus()); - } + // Can't just check for fakeclient + if (client > 0 && GetClientTeam(client) == L4D2Team_Survivor) { + SM_hSurvivalBonus.SetInt(SM_CalculateSurvivalBonus()); + } } public void SM_RoundEnd_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { - return; - } - - if (!SM_bIsFirstRoundOver) { - // First round just ended, save the current score. - SM_bIsFirstRoundOver = true; - int iAliveCount; - SM_iFirstScore = RoundToFloor(SM_CalculateAvgHealth(iAliveCount) * SM_fMapMulti * SM_fHBRatio + 400 * SM_fMapMulti * SM_fSurvivalBonusRatio * iAliveCount / 4.0); - - // If the score is nonzero, trust the SurvivalBonus var. - SM_iFirstScore = (SM_iFirstScore) ? (SM_hSurvivalBonus.IntValue * iAliveCount) : 0; - - //PrintToChatAll("\x01[\x05Confogl\x01] Round 1 Bonus: \x04%d", SM_iFirstScore); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Round 1 Bonus: {olive}%d", SM_iFirstScore); - - if (SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { - //PrintToChatAll("\x01[\x05Confogl\x01] Custom Max Distance: \x04%d", GetCustomMapMaxScore()); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Custom Max Distance: {olive}%d", GetCustomMapMaxScore()); - } - } else if (SM_bIsSecondRoundStarted && !SM_bIsSecondRoundOver) { - SM_bIsSecondRoundOver = true; - // Second round has ended, print scores - - int iAliveCount; - int iScore = RoundToFloor(SM_CalculateAvgHealth(iAliveCount) * SM_fMapMulti * SM_fHBRatio + 400 * SM_fMapMulti * SM_fSurvivalBonusRatio * iAliveCount / 4.0); - // If the score is nonzero, trust the SurvivalBonus var. - iScore = (iScore) ? (SM_hSurvivalBonus.IntValue * iAliveCount) : 0; - - //PrintToChatAll("\x01[\x05Confogl\x01] Round 1 Bonus: \x04%d", SM_iFirstScore); - //PrintToChatAll("\x01[\x05Confogl\x01] Round 2 Bonus: \x04%d", iScore); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Round 1 Bonus: {olive}%d", SM_iFirstScore); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Round 2 Bonus: {olive}%d", iScore); - - if (SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { - //PrintToChatAll("\x01[\x05Confogl\x01] Custom Max Distance: \x04%d", GetCustomMapMaxScore()); - CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Custom Max Distance: {olive}%d", GetCustomMapMaxScore()); - } - } + if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { + return; + } + + if (!SM_bIsFirstRoundOver) { + // First round just ended, save the current score. + SM_bIsFirstRoundOver = true; + int iAliveCount; + SM_iFirstScore = RoundToFloor(SM_CalculateAvgHealth(iAliveCount) * SM_fMapMulti * SM_fHBRatio + 400 * SM_fMapMulti * SM_fSurvivalBonusRatio * iAliveCount / 4.0); + + // If the score is nonzero, trust the SurvivalBonus var. + SM_iFirstScore = (SM_iFirstScore) ? (SM_hSurvivalBonus.IntValue * iAliveCount) : 0; + + //PrintToChatAll("\x01[\x05Confogl\x01] Round 1 Bonus: \x04%d", SM_iFirstScore); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Round 1 Bonus: {olive}%d", SM_iFirstScore); + + if (SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { + //PrintToChatAll("\x01[\x05Confogl\x01] Custom Max Distance: \x04%d", GetCustomMapMaxScore()); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Custom Max Distance: {olive}%d", GetCustomMapMaxScore()); + } + } else if (SM_bIsSecondRoundStarted && !SM_bIsSecondRoundOver) { + SM_bIsSecondRoundOver = true; + // Second round has ended, print scores + + int iAliveCount; + int iScore = RoundToFloor(SM_CalculateAvgHealth(iAliveCount) * SM_fMapMulti * SM_fHBRatio + 400 * SM_fMapMulti * SM_fSurvivalBonusRatio * iAliveCount / 4.0); + // If the score is nonzero, trust the SurvivalBonus var. + iScore = (iScore) ? (SM_hSurvivalBonus.IntValue * iAliveCount) : 0; + + //PrintToChatAll("\x01[\x05Confogl\x01] Round 1 Bonus: \x04%d", SM_iFirstScore); + //PrintToChatAll("\x01[\x05Confogl\x01] Round 2 Bonus: \x04%d", iScore); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Round 1 Bonus: {olive}%d", SM_iFirstScore); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Round 2 Bonus: {olive}%d", iScore); + + if (SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { + //PrintToChatAll("\x01[\x05Confogl\x01] Custom Max Distance: \x04%d", GetCustomMapMaxScore()); + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Custom Max Distance: {olive}%d", GetCustomMapMaxScore()); + } + } } public void SM_RoundStart_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!SM_bModuleIsEnabled || !IsPluginEnabled() || !SM_bIsFirstRoundOver) { - return; - } + if (!SM_bModuleIsEnabled || !IsPluginEnabled() || !SM_bIsFirstRoundOver) { + return; + } - // Mark the beginning of the second round. - SM_bIsSecondRoundStarted = true; + // Mark the beginning of the second round. + SM_bIsSecondRoundStarted = true; } public void SM_FinaleVehicleLeaving_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { - return; - } + if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { + return; + } - SM_hSurvivalBonus.SetInt(SM_CalculateSurvivalBonus()); + SM_hSurvivalBonus.SetInt(SM_CalculateSurvivalBonus()); } public Action SM_Cmd_Health(int client, int args) { - if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { - return Plugin_Handled; - } - - int iAliveCount; - float fAvgHealth = SM_CalculateAvgHealth(iAliveCount); - - if (SM_bIsSecondRoundStarted) { - //PrintToChat(client, "\x01[\x05Confogl\x01] Round 1 Bonus: \x04%d", SM_iFirstScore); - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Round 1 Bonus: {olive}%d", SM_iFirstScore); - } - - if (client) { - //PrintToChat(client, "\x01[\x05Confogl\x01] Average Health: \x04%.02f", fAvgHealth); - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Average Health: {olive}%.02f", fAvgHealth); - } else { - PrintToServer("[Confogl] Average Health: %.02f", fAvgHealth); - } - - int iScore = RoundToFloor(fAvgHealth * SM_fMapMulti * SM_fHBRatio) * iAliveCount; - - if (DEBUG_SM || IsDebugEnabled()) { - LogMessage("[%s] CalcScore: %d MapMulti: %.02f Multiplier %.02f", SM_MODULE_NAME, iScore, SM_fMapMulti, SM_fHBRatio); - } - - if (client) { - //PrintToChat(client, "\x01[\x05Confogl\x01] Health Bonus: \x04%d", iScore); - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Health Bonus: {olive}%d", iScore); - - if (SM_fSurvivalBonusRatio != 0.0) { - //PrintToChat(client, "\x01[\x05Confogl\x01] Static Survival Bonus Per Survivor: \x04%d", RoundToFloor(400 * SM_fMapMulti * SM_fSurvivalBonusRatio)); - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Static Survival Bonus Per Survivor: {olive}%d", RoundToFloor(400 * SM_fMapMulti * SM_fSurvivalBonusRatio)); - } - - if (SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { - //PrintToChat(client, "\x01[\x05Confogl\x01] Custom Max Distance: \x04%d", GetCustomMapMaxScore()); - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Custom Max Distance: {olive}%d", GetCustomMapMaxScore()); - } - } else { - PrintToServer("[Confogl] Health Bonus: %d", iScore); - - if (SM_fSurvivalBonusRatio != 0.0) { - PrintToServer("[Confogl] Static Survival Bonus Per Survivor: %d", RoundToFloor(400 * SM_fMapMulti * SM_fSurvivalBonusRatio)); - } - - if (SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { - PrintToServer("[Confogl] Custom Max Distance: %d", GetCustomMapMaxScore()); - } - } - - return Plugin_Handled; + if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { + return Plugin_Handled; + } + + int iAliveCount; + float fAvgHealth = SM_CalculateAvgHealth(iAliveCount); + + if (SM_bIsSecondRoundStarted) { + //PrintToChat(client, "\x01[\x05Confogl\x01] Round 1 Bonus: \x04%d", SM_iFirstScore); + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Round 1 Bonus: {olive}%d", SM_iFirstScore); + } + + if (client) { + //PrintToChat(client, "\x01[\x05Confogl\x01] Average Health: \x04%.02f", fAvgHealth); + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Average Health: {olive}%.02f", fAvgHealth); + } else { + PrintToServer("[Confogl] Average Health: %.02f", fAvgHealth); + } + + int iScore = RoundToFloor(fAvgHealth * SM_fMapMulti * SM_fHBRatio) * iAliveCount; + + if (DEBUG_SM || IsDebugEnabled()) { + LogMessage("[%s] CalcScore: %d MapMulti: %.02f Multiplier %.02f", SM_MODULE_NAME, iScore, SM_fMapMulti, SM_fHBRatio); + } + + if (client) { + //PrintToChat(client, "\x01[\x05Confogl\x01] Health Bonus: \x04%d", iScore); + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Health Bonus: {olive}%d", iScore); + + if (SM_fSurvivalBonusRatio != 0.0) { + //PrintToChat(client, "\x01[\x05Confogl\x01] Static Survival Bonus Per Survivor: \x04%d", RoundToFloor(400 * SM_fMapMulti * SM_fSurvivalBonusRatio)); + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Static Survival Bonus Per Survivor: {olive}%d", RoundToFloor(400 * SM_fMapMulti * SM_fSurvivalBonusRatio)); + } + + if (SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { + //PrintToChat(client, "\x01[\x05Confogl\x01] Custom Max Distance: \x04%d", GetCustomMapMaxScore()); + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Custom Max Distance: {olive}%d", GetCustomMapMaxScore()); + } + } else { + PrintToServer("[Confogl] Health Bonus: %d", iScore); + + if (SM_fSurvivalBonusRatio != 0.0) { + PrintToServer("[Confogl] Static Survival Bonus Per Survivor: %d", RoundToFloor(400 * SM_fMapMulti * SM_fSurvivalBonusRatio)); + } + + if (SM_hCustomMaxDistance.BoolValue && GetCustomMapMaxScore() > -1) { + PrintToServer("[Confogl] Custom Max Distance: %d", GetCustomMapMaxScore()); + } + } + + return Plugin_Handled; } static float SM_CalculateAvgHealth(int &iAliveCount = 0) { - // Temporary Storage Variables for inventory - char strTemp[MAX_ENTITY_NAME_LENGTH]; - - int iTotalHealth, iTotalTempHealth[3], iTemp; - int iCurrHealth, iCurrTemp, iIncapCount, iSurvCount; - - float fTotalAdjustedTempHealth; - - bool IsFinale = L4D_IsMissionFinalMap(); - - iAliveCount = 0; - - for (int index = 1; index <= MaxClients; index++) { - if (IsSurvivor(index)) { - iSurvCount++; - if (IsPlayerAlive(index)) { - if (GetEntProp(index, Prop_Send, "m_isIncapacitated", 1) < 1) { - - // Get Main health stats - iCurrHealth = GetSurvivorPermanentHealth(index); - iCurrTemp = GetSurvivorTempHealth(index); - iIncapCount = GetSurvivorIncapCount(index); - - // Adjust for kits - iTemp = GetPlayerWeaponSlot(index, L4D2WeaponSlot_HeavyHealthItem); - if (iTemp > -1) { - GetEdictClassname(iTemp, strTemp, sizeof(strTemp)); - - if (strcmp(strTemp, "weapon_first_aid_kit") == 0) { - iCurrHealth = RoundToFloor(iCurrHealth + ((100 - iCurrHealth) * SM_fHealPercent)); - iCurrTemp = 0; - iIncapCount = 0; - } - } - - // Adjust for pills/adrenaline - iTemp = GetPlayerWeaponSlot(index, L4D2WeaponSlot_LightHealthItem); - if (iTemp > -1) { - GetEdictClassname(iTemp, strTemp, sizeof(strTemp)); - - if (strcmp(strTemp, "weapon_pain_pills") == 0) { - iCurrTemp += SM_iPillPercent; - } else if (strcmp(strTemp, "weapon_adrenaline") == 0) { - iCurrTemp += SM_iAdrenPercent; - } - } - - // Enforce max 100 total health points - if ((iCurrTemp + iCurrHealth) > 100) { - iCurrTemp = 100 - iCurrHealth; - } - - iAliveCount++; - iTotalHealth += iCurrHealth; - - if (iIncapCount < 0) { - iIncapCount = 0; - } else if (iIncapCount > 2) { - iIncapCount = 2; - } - - iTotalTempHealth[iIncapCount] += iCurrTemp; - } else if (!IsFinale) { - iAliveCount++; - } - } - } - } - - for (int i = 0; i < 3; i++) { - fTotalAdjustedTempHealth += iTotalTempHealth[i] * SM_fTempMulti[i]; - } - - // Total Score = Average Health points * numAlive - - // Average Health points = Total Health Points / Survivor Count - // Total Health Points = Total Permanent Health + Total Adjusted Temp Health - - // return Average Health Points - float fAvgHealth = (iTotalHealth + fTotalAdjustedTempHealth) / iSurvCount; + // Temporary Storage Variables for inventory + char strTemp[MAX_ENTITY_NAME_LENGTH]; + + int iTotalHealth, iTotalTempHealth[3], iTemp; + int iCurrHealth, iCurrTemp, iIncapCount, iSurvCount; + + float fTotalAdjustedTempHealth; + + bool IsFinale = L4D_IsMissionFinalMap(); + + iAliveCount = 0; + + for (int index = 1; index <= MaxClients; index++) { + if (IsSurvivor(index)) { + iSurvCount++; + if (IsPlayerAlive(index)) { + if (GetEntProp(index, Prop_Send, "m_isIncapacitated", 1) < 1) { + + // Get Main health stats + iCurrHealth = GetSurvivorPermanentHealth(index); + iCurrTemp = GetSurvivorTempHealth(index); + iIncapCount = GetSurvivorIncapCount(index); + + // Adjust for kits + iTemp = GetPlayerWeaponSlot(index, L4D2WeaponSlot_HeavyHealthItem); + if (iTemp > -1) { + GetEdictClassname(iTemp, strTemp, sizeof(strTemp)); + + if (strcmp(strTemp, "weapon_first_aid_kit") == 0) { + iCurrHealth = RoundToFloor(iCurrHealth + ((100 - iCurrHealth) * SM_fHealPercent)); + iCurrTemp = 0; + iIncapCount = 0; + } + } + + // Adjust for pills/adrenaline + iTemp = GetPlayerWeaponSlot(index, L4D2WeaponSlot_LightHealthItem); + if (iTemp > -1) { + GetEdictClassname(iTemp, strTemp, sizeof(strTemp)); + + if (strcmp(strTemp, "weapon_pain_pills") == 0) { + iCurrTemp += SM_iPillPercent; + } else if (strcmp(strTemp, "weapon_adrenaline") == 0) { + iCurrTemp += SM_iAdrenPercent; + } + } + + // Enforce max 100 total health points + if ((iCurrTemp + iCurrHealth) > 100) { + iCurrTemp = 100 - iCurrHealth; + } + + iAliveCount++; + iTotalHealth += iCurrHealth; + + if (iIncapCount < 0) { + iIncapCount = 0; + } else if (iIncapCount > 2) { + iIncapCount = 2; + } + + iTotalTempHealth[iIncapCount] += iCurrTemp; + } else if (!IsFinale) { + iAliveCount++; + } + } + } + } + + for (int i = 0; i < 3; i++) { + fTotalAdjustedTempHealth += iTotalTempHealth[i] * SM_fTempMulti[i]; + } + + // Total Score = Average Health points * numAlive + + // Average Health points = Total Health Points / Survivor Count + // Total Health Points = Total Permanent Health + Total Adjusted Temp Health + + // return Average Health Points + float fAvgHealth = (iTotalHealth + fTotalAdjustedTempHealth) / iSurvCount; #if DEBUG_SM - LogMessage("[%s] TotalPerm: %d TotalAdjustedTemp: %.02f SurvCount: %d AliveCount: %d AvgHealth: %.02f", \ - SM_MODULE_NAME, iTotalHealth, fTotalAdjustedTempHealth, iSurvCount, iAliveCount, fAvgHealth); + LogMessage("[%s] TotalPerm: %d TotalAdjustedTemp: %.02f SurvCount: %d AliveCount: %d AvgHealth: %.02f", \ + SM_MODULE_NAME, iTotalHealth, fTotalAdjustedTempHealth, iSurvCount, iAliveCount, fAvgHealth); #endif - return fAvgHealth; + return fAvgHealth; } /*public Action SM_Command_Say(int iClient, const char[] sCommand, int iArgc) { - if (iClient == 0 || !SM_bModuleIsEnabled || !IsPluginEnabled()) { - return Plugin_Continue; - } + if (iClient == 0 || !SM_bModuleIsEnabled || !IsPluginEnabled()) { + return Plugin_Continue; + } - char sMessage[MAX_NAME_LENGTH]; - GetCmdArg(1, sMessage, sizeof(sMessage)); + char sMessage[MAX_NAME_LENGTH]; + GetCmdArg(1, sMessage, sizeof(sMessage)); - if (strcmp(sMessage, "!health") == 0) { - return Plugin_Handled; - } + if (strcmp(sMessage, "!health") == 0) { + return Plugin_Handled; + } - return Plugin_Continue; + return Plugin_Continue; }*/ static int SM_CalculateSurvivalBonus() { - return RoundToFloor(SM_CalculateAvgHealth() * SM_fMapMulti * SM_fHBRatio + 400 * SM_fMapMulti * SM_fSurvivalBonusRatio); + return RoundToFloor(SM_CalculateAvgHealth() * SM_fMapMulti * SM_fHBRatio + 400 * SM_fMapMulti * SM_fSurvivalBonusRatio); } static int SM_CalculateScore() { - int iAliveCount = 0; - float fScore = SM_CalculateAvgHealth(iAliveCount); + int iAliveCount = 0; + float fScore = SM_CalculateAvgHealth(iAliveCount); - return RoundToFloor(fScore * SM_fMapMulti * SM_fHBRatio + 400 * SM_fMapMulti * SM_fSurvivalBonusRatio) * iAliveCount; + return RoundToFloor(fScore * SM_fMapMulti * SM_fHBRatio + 400 * SM_fMapMulti * SM_fSurvivalBonusRatio) * iAliveCount; } public int Native_IsScoremodEnabled(Handle plugin, int numParams) { - return (SM_bModuleIsEnabled && IsPluginEnabled()); + return (SM_bModuleIsEnabled && IsPluginEnabled()); } public int Native_GetScoremodBonus(Handle plugin, int numParams) { - if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { - return -1; - } + if (!SM_bModuleIsEnabled || !IsPluginEnabled()) { + return -1; + } - return SM_CalculateScore(); + return SM_CalculateScore(); } diff --git a/addons/sourcemod/scripting/confoglcompmod/UnprohibitBosses.sp b/addons/sourcemod/scripting/confoglcompmod/UnprohibitBosses.sp index 41d334c70..b8543eb62 100644 --- a/addons/sourcemod/scripting/confoglcompmod/UnprohibitBosses.sp +++ b/addons/sourcemod/scripting/confoglcompmod/UnprohibitBosses.sp @@ -1,58 +1,58 @@ #if defined __unprohibit_bosses_included - #endinput + #endinput #endif #define __unprohibit_bosses_included -#define UB_MODULE_NAME "UnprohibitBosses" +#define UB_MODULE_NAME "UnprohibitBosses" static bool - UB_bEnabled = true; + UB_bEnabled = true; static ConVar - UB_hEnable = null; + UB_hEnable = null; void UB_OnModuleStart() { - UB_hEnable = CreateConVarEx("boss_unprohibit", "1", "Enable bosses spawning on all maps, even through they normally aren't allowed", _, true, 0.0, true, 1.0); + UB_hEnable = CreateConVarEx("boss_unprohibit", "1", "Enable bosses spawning on all maps, even through they normally aren't allowed", _, true, 0.0, true, 1.0); - UB_bEnabled = UB_hEnable.BoolValue; //turns on when changing cvar only - UB_hEnable.AddChangeHook(UB_ConVarChange); + UB_bEnabled = UB_hEnable.BoolValue; //turns on when changing cvar only + UB_hEnable.AddChangeHook(UB_ConVarChange); } public void UB_ConVarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - UB_bEnabled = UB_hEnable.BoolValue; + UB_bEnabled = UB_hEnable.BoolValue; } Action UB_OnGetScriptValueInt(const char[] key, int &retVal) { - if (IsPluginEnabled() && UB_bEnabled) { - if (strcmp(key, "DisallowThreatType") == 0) { - retVal = 0; - return Plugin_Handled; - } - - if (strcmp(key, "ProhibitBosses") == 0) { - retVal = 0; - return Plugin_Handled; - } - } - - return Plugin_Continue; + if (IsPluginEnabled() && UB_bEnabled) { + if (strcmp(key, "DisallowThreatType") == 0) { + retVal = 0; + return Plugin_Handled; + } + + if (strcmp(key, "ProhibitBosses") == 0) { + retVal = 0; + return Plugin_Handled; + } + } + + return Plugin_Continue; } Action UB_OnGetMissionVSBossSpawning() { - //if (IsPluginEnabled() && UB_bEnabled) { - if (UB_bEnabled) { - char mapbuf[32]; - GetCurrentMap(mapbuf, sizeof(mapbuf)); - if (strcmp(mapbuf, "c7m1_docks") == 0 || strcmp(mapbuf, "c13m2_southpinestream") == 0) { - return Plugin_Continue; - } - - return Plugin_Handled; - } - - return Plugin_Continue; + //if (IsPluginEnabled() && UB_bEnabled) { + if (UB_bEnabled) { + char mapbuf[32]; + GetCurrentMap(mapbuf, sizeof(mapbuf)); + if (strcmp(mapbuf, "c7m1_docks") == 0 || strcmp(mapbuf, "c13m2_southpinestream") == 0) { + return Plugin_Continue; + } + + return Plugin_Handled; + } + + return Plugin_Continue; } diff --git a/addons/sourcemod/scripting/confoglcompmod/UnreserveLobby.sp b/addons/sourcemod/scripting/confoglcompmod/UnreserveLobby.sp index 650356a3a..4ba51ce74 100644 --- a/addons/sourcemod/scripting/confoglcompmod/UnreserveLobby.sp +++ b/addons/sourcemod/scripting/confoglcompmod/UnreserveLobby.sp @@ -1,36 +1,36 @@ #if defined __unreserve_lobby_included - #endinput + #endinput #endif #define __unreserve_lobby_included -#define UL_MODULE_NAME "UnreserveLobby" +#define UL_MODULE_NAME "UnreserveLobby" static ConVar - UL_hEnable = null; + UL_hEnable = null; void UL_OnModuleStart() { - UL_hEnable = CreateConVarEx("match_killlobbyres", "1", \ - "Sets whether the plugin will clear lobby reservation once a match have begun", \ - _, true, 0.0, true, 1.0 \ - ); + UL_hEnable = CreateConVarEx("match_killlobbyres", "1", \ + "Sets whether the plugin will clear lobby reservation once a match have begun", \ + _, true, 0.0, true, 1.0 \ + ); - RegAdminCmd("sm_killlobbyres", UL_KillLobbyRes, ADMFLAG_BAN, "Forces the plugin to kill lobby reservation"); + RegAdminCmd("sm_killlobbyres", UL_KillLobbyRes, ADMFLAG_BAN, "Forces the plugin to kill lobby reservation"); } void UL_OnClientPutInServer() { - if (!IsPluginEnabled() || !UL_hEnable.BoolValue) { - return; - } + if (!IsPluginEnabled() || !UL_hEnable.BoolValue) { + return; + } - L4D_LobbyUnreserve(); + L4D_LobbyUnreserve(); } public Action UL_KillLobbyRes(int client, int args) { - L4D_LobbyUnreserve(); - ReplyToCommand(client, "[Confogl] Removed lobby reservation."); + L4D_LobbyUnreserve(); + ReplyToCommand(client, "[Confogl] Removed lobby reservation."); - return Plugin_Handled; + return Plugin_Handled; } diff --git a/addons/sourcemod/scripting/confoglcompmod/WaterSlowdown.sp b/addons/sourcemod/scripting/confoglcompmod/WaterSlowdown.sp index ad5565270..1ead1be38 100644 --- a/addons/sourcemod/scripting/confoglcompmod/WaterSlowdown.sp +++ b/addons/sourcemod/scripting/confoglcompmod/WaterSlowdown.sp @@ -1,125 +1,125 @@ #if defined __water_slowdown_included - #endinput + #endinput #endif #define __water_slowdown_included -#define WS_MODULE_NAME "WaterSlowdown" +#define WS_MODULE_NAME "WaterSlowdown" static float - WS_fSlowdownFactor = 0.90; + WS_fSlowdownFactor = 0.90; static bool - WS_bEnabled = true, - WS_bJockeyInWater = false, - WS_bPlayerInWater[MAXPLAYERS + 1] = {false, ...}; + WS_bEnabled = true, + WS_bJockeyInWater = false, + WS_bPlayerInWater[MAXPLAYERS + 1] = {false, ...}; static ConVar - WS_hEnable = null, - WS_hFactor = null; + WS_hEnable = null, + WS_hFactor = null; void WS_OnModuleStart() { - WS_hEnable = CreateConVarEx("waterslowdown", "1", "Enables additional water slowdown", _, true, 0.0, true, 1.0); - WS_hFactor = CreateConVarEx("slowdown_factor", "0.90", "Sets how much water will slow down survivors. 1.00 = Vanilla"); + WS_hEnable = CreateConVarEx("waterslowdown", "1", "Enables additional water slowdown", _, true, 0.0, true, 1.0); + WS_hFactor = CreateConVarEx("slowdown_factor", "0.90", "Sets how much water will slow down survivors. 1.00 = Vanilla"); - WS_SetStatus(); - WS_fSlowdownFactor = WS_hFactor.FloatValue; + WS_SetStatus(); + WS_fSlowdownFactor = WS_hFactor.FloatValue; - WS_hEnable.AddChangeHook(WS_ConVarChange); - WS_hFactor.AddChangeHook(WS_FactorConVarChange); + WS_hEnable.AddChangeHook(WS_ConVarChange); + WS_hFactor.AddChangeHook(WS_FactorConVarChange); - HookEvent("round_start", WS_RoundStart, EventHookMode_PostNoCopy); - HookEvent("jockey_ride", WS_JockeyRide); - HookEvent("jockey_ride_end", WS_JockeyRideEnd); + HookEvent("round_start", WS_RoundStart, EventHookMode_PostNoCopy); + HookEvent("jockey_ride", WS_JockeyRide); + HookEvent("jockey_ride_end", WS_JockeyRideEnd); } public void WS_FactorConVarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - WS_fSlowdownFactor = WS_hFactor.FloatValue; + WS_fSlowdownFactor = WS_hFactor.FloatValue; } public void WS_ConVarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - WS_SetStatus(); + WS_SetStatus(); } void WS_OnMapEnd() { - WS_SetStatus(false); + WS_SetStatus(false); } void WS_OnModuleEnd() { - WS_SetStatus(false); + WS_SetStatus(false); } void WS_OnGameFrame() { - if (!IsServerProcessing() || !IsPluginEnabled() || !WS_bEnabled) { - return; - } - - int client, flags; - - for (int i = 0; i < NUM_OF_SURVIVORS; i++) { - client = GetSurvivorIndex(i); - - if (client != 0 && IsValidEntity(client)) { - flags = GetEntityFlags(client); - - if (!(flags & IN_JUMP && WS_bPlayerInWater[client])) { - if (flags & FL_INWATER) { - if (!WS_bPlayerInWater[client]) { - WS_bPlayerInWater[client] = true; - SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", WS_fSlowdownFactor); - } - } else { - if (WS_bPlayerInWater[client]) { - WS_bPlayerInWater[client] = false; - SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 1.0); - } - } - } - } - } + if (!IsServerProcessing() || !IsPluginEnabled() || !WS_bEnabled) { + return; + } + + int client, flags; + + for (int i = 0; i < NUM_OF_SURVIVORS; i++) { + client = GetSurvivorIndex(i); + + if (client != 0 && IsValidEntity(client)) { + flags = GetEntityFlags(client); + + if (!(flags & IN_JUMP && WS_bPlayerInWater[client])) { + if (flags & FL_INWATER) { + if (!WS_bPlayerInWater[client]) { + WS_bPlayerInWater[client] = true; + SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", WS_fSlowdownFactor); + } + } else { + if (WS_bPlayerInWater[client]) { + WS_bPlayerInWater[client] = false; + SetEntPropFloat(client, Prop_Send, "m_flLaggedMovementValue", 1.0); + } + } + } + } + } } public void WS_RoundStart(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - WS_SetStatus(); + WS_SetStatus(); } public void WS_JockeyRide(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - int victim = GetClientOfUserId(hEvent.GetInt("victim")); - int jockey = GetClientOfUserId(hEvent.GetInt("userid")); - - if (WS_bPlayerInWater[victim] && !WS_bJockeyInWater) { - WS_bJockeyInWater = true; - SetEntPropFloat(jockey, Prop_Send, "m_flLaggedMovementValue", WS_fSlowdownFactor); - } else if (!WS_bPlayerInWater[victim] && WS_bJockeyInWater) { - WS_bJockeyInWater = false; - SetEntPropFloat(jockey, Prop_Send, "m_flLaggedMovementValue", 1.0); - } + int victim = GetClientOfUserId(hEvent.GetInt("victim")); + int jockey = GetClientOfUserId(hEvent.GetInt("userid")); + + if (WS_bPlayerInWater[victim] && !WS_bJockeyInWater) { + WS_bJockeyInWater = true; + SetEntPropFloat(jockey, Prop_Send, "m_flLaggedMovementValue", WS_fSlowdownFactor); + } else if (!WS_bPlayerInWater[victim] && WS_bJockeyInWater) { + WS_bJockeyInWater = false; + SetEntPropFloat(jockey, Prop_Send, "m_flLaggedMovementValue", 1.0); + } } public void WS_JockeyRideEnd(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - int jockey = GetClientOfUserId(hEvent.GetInt("userid")); + int jockey = GetClientOfUserId(hEvent.GetInt("userid")); - WS_bJockeyInWater = false; + WS_bJockeyInWater = false; - if (jockey > 0 && IsValidEntity(jockey)) { - SetEntPropFloat(jockey, Prop_Send, "m_flLaggedMovementValue", 1.0); - } + if (jockey > 0 && IsValidEntity(jockey)) { + SetEntPropFloat(jockey, Prop_Send, "m_flLaggedMovementValue", 1.0); + } } static void WS_SetStatus(bool bEnable = true) { - if (!bEnable) { - WS_bEnabled = false; - return; - } + if (!bEnable) { + WS_bEnabled = false; + return; + } - WS_bEnabled = WS_hEnable.BoolValue; + WS_bEnabled = WS_hEnable.BoolValue; } diff --git a/addons/sourcemod/scripting/confoglcompmod/WeaponCustomization.sp b/addons/sourcemod/scripting/confoglcompmod/WeaponCustomization.sp index 769222f87..4c06909b0 100644 --- a/addons/sourcemod/scripting/confoglcompmod/WeaponCustomization.sp +++ b/addons/sourcemod/scripting/confoglcompmod/WeaponCustomization.sp @@ -1,132 +1,132 @@ #if defined __weapon_customization_included - #endinput + #endinput #endif #define __weapon_customization_included -#define WC_MODULE_NAME "WeaponCustomization" +#define WC_MODULE_NAME "WeaponCustomization" static const char sSniperNames[][] = { - "weapon_hunting_rifle", - "weapon_sniper_military", - "weapon_sniper_awp", - "weapon_sniper_scout", - "weapon_rifle_sg552" + "weapon_hunting_rifle", + "weapon_sniper_military", + "weapon_sniper_awp", + "weapon_sniper_scout", + "weapon_rifle_sg552" }; static char - WC_sLastWeapon[64] = "\0"; + WC_sLastWeapon[64] = "\0"; static int - WC_iLimitCount = 1, - WC_iLastWeapon = -1, - WC_iLastClient = -1; + WC_iLimitCount = 1, + WC_iLastWeapon = -1, + WC_iLastClient = -1; static ConVar - WC_hLimitCount = null; + WC_hLimitCount = null; void WC_OnModuleStart() { - WC_hLimitCount = CreateConVarEx("limit_sniper", "1", "Limits the maximum number of sniping rifles at one time to this number", _, true, 0.0, true, 4.0); + WC_hLimitCount = CreateConVarEx("limit_sniper", "1", "Limits the maximum number of sniping rifles at one time to this number", _, true, 0.0, true, 4.0); - WC_iLimitCount = WC_hLimitCount.IntValue; - WC_hLimitCount.AddChangeHook(WC_ConVarChange); + WC_iLimitCount = WC_hLimitCount.IntValue; + WC_hLimitCount.AddChangeHook(WC_ConVarChange); - HookEvent("player_use", WC_PlayerUse_Event); - HookEvent("weapon_drop", WC_WeaponDrop_Event); + HookEvent("player_use", WC_PlayerUse_Event); + HookEvent("weapon_drop", WC_WeaponDrop_Event); } public void WC_ConVarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - WC_iLimitCount = WC_hLimitCount.IntValue; + WC_iLimitCount = WC_hLimitCount.IntValue; } public void WC_WeaponDrop_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!IsPluginEnabled()) { - return; - } + if (!IsPluginEnabled()) { + return; + } - WC_iLastWeapon = hEvent.GetInt("propid"); - WC_iLastClient = GetClientOfUserId(hEvent.GetInt("userid")); - hEvent.GetString("item", WC_sLastWeapon, sizeof(WC_sLastWeapon)); + WC_iLastWeapon = hEvent.GetInt("propid"); + WC_iLastClient = GetClientOfUserId(hEvent.GetInt("userid")); + hEvent.GetString("item", WC_sLastWeapon, sizeof(WC_sLastWeapon)); } public void WC_PlayerUse_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!IsPluginEnabled()) { - return; - } - - int client = GetClientOfUserId(hEvent.GetInt("userid")); - - int primary = GetPlayerWeaponSlot(client, L4D2WeaponSlot_Primary); - if (primary < 1 || !IsValidEdict(primary)) { - return; - } - - char primary_name[MAX_ENTITY_NAME_LENGTH]; - GetEdictClassname(primary, primary_name, sizeof(primary_name)); - - if (IsValidSniper(primary_name)) { - if (SniperCount(client) >= WC_iLimitCount) { - RemovePlayerItem(client, primary); - //PrintToChat(client, "\x01[\x05Confogl\x01] Maximum \x04%d \x01sniping rifle(s) is enforced.", WC_iLimitCount); - CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Maximum {blue}%d {olive}sniping rifle(s) {default}is enforced.", WC_iLimitCount); - - if (WC_iLastClient == client) { - if (WC_iLastWeapon > 0 && IsValidEdict(WC_iLastWeapon)) { - KillEntity(WC_iLastWeapon); - - int flags = GetCommandFlags("give"); - SetCommandFlags("give", flags ^ FCVAR_CHEAT); - - char sTemp[64]; - Format(sTemp, sizeof(sTemp), "give %s", WC_sLastWeapon); - FakeClientCommand(client, sTemp); - - SetCommandFlags("give", flags); - } - } - } - } - - WC_iLastWeapon = -1; - WC_iLastClient = -1; - WC_sLastWeapon[0] = 0; + if (!IsPluginEnabled()) { + return; + } + + int client = GetClientOfUserId(hEvent.GetInt("userid")); + + int primary = GetPlayerWeaponSlot(client, L4D2WeaponSlot_Primary); + if (primary < 1 || !IsValidEdict(primary)) { + return; + } + + char primary_name[MAX_ENTITY_NAME_LENGTH]; + GetEdictClassname(primary, primary_name, sizeof(primary_name)); + + if (IsValidSniper(primary_name)) { + if (SniperCount(client) >= WC_iLimitCount) { + RemovePlayerItem(client, primary); + //PrintToChat(client, "\x01[\x05Confogl\x01] Maximum \x04%d \x01sniping rifle(s) is enforced.", WC_iLimitCount); + CPrintToChat(client, "{blue}[{default}Confogl{blue}]{default} Maximum {blue}%d {olive}sniping rifle(s) {default}is enforced.", WC_iLimitCount); + + if (WC_iLastClient == client) { + if (WC_iLastWeapon > 0 && IsValidEdict(WC_iLastWeapon)) { + KillEntity(WC_iLastWeapon); + + int flags = GetCommandFlags("give"); + SetCommandFlags("give", flags ^ FCVAR_CHEAT); + + char sTemp[64]; + Format(sTemp, sizeof(sTemp), "give %s", WC_sLastWeapon); + FakeClientCommand(client, sTemp); + + SetCommandFlags("give", flags); + } + } + } + } + + WC_iLastWeapon = -1; + WC_iLastClient = -1; + WC_sLastWeapon[0] = 0; } static int SniperCount(int client) { - char temp[MAX_ENTITY_NAME_LENGTH]; - int count = 0, index = 0, ent = 0; + char temp[MAX_ENTITY_NAME_LENGTH]; + int count = 0, index = 0, ent = 0; - for (int i = 0; i < 4; i++) { - index = GetSurvivorIndex(i); + for (int i = 0; i < 4; i++) { + index = GetSurvivorIndex(i); - if (index != client && index != 0 && IsClientConnected(index)) { - ent = GetPlayerWeaponSlot(index, L4D2WeaponSlot_Primary); + if (index != client && index != 0 && IsClientConnected(index)) { + ent = GetPlayerWeaponSlot(index, L4D2WeaponSlot_Primary); - if (ent > 0 && IsValidEdict(ent)) { - GetEdictClassname(ent, temp, sizeof(temp)); + if (ent > 0 && IsValidEdict(ent)) { + GetEdictClassname(ent, temp, sizeof(temp)); - if (IsValidSniper(temp)) { - count++; - } - } - } - } + if (IsValidSniper(temp)) { + count++; + } + } + } + } - return count; + return count; } static bool IsValidSniper(const char[] sWeaponName) { - for (int i = 0; i < sizeof(sSniperNames); i++) { - if (strcmp(sWeaponName, sSniperNames[i], true) == 0) { - return true; - } - } + for (int i = 0; i < sizeof(sSniperNames); i++) { + if (strcmp(sWeaponName, sSniperNames[i], true) == 0) { + return true; + } + } - return false; + return false; } diff --git a/addons/sourcemod/scripting/confoglcompmod/WeaponInformation.sp b/addons/sourcemod/scripting/confoglcompmod/WeaponInformation.sp index 933a6cc3f..d10963fc2 100644 --- a/addons/sourcemod/scripting/confoglcompmod/WeaponInformation.sp +++ b/addons/sourcemod/scripting/confoglcompmod/WeaponInformation.sp @@ -1,572 +1,572 @@ #if defined __weapon_information_included - #endinput + #endinput #endif #define __weapon_information_included -#define DEBUG_WI 0 +#define DEBUG_WI 0 #if (DEBUG_ALL) - #define DEBUG_WI 1 + #define DEBUG_WI 1 #endif -#define WI_MODULE_NAME "WepInfo" +#define WI_MODULE_NAME "WepInfo" -#define MODEL_PREFIX "models/w_models/weapons/w_" -#define MODEL_SURFIX ".mdl" -#define SPAWN_PREFIX "weapon_" -#define SPAWN_SURFIX "_spawn" +#define MODEL_PREFIX "models/w_models/weapons/w_" +#define MODEL_SURFIX ".mdl" +#define SPAWN_PREFIX "weapon_" +#define SPAWN_SURFIX "_spawn" //==================================================== // Weapon Index & ID //==================================================== -#define WEAPON_REMOVE_INDEX -1 -#define WEAPON_NULL_INDEX 0 - -#define WEAPON_SMG_ID 2 -#define WEAPON_SMG_INDEX 1 -#define WEAPON_PUMPSHOTGUN_ID 3 -#define WEAPON_PUMPSHOTGUN_INDEX 2 - -#define WEAPON_AUTOSHOTGUN_ID 4 -#define WEAPON_AUTOSHOTGUN_INDEX 3 -#define WEAPON_RIFLE_ID 5 -#define WEAPON_RIFLE_INDEX 4 - -#define WEAPON_HUNTING_RIFLE_ID 6 -#define WEAPON_HUNTING_RIFLE_INDEX 5 -#define WEAPON_SMG_SILENCED_ID 7 -#define WEAPON_SMG_SILENCED_INDEX 6 - -#define WEAPON_SHOTGUN_CHROME_ID 8 -#define WEAPON_SHOTGUN_CHROME_INDEX 7 -#define WEAPON_RIFLE_DESERT_ID 9 -#define WEAPON_RIFLE_DESERT_INDEX 8 - -#define WEAPON_SNIPER_MILITARY_ID 10 -#define WEAPON_SNIPER_MILITARY_INDEX 9 -#define WEAPON_SHOTGUN_SPAS_ID 11 -#define WEAPON_SHOTGUN_SPAS_INDEX 10 - -#define WEAPON_GRENADE_LAUNCHER_ID 21 -#define WEAPON_GRENADE_LAUNCHER_INDEX 11 -#define WEAPON_RIFLE_AK47_ID 26 -#define WEAPON_RIFLE_AK47_INDEX 12 - -#define WEAPON_RIFLE_M60_ID 37 -#define WEAPON_RIFLE_M60_INDEX 13 - -#define WEAPON_SMG_MP5_ID 33 -#define WEAPON_SMG_MP5_INDEX 14 -#define WEAPON_RIFLE_SG552_ID 34 -#define WEAPON_RIFLE_SG552_INDEX 15 - -#define WEAPON_SNIPER_AWP_ID 35 -#define WEAPON_SNIPER_AWP_INDEX 16 -#define WEAPON_SNIPER_SCOUT_ID 36 -#define WEAPON_SNIPER_SCOUT_INDEX 17 - -#define WEAPON_CHAINSAW_INDEX 18 - -#define WEAPON_PIPE_BOMB_INDEX 19 -#define WEAPON_MOLOTOV_INDEX 20 -#define WEAPON_VOMITJAR_INDEX 21 - -#define WEAPON_FIRST_AID_KIT_INDEX 22 -#define WEAPON_DEFIBRILLATOR_INDEX 23 -#define WEAPON_UPG_EXPLOSIVE_INDEX 24 -#define WEAPON_UPG_INCENDIARY_INDEX 25 - -#define WEAPON_PAIN_PILLS_INDEX 26 -#define WEAPON_ADRENALINE_INDEX 27 +#define WEAPON_REMOVE_INDEX -1 +#define WEAPON_NULL_INDEX 0 + +#define WEAPON_SMG_ID 2 +#define WEAPON_SMG_INDEX 1 +#define WEAPON_PUMPSHOTGUN_ID 3 +#define WEAPON_PUMPSHOTGUN_INDEX 2 + +#define WEAPON_AUTOSHOTGUN_ID 4 +#define WEAPON_AUTOSHOTGUN_INDEX 3 +#define WEAPON_RIFLE_ID 5 +#define WEAPON_RIFLE_INDEX 4 + +#define WEAPON_HUNTING_RIFLE_ID 6 +#define WEAPON_HUNTING_RIFLE_INDEX 5 +#define WEAPON_SMG_SILENCED_ID 7 +#define WEAPON_SMG_SILENCED_INDEX 6 + +#define WEAPON_SHOTGUN_CHROME_ID 8 +#define WEAPON_SHOTGUN_CHROME_INDEX 7 +#define WEAPON_RIFLE_DESERT_ID 9 +#define WEAPON_RIFLE_DESERT_INDEX 8 + +#define WEAPON_SNIPER_MILITARY_ID 10 +#define WEAPON_SNIPER_MILITARY_INDEX 9 +#define WEAPON_SHOTGUN_SPAS_ID 11 +#define WEAPON_SHOTGUN_SPAS_INDEX 10 + +#define WEAPON_GRENADE_LAUNCHER_ID 21 +#define WEAPON_GRENADE_LAUNCHER_INDEX 11 +#define WEAPON_RIFLE_AK47_ID 26 +#define WEAPON_RIFLE_AK47_INDEX 12 + +#define WEAPON_RIFLE_M60_ID 37 +#define WEAPON_RIFLE_M60_INDEX 13 + +#define WEAPON_SMG_MP5_ID 33 +#define WEAPON_SMG_MP5_INDEX 14 +#define WEAPON_RIFLE_SG552_ID 34 +#define WEAPON_RIFLE_SG552_INDEX 15 + +#define WEAPON_SNIPER_AWP_ID 35 +#define WEAPON_SNIPER_AWP_INDEX 16 +#define WEAPON_SNIPER_SCOUT_ID 36 +#define WEAPON_SNIPER_SCOUT_INDEX 17 + +#define WEAPON_CHAINSAW_INDEX 18 + +#define WEAPON_PIPE_BOMB_INDEX 19 +#define WEAPON_MOLOTOV_INDEX 20 +#define WEAPON_VOMITJAR_INDEX 21 + +#define WEAPON_FIRST_AID_KIT_INDEX 22 +#define WEAPON_DEFIBRILLATOR_INDEX 23 +#define WEAPON_UPG_EXPLOSIVE_INDEX 24 +#define WEAPON_UPG_INCENDIARY_INDEX 25 + +#define WEAPON_PAIN_PILLS_INDEX 26 +#define WEAPON_ADRENALINE_INDEX 27 //==================================================== -#define NUM_OF_WEAPONS 28 +#define NUM_OF_WEAPONS 28 -#define FIRST_WEAPON 1 -#define LAST_WEAPON 18 -#define FIRST_EXTRA 19 -#define LAST_EXTRA 27 +#define FIRST_WEAPON 1 +#define LAST_WEAPON 18 +#define FIRST_EXTRA 19 +#define LAST_EXTRA 27 -#define WEAPON_NUMBER_OF_START_KITS 4 +#define WEAPON_NUMBER_OF_START_KITS 4 enum /*WEAPONATTRIBUTES*/ { - WeaponID, - Tier1EquivalentIndex, - ReplacementIndex, + WeaponID, + Tier1EquivalentIndex, + ReplacementIndex, - WeaponAttributes_Size + WeaponAttributes_Size }; static const int Weapon_Attributes[NUM_OF_WEAPONS][WeaponAttributes_Size] = { - //==================================================== - // Weapons - //==================================================== - - // NULL - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // SMG - { - WEAPON_SMG_ID, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // Pumpshotgun - { - WEAPON_PUMPSHOTGUN_ID, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // Autoshotgun - { - WEAPON_AUTOSHOTGUN_ID, - WEAPON_PUMPSHOTGUN_INDEX, - WEAPON_NULL_INDEX - }, - - // Rifle - { - WEAPON_RIFLE_ID, - WEAPON_SMG_INDEX, - WEAPON_NULL_INDEX - }, - - // Hunting rifle - { - WEAPON_HUNTING_RIFLE_ID, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // SMG silenced - { - WEAPON_SMG_SILENCED_ID, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // Chrome shotgun - { - WEAPON_SHOTGUN_CHROME_ID, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // Desert rifle - { - WEAPON_RIFLE_DESERT_ID, - WEAPON_SMG_INDEX, - WEAPON_NULL_INDEX - }, - - // Military sniper - { - WEAPON_SNIPER_MILITARY_ID, - WEAPON_HUNTING_RIFLE_INDEX, - WEAPON_NULL_INDEX - }, - - // Spas shotgun - { - WEAPON_SHOTGUN_SPAS_ID, - WEAPON_SHOTGUN_CHROME_INDEX, - WEAPON_NULL_INDEX - }, - - // Grenade launcher - { - WEAPON_GRENADE_LAUNCHER_ID, - WEAPON_NULL_INDEX, - WEAPON_REMOVE_INDEX - }, - - // AK47 - { - WEAPON_RIFLE_AK47_ID, - WEAPON_SMG_SILENCED_INDEX, - WEAPON_NULL_INDEX - }, - - // M60 - { - WEAPON_RIFLE_M60_ID, - WEAPON_NULL_INDEX, - WEAPON_REMOVE_INDEX, - }, - - // MP5 - { - WEAPON_SMG_MP5_ID, - WEAPON_NULL_INDEX, - WEAPON_SMG_INDEX - }, - - // SG552 - { - WEAPON_RIFLE_SG552_ID, - WEAPON_SMG_MP5_INDEX, - WEAPON_RIFLE_INDEX - }, - - // AWP - { - WEAPON_SNIPER_AWP_ID, - WEAPON_SNIPER_SCOUT_INDEX, - WEAPON_SNIPER_MILITARY_INDEX - }, - - // Scout - { - WEAPON_SNIPER_SCOUT_ID, - WEAPON_NULL_INDEX, - WEAPON_HUNTING_RIFLE_INDEX - }, - - //==================================================== - // Melee Weapons - //==================================================== - - // Chainsaw - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_REMOVE_INDEX - }, - - //==================================================== - // Extra Items - //==================================================== - - // Pipe Bomb - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // Molotov - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // Vomitjar - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // First Aid Kit - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_REMOVE_INDEX - }, - - // Defibrillator - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_REMOVE_INDEX - }, - - // Explosive Upgrade Pack - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_REMOVE_INDEX - }, - - // Incendiary Upgrade Pack - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_REMOVE_INDEX - }, - - // Pain pills - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - }, - - // Adrenaline - { - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX, - WEAPON_NULL_INDEX - } + //==================================================== + // Weapons + //==================================================== + + // NULL + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // SMG + { + WEAPON_SMG_ID, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // Pumpshotgun + { + WEAPON_PUMPSHOTGUN_ID, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // Autoshotgun + { + WEAPON_AUTOSHOTGUN_ID, + WEAPON_PUMPSHOTGUN_INDEX, + WEAPON_NULL_INDEX + }, + + // Rifle + { + WEAPON_RIFLE_ID, + WEAPON_SMG_INDEX, + WEAPON_NULL_INDEX + }, + + // Hunting rifle + { + WEAPON_HUNTING_RIFLE_ID, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // SMG silenced + { + WEAPON_SMG_SILENCED_ID, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // Chrome shotgun + { + WEAPON_SHOTGUN_CHROME_ID, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // Desert rifle + { + WEAPON_RIFLE_DESERT_ID, + WEAPON_SMG_INDEX, + WEAPON_NULL_INDEX + }, + + // Military sniper + { + WEAPON_SNIPER_MILITARY_ID, + WEAPON_HUNTING_RIFLE_INDEX, + WEAPON_NULL_INDEX + }, + + // Spas shotgun + { + WEAPON_SHOTGUN_SPAS_ID, + WEAPON_SHOTGUN_CHROME_INDEX, + WEAPON_NULL_INDEX + }, + + // Grenade launcher + { + WEAPON_GRENADE_LAUNCHER_ID, + WEAPON_NULL_INDEX, + WEAPON_REMOVE_INDEX + }, + + // AK47 + { + WEAPON_RIFLE_AK47_ID, + WEAPON_SMG_SILENCED_INDEX, + WEAPON_NULL_INDEX + }, + + // M60 + { + WEAPON_RIFLE_M60_ID, + WEAPON_NULL_INDEX, + WEAPON_REMOVE_INDEX, + }, + + // MP5 + { + WEAPON_SMG_MP5_ID, + WEAPON_NULL_INDEX, + WEAPON_SMG_INDEX + }, + + // SG552 + { + WEAPON_RIFLE_SG552_ID, + WEAPON_SMG_MP5_INDEX, + WEAPON_RIFLE_INDEX + }, + + // AWP + { + WEAPON_SNIPER_AWP_ID, + WEAPON_SNIPER_SCOUT_INDEX, + WEAPON_SNIPER_MILITARY_INDEX + }, + + // Scout + { + WEAPON_SNIPER_SCOUT_ID, + WEAPON_NULL_INDEX, + WEAPON_HUNTING_RIFLE_INDEX + }, + + //==================================================== + // Melee Weapons + //==================================================== + + // Chainsaw + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_REMOVE_INDEX + }, + + //==================================================== + // Extra Items + //==================================================== + + // Pipe Bomb + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // Molotov + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // Vomitjar + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // First Aid Kit + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_REMOVE_INDEX + }, + + // Defibrillator + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_REMOVE_INDEX + }, + + // Explosive Upgrade Pack + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_REMOVE_INDEX + }, + + // Incendiary Upgrade Pack + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_REMOVE_INDEX + }, + + // Pain pills + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + }, + + // Adrenaline + { + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX, + WEAPON_NULL_INDEX + } }; static const char Weapon_Models[NUM_OF_WEAPONS][] = { - //==================================================== - // Weapons - //==================================================== + //==================================================== + // Weapons + //==================================================== - // NULL - "", + // NULL + "", - // SMG - "smg_uzi", + // SMG + "smg_uzi", - // Shotgun - "shotgun", + // Shotgun + "shotgun", - // Autoshotgun - "autoshot_m4super", + // Autoshotgun + "autoshot_m4super", - // Rifle - "rifle_m16a2", + // Rifle + "rifle_m16a2", - // Hunting rifle - "sniper_mini14", + // Hunting rifle + "sniper_mini14", - // SMG silenced - "smg_a", + // SMG silenced + "smg_a", - // Chrome shotgun - "pumpshotgun_a", + // Chrome shotgun + "pumpshotgun_a", - // Desert rifle - "rifle_b", + // Desert rifle + "rifle_b", - // Military rifle - "sniper_military", + // Military rifle + "sniper_military", - // Spas shotgun - "shotgun_spas", + // Spas shotgun + "shotgun_spas", - // Grenade launcher - "", + // Grenade launcher + "", - // AK47 - "rifle_ak47", + // AK47 + "rifle_ak47", - // M60 - "m60", + // M60 + "m60", - // MP5 - "smg_mp5", + // MP5 + "smg_mp5", - // SG552 - "", + // SG552 + "", - // AWP - "", + // AWP + "", - // Scout - "sniper_scout", + // Scout + "sniper_scout", - //==================================================== - // Melee Weapons - //==================================================== + //==================================================== + // Melee Weapons + //==================================================== - // Chainsaw - "", + // Chainsaw + "", - //==================================================== - // Extra Items - //==================================================== + //==================================================== + // Extra Items + //==================================================== - // Pipe Bomb - "", + // Pipe Bomb + "", - // Molotov - "", + // Molotov + "", - // Vomitjar - "", + // Vomitjar + "", - // First Aid Kit - "", + // First Aid Kit + "", - // Defibrillator - "", + // Defibrillator + "", - // Explosive Upgrade Pack - "", + // Explosive Upgrade Pack + "", - // Incendiary Upgrade Pack - "", + // Incendiary Upgrade Pack + "", - // Pain pills - "", + // Pain pills + "", - // Adrenaline - "" + // Adrenaline + "" }; static const char Weapon_Spawns[NUM_OF_WEAPONS][] = { - //==================================================== - // Weapons - //==================================================== + //==================================================== + // Weapons + //==================================================== - // NULL - "", + // NULL + "", - // SMG - "", + // SMG + "", - // Shotgun - "", + // Shotgun + "", - // Autoshotgun - "autoshotgun", + // Autoshotgun + "autoshotgun", - // Rifle - "rifle", + // Rifle + "rifle", - // Hunting rifle - "", + // Hunting rifle + "", - // SMG silenced - "", + // SMG silenced + "", - // Chrome shotgun - "", + // Chrome shotgun + "", - // Desert rifle - "rifle_desert", + // Desert rifle + "rifle_desert", - // Military rifle - "sniper_military", + // Military rifle + "sniper_military", - // Spas shotgun - "shotgun_spas", + // Spas shotgun + "shotgun_spas", - // Grenade launcher - "grenade_launcher", + // Grenade launcher + "grenade_launcher", - // AK47 - "rifle_ak47", + // AK47 + "rifle_ak47", - // M60 - "rifle_m60", + // M60 + "rifle_m60", - // MP5 - "", + // MP5 + "", - // SG552 - "", + // SG552 + "", - // AWP - "", + // AWP + "", - // Scout - "", + // Scout + "", - //==================================================== - // Melee Weapons - //==================================================== + //==================================================== + // Melee Weapons + //==================================================== - // Chainsaw - "chainsaw", + // Chainsaw + "chainsaw", - //==================================================== - // Extra Items - //==================================================== + //==================================================== + // Extra Items + //==================================================== - // Pipe Bomb - "pipe_bomb", + // Pipe Bomb + "pipe_bomb", - // Molotov - "molotov", + // Molotov + "molotov", - // Vomitjar - "vomitjar", + // Vomitjar + "vomitjar", - // First Aid Kit - "first_aid_kit", + // First Aid Kit + "first_aid_kit", - // Defibrillator - "defibrillator", + // Defibrillator + "defibrillator", - // Explosive Upgrade Pack - "upgradepack_explosive", + // Explosive Upgrade Pack + "upgradepack_explosive", - // Incendiary Upgrade Pack - "upgradepack_incendiary", + // Incendiary Upgrade Pack + "upgradepack_incendiary", - // Pain pills - "pain_pills", + // Pain pills + "pain_pills", - // Adrenaline - "adrenaline" + // Adrenaline + "adrenaline" }; //==================================================== // Kit Protection //==================================================== static int - Weapon_iKitEntity[WEAPON_NUMBER_OF_START_KITS] = {0, ...}, - Weapon_iKitCount = 0; + Weapon_iKitEntity[WEAPON_NUMBER_OF_START_KITS] = {0, ...}, + Weapon_iKitCount = 0; //==================================================== // Map Info //==================================================== static float - Weapon_fMapOrigin_Start[3], - Weapon_fMapOrigin_End[3], - Weapon_fMapDist_Start, - Weapon_fMapDist_StartExtra, - Weapon_fMapDist_End; + Weapon_fMapOrigin_Start[3], + Weapon_fMapOrigin_End[3], + Weapon_fMapDist_Start, + Weapon_fMapDist_StartExtra, + Weapon_fMapDist_End; static bool - Weapon_bUpdateMapInfo = true; + Weapon_bUpdateMapInfo = true; //==================================================== static bool - Weapon_bConvar[NUM_OF_WEAPONS] = {false, ...}, - Weapon_bReplaceTier2 = true, - Weapon_bReplaceTier2_Finale = true, - Weapon_bReplaceTier2_All = true, - Weapon_bLimitTier2 = true, - Weapon_bLimitTier2_Safehouse = true, - Weapon_bReplaceStartKits = true, - Weapon_bReplaceFinaleKits = true, - Weapon_bRemoveLaserSight = true, - Weapon_bRemoveExtraItems = true; + Weapon_bConvar[NUM_OF_WEAPONS] = {false, ...}, + Weapon_bReplaceTier2 = true, + Weapon_bReplaceTier2_Finale = true, + Weapon_bReplaceTier2_All = true, + Weapon_bLimitTier2 = true, + Weapon_bLimitTier2_Safehouse = true, + Weapon_bReplaceStartKits = true, + Weapon_bReplaceFinaleKits = true, + Weapon_bRemoveLaserSight = true, + Weapon_bRemoveExtraItems = true; static ConVar - Weapon_hConvar[NUM_OF_WEAPONS] = {null, ...}, - Weapon_hReplaceTier2 = null, - Weapon_hReplaceTier2_Finale = null, - Weapon_hReplaceTier2_All = null, - Weapon_hLimitTier2 = null, - Weapon_hLimitTier2_Safehouse = null, - Weapon_hReplaceStartKits = null, - Weapon_hReplaceFinaleKits = null, - Weapon_hRemoveLaserSight = null, - Weapon_hRemoveExtraItems = null; + Weapon_hConvar[NUM_OF_WEAPONS] = {null, ...}, + Weapon_hReplaceTier2 = null, + Weapon_hReplaceTier2_Finale = null, + Weapon_hReplaceTier2_All = null, + Weapon_hLimitTier2 = null, + Weapon_hLimitTier2_Safehouse = null, + Weapon_hReplaceStartKits = null, + Weapon_hReplaceFinaleKits = null, + Weapon_hRemoveLaserSight = null, + Weapon_hRemoveExtraItems = null; //==================================================== // Module setup //==================================================== void WI_OnModuleStart() { - WI_Convar_Setup(); + WI_Convar_Setup(); - HookEvent("round_start", WI_RoundStart_Event, EventHookMode_PostNoCopy); - HookEvent("round_end", WI_RoundEnd_Event, EventHookMode_PostNoCopy); - HookEvent("spawner_give_item", WI_SpawnerGiveItem_Event); + HookEvent("round_start", WI_RoundStart_Event, EventHookMode_PostNoCopy); + HookEvent("round_end", WI_RoundEnd_Event, EventHookMode_PostNoCopy); + HookEvent("spawner_give_item", WI_SpawnerGiveItem_Event); } void WI_OnMapEnd() { - Weapon_bUpdateMapInfo = true; + Weapon_bUpdateMapInfo = true; } //==================================================== @@ -574,77 +574,77 @@ void WI_OnMapEnd() //==================================================== static void WI_Convar_Setup() { - Weapon_hConvar[WEAPON_SMG_MP5_INDEX] = CreateConVarEx("replace_cssweapons", "1", "Replace CSS weapons with normal L4D2 weapons", _, true, 0.0, true, 1.0); - - Weapon_hConvar[WEAPON_RIFLE_SG552_INDEX] = Weapon_hConvar[WEAPON_SMG_MP5_INDEX]; - Weapon_hConvar[WEAPON_SNIPER_AWP_INDEX] = Weapon_hConvar[WEAPON_SMG_MP5_INDEX]; - Weapon_hConvar[WEAPON_SNIPER_SCOUT_INDEX] = Weapon_hConvar[WEAPON_SMG_MP5_INDEX]; - - Weapon_hConvar[WEAPON_GRENADE_LAUNCHER_INDEX] = CreateConVarEx("remove_grenade", "1", "Remove all grenade launchers", _, true, 0.0, true, 1.0); - Weapon_hConvar[WEAPON_CHAINSAW_INDEX] = CreateConVarEx("remove_chainsaw", "1", "Remove all chainsaws", _, true, 0.0, true, 1.0); - Weapon_hConvar[WEAPON_RIFLE_M60_INDEX] = CreateConVarEx("remove_m60", "1", "Remove all M60 rifles", _, true, 0.0, true, 1.0); - - Weapon_hConvar[WEAPON_FIRST_AID_KIT_INDEX] = CreateConVarEx("remove_statickits", "1", "Remove all static medkits (medkits such as the gun shop, these are compiled into the map)", _, true, 0.0, true, 1.0); - Weapon_hConvar[WEAPON_DEFIBRILLATOR_INDEX] = CreateConVarEx("remove_defib", "1", "Remove all defibrillators", _, true, 0.0, true, 1.0); - Weapon_hConvar[WEAPON_UPG_EXPLOSIVE_INDEX] = CreateConVarEx("remove_upg_explosive", "1", "Remove all explosive upgrade packs", _, true, 0.0, true, 1.0); - Weapon_hConvar[WEAPON_UPG_INCENDIARY_INDEX] = CreateConVarEx("remove_upg_incendiary", "1", "Remove all incendiary upgrade packs", _, true, 0.0, true, 1.0); - - for (int index = FIRST_WEAPON; index < NUM_OF_WEAPONS; index++) { - if (Weapon_hConvar[index] == null) { - continue; - } - - Weapon_bConvar[index] = Weapon_hConvar[index].BoolValue; - Weapon_hConvar[index].AddChangeHook(WI_ConvarChange); - } - - Weapon_hReplaceTier2 = CreateConVarEx("replace_tier2", "1", "Replace tier 2 weapons in start and end safe room with their tier 1 equivalent", _, true, 0.0, true, 1.0); - Weapon_hReplaceTier2_Finale = CreateConVarEx("replace_tier2_finale", "1", "Replace tier 2 weapons in start safe room with their tier 1 equivalent, on finale", _, true, 0.0, true, 1.0); - Weapon_hReplaceTier2_All = CreateConVarEx("replace_tier2_all", "1", "Replace ALL tier 2 weapons with their tier 1 equivalent EVERYWHERE", _, true, 0.0, true, 1.0); - Weapon_hLimitTier2 = CreateConVarEx("limit_tier2", "1", "Limit tier 2 weapons outside safe rooms. Replaces a tier 2 stack with tier 1 upon first weapon pickup", _, true, 0.0, true, 1.0); - Weapon_hLimitTier2_Safehouse = CreateConVarEx("limit_tier2_saferoom", "1", "Limit tier 2 weapons inside safe rooms. Replaces a tier 2 stack with tier 1 upon first weapon pickup", _, true, 0.0, true, 1.0); - Weapon_hReplaceStartKits = CreateConVarEx("replace_startkits", "1", "Replaces start medkits with pills", _, true, 0.0, true, 1.0); - Weapon_hReplaceFinaleKits = CreateConVarEx("replace_finalekits", "1", "Replaces finale medkits with pills", _, true, 0.0, true, 1.0); - Weapon_hRemoveLaserSight = CreateConVarEx("remove_lasersight", "1", "Remove all laser sight upgrades", _, true, 0.0, true, 1.0); - Weapon_hRemoveExtraItems = CreateConVarEx("remove_saferoomitems", "1", "Remove all extra items inside saferooms (items for slot 3, 4 and 5, minus medkits)", _, true, 0.0, true, 1.0); - - ConVarsInType(); - - Weapon_hReplaceTier2.AddChangeHook(WI_ConvarChange); - Weapon_hReplaceTier2_Finale.AddChangeHook(WI_ConvarChange); - Weapon_hReplaceTier2_All.AddChangeHook(WI_ConvarChange); - Weapon_hLimitTier2.AddChangeHook(WI_ConvarChange); - Weapon_hLimitTier2_Safehouse.AddChangeHook(WI_ConvarChange); - Weapon_hReplaceStartKits.AddChangeHook(WI_ConvarChange); - Weapon_hReplaceFinaleKits.AddChangeHook(WI_ConvarChange); - Weapon_hRemoveLaserSight.AddChangeHook(WI_ConvarChange); - Weapon_hRemoveExtraItems.AddChangeHook(WI_ConvarChange); + Weapon_hConvar[WEAPON_SMG_MP5_INDEX] = CreateConVarEx("replace_cssweapons", "1", "Replace CSS weapons with normal L4D2 weapons", _, true, 0.0, true, 1.0); + + Weapon_hConvar[WEAPON_RIFLE_SG552_INDEX] = Weapon_hConvar[WEAPON_SMG_MP5_INDEX]; + Weapon_hConvar[WEAPON_SNIPER_AWP_INDEX] = Weapon_hConvar[WEAPON_SMG_MP5_INDEX]; + Weapon_hConvar[WEAPON_SNIPER_SCOUT_INDEX] = Weapon_hConvar[WEAPON_SMG_MP5_INDEX]; + + Weapon_hConvar[WEAPON_GRENADE_LAUNCHER_INDEX] = CreateConVarEx("remove_grenade", "1", "Remove all grenade launchers", _, true, 0.0, true, 1.0); + Weapon_hConvar[WEAPON_CHAINSAW_INDEX] = CreateConVarEx("remove_chainsaw", "1", "Remove all chainsaws", _, true, 0.0, true, 1.0); + Weapon_hConvar[WEAPON_RIFLE_M60_INDEX] = CreateConVarEx("remove_m60", "1", "Remove all M60 rifles", _, true, 0.0, true, 1.0); + + Weapon_hConvar[WEAPON_FIRST_AID_KIT_INDEX] = CreateConVarEx("remove_statickits", "1", "Remove all static medkits (medkits such as the gun shop, these are compiled into the map)", _, true, 0.0, true, 1.0); + Weapon_hConvar[WEAPON_DEFIBRILLATOR_INDEX] = CreateConVarEx("remove_defib", "1", "Remove all defibrillators", _, true, 0.0, true, 1.0); + Weapon_hConvar[WEAPON_UPG_EXPLOSIVE_INDEX] = CreateConVarEx("remove_upg_explosive", "1", "Remove all explosive upgrade packs", _, true, 0.0, true, 1.0); + Weapon_hConvar[WEAPON_UPG_INCENDIARY_INDEX] = CreateConVarEx("remove_upg_incendiary", "1", "Remove all incendiary upgrade packs", _, true, 0.0, true, 1.0); + + for (int index = FIRST_WEAPON; index < NUM_OF_WEAPONS; index++) { + if (Weapon_hConvar[index] == null) { + continue; + } + + Weapon_bConvar[index] = Weapon_hConvar[index].BoolValue; + Weapon_hConvar[index].AddChangeHook(WI_ConvarChange); + } + + Weapon_hReplaceTier2 = CreateConVarEx("replace_tier2", "1", "Replace tier 2 weapons in start and end safe room with their tier 1 equivalent", _, true, 0.0, true, 1.0); + Weapon_hReplaceTier2_Finale = CreateConVarEx("replace_tier2_finale", "1", "Replace tier 2 weapons in start safe room with their tier 1 equivalent, on finale", _, true, 0.0, true, 1.0); + Weapon_hReplaceTier2_All = CreateConVarEx("replace_tier2_all", "1", "Replace ALL tier 2 weapons with their tier 1 equivalent EVERYWHERE", _, true, 0.0, true, 1.0); + Weapon_hLimitTier2 = CreateConVarEx("limit_tier2", "1", "Limit tier 2 weapons outside safe rooms. Replaces a tier 2 stack with tier 1 upon first weapon pickup", _, true, 0.0, true, 1.0); + Weapon_hLimitTier2_Safehouse = CreateConVarEx("limit_tier2_saferoom", "1", "Limit tier 2 weapons inside safe rooms. Replaces a tier 2 stack with tier 1 upon first weapon pickup", _, true, 0.0, true, 1.0); + Weapon_hReplaceStartKits = CreateConVarEx("replace_startkits", "1", "Replaces start medkits with pills", _, true, 0.0, true, 1.0); + Weapon_hReplaceFinaleKits = CreateConVarEx("replace_finalekits", "1", "Replaces finale medkits with pills", _, true, 0.0, true, 1.0); + Weapon_hRemoveLaserSight = CreateConVarEx("remove_lasersight", "1", "Remove all laser sight upgrades", _, true, 0.0, true, 1.0); + Weapon_hRemoveExtraItems = CreateConVarEx("remove_saferoomitems", "1", "Remove all extra items inside saferooms (items for slot 3, 4 and 5, minus medkits)", _, true, 0.0, true, 1.0); + + ConVarsInType(); + + Weapon_hReplaceTier2.AddChangeHook(WI_ConvarChange); + Weapon_hReplaceTier2_Finale.AddChangeHook(WI_ConvarChange); + Weapon_hReplaceTier2_All.AddChangeHook(WI_ConvarChange); + Weapon_hLimitTier2.AddChangeHook(WI_ConvarChange); + Weapon_hLimitTier2_Safehouse.AddChangeHook(WI_ConvarChange); + Weapon_hReplaceStartKits.AddChangeHook(WI_ConvarChange); + Weapon_hReplaceFinaleKits.AddChangeHook(WI_ConvarChange); + Weapon_hRemoveLaserSight.AddChangeHook(WI_ConvarChange); + Weapon_hRemoveExtraItems.AddChangeHook(WI_ConvarChange); } static void ConVarsInType() { - Weapon_bReplaceTier2 = Weapon_hReplaceTier2.BoolValue; - Weapon_bReplaceTier2_Finale = Weapon_hReplaceTier2_Finale.BoolValue; - Weapon_bReplaceTier2_All = Weapon_hReplaceTier2_All.BoolValue; - Weapon_bLimitTier2 = Weapon_hLimitTier2.BoolValue; - Weapon_bLimitTier2_Safehouse = Weapon_hLimitTier2_Safehouse.BoolValue; - Weapon_bReplaceStartKits = Weapon_hReplaceStartKits.BoolValue; - Weapon_bReplaceFinaleKits = Weapon_hReplaceFinaleKits.BoolValue; - Weapon_bRemoveLaserSight = Weapon_hRemoveLaserSight.BoolValue; - Weapon_bRemoveExtraItems = Weapon_hRemoveExtraItems.BoolValue; + Weapon_bReplaceTier2 = Weapon_hReplaceTier2.BoolValue; + Weapon_bReplaceTier2_Finale = Weapon_hReplaceTier2_Finale.BoolValue; + Weapon_bReplaceTier2_All = Weapon_hReplaceTier2_All.BoolValue; + Weapon_bLimitTier2 = Weapon_hLimitTier2.BoolValue; + Weapon_bLimitTier2_Safehouse = Weapon_hLimitTier2_Safehouse.BoolValue; + Weapon_bReplaceStartKits = Weapon_hReplaceStartKits.BoolValue; + Weapon_bReplaceFinaleKits = Weapon_hReplaceFinaleKits.BoolValue; + Weapon_bRemoveLaserSight = Weapon_hRemoveLaserSight.BoolValue; + Weapon_bRemoveExtraItems = Weapon_hRemoveExtraItems.BoolValue; } public void WI_ConvarChange(ConVar hConVar, const char[] sOldValue, const char[] sNewValue) { - for (int index = FIRST_WEAPON; index < NUM_OF_WEAPONS; index++) { - if (Weapon_hConvar[index] == null) { - continue; - } + for (int index = FIRST_WEAPON; index < NUM_OF_WEAPONS; index++) { + if (Weapon_hConvar[index] == null) { + continue; + } - Weapon_bConvar[index] = Weapon_hConvar[index].BoolValue; - } + Weapon_bConvar[index] = Weapon_hConvar[index].BoolValue; + } - ConVarsInType(); + ConVarsInType(); } //================================================ @@ -654,99 +654,99 @@ public void WI_ConvarChange(ConVar hConVar, const char[] sOldValue, const char[] // class static int WI_GetWeaponIndex(int iEntity, const char[] sEntityClassName) { - //------------------------------------------------ - // Check for weapon in class name - //------------------------------------------------ - // If the class name doesn't contain weapon at all - // we don't need to loop thourgh with this entity - // Return false + //------------------------------------------------ + // Check for weapon in class name + //------------------------------------------------ + // If the class name doesn't contain weapon at all + // we don't need to loop thourgh with this entity + // Return false - if (StrContains(sEntityClassName, "weapon") == -1) { - return WEAPON_NULL_INDEX; - } + if (StrContains(sEntityClassName, "weapon") == -1) { + return WEAPON_NULL_INDEX; + } #if (DEBUG_WI) - LogMessage("[%s] GetWeaponIndex( iEntity %i sEntityClassName \"%s\" )", WI_MODULE_NAME, iEntity, sEntityClassName); - LogMessage("[%s] {", WI_MODULE_NAME); + LogMessage("[%s] GetWeaponIndex( iEntity %i sEntityClassName \"%s\" )", WI_MODULE_NAME, iEntity, sEntityClassName); + LogMessage("[%s] {", WI_MODULE_NAME); #endif - //------------------------------------------------ - // Check class name - //------------------------------------------------ - // If the class name is weapon_spawn we got a - // dynamic spawn and as such read the weapon id - // for detimernation of the weapon index - - int WeaponIndex; - bool bFoundIndex = false; - - if (strcmp(sEntityClassName, "weapon_spawn") == 0) { - int WepID = GetEntProp(iEntity, Prop_Send, "m_weaponID"); - - #if (DEBUG_WI) - LogMessage("[%s] Dynamic weapon spawn, weaponID %i", WI_MODULE_NAME, WepID); - #endif - - for (WeaponIndex = FIRST_WEAPON; WeaponIndex < NUM_OF_WEAPONS; WeaponIndex++) { - if (Weapon_Attributes[WeaponIndex][WeaponID] != WepID) { - continue; - } - - #if (DEBUG_WI) - LogMessage("[%s] Weapon WeaponIndex %i", WI_MODULE_NAME, WeaponIndex); - #endif - - bFoundIndex = true; - break; - } - } - //------------------------------------------------ - // Check static spawns - //------------------------------------------------ - // Otherwise loop through the weapon index for - // static classes - // If we got a match we know the index - else { - char sBuffer[MAX_ENTITY_NAME_LENGTH]; - for (WeaponIndex = FIRST_WEAPON; WeaponIndex < NUM_OF_WEAPONS; WeaponIndex++) { - if (strlen(Weapon_Spawns[WeaponIndex]) < 1) { - continue; - } - - Format(sBuffer, sizeof(sBuffer), "%s%s%s", SPAWN_PREFIX, Weapon_Spawns[WeaponIndex], SPAWN_SURFIX); - - if (strcmp(sEntityClassName, sBuffer) != 0) { - continue; - } - - #if (DEBUG_WI) - LogMessage("[%s] Static spawn, weapon WeaponIndex %i", WI_MODULE_NAME, WeaponIndex); - #endif - - bFoundIndex = true; - break; - } - } - - //------------------------------------------------ - // Check index - //------------------------------------------------ - // If we didn't find the index, return false - - if (!bFoundIndex) { - #if (DEBUG_WI) - LogMessage("[%s] Not found in weapon index", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return WEAPON_NULL_INDEX; - } + //------------------------------------------------ + // Check class name + //------------------------------------------------ + // If the class name is weapon_spawn we got a + // dynamic spawn and as such read the weapon id + // for detimernation of the weapon index + + int WeaponIndex; + bool bFoundIndex = false; + + if (strcmp(sEntityClassName, "weapon_spawn") == 0) { + int WepID = GetEntProp(iEntity, Prop_Send, "m_weaponID"); + + #if (DEBUG_WI) + LogMessage("[%s] Dynamic weapon spawn, weaponID %i", WI_MODULE_NAME, WepID); + #endif + + for (WeaponIndex = FIRST_WEAPON; WeaponIndex < NUM_OF_WEAPONS; WeaponIndex++) { + if (Weapon_Attributes[WeaponIndex][WeaponID] != WepID) { + continue; + } + + #if (DEBUG_WI) + LogMessage("[%s] Weapon WeaponIndex %i", WI_MODULE_NAME, WeaponIndex); + #endif + + bFoundIndex = true; + break; + } + } + //------------------------------------------------ + // Check static spawns + //------------------------------------------------ + // Otherwise loop through the weapon index for + // static classes + // If we got a match we know the index + else { + char sBuffer[MAX_ENTITY_NAME_LENGTH]; + for (WeaponIndex = FIRST_WEAPON; WeaponIndex < NUM_OF_WEAPONS; WeaponIndex++) { + if (strlen(Weapon_Spawns[WeaponIndex]) < 1) { + continue; + } + + Format(sBuffer, sizeof(sBuffer), "%s%s%s", SPAWN_PREFIX, Weapon_Spawns[WeaponIndex], SPAWN_SURFIX); + + if (strcmp(sEntityClassName, sBuffer) != 0) { + continue; + } + + #if (DEBUG_WI) + LogMessage("[%s] Static spawn, weapon WeaponIndex %i", WI_MODULE_NAME, WeaponIndex); + #endif + + bFoundIndex = true; + break; + } + } + + //------------------------------------------------ + // Check index + //------------------------------------------------ + // If we didn't find the index, return false + + if (!bFoundIndex) { + #if (DEBUG_WI) + LogMessage("[%s] Not found in weapon index", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return WEAPON_NULL_INDEX; + } #if (DEBUG_WI) - LogMessage("[%s] }", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); #endif - return WeaponIndex; + return WeaponIndex; } //================================================ @@ -757,26 +757,26 @@ static int WI_GetWeaponIndex(int iEntity, const char[] sEntityClassName) static bool WI_IsStatic(int iEntity, int iWeaponIndex) { - if (strlen(Weapon_Spawns[iWeaponIndex]) < 1) { - return false; - } + if (strlen(Weapon_Spawns[iWeaponIndex]) < 1) { + return false; + } - char sEntityClassName[MAX_ENTITY_NAME_LENGTH], sBuffer[MAX_ENTITY_NAME_LENGTH]; + char sEntityClassName[MAX_ENTITY_NAME_LENGTH], sBuffer[MAX_ENTITY_NAME_LENGTH]; - GetEdictClassname(iEntity, sEntityClassName, sizeof(sEntityClassName)); - Format(sBuffer, sizeof(sBuffer), "%s%s%s", SPAWN_PREFIX, Weapon_Spawns[iWeaponIndex], SPAWN_SURFIX); + GetEdictClassname(iEntity, sEntityClassName, sizeof(sEntityClassName)); + Format(sBuffer, sizeof(sBuffer), "%s%s%s", SPAWN_PREFIX, Weapon_Spawns[iWeaponIndex], SPAWN_SURFIX); - if (strcmp(sEntityClassName, sBuffer) != 0) { - return false; - } + if (strcmp(sEntityClassName, sBuffer) != 0) { + return false; + } - // This is to prevent crashing - // Some static spawns doesn't have a model as we just wish to remove them - if (strlen(Weapon_Models[iWeaponIndex]) < 1) { - return false; - } + // This is to prevent crashing + // Some static spawns doesn't have a model as we just wish to remove them + if (strlen(Weapon_Models[iWeaponIndex]) < 1) { + return false; + } - return true; + return true; } //================================================ @@ -787,187 +787,187 @@ static bool WI_IsStatic(int iEntity, int iWeaponIndex) static void WI_ReplaceWeapon(int iEntity, int iWeaponIndex, bool bSpawnerEvent = false) { - #if (DEBUG_WI) - LogMessage("[%s] ReplaceWeapon( iEntity %i, iWeaponIndex %i, bSpawnerEvent %b )", WI_MODULE_NAME, iEntity, iWeaponIndex, bSpawnerEvent); - LogMessage("[%s] {", WI_MODULE_NAME); - #endif - - //------------------------------------------------ - // Removal of weapons - //------------------------------------------------ - // Checks if the replacement index is equal to -1 - // (WEAPON_REMOVE_INDEX) - // If so, check the cvar boolean and kill the - // weapon - - if (!bSpawnerEvent - && Weapon_Attributes[iWeaponIndex][ReplacementIndex] == WEAPON_REMOVE_INDEX - && Weapon_bConvar[iWeaponIndex] - ) { - KillEntity(iEntity); - - #if (DEBUG_WI) - LogMessage("[%s] Killing weapon as requested...", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - - //------------------------------------------------ - // Replacement of static weapons - //------------------------------------------------ - // Replaces all weapon_*weaponname*_spawn with - // weapon_spawn and the old weapon ID - - char sModelBuffer[PLATFORM_MAX_PATH]; - float fOrigin[3], fRotation[3]; - - if (!bSpawnerEvent - && WI_IsStatic(iEntity, iWeaponIndex) - && (Weapon_Attributes[iWeaponIndex][WeaponID] != WEAPON_NULL_INDEX) - ) { - GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fOrigin); - GetEntPropVector(iEntity, Prop_Send, "m_angRotation", fRotation); - KillEntity(iEntity); - - iEntity = CreateEntityByName("weapon_spawn"); - SetEntProp(iEntity, Prop_Send, "m_weaponID", Weapon_Attributes[iWeaponIndex][WeaponID]); - - Format(sModelBuffer, sizeof(sModelBuffer), "%s%s%s", MODEL_PREFIX, Weapon_Models[iWeaponIndex], MODEL_SURFIX); - SetEntityModel(iEntity, sModelBuffer); - - TeleportEntity(iEntity, fOrigin, fRotation, NULL_VECTOR); - DispatchKeyValue(iEntity, "count", "5"); - DispatchSpawn(iEntity); - SetEntityMoveType(iEntity, MOVETYPE_NONE); - - #if (DEBUG_WI) - LogMessage("[%s] Replacing static spawn with weapon_spawn, new iEntity %i, weaponID %i, model \"%s\"", \ - WI_MODULE_NAME, iEntity, Weapon_Attributes[iWeaponIndex][WeaponID], sModelBuffer); - #endif - } - - //------------------------------------------------ - // Replace Weapons - //------------------------------------------------ - // Replace weapons that needs to be done so - // This is to replace CSS weapons, but can be - // adjusted to fit with any weapon - - if ((!bSpawnerEvent - && Weapon_Attributes[iWeaponIndex][ReplacementIndex] != WEAPON_NULL_INDEX - || Weapon_Attributes[iWeaponIndex][ReplacementIndex] != WEAPON_REMOVE_INDEX) - && Weapon_bConvar[iWeaponIndex] - ) { - iWeaponIndex = Weapon_Attributes[iWeaponIndex][ReplacementIndex]; - SetEntProp(iEntity, Prop_Send, "m_weaponID", Weapon_Attributes[iWeaponIndex][WeaponID]); - Format(sModelBuffer, sizeof(sModelBuffer), "%s%s%s", MODEL_PREFIX, Weapon_Models[iWeaponIndex], MODEL_SURFIX); - SetEntityModel(iEntity, sModelBuffer); - - #if (DEBUG_WI) - LogMessage("[%s] Following replacement index, new weaponID %i, new model \"%s\"", WI_MODULE_NAME, iWeaponIndex, sModelBuffer); - #endif - } - - //------------------------------------------------ - // Check for tier 1 equivalent - //------------------------------------------------ - // Check the current weapon index for a tier 1 - // equivalent - - if (Weapon_Attributes[iWeaponIndex][Tier1EquivalentIndex] == WEAPON_NULL_INDEX) { - #if (DEBUG_WI) - LogMessage("[%s] No tier 1 equivalent, no need to proceed", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - - //------------------------------------------------ - // Check location - //------------------------------------------------ - // Check the location of the weapon, to see if its - // within a saferoom - - bool bIsInSaferoom = false; - GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fOrigin); - - // Within start safe room - if (!Weapon_bReplaceTier2_All && IsVersus()) { - if (GetVectorDistance(Weapon_fMapOrigin_Start, fOrigin) > Weapon_fMapDist_StartExtra - && GetVectorDistance(Weapon_fMapOrigin_End, fOrigin) > Weapon_fMapDist_End - ) { - #if (DEBUG_WI) - LogMessage("[%s] Weapon is outside of a saferoom", WI_MODULE_NAME); - #endif - - if (!bSpawnerEvent) { - #if (DEBUG_WI) - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - return; - } - } else { - #if (DEBUG_WI) - LogMessage("[%s] Weapon is inside a saferoom", WI_MODULE_NAME); - #endif - bIsInSaferoom = true; - } - } - - //------------------------------------------------ - // Check tier 2 replacement booleans - //------------------------------------------------ - // Check and see if the plugin is set to replace - // tier 2 weapons - // One for non-finale maps and one for finales - - if (!Weapon_bReplaceTier2_All) { - if (!bSpawnerEvent) { - if ((!Weapon_bReplaceTier2 && !L4D_IsMissionFinalMap()) || (!Weapon_bReplaceTier2_Finale && L4D_IsMissionFinalMap())) { - #if (DEBUG_WI) - LogMessage("[%s] We do not want to replace weapons, IsMapFinale %b", WI_MODULE_NAME, L4D_IsMissionFinalMap()); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - } else { - if ((!Weapon_bLimitTier2 && !bIsInSaferoom) || (!Weapon_bLimitTier2_Safehouse && bIsInSaferoom)) { - #if (DEBUG_WI) - LogMessage("[%s] We do not want to replace weapons, bLimitTier2 %b, bLimitTier2_Saferoom %b, bIsInSaferoom %b", \ - WI_MODULE_NAME, Weapon_bLimitTier2, Weapon_bLimitTier2_Safehouse, bIsInSaferoom); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - } - } + #if (DEBUG_WI) + LogMessage("[%s] ReplaceWeapon( iEntity %i, iWeaponIndex %i, bSpawnerEvent %b )", WI_MODULE_NAME, iEntity, iWeaponIndex, bSpawnerEvent); + LogMessage("[%s] {", WI_MODULE_NAME); + #endif + + //------------------------------------------------ + // Removal of weapons + //------------------------------------------------ + // Checks if the replacement index is equal to -1 + // (WEAPON_REMOVE_INDEX) + // If so, check the cvar boolean and kill the + // weapon + + if (!bSpawnerEvent + && Weapon_Attributes[iWeaponIndex][ReplacementIndex] == WEAPON_REMOVE_INDEX + && Weapon_bConvar[iWeaponIndex] + ) { + KillEntity(iEntity); + + #if (DEBUG_WI) + LogMessage("[%s] Killing weapon as requested...", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + + //------------------------------------------------ + // Replacement of static weapons + //------------------------------------------------ + // Replaces all weapon_*weaponname*_spawn with + // weapon_spawn and the old weapon ID + + char sModelBuffer[PLATFORM_MAX_PATH]; + float fOrigin[3], fRotation[3]; + + if (!bSpawnerEvent + && WI_IsStatic(iEntity, iWeaponIndex) + && (Weapon_Attributes[iWeaponIndex][WeaponID] != WEAPON_NULL_INDEX) + ) { + GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fOrigin); + GetEntPropVector(iEntity, Prop_Send, "m_angRotation", fRotation); + KillEntity(iEntity); + + iEntity = CreateEntityByName("weapon_spawn"); + SetEntProp(iEntity, Prop_Send, "m_weaponID", Weapon_Attributes[iWeaponIndex][WeaponID]); + + Format(sModelBuffer, sizeof(sModelBuffer), "%s%s%s", MODEL_PREFIX, Weapon_Models[iWeaponIndex], MODEL_SURFIX); + SetEntityModel(iEntity, sModelBuffer); + + TeleportEntity(iEntity, fOrigin, fRotation, NULL_VECTOR); + DispatchKeyValue(iEntity, "count", "5"); + DispatchSpawn(iEntity); + SetEntityMoveType(iEntity, MOVETYPE_NONE); + + #if (DEBUG_WI) + LogMessage("[%s] Replacing static spawn with weapon_spawn, new iEntity %i, weaponID %i, model \"%s\"", \ + WI_MODULE_NAME, iEntity, Weapon_Attributes[iWeaponIndex][WeaponID], sModelBuffer); + #endif + } + + //------------------------------------------------ + // Replace Weapons + //------------------------------------------------ + // Replace weapons that needs to be done so + // This is to replace CSS weapons, but can be + // adjusted to fit with any weapon + + if ((!bSpawnerEvent + && Weapon_Attributes[iWeaponIndex][ReplacementIndex] != WEAPON_NULL_INDEX + || Weapon_Attributes[iWeaponIndex][ReplacementIndex] != WEAPON_REMOVE_INDEX) + && Weapon_bConvar[iWeaponIndex] + ) { + iWeaponIndex = Weapon_Attributes[iWeaponIndex][ReplacementIndex]; + SetEntProp(iEntity, Prop_Send, "m_weaponID", Weapon_Attributes[iWeaponIndex][WeaponID]); + Format(sModelBuffer, sizeof(sModelBuffer), "%s%s%s", MODEL_PREFIX, Weapon_Models[iWeaponIndex], MODEL_SURFIX); + SetEntityModel(iEntity, sModelBuffer); + + #if (DEBUG_WI) + LogMessage("[%s] Following replacement index, new weaponID %i, new model \"%s\"", WI_MODULE_NAME, iWeaponIndex, sModelBuffer); + #endif + } + + //------------------------------------------------ + // Check for tier 1 equivalent + //------------------------------------------------ + // Check the current weapon index for a tier 1 + // equivalent + + if (Weapon_Attributes[iWeaponIndex][Tier1EquivalentIndex] == WEAPON_NULL_INDEX) { + #if (DEBUG_WI) + LogMessage("[%s] No tier 1 equivalent, no need to proceed", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + + //------------------------------------------------ + // Check location + //------------------------------------------------ + // Check the location of the weapon, to see if its + // within a saferoom + + bool bIsInSaferoom = false; + GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fOrigin); + + // Within start safe room + if (!Weapon_bReplaceTier2_All && IsVersus()) { + if (GetVectorDistance(Weapon_fMapOrigin_Start, fOrigin) > Weapon_fMapDist_StartExtra + && GetVectorDistance(Weapon_fMapOrigin_End, fOrigin) > Weapon_fMapDist_End + ) { + #if (DEBUG_WI) + LogMessage("[%s] Weapon is outside of a saferoom", WI_MODULE_NAME); + #endif + + if (!bSpawnerEvent) { + #if (DEBUG_WI) + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + return; + } + } else { + #if (DEBUG_WI) + LogMessage("[%s] Weapon is inside a saferoom", WI_MODULE_NAME); + #endif + bIsInSaferoom = true; + } + } + + //------------------------------------------------ + // Check tier 2 replacement booleans + //------------------------------------------------ + // Check and see if the plugin is set to replace + // tier 2 weapons + // One for non-finale maps and one for finales + + if (!Weapon_bReplaceTier2_All) { + if (!bSpawnerEvent) { + if ((!Weapon_bReplaceTier2 && !L4D_IsMissionFinalMap()) || (!Weapon_bReplaceTier2_Finale && L4D_IsMissionFinalMap())) { + #if (DEBUG_WI) + LogMessage("[%s] We do not want to replace weapons, IsMapFinale %b", WI_MODULE_NAME, L4D_IsMissionFinalMap()); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + } else { + if ((!Weapon_bLimitTier2 && !bIsInSaferoom) || (!Weapon_bLimitTier2_Safehouse && bIsInSaferoom)) { + #if (DEBUG_WI) + LogMessage("[%s] We do not want to replace weapons, bLimitTier2 %b, bLimitTier2_Saferoom %b, bIsInSaferoom %b", \ + WI_MODULE_NAME, Weapon_bLimitTier2, Weapon_bLimitTier2_Safehouse, bIsInSaferoom); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + } + } #if (DEBUG_WI) - else { - LogMessage("[%s] bReplaceTier2_All %b", WI_MODULE_NAME, Weapon_bReplaceTier2_All); - } + else { + LogMessage("[%s] bReplaceTier2_All %b", WI_MODULE_NAME, Weapon_bReplaceTier2_All); + } #endif - //------------------------------------------------ - // Replace tier 2 weapon - //------------------------------------------------ - // And lastly after all these steps, this is where - // the magic happens - // Replace the weapon with its tier 1 equivalent - // and update the model + //------------------------------------------------ + // Replace tier 2 weapon + //------------------------------------------------ + // And lastly after all these steps, this is where + // the magic happens + // Replace the weapon with its tier 1 equivalent + // and update the model - iWeaponIndex = Weapon_Attributes[iWeaponIndex][Tier1EquivalentIndex]; - SetEntProp(iEntity, Prop_Send, "m_weaponID", Weapon_Attributes[iWeaponIndex][WeaponID]); - Format(sModelBuffer, sizeof(sModelBuffer), "%s%s%s", MODEL_PREFIX, Weapon_Models[iWeaponIndex], MODEL_SURFIX); - SetEntityModel(iEntity, sModelBuffer); + iWeaponIndex = Weapon_Attributes[iWeaponIndex][Tier1EquivalentIndex]; + SetEntProp(iEntity, Prop_Send, "m_weaponID", Weapon_Attributes[iWeaponIndex][WeaponID]); + Format(sModelBuffer, sizeof(sModelBuffer), "%s%s%s", MODEL_PREFIX, Weapon_Models[iWeaponIndex], MODEL_SURFIX); + SetEntityModel(iEntity, sModelBuffer); #if (DEBUG_WI) - LogMessage("[%s] Replacing Tier 2, new WeaponID %i, model \"%s\"", WI_MODULE_NAME, Weapon_Attributes[iWeaponIndex][WeaponID], sModelBuffer); - LogMessage("[%s] }", WI_MODULE_NAME); + LogMessage("[%s] Replacing Tier 2, new WeaponID %i, model \"%s\"", WI_MODULE_NAME, Weapon_Attributes[iWeaponIndex][WeaponID], sModelBuffer); + LogMessage("[%s] }", WI_MODULE_NAME); #endif } @@ -980,177 +980,177 @@ static void WI_ReplaceWeapon(int iEntity, int iWeaponIndex, bool bSpawnerEvent = static void WI_ReplaceExtra(int iEntity, int iWeaponIndex) { #if (DEBUG_WI) - LogMessage("[%s] ReplaceExtra( iEntity %i, iWeaponIndex %i )", WI_MODULE_NAME, iEntity, iWeaponIndex); - LogMessage("[%s] {", WI_MODULE_NAME); + LogMessage("[%s] ReplaceExtra( iEntity %i, iWeaponIndex %i )", WI_MODULE_NAME, iEntity, iWeaponIndex); + LogMessage("[%s] {", WI_MODULE_NAME); #endif - //------------------------------------------------ - // Removal of extras - //------------------------------------------------ - // Checks if the replacement index is equal to -1 - // (WEAPON_REMOVE_INDEX) - // If so, check the cvar boolean and kill the - // weapon, minus medkits as these needs special - // care - - if (Weapon_Attributes[iWeaponIndex][ReplacementIndex] == WEAPON_REMOVE_INDEX - && Weapon_bConvar[iWeaponIndex] - && iWeaponIndex != WEAPON_FIRST_AID_KIT_INDEX - ) { - KillEntity(iEntity); - - #if (DEBUG_WI) - LogMessage("[%s] Killing weapon as requested...", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - - //------------------------------------------------ - // Check entity - //------------------------------------------------ - // Stop removing extra items that are protected - // (medkits converted to pain pills) - for (int Index = 0; Index < WEAPON_NUMBER_OF_START_KITS; Index++) { - if (Weapon_iKitEntity[Index] == iEntity) { - #if (DEBUG_WI) - LogMessage("[%s] Start kit found, save entity", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - } - - //------------------------------------------------ - // Check location - //------------------------------------------------ - // If the item is within the end safe room and its - // not finale - // OR - // If the items is within start safe room, and it - // is not a first aid kit - // Remove the item - float fOrigin[3]; - GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fOrigin); - - bool bIsInStartSaferoom = false, bIsInStartSaferoomExtra = false; - bool bIsInEndSaferoom = false, bIsInFinaleArea = false; - - float fStartDistance = GetVectorDistance(Weapon_fMapOrigin_Start, fOrigin); - - if (fStartDistance <= Weapon_fMapDist_Start) { - bIsInStartSaferoom = true; - bIsInStartSaferoomExtra = true; - } else if (fStartDistance <= Weapon_fMapDist_StartExtra) { - bIsInStartSaferoomExtra = true; - } else if (GetVectorDistance(Weapon_fMapOrigin_End, fOrigin) <= Weapon_fMapDist_End) { - if (L4D_IsMissionFinalMap()) { - bIsInFinaleArea = true; - } else { - bIsInEndSaferoom = true; - } - } - - if (Weapon_bRemoveExtraItems && - (bIsInEndSaferoom || (bIsInStartSaferoomExtra && iWeaponIndex != WEAPON_FIRST_AID_KIT_INDEX)) - ) { - KillEntity(iEntity); - - #if (DEBUG_WI) - LogMessage("[%s] Extra item is within a safe room, killing...", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - - //------------------------------------------------ - // Check for medkit - //------------------------------------------------ - // No need to go on if it is not a medkit - - if (iWeaponIndex != WEAPON_FIRST_AID_KIT_INDEX) { - #if (DEBUG_WI) - LogMessage("[%s] Not a medkit and not inside any saferoom, no need to go on", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - - //------------------------------------------------ - // Check location of medkit - //------------------------------------------------ - // If its outside the start safe room we assume - // it is a static medkit and it needs removal - - if (Weapon_bConvar[iWeaponIndex] && !bIsInStartSaferoom && !bIsInFinaleArea) { - KillEntity(iEntity); - - #if (DEBUG_WI) - LogMessage("[%s] Static medkit outside saferoom and finale, killing...", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - - if (Weapon_iKitCount >= WEAPON_NUMBER_OF_START_KITS && bIsInStartSaferoom) { - KillEntity(iEntity); - - #if (DEBUG_WI) - LogMessage("[%s] More than 4 saferoom medkits found, killing entity...", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - - return; - } - - float fRotation[3]; - char sSpawnBuffer[MAX_ENTITY_NAME_LENGTH]; - - if (bIsInStartSaferoom && Weapon_bReplaceStartKits) { - GetEntPropVector(iEntity, Prop_Send, "m_angRotation", fRotation); - - KillEntity(iEntity); - - Format(sSpawnBuffer, sizeof(sSpawnBuffer), "%s%s%s", SPAWN_PREFIX, Weapon_Spawns[WEAPON_PAIN_PILLS_INDEX], SPAWN_SURFIX); - - iEntity = CreateEntityByName(sSpawnBuffer); - TeleportEntity(iEntity, fOrigin, fRotation, NULL_VECTOR); - DispatchSpawn(iEntity); - SetEntityMoveType(iEntity, MOVETYPE_NONE); - - #if (DEBUG_WI) - LogMessage("[%s] Replacing start medkit with pills", WI_MODULE_NAME); - #endif - } else if (bIsInFinaleArea && Weapon_bReplaceFinaleKits) { - GetEntPropVector(iEntity, Prop_Send, "m_angRotation", fRotation); - - KillEntity(iEntity); - - Format(sSpawnBuffer, sizeof(sSpawnBuffer), "%s%s%s", SPAWN_PREFIX, Weapon_Spawns[WEAPON_PAIN_PILLS_INDEX], SPAWN_SURFIX); - - iEntity = CreateEntityByName(sSpawnBuffer); - TeleportEntity(iEntity, fOrigin, fRotation, NULL_VECTOR); - DispatchSpawn(iEntity); - SetEntityMoveType(iEntity, MOVETYPE_NONE); - - #if (DEBUG_WI) - LogMessage("[%s] Replacing finale medkit with pills", WI_MODULE_NAME); - #endif - } - - if (bIsInStartSaferoom) { - Weapon_iKitEntity[Weapon_iKitCount++] = iEntity; - - #if (DEBUG_WI) - LogMessage("[%s] Start medkit added to array", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); - #endif - } + //------------------------------------------------ + // Removal of extras + //------------------------------------------------ + // Checks if the replacement index is equal to -1 + // (WEAPON_REMOVE_INDEX) + // If so, check the cvar boolean and kill the + // weapon, minus medkits as these needs special + // care + + if (Weapon_Attributes[iWeaponIndex][ReplacementIndex] == WEAPON_REMOVE_INDEX + && Weapon_bConvar[iWeaponIndex] + && iWeaponIndex != WEAPON_FIRST_AID_KIT_INDEX + ) { + KillEntity(iEntity); + + #if (DEBUG_WI) + LogMessage("[%s] Killing weapon as requested...", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + + //------------------------------------------------ + // Check entity + //------------------------------------------------ + // Stop removing extra items that are protected + // (medkits converted to pain pills) + for (int Index = 0; Index < WEAPON_NUMBER_OF_START_KITS; Index++) { + if (Weapon_iKitEntity[Index] == iEntity) { + #if (DEBUG_WI) + LogMessage("[%s] Start kit found, save entity", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + } + + //------------------------------------------------ + // Check location + //------------------------------------------------ + // If the item is within the end safe room and its + // not finale + // OR + // If the items is within start safe room, and it + // is not a first aid kit + // Remove the item + float fOrigin[3]; + GetEntPropVector(iEntity, Prop_Send, "m_vecOrigin", fOrigin); + + bool bIsInStartSaferoom = false, bIsInStartSaferoomExtra = false; + bool bIsInEndSaferoom = false, bIsInFinaleArea = false; + + float fStartDistance = GetVectorDistance(Weapon_fMapOrigin_Start, fOrigin); + + if (fStartDistance <= Weapon_fMapDist_Start) { + bIsInStartSaferoom = true; + bIsInStartSaferoomExtra = true; + } else if (fStartDistance <= Weapon_fMapDist_StartExtra) { + bIsInStartSaferoomExtra = true; + } else if (GetVectorDistance(Weapon_fMapOrigin_End, fOrigin) <= Weapon_fMapDist_End) { + if (L4D_IsMissionFinalMap()) { + bIsInFinaleArea = true; + } else { + bIsInEndSaferoom = true; + } + } + + if (Weapon_bRemoveExtraItems && + (bIsInEndSaferoom || (bIsInStartSaferoomExtra && iWeaponIndex != WEAPON_FIRST_AID_KIT_INDEX)) + ) { + KillEntity(iEntity); + + #if (DEBUG_WI) + LogMessage("[%s] Extra item is within a safe room, killing...", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + + //------------------------------------------------ + // Check for medkit + //------------------------------------------------ + // No need to go on if it is not a medkit + + if (iWeaponIndex != WEAPON_FIRST_AID_KIT_INDEX) { + #if (DEBUG_WI) + LogMessage("[%s] Not a medkit and not inside any saferoom, no need to go on", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + + //------------------------------------------------ + // Check location of medkit + //------------------------------------------------ + // If its outside the start safe room we assume + // it is a static medkit and it needs removal + + if (Weapon_bConvar[iWeaponIndex] && !bIsInStartSaferoom && !bIsInFinaleArea) { + KillEntity(iEntity); + + #if (DEBUG_WI) + LogMessage("[%s] Static medkit outside saferoom and finale, killing...", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + + if (Weapon_iKitCount >= WEAPON_NUMBER_OF_START_KITS && bIsInStartSaferoom) { + KillEntity(iEntity); + + #if (DEBUG_WI) + LogMessage("[%s] More than 4 saferoom medkits found, killing entity...", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + + return; + } + + float fRotation[3]; + char sSpawnBuffer[MAX_ENTITY_NAME_LENGTH]; + + if (bIsInStartSaferoom && Weapon_bReplaceStartKits) { + GetEntPropVector(iEntity, Prop_Send, "m_angRotation", fRotation); + + KillEntity(iEntity); + + Format(sSpawnBuffer, sizeof(sSpawnBuffer), "%s%s%s", SPAWN_PREFIX, Weapon_Spawns[WEAPON_PAIN_PILLS_INDEX], SPAWN_SURFIX); + + iEntity = CreateEntityByName(sSpawnBuffer); + TeleportEntity(iEntity, fOrigin, fRotation, NULL_VECTOR); + DispatchSpawn(iEntity); + SetEntityMoveType(iEntity, MOVETYPE_NONE); + + #if (DEBUG_WI) + LogMessage("[%s] Replacing start medkit with pills", WI_MODULE_NAME); + #endif + } else if (bIsInFinaleArea && Weapon_bReplaceFinaleKits) { + GetEntPropVector(iEntity, Prop_Send, "m_angRotation", fRotation); + + KillEntity(iEntity); + + Format(sSpawnBuffer, sizeof(sSpawnBuffer), "%s%s%s", SPAWN_PREFIX, Weapon_Spawns[WEAPON_PAIN_PILLS_INDEX], SPAWN_SURFIX); + + iEntity = CreateEntityByName(sSpawnBuffer); + TeleportEntity(iEntity, fOrigin, fRotation, NULL_VECTOR); + DispatchSpawn(iEntity); + SetEntityMoveType(iEntity, MOVETYPE_NONE); + + #if (DEBUG_WI) + LogMessage("[%s] Replacing finale medkit with pills", WI_MODULE_NAME); + #endif + } + + if (bIsInStartSaferoom) { + Weapon_iKitEntity[Weapon_iKitCount++] = iEntity; + + #if (DEBUG_WI) + LogMessage("[%s] Start medkit added to array", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); + #endif + } } //================================================ @@ -1160,24 +1160,24 @@ static void WI_ReplaceExtra(int iEntity, int iWeaponIndex) // ones we need static void WI_PrecacheModels() { - char ModelBuffer[PLATFORM_MAX_PATH]; - for (int index = FIRST_WEAPON; index <= LAST_WEAPON; index++) { - if (strlen(Weapon_Models[index]) == 0) { - continue; - } + char ModelBuffer[PLATFORM_MAX_PATH]; + for (int index = FIRST_WEAPON; index <= LAST_WEAPON; index++) { + if (strlen(Weapon_Models[index]) == 0) { + continue; + } - Format(ModelBuffer, sizeof(ModelBuffer), "%s%s%s", MODEL_PREFIX, Weapon_Models[index], MODEL_SURFIX); + Format(ModelBuffer, sizeof(ModelBuffer), "%s%s%s", MODEL_PREFIX, Weapon_Models[index], MODEL_SURFIX); - if (IsModelPrecached(ModelBuffer)) { - continue; - } + if (IsModelPrecached(ModelBuffer)) { + continue; + } - PrecacheModel(ModelBuffer); + PrecacheModel(ModelBuffer); - #if (DEBUG_WI) - LogMessage("[%s] Model precached: %s", WI_MODULE_NAME, ModelBuffer); - #endif - } + #if (DEBUG_WI) + LogMessage("[%s] Model precached: %s", WI_MODULE_NAME, ModelBuffer); + #endif + } } //================================================ @@ -1186,111 +1186,111 @@ static void WI_PrecacheModels() // Updates the global map variables if needed static void WI_GetMapInfo() { - if (!Weapon_bUpdateMapInfo/* || !FindMapId() */) { - return; - } - - Weapon_fMapOrigin_Start[0] = GetMapStartOriginX(); - Weapon_fMapOrigin_Start[1] = GetMapStartOriginY(); - Weapon_fMapOrigin_Start[2] = GetMapStartOriginZ(); - Weapon_fMapOrigin_End[0] = GetMapEndOriginX(); - Weapon_fMapOrigin_End[1] = GetMapEndOriginY(); - Weapon_fMapOrigin_End[2] = GetMapEndOriginZ(); - Weapon_fMapDist_Start = GetMapStartDist(); - Weapon_fMapDist_StartExtra = GetMapStartExtraDist(); - Weapon_fMapDist_End = GetMapEndDist(); - - Weapon_bUpdateMapInfo = false; + if (!Weapon_bUpdateMapInfo/* || !FindMapId() */) { + return; + } + + Weapon_fMapOrigin_Start[0] = GetMapStartOriginX(); + Weapon_fMapOrigin_Start[1] = GetMapStartOriginY(); + Weapon_fMapOrigin_Start[2] = GetMapStartOriginZ(); + Weapon_fMapOrigin_End[0] = GetMapEndOriginX(); + Weapon_fMapOrigin_End[1] = GetMapEndOriginY(); + Weapon_fMapOrigin_End[2] = GetMapEndOriginZ(); + Weapon_fMapDist_Start = GetMapStartDist(); + Weapon_fMapDist_StartExtra = GetMapStartExtraDist(); + Weapon_fMapDist_End = GetMapEndDist(); + + Weapon_bUpdateMapInfo = false; } public void WI_RoundStart_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - CreateTimer(0.3, WI_RoundStartLoop, _, TIMER_FLAG_NO_MAPCHANGE); + CreateTimer(0.3, WI_RoundStartLoop, _, TIMER_FLAG_NO_MAPCHANGE); } public void WI_RoundEnd_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - Weapon_bUpdateMapInfo = true; + Weapon_bUpdateMapInfo = true; } public Action WI_RoundStartLoop(Handle hTimer) { - if (!IsPluginEnabled()) { - return Plugin_Stop; - } + if (!IsPluginEnabled()) { + return Plugin_Stop; + } - WI_GetMapInfo(); + WI_GetMapInfo(); - if (Weapon_bUpdateMapInfo) { - return Plugin_Stop; - } + if (Weapon_bUpdateMapInfo) { + return Plugin_Stop; + } - WI_PrecacheModels(); + WI_PrecacheModels(); #if (DEBUG_WI) - LogMessage("[%s] Round Start Loop( )", WI_MODULE_NAME); - LogMessage("[%s] {", WI_MODULE_NAME); + LogMessage("[%s] Round Start Loop( )", WI_MODULE_NAME); + LogMessage("[%s] {", WI_MODULE_NAME); #endif - for (int KitIndex = 0; KitIndex < WEAPON_NUMBER_OF_START_KITS; KitIndex++) { - Weapon_iKitEntity[KitIndex] = 0; - } + for (int KitIndex = 0; KitIndex < WEAPON_NUMBER_OF_START_KITS; KitIndex++) { + Weapon_iKitEntity[KitIndex] = 0; + } - Weapon_iKitCount = 0; + Weapon_iKitCount = 0; - char entclass[MAX_ENTITY_NAME_LENGTH]; - int iEntity, iWeaponIndex, entcount = GetEntityCount(); + char entclass[MAX_ENTITY_NAME_LENGTH]; + int iEntity, iWeaponIndex, entcount = GetEntityCount(); - for (iEntity = (MaxClients + 1); iEntity <= entcount; iEntity++) { - if (!IsValidEdict(iEntity)) { - continue; - } + for (iEntity = (MaxClients + 1); iEntity <= entcount; iEntity++) { + if (!IsValidEdict(iEntity)) { + continue; + } - GetEdictClassname(iEntity, entclass, sizeof(entclass)); + GetEdictClassname(iEntity, entclass, sizeof(entclass)); - iWeaponIndex = WI_GetWeaponIndex(iEntity, entclass); - if (iWeaponIndex != WEAPON_NULL_INDEX) { - if (iWeaponIndex <= LAST_WEAPON) { - WI_ReplaceWeapon(iEntity, iWeaponIndex); - } else { - WI_ReplaceExtra(iEntity, iWeaponIndex); - } - } + iWeaponIndex = WI_GetWeaponIndex(iEntity, entclass); + if (iWeaponIndex != WEAPON_NULL_INDEX) { + if (iWeaponIndex <= LAST_WEAPON) { + WI_ReplaceWeapon(iEntity, iWeaponIndex); + } else { + WI_ReplaceExtra(iEntity, iWeaponIndex); + } + } - if (Weapon_bRemoveLaserSight && StrContains(entclass, "upgrade_laser_sight") != -1) { - KillEntity(iEntity); + if (Weapon_bRemoveLaserSight && StrContains(entclass, "upgrade_laser_sight") != -1) { + KillEntity(iEntity); - #if (DEBUG_WI) - LogMessage("[%s] Killing laser sight...", WI_MODULE_NAME); - #endif + #if (DEBUG_WI) + LogMessage("[%s] Killing laser sight...", WI_MODULE_NAME); + #endif - continue; - } - } + continue; + } + } #if (DEBUG_WI) - LogMessage("[%s] Round Start Loop End", WI_MODULE_NAME); - LogMessage("[%s] }", WI_MODULE_NAME); + LogMessage("[%s] Round Start Loop End", WI_MODULE_NAME); + LogMessage("[%s] }", WI_MODULE_NAME); #endif - return Plugin_Stop; + return Plugin_Stop; } public void WI_SpawnerGiveItem_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - if (!IsPluginEnabled()) { - return; - } + if (!IsPluginEnabled()) { + return; + } - int iEntity = hEvent.GetInt("spawner"); + int iEntity = hEvent.GetInt("spawner"); - char sEntityClassName[MAX_ENTITY_NAME_LENGTH]; - GetEdictClassname(iEntity, sEntityClassName, sizeof(sEntityClassName)); + char sEntityClassName[MAX_ENTITY_NAME_LENGTH]; + GetEdictClassname(iEntity, sEntityClassName, sizeof(sEntityClassName)); - int iWeaponIndex = WI_GetWeaponIndex(iEntity, sEntityClassName); - if (iWeaponIndex == WEAPON_NULL_INDEX) { - return; - } + int iWeaponIndex = WI_GetWeaponIndex(iEntity, sEntityClassName); + if (iWeaponIndex == WEAPON_NULL_INDEX) { + return; + } - WI_ReplaceWeapon(iEntity, iWeaponIndex, true); + WI_ReplaceWeapon(iEntity, iWeaponIndex, true); } diff --git a/addons/sourcemod/scripting/confoglcompmod/includes/configs.sp b/addons/sourcemod/scripting/confoglcompmod/includes/configs.sp index 821265e91..89fa5a7a5 100644 --- a/addons/sourcemod/scripting/confoglcompmod/includes/configs.sp +++ b/addons/sourcemod/scripting/confoglcompmod/includes/configs.sp @@ -1,185 +1,185 @@ #if defined __confogl_configs_included - #endinput + #endinput #endif #define __confogl_configs_included -#define CONFIGS_MODULE_NAME "Configs" +#define CONFIGS_MODULE_NAME "Configs" static const char - customCfgDir[] = "cfgogl"; + customCfgDir[] = "cfgogl"; static char - DirSeparator = '\0', - configsPath[PLATFORM_MAX_PATH] = "\0", - cfgPath[PLATFORM_MAX_PATH] = "\0", - customCfgPath[PLATFORM_MAX_PATH] = "\0", - customCfgName[PLATFORM_MAX_PATH] = "\0"; + DirSeparator = '\0', + configsPath[PLATFORM_MAX_PATH] = "\0", + cfgPath[PLATFORM_MAX_PATH] = "\0", + customCfgPath[PLATFORM_MAX_PATH] = "\0", + customCfgName[PLATFORM_MAX_PATH] = "\0"; static ConVar - hCustomConfig = null; + hCustomConfig = null; void Configs_APL() { - CreateNative("LGO_BuildConfigPath", _native_BuildConfigPath); - CreateNative("LGO_ExecuteConfigCfg", _native_ExecConfigCfg); - CreateNative("LGO_GetConfigName", _native_GetConfigName); + CreateNative("LGO_BuildConfigPath", _native_BuildConfigPath); + CreateNative("LGO_ExecuteConfigCfg", _native_ExecConfigCfg); + CreateNative("LGO_GetConfigName", _native_GetConfigName); } void Configs_OnModuleStart() { - InitPaths(); + InitPaths(); - hCustomConfig = CreateConVarEx("customcfg", "", "DONT TOUCH THIS CVAR! This is more magic bullshit!", FCVAR_DONTRECORD|FCVAR_UNLOGGED); + hCustomConfig = CreateConVarEx("customcfg", "", "DONT TOUCH THIS CVAR! This is more magic bullshit!", FCVAR_DONTRECORD|FCVAR_UNLOGGED); - char cfgString[PLATFORM_MAX_PATH]; - hCustomConfig.GetString(cfgString, sizeof(cfgString)); - SetCustomCfg(cfgString); + char cfgString[PLATFORM_MAX_PATH]; + hCustomConfig.GetString(cfgString, sizeof(cfgString)); + SetCustomCfg(cfgString); - hCustomConfig.RestoreDefault(); + hCustomConfig.RestoreDefault(); } static void InitPaths() { - BuildPath(Path_SM, configsPath, sizeof(configsPath), "configs/confogl/"); - BuildPath(Path_SM, cfgPath, sizeof(cfgPath), "../../cfg/"); + BuildPath(Path_SM, configsPath, sizeof(configsPath), "configs/confogl/"); + BuildPath(Path_SM, cfgPath, sizeof(cfgPath), "../../cfg/"); - DirSeparator = cfgPath[(strlen(cfgPath) - 1)]; + DirSeparator = cfgPath[(strlen(cfgPath) - 1)]; } bool SetCustomCfg(const char[] cfgname) { - if (!strlen(cfgname)) { - customCfgPath[0] = 0; - hCustomConfig.RestoreDefault(); - - if (IsDebugEnabled()) { - LogMessage("[%s] Custom Config Path Reset - Using Default", CONFIGS_MODULE_NAME); - } - - return true; - } - - Format(customCfgPath, sizeof(customCfgPath), "%s%s%c%s", cfgPath, customCfgDir, DirSeparator, cfgname); - if (!DirExists(customCfgPath)) { - Debug_LogError(CONFIGS_MODULE_NAME, "Custom config directory %s does not exist!", customCfgPath); - // Revert customCfgPath - customCfgPath[0] = 0; - return false; - } - - int thislen = strlen(customCfgPath); - if ((thislen + 1) < sizeof(customCfgPath)) { - customCfgPath[thislen] = DirSeparator; - customCfgPath[(thislen + 1)] = 0; - } else { - Debug_LogError(CONFIGS_MODULE_NAME, "Custom config directory %s path too long!", customCfgPath); - customCfgPath[0] = 0; - return false; - } - - strcopy(customCfgName, sizeof(customCfgName), cfgname); - hCustomConfig.SetString(cfgname); - - return true; + if (!strlen(cfgname)) { + customCfgPath[0] = 0; + hCustomConfig.RestoreDefault(); + + if (IsDebugEnabled()) { + LogMessage("[%s] Custom Config Path Reset - Using Default", CONFIGS_MODULE_NAME); + } + + return true; + } + + Format(customCfgPath, sizeof(customCfgPath), "%s%s%c%s", cfgPath, customCfgDir, DirSeparator, cfgname); + if (!DirExists(customCfgPath)) { + Debug_LogError(CONFIGS_MODULE_NAME, "Custom config directory %s does not exist!", customCfgPath); + // Revert customCfgPath + customCfgPath[0] = 0; + return false; + } + + int thislen = strlen(customCfgPath); + if ((thislen + 1) < sizeof(customCfgPath)) { + customCfgPath[thislen] = DirSeparator; + customCfgPath[(thislen + 1)] = 0; + } else { + Debug_LogError(CONFIGS_MODULE_NAME, "Custom config directory %s path too long!", customCfgPath); + customCfgPath[0] = 0; + return false; + } + + strcopy(customCfgName, sizeof(customCfgName), cfgname); + hCustomConfig.SetString(cfgname); + + return true; } void BuildConfigPath(char[] buffer, const int maxlength, const char[] sFileName) { - if (customCfgPath[0]) { - Format(buffer, maxlength, "%s%s", customCfgPath, sFileName); - - if (FileExists(buffer)) { - if (IsDebugEnabled()) { - LogMessage("[%s] Built custom config path: %s", CONFIGS_MODULE_NAME, buffer); - } - - return; - } else { - if (IsDebugEnabled()) { - LogMessage("[%s] Custom config not available: %s", CONFIGS_MODULE_NAME, buffer); - } - } - } - - Format(buffer, maxlength, "%s%s", configsPath, sFileName); - if (IsDebugEnabled()) { - LogMessage("[%s] Built default config path: %s", CONFIGS_MODULE_NAME, buffer); - } + if (customCfgPath[0]) { + Format(buffer, maxlength, "%s%s", customCfgPath, sFileName); + + if (FileExists(buffer)) { + if (IsDebugEnabled()) { + LogMessage("[%s] Built custom config path: %s", CONFIGS_MODULE_NAME, buffer); + } + + return; + } else { + if (IsDebugEnabled()) { + LogMessage("[%s] Custom config not available: %s", CONFIGS_MODULE_NAME, buffer); + } + } + } + + Format(buffer, maxlength, "%s%s", configsPath, sFileName); + if (IsDebugEnabled()) { + LogMessage("[%s] Built default config path: %s", CONFIGS_MODULE_NAME, buffer); + } } void ExecuteCfg(const char[] sFileName) { - if (strlen(sFileName) == 0) { - return; - } + if (strlen(sFileName) == 0) { + return; + } - char sFilePath[PLATFORM_MAX_PATH]; + char sFilePath[PLATFORM_MAX_PATH]; - if (customCfgPath[0]) { - Format(sFilePath, sizeof(sFilePath), "%s%s", customCfgPath, sFileName); + if (customCfgPath[0]) { + Format(sFilePath, sizeof(sFilePath), "%s%s", customCfgPath, sFileName); - if (FileExists(sFilePath)) { - if (IsDebugEnabled()) { - LogMessage("[%s] Executing custom cfg file %s", CONFIGS_MODULE_NAME, sFilePath); - } + if (FileExists(sFilePath)) { + if (IsDebugEnabled()) { + LogMessage("[%s] Executing custom cfg file %s", CONFIGS_MODULE_NAME, sFilePath); + } - ServerCommand("exec %s%s", customCfgPath[strlen(cfgPath)], sFileName); + ServerCommand("exec %s%s", customCfgPath[strlen(cfgPath)], sFileName); - return; - } else { - if (IsDebugEnabled()) { - LogMessage("[%s] Couldn't find custom cfg file %s, trying default", CONFIGS_MODULE_NAME, sFilePath); - } - } - } + return; + } else { + if (IsDebugEnabled()) { + LogMessage("[%s] Couldn't find custom cfg file %s, trying default", CONFIGS_MODULE_NAME, sFilePath); + } + } + } - Format(sFilePath, sizeof(sFilePath), "%s%s", cfgPath, sFileName); + Format(sFilePath, sizeof(sFilePath), "%s%s", cfgPath, sFileName); - if (FileExists(sFilePath)) { - if (IsDebugEnabled()) { - LogMessage("[%s] Executing default config %s", CONFIGS_MODULE_NAME, sFilePath); - } + if (FileExists(sFilePath)) { + if (IsDebugEnabled()) { + LogMessage("[%s] Executing default config %s", CONFIGS_MODULE_NAME, sFilePath); + } - ServerCommand("exec %s", sFileName); - } else { - Debug_LogError(CONFIGS_MODULE_NAME, "Could not execute server config \"%s\", file not found", sFilePath); - } + ServerCommand("exec %s", sFileName); + } else { + Debug_LogError(CONFIGS_MODULE_NAME, "Could not execute server config \"%s\", file not found", sFilePath); + } } public int _native_BuildConfigPath(Handle plugin, int numParams) { - int iLen = 0; - GetNativeStringLength(3, iLen); + int iLen = 0; + GetNativeStringLength(3, iLen); - int iNewLen = iLen + 1; - char[] sFileName = new char[iNewLen]; - GetNativeString(3, sFileName, iNewLen); + int iNewLen = iLen + 1; + char[] sFileName = new char[iNewLen]; + GetNativeString(3, sFileName, iNewLen); - iLen = GetNativeCell(2); + iLen = GetNativeCell(2); - char[] sBuf = new char[iLen]; - BuildConfigPath(sBuf, iLen, sFileName); - SetNativeString(1, sBuf, iLen); + char[] sBuf = new char[iLen]; + BuildConfigPath(sBuf, iLen, sFileName); + SetNativeString(1, sBuf, iLen); - return 1; + return 1; } public int _native_ExecConfigCfg(Handle plugin, int numParams) { - int iLen = 0; - GetNativeStringLength(1, iLen); + int iLen = 0; + GetNativeStringLength(1, iLen); - int iNewLen = iLen + 1; - char[] sFileName = new char[iNewLen]; - GetNativeString(1, sFileName, iNewLen); + int iNewLen = iLen + 1; + char[] sFileName = new char[iNewLen]; + GetNativeString(1, sFileName, iNewLen); - ExecuteCfg(sFileName); + ExecuteCfg(sFileName); - return 1; + return 1; } public int _native_GetConfigName(Handle plugin, int numParams) { - SetNativeString(1, customCfgName, GetNativeCell(2), true); - return 1; + SetNativeString(1, customCfgName, GetNativeCell(2), true); + return 1; } diff --git a/addons/sourcemod/scripting/confoglcompmod/includes/constants.sp b/addons/sourcemod/scripting/confoglcompmod/includes/constants.sp index e4d8ecabe..04b6af918 100644 --- a/addons/sourcemod/scripting/confoglcompmod/includes/constants.sp +++ b/addons/sourcemod/scripting/confoglcompmod/includes/constants.sp @@ -1,116 +1,116 @@ #if defined __confogl_constants_included - #endinput + #endinput #endif #define __confogl_constants_included -#define MAX_ENTITY_NAME_LENGTH 64 +#define MAX_ENTITY_NAME_LENGTH 64 -#define NUM_OF_SURVIVORS 4 +#define NUM_OF_SURVIVORS 4 -#define START_SAFEROOM (1 << 0) -#define END_SAFEROOM (1 << 1) +#define START_SAFEROOM (1 << 0) +#define END_SAFEROOM (1 << 1) -#define SPAWNFLAG_READY 0 -#define SPAWNFLAG_CANSPAWN (0 << 0) -#define SPAWNFLAG_DISABLED (1 << 0) -#define SPAWNFLAG_WAITFORSURVIVORS (1 << 1) -#define SPAWNFLAG_WAITFORFINALE (1 << 2) -#define SPAWNFLAG_WAITFORTANKTODIE (1 << 3) -#define SPAWNFLAG_SURVIVORESCAPED (1 << 4) -#define SPAWNFLAG_DIRECTORTIMEOUT (1 << 5) -#define SPAWNFLAG_WAITFORNEXTWAVE (1 << 6) -#define SPAWNFLAG_CANBESEEN (1 << 7) -#define SPAWNFLAG_TOOCLOSE (1 << 8) -#define SPAWNFLAG_RESTRICTEDAREA (1 << 9) -#define SPAWNFLAG_BLOCKED (1 << 10) +#define SPAWNFLAG_READY 0 +#define SPAWNFLAG_CANSPAWN (0 << 0) +#define SPAWNFLAG_DISABLED (1 << 0) +#define SPAWNFLAG_WAITFORSURVIVORS (1 << 1) +#define SPAWNFLAG_WAITFORFINALE (1 << 2) +#define SPAWNFLAG_WAITFORTANKTODIE (1 << 3) +#define SPAWNFLAG_SURVIVORESCAPED (1 << 4) +#define SPAWNFLAG_DIRECTORTIMEOUT (1 << 5) +#define SPAWNFLAG_WAITFORNEXTWAVE (1 << 6) +#define SPAWNFLAG_CANBESEEN (1 << 7) +#define SPAWNFLAG_TOOCLOSE (1 << 8) +#define SPAWNFLAG_RESTRICTEDAREA (1 << 9) +#define SPAWNFLAG_BLOCKED (1 << 10) enum { - L4D2Team_None = 0, - L4D2Team_Spectator, - L4D2Team_Survivor, - L4D2Team_Infected, - L4D2Team_L4D1_Survivor, // Probably for maps that contain survivors from the first part and from part 2 + L4D2Team_None = 0, + L4D2Team_Spectator, + L4D2Team_Survivor, + L4D2Team_Infected, + L4D2Team_L4D1_Survivor, // Probably for maps that contain survivors from the first part and from part 2 - L4D2Team_Size // 5 size + L4D2Team_Size // 5 size }; enum { - L4D2Infected_Common = 0, - L4D2Infected_Smoker = 1, - L4D2Infected_Boomer, - L4D2Infected_Hunter, - L4D2Infected_Spitter, - L4D2Infected_Jockey, - L4D2Infected_Charger, - L4D2Infected_Witch, - L4D2Infected_Tank, - L4D2Infected_Survivor, - - L4D2Infected_Size //10 size + L4D2Infected_Common = 0, + L4D2Infected_Smoker = 1, + L4D2Infected_Boomer, + L4D2Infected_Hunter, + L4D2Infected_Spitter, + L4D2Infected_Jockey, + L4D2Infected_Charger, + L4D2Infected_Witch, + L4D2Infected_Tank, + L4D2Infected_Survivor, + + L4D2Infected_Size //10 size }; enum { - L4D2WeaponSlot_Primary = 0, - L4D2WeaponSlot_Secondary, - L4D2WeaponSlot_Throwable, - L4D2WeaponSlot_HeavyHealthItem, - L4D2WeaponSlot_LightHealthItem, - - L4D2WeaponSlot_Size //5 size + L4D2WeaponSlot_Primary = 0, + L4D2WeaponSlot_Secondary, + L4D2WeaponSlot_Throwable, + L4D2WeaponSlot_HeavyHealthItem, + L4D2WeaponSlot_LightHealthItem, + + L4D2WeaponSlot_Size //5 size }; enum /*WeaponIDs*/ { - WEPID_PISTOL = 1, - WEPID_SMG, // 2 - WEPID_PUMPSHOTGUN, // 3 - WEPID_AUTOSHOTGUN, // 4 - WEPID_RIFLE, // 5 - WEPID_HUNTING_RIFLE, // 6 - WEPID_SMG_SILENCED, // 7 - WEPID_SHOTGUN_CHROME, // 8 - WEPID_RIFLE_DESERT, // 9 - WEPID_SNIPER_MILITARY, // 10 - WEPID_SHOTGUN_SPAS, // 11 - WEPID_FIRST_AID_KIT, // 12 - WEPID_MOLOTOV, // 13 - WEPID_PIPE_BOMB, // 14 - WEPID_PAIN_PILLS, // 15 - WEPID_GASCAN, // 16 - WEPID_PROPANE_TANK, // 17 - WEPID_AIR_CANISTER, // 18 - WEPID_CHAINSAW = 20, - WEPID_GRENADE_LAUNCHER, // 21 - WEPID_ADRENALINE = 23, - WEPID_DEFIBRILLATOR, // 24 - WEPID_VOMITJAR, // 25 - WEPID_RIFLE_AK47, // 26 - WEPID_GNOME_CHOMPSKI, // 27 - WEPID_COLA_BOTTLES, // 28 - WEPID_FIREWORKS_BOX, // 29 - WEPID_INCENDIARY_AMMO, // 30 - WEPID_FRAG_AMMO, // 31 - WEPID_PISTOL_MAGNUM, // 32 - WEPID_SMG_MP5, // 33 - WEPID_RIFLE_SG552, // 34 - WEPID_SNIPER_AWP, // 35 - WEPID_SNIPER_SCOUT, // 36 - WEPID_RIFLE_M60, // 37 + WEPID_PISTOL = 1, + WEPID_SMG, // 2 + WEPID_PUMPSHOTGUN, // 3 + WEPID_AUTOSHOTGUN, // 4 + WEPID_RIFLE, // 5 + WEPID_HUNTING_RIFLE, // 6 + WEPID_SMG_SILENCED, // 7 + WEPID_SHOTGUN_CHROME, // 8 + WEPID_RIFLE_DESERT, // 9 + WEPID_SNIPER_MILITARY, // 10 + WEPID_SHOTGUN_SPAS, // 11 + WEPID_FIRST_AID_KIT, // 12 + WEPID_MOLOTOV, // 13 + WEPID_PIPE_BOMB, // 14 + WEPID_PAIN_PILLS, // 15 + WEPID_GASCAN, // 16 + WEPID_PROPANE_TANK, // 17 + WEPID_AIR_CANISTER, // 18 + WEPID_CHAINSAW = 20, + WEPID_GRENADE_LAUNCHER, // 21 + WEPID_ADRENALINE = 23, + WEPID_DEFIBRILLATOR, // 24 + WEPID_VOMITJAR, // 25 + WEPID_RIFLE_AK47, // 26 + WEPID_GNOME_CHOMPSKI, // 27 + WEPID_COLA_BOTTLES, // 28 + WEPID_FIREWORKS_BOX, // 29 + WEPID_INCENDIARY_AMMO, // 30 + WEPID_FRAG_AMMO, // 31 + WEPID_PISTOL_MAGNUM, // 32 + WEPID_SMG_MP5, // 33 + WEPID_RIFLE_SG552, // 34 + WEPID_SNIPER_AWP, // 35 + WEPID_SNIPER_SCOUT, // 36 + WEPID_RIFLE_M60, // 37 - WEPID_SIZE + WEPID_SIZE }; /*stock const char g_sTeamName[8][] = { - "Spectator", - "" , - "Survivor", - "Infected", - "", - "Infected", - "Survivors", - "Infected" + "Spectator", + "" , + "Survivor", + "Infected", + "", + "Infected", + "Survivors", + "Infected" };*/ diff --git a/addons/sourcemod/scripting/confoglcompmod/includes/customtags.sp b/addons/sourcemod/scripting/confoglcompmod/includes/customtags.sp index df0d0cc7f..35670fa87 100644 --- a/addons/sourcemod/scripting/confoglcompmod/includes/customtags.sp +++ b/addons/sourcemod/scripting/confoglcompmod/includes/customtags.sp @@ -1,105 +1,105 @@ #if defined __confogl_customtags_included - #endinput + #endinput #endif #define __confogl_customtags_included // COPYRIGHT PSYCHONIC // USED WITH PERMISSION -#define CT_MODULE_NAME "CustomTags" +#define CT_MODULE_NAME "CustomTags" #define SV_TAG_SIZE 64 static stock bool - are_tags_hooked = false, - ignore_next_change = false; + are_tags_hooked = false, + ignore_next_change = false; static stock ConVar - sv_tags = null; + sv_tags = null; static stock ArrayList - custom_tags = null; + custom_tags = null; void CT_OnModuleStart() { - custom_tags = new ArrayList(ByteCountToCells(SV_TAG_SIZE)); + custom_tags = new ArrayList(ByteCountToCells(SV_TAG_SIZE)); - sv_tags = FindConVar("sv_tags"); + sv_tags = FindConVar("sv_tags"); } stock void AddCustomServerTag(const char[] tag) { - if (custom_tags.FindString(tag) == -1) { - custom_tags.PushString(tag); - } + if (custom_tags.FindString(tag) == -1) { + custom_tags.PushString(tag); + } - char current_tags[SV_TAG_SIZE]; - sv_tags.GetString(current_tags, sizeof(current_tags)); + char current_tags[SV_TAG_SIZE]; + sv_tags.GetString(current_tags, sizeof(current_tags)); - if (StrContains(current_tags, tag) > -1) { - // already have tag - return; - } + if (StrContains(current_tags, tag) > -1) { + // already have tag + return; + } - char new_tags[SV_TAG_SIZE]; - Format(new_tags, sizeof(new_tags), "%s%s%s", current_tags, (current_tags[0] != 0) ? "," : "", tag); + char new_tags[SV_TAG_SIZE]; + Format(new_tags, sizeof(new_tags), "%s%s%s", current_tags, (current_tags[0] != 0) ? "," : "", tag); - int flags = sv_tags.Flags; - sv_tags.Flags = flags & ~FCVAR_NOTIFY; + int flags = sv_tags.Flags; + sv_tags.Flags = flags & ~FCVAR_NOTIFY; - ignore_next_change = true; - sv_tags.SetString(new_tags); - ignore_next_change = false; + ignore_next_change = true; + sv_tags.SetString(new_tags); + ignore_next_change = false; - sv_tags.Flags = flags; + sv_tags.Flags = flags; - if (!are_tags_hooked) { - sv_tags.AddChangeHook(OnTagsChanged); - are_tags_hooked = true; - } + if (!are_tags_hooked) { + sv_tags.AddChangeHook(OnTagsChanged); + are_tags_hooked = true; + } } stock void RemoveCustomServerTag(const char[] tag) { - int idx = custom_tags.FindString(tag); - if (idx > -1) { - custom_tags.Erase(idx); - } + int idx = custom_tags.FindString(tag); + if (idx > -1) { + custom_tags.Erase(idx); + } - char current_tags[SV_TAG_SIZE]; - sv_tags.GetString(current_tags, sizeof(current_tags)); + char current_tags[SV_TAG_SIZE]; + sv_tags.GetString(current_tags, sizeof(current_tags)); - if (StrContains(current_tags, tag) == -1) { - // tag isn't on here, just bug out - return; - } + if (StrContains(current_tags, tag) == -1) { + // tag isn't on here, just bug out + return; + } - ReplaceString(current_tags, sizeof(current_tags), tag, ""); - ReplaceString(current_tags, sizeof(current_tags), ",,", ""); + ReplaceString(current_tags, sizeof(current_tags), tag, ""); + ReplaceString(current_tags, sizeof(current_tags), ",,", ""); - int flags = sv_tags.Flags; - sv_tags.Flags = flags & ~FCVAR_NOTIFY; + int flags = sv_tags.Flags; + sv_tags.Flags = flags & ~FCVAR_NOTIFY; - ignore_next_change = true; - sv_tags.SetString(current_tags); - ignore_next_change = false; + ignore_next_change = true; + sv_tags.SetString(current_tags); + ignore_next_change = false; - sv_tags.Flags = flags; + sv_tags.Flags = flags; } public void OnTagsChanged(ConVar hConvar, const char[] sOldValue, const char[] sNewValue) { - if (ignore_next_change) { - // we fired this callback, no need to reapply tags - return; - } - - // reapply each custom tag - char tag[SV_TAG_SIZE]; - int iSize = custom_tags.Length; - - for (int i = 0; i < iSize; i++) { - custom_tags.GetString(i, tag, sizeof(tag)); - AddCustomServerTag(tag); - } + if (ignore_next_change) { + // we fired this callback, no need to reapply tags + return; + } + + // reapply each custom tag + char tag[SV_TAG_SIZE]; + int iSize = custom_tags.Length; + + for (int i = 0; i < iSize; i++) { + custom_tags.GetString(i, tag, sizeof(tag)); + AddCustomServerTag(tag); + } } diff --git a/addons/sourcemod/scripting/confoglcompmod/includes/debug.sp b/addons/sourcemod/scripting/confoglcompmod/includes/debug.sp index 7b6199262..8e033054c 100644 --- a/addons/sourcemod/scripting/confoglcompmod/includes/debug.sp +++ b/addons/sourcemod/scripting/confoglcompmod/includes/debug.sp @@ -1,77 +1,77 @@ #if defined __confogl_debug_included - #endinput + #endinput #endif #define __confogl_debug_included #if DEBUG_ALL - #define DEBUG_DEFAULT "1" + #define DEBUG_DEFAULT "1" #else - #define DEBUG_DEFAULT "0" + #define DEBUG_DEFAULT "0" #endif static char - g_sLogAction[256]; + g_sLogAction[256]; static bool - g_bConfoglDebug = false; + g_bConfoglDebug = false; static ConVar - g_hCvarCustomErrorLog = null, - g_hCvarDebugConVar = null; + g_hCvarCustomErrorLog = null, + g_hCvarDebugConVar = null; void Debug_OnModuleStart() { - g_hCvarDebugConVar = CreateConVarEx("debug", DEBUG_DEFAULT, "Turn on Debug Logging in all Confogl Modules", _, true, 0.0, true, 1.0); - - //confogl_custom_error_logs - g_hCvarCustomErrorLog = CreateConVarEx( \ - "custom_error_logs", \ - "1", \ - "Write logs to custom error log file (0 - use sourcemod error log file, 1 - use custom error log file)", \ - _, true, 0.0, true, 1.0 \ - ); - - g_bConfoglDebug = g_hCvarDebugConVar.BoolValue; - g_hCvarDebugConVar.AddChangeHook(Debug_ConVarChange); - - char sTime[64], sBuffer[64]; - FormatTime(sTime, sizeof(sTime), "%Y%m%d"); - FormatEx(sBuffer, sizeof(sBuffer), "logs/confoglcompmod/errors_%s.log", sTime); //errors_20211201.log - BuildPath(Path_SM, g_sLogAction, sizeof(g_sLogAction), sBuffer); - - BuildPath(Path_SM, sBuffer, sizeof(sBuffer), "logs/confoglcompmod"); - if (!DirExists(sBuffer)) { - CreateDirectory(sBuffer, 511); - } + g_hCvarDebugConVar = CreateConVarEx("debug", DEBUG_DEFAULT, "Turn on Debug Logging in all Confogl Modules", _, true, 0.0, true, 1.0); + + //confogl_custom_error_logs + g_hCvarCustomErrorLog = CreateConVarEx( \ + "custom_error_logs", \ + "1", \ + "Write logs to custom error log file (0 - use sourcemod error log file, 1 - use custom error log file)", \ + _, true, 0.0, true, 1.0 \ + ); + + g_bConfoglDebug = g_hCvarDebugConVar.BoolValue; + g_hCvarDebugConVar.AddChangeHook(Debug_ConVarChange); + + char sTime[64], sBuffer[64]; + FormatTime(sTime, sizeof(sTime), "%Y%m%d"); + FormatEx(sBuffer, sizeof(sBuffer), "logs/confoglcompmod/errors_%s.log", sTime); //errors_20211201.log + BuildPath(Path_SM, g_sLogAction, sizeof(g_sLogAction), sBuffer); + + BuildPath(Path_SM, sBuffer, sizeof(sBuffer), "logs/confoglcompmod"); + if (!DirExists(sBuffer)) { + CreateDirectory(sBuffer, 511); + } } public void Debug_ConVarChange(ConVar hConvar, const char[] sOldValue, const char[] sNewValue) { - g_bConfoglDebug = hConvar.BoolValue; + g_bConfoglDebug = hConvar.BoolValue; } stock bool IsDebugEnabled() { - return (g_bConfoglDebug || DEBUG_ALL); + return (g_bConfoglDebug || DEBUG_ALL); } stock void Debug_LogError(const char[] sModuleName, const char[] sMessage, any ...) { - static char sFormat[512]; - VFormat(sFormat, sizeof(sFormat), sMessage, 3); + static char sFormat[512]; + VFormat(sFormat, sizeof(sFormat), sMessage, 3); - static char sMap[64]; - GetCurrentMap(sMap, sizeof(sMap)); + static char sMap[64]; + GetCurrentMap(sMap, sizeof(sMap)); - Format(sFormat, sizeof(sFormat), "[%s] [%s] %s", sModuleName, sMap, sFormat); + Format(sFormat, sizeof(sFormat), "[%s] [%s] %s", sModuleName, sMap, sFormat); - if (!g_hCvarCustomErrorLog.BoolValue) { - // L 12/16/2021 - 12:10:15: [confoglcompmod.smx] [CvarSettings] [c4m1_milltown_a] Could not find CVar specified (l4d2_meleecontrol_enable) - LogError(sFormat); - return; - } + if (!g_hCvarCustomErrorLog.BoolValue) { + // L 12/16/2021 - 12:10:15: [confoglcompmod.smx] [CvarSettings] [c4m1_milltown_a] Could not find CVar specified (l4d2_meleecontrol_enable) + LogError(sFormat); + return; + } - // Same as LogToFile(), except no plugin logtag is prepended. - // L 12/16/2021 - 12:11:45: [CvarSettings] [c4m1_milltown_a] Could not find CVar specified (l4d2_meleecontrol_enable) - LogToFileEx(g_sLogAction, sFormat); + // Same as LogToFile(), except no plugin logtag is prepended. + // L 12/16/2021 - 12:11:45: [CvarSettings] [c4m1_milltown_a] Could not find CVar specified (l4d2_meleecontrol_enable) + LogToFileEx(g_sLogAction, sFormat); } diff --git a/addons/sourcemod/scripting/confoglcompmod/includes/functions.sp b/addons/sourcemod/scripting/confoglcompmod/includes/functions.sp index 5c498dc0a..ae512a40c 100644 --- a/addons/sourcemod/scripting/confoglcompmod/includes/functions.sp +++ b/addons/sourcemod/scripting/confoglcompmod/includes/functions.sp @@ -1,201 +1,201 @@ #if defined __confogl_functions_included - #endinput + #endinput #endif #define __confogl_functions_included -#define CVAR_PREFIX "confogl_" -#define CVAR_FLAGS FCVAR_NONE -#define CVAR_PRIVATE (FCVAR_DONTRECORD|FCVAR_PROTECTED) +#define CVAR_PREFIX "confogl_" +#define CVAR_FLAGS FCVAR_NONE +#define CVAR_PRIVATE (FCVAR_DONTRECORD|FCVAR_PROTECTED) static ConVar - g_hCvarMpGameMode = null, - g_hCvarPainPillsDecayRate = null; + g_hCvarMpGameMode = null, + g_hCvarPainPillsDecayRate = null; static bool - bIsPluginEnabled = false; + bIsPluginEnabled = false; void Fns_OnModuleStart() { - g_hCvarMpGameMode = FindConVar("mp_gamemode"); - g_hCvarPainPillsDecayRate = FindConVar("pain_pills_decay_rate"); + g_hCvarMpGameMode = FindConVar("mp_gamemode"); + g_hCvarPainPillsDecayRate = FindConVar("pain_pills_decay_rate"); } stock ConVar CreateConVarEx(const char[] name, const char[] defaultValue, const char[] description = "", int flags = FCVAR_NONE, \ - bool hasMin = false, float min = 0.0, bool hasMax = false, float max = 0.0) + bool hasMin = false, float min = 0.0, bool hasMax = false, float max = 0.0) { - char sBuffer[128]; - ConVar cvar = null; + char sBuffer[128]; + ConVar cvar = null; - Format(sBuffer, sizeof(sBuffer), "%s%s", CVAR_PREFIX, name); - flags = flags | CVAR_FLAGS; - cvar = CreateConVar(sBuffer, defaultValue, description, flags, hasMin, min, hasMax, max); + Format(sBuffer, sizeof(sBuffer), "%s%s", CVAR_PREFIX, name); + flags = flags | CVAR_FLAGS; + cvar = CreateConVar(sBuffer, defaultValue, description, flags, hasMin, min, hasMax, max); - return cvar; + return cvar; } stock ConVar FindConVarEx(const char[] name) { - char sBuffer[128]; - Format(sBuffer, sizeof(sBuffer), "%s%s", CVAR_PREFIX, name); + char sBuffer[128]; + Format(sBuffer, sizeof(sBuffer), "%s%s", CVAR_PREFIX, name); - return FindConVar(sBuffer); + return FindConVar(sBuffer); } stock bool IsHumansOnServer() { - for (int i = 1; i <= MaxClients; i++) { - if (IsClientConnected(i) && !IsFakeClient(i)) { - return true; - } - } + for (int i = 1; i <= MaxClients; i++) { + if (IsClientConnected(i) && !IsFakeClient(i)) { + return true; + } + } - return false; + return false; } stock bool IsVersus() { - char GameMode[32]; - g_hCvarMpGameMode.GetString(GameMode, sizeof(GameMode)); - return (StrContains(GameMode, "versus", false) != -1); + char GameMode[32]; + g_hCvarMpGameMode.GetString(GameMode, sizeof(GameMode)); + return (StrContains(GameMode, "versus", false) != -1); } /*stock bool IsScavenge() { - char GameMode[32]; - g_hCvarMpGameMode.GetString(GameMode, sizeof(GameMode)); - return (StrContains(GameMode, "scavenge", false) != -1); + char GameMode[32]; + g_hCvarMpGameMode.GetString(GameMode, sizeof(GameMode)); + return (StrContains(GameMode, "scavenge", false) != -1); }*/ stock bool IsPluginEnabled(bool bSetStatus = false, bool bStatus = false) { - if (bSetStatus) { - bIsPluginEnabled = bStatus; - } + if (bSetStatus) { + bIsPluginEnabled = bStatus; + } - return bIsPluginEnabled; + return bIsPluginEnabled; } stock int GetSurvivorPermanentHealth(int client) { - return GetEntProp(client, Prop_Send, "m_iHealth"); + return GetEntProp(client, Prop_Send, "m_iHealth"); } stock int GetSurvivorTempHealth(int client) { - float fHealthBuffer = GetEntPropFloat(client, Prop_Send, "m_healthBuffer"); - float fHealthBufferDuration = GetGameTime() - GetEntPropFloat(client, Prop_Send, "m_healthBufferTime"); + float fHealthBuffer = GetEntPropFloat(client, Prop_Send, "m_healthBuffer"); + float fHealthBufferDuration = GetGameTime() - GetEntPropFloat(client, Prop_Send, "m_healthBufferTime"); - int iTempHp = RoundToCeil(fHealthBuffer - (fHealthBufferDuration * g_hCvarPainPillsDecayRate.FloatValue)) - 1; + int iTempHp = RoundToCeil(fHealthBuffer - (fHealthBufferDuration * g_hCvarPainPillsDecayRate.FloatValue)) - 1; - return (iTempHp > 0) ? iTempHp : 0; + return (iTempHp > 0) ? iTempHp : 0; } stock int GetSurvivorIncapCount(int client) { - return GetEntProp(client, Prop_Send, "m_currentReviveCount"); + return GetEntProp(client, Prop_Send, "m_currentReviveCount"); } stock bool IsSurvivor(int client) { - return (IsClientInGame(client) && GetClientTeam(client) == L4D2Team_Survivor); + return (IsClientInGame(client) && GetClientTeam(client) == L4D2Team_Survivor); } stock void ZeroVector(float vector[3]) { - vector = NULL_VECTOR; + vector = NULL_VECTOR; } stock void AddToVector(float to[3], float from[3]) { - to[0] += from[0]; - to[1] += from[1]; - to[2] += from[2]; + to[0] += from[0]; + to[1] += from[1]; + to[2] += from[2]; } stock void CopyVector(float to[3], float from[3]) { - to = from; + to = from; } stock int GetURandomIntRange(int min, int max) { - return RoundToNearest((GetURandomFloat() * (max - min)) + min); + return RoundToNearest((GetURandomFloat() * (max - min)) + min); } stock void KillEntity(int iEntity) { #if SOURCEMOD_V_MINOR > 8 - RemoveEntity(iEntity); + RemoveEntity(iEntity); #else - AcceptEntityInput(iEntity, "Kill"); + AcceptEntityInput(iEntity, "Kill"); #endif } /** * Finds the first occurrence of a pattern in another string. * - * @param str String to search in. - * @param pattern String pattern to search for - * @param reverse False (default) to search forward, true to search - * backward. - * @return The index of the first character of the first - * occurrence of the pattern in the string, or -1 if the - * character was not found. + * @param str String to search in. + * @param pattern String pattern to search for + * @param reverse False (default) to search forward, true to search + * backward. + * @return The index of the first character of the first + * occurrence of the pattern in the string, or -1 if the + * character was not found. */ /*stock int FindPatternInString(const char[] str, const char[] pattern, bool reverse = false) { - int i = 0, len = strlen(pattern); - char c = pattern[0]; + int i = 0, len = strlen(pattern); + char c = pattern[0]; - while (i < len && (i = FindCharInString(str[i], c, reverse)) != -1) { - if (strncmp(str[i], pattern, len)) { - return i; - } - } + while (i < len && (i = FindCharInString(str[i], c, reverse)) != -1) { + if (strncmp(str[i], pattern, len)) { + return i; + } + } - return -1; + return -1; }*/ /** * Counts the number of occurences of pattern in another string. * - * @param str String to search in. - * @param pattern String pattern to search for - * @param overlap False (default) to count only non-overlapping - * occurences, true to count matches within other - * occurences. - * @return The number of occurences of the pattern in the string + * @param str String to search in. + * @param pattern String pattern to search for + * @param overlap False (default) to count only non-overlapping + * occurences, true to count matches within other + * occurences. + * @return The number of occurences of the pattern in the string */ /*stock int CountPatternsInString(const char[] str, const char[] pattern, bool overlap = false) { - int off = 0, i = 0, delta = 0, cnt = 0; - int len = strlen(str); + int off = 0, i = 0, delta = 0, cnt = 0; + int len = strlen(str); - delta = (overlap) ? strlen(pattern) : 1; + delta = (overlap) ? strlen(pattern) : 1; - while (i < len && (off = FindPatternInString(str[i], pattern)) != -1) { - cnt++; - i += off + delta; - } + while (i < len && (off = FindPatternInString(str[i], pattern)) != -1) { + cnt++; + i += off + delta; + } - return cnt; + return cnt; }*/ /** * Counts the number of occurences of pattern in another string. * - * @param str String to search in. - * @param c Character to search for. - * @return The number of occurences of the pattern in the string + * @param str String to search in. + * @param c Character to search for. + * @return The number of occurences of the pattern in the string */ /*stock int CountCharsInString(const char[] str, int c) { - int off, i, cnt, len = strlen(str); + int off, i, cnt, len = strlen(str); - while (i < len && (off = FindCharInString(str[i], c)) != -1) { - cnt++; - i += off + 1; - } + while (i < len && (off = FindCharInString(str[i], c)) != -1) { + cnt++; + i += off + 1; + } - return cnt; + return cnt; }*/ diff --git a/addons/sourcemod/scripting/confoglcompmod/includes/survivorindex.sp b/addons/sourcemod/scripting/confoglcompmod/includes/survivorindex.sp index 74e28e0cb..5d7fd1291 100644 --- a/addons/sourcemod/scripting/confoglcompmod/includes/survivorindex.sp +++ b/addons/sourcemod/scripting/confoglcompmod/includes/survivorindex.sp @@ -1,98 +1,98 @@ #if defined __confogl_survivor_index_included - #endinput + #endinput #endif #define __confogl_survivor_index_included -#define SI_MODULE_NAME "SurvivorIndex" +#define SI_MODULE_NAME "SurvivorIndex" static int - iSurvivorIndex[NUM_OF_SURVIVORS] = {0, ...}; + iSurvivorIndex[NUM_OF_SURVIVORS] = {0, ...}; void SI_OnModuleStart() { - HookEvent("round_start", SI_BuildIndex_Event, EventHookMode_PostNoCopy); - HookEvent("round_end", SI_BuildIndex_Event, EventHookMode_PostNoCopy); - HookEvent("player_spawn", SI_BuildIndex_Event, EventHookMode_PostNoCopy); - HookEvent("player_disconnect", SI_BuildIndex_Event, EventHookMode_PostNoCopy); - HookEvent("player_death", SI_BuildIndex_Event, EventHookMode_PostNoCopy); - HookEvent("player_bot_replace", SI_BuildIndex_Event, EventHookMode_PostNoCopy); - HookEvent("bot_player_replace", SI_BuildIndex_Event, EventHookMode_PostNoCopy); - HookEvent("defibrillator_used", SI_BuildIndex_Event, EventHookMode_PostNoCopy); - HookEvent("player_team", SI_BuildIndexDelay_Event, EventHookMode_PostNoCopy); + HookEvent("round_start", SI_BuildIndex_Event, EventHookMode_PostNoCopy); + HookEvent("round_end", SI_BuildIndex_Event, EventHookMode_PostNoCopy); + HookEvent("player_spawn", SI_BuildIndex_Event, EventHookMode_PostNoCopy); + HookEvent("player_disconnect", SI_BuildIndex_Event, EventHookMode_PostNoCopy); + HookEvent("player_death", SI_BuildIndex_Event, EventHookMode_PostNoCopy); + HookEvent("player_bot_replace", SI_BuildIndex_Event, EventHookMode_PostNoCopy); + HookEvent("bot_player_replace", SI_BuildIndex_Event, EventHookMode_PostNoCopy); + HookEvent("defibrillator_used", SI_BuildIndex_Event, EventHookMode_PostNoCopy); + HookEvent("player_team", SI_BuildIndexDelay_Event, EventHookMode_PostNoCopy); } static void SI_BuildIndex() { - if (!IsServerProcessing() || !IsPluginEnabled()) { - return; - } + if (!IsServerProcessing() || !IsPluginEnabled()) { + return; + } - int ifoundsurvivors = 0, character = 0; + int ifoundsurvivors = 0, character = 0; - // Make sure kicked survivors don't freak us out. - for (int i = 0; i < NUM_OF_SURVIVORS; i++) { - iSurvivorIndex[i] = 0; - } + // Make sure kicked survivors don't freak us out. + for (int i = 0; i < NUM_OF_SURVIVORS; i++) { + iSurvivorIndex[i] = 0; + } - for (int client = 1; client <= MaxClients; client++) { - if (ifoundsurvivors == NUM_OF_SURVIVORS) { - break; - } + for (int client = 1; client <= MaxClients; client++) { + if (ifoundsurvivors == NUM_OF_SURVIVORS) { + break; + } - if (!IsClientInGame(client) || GetClientTeam(client) != L4D2Team_Survivor) { - continue; - } + if (!IsClientInGame(client) || GetClientTeam(client) != L4D2Team_Survivor) { + continue; + } - character = GetEntProp(client, Prop_Send, "m_survivorCharacter"); - ifoundsurvivors++; + character = GetEntProp(client, Prop_Send, "m_survivorCharacter"); + ifoundsurvivors++; - if (character > 3 || character < 0) { - continue; - } + if (character > 3 || character < 0) { + continue; + } - iSurvivorIndex[character] = 0; + iSurvivorIndex[character] = 0; - if (!IsPlayerAlive(client)) { - continue; - } + if (!IsPlayerAlive(client)) { + continue; + } - iSurvivorIndex[character] = client; - } + iSurvivorIndex[character] = client; + } } public void SI_BuildIndexDelay_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - CreateTimer(0.3, SI_BuildIndex_Timer, _, TIMER_FLAG_NO_MAPCHANGE); + CreateTimer(0.3, SI_BuildIndex_Timer, _, TIMER_FLAG_NO_MAPCHANGE); } public Action SI_BuildIndex_Timer(Handle hTimer) { - SI_BuildIndex(); + SI_BuildIndex(); - return Plugin_Stop; + return Plugin_Stop; } public void SI_BuildIndex_Event(Event hEvent, const char[] sEventName, bool bDontBroadcast) { - SI_BuildIndex(); + SI_BuildIndex(); } stock int GetSurvivorIndex(int index) { - if (index < 0 || index > 3) { - return 0; - } + if (index < 0 || index > 3) { + return 0; + } - return iSurvivorIndex[index]; + return iSurvivorIndex[index]; } stock bool IsAnySurvivorsAlive() { - for (int index = 0; index < NUM_OF_SURVIVORS; index++) { - if (iSurvivorIndex[index]) { - return true; - } - } + for (int index = 0; index < NUM_OF_SURVIVORS; index++) { + if (iSurvivorIndex[index]) { + return true; + } + } - return false; + return false; } From 12a872c640e4aeb02afaf2260eeccc80717ce3df Mon Sep 17 00:00:00 2001 From: nikita1824 Date: Sun, 21 Jan 2024 11:13:27 +0500 Subject: [PATCH 02/11] Update confogl configs --- .../sourcemod/data/protected_plugins_list.txt | 22 ++ .../plugins/{optional => }/l4d2lib.smx | Bin .../plugins/optional/predictable_unloader.smx | Bin 3679 -> 0 bytes .../plugins/plugin_unload_protect.smx | Bin 0 -> 7239 bytes .../{ => archive}/predictable_unloader.sp | 0 .../scripting/plugin_unload_protect.sp | 352 ++++++++++++++++++ cfg/cfgogl/acemodrv/confogl.cfg | 2 +- cfg/cfgogl/acemodrv/confogl_off.cfg | 7 +- cfg/cfgogl/acemodrv/confogl_plugins.cfg | 31 +- cfg/cfgogl/acemodrv/shared_cvars.cfg | 3 +- cfg/cfgogl/acemodrv/shared_plugins.cfg | 190 +++++----- cfg/cfgogl/amrv1v1/confogl.cfg | 2 +- cfg/cfgogl/amrv1v1/confogl_plugins.cfg | 33 +- cfg/cfgogl/amrv2v2/confogl.cfg | 2 +- cfg/cfgogl/amrv2v2/confogl_plugins.cfg | 41 +- cfg/cfgogl/amrv3v3/confogl.cfg | 2 +- cfg/cfgogl/amrv3v3/confogl_plugins.cfg | 39 +- cfg/cfgogl/apex/confogl.cfg | 2 +- cfg/cfgogl/apex/confogl_off.cfg | 7 +- cfg/cfgogl/apex/confogl_plugins.cfg | 31 +- cfg/cfgogl/apex/shared_cvars.cfg | 3 +- cfg/cfgogl/apex/shared_plugins.cfg | 188 +++++----- cfg/cfgogl/deadman/confogl.cfg | 4 +- cfg/cfgogl/deadman/confogl_off.cfg | 7 +- cfg/cfgogl/deadman/confogl_plugins.cfg | 173 ++++----- cfg/cfgogl/eq/confogl.cfg | 2 +- cfg/cfgogl/eq/confogl_off.cfg | 7 +- cfg/cfgogl/eq/confogl_plugins.cfg | 29 +- cfg/cfgogl/eq/shared_cvars.cfg | 3 +- cfg/cfgogl/eq/shared_plugins.cfg | 192 +++++----- cfg/cfgogl/eq1v1/confogl.cfg | 2 +- cfg/cfgogl/eq1v1/confogl_plugins.cfg | 25 +- cfg/cfgogl/eq2v2/confogl.cfg | 2 +- cfg/cfgogl/eq2v2/confogl_plugins.cfg | 31 +- cfg/cfgogl/eq3v3/confogl.cfg | 2 +- cfg/cfgogl/eq3v3/confogl_plugins.cfg | 31 +- cfg/cfgogl/neomod/confogl.cfg | 2 +- cfg/cfgogl/neomod/confogl_off.cfg | 7 +- cfg/cfgogl/neomod/confogl_plugins.cfg | 33 +- cfg/cfgogl/neomod/shared_cvars.cfg | 3 +- cfg/cfgogl/neomod/shared_plugins.cfg | 208 +++++------ cfg/cfgogl/nextmod/confogl_off.cfg | 7 +- cfg/cfgogl/nextmod/confogl_plugins.cfg | 29 +- cfg/cfgogl/nextmod/shared_cvars.cfg | 3 +- cfg/cfgogl/nextmod/shared_plugins.cfg | 225 +++++------ cfg/cfgogl/nextmod1v1/confogl_plugins.cfg | 31 +- cfg/cfgogl/nextmod2v2/confogl_plugins.cfg | 33 +- cfg/cfgogl/nextmod3v3/confogl_plugins.cfg | 33 +- cfg/cfgogl/pmelite/confogl.cfg | 4 +- cfg/cfgogl/pmelite/confogl_off.cfg | 7 +- cfg/cfgogl/pmelite/confogl_plugins.cfg | 209 +++++------ cfg/cfgogl/zh1v1/confogl.cfg | 2 +- cfg/cfgogl/zh1v1/confogl_plugins.cfg | 33 +- cfg/cfgogl/zh2v2/confogl.cfg | 2 +- cfg/cfgogl/zh2v2/confogl_plugins.cfg | 41 +- cfg/cfgogl/zh3v3/confogl.cfg | 2 +- cfg/cfgogl/zh3v3/confogl_plugins.cfg | 41 +- cfg/cfgogl/zm1v1/confogl.cfg | 2 +- cfg/cfgogl/zm1v1/confogl_plugins.cfg | 23 +- cfg/cfgogl/zm2v2/confogl.cfg | 2 +- cfg/cfgogl/zm2v2/confogl_plugins.cfg | 31 +- cfg/cfgogl/zm3v3/confogl.cfg | 2 +- cfg/cfgogl/zm3v3/confogl_plugins.cfg | 33 +- cfg/cfgogl/zonehunters/confogl.cfg | 2 +- cfg/cfgogl/zonehunters/confogl_off.cfg | 7 +- cfg/cfgogl/zonehunters/confogl_plugins.cfg | 31 +- cfg/cfgogl/zonehunters/shared_cvars.cfg | 3 +- cfg/cfgogl/zonehunters/shared_plugins.cfg | 188 +++++----- cfg/cfgogl/zonemod/confogl.cfg | 2 +- cfg/cfgogl/zonemod/confogl_off.cfg | 7 +- cfg/cfgogl/zonemod/confogl_plugins.cfg | 33 +- cfg/cfgogl/zonemod/shared_cvars.cfg | 3 +- cfg/cfgogl/zonemod/shared_plugins.cfg | 206 +++++----- cfg/cfgogl/zoneretro/confogl.cfg | 2 +- cfg/cfgogl/zoneretro/confogl_off.cfg | 7 +- cfg/cfgogl/zoneretro/confogl_plugins.cfg | 33 +- cfg/cfgogl/zoneretro/shared_cvars.cfg | 3 +- cfg/cfgogl/zoneretro/shared_plugins.cfg | 186 +++++---- cfg/generalfixes.cfg | 8 +- cfg/sharedplugins.cfg | 6 +- 80 files changed, 1966 insertions(+), 1276 deletions(-) create mode 100644 addons/sourcemod/data/protected_plugins_list.txt rename addons/sourcemod/plugins/{optional => }/l4d2lib.smx (100%) delete mode 100644 addons/sourcemod/plugins/optional/predictable_unloader.smx create mode 100644 addons/sourcemod/plugins/plugin_unload_protect.smx rename addons/sourcemod/scripting/{ => archive}/predictable_unloader.sp (100%) create mode 100644 addons/sourcemod/scripting/plugin_unload_protect.sp diff --git a/addons/sourcemod/data/protected_plugins_list.txt b/addons/sourcemod/data/protected_plugins_list.txt new file mode 100644 index 000000000..dfd791154 --- /dev/null +++ b/addons/sourcemod/data/protected_plugins_list.txt @@ -0,0 +1,22 @@ +//------------------------ +// Sourcemod Basic Plugins +//------------------------ +basebans.smx +basecommands.smx +basecomm.smx +admin-flatfile.smx +adminhelp.smx +adminmenu.smx +funcommands.smx +playercommands.smx + +//------------------------ +// Core Plugins +//------------------------ +left4dhooks.smx +l4d2lib.smx + +//------------------------ +// General Fixes +//------------------------ +l4d_pause_message.smx \ No newline at end of file diff --git a/addons/sourcemod/plugins/optional/l4d2lib.smx b/addons/sourcemod/plugins/l4d2lib.smx similarity index 100% rename from addons/sourcemod/plugins/optional/l4d2lib.smx rename to addons/sourcemod/plugins/l4d2lib.smx diff --git a/addons/sourcemod/plugins/optional/predictable_unloader.smx b/addons/sourcemod/plugins/optional/predictable_unloader.smx deleted file mode 100644 index 4c7ddb8000c3f6dc3e4ae45016607f5b572cc00b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3679 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 diff --git a/addons/sourcemod/plugins/plugin_unload_protect.smx b/addons/sourcemod/plugins/plugin_unload_protect.smx new file mode 100644 index 0000000000000000000000000000000000000000..47fc8eb130048bf361cf0cd0cf0568ddfaef6289 GIT binary patch literal 7239 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 XTrR3R)tI`b(a~|+SUh6EmBRl6PbBj( literal 0 HcmV?d00001 diff --git a/addons/sourcemod/scripting/predictable_unloader.sp b/addons/sourcemod/scripting/archive/predictable_unloader.sp similarity index 100% rename from addons/sourcemod/scripting/predictable_unloader.sp rename to addons/sourcemod/scripting/archive/predictable_unloader.sp diff --git a/addons/sourcemod/scripting/plugin_unload_protect.sp b/addons/sourcemod/scripting/plugin_unload_protect.sp new file mode 100644 index 000000000..b5aff6d74 --- /dev/null +++ b/addons/sourcemod/scripting/plugin_unload_protect.sp @@ -0,0 +1,352 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include + +#define DATA_FILE_PATH "data/protected_plugins_list.txt" + +#define PL_NONE 0 +#define PL_UNLOCK (1 << 0) +#define PL_UNLOAD (1 << 1) +#define PL_REFRESH (1 << 2) +#define PL_LOAD (1 << 3) +#define PL_LOCK (1 << 4) + +int g_iActions = PL_NONE; +bool g_bNextFrameQueued; +bool g_bUnloadQueued; + +ArrayList g_alProtectedPlugins; +ArrayList g_alPluginUnloadQueue; +ArrayList g_alPluginLoadQueue; + +public Plugin myinfo = { + name = "Plugin Unload Protect", + author = "0x0c", + description = "Wrapper around sm plugins to prevent certain plugins from being unloaded", + version = "1.1.0", + url = "https://solaris-servers.ru/" +} + +public void OnPluginStart() { + g_alProtectedPlugins = new ArrayList(PLATFORM_MAX_PATH); + g_alPluginLoadQueue = new ArrayList(PLATFORM_MAX_PATH); + g_alPluginUnloadQueue = new ArrayList(PLATFORM_MAX_PATH); + + RegAdminCmd("sm_plugins_protect", Cmd_Protect, ADMFLAG_RCON); + RegAdminCmd("sm_plugins_unprotect", Cmd_Unprotect, ADMFLAG_RCON); + RegAdminCmd("sm_plugins_protect_list", Cmd_List, ADMFLAG_RCON); + RegAdminCmd("sm_plugins_load_lock", Cmd_LoadLock, ADMFLAG_RCON); + RegAdminCmd("sm_plugins_load_unlock", Cmd_LoadUnlock, ADMFLAG_RCON); + RegAdminCmd("sm_plugins_refresh", Cmd_Refresh, ADMFLAG_RCON); + RegAdminCmd("sm_plugins_load", Cmd_Load, ADMFLAG_RCON); + RegAdminCmd("sm_plugins_unload", Cmd_Unload, ADMFLAG_RCON); + RegAdminCmd("sm_plugins_unload_all", Cmd_UnloadAll, ADMFLAG_RCON); + + ReadOrCreateDataFile(); +} + +public void OnAllPluginsLoaded() { + char szFilename[PLATFORM_MAX_PATH]; + Handle hPlugin = null; + Handle hIterator = GetPluginIterator(); + + while (MorePlugins(hIterator)) { + hPlugin = ReadPlugin(hIterator); + GetPluginFilename(hPlugin, szFilename, sizeof(szFilename)); + // add self to protected list + if (IsDefaultProtected(szFilename) && !IsPluginProtected(szFilename)) { + g_alProtectedPlugins.PushString(szFilename); + } + } + delete hIterator; +} + +void ReadOrCreateDataFile() { + char szDataPath[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, szDataPath, sizeof(szDataPath), "%s", DATA_FILE_PATH); + File file; + + if (!FileExists(szDataPath)) { + // file does not existt, simply create it and bail + file = OpenFile(szDataPath, "w"); + delete file; + return; + } + + char szLine[PLATFORM_MAX_PATH]; + file = OpenFile(szDataPath, "r"); + + while (!file.EndOfFile()) { + file.ReadLine(szLine, PLATFORM_MAX_PATH); + NormalizePluginFileName(szLine); + ServerCommand("sm_plugins_protect %s", szLine); + } + + delete file; +} + +Action Cmd_Protect(int iClient, int iArgs) { + if (iArgs < 1) { + ReplyToCommand(iClient, "Usage: sm_protect "); + return Plugin_Handled; + } + + char szFilename[PLATFORM_MAX_PATH]; + GetCmdArg(1, szFilename, sizeof(szFilename)); + NormalizePluginFileName(szFilename); + // check for duplicates + if (IsPluginProtected(szFilename)) { + ReplyToCommand(iClient, "[PluginUnloadProtect] %s is already protected", szFilename); + return Plugin_Handled; + } + // check that such a file exists + char szFullPath[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, szFullPath, sizeof(szFullPath), "plugins/%s", szFilename); + if (!FileExists(szFullPath)) { + LogError("[PluginUnloadProtect] File %s does not exist", szFullPath); + return Plugin_Handled; + } + + g_alProtectedPlugins.PushString(szFilename); + + return Plugin_Handled; +} + +Action Cmd_Unprotect(int iClient, int iArgs) { + if (iArgs < 1) { + ReplyToCommand(iClient, "Usage: sm_unprotect "); + return Plugin_Handled; + } + + char szFilename[PLATFORM_MAX_PATH]; + GetCmdArg(1, szFilename, sizeof(szFilename)); + NormalizePluginFileName(szFilename); + + if (IsDefaultProtected(szFilename)) { + ReplyToCommand(iClient, "[PluginUnloadProtect] Can not unprotect default plugin"); + return Plugin_Handled; + } + + int iItem = g_alProtectedPlugins.FindString(szFilename); + if (iItem == -1) { + ReplyToCommand(iClient, "[PluginUnloadProtect] %s is not protected", szFilename); + return Plugin_Handled; + } + g_alProtectedPlugins.Erase(iItem); + + return Plugin_Handled; +} + +Action Cmd_List(int iClient, int iArgs) { + ReplyToCommand(iClient, "[PluginUnloadProtect] List of protected plugins (%i):", g_alProtectedPlugins.Length); + char szFilename[PLATFORM_MAX_PATH]; + for (int i = 0; i < g_alProtectedPlugins.Length; i++) { + g_alProtectedPlugins.GetString(i, szFilename, sizeof(szFilename)); + ReplyToCommand(iClient, "- %s", szFilename); + } + + return Plugin_Handled; +} + +Action Cmd_LoadLock(int iClient, int iArgs) { + g_iActions |= PL_LOCK; + ScheduleActions(); + return Plugin_Handled; +} + +Action Cmd_LoadUnlock(int iClient, int iArgs) { + g_iActions |= PL_UNLOCK; + ScheduleActions(); + return Plugin_Handled; +} + +Action Cmd_Refresh(int iClient, int iArgs) { + g_iActions |= PL_REFRESH; + ScheduleActions(); + return Plugin_Handled; +} + +Action Cmd_Load(int iClient, int iArgs) { + if (iArgs < 1) { + ReplyToCommand(iClient, "Usage: sm_plugins_load "); + return Plugin_Handled; + } + + char szFilename[PLATFORM_MAX_PATH]; + GetCmdArg(1, szFilename, sizeof(szFilename)); + NormalizePluginFileName(szFilename); + g_alPluginLoadQueue.PushString(szFilename); + g_iActions |= PL_LOAD; + ScheduleActions(); + + return Plugin_Handled; +} + +Action Cmd_Unload(int iClient, int iArgs) { + if (iArgs < 1) { + ReplyToCommand(iClient, "Usage: sm_plugins_unload "); + return Plugin_Handled; + } + + char szFilename[PLATFORM_MAX_PATH]; + GetCmdArg(1, szFilename, sizeof(szFilename)); + NormalizePluginFileName(szFilename); + + if (IsPluginProtected(szFilename)) { + ReplyToCommand(iClient, "[PluginUnloadProtect] Plugin %s can not be unloaded, because it is currently protected", szFilename); + return Plugin_Handled; + } + + g_alPluginUnloadQueue.PushString(szFilename); + g_iActions |= PL_UNLOAD; + ScheduleActions(); + + return Plugin_Handled; +} + +Action Cmd_UnloadAll(int iClient, int iArgs) { + if (g_alPluginUnloadQueue.Length > 0) { + ReplyToCommand(iClient, "[PluginUnloadProtect] Could not execute the command, plugins are currently being unloaded"); + return Plugin_Handled; + } + + char szFilename[PLATFORM_MAX_PATH]; + Handle hPlugin = null; + Handle hIterator = GetPluginIterator(); + + while (MorePlugins(hIterator)) { + hPlugin = ReadPlugin(hIterator); + GetPluginFilename(hPlugin, szFilename, sizeof(szFilename)); + if (IsPluginProtected(szFilename)) + continue; + + g_alPluginUnloadQueue.PushString(szFilename); + } + + delete hIterator; + g_iActions |= PL_UNLOAD; + ScheduleActions(); + + return Plugin_Handled; +} + +void ScheduleActions() { + if (g_bNextFrameQueued) + return; + + g_bNextFrameQueued = true; + RequestFrame(ScheduleActions_NextFrame); +} + +void ScheduleActions_NextFrame() { + if (g_iActions == PL_NONE) { + g_bNextFrameQueued = false; + return; + } + + if (g_iActions & PL_UNLOCK == PL_UNLOCK) { + ServerCommand("sm plugins load_unlock"); + g_iActions &= ~PL_UNLOCK; + } else if (g_iActions & PL_UNLOAD == PL_UNLOAD) { + if (g_bUnloadQueued) { + AwaitUnload(); + } else { + ExecuteUnload(); + } + } else if (g_iActions & PL_REFRESH == PL_REFRESH) { + ServerCommand("sm plugins refresh"); + g_iActions &= ~PL_REFRESH; + } else if (g_iActions & PL_LOAD == PL_LOAD) { + ExecuteLoad(); + g_iActions &= ~PL_LOAD; + } else if (g_iActions & PL_LOCK == PL_LOCK) { + ServerCommand("sm plugins load_lock"); + g_iActions &= ~PL_LOCK; + } else { + g_iActions = PL_NONE; + } + + RequestFrame(ScheduleActions_NextFrame); +} + +void ExecuteUnload() { + char szFilename[PLATFORM_MAX_PATH]; + + for (int i = g_alPluginUnloadQueue.Length - 1; i >= 0; i--) { + g_alPluginUnloadQueue.GetString(i, szFilename, sizeof(szFilename)); + ServerCommand("sm plugins unload %s", szFilename); + } + + g_bUnloadQueued = true; +} + +void AwaitUnload() { + char szFilename[PLATFORM_MAX_PATH]; + + for (int i = g_alPluginUnloadQueue.Length - 1; i >= 0; i--) { + Handle hPlugin = null; + Handle hIterator = GetPluginIterator(); + + while (MorePlugins(hIterator)) { + hPlugin = ReadPlugin(hIterator); + GetPluginFilename(hPlugin, szFilename, sizeof(szFilename)); + g_bUnloadQueued = g_alPluginUnloadQueue.FindString(szFilename) > -1; + if (g_bUnloadQueued) { + break; + } + } + + delete hIterator; + if (g_bUnloadQueued) { + break; + } + } + + if (!g_bUnloadQueued) { + g_alPluginUnloadQueue.Clear(); + g_iActions &= ~PL_UNLOAD; + } +} + +void ExecuteLoad() { + char szFilename[PLATFORM_MAX_PATH]; + for (int i = 0; i < g_alPluginLoadQueue.Length; i++) { + g_alPluginLoadQueue.GetString(i, szFilename, sizeof(szFilename)); + ServerCommand("sm plugins load %s", szFilename); + } + + g_alPluginLoadQueue.Clear(); +} + +bool IsPluginProtected(const char[] szFilename) { + return g_alProtectedPlugins.FindString(szFilename) > -1; +} + +void NormalizePluginFileName(char[] szFilename) { + TrimString(szFilename); + if (StrContains(szFilename, ".smx", true) == -1) { + StrCat(szFilename, PLATFORM_MAX_PATH, ".smx"); + } +} + +bool IsDefaultProtected(const char[] szFilename) { + static const char szProtectedDefault[][PLATFORM_MAX_PATH] = { + "plugin_unload_protect" + }; + + char szFilenameWithoutExt[PLATFORM_MAX_PATH]; + strcopy(szFilenameWithoutExt, sizeof(szFilenameWithoutExt), szFilename); + ReplaceString(szFilenameWithoutExt, sizeof(szFilenameWithoutExt), ".smx", "", false); + + char szDefaultPluginWithoutExt[PLATFORM_MAX_PATH]; + for (int i = 0; i < sizeof(szProtectedDefault); i++) { + strcopy(szDefaultPluginWithoutExt, sizeof(szDefaultPluginWithoutExt), szProtectedDefault[i]); + ReplaceString(szDefaultPluginWithoutExt, sizeof(szDefaultPluginWithoutExt), ".smx", "", false); + if (strcmp(szFilenameWithoutExt, szDefaultPluginWithoutExt, false) == 0) { + return true; + } + } + + return false; +} \ No newline at end of file diff --git a/cfg/cfgogl/acemodrv/confogl.cfg b/cfg/cfgogl/acemodrv/confogl.cfg index 4bbb92ee8..2fa34dadd 100644 --- a/cfg/cfgogl/acemodrv/confogl.cfg +++ b/cfg/cfgogl/acemodrv/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "Acemod RV 1.3" +confogl_addcvar l4d_ready_cfg_name "Acemod RV 1.3" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/acemodrv/confogl_off.cfg b/cfg/cfgogl/acemodrv/confogl_off.cfg index 4d1be994b..7a2fd7215 100644 --- a/cfg/cfgogl/acemodrv/confogl_off.cfg +++ b/cfg/cfgogl/acemodrv/confogl_off.cfg @@ -7,9 +7,6 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -17,4 +14,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins \ No newline at end of file +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/acemodrv/confogl_plugins.cfg b/cfg/cfgogl/acemodrv/confogl_plugins.cfg index 1dad44bd9..e8298037d 100644 --- a/cfg/cfgogl/acemodrv/confogl_plugins.cfg +++ b/cfg/cfgogl/acemodrv/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Ace Shared Plugins //------------------------------------------- @@ -15,8 +26,18 @@ exec cfgogl/acemodrv/shared_plugins.cfg //------------------------------------------- // Ace 4v4 //------------------------------------------- -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx \ No newline at end of file +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/acemodrv/shared_cvars.cfg b/cfg/cfgogl/acemodrv/shared_cvars.cfg index 98b53ca28..40da28b89 100644 --- a/cfg/cfgogl/acemodrv/shared_cvars.cfg +++ b/cfg/cfgogl/acemodrv/shared_cvars.cfg @@ -24,8 +24,7 @@ confogl_addcvar versus_marker_num 0 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled 1 - +confogl_addcvar l4d_ready_enabled 1 confogl_addcvar l4d_ready_survivor_freeze 0 confogl_addcvar l4d_ready_delay 3 confogl_addcvar l4d_ready_enable_sound 1 diff --git a/cfg/cfgogl/acemodrv/shared_plugins.cfg b/cfg/cfgogl/acemodrv/shared_plugins.cfg index bab3dcd7b..7afb91f71 100644 --- a/cfg/cfgogl/acemodrv/shared_plugins.cfg +++ b/cfg/cfgogl/acemodrv/shared_plugins.cfg @@ -7,129 +7,113 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx - //---------------------------------- // General Competitive Plugins //---------------------------------- -sm plugins load optional/l4d2_pickup.smx -sm plugins load optional/blockheatseekingchargers.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_nospitterduringtank.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_unsilent_jockey.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d_jockey_ledgehang.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx -sm plugins load optional/l4d_witch_damage_announce.smx +sm_plugins_load optional/l4d2_pickup.smx +sm_plugins_load optional/blockheatseekingchargers.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_nospitterduringtank.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_unsilent_jockey.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d_jockey_ledgehang.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx +sm_plugins_load optional/l4d_witch_damage_announce.smx //---------------------- // Equilibrium Plugins //---------------------- -sm plugins load optional/eq_finale_tanks.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_jockey_skeet.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d2_spitblock.smx -sm plugins load optional/l4d2_uniform_spit.smx -sm plugins load optional/l4d_tank_painfade.smx -sm plugins load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/eq_finale_tanks.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_jockey_skeet.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d2_spitblock.smx +sm_plugins_load optional/l4d2_uniform_spit.smx +sm_plugins_load optional/l4d_tank_painfade.smx +sm_plugins_load optional/l4d_texture_manager_block.smx //---------------------- // EQ3 / Acemod //---------------------- -sm plugins load optional/l4d2_tank_charger_m2_fix.smx -sm plugins load optional/l4d2_smoker_drag_damage_interval.smx -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_ultra_witch.smx -sm plugins load optional/l4d2_horde_equaliser.smx -sm plugins load optional/l4d2_no_hunter_deadstops.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/boomer_horde_equalizer.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_tank_damage_cvars.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_hybrid_scoremod.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/fix_engine.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/specrates.smx -sm plugins load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/l4d2_tank_charger_m2_fix.smx +sm_plugins_load optional/l4d2_smoker_drag_damage_interval.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_ultra_witch.smx +sm_plugins_load optional/l4d2_horde_equaliser.smx +sm_plugins_load optional/l4d2_no_hunter_deadstops.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/boomer_horde_equalizer.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_tank_damage_cvars.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_hybrid_scoremod.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/fix_engine.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/specrates.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx //---------------------- // Static shotgun spread //---------------------- -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx //--------------------------------------------- // Merged FF Plugins, needs to be loaded here //--------------------------------------------- -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx //--------------------------- // Matchmaking Plugins //--------------------------- -sm plugins load optional/readyup.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/cfg_motd.smx -sm plugins load optional/spechud.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/witch_and_tankifier.smx - -// Letzzzz go. -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx \ No newline at end of file +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/cfg_motd.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/witch_and_tankifier.smx \ No newline at end of file diff --git a/cfg/cfgogl/amrv1v1/confogl.cfg b/cfg/cfgogl/amrv1v1/confogl.cfg index 20e065e8e..bdc956e23 100644 --- a/cfg/cfgogl/amrv1v1/confogl.cfg +++ b/cfg/cfgogl/amrv1v1/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "1v1 Acemod RV 1.3" +confogl_addcvar l4d_ready_cfg_name "1v1 Acemod RV 1.3" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/amrv1v1/confogl_plugins.cfg b/cfg/cfgogl/amrv1v1/confogl_plugins.cfg index 9fd700254..bf870c94d 100644 --- a/cfg/cfgogl/amrv1v1/confogl_plugins.cfg +++ b/cfg/cfgogl/amrv1v1/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Ace Shared Plugins //------------------------------------------- @@ -15,9 +26,19 @@ exec cfgogl/acemodrv/shared_plugins.cfg //------------------------------------------- // Ace 1v1 //------------------------------------------- -sm plugins load optional/1v1_skeetstats.smx -sm plugins load optional/1v1.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nobackjumps.smx \ No newline at end of file +sm_plugins_load optional/1v1_skeetstats.smx +sm_plugins_load optional/1v1.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nobackjumps.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/amrv2v2/confogl.cfg b/cfg/cfgogl/amrv2v2/confogl.cfg index 6656d0390..20b954bcf 100644 --- a/cfg/cfgogl/amrv2v2/confogl.cfg +++ b/cfg/cfgogl/amrv2v2/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "2v2 Acemod RV 1.3" +confogl_addcvar l4d_ready_cfg_name "2v2 Acemod RV 1.3" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/amrv2v2/confogl_plugins.cfg b/cfg/cfgogl/amrv2v2/confogl_plugins.cfg index d8b9d53ca..de084f094 100644 --- a/cfg/cfgogl/amrv2v2/confogl_plugins.cfg +++ b/cfg/cfgogl/amrv2v2/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Ace Shared Plugins //------------------------------------------- @@ -15,13 +26,23 @@ exec cfgogl/acemodrv/shared_plugins.cfg //------------------------------------------- // Ace 2v2 //------------------------------------------- -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nosey_parker.smx -sm plugins load optional/l4d2_nobackjumps.smx -sm plugins load optional/autopause.smx \ No newline at end of file +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nosey_parker.smx +sm_plugins_load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/autopause.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/amrv3v3/confogl.cfg b/cfg/cfgogl/amrv3v3/confogl.cfg index 8cfd1b3c7..6f13f9954 100644 --- a/cfg/cfgogl/amrv3v3/confogl.cfg +++ b/cfg/cfgogl/amrv3v3/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "3v3 Acemod RV 1.3" +confogl_addcvar l4d_ready_cfg_name "3v3 Acemod RV 1.3" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/amrv3v3/confogl_plugins.cfg b/cfg/cfgogl/amrv3v3/confogl_plugins.cfg index 09e71eeeb..71cbbcf82 100644 --- a/cfg/cfgogl/amrv3v3/confogl_plugins.cfg +++ b/cfg/cfgogl/amrv3v3/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Ace Shared Plugins //------------------------------------------- @@ -15,12 +26,22 @@ exec cfgogl/acemodrv/shared_plugins.cfg //------------------------------------------- // Ace 3v3 //------------------------------------------- -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nosey_parker.smx -sm plugins load optional/autopause.smx \ No newline at end of file +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nosey_parker.smx +sm_plugins_load optional/autopause.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/apex/confogl.cfg b/cfg/cfgogl/apex/confogl.cfg index b3d41fa49..e5ac1efb7 100644 --- a/cfg/cfgogl/apex/confogl.cfg +++ b/cfg/cfgogl/apex/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "Apex v1.1.2" +confogl_addcvar l4d_ready_cfg_name "Apex v1.1.2" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/apex/confogl_off.cfg b/cfg/cfgogl/apex/confogl_off.cfg index a420ebb0a..360ee6aff 100644 --- a/cfg/cfgogl/apex/confogl_off.cfg +++ b/cfg/cfgogl/apex/confogl_off.cfg @@ -7,9 +7,6 @@ // http://github.com/SirPlease/Apex // ======================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -17,4 +14,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins \ No newline at end of file +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/apex/confogl_plugins.cfg b/cfg/cfgogl/apex/confogl_plugins.cfg index 6ea785988..c484ec323 100644 --- a/cfg/cfgogl/apex/confogl_plugins.cfg +++ b/cfg/cfgogl/apex/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/SirPlease/Apex (hopefully I'll get to that repo one day) // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Apex Shared Plugins //------------------------------------------- @@ -15,8 +26,18 @@ exec cfgogl/apex/shared_plugins.cfg //------------------------------------------- // Apex 4v4 //------------------------------------------- -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx -sm plugins load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/apex/shared_cvars.cfg b/cfg/cfgogl/apex/shared_cvars.cfg index 472177a41..920559fee 100644 --- a/cfg/cfgogl/apex/shared_cvars.cfg +++ b/cfg/cfgogl/apex/shared_cvars.cfg @@ -24,8 +24,7 @@ confogl_addcvar versus_marker_num 0 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled 1 - +confogl_addcvar l4d_ready_enabled 1 confogl_addcvar l4d_ready_survivor_freeze 0 confogl_addcvar l4d_ready_delay 3 confogl_addcvar l4d_ready_enable_sound 1 diff --git a/cfg/cfgogl/apex/shared_plugins.cfg b/cfg/cfgogl/apex/shared_plugins.cfg index 9284dfa74..d7274f899 100644 --- a/cfg/cfgogl/apex/shared_plugins.cfg +++ b/cfg/cfgogl/apex/shared_plugins.cfg @@ -7,128 +7,112 @@ // http://github.com/SirPlease/Apex // ======================================================================================= -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx - //---------------------------------- // General Competitive Plugins //---------------------------------- -sm plugins load optional/l4d2_pickup.smx -sm plugins load optional/blockheatseekingchargers.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/ghost_hurt.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_unsilent_jockey.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d_jockey_ledgehang.smx -sm plugins load optional/l4d_no_cans.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx +sm_plugins_load optional/l4d2_pickup.smx +sm_plugins_load optional/blockheatseekingchargers.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/ghost_hurt.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_unsilent_jockey.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d_jockey_ledgehang.smx +sm_plugins_load optional/l4d_no_cans.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx //---------------------- // Equilibrium Plugins //---------------------- -sm plugins load optional/eq_finale_tanks.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/eq_finale_tanks.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d_texture_manager_block.smx //---------------------- // EQ3 / Acemod / ZoneMod / Apex //---------------------- -sm plugins load optional/l4d2_smoker_drag_damage_interval_zone.smx -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_no_m2_pulled_and_hunters.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/boomer_horde_equalizer.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_tank_damage_cvars.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_scoremod.smx -sm plugins load optional/l4d2_fireworks_noise_block.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/nm3_ladder_damage.smx -sm plugins load optional/fix_engine.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/l4d2_melee_shenanigans.smx -sm plugins load optional/specrates.smx -sm plugins load optional/l4d2_byedoor.smx -sm plugins load optional/l4d2_horde.smx -sm plugins load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/l4d2_smoker_drag_damage_interval_zone.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_no_m2_pulled_and_hunters.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/boomer_horde_equalizer.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_tank_damage_cvars.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_scoremod.smx +sm_plugins_load optional/l4d2_fireworks_noise_block.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/nm3_ladder_damage.smx +sm_plugins_load optional/fix_engine.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/l4d2_melee_shenanigans.smx +sm_plugins_load optional/specrates.smx +sm_plugins_load optional/l4d2_byedoor.smx +sm_plugins_load optional/l4d2_horde.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx //---------------------- // Static shotgun spread //---------------------- -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx //--------------------------------------------- // Merged FF Plugins, needs to be loaded here //--------------------------------------------- -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx //--------------------------- // Matchmaking Plugins //--------------------------- -sm plugins load optional/readyup.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/cfg_motd.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/spechud.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/witch_and_tankifier.smx - -// Letzzzz go. -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx \ No newline at end of file +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/cfg_motd.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/witch_and_tankifier.smx \ No newline at end of file diff --git a/cfg/cfgogl/deadman/confogl.cfg b/cfg/cfgogl/deadman/confogl.cfg index 2694a7474..dd1fa5ae2 100644 --- a/cfg/cfgogl/deadman/confogl.cfg +++ b/cfg/cfgogl/deadman/confogl.cfg @@ -27,8 +27,8 @@ confogl_addcvar sv_vote_kick_ban_duration 1 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled "1" -l4d_ready_cfg_name "Deadman 5.0.3" +confogl_addcvar l4d_ready_enabled "1" +confogl_addcvar l4d_ready_cfg_name "Deadman 5.0.3" sm_addreadystring " " sm_lockstrings confogl_addcvar sm_safeitemkill_items 5 diff --git a/cfg/cfgogl/deadman/confogl_off.cfg b/cfg/cfgogl/deadman/confogl_off.cfg index ec1cb219c..06a065673 100644 --- a/cfg/cfgogl/deadman/confogl_off.cfg +++ b/cfg/cfgogl/deadman/confogl_off.cfg @@ -6,9 +6,6 @@ // Version 5.0 // =================================================================================== -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -16,4 +13,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/deadman/confogl_plugins.cfg b/cfg/cfgogl/deadman/confogl_plugins.cfg index da3c43a56..9a547b13b 100644 --- a/cfg/cfgogl/deadman/confogl_plugins.cfg +++ b/cfg/cfgogl/deadman/confogl_plugins.cfg @@ -6,97 +6,98 @@ // Version 5.0 // =================================================================================== -// Sourcemod -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx +// Prepare for Plugin Loading +sm_plugins_load_unlock +sm_plugins_unload_all + +// Load General Fixes +exec generalfixes.cfg // Pro Mod Plugins -sm plugins load optional/1v1_skeetstats.smx -sm plugins load optional/1v1.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/ghost_hurt.smx -sm plugins load optional/infected_flow_warp.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/l4d_ci_ffblock.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d_no_cans.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_tank_rush.smx -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/l4d_texture_manager_block.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/l4d_witch_damage_announce.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_hittable_control.smx -sm plugins load optional/l4d2_ladder_rambos.smx -sm plugins load optional/l4d2_lagcomp_manager.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_melee_spawn_control.smx -sm plugins load optional/l4d2_nobackjumps.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_notankautoaim.smx -sm plugins load optional/l4d2_penalty_bonus.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_scoremod.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/simple_witch_bonus.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/staggersolver.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx -sm plugins load optional/witch_and_tankifier.smx +sm_plugins_load optional/1v1_skeetstats.smx +sm_plugins_load optional/1v1.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/ghost_hurt.smx +sm_plugins_load optional/infected_flow_warp.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/l4d_ci_ffblock.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d_no_cans.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_tank_rush.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/l4d_witch_damage_announce.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/l4d2_lagcomp_manager.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_melee_spawn_control.smx +sm_plugins_load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_notankautoaim.smx +sm_plugins_load optional/l4d2_penalty_bonus.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_scoremod.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/simple_witch_bonus.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/staggersolver.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx +sm_plugins_load optional/witch_and_tankifier.smx // Caster Support -sm plugins load optional/caster_assister.smx -sm plugins load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/caster_system.smx // Static shotgun spread -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx // Confogl -sm plugins load optional/readyup.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/spechud.smx -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx \ No newline at end of file +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/spechud.smx + +// Shared Plugins File +exec sharedplugins.cfg + +// Lock Plugins +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/eq/confogl.cfg b/cfg/cfgogl/eq/confogl.cfg index fa39d0a15..a387ef2e4 100644 --- a/cfg/cfgogl/eq/confogl.cfg +++ b/cfg/cfgogl/eq/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "Equilibrium 3.0c" +confogl_addcvar l4d_ready_cfg_name "Equilibrium 3.0c" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/eq/confogl_off.cfg b/cfg/cfgogl/eq/confogl_off.cfg index 4c82d5ce9..a2d850a1e 100644 --- a/cfg/cfgogl/eq/confogl_off.cfg +++ b/cfg/cfgogl/eq/confogl_off.cfg @@ -6,9 +6,6 @@ // http://github.com/Attano/Equilibrium // ======================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -16,4 +13,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/eq/confogl_plugins.cfg b/cfg/cfgogl/eq/confogl_plugins.cfg index 101cd8e19..5816b0947 100644 --- a/cfg/cfgogl/eq/confogl_plugins.cfg +++ b/cfg/cfgogl/eq/confogl_plugins.cfg @@ -6,6 +6,17 @@ // http://github.com/Attano/Equilibrium // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // EQ Shared Plugins //------------------------------------------- @@ -14,7 +25,17 @@ exec cfgogl/eq/shared_plugins.cfg //------------------------------------------- // EQ 4v4 //------------------------------------------- -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx \ No newline at end of file +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/eq/shared_cvars.cfg b/cfg/cfgogl/eq/shared_cvars.cfg index 87833bb7f..108500fe8 100644 --- a/cfg/cfgogl/eq/shared_cvars.cfg +++ b/cfg/cfgogl/eq/shared_cvars.cfg @@ -23,8 +23,7 @@ confogl_addcvar versus_marker_num 0 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled 1 - +confogl_addcvar l4d_ready_enabled 1 confogl_addcvar l4d_ready_survivor_freeze 0 confogl_addcvar l4d_ready_delay 3 confogl_addcvar l4d_ready_enable_sound 1 diff --git a/cfg/cfgogl/eq/shared_plugins.cfg b/cfg/cfgogl/eq/shared_plugins.cfg index 026a512ec..1789018cc 100644 --- a/cfg/cfgogl/eq/shared_plugins.cfg +++ b/cfg/cfgogl/eq/shared_plugins.cfg @@ -6,129 +6,115 @@ // http://github.com/Attano/Equilibrium // ======================================================================================= -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx - //---------------------------------- // General Competitive Plugins //---------------------------------- -sm plugins load optional/blockheatseekingchargers.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/ghost_hurt.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_nospitterduringtank.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_unsilent_jockey.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d_jockey_ledgehang.smx -sm plugins load optional/l4d_no_cans.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx -sm plugins load optional/l4d_witch_damage_announce.smx +sm_plugins_load optional/blockheatseekingchargers.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/ghost_hurt.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_nospitterduringtank.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_unsilent_jockey.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d_jockey_ledgehang.smx +sm_plugins_load optional/l4d_no_cans.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx +sm_plugins_load optional/l4d_witch_damage_announce.smx //---------------------- // Equilibrium Plugins //---------------------- -sm plugins load optional/eq_finale_tanks.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_jockey_skeet.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_riotcops.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d2_spitblock.smx -sm plugins load optional/l4d2_uniform_spit.smx -sm plugins load optional/l4d_tank_painfade.smx -sm plugins load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/eq_finale_tanks.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_jockey_skeet.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_riotcops.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d2_spitblock.smx +sm_plugins_load optional/l4d2_uniform_spit.smx +sm_plugins_load optional/l4d_tank_painfade.smx +sm_plugins_load optional/l4d_texture_manager_block.smx //---------------------- // EQ3 //---------------------- -sm plugins load optional/l4d2_sniper_precache.smx -sm plugins load optional/l4d2_sniper_bodyshot.smx -sm plugins load optional/l4d2_tank_charger_m2_fix.smx -sm plugins load optional/l4d2_smoker_drag_damage_interval.smx -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_ultra_witch.smx -sm plugins load optional/l4d2_horde_equaliser.smx -sm plugins load optional/l4d2_no_hunter_deadstops.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/boomer_horde_equalizer.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_tank_melee_fury.smx -sm plugins load optional/l4d2_tank_damage_cvars.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_hybrid_scoremod.smx -sm plugins load optional/l4d2_fireworks_noise_block.smx -sm plugins load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/l4d2_sniper_precache.smx +sm_plugins_load optional/l4d2_sniper_bodyshot.smx +sm_plugins_load optional/l4d2_tank_charger_m2_fix.smx +sm_plugins_load optional/l4d2_smoker_drag_damage_interval.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_ultra_witch.smx +sm_plugins_load optional/l4d2_horde_equaliser.smx +sm_plugins_load optional/l4d2_no_hunter_deadstops.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/boomer_horde_equalizer.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_tank_melee_fury.smx +sm_plugins_load optional/l4d2_tank_damage_cvars.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_hybrid_scoremod.smx +sm_plugins_load optional/l4d2_fireworks_noise_block.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx //---------------------- // Static shotgun spread //---------------------- -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx //--------------------------------------------- // Merged FF Plugins, needs to be loaded here //--------------------------------------------- -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx //--------------------------- // Matchmaking Plugins //--------------------------- -sm plugins load optional/readyup.smx -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/spechud.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/witch_and_tankifier.smx -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx \ No newline at end of file +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/witch_and_tankifier.smx \ No newline at end of file diff --git a/cfg/cfgogl/eq1v1/confogl.cfg b/cfg/cfgogl/eq1v1/confogl.cfg index 0c2b00e3a..6f38ba920 100644 --- a/cfg/cfgogl/eq1v1/confogl.cfg +++ b/cfg/cfgogl/eq1v1/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "1v1 EQ 3.0c" +confogl_addcvar l4d_ready_cfg_name "1v1 EQ 3.0c" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/eq1v1/confogl_plugins.cfg b/cfg/cfgogl/eq1v1/confogl_plugins.cfg index eb7aecddb..8597513bc 100644 --- a/cfg/cfgogl/eq1v1/confogl_plugins.cfg +++ b/cfg/cfgogl/eq1v1/confogl_plugins.cfg @@ -6,13 +6,26 @@ // http://github.com/Attano/Equilibrium // ======================================================================================= +// Prepare for Plugin Loading +sm_plugins_load_unlock +sm_plugins_unload_all + +// Load General Fixes +exec generalfixes.cfg + // EQ Shared Plugins exec cfgogl/eq/shared_plugins.cfg // EQ 1v1 -sm plugins load optional/1v1_skeetstats.smx -sm plugins load optional/1v1.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nobackjumps.smx \ No newline at end of file +sm_plugins_load optional/1v1_skeetstats.smx +sm_plugins_load optional/1v1.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nobackjumps.smx + +// Shared Plugins File +exec sharedplugins.cfg + +// Lock Plugins +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/eq2v2/confogl.cfg b/cfg/cfgogl/eq2v2/confogl.cfg index 9d8a9ee50..1ffb9e7ed 100644 --- a/cfg/cfgogl/eq2v2/confogl.cfg +++ b/cfg/cfgogl/eq2v2/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "2v2 EQ 3.0c" +confogl_addcvar l4d_ready_cfg_name "2v2 EQ 3.0c" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/eq2v2/confogl_plugins.cfg b/cfg/cfgogl/eq2v2/confogl_plugins.cfg index aab7e9766..c6ccdcad1 100644 --- a/cfg/cfgogl/eq2v2/confogl_plugins.cfg +++ b/cfg/cfgogl/eq2v2/confogl_plugins.cfg @@ -6,16 +6,29 @@ // http://github.com/Attano/Equilibrium // ======================================================================================= +// Prepare for Plugin Loading +sm_plugins_load_unlock +sm_plugins_unload_all + +// Load General Fixes +exec generalfixes.cfg + // EQ Shared Plugins exec cfgogl/eq/shared_plugins.cfg // EQ 2v2 -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nobackjumps.smx -sm plugins load optional/l4d2_nosey_parker.smx \ No newline at end of file +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/l4d2_nosey_parker.smx + +// Shared Plugins File +exec sharedplugins.cfg + +// Lock Plugins +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/eq3v3/confogl.cfg b/cfg/cfgogl/eq3v3/confogl.cfg index bccac0068..450f19ae3 100644 --- a/cfg/cfgogl/eq3v3/confogl.cfg +++ b/cfg/cfgogl/eq3v3/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "3v3 EQ 3.0c" +confogl_addcvar l4d_ready_cfg_name "3v3 EQ 3.0c" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/eq3v3/confogl_plugins.cfg b/cfg/cfgogl/eq3v3/confogl_plugins.cfg index 13759c422..6bc66e701 100644 --- a/cfg/cfgogl/eq3v3/confogl_plugins.cfg +++ b/cfg/cfgogl/eq3v3/confogl_plugins.cfg @@ -6,16 +6,29 @@ // http://github.com/Attano/Equilibrium // ======================================================================================= +// Prepare for Plugin Loading +sm_plugins_load_unlock +sm_plugins_unload_all + +// Load General Fixes +exec generalfixes.cfg + // EQ Shared Plugins exec cfgogl/eq/shared_plugins.cfg // EQ 3v3 -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nobackjumps.smx -sm plugins load optional/l4d2_nosey_parker.smx \ No newline at end of file +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/l4d2_nosey_parker.smx + +// Shared Plugins File +exec sharedplugins.cfg + +// Lock Plugins +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/neomod/confogl.cfg b/cfg/cfgogl/neomod/confogl.cfg index 53babc5e7..1e8d25f72 100644 --- a/cfg/cfgogl/neomod/confogl.cfg +++ b/cfg/cfgogl/neomod/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "NeoMod Tourney 0.4a" +confogl_addcvar l4d_ready_cfg_name "NeoMod Tourney 0.4a" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/neomod/confogl_off.cfg b/cfg/cfgogl/neomod/confogl_off.cfg index d058bc8b4..a51834d3b 100644 --- a/cfg/cfgogl/neomod/confogl_off.cfg +++ b/cfg/cfgogl/neomod/confogl_off.cfg @@ -7,9 +7,6 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -17,4 +14,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins \ No newline at end of file +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/neomod/confogl_plugins.cfg b/cfg/cfgogl/neomod/confogl_plugins.cfg index 889ec86e9..957ea93e4 100644 --- a/cfg/cfgogl/neomod/confogl_plugins.cfg +++ b/cfg/cfgogl/neomod/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // ZoneMod Shared Plugins //------------------------------------------- @@ -15,9 +26,19 @@ exec cfgogl/neomod/shared_plugins.cfg //------------------------------------------- // ZoneMod 4v4 //------------------------------------------- -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx -sm plugins load optional/l4d2_tongue_timer.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx +sm_plugins_load optional/l4d2_tongue_timer.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/neomod/shared_cvars.cfg b/cfg/cfgogl/neomod/shared_cvars.cfg index 3ccfcac8d..aea9bafca 100644 --- a/cfg/cfgogl/neomod/shared_cvars.cfg +++ b/cfg/cfgogl/neomod/shared_cvars.cfg @@ -24,8 +24,7 @@ confogl_addcvar versus_marker_num 0 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled 1 - +confogl_addcvar l4d_ready_enabled 1 confogl_addcvar l4d_ready_survivor_freeze 0 confogl_addcvar l4d_ready_delay 3 confogl_addcvar l4d_ready_enable_sound 1 diff --git a/cfg/cfgogl/neomod/shared_plugins.cfg b/cfg/cfgogl/neomod/shared_plugins.cfg index 0af6ccc39..bb99902b1 100644 --- a/cfg/cfgogl/neomod/shared_plugins.cfg +++ b/cfg/cfgogl/neomod/shared_plugins.cfg @@ -7,142 +7,124 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx - //---------------------------------- // General Competitive Plugins //---------------------------------- -sm plugins load optional/l4d2_pickup.smx -sm plugins load optional/blockheatseekingchargers.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_nospitterduringtank.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_unsilent_jockey.smx -sm plugins load optional/l4d2_nobackjumps.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d2_horde_equaliser.smx -sm plugins load optional/l4d_jockey_ledgehang.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx +sm_plugins_load optional/l4d2_pickup.smx +sm_plugins_load optional/blockheatseekingchargers.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_nospitterduringtank.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_unsilent_jockey.smx +sm_plugins_load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d2_horde_equaliser.smx +sm_plugins_load optional/l4d_jockey_ledgehang.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx //---------------------- // Equilibrium Plugins //---------------------- -sm plugins load optional/eq_finale_tanks.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d2_spitblock.smx -sm plugins load optional/l4d2_uniform_spit.smx -sm plugins load optional/l4d_tank_painfade.smx -sm plugins load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/eq_finale_tanks.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d2_spitblock.smx +sm_plugins_load optional/l4d2_uniform_spit.smx +sm_plugins_load optional/l4d_tank_painfade.smx +sm_plugins_load optional/l4d_texture_manager_block.smx //---------------------- // EQ3 / Acemod / ZoneMod //---------------------- -sm plugins load optional/l4d2_smoker_drag_damage_interval_zone.smx -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_hunter_no_deadstops.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/boomer_horde_equalizer.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_tank_damage_cvars.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_hybrid_scoremod_zone.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/fix_engine.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/l4d2_melee_shenanigans.smx -sm plugins load optional/specrates.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/l4d2_fix_spawn_order.smx -sm plugins load optional/l4dhots.smx -sm plugins load optional/l4d_tank_rush.smx -sm plugins load optional/l4d2_ladder_rambos.smx -sm plugins load optional/l4d2_reload_fix.smx -sm plugins load optional/noteam_nudging.smx -sm plugins load optional/charger_incap_damage.smx - -sm plugins load optional/l4d2_melee_spawn_control.smx +sm_plugins_load optional/l4d2_smoker_drag_damage_interval_zone.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_hunter_no_deadstops.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/boomer_horde_equalizer.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_tank_damage_cvars.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_hybrid_scoremod_zone.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/fix_engine.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/l4d2_melee_shenanigans.smx +sm_plugins_load optional/specrates.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4d2_fix_spawn_order.smx +sm_plugins_load optional/l4dhots.smx +sm_plugins_load optional/l4d_tank_rush.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/l4d2_reload_fix.smx +sm_plugins_load optional/noteam_nudging.smx +sm_plugins_load optional/charger_incap_damage.smx +sm_plugins_load optional/l4d2_melee_spawn_control.smx //---------------------- // Static shotgun spread //---------------------- -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx //--------------------------------------------- // Merged FF Plugins, needs to be loaded here //--------------------------------------------- -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx //--------------------------- // Matchmaking Plugins //--------------------------- -sm plugins load optional/readyup.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/cfg_motd.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/spechud.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/witch_and_tankifier.smx +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/cfg_motd.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/witch_and_tankifier.smx // Neomod specific stuff sm plugins unload fixes/l4d2_lagcomp_manager.smx -sm plugins load optional/l4d_rock_lagcomp.smx -sm plugins load optional/l4d2_magnum_incap.smx - -// Letzzzz go. -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx - +sm_plugins_load optional/l4d_rock_lagcomp.smx +sm_plugins_load optional/l4d2_magnum_incap.smx \ No newline at end of file diff --git a/cfg/cfgogl/nextmod/confogl_off.cfg b/cfg/cfgogl/nextmod/confogl_off.cfg index fd9a07361..9452b4075 100644 --- a/cfg/cfgogl/nextmod/confogl_off.cfg +++ b/cfg/cfgogl/nextmod/confogl_off.cfg @@ -7,9 +7,6 @@ // http://github.com/spoon-l4d2/nextmod // ======================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -17,4 +14,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins \ No newline at end of file +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/nextmod/confogl_plugins.cfg b/cfg/cfgogl/nextmod/confogl_plugins.cfg index 22b8c2c4d..5cf385e33 100644 --- a/cfg/cfgogl/nextmod/confogl_plugins.cfg +++ b/cfg/cfgogl/nextmod/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/spoon-l4d2/nextmod // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Shared Plugins //------------------------------------------- @@ -15,7 +26,17 @@ exec cfgogl/nextmod/shared_plugins.cfg //------------------------------------------- // NextMod 4v4 //------------------------------------------- -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/l4d_blackandwhite.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/l4d_blackandwhite.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/nextmod/shared_cvars.cfg b/cfg/cfgogl/nextmod/shared_cvars.cfg index 5884c1bda..ec337ecc8 100644 --- a/cfg/cfgogl/nextmod/shared_cvars.cfg +++ b/cfg/cfgogl/nextmod/shared_cvars.cfg @@ -21,8 +21,7 @@ confogl_addcvar vs_max_team_switches 9999 confogl_addcvar versus_marker_num 0 // ReadyUp Cvars -l4d_ready_enabled 1 - +confogl_addcvar l4d_ready_enabled 1 confogl_addcvar l4d_ready_survivor_freeze 0 confogl_addcvar l4d_ready_delay 3 confogl_addcvar l4d_ready_enable_sound 1 diff --git a/cfg/cfgogl/nextmod/shared_plugins.cfg b/cfg/cfgogl/nextmod/shared_plugins.cfg index f3935802b..055fbbb41 100644 --- a/cfg/cfgogl/nextmod/shared_plugins.cfg +++ b/cfg/cfgogl/nextmod/shared_plugins.cfg @@ -1,105 +1,120 @@ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx -sm plugins load optional/l4d2_pickup.smx -sm plugins load optional/blockheatseekingchargers.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/8ball.smx -sm plugins load optional/changelog.smx -sm plugins load optional/current.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/ghost_hurt.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_nospitterduringtank.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_unsilent_jockey.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_jockey_ledgehang.smx -sm plugins load optional/l4d_no_cans.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx -sm plugins load optional/eq_finale_tanks.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d2_spitblock.smx -sm plugins load optional/l4d2_uniform_spit.smx -sm plugins load optional/l4d_tank_painfade.smx -sm plugins load optional/l4d_texture_manager_block.smx -sm plugins load optional/l4d2_smoker_drag_damage_interval_zone.smx -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_horde_equaliser.smx -sm plugins load optional/l4d2_hunter_no_deadstops.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/boomer_horde_equalizer.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_tank_damage_cvars.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_hybrid_scoremod_zone.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/nm3_ladder_damage.smx -sm plugins load optional/fix_engine.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/l4d2_melee_shenanigans.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/l4dhots.smx -sm plugins load optional/MeleeInTheSafeRoom.smx -sm plugins load optional/l4d2_fix_spawn_order.smx -sm plugins load optional/l4d2_sounds_blocker.smx -sm plugins load optional/autopause.smx -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx -sm plugins load optional/readyup.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/l4d2_ladder_rambos.smx -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/cfg_motd.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/spechud.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/witch_and_tankifier.smx -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx \ No newline at end of file +// Why all comments were deleted? + +//---------------------------------- +// General Competitive Plugins +//---------------------------------- +sm_plugins_load optional/l4d2_pickup.smx +sm_plugins_load optional/blockheatseekingchargers.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/8ball.smx +sm_plugins_load optional/changelog.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/ghost_hurt.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_nospitterduringtank.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_unsilent_jockey.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_jockey_ledgehang.smx +sm_plugins_load optional/l4d_no_cans.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx + +//---------------------- +// Equilibrium Plugins +//---------------------- +sm_plugins_load optional/eq_finale_tanks.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d2_spitblock.smx +sm_plugins_load optional/l4d2_uniform_spit.smx +sm_plugins_load optional/l4d_tank_painfade.smx +sm_plugins_load optional/l4d_texture_manager_block.smx + +//---------------------- +// EQ3 / Acemod / ZoneMod +//---------------------- +sm_plugins_load optional/l4d2_smoker_drag_damage_interval_zone.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_horde_equaliser.smx +sm_plugins_load optional/l4d2_hunter_no_deadstops.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/boomer_horde_equalizer.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_tank_damage_cvars.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_hybrid_scoremod_zone.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/nm3_ladder_damage.smx +sm_plugins_load optional/fix_engine.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/l4d2_melee_shenanigans.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4dhots.smx +sm_plugins_load optional/MeleeInTheSafeRoom.smx +sm_plugins_load optional/l4d2_fix_spawn_order.smx +sm_plugins_load optional/l4d2_sounds_blocker.smx +sm_plugins_load optional/autopause.smx + +//---------------------- +// Static shotgun spread +//---------------------- +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx + +//--------------------------------------------- +// Merged FF Plugins, needs to be loaded here +//--------------------------------------------- +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx + +//--------------------------- +// Matchmaking Plugins +//--------------------------- +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/cfg_motd.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/witch_and_tankifier.smx \ No newline at end of file diff --git a/cfg/cfgogl/nextmod1v1/confogl_plugins.cfg b/cfg/cfgogl/nextmod1v1/confogl_plugins.cfg index 82c79fd8b..2bdf1290b 100644 --- a/cfg/cfgogl/nextmod1v1/confogl_plugins.cfg +++ b/cfg/cfgogl/nextmod1v1/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/spoon-l4d2/nextmod // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Shared Plugins //------------------------------------------- @@ -15,8 +26,18 @@ exec cfgogl/nextmod/shared_plugins.cfg //------------------------------------------- // NextMod 1v1 //------------------------------------------- -sm plugins load optional/1v1.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/1v1.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nobackjumps.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/nextmod2v2/confogl_plugins.cfg b/cfg/cfgogl/nextmod2v2/confogl_plugins.cfg index 86396cf14..b0cfc4fa2 100644 --- a/cfg/cfgogl/nextmod2v2/confogl_plugins.cfg +++ b/cfg/cfgogl/nextmod2v2/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/spoon-l4d2/nextmod // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Shared Plugins //------------------------------------------- @@ -15,9 +26,19 @@ exec cfgogl/nextmod/shared_plugins.cfg //------------------------------------------- // NextMod 2v2 //------------------------------------------- -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/l4d_blackandwhite.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/l4d_blackandwhite.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/nextmod3v3/confogl_plugins.cfg b/cfg/cfgogl/nextmod3v3/confogl_plugins.cfg index 86396cf14..b0cfc4fa2 100644 --- a/cfg/cfgogl/nextmod3v3/confogl_plugins.cfg +++ b/cfg/cfgogl/nextmod3v3/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/spoon-l4d2/nextmod // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // Shared Plugins //------------------------------------------- @@ -15,9 +26,19 @@ exec cfgogl/nextmod/shared_plugins.cfg //------------------------------------------- // NextMod 2v2 //------------------------------------------- -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/l4d_blackandwhite.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/l4d_blackandwhite.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/pmelite/confogl.cfg b/cfg/cfgogl/pmelite/confogl.cfg index b2a366cec..fa5028f5b 100644 --- a/cfg/cfgogl/pmelite/confogl.cfg +++ b/cfg/cfgogl/pmelite/confogl.cfg @@ -30,8 +30,8 @@ confogl_addcvar sv_vote_kick_ban_duration 1 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled "1" -l4d_ready_cfg_name "Pro Mod Elite 1.1" +confogl_addcvar l4d_ready_enabled "1" +confogl_addcvar l4d_ready_cfg_name "Pro Mod Elite 1.1" sm_addreadystring " " sm_lockstrings confogl_addcvar sm_safeitemkill_items 5 diff --git a/cfg/cfgogl/pmelite/confogl_off.cfg b/cfg/cfgogl/pmelite/confogl_off.cfg index a1c1f48c0..b1bcfe4a3 100644 --- a/cfg/cfgogl/pmelite/confogl_off.cfg +++ b/cfg/cfgogl/pmelite/confogl_off.cfg @@ -7,9 +7,6 @@ // https://github.com/SirPlease/L4D2-Competitive-Rework // ======================================================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -17,4 +14,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins \ No newline at end of file +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/pmelite/confogl_plugins.cfg b/cfg/cfgogl/pmelite/confogl_plugins.cfg index 7fd350384..f6e3caa20 100644 --- a/cfg/cfgogl/pmelite/confogl_plugins.cfg +++ b/cfg/cfgogl/pmelite/confogl_plugins.cfg @@ -7,118 +7,115 @@ // https://github.com/SirPlease/L4D2-Competitive-Rework // ======================================================================================================================= -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx +// Prepare for Plugin Loading +sm_plugins_load_unlock +sm_plugins_unload_all + +// Load General Fixes +exec generalfixes.cfg // Pro Mod Plugins -sm plugins load optional/l4d2_pickup.smx -sm plugins load optional/autopause.smx -sm plugins load optional/blockheatseekingchargers.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/boomer_horde_equalizer.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/finale_tank_blocker.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/ghost_hurt.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_ci_ffblock.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d_jockey_ledgehang.smx -sm plugins load optional/l4d_no_cans.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/l4d_texture_manager_block.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_nospitterduringtank.smx -sm plugins load optional/l4d2_notankautoaim.smx -sm plugins load optional/l4d2_penalty_bonus.smx -sm plugins load optional/holdout_bonus.smx //needs to be after penalty_bonus -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_scoremod.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_smoker_drag_damage_interval_zone.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/l4d2_spitblock.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/l4d2_uniform_spit.smx -sm plugins load optional/l4d2_unsilent_jockey.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4dhots.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nm3_ladder_damage.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/simple_witch_bonus.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/staggersolver.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx -sm plugins load optional/l4d_witch_damage_announce.smx -sm plugins load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d2_pickup.smx +sm_plugins_load optional/autopause.smx +sm_plugins_load optional/blockheatseekingchargers.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/boomer_horde_equalizer.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/finale_tank_blocker.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/ghost_hurt.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_ci_ffblock.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d_jockey_ledgehang.smx +sm_plugins_load optional/l4d_no_cans.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_nospitterduringtank.smx +sm_plugins_load optional/l4d2_notankautoaim.smx +sm_plugins_load optional/l4d2_penalty_bonus.smx +sm_plugins_load optional/holdout_bonus.smx //needs to be after penalty_bonus +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_scoremod.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_smoker_drag_damage_interval_zone.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/l4d2_spitblock.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/l4d2_uniform_spit.smx +sm_plugins_load optional/l4d2_unsilent_jockey.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4dhots.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nm3_ladder_damage.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/simple_witch_bonus.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/staggersolver.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx +sm_plugins_load optional/l4d_witch_damage_announce.smx +sm_plugins_load optional/l4d2_slowdown_control.smx // Static shotgun spread -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx -sm plugins load optional/l4d2_melee_shenanigans.smx -sm plugins load optional/fix_engine.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_hunter_no_deadstops.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_fireworks_noise_block.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_melee_shenanigans.smx +sm_plugins_load optional/fix_engine.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_hunter_no_deadstops.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_fireworks_noise_block.smx // Confogl -sm plugins load optional/readyup.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/spechud.smx -sm plugins load optional/witch_and_tankifier.smx +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/witch_and_tankifier.smx // Caster Support -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx + +// Shared Plugins File +exec sharedplugins.cfg -// Go Go ! -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx \ No newline at end of file +// Lock Plugins +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zh1v1/confogl.cfg b/cfg/cfgogl/zh1v1/confogl.cfg index 04b70bfd4..2c49e2118 100644 --- a/cfg/cfgogl/zh1v1/confogl.cfg +++ b/cfg/cfgogl/zh1v1/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "1v1 [Zone]Hunters v2.8.9" +confogl_addcvar l4d_ready_cfg_name "1v1 [Zone]Hunters v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zh1v1/confogl_plugins.cfg b/cfg/cfgogl/zh1v1/confogl_plugins.cfg index 35e589c94..76a00c4c1 100644 --- a/cfg/cfgogl/zh1v1/confogl_plugins.cfg +++ b/cfg/cfgogl/zh1v1/confogl_plugins.cfg @@ -6,6 +6,17 @@ // https://github.com/SirPlease/L4D2-Competitive-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // ZoneHunters Shared Plugins //------------------------------------------- @@ -14,9 +25,19 @@ exec cfgogl/zonehunters/shared_plugins.cfg //------------------------------------------- // ZoneHunters 1v1 //------------------------------------------- -sm plugins load optional/1v1_skeetstats.smx -sm plugins load optional/1v1.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nobackjumps.smx \ No newline at end of file +sm_plugins_load optional/1v1_skeetstats.smx +sm_plugins_load optional/1v1.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nobackjumps.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zh2v2/confogl.cfg b/cfg/cfgogl/zh2v2/confogl.cfg index 1eb13bb57..78c75f100 100644 --- a/cfg/cfgogl/zh2v2/confogl.cfg +++ b/cfg/cfgogl/zh2v2/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "2v2 [Zone]Hunters v2.8.9" +confogl_addcvar l4d_ready_cfg_name "2v2 [Zone]Hunters v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zh2v2/confogl_plugins.cfg b/cfg/cfgogl/zh2v2/confogl_plugins.cfg index 976561363..73ce8c124 100644 --- a/cfg/cfgogl/zh2v2/confogl_plugins.cfg +++ b/cfg/cfgogl/zh2v2/confogl_plugins.cfg @@ -6,6 +6,17 @@ // https://github.com/SirPlease/L4D2-Competitive-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // ZoneHunters Shared Plugins //------------------------------------------- @@ -14,13 +25,23 @@ exec cfgogl/zonehunters/shared_plugins.cfg //------------------------------------------- // ZoneHunters 2v2 //------------------------------------------- -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nosey_parker.smx -sm plugins load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nosey_parker.smx +sm_plugins_load optional/l4d2_nobackjumps.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zh3v3/confogl.cfg b/cfg/cfgogl/zh3v3/confogl.cfg index ce991d660..6a09f6c40 100644 --- a/cfg/cfgogl/zh3v3/confogl.cfg +++ b/cfg/cfgogl/zh3v3/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "3v3 [Zone]Hunters v2.8.9" +confogl_addcvar l4d_ready_cfg_name "3v3 [Zone]Hunters v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zh3v3/confogl_plugins.cfg b/cfg/cfgogl/zh3v3/confogl_plugins.cfg index 976561363..73ce8c124 100644 --- a/cfg/cfgogl/zh3v3/confogl_plugins.cfg +++ b/cfg/cfgogl/zh3v3/confogl_plugins.cfg @@ -6,6 +6,17 @@ // https://github.com/SirPlease/L4D2-Competitive-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // ZoneHunters Shared Plugins //------------------------------------------- @@ -14,13 +25,23 @@ exec cfgogl/zonehunters/shared_plugins.cfg //------------------------------------------- // ZoneHunters 2v2 //------------------------------------------- -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nosey_parker.smx -sm plugins load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nosey_parker.smx +sm_plugins_load optional/l4d2_nobackjumps.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zm1v1/confogl.cfg b/cfg/cfgogl/zm1v1/confogl.cfg index 4114fc93a..15cf1050f 100644 --- a/cfg/cfgogl/zm1v1/confogl.cfg +++ b/cfg/cfgogl/zm1v1/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "1v1 Zonemod v2.8.9" +confogl_addcvar l4d_ready_cfg_name "1v1 Zonemod v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zm1v1/confogl_plugins.cfg b/cfg/cfgogl/zm1v1/confogl_plugins.cfg index e3cfd20ed..8d34535a0 100644 --- a/cfg/cfgogl/zm1v1/confogl_plugins.cfg +++ b/cfg/cfgogl/zm1v1/confogl_plugins.cfg @@ -7,12 +7,25 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +// Prepare for Plugin Loading +sm_plugins_load_unlock +sm_plugins_unload_all + +// Load General Fixes +exec generalfixes.cfg + // ZoneMod Shared Plugins exec cfgogl/zonemod/shared_plugins.cfg // ZoneMod 1v1 -sm plugins load optional/1v1_skeetstats.smx -sm plugins load optional/1v1.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx \ No newline at end of file +sm_plugins_load optional/1v1_skeetstats.smx +sm_plugins_load optional/1v1.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx + +// Shared Plugins File +exec sharedplugins.cfg + +// Lock Plugins +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zm2v2/confogl.cfg b/cfg/cfgogl/zm2v2/confogl.cfg index 3878685b7..93edf57f4 100644 --- a/cfg/cfgogl/zm2v2/confogl.cfg +++ b/cfg/cfgogl/zm2v2/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "2v2 Zonemod v2.8.9" +confogl_addcvar l4d_ready_cfg_name "2v2 Zonemod v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zm2v2/confogl_plugins.cfg b/cfg/cfgogl/zm2v2/confogl_plugins.cfg index eb41bab11..eb84f03a4 100644 --- a/cfg/cfgogl/zm2v2/confogl_plugins.cfg +++ b/cfg/cfgogl/zm2v2/confogl_plugins.cfg @@ -7,16 +7,29 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +// Prepare for Plugin Loading +sm_plugins_load_unlock +sm_plugins_unload_all + +// Load General Fixes +exec generalfixes.cfg + // ZoneMod Shared Plugins exec cfgogl/zonemod/shared_plugins.cfg // ZoneMod 2v2 -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nosey_parker.smx -sm plugins load optional/autopause.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nosey_parker.smx +sm_plugins_load optional/autopause.smx + +// Shared Plugins File +exec sharedplugins.cfg + +// Lock Plugins +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zm3v3/confogl.cfg b/cfg/cfgogl/zm3v3/confogl.cfg index 7e8ef1563..0aba13573 100644 --- a/cfg/cfgogl/zm3v3/confogl.cfg +++ b/cfg/cfgogl/zm3v3/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "3v3 Zonemod v2.8.9" +confogl_addcvar l4d_ready_cfg_name "3v3 Zonemod v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zm3v3/confogl_plugins.cfg b/cfg/cfgogl/zm3v3/confogl_plugins.cfg index ecbe0922d..c66f5858e 100644 --- a/cfg/cfgogl/zm3v3/confogl_plugins.cfg +++ b/cfg/cfgogl/zm3v3/confogl_plugins.cfg @@ -7,17 +7,30 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +// Prepare for Plugin Loading +sm_plugins_load_unlock +sm_plugins_unload_all + +// Load General Fixes +exec generalfixes.cfg + // ZoneMod Shared Plugins exec cfgogl/zonemod/shared_plugins.cfg // ZoneMod 3v3 -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/aitankgank.smx -sm plugins load optional/l4d2_character_fix.smx -sm plugins load optional/l4d2_director_commonlimit_block.smx -sm plugins load optional/l4d_mapbased_cvars.smx -sm plugins load optional/l4d2_nosey_parker.smx -sm plugins load optional/autopause.smx -sm plugins load optional/l4d2_tongue_timer.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/aitankgank.smx +sm_plugins_load optional/l4d2_character_fix.smx +sm_plugins_load optional/l4d2_director_commonlimit_block.smx +sm_plugins_load optional/l4d_mapbased_cvars.smx +sm_plugins_load optional/l4d2_nosey_parker.smx +sm_plugins_load optional/autopause.smx +sm_plugins_load optional/l4d2_tongue_timer.smx + +// Shared Plugins File +exec sharedplugins.cfg + +// Lock Plugins +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zonehunters/confogl.cfg b/cfg/cfgogl/zonehunters/confogl.cfg index 6196252a4..5b8c0f947 100644 --- a/cfg/cfgogl/zonehunters/confogl.cfg +++ b/cfg/cfgogl/zonehunters/confogl.cfg @@ -7,7 +7,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "[Zone]Hunters v2.8.9" +confogl_addcvar l4d_ready_cfg_name "[Zone]Hunters v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zonehunters/confogl_off.cfg b/cfg/cfgogl/zonehunters/confogl_off.cfg index 1e61a90c9..ecdeca4bc 100644 --- a/cfg/cfgogl/zonehunters/confogl_off.cfg +++ b/cfg/cfgogl/zonehunters/confogl_off.cfg @@ -6,9 +6,6 @@ // https://github.com/SirPlease/L4D2-Competitive-Rework // ======================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -16,4 +13,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins \ No newline at end of file +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/zonehunters/confogl_plugins.cfg b/cfg/cfgogl/zonehunters/confogl_plugins.cfg index d01957ff2..2b76f2a77 100644 --- a/cfg/cfgogl/zonehunters/confogl_plugins.cfg +++ b/cfg/cfgogl/zonehunters/confogl_plugins.cfg @@ -6,6 +6,17 @@ // https://github.com/SirPlease/L4D2-Competitive-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // ZoneHunters Shared Plugins //------------------------------------------- @@ -14,8 +25,18 @@ exec cfgogl/zonehunters/shared_plugins.cfg //------------------------------------------- // ZoneHunters 4v4 //------------------------------------------- -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zonehunters/shared_cvars.cfg b/cfg/cfgogl/zonehunters/shared_cvars.cfg index 74cfcd10c..652401a49 100644 --- a/cfg/cfgogl/zonehunters/shared_cvars.cfg +++ b/cfg/cfgogl/zonehunters/shared_cvars.cfg @@ -23,8 +23,7 @@ confogl_addcvar versus_marker_num 0 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled 1 - +confogl_addcvar l4d_ready_enabled 1 confogl_addcvar l4d_ready_survivor_freeze 0 confogl_addcvar l4d_ready_delay 3 confogl_addcvar l4d_ready_enable_sound 1 diff --git a/cfg/cfgogl/zonehunters/shared_plugins.cfg b/cfg/cfgogl/zonehunters/shared_plugins.cfg index 1b99f490b..5569bc294 100644 --- a/cfg/cfgogl/zonehunters/shared_plugins.cfg +++ b/cfg/cfgogl/zonehunters/shared_plugins.cfg @@ -6,132 +6,116 @@ // https://github.com/SirPlease/L4D2-Competitive-Rework // ======================================================================================= -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx - //---------------------------------- // General Competitive Plugins //---------------------------------- -sm plugins load optional/l4d2_pickup.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx +sm_plugins_load optional/l4d2_pickup.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx //---------------------- // Equilibrium Plugins //---------------------- -sm plugins load optional/eq_finale_tanks.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d_tank_painfade.smx -sm plugins load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/eq_finale_tanks.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d_tank_painfade.smx +sm_plugins_load optional/l4d_texture_manager_block.smx //---------------------- // EQ3 / Acemod / ZoneMod //---------------------- -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_hunter_no_deadstops.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_tank_damage_cvars.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_hybrid_scoremod_zone.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/fix_engine.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/l4d2_melee_shenanigans.smx -sm plugins load optional/specrates.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/l4dhots.smx -sm plugins load optional/l4d2_ladder_rambos.smx -sm plugins load optional/l4d_tank_rush.smx -sm plugins load optional/noteam_nudging.smx -sm plugins load optional/l4d2_tank_horde_monitor.smx -sm plugins load optional/staggersolver.smx -sm plugins load optional/l4d_common_ragdolls_be_gone.smx -sm plugins load optional/l4d2_tankrage.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_hunter_no_deadstops.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_tank_damage_cvars.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_hybrid_scoremod_zone.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/fix_engine.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/l4d2_melee_shenanigans.smx +sm_plugins_load optional/specrates.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4dhots.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/l4d_tank_rush.smx +sm_plugins_load optional/noteam_nudging.smx +sm_plugins_load optional/l4d2_tank_horde_monitor.smx +sm_plugins_load optional/staggersolver.smx +sm_plugins_load optional/l4d_common_ragdolls_be_gone.smx +sm_plugins_load optional/l4d2_tankrage.smx //---------------------- // ZoneHunters //---------------------- -sm plugins load optional/l4d2_sniper_precache.smx -sm plugins load optional/l4d2_sniper_bodyshot.smx -sm plugins load optional/weapon_loadout_vote.smx +sm_plugins_load optional/l4d2_sniper_precache.smx +sm_plugins_load optional/l4d2_sniper_bodyshot.smx +sm_plugins_load optional/weapon_loadout_vote.smx //---------------------- // Static shotgun spread //---------------------- -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx //--------------------------------------------- // Merged FF Plugins, needs to be loaded here //--------------------------------------------- -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx //--------------------------- // Matchmaking Plugins //--------------------------- -sm plugins load optional/readyup.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/cfg_motd.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/spechud.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/witch_and_tankifier.smx - -// Letzzzz go. -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/cfg_motd.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/witch_and_tankifier.smx \ No newline at end of file diff --git a/cfg/cfgogl/zonemod/confogl.cfg b/cfg/cfgogl/zonemod/confogl.cfg index 7b4f2edb1..9102cb313 100644 --- a/cfg/cfgogl/zonemod/confogl.cfg +++ b/cfg/cfgogl/zonemod/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "ZoneMod v2.8.9" +confogl_addcvar l4d_ready_cfg_name "ZoneMod v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zonemod/confogl_off.cfg b/cfg/cfgogl/zonemod/confogl_off.cfg index fda0a2373..6b1da93b6 100644 --- a/cfg/cfgogl/zonemod/confogl_off.cfg +++ b/cfg/cfgogl/zonemod/confogl_off.cfg @@ -7,9 +7,6 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -17,4 +14,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins \ No newline at end of file +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/zonemod/confogl_plugins.cfg b/cfg/cfgogl/zonemod/confogl_plugins.cfg index f00755096..16350a5a0 100644 --- a/cfg/cfgogl/zonemod/confogl_plugins.cfg +++ b/cfg/cfgogl/zonemod/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // ZoneMod Shared Plugins //------------------------------------------- @@ -15,9 +26,19 @@ exec cfgogl/zonemod/shared_plugins.cfg //------------------------------------------- // ZoneMod 4v4 //------------------------------------------- -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx -sm plugins load optional/l4d2_tongue_timer.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx +sm_plugins_load optional/l4d2_tongue_timer.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zonemod/shared_cvars.cfg b/cfg/cfgogl/zonemod/shared_cvars.cfg index 079c40e95..219bb9e6f 100644 --- a/cfg/cfgogl/zonemod/shared_cvars.cfg +++ b/cfg/cfgogl/zonemod/shared_cvars.cfg @@ -24,8 +24,7 @@ confogl_addcvar versus_marker_num 0 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled 1 - +confogl_addcvar l4d_ready_enabled 1 confogl_addcvar l4d_ready_survivor_freeze 0 confogl_addcvar l4d_ready_delay 3 confogl_addcvar l4d_ready_enable_sound 1 diff --git a/cfg/cfgogl/zonemod/shared_plugins.cfg b/cfg/cfgogl/zonemod/shared_plugins.cfg index 66c9ad9a2..e2564a9ce 100644 --- a/cfg/cfgogl/zonemod/shared_plugins.cfg +++ b/cfg/cfgogl/zonemod/shared_plugins.cfg @@ -7,137 +7,121 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx - //---------------------------------- // General Competitive Plugins //---------------------------------- -sm plugins load optional/l4d2_pickup.smx -sm plugins load optional/blockheatseekingchargers.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_nospitterduringtank.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_unsilent_jockey.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d_jockey_ledgehang.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx +sm_plugins_load optional/l4d2_pickup.smx +sm_plugins_load optional/blockheatseekingchargers.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_nospitterduringtank.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_unsilent_jockey.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d_jockey_ledgehang.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx //---------------------- // Equilibrium Plugins //---------------------- -sm plugins load optional/eq_finale_tanks.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d2_spitblock.smx -sm plugins load optional/l4d2_uniform_spit.smx -sm plugins load optional/l4d_tank_painfade.smx -sm plugins load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/eq_finale_tanks.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d2_spitblock.smx +sm_plugins_load optional/l4d2_uniform_spit.smx +sm_plugins_load optional/l4d_tank_painfade.smx +sm_plugins_load optional/l4d_texture_manager_block.smx //---------------------- // EQ3 / Acemod / ZoneMod //---------------------- -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_hunter_no_deadstops.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/boomer_horde_equalizer_refactored.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_tank_damage_cvars.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_hybrid_scoremod_zone.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/fix_engine.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/l4d2_melee_shenanigans.smx -sm plugins load optional/specrates.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/l4d2_fix_spawn_order.smx -sm plugins load optional/l4dhots.smx -sm plugins load optional/l4d_tank_rush.smx -sm plugins load optional/l4d2_ladder_rambos.smx -sm plugins load optional/noteam_nudging.smx -sm plugins load optional/l4d2_tank_horde_monitor.smx -sm plugins load optional/charger_incap_damage.smx -sm plugins load optional/l4d2_steady_boost.smx -sm plugins load optional/staggersolver.smx -sm plugins load optional/l4d2_nobackjumps.smx -sm plugins load optional/l4d_common_ragdolls_be_gone.smx -sm plugins load optional/l4d2_tankrage.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_hunter_no_deadstops.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/boomer_horde_equalizer_refactored.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_tank_damage_cvars.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_hybrid_scoremod_zone.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/fix_engine.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/l4d2_melee_shenanigans.smx +sm_plugins_load optional/specrates.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/l4d2_fix_spawn_order.smx +sm_plugins_load optional/l4dhots.smx +sm_plugins_load optional/l4d_tank_rush.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/noteam_nudging.smx +sm_plugins_load optional/l4d2_tank_horde_monitor.smx +sm_plugins_load optional/charger_incap_damage.smx +sm_plugins_load optional/l4d2_steady_boost.smx +sm_plugins_load optional/staggersolver.smx +sm_plugins_load optional/l4d2_nobackjumps.smx +sm_plugins_load optional/l4d_common_ragdolls_be_gone.smx +sm_plugins_load optional/l4d2_tankrage.smx //---------------------- // Static shotgun spread //---------------------- -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx //--------------------------------------------- // Merged FF Plugins, needs to be loaded here //--------------------------------------------- -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx //--------------------------- // Matchmaking Plugins //--------------------------- -sm plugins load optional/readyup.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/cfg_motd.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/spechud.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/witch_and_tankifier.smx -sm plugins load optional/l4d2_magnum_incap.smx - -// Letzzzz go. -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx \ No newline at end of file +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/cfg_motd.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/witch_and_tankifier.smx +sm_plugins_load optional/l4d2_magnum_incap.smx \ No newline at end of file diff --git a/cfg/cfgogl/zoneretro/confogl.cfg b/cfg/cfgogl/zoneretro/confogl.cfg index 3add2de2d..732007c54 100644 --- a/cfg/cfgogl/zoneretro/confogl.cfg +++ b/cfg/cfgogl/zoneretro/confogl.cfg @@ -8,7 +8,7 @@ // ======================================================================================= // ReadyUp Cvars -l4d_ready_cfg_name "ZoneMod Retro v2.8.9" +confogl_addcvar l4d_ready_cfg_name "ZoneMod Retro v2.8.9" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zoneretro/confogl_off.cfg b/cfg/cfgogl/zoneretro/confogl_off.cfg index b1e9ab008..a6bdd612d 100644 --- a/cfg/cfgogl/zoneretro/confogl_off.cfg +++ b/cfg/cfgogl/zoneretro/confogl_off.cfg @@ -7,9 +7,6 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= -// Disable ReadyUp -l4d_ready_enabled 0 - // Reset Default Common Limit, Static Spawns, and String Count reset_static_maps sm_resetstringcount @@ -17,4 +14,6 @@ sm_resetstringcount // Unlock Plugins and reload defaults confogl_resetclientcvars confogl_resetcvars -pred_unload_plugins \ No newline at end of file +sm_plugins_load_unlock +sm_plugins_unload_all +sm_plugins_refresh \ No newline at end of file diff --git a/cfg/cfgogl/zoneretro/confogl_plugins.cfg b/cfg/cfgogl/zoneretro/confogl_plugins.cfg index 0ce66eba6..6edce8685 100644 --- a/cfg/cfgogl/zoneretro/confogl_plugins.cfg +++ b/cfg/cfgogl/zoneretro/confogl_plugins.cfg @@ -7,6 +7,17 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= +//------------------------------------------- +// Prepare for Plugin Loading +//------------------------------------------- +sm_plugins_load_unlock +sm_plugins_unload_all + +//------------------------------------------- +// Load General Fixes +//------------------------------------------- +exec generalfixes.cfg + //------------------------------------------- // ZoneMod Retro Shared Plugins //------------------------------------------- @@ -15,9 +26,19 @@ exec cfgogl/zoneretro/shared_plugins.cfg //------------------------------------------- // ZoneMod Retro 4v4 //------------------------------------------- -sm plugins load optional/survivor_mvp.smx -sm plugins load optional/l4d2_antibaiter.smx -sm plugins load optional/l4d2_playstats.smx -sm plugins load optional/l4d2_skill_detect.smx -sm plugins load optional/autopause.smx -sm plugins load optional/l4d2_tongue_timer.smx +sm_plugins_load optional/survivor_mvp.smx +sm_plugins_load optional/l4d2_antibaiter.smx +sm_plugins_load optional/l4d2_playstats.smx +sm_plugins_load optional/l4d2_skill_detect.smx +sm_plugins_load optional/autopause.smx +sm_plugins_load optional/l4d2_tongue_timer.smx + +//------------------------------------------- +// Shared Plugins File +//------------------------------------------- +exec sharedplugins.cfg + +//------------------------------------------- +// Lock Plugins +//------------------------------------------- +sm_plugins_load_lock \ No newline at end of file diff --git a/cfg/cfgogl/zoneretro/shared_cvars.cfg b/cfg/cfgogl/zoneretro/shared_cvars.cfg index f5d4836d1..08451ff88 100644 --- a/cfg/cfgogl/zoneretro/shared_cvars.cfg +++ b/cfg/cfgogl/zoneretro/shared_cvars.cfg @@ -24,8 +24,7 @@ confogl_addcvar versus_marker_num 0 exec confogl_rates.cfg // ReadyUp Cvars -l4d_ready_enabled 1 - +confogl_addcvar l4d_ready_enabled 1 confogl_addcvar l4d_ready_survivor_freeze 0 confogl_addcvar l4d_ready_delay 3 confogl_addcvar l4d_ready_enable_sound 1 diff --git a/cfg/cfgogl/zoneretro/shared_plugins.cfg b/cfg/cfgogl/zoneretro/shared_plugins.cfg index 4437d4b1a..b7e8971aa 100644 --- a/cfg/cfgogl/zoneretro/shared_plugins.cfg +++ b/cfg/cfgogl/zoneretro/shared_plugins.cfg @@ -7,127 +7,111 @@ // http://github.com/SirPlease/L4D2-Comp-Rework // ======================================================================================= -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -sm plugins load basebans.smx -sm plugins load basecommands.smx -sm plugins load basecomm.smx -sm plugins load admin-flatfile.smx -sm plugins load adminhelp.smx -sm plugins load adminmenu.smx -sm plugins load funcommands.smx -sm plugins load playercommands.smx - //---------------------------------- // General Competitive Plugins //---------------------------------- -sm plugins load optional/l4d2_pickup.smx -sm plugins load optional/blocktrolls.smx -sm plugins load optional/bossspawningfix.smx -sm plugins load optional/botpopstop.smx -sm plugins load optional/coinflip.smx -sm plugins load optional/current.smx -sm plugins load optional/finalefix.smx -sm plugins load optional/l4d2_ghost_warp.smx -sm plugins load optional/l4d2_blind_infected.smx -sm plugins load optional/l4d2_nobhaps.smx -sm plugins load optional/l4d2_saferoom_detect.smx -sm plugins load optional/l4d2_saferoom_item_remove.smx -sm plugins load optional/l4d2_setscores.smx -sm plugins load optional/l4d2_si_ffblock.smx -sm plugins load optional/l4d2_weaponrules.smx -sm plugins load optional/l4d_bash_kills.smx -sm plugins load optional/l4d_equalise_alarm_cars.smx -sm plugins load optional/l4d_pounceprotect.smx -sm plugins load optional/l4d_tank_damage_announce.smx -sm plugins load optional/l4d_thirdpersonshoulderblock.smx -sm plugins load optional/l4d_weapon_limits.smx -sm plugins load optional/lerpmonitor.smx -sm plugins load optional/nosaferoomkits.smx -sm plugins load optional/pill_passer.smx -sm plugins load optional/ratemonitor.smx -sm plugins load optional/rock_stumble_block.smx -sm plugins load optional/si_fire_immunity.smx -sm plugins load optional/smart_ai_rock.smx -sm plugins load optional/starting_items.smx -sm plugins load optional/teamflip.smx -sm plugins load optional/temphealthfix.smx +sm_plugins_load optional/l4d2_pickup.smx +sm_plugins_load optional/blocktrolls.smx +sm_plugins_load optional/bossspawningfix.smx +sm_plugins_load optional/botpopstop.smx +sm_plugins_load optional/coinflip.smx +sm_plugins_load optional/current.smx +sm_plugins_load optional/finalefix.smx +sm_plugins_load optional/l4d2_ghost_warp.smx +sm_plugins_load optional/l4d2_blind_infected.smx +sm_plugins_load optional/l4d2_nobhaps.smx +sm_plugins_load optional/l4d2_saferoom_detect.smx +sm_plugins_load optional/l4d2_saferoom_item_remove.smx +sm_plugins_load optional/l4d2_setscores.smx +sm_plugins_load optional/l4d2_si_ffblock.smx +sm_plugins_load optional/l4d2_weaponrules.smx +sm_plugins_load optional/l4d_bash_kills.smx +sm_plugins_load optional/l4d_equalise_alarm_cars.smx +sm_plugins_load optional/l4d_pounceprotect.smx +sm_plugins_load optional/l4d_tank_damage_announce.smx +sm_plugins_load optional/l4d_thirdpersonshoulderblock.smx +sm_plugins_load optional/l4d_weapon_limits.smx +sm_plugins_load optional/lerpmonitor.smx +sm_plugins_load optional/nosaferoomkits.smx +sm_plugins_load optional/pill_passer.smx +sm_plugins_load optional/ratemonitor.smx +sm_plugins_load optional/rock_stumble_block.smx +sm_plugins_load optional/si_fire_immunity.smx +sm_plugins_load optional/smart_ai_rock.smx +sm_plugins_load optional/starting_items.smx +sm_plugins_load optional/teamflip.smx +sm_plugins_load optional/temphealthfix.smx //---------------------- // Equilibrium Plugins //---------------------- -sm plugins load optional/eq_finale_tanks.smx -sm plugins load optional/l4d2_drop_secondary.smx -sm plugins load optional/l4d2_m2_control_eq.smx -sm plugins load optional/l4d2_nosecondchances.smx -sm plugins load optional/l4d2_si_staggers.smx -sm plugins load optional/l4d2_slowdown_control.smx -sm plugins load optional/l4d_tank_painfade.smx -sm plugins load optional/l4d_texture_manager_block.smx +sm_plugins_load optional/eq_finale_tanks.smx +sm_plugins_load optional/l4d2_drop_secondary.smx +sm_plugins_load optional/l4d2_m2_control_eq.smx +sm_plugins_load optional/l4d2_nosecondchances.smx +sm_plugins_load optional/l4d2_si_staggers.smx +sm_plugins_load optional/l4d2_slowdown_control.smx +sm_plugins_load optional/l4d_tank_painfade.smx +sm_plugins_load optional/l4d_texture_manager_block.smx //---------------------- // EQ3 / Acemod / ZoneMod //---------------------- -sm plugins load optional/l4d_tankpunchstuckfix.smx -sm plugins load optional/despawn_health.smx -sm plugins load optional/checkpoint-rage-control.smx -sm plugins load optional/l4d2_profitless_ai_tank.smx -sm plugins load optional/l4d2_hunter_no_deadstops.smx -sm plugins load optional/l4d2_tank_attack_control.smx -sm plugins load optional/l4d2_tank_announce.smx -sm plugins load optional/boomer_horde_equalizer.smx -sm plugins load optional/l4d2_bw_rock_hit.smx -sm plugins load optional/l4d2_tank_damage_cvars.smx -sm plugins load optional/l4d2_getup_slide_fix.smx -sm plugins load optional/l4d2_hybrid_scoremod_zone.smx -sm plugins load optional/l4d2_uncommon_blocker.smx -sm plugins load optional/fix_engine.smx -sm plugins load optional/l4d2_collision_adjustments.smx -sm plugins load optional/l4d2_stats.smx -sm plugins load optional/l4d2_melee_shenanigans.smx -sm plugins load optional/specrates.smx -sm plugins load optional/l4d2_fix_spawn_order.smx -sm plugins load optional/l4dhots.smx -sm plugins load optional/l4d_tank_rush.smx -sm plugins load optional/l4d2_ladder_rambos.smx -sm plugins load optional/l4d2_dominatorscontrol.smx -sm plugins load optional/noteam_nudging.smx -sm plugins load optional/l4d2_tank_horde_monitor.smx -sm plugins load optional/staggersolver.smx -sm plugins load optional/l4d_common_ragdolls_be_gone.smx -sm plugins load optional/l4d2_tankrage.smx +sm_plugins_load optional/l4d_tankpunchstuckfix.smx +sm_plugins_load optional/despawn_health.smx +sm_plugins_load optional/checkpoint-rage-control.smx +sm_plugins_load optional/l4d2_profitless_ai_tank.smx +sm_plugins_load optional/l4d2_hunter_no_deadstops.smx +sm_plugins_load optional/l4d2_tank_attack_control.smx +sm_plugins_load optional/l4d2_tank_announce.smx +sm_plugins_load optional/boomer_horde_equalizer.smx +sm_plugins_load optional/l4d2_bw_rock_hit.smx +sm_plugins_load optional/l4d2_tank_damage_cvars.smx +sm_plugins_load optional/l4d2_getup_slide_fix.smx +sm_plugins_load optional/l4d2_hybrid_scoremod_zone.smx +sm_plugins_load optional/l4d2_uncommon_blocker.smx +sm_plugins_load optional/fix_engine.smx +sm_plugins_load optional/l4d2_collision_adjustments.smx +sm_plugins_load optional/l4d2_stats.smx +sm_plugins_load optional/l4d2_melee_shenanigans.smx +sm_plugins_load optional/specrates.smx +sm_plugins_load optional/l4d2_fix_spawn_order.smx +sm_plugins_load optional/l4dhots.smx +sm_plugins_load optional/l4d_tank_rush.smx +sm_plugins_load optional/l4d2_ladder_rambos.smx +sm_plugins_load optional/l4d2_dominatorscontrol.smx +sm_plugins_load optional/noteam_nudging.smx +sm_plugins_load optional/l4d2_tank_horde_monitor.smx +sm_plugins_load optional/staggersolver.smx +sm_plugins_load optional/l4d_common_ragdolls_be_gone.smx +sm_plugins_load optional/l4d2_tankrage.smx //---------------------- // Static shotgun spread //---------------------- -sm plugins load optional/l4d2_weapon_attributes.smx -sm plugins load optional/l4d2_static_shotgun_spread.smx +sm_plugins_load optional/l4d2_weapon_attributes.smx +sm_plugins_load optional/l4d2_static_shotgun_spread.smx //--------------------------------------------- // Merged FF Plugins, needs to be loaded here //--------------------------------------------- -sm plugins load optional/l4d2_godframes_control_merge.smx -sm plugins load optional/l4d2_getup_fixes.smx -sm plugins load optional/l4d2_hittable_control.smx +sm_plugins_load optional/l4d2_godframes_control_merge.smx +sm_plugins_load optional/l4d2_getup_fixes.smx +sm_plugins_load optional/l4d2_hittable_control.smx //--------------------------- // Matchmaking Plugins //--------------------------- -sm plugins load optional/readyup.smx -sm plugins load optional/si_class_announce.smx -sm plugins load optional/l4d_tank_control_eq.smx -sm plugins load optional/cfg_motd.smx -sm plugins load optional/l4d_boss_percent.smx -sm plugins load optional/l4d_boss_vote.smx -sm plugins load optional/caster_system.smx -sm plugins load optional/caster_assister.smx -sm plugins load optional/pause.smx -sm plugins load optional/panel_text.smx -sm plugins load optional/spechud.smx -sm plugins load optional/slots_vote.smx -sm plugins load optional/witch_and_tankifier.smx - -// Letzzzz go. -sm plugins load confoglcompmod.smx -sm plugins load match_vote.smx \ No newline at end of file +sm_plugins_load optional/readyup.smx +sm_plugins_load optional/si_class_announce.smx +sm_plugins_load optional/l4d_tank_control_eq.smx +sm_plugins_load optional/cfg_motd.smx +sm_plugins_load optional/l4d_boss_percent.smx +sm_plugins_load optional/l4d_boss_vote.smx +sm_plugins_load optional/caster_system.smx +sm_plugins_load optional/caster_assister.smx +sm_plugins_load optional/pause.smx +sm_plugins_load optional/panel_text.smx +sm_plugins_load optional/spechud.smx +sm_plugins_load optional/slots_vote.smx +sm_plugins_load optional/witch_and_tankifier.smx \ No newline at end of file diff --git a/cfg/generalfixes.cfg b/cfg/generalfixes.cfg index 3eed43b02..dd752d642 100644 --- a/cfg/generalfixes.cfg +++ b/cfg/generalfixes.cfg @@ -1,8 +1,3 @@ -// Requirements -sm plugins load left4dhooks.smx -sm plugins load optional/l4d2lib.smx -sm plugins load optional/predictable_unloader.smx - // General Fixes. sm plugins load fixes/bequiet.smx sm plugins load fixes/l4d_skip_intro.smx @@ -29,7 +24,6 @@ sm plugins load fixes/l4d2_ai_damagefix.smx sm plugins load fixes/l4d2_ladderblock.smx sm plugins load fixes/l4d_fix_deathfall_cam.smx sm plugins load optional/nodeathcamskip.smx -sm plugins load l4d_pause_message.smx sm plugins load fixes/l4d2_boomer_shenanigans.smx sm plugins load fixes/sv_consistency_fix.smx sm plugins load fixes/l4d2_hltv_crash_fix.smx @@ -65,4 +59,4 @@ sm plugins load fixes/l4d_fix_common_shove.smx sm plugins load fixes/l4d2_null_cusercmd_fix.smx // Anti-Cheat. -sm plugins load anticheat/l4d2_noghostcheat.smx +sm plugins load anticheat/l4d2_noghostcheat.smx \ No newline at end of file diff --git a/cfg/sharedplugins.cfg b/cfg/sharedplugins.cfg index f842a9b79..2c8bc3f7b 100644 --- a/cfg/sharedplugins.cfg +++ b/cfg/sharedplugins.cfg @@ -1 +1,5 @@ -// Your Plugins here. \ No newline at end of file +// Your Plugins here. + +// Letzzzz go. +sm plugins load confoglcompmod.smx // Should be last loaded, so when we unload plugins confoglcompmod restores ConVars +sm plugins load match_vote.smx \ No newline at end of file From 3aacc0bc55b7d8cb659030028a582f714b2378f1 Mon Sep 17 00:00:00 2001 From: nikita1824 Date: Sun, 21 Jan 2024 11:44:01 +0500 Subject: [PATCH 03/11] Update confoglcompmod and match_vote Replacing changematch with better method (!match during match mode active to change the match????) --- addons/sourcemod/plugins/confoglcompmod.smx | Bin 62890 -> 61992 bytes addons/sourcemod/plugins/match_vote.smx | Bin 12640 -> 11394 bytes .../confoglcompmod/ClientSettings.sp | 2 +- .../scripting/confoglcompmod/CvarSettings.sp | 2 +- .../scripting/confoglcompmod/ReqMatch.sp | 100 +++++++--- addons/sourcemod/scripting/match_vote.sp | 173 ------------------ 6 files changed, 74 insertions(+), 203 deletions(-) diff --git a/addons/sourcemod/plugins/confoglcompmod.smx b/addons/sourcemod/plugins/confoglcompmod.smx index eb03298f1532b7657012175a73ac0f98973a8a64..501fd355eb5c33baed0f98ad78449c4ac850df97 100644 GIT binary patch literal 61992 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 gzQw&l@ywJG@pMW_HpA;Ezd2M}L}N&o-= literal 12640 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 diff --git a/addons/sourcemod/scripting/confoglcompmod/ClientSettings.sp b/addons/sourcemod/scripting/confoglcompmod/ClientSettings.sp index 76d1e2da9..5cefc9611 100644 --- a/addons/sourcemod/scripting/confoglcompmod/ClientSettings.sp +++ b/addons/sourcemod/scripting/confoglcompmod/ClientSettings.sp @@ -60,7 +60,7 @@ void CLS_OnModuleStart() RegServerCmd("confogl_startclientchecking", _StartClientChecking_Cmd, "Start checking and enforcing client cvars tracked by this plugin"); } -static void ClearAllSettings() +void ClearAllSettings() { ClientSettingsArray.Clear(); } diff --git a/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp b/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp index 466854d9f..c17120ce9 100644 --- a/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp +++ b/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp @@ -240,7 +240,7 @@ public Action CVS_CvarDiff_Cmd(int client, int args) return Plugin_Handled; } -static void ClearAllSettings() +void ClearAllCvars() { bTrackingStarted = false; int iSize = CvarSettingsArray.Length; diff --git a/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp b/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp index 197c65c7d..da512288c 100644 --- a/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp +++ b/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp @@ -16,7 +16,7 @@ static bool RM_bIsPluginsLoaded = false, RM_bIsMapRestarted = false; RM_bIsChangeLevelAvailable = false; - RM_bIsChmatchRequest = false; + // RM_bIsChmatchRequest = false; static Handle RM_hFwdMatchLoad = null, @@ -27,6 +27,7 @@ static ConVar RM_hDoRestart = null, // RM_hAllowVoting = null, RM_hReloaded = null, + RM_hUnloaded = null, RM_hChangeMap = null, RM_hAutoLoad = null, RM_hAutoCfg = null, @@ -73,8 +74,8 @@ void RM_OnModuleStart() RegAdminCmd("sm_forcematch", RM_Cmd_ForceMatch, ADMFLAG_CONFIG, "Forces the game to use match mode"); RegAdminCmd("sm_fm", RM_Cmd_ForceMatch, ADMFLAG_CONFIG, "Forces the game to use match mode"); RegAdminCmd("sm_resetmatch", RM_Cmd_ResetMatch, ADMFLAG_CONFIG, "Forces match mode to turn off REGRADLESS for always on or forced match"); - RegAdminCmd("sm_forcechangematch", RM_CMD_ChangeMatch, ADMFLAG_CONFIG, "Forces the match to be changed"); - RegAdminCmd("sm_fchmatch", RM_CMD_ChangeMatch, ADMFLAG_CONFIG, "Forces the match to be changed"); + // RegAdminCmd("sm_forcechangematch", RM_CMD_ChangeMatch, ADMFLAG_CONFIG, "Forces the match to be changed"); + // RegAdminCmd("sm_fchmatch", RM_CMD_ChangeMatch, ADMFLAG_CONFIG, "Forces the match to be changed"); RM_hSbAllBotGame = FindConVar("sb_all_bot_game"); @@ -98,10 +99,36 @@ void RM_OnModuleStart() } RM_bIsPluginsLoaded = true; - RM_hReloaded.SetInt(0); + RM_hReloaded.BoolValue = false; RM_Match_Load(); } + RM_hUnloaded = FindConVarEx("match_unloaded"); + if (RM_hUnloaded == null) + { + RM_hUnloaded = CreateConVarEx("match_unloaded", "0", "DONT TOUCH THIS CVAR! This is to prevent match feature keep looping, however the plugin takes care of it. Don't change it!", FCVAR_DONTRECORD | FCVAR_UNLOGGED); + } + + if (RM_hUnloaded.BoolValue) + { + if (RM_DEBUG || IsDebugEnabled()) + { + LogMessage("[%s] Plugin was reloaded from resetting match mode, executing match unload", RM_MODULE_NAME); + } + + if (!RM_bIsMapRestarted && RM_hDoRestart.BoolValue) + { + CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Restarting map!"); + char sMap[PLATFORM_MAX_PATH]; + GetCurrentMap(sMap, sizeof(sMap)); + + DataPack hDp; + CreateDataTimer(MAPRESTARTTIME, RM_Match_MapRestart_Timer, hDp); + hDp.WriteString(sMap); + RM_hUnloaded.BoolValue = false; + } + } + // ChangeLevel if (LibraryExists("l4d2_changelevel")) { @@ -160,23 +187,24 @@ static void RM_Match_Load() LogMessage("[%s] Loading plugins and reload self", RM_MODULE_NAME); } - RM_hReloaded.SetInt(1); + RM_hReloaded.BoolValue = true; RM_hConfigFile_Plugins.GetString(sBuffer, sizeof(sBuffer)); + ExecuteCfg(sBuffer); //original - // ExecuteCfg(sBuffer); //original // rework - char sPieces[32][256]; - int iNumPieces = ExplodeString(sBuffer, ";", sPieces, sizeof(sPieces), sizeof(sPieces[])); + // char sPieces[32][256]; + // int iNumPieces = ExplodeString(sBuffer, ";", sPieces, sizeof(sPieces), sizeof(sPieces[])); // Unlocking and Unloading Plugins. - ServerCommand("sm plugins load_unlock"); - ServerCommand("sm plugins unload_all"); + // It is bette to it manually + // ServerCommand("sm plugins load_unlock"); + // ServerCommand("sm plugins unload_all"); // Loading Plugins. - for (int i = 0; i < iNumPieces; i++) - { - ExecuteCfg(sPieces[i]); - } + // for (int i = 0; i < iNumPieces; i++) + // { + // ExecuteCfg(sPieces[i]); + // } // rework end return; @@ -190,9 +218,21 @@ static void RM_Match_Load() LogMessage("[%s] Match config executed", RM_MODULE_NAME); } + // if (RM_bIsMatchModeLoaded) + // { + // return; + // } + if (RM_bIsMatchModeLoaded) { - return; + IsPluginEnabled(true, false); + RM_bIsMatchModeLoaded = false; + RM_bIsMapRestarted = false; + RM_bIsPluginsLoaded = false; + ClearAllSettings(); + ClearAllCvars(); + Call_StartForward(RM_hFwdMatchUnload); + Call_Finish(); } if (RM_DEBUG || IsDebugEnabled()) @@ -232,7 +272,7 @@ static void RM_Match_Load() LogMessage("[%s] Match mode loaded!", RM_MODULE_NAME); } - RM_bIsChmatchRequest = false; + // RM_bIsChmatchRequest = false; Call_StartForward(RM_hFwdMatchLoad); Call_Finish(); @@ -268,6 +308,7 @@ static void RM_Match_Unload(bool bForced = false) IsPluginEnabled(true, false); RM_bIsMapRestarted = false; RM_bIsPluginsLoaded = false; + RM_hUnloaded.BoolValue = true; Call_StartForward(RM_hFwdMatchUnload); Call_Finish(); @@ -276,19 +317,20 @@ static void RM_Match_Unload(bool bForced = false) CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Match mode unloaded!"); RM_hConfigFile_Off.GetString(sBuffer, sizeof(sBuffer)); + ExecuteCfg(sBuffer); - if (!RM_bIsChmatchRequest) - { - ExecuteCfg(sBuffer); - } - else - { + // if (!RM_bIsChmatchRequest) + // { + // ExecuteCfg(sBuffer); + // } + // else + // { // if we are using chmatch, don't let predictable_unloader unload confogl itself. // all plugins will be unload and load when the new config excuted. - ServerCommand("sm plugins load_unlock"); - ServerCommand("sm plugins unload optional/predictable_unloader.smx"); - ExecuteCfg(sBuffer); - } + // ServerCommand("sm plugins load_unlock"); + // ServerCommand("sm plugins unload optional/predictable_unloader.smx"); + // ExecuteCfg(sBuffer); + // } if (RM_DEBUG || IsDebugEnabled()) { @@ -298,7 +340,7 @@ static void RM_Match_Unload(bool bForced = false) public Action RM_Match_MapRestart_Timer(Handle hTimer, DataPack hDp) { - ServerCommand("sm plugins load_lock"); // rework + // ServerCommand("sm plugins load_lock"); // rework // elias: please don't if (RM_DEBUG || IsDebugEnabled()) { @@ -432,6 +474,7 @@ public Action RM_Cmd_ResetMatch(int client, int args) return Plugin_Handled; } +/** Nah, we do it our way public Action RM_CMD_ChangeMatch(int client, int args) { if (args < 1) @@ -500,7 +543,7 @@ public Action RM_CMD_ChangeMatch(int client, int args) RM_Match_Unload(true); // give time to fully finish unloading. - CreateTimer(1.0, Timer_DelayToLoadMatchMode); + CreateTimer(1.0, Timer_DelayToLoadMatchMode); // what? return Plugin_Handled; } @@ -522,6 +565,7 @@ public Action Timer_DelayToLoadMatchMode(Handle timer) return Plugin_Handled; } +**/ /*public Action RM_Cmd_Match(int client, int args) { diff --git a/addons/sourcemod/scripting/match_vote.sp b/addons/sourcemod/scripting/match_vote.sp index 2daf53c45..445747432 100644 --- a/addons/sourcemod/scripting/match_vote.sp +++ b/addons/sourcemod/scripting/match_vote.sp @@ -65,7 +65,6 @@ public void OnPluginStart() g_hCvarPlayerLimit = CreateConVar("sm_match_player_limit", "1", "Minimum # of players in game to start the vote", _, true, 1.0, true, 32.0); RegConsoleCmd("sm_match", MatchRequest); - RegConsoleCmd("sm_chmatch", ChangeMatchRequest); RegConsoleCmd("sm_rmatch", MatchReset); g_hSvMaxPlayers = FindConVar("sv_maxplayers"); @@ -231,11 +230,6 @@ bool StartMatchVote(int iClient, const char[] sCfgName) return false; } - if (LGO_IsMatchModeLoaded()) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Matchmode already loaded!"); - return false; - } - if (!IsBuiltinVoteInProgress()) { int iNumPlayers = 0; int[] iPlayers = new int[MaxClients]; @@ -376,172 +370,5 @@ public void ResetMatchVoteResultHandler(Handle vote, int num_votes, int num_clie } } - DisplayBuiltinVoteFail(vote, BuiltinVoteFail_Loses); -} - -public Action ChangeMatchRequest(int iClient, int iArgs) -{ - if (!g_hEnabled.BoolValue || iClient == 0 || !g_bIsConfoglAvailable) { - return Plugin_Handled; - } - - if (iArgs > 0) { - //config specified - char sCfg[64], sName[64]; - GetCmdArg(1, sCfg, sizeof(sCfg)); - if (FindConfigName(sCfg, sName, sizeof(sName))) { - if (StartChMatchVote(iClient, sName)) { - strcopy(g_sCfg, sizeof(g_sCfg), sCfg); - - //caller is voting for - FakeClientCommand(iClient, "Vote Yes"); - } - return Plugin_Handled; - } - } - - //show main menu - ChMatchModeMenu(iClient); - return Plugin_Handled; -} - -void ChMatchModeMenu(int iClient) -{ - Menu hMenu = new Menu(ChMatchModeMenuHandler); - hMenu.SetTitle("Select match mode:"); - - char sBuffer[64]; - g_hModesKV.Rewind(); - - if (g_hModesKV.GotoFirstSubKey()) { - do { - g_hModesKV.GetSectionName(sBuffer, sizeof(sBuffer)); - hMenu.AddItem(sBuffer, sBuffer); - } while (g_hModesKV.GotoNextKey(false)); - } - - hMenu.Display(iClient, 20); -} - -public int ChMatchModeMenuHandler(Menu menu, MenuAction action, int param1, int param2) -{ - if (action == MenuAction_End) { - delete menu; - } else if (action == MenuAction_Select) { - char sInfo[64], sBuffer[64]; - menu.GetItem(param2, sInfo, sizeof(sInfo)); - - g_hModesKV.Rewind(); - - if (g_hModesKV.JumpToKey(sInfo) && g_hModesKV.GotoFirstSubKey()) { - Menu hMenu = new Menu(ChConfigsMenuHandler); - - FormatEx(sBuffer, sizeof(sBuffer), "Select %s config:", sInfo); - hMenu.SetTitle(sBuffer); - - do { - g_hModesKV.GetSectionName(sInfo, sizeof(sInfo)); - g_hModesKV.GetString("name", sBuffer, sizeof(sBuffer)); - - hMenu.AddItem(sInfo, sBuffer); - } while (g_hModesKV.GotoNextKey()); - - hMenu.Display(param1, 20); - } else { - CPrintToChat(param1, "{blue}[{default}Match{blue}] {default}No configs for such mode were found."); - ChMatchModeMenu(param1); - } - } - - return 0; -} - -public int ChConfigsMenuHandler(Menu menu, MenuAction action, int param1, int param2) -{ - if (action == MenuAction_End) { - delete menu; - } else if (action == MenuAction_Cancel) { - ChMatchModeMenu(param1); - } else if (action == MenuAction_Select) { - char sInfo[64], sBuffer[64]; - menu.GetItem(param2, sInfo, sizeof(sInfo), _, sBuffer, sizeof(sBuffer)); - - if (StartChMatchVote(param1, sBuffer)) { - strcopy(g_sCfg, sizeof(g_sCfg), sInfo); - //caller is voting for - FakeClientCommand(param1, "Vote Yes"); - } else { - ChMatchModeMenu(param1); - } - } - - return 0; -} - -bool StartChMatchVote(int iClient, const char[] sCfgName) -{ - if (GetClientTeam(iClient) <= TEAM_SPECTATE) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match voting isn't allowed for spectators."); - return false; - } - - if (!LGO_IsMatchModeLoaded()) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Matchmode isn't already loaded! Use !match instead!"); - return false; - } - - if (IsNewBuiltinVoteAllowed() || !IsBuiltinVoteInProgress()) { - int iNumPlayers = 0, iConnectedCount = 0; - int[] iPlayers = new int[MaxClients]; - - //list of non-spectators players - for (int i = 1; i <= MaxClients; i++) { - if (!IsClientInGame(i) || IsFakeClient(i) || GetClientTeam(i) <= TEAM_SPECTATE) { - continue; - } - - iPlayers[iNumPlayers++] = i; - } - - if (iNumPlayers < g_hCvarPlayerLimit.IntValue) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match vote cannot be started. Not enough players."); - return false; - } - - if (iConnectedCount > 0) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Changematch vote cannot be started. Players are connecting"); - return false; - } - - char sBuffer[64]; - FormatEx(sBuffer, sizeof(sBuffer), "Change confogl config to '%s'?", sCfgName); - - g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); - SetBuiltinVoteArgument(g_hVote, sBuffer); - SetBuiltinVoteInitiator(g_hVote, iClient); - SetBuiltinVoteResultCallback(g_hVote, ChMatchVoteResultHandler); - DisplayBuiltinVote(g_hVote, iPlayers, iNumPlayers, 20); - - return true; - } - - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match vote cannot be started now."); - return false; -} - -public void ChMatchVoteResultHandler(Handle vote, int num_votes, int num_clients, \ - const int[][] client_info, int num_items, const int[][] item_info) -{ - for (int i = 0; i < num_items; i++) { - if (item_info[i][BUILTINVOTEINFO_ITEM_INDEX] == BUILTINVOTES_VOTE_YES) { - if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) { - DisplayBuiltinVotePass(vote, "Matchmode Changed"); - ServerCommand("sm_forcechangematch %s", g_sCfg); - - return; - } - } - } - DisplayBuiltinVoteFail(vote, BuiltinVoteFail_Loses); } \ No newline at end of file From 630b91661476372e157beec1c44238d2e8be5629 Mon Sep 17 00:00:00 2001 From: nikita1824 Date: Sun, 21 Jan 2024 12:56:06 +0500 Subject: [PATCH 04/11] Correct small mistakes --- .../sourcemod/data/protected_plugins_list.txt | 34 ++--- .../plugins/{fixes => }/command_buffer.smx | Bin addons/sourcemod/plugins/confoglcompmod.smx | Bin 61992 -> 62122 bytes .../scripting/confoglcompmod/ReqMatch.sp | 59 +++++---- .../confoglcompmod/includes/debug.sp | 5 +- cfg/generalfixes.cfg | 116 +++++++++--------- cfg/server.cfg | 2 +- cfg/sharedplugins.cfg | 4 +- 8 files changed, 110 insertions(+), 110 deletions(-) rename addons/sourcemod/plugins/{fixes => }/command_buffer.smx (100%) diff --git a/addons/sourcemod/data/protected_plugins_list.txt b/addons/sourcemod/data/protected_plugins_list.txt index dfd791154..ba0d67897 100644 --- a/addons/sourcemod/data/protected_plugins_list.txt +++ b/addons/sourcemod/data/protected_plugins_list.txt @@ -1,22 +1,12 @@ -//------------------------ -// Sourcemod Basic Plugins -//------------------------ -basebans.smx -basecommands.smx -basecomm.smx -admin-flatfile.smx -adminhelp.smx -adminmenu.smx -funcommands.smx -playercommands.smx - -//------------------------ -// Core Plugins -//------------------------ -left4dhooks.smx -l4d2lib.smx - -//------------------------ -// General Fixes -//------------------------ -l4d_pause_message.smx \ No newline at end of file +admin-flatfile +adminhelp +adminmenu +basebans +basecomm +basecommands +command_buffer +funcommands +l4d2lib +l4d_pause_message +left4dhooks +playercommands \ No newline at end of file diff --git a/addons/sourcemod/plugins/fixes/command_buffer.smx b/addons/sourcemod/plugins/command_buffer.smx similarity index 100% rename from addons/sourcemod/plugins/fixes/command_buffer.smx rename to addons/sourcemod/plugins/command_buffer.smx diff --git a/addons/sourcemod/plugins/confoglcompmod.smx b/addons/sourcemod/plugins/confoglcompmod.smx index 501fd355eb5c33baed0f98ad78449c4ac850df97..444902961dc9b5c7465c1a75be29b1f4257fd659 100644 GIT binary patch delta 61879 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 Date: Sun, 21 Jan 2024 13:06:06 +0500 Subject: [PATCH 05/11] Add match name for debug module --- addons/sourcemod/plugins/confoglcompmod.smx | Bin 62122 -> 62203 bytes .../scripting/confoglcompmod/ReqMatch.sp | 16 ++++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/addons/sourcemod/plugins/confoglcompmod.smx b/addons/sourcemod/plugins/confoglcompmod.smx index 444902961dc9b5c7465c1a75be29b1f4257fd659..5ccaf08dac9c8fe2047fd49b61baf48b8b2e8108 100644 GIT binary patch literal 62203 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�Y^3eULmxJUxUJWt%a?8J$^#2N$t8DbkQKBjOT_ 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 literal 62122 zcmYhB2UHVL*RCldiUJ}cB27R=L5heVU8y2Xq<5wF7J5mPDjn%PB3-0+2t)*=1QLq$ zKoMzDyb-TX(%W@T(Vmo6$SEg+ZLCs z-atk1@X}rW6Tf8fOAowM;U$M$`qxWwHd0aiy7aV54PLV7rI%caaLL1$4!Klc6BWhj zrT1T|vzdzGl`{p!_$8k_pr*KW>Bvjb@K94UUe>mC$!+}96gWl-3fv{vNK#XHNL-Il!pFmGLTRZ#zuLZF4`Ja}J>n8x<|E;ulvUC04;r=^R!wzv&(}|KWhS-A=|3 zgMQx!AtD2bqTbK?V}<(b0ba_77Jk-@I(X}oyFqN=tasEk?Z!W2r6CgQiNDgHz*b(b2+Doh^QT;6?6;!C~ zwilQJ8GrlzP@VeJ4F}S_#ZG_taGn%kV>tVTgS~JFOgz?IlK#l(>ayXr@FzU(LN@0tA-nI%hOWQt;BDr0gddPiJVsvTFVomK|o1giC!9h_F2UwYB! zwBFS+&wMOg86#62BU2H>KGCb?yaIPzfjh5khPu;lnn_nPFinrfMc zKdv@lp00^uAMefo*Q@2YQu@*hkkhJ>)9RAbx{|)#N~dLB^|)G{dAcM9=Dd>VvZDIZ zi#ey&NelVwvAZR+zX7wuor={VaW8|M)*vnOxX0C2%#y`1?329-E-R(tUK2U3CR#`u zE#xCDWY}YPs|u%4bxh^I-bv?`?U!C!Ijx5Ot-18S6^!;KIIsMD>81DI4M=Gr1OMCa z$K&cXL#+;%m2L6=^kC33f5+@^&g}n=S+e9mN2KF>Ovld{K|-?q@YsI_zW>t8EvGf> zvAZ#|sj34-yfg?`HXUt?AwO2?2F7_lG5u$Nw_XgV313RSY3R_u11TV_j7*F1srw zsqvYyvn{MVK4%C2=5O-DGcj+EEFpo|$K89+fAk}_mW)O=4F$WChWf3gs%4>fuajlT z_s;(y%&xd||2dH`d@Rg9z2{c_;txuVO`fC0+mL|=2Rv;{4edEh|0NeT+NS(P>1Acl z-Y$N}c2~&Hw(yJXgJ>q=m>gZsk>Bl!PY`!}AyYI;@#DVtTJzIJyX!Xub=iN}2j1oY zPYpnBXK*h=M;>Zr_edty%f98Dt_{JGgmEj6Mv_o!l|};&)F0 zIrX^cdWFu;g5x4&r~;cG=2|Gtuu|gE2XAN^5~2>^;(k+q&Z&NG@hjfXkSk`@b9y;@ zsfA_PsFN=JY4^IDDmXo=!vop9Z8l>2%tH_Xhj;CA{|)Q#yM}yb`ey{7vXZl5~}AYntdnB#h92Zzo2A8Dy)z z6Xkx9bKjmN(O_Ki9`DJM;-?+nO`xw8Oq*C$b})`ad)!!@zRQF%TEH!yG=P3`-e9j$jW0sy8{SyP5Yu6kD?idHhgt$DAGP9KufBxRg3;56{`>a)x47>wc zr}Q|dRt$1Zf=nk+XKU25vGq2@hY z!(|S~5^lp^bQf^j+q^xcbdXn`UmR^AJ(|L08qa4oG>hEb@TfFl_mnnQ^f`T%!WmIe z7wpz<)r35|wkMesu+^Erj3mZR zDv9UlK4bDh+tmV{b6#^nnZ|-8*cEC!?Yg6Z$MTd|9^gx70OvjIUe(m?yyR7isMK-n*%O z<;6CfdSmIMIsV;KaMl+Y)wBMkCWIHj6F6`Jaci}g;c-ACV!{>HmK;{Wy-syr`=VM>@AQ^aqYlPadbXQb7%oJ|S^K2w>9iZeZCcfCA?Gz~Ufz^cpq&H>3TBjE zSkKNF^F*^wS6x%Es`1-l7r7P+yECOBYVP#9wf?i`y1b_z6>#tVz4&=LdXB$tC07!6 zNU7WaM3PW9c>wDO567+VfKJ8NJyj@|1*ra*Tz*skF`$X4WEfCVct&;{30F{cQP|9d zsS}$&H}VI8wyyfmd2;PdK@R(&3x-!+TUcPD?iI3*9+Ogl)^0j~B!_cmA)Ojy$em?z z<7I8cC+B2f$ft=U?T$`XH^t+M6zMWfPcxdnu^KI%wXsq?Uqa?yztzKqYtE>XXWU*u zEi#NBvAz+F|6uQZZV>cy7PEK(8I(sdVw%9B^%$>LD=dIA~qvG^?{qt=(C7CCT z&@NBsT;yUsWdeWrJme5xU` zTozW|#`4q!<@t(j=nn0hdxYVa=atC~8F?|@|`t^=>FnQ<0* zlq64k{)XsxRf}2C?jwHB@6tIpj5wa_67E$F1?C=BJY|EKUNNt(J8B!|_v@241e$eH zD{W8fV&WSfsU9?Q2-ON1bludi2^nU;xL*9?BR3}%%<1*EE+K0Ubq`i8t(r=Svp|>q zIx@*5D4;%kN43K}=0y*I_Q`!VQt| z%Cp)YezR|wnnYAH&8Wd^FiC~B|i?sCfwd6gd`Hn>%9E7hAayVQbnn1=F1 zdO8#eeCu2S{^M9F_Sl%af_0p+==fZdQku0D)iHIL^^wSpf2xy-8}45q#0AJFhDgu* zNpIQ9@2{ukmdYmaCyNYvzBc*3!jg{RiQ#_*$25LAc=2sM)32R`>+5R$u*~Q5%d-Fh zLUwB%6P;f>!E3yh?nn62xoQZ7j&3QKPuX6)$RUOxbNRLT6Q!CM&sIa(*)dWJ+8Sq% z3oYD=Sd&_2Lv+$y#6qMl&oi0GCVDnf9XG7qrx9Ji`lvL*09>(^&-C7NO>lh-+i zRO5M1AB?#E76*M9H`g!LO_=S-LY7DzE+n2iNrR;8i7V;I8yBkG?Z zy1kCjQF_45SyO$91Q*9dKl+g|_?{nPOdl}h;;5ZHw>q^)kbhbYN|akaefn|6CH90| zsS~)WvXDVcw@?dg*&W+iHsU(oUT(cv9gP~?c!Y7>Xb{T|<{Yzy3|hc_|M}@@S?2Zm zLAbti+WELDAJw?(EUzy~;8wFU%8*?deU$4D-ODhA4nrR^v6If4brXv*Me`wxV;oGr;__F`eurbrX0OPZj5PyPZF? z6Jry^I&Bvx&ty((8EN~0Bp)$h+M+4QdR+fNoRt9Z=AU1U8Inralt?%Vc((%5tE`Q@ z6H2ug891t;A>CCz=TK$tpFU!t93bmo0h-c~k#130H#M+CH3-UtPjJA5;`;>#yZ9~D zWcPF9jZTe?##TlUO=$K*Ru2b77bZ!QAoGG}B6W$jzof@_%RU*fj8A92RhpF#9M%wC zJS`4M${4tK#aJgIem!*I-!2XM6cu$`RZTkTL}$r!8g%0*kzqsEjkfj*f@dVdl(vAr zR>E^4Wi~gPOqz!lYK-nXhq9v=N(P8`hJww%wM1LKRUO_?7h!XcqeH^^kQ<@foXWzh zO?#!(N1cZ&rya&6Tp$(lPw6K$v>P>j0v;Ew7BgjQ{Z_oP8#M&Om-#(amU5qm&ZCpb zC&@Xq`o1X%4PsI%dt6U0${rC>H}w$xd4H`rw{+A>BloIHP==X zw|Ap=96R@NsG{vZ-RyR83O12iv0PK35pL!1>hyS1Pg`{?70RjKHTFv3CRU>TS@3;+X76zsqH4PbO^9-7-s8{)`@v>ic z8Eh?eFH+7l@6XPq(t%8}TX+`2=C>bPSvOxq&yv+~mbhA0t9JCtr;C^6^P^G%yq&lk zfV&)4G3P)>GgNCJR!TKjEg8dPbwmF59PU#LW^P5vJD+n^U}fszOp~X)fNc1RDxxl6 zpx}i>=k5}bd+hAtU%L)lt`J&SI8j-sM8rS@J}48749thE1^l?Z2IP^j^M|O zoa-}C{ZMDsRl(l%z6z!NuE{6ERdqL;xH4)YUp^T!=lfPAtMzF6g#jZv(};)Ua3;5} z@B;P^R7#EG25QH<=VzoT;fMWcWYm6{c4zW}xbJL^oTQ|GWoQ*H*0SNbz$TQkkhTK* z&J?)9VU|AVZyymzoWk^aGfDDnhCI#3etdZ1Y<8k_&0Ukag`qot>bG3%lKo51qzA1U z_gi0H+dn(|Oivs}Jm;o=E-%fToD?M#PcZb08qe-= z=k_?-^HDHGjQtCaT&}`+z415x=o@z^HGQ>1Ugb8*AJWfLTFdJ5)W`IvzxzR{(O#f5 zJH58x0=aOTKIrULpfo9#1C<)MlpFL26k2gu+iCGhwntajyzpEHr7oa z3B4PQFM7%~k1cegI}DQ40Pq(D7M_pa^gWHNdu0u~?&<+4D^$p~3T~lw z+?nN`Xm-~enm<$g-E0Y$FprrN1s}heKNwGPV!sO&@aU=3a8z>jC~`S)sv%4D9_!34 z34kiKyh#AZ>u2cq6r|K@nEN=4C%quh`~|94VrSJ!s_Qgs51dw0t` z6t~K#iv9N{KK#b>E;@$x=I)z+_Hj$`!BUR<%JN!WwEucLA3biU@Jz~u%(TJkr|)j` z$L;gpk5#pWlm6x}ev$cY+#}E5=7MFy@QtA$*0LLNn3eLb^X-0f;xbt${sws}s_P}q zuv+o+()?ElXjFikSL!rtj|Vhu*wRv$HAI2qi;#6a>ek0L_hh?TPG536Ww%@`&bBMu zHFm{Rfh%qhpip1p7CO=a;)~qHJtT9cB~I+ItO*8x8a+gbfJRX8B&^i0Y&?E?a5}og zA*{1B!vUf#2EyefK;b*oUk~G-!etI%xh<8igd?~Cn>mWOxjPNhD@V+`QvUYG-|@R@ z21NSKjeW_73+1BG(U_ziPdU=^9~`AGk8G*cbc>GB>-(|o&i4p}h)1&f{PWtK`;FA< zAbt&)*UB;GkBfRu+g8#cGr|wigkRkU>i@yf*1Uw^o4!H%@9ca~{#!lXyWEME&a$T0 zoZvfq1r^H)84}IT%LwIP&DO+uvjrw#D&G&h9k!a0bo!-@S&bvM1Q`7T#2eLnw4YGO zFD?l0x^1iOaLrW1`xhUCn2<_SGY-rba?g%i=(es`3!nt*5(VFLYAoJ{+c6sVCw>n2 zcJ3Rn1+RKfcv9(8p*Vqe9w#n9H_94@j*ey6-)4e14y#aHbsto?jGcJqBUzUx)s7&f0rhb ztek^mTko!aschvAsW=sWa&U{dKJ;1sG;&D*=Ms-HpaHQwC%2Ogf#kD#hzgfJVJCBa zFkBFLCBQSXR7;E7Bv`A?C=52&ynK!mPZrNaeFJ|vq+Wyi0)uM-FUZ%yxpfvGg>M0+ z3=4c6a;@Nd%@bO#6Frk2EofDGbS$$sBO+vr8)?yGP zt))cibpOU%y-wx(FL~P|#sHuKac5IruJH2R)XhL~9og-Sul-j9g0ISfN0^hEAFVu( z9;*JS7Ge(O=Hk@oEuu_c_)^eu)LY~d6HxqqwrG=}Ul0(H`L*9kA4hX6%T2-PURj1u ze0we(GyFtq>#xc2JVd9K^oh7Xg?J^gQ3>`s%0`wV%EXe6dK=o5r7wz1jDaDjShytq z91-N!9@)4|<=hh0pZqLDGZZ-Z4_A^t8#|P(jL^#w(-El~29)Qm^pBCz{VyF}2-j)e zNC!~KB{>e|Sz2e8y_d4>eq5HMP$&$rkFhiS?tOn0P*ghHpz*AMKK(^RLG(+z0yFFE zqVl{Kn}Mc!8@sn*c}nZX^o|Pp;qAk1dzKc2VUd9Kl)~Tc0PZfiBDW z3P77uFYco~i>U84du_@F-wq&SELd1K=%=T}$|;(|!g?8isSz%mpcIft%T2uB#k3O~ z7@$`PocNz|-;2t^z=S6mljTn|npLfEG^DoZD*A3Xca8q(jqTHt%^TV|4Zh^P=uiZK z5Qd!IN1{2&ZRdd^!pQ2TnDj~)>;^){O&d%6F&%B2gHdvRk6~wc7aeDn*0M^_p+RpM zd@WNiVC`BOwYj>EnoI_feSnGMCHL2Y!^>ELcT~WWPJLFk(M{HGD%*|Jb%iv=w69HzUcx4JVN!CDEN z6=XJO{Rn38y17hPdaj?&7!6We5lO}3gL!8Nmi+8%C`!u%rp zai|Y`b>d6T3AXeLV(*wgaydJSYLNjK!!hY_w6kaDCin6${Nfomc-)Yj!i+Pr%c za($9*XCTvKMp~?N7TK{F(twd}6msyK#Iz%#}}X0%Ff^tnc6z4Sm+03ZC6aV|kk9z9yHL_od|anj^=~&9bY*aa87iP~VIr9+L@;Qvc(;)x z*UqN^+C7wAt3h>9R}DkAM8X4umxI}K+-__jLiVO1VxDhi6oUD&{6BEtJqBRxH;gS| zX)UtPJq$=U*!X&n`oxrHJ05gn>OXTQc6d*)iG0<{I@*+UMOKRjtM5p1fS+-Q?11>Y zm>?H1_*<1nd4wqP{>pdnqQhxUP=(MYNi0a@j{h^6Yv-d9X!+!)`up}cOGl|zjMc|b zkaKj9<;b2=(M`XgXr%nwAB=c|l_>B5hS$pKx5ERB@nYc4E|t0DPK>w3@N#@`j$1FCnyd!-k$o)rLT=Q46>>a^XI_FC@XRD=ZIJp&mF(+xk< zYoprJb=vjV{*HWE(q^t@{ufx(yJr6gSq0Ys%o)=OEzr+&cmMNUYiPZ ze-*6P<1lK86LQab(ELHxisM|XzZv!QNNDltbg-}8do#LsMx70woteG#KMp6PSNrsQ z6uU7f@eBFQ^Qi*~NUN$MMf<1o7Qwe+*P(i_Z zcER?-d}+b<4Jk7m$sIsI1!E+bcS6qNb5Yk&M&}uzb^z+8yp=T8tQ)OC$SX9tFk5`_ z5cAPnzX@pAqF0UmWwx>i6vGYIb`Cj=o{ELz@RFf0HdgyPM7&xVXSUvn(8WnRTOT=; zg<~W2OiyBQ!VyCo_}7J#8M?Rhxj)KDzor|7ON^U{ttSABW-@oBkIsFaUUiv4_eY_L zTT&6KE2fqU+9VU)525yV*OA{~nnLq#xqv@{M|3ZdyuG9XN zziNbk&?oerTGD294gF>w8YUAC#y&eb{P82yjx5V+4_Q^4hA-Kr@6%Ztl0cp?GpIM+ z;m9v!WXSt5?16BThrKg;d`LECs4c3X#$||Ok!{yqW7;A#VZh;roaD=&Fe%H|Qk+jP z>c=6fdhi&kp=^~vNrf1kyKIH9L-A+ttGbJqw{KHD_+b87!w9+{4eUndJcb1(UI|7b3@b3sv&rq*Hf7zU1?N4yyja=+guKo$WDurO&JP z>=vn+)dq~^dot_6YdFq)p<>GA3ey%7WtVx7`%0)AJ^hM2M#KN--oqIQ#UU;+q{AZP z-QSr${jrZcJns0Y{51# zz?I6~`EliTj2ZaTc+vwgtA1)enMwa5Mwk72`h>xsLsE4S-q(a`NQHSBETD*eqH1H_ z*l2xZiQ74!uSGyxokB{cOzcp;+PWpfZ?KTeI#yEeliI*6Z-HUbqkxc{f{7%ZhnBvm zw>=Zxf4M_+29kfcSvWBNcuq~UOeH#1lk4!7-zIOeCSfqtyXVbPa+dWS@~Yy;dI`Bo z8XS_*->kNhZIQh;+~_t9fOml)IZ-bYpi|V;UN#BgQgy=`e#UAo+LI`V9Xd40=zFM2 zvjsn1ApCR-^Q!s!(c&Theh>nrW{Ejc@H(YN^+zK>ZDE^UTHm7`&D>A2TekmRH3yF= zcx^XCc2@3(p?&iR%z>OD7cmpfLWu8#ix)@D=?l>>j^jh(omtnkgI{O&O!)5lKwI|G zc7h3s8jl;=ScbrD&yU%Bp@s`IwqhM&&YJh>L?7qB67hgdp!4e;-kZVS&82|V71nLg z57#Y>(i}(?dW&}Yi(ygzvO7Z~-fbc>m;<-qK=>mwI{@?Z5uNLRNa3i9bcOVt{D4Gk z%}w-T{XJ^+&zz1$V5q6E7Sj=ZSUoU^R}{4f}H2t7qJ2v0M?Rf11~ z?rhW`XNOsluWV#gdT7@AlaA!!M|>eHN}@u+CuE*}3;;Y`nwzV&H{#)5+5xMS`wfYQ z%aIke;+mn!;4S$_qmlTQRJv0sngl}u$A{Z9Vx$IZaL|Pb1CBPx`0&{x(n1$Cxf8#_ z=5C>ANLK{DP^NJG1Z&HYezKlQRG5OmR*5uOFD#RTlZ~(~BP0{PrEsrh!*T*! zb?T9!hR8muTZnb5sQ)qv)DdoY)j8kAUxpWbCz-Gr>JEm+|FvDZv%BduFAqu|QX}Ss0kQFwB6EPFSFw|2`^XaF(= zOW0$S03+X^-b*U?R+6&q$XNlymLCCm73eh^2}E3G0_JyHP|smsRp)M>UOY(c9x;$` zuj|8~8{oTendGLYh#MHDnR~Ch2F4SfoLfjeD|9JZ&YR!MZg393-Yu-YjvFS)I$R9x z1#>j+AuRk5Mz*y-v12u7$0bjdyp0-7vf}H>(a`u^XW?GiS8_gb`@5>rJWSGje5H)x2G5w0*4~rqkG)+f8rjy<&fC%tvoBF21n9y z1VZ+L3vIzgf5Kg-FRago*nXl@5L2Joq zf=q&6ms^VOQ;8yWS#xTa+|S!43*XZ&xmLD8Jy3o77XLSir2C69@9svDxL$zxt@!S% zt%GGAfCVe32JMLE!W>UD)qa!8v{N#FUMzJ!Z7RQrKktNG{JVZYNUVF|2>IDj!6i7) z5*&1n3+g3XE^4#Bmq~BF>cW2{_KX;iDRAwD<1_G$Cs<)pxG7_cDYk(v1|rTo`pz%& zM|rSWmAjdSZo$^&b#nZ_Fr1RULwZy1z$f!qg+}&Re_tRfzB6%#;(5@bNr`tPRw6aR=&Bf_j?0 z@W&ib=5tvo3 zL#HbaJ{?Y*JwpEt84d=&_+nHwnRlVKhMtHG`93#FZk1>Pk9+^S_=lf7Wg(?b(|%d? zPMOpz4bIh6^_&^GZ=8pAcsRH5z#JN0ko+?g2AhnoJ>MujA}+N)J+qDdc8NzEf0x>dfM*QDx}kHT-*(F|+I z&I3+~+fp~12k#ILgq~tdD*?b;fxuUc1&O4FRGo?++(wsE?OE%r|t zk#?T<3J~Zk!AQ<$i#kajtf!^P%|ac83V_v+g2wlQJc`^QNrRj8ofpt@ZqVHEqR7|K zRMC;JQvuxt#~5Gc`F#BBKdny4s;mu%&$zq6Kt^`%qE8=fI1FO_wj{;Bm?U^pFQ#%t zXO+IKA?4AL)zspTcvDdb88|I(D=>dnriCX-iYbWCF8oQlwmK>l1<>Y#DySGPvX|n! ztj#T(mb(OB_v>ZOh2`spV@!qZgLs^hp6V@dW%Umk&Fq;*EQTLY>y)iTZ?lwoK#Ku` zRK&#HMVD$dmMU=z8`eaO^(oW6y8QjV)xw8lX7i1D*|wVkR!+{CKiz?OVn}@0YAZr; zd*kMiz~QOel4@EwXr zEm>cDK9A#;NcX_%8~vDxuP6k{y4`h?R|K~5T*LZNqbLS-G&?&G3@2YQJ8erM6 z>niX~O(nSdT{rpst~|fJ`@UE9@MONjqiUKMpMGBxW%9NDNH4Xfnk;zTBOep}(LUQ| ziP>`4I5*8N4VttexnRWV!=QrkC5@rSF6~9! z66s`|gVhiMRWPmY@2=dzyO7Pg9z100t3bTnUS#r(VfF2Fn58oQCA3_DFM8DBNF^q( zb^dsl_B2$l0OQwZ*`%OMIz(!8PxERl= zp*@nvNnAHq21upI59D#8eIIEGwYCoknbsMih%AHcH2bT9WAg9!WS8Cb<~?j3 z;*L?DoH0~Pc872Kj|Qz1X%$$xC!)YiC}a1akXaQXyjQN2pDSsv4D%d-t~IJZ?uWEteZfhJYq zMxDExW(Fd`Zesr!x9n(Z{EA(yPxoR&&(;W!ip_?*^1xkN(WwHQG3Zt4P8i9i+vhD+ z**MSE{n38SbvDWRE=eD#6Zl5u+kP(=#7XP5gH{ydqWwk}Y&UWyb2XA8=;v43K#!hp@LQL5;D=An z)4`PtEX~zL^)2q5DE)10F3aIckQRR!%VCvV+J&iHY3{CYZn&_eOU7I&X}|IMoN7Js z*$#sg`6Nozuu1}g7mW1<-});MUedwRG)9$^q$RghvJ(=`j=MLJ-AgQYXPt61@K21F z{rHZws*wyjr@HTOck~tD1URwE?LoJtat4i?^V~>2*QUFTH@M=z{2u6UbjP{~5;PDf zyrb+Qnx7*>$FMBc&u-i7^?TiGk952Im*Fw8^r`>ad$RxC-uH_}W7x3LywvCn)rl41 z;>;p6SvVozJ;siq$a`Z9`$#L>A;WmXS6};8gd^97OsURZv7{nzcp=(EE4xVJ8J0?* zteAavy<^g@K+!IWk%x%nX+!XK`6v8d4W84SGJG?^Qsgs1IZpB~_9%E&JSBN?yF0;g ziF_kWrs4~cyEIRj7kMGR?sIFI{5NgdETVEdgLsfsC{bzjJDxA=F3s?juq~tCn!H(` zXomms_(F3POpPx3;rWvIAdw0 zmQH)KzyyBRVK~!+4oD>n&WPSU(&0=YzDfxQK~?R9?DF)>Yb-5(>&41K?E^5sgv4tU z=O6p?7ahnygK)Dhnvo;ptpqGiCB$2vD9OSRblp2l4qOsV4%{p9u)v(-qBzD%f?rcH zW4R|icgpISJJ$(|Qx``di^y{k1L+`Pbm5Oegc4UqG4 z+K4Wz+K#K}MtTv3HNlJf{_!#^P^5b_D0=FtM3?P!?uXnh)DN%Fc9|K=ztH}jvxRQl zBQkZt1g$3a;)i%9RVhIxZR4j-=>Es!LjT`W?M}^Xp%Y`j%KM+%h&>p2_tHsUyn(8; zTfCAX>*|DSC9jsu52IULkPj{bCknzhY(uLl6B=w{$^07A0RvD}Gwr6Dv08gOPnHmO z&zO{M5|T{t#U(68)^?+6Xp$;8wd^0XZ*Bvui`d>mxfaS>)clX1)yPRh)IB`@I(%oI zDH;DM&6qRdN~hW|t92wbcq-e=^le?rVg-GODg`Ehy<<6`>nm7Bt-~4h-IvXCZR~^SLap9+;!T%dKjcGcW+Qv#wuAY6u;m*<-5a_i@e0LwCi)7ziH^WQj$(*50*Ts)_vnc? zynL9vA!l~$=Em46_km-#tm)HTtsh+rW>_>Lwn_rDA_w3F2|J!*{Te-D3IJTf@tLp| zn$`6qx5&ezkH!dCAEh1cp!wq}PIMI{T%^`qL6T4j{!)D&>DK)>zRwKP39Gz&o~X#_jJIiOr6^;vy-WYbDOX zMwUor6l_IJ+PG)eA?vv(Oaq&}KA$aN)zfUqtCaoc{Wnrm6FR#O9)`$YL_qdbgVsa1 zimUDyoG!Oa7GJq|;HI?6RP43^e)7vr*!kcOIr9-6l-UbYJ;smf5G)uQCK+ho*ir_i z`@)Xn5gk$j+300}seV^B|2L0~^@T)_4fVk+F+GnKl++c;s1Uus5!iU0A8odL&Y*%t zkGvpXP9yG@l?Qkus0^y5u*`c+- zuXYj|L&H^l52SUj$#zeyxvJ~56KJtF;dmv--Cpz;PSyIIPd!pFI!rn%tShxIMxxql z4dK71t~QMhQFb)#G~0KONyJbveH7*P&Q6-(RKorv8W&Vvxo_RR&_go$c7C5GOK8(f z{`e1x=km`pYN_vP3+e$b@{S#A*}}OVgJoGVSgsncuHI?H!_~JFCt$1~^+UQpYN@yq zd$Lf9E?^keC^NS3^^Q&Q7ntu`pI^XT{UHDJMae;3@|MWO2Un>#dm;j;o$r8Yyfqx( z^F7?vJq9tQJ4&%yn~BRO6I~x&3SW(se0EA)xon)nlOCPi z#M8(a>C&=BB>p^Ch&zC4)S=GUDRIbVG zcf5>Q&C-TVJlR6vfAExtV%n!^x)Grr#PG~Fbj$5lI}N3NjC!Xg!3sB{Q`3{62B%BQ z{*U9F89IOCmvAuj=slcRcoids4B}(%o!XWn(p_r{#V9=Fy%&QwB`Wfob@f z8{T`Y^q98RR`6f>-Mj>tSAVeSX}cH896Nw=E0{I8%V@zmXe!HVZv9@F{SQY*svygF zXB?+8C*dV$I&69jNL!OxClV+=!!^vci#~c+`a$%tjPXHUxo~%wx8HMH3znz8~&oa|?ijDZHo-?1lu<>}aj+GE&gWiGy z>he!HQuAJ9g)aK67uECA4odn0&5?slQ7%!gmy2}zJn*Xx1-TW zo0?6;c3j~}sp8N|S6A!spzKiZu|?!xTE&Zp4R-HQza=JULzxmmy(O z&r!05PaVIptWm%<)KVXi^&lXTW||#T-=4QzaNfG!WVM1`41C)18|-;Dr+2M|hz`7S zrLXBoNCM?Hy;C=0QL3-1x%QM#yX&6jCGhaU`R=E4Gx)XKw*nOab-T#sM=AdCH^MX~ zKRtvp!Z7gP-cH3mPtlst4zj=^exf9BLDec{x~k~2*kRX~kO>x+WMPMn*T)>v&#b2V z-HKBKOY-+6(gzE#zuD+x7__s@FVzOtYfJ%6-jGM7R$)iDN||DJ=!5!}fa|TqCWqwq z39ma%J83!{SHGcJLjmWYx7rHBwAgD&f>d0B;sGBE%tp=t+E@FMWxo#Ylr~6K_yD|I z9ph-Y+5gHc1m}P4dW(?VJU&xPJgG!HjBnjnt3_P9=AFn52SHHat2U%=IL9)=g?xsR z6PbHlEjF(V8b&30#dObzfI zI~>aTo!W9X^AT>tt~s;Js))@?dOKWc7J>36`X51#>gGMo7HwyCbS_lZsGqa>Ir{Q^ zc6%&I_J=unoU~$@oj`9Ci8lti09;KyEXu?ky1BUZUnz}%x(64h_XndRUZ$W#*ZjFp z7r^3dxI|wF_xd^4iY4k-Ov@TR%F1A-dVuKk&yQ4&+K;27`}DEk2QM|%5d9TEV@@dgm0TR|9M|7j`&7AX-spQ5 zCmux&x?0l7TGAQ&pGV0;?;eEc&Xq=h=0x8GGrp5~s%|!dYunkdA$eg)iyE`xR&x#l zm>*`Fz5&M^Kl>via@5r4`&JgcG@lh!BmT`{?SS@i1Bl&s;0ifJ1{`yyxxOG}W(T0#w^O(4--Qg_KA}vRmQmy?d6EQv zD4y{OPhkzdb4+c0F&0z#p&sTL8GkUNJ7z29`_N zVd=-Zo1cbw^&Y*QL(YDBDh?Lw6!mC$A>wXuFy({P05Qtx2F`w7U*JvSUu|kv{@ko) z$1PIqng$dv$z+;*hSH*2422So?)=2q4#6@x5MXOkqHHQuBYIX!`g*YDrtzPwSg#Vm zx3n{^#Pl4m)?I_PU%jE$M^UWJZ$7UFQ=UDlEus92KcIIAsezp)VV2pu*P2{8tVRw} z4|j`yH&|Ojk~lz<$7#9`({zbH&%5e@T5P0ptAT?**oGf6ohNsQ-oA5j4l$n{NQ{&^ zUJxm;-yCGH%&iwv(Rri9Lr_!>Q?r(R-c-Ct4!S*Y5EW8Ai0SBtWPe1Mv;NWvoNj0f zk+BAAxQ+$t5>&9%{2fTJ)MPHe(exKF)mNo_Row=>=ZSPx2OQimf>uuXgZ# z-8TyEb*d2zY&0S;c?4V79N~k0F|v?f$mLQsZMpXhba@G)tj=<_miu)hyHs4IXCy3w zhSkl|Gw>Rd1%USEL{|+r%JE9LCAYl&hHp~NFs5_w<%EHnykTQ!X>&sQgE{)Ld@@L^ z%2Fqla8YGhXl1s76Bkpp*UfggBksaD17xX@3AE6n&8#e`2@ZW+4z;?PZXv4L`j%foPsGj&sXTt%$3~4eAGt=22;dK=V%n7~^|N ztq2~Z$JkQhdThDgGBN$@vv$$73>7hMW~Q>ZYi0GWqTDHpyV>cpfA+FRJcN_v^ft_@ zbEqq(QY%quSUbDBhmMAb%paW%Q~j!@q$o3yyE~Qwr`bO@%(GhTYWt{M+pab%f36z+ zok3TdK_NI^&+~ddjcrlpp83vQ52?_Jl;e?k8lp;eZwAjwx}uwGo-eG$I+EV^Lw6?l z&8k~&-8ue&59gcKALv!JfAZ^7-%8R0>CyoVatP<4U*74n$#{}V=6fkOwXrrowMjce zk-CEL@;vM&A*^(Gj&D0~_K)rfBz`^%zIgCQ;_X^_c^u+FhwiLbv5f74D3A=jp?2aA zi<3zHZZ{Azb~kBgkJ-Va9QIS@hlt<+>3+b)pow^k%l+diBUhW<8inv(_7?+P-$+jh zK&O=cDJF;NAd|)>M(JihzSp@)MG{uZZi_y>^hHHu&V~i8!bv+)iQAW-SrF2tzndtx zuXyHu@v&Bp*Z+sOiB`_?8^Qv0x|-{pUluudKsl%#_xaq#r{*6M#xjvN#=|wA5h>6U z3^Y$BaZf1hl{O68=I%a|hWyn+Xax5kH!U~1E7r5fftAJgnQ*r6<@`rOTfV(Q{~xBl zGAOPl+7@?r*B}Y*?yiB5Ai>>(yE_Dz-~+))Ah^4`6Leq(A8Z&TxIMo2?yY*iPIaBC z)4OHwwR-LDJ`R-2i;o|QeHO*ao03hjm6hgkF$-~{_tQT}&2yoz#APgw_H2$n?fHt_ z1u`?jfi_?**O84$kkY7A(X!wv*QMnj3S7!70I6~{SqcPHQ^!bKiQf{s=W10Z6l2gsv$#} ze4bEwOzKH0yjUmy(DMye^d`9=eEa>l6b#z0aySu^3H+jwDI~F|A3po9Q?Ldzt*z)I z(C6kRfi-**%S%Wg z`v%M1?RQbc3(T$?gHgqZAU9JPM^&9dx0_bels-#Z>65DR$&ZHKH}{sTv=^F?Dgx@t z9c=I3K^0iG<_NC%H$pPEjd>_)zi%~KtkRn8zVFt(!8e+F109iN#h$XY(Gypy+@~QHI5_`CvyYQaPwsz#&+2Ye+Ek5;GKB>NSbX6B3BCvEaSq2 zXtGnK&t6$UG&8ymdQB~pz+Y-Zu^Tek8f8BB=(b^79D3M*Zo&xqC8Z~3S0v{=hkDuP z3p5^{*iWujH6`NrX83;_vi%0eq;PCEz?mArX%>TVBy}uJ7HZ>rEmX}R@9OwW-R^=9 zqO)K+ge^~EY;y=FpVNEII%Zz*ZWE`}ZW6cnWQC3E68F6$KT1A*Vn0_S+{tQL*$Ym) zQ&$o#U})q28ZQxZ;0sw5|6aO#f~e4YIF{Zq`)jtx;C(fIVbC;N>kNJSwRS)0CHrM# zzbmpUS~=uNR$EClWMbP| z4uNYi)rLuQfqfy>SF$*XzhqwHKoXV_q+7zG5hy7oakK%s_F~w5W`>6l!@Eh|BMZ#% z0)D?@Mjd@-=}8Hpt_!l&wJgyde^}-cZ3up&b_P+-&Nnu$z>x71JI#lV2k}RH@A9K4 zuHVmmk*0d1?sP{nomEt+AGvo`(svhfA)_a*< zm;}L{1$vio&*Z`n)&*j6kpsrJJ~Z;HX#mGiL0?m*|L0n`paOSJ zlOOm~we6b{THrri`s?q-kmOwXA!3z5{vqTO`A^fW_JKDuZk2^`Y1kh+ZWD|R9*^zV zFP$-#U|_bV2h3}5o-g8`fFek{(BGE;OP50!S=Ju~BY8i)uDH_`m*11*A#x$N4~Iek zfqxf5d$*Z|WU_wM(mve1MUuBZOyQIvjH@CyRVg2JH}m?>D0`91?9s9hcOrf zBaX-gZc9&;4}3MbA#%YplP>mwUGlHxjo`Zd^TU)CQkNKR@G3*b_!T4h<Ba8)t}-1T->p4G8TYiY09`bGFE`1&Hf z;7TP_BEC+17uV&%Ocxw19(Gk|DEm0!IwHw1tKoSc-n_@qxAr%=u(H-V;gydl(r9c7fM>&YoM&aY0W5 z`zCE2$!dWVg%`n{m-%~!tB-$zSM95GT>Pw^*W&xv*#hPtoi7GKmo`%GFRJn{gT?T@ z_YT{TYHPA0wguLApLPE^t8}WJQ%KSo)IJ=Uy_E2!x!ZzL=b+zQ$g@H?^vNwrBi07E zH)jI5Uik@c*L$YDddnm+P2wveLG?=yjT@t9%cCn$Y{in1UuLeDufX=#xY-|7<@-MM zkNZE;_I^w=a(w~Vu1|F>vOkrOlJ2%%4VHaQgYDgR-?!|ix}@CC-Gc>x*oucx-%p3w zemkoVd^%tOy94EOd-k`29ysm`N>x0APyOD~6^5GRZw-Sq{HP2xpz?dobVWg1CO_Yt z?PZ+0uAfd`@q?cbdF&L_5d7=3s-+#V06fkIlX5r$;A z9+WM2t!z0-DPWo#H7EIL)|X$(-ahX#sFjs)thQs?gvcKmYjNZk@o%U-CtZE@cxiB% z2BzoL1=C_n(bdKM-tF8wot_5KQ%@^;GpE;YT-7^8O2LkC%kHnjUaWG@zS_dL-YuHH zbh*$KJoboXVwtxgu6gp$L%O7L#uVcML_)x+hw%z{Pc`qxSN%dH7c4{ELAOkc7g|$z zmt%9cA3x-nAe$91+}sc)S0MuW@0n9nwSI9;p3h=44a!P*__d^#zrsiL|3W{O~4 zeE+mN5&*bOoJ1eFXZV%;8#SLD@^uM%=a1Wa*Ooj(EdM|rZ1jN7(=|Phl#bdy!Ga=2 zU@{dWu>MKM#qK|8Fcq&~&(-qHL7q8(^|*j&aO=JB?ToL;ZPJ~{Efl$8)4_cz6ol_0 zb}#${c#QTHzs0_2k4PUpX?KYQUkFWIorzQT)Q;C{YM4gutSxBtz*MX}X1$3|ZS#sw zZDV?&x5nf8ywe5Ff1$S0OnK^Jt~ZY(ikCP~olFY`-ds5pR?W zdc=je!zc{-Bms;$>Xlq+CD<`TVET`cB|8V+qZBlRom^v4c`)F>kaZMD8gPJ`S>|$D6EW#Vd503R(yZPGxZP2 z5+`@8M#Nb!v*?Z3>PcfJ=|0P>ViY0Ek`3TRrsFZwPf54Ab_P{Ed!aGWqCCh{M$MrW z5&!R7x+&@G2v_t0gh+;Lv@g~h6 zMzLm}idf@f=W(WbuA_J*ijcxpSagcyhYlQWI7ED_xzfxMW+vl@7_w33IEv%c5A8U? zp6~E6lte9y!sI_n9dRYhT=){;9f>3?L=PYdlW5S1Mlp8JpYd*=WbS92YldJP zyCiS+cP74hM&a&hpSicKB{$;87s}$z23ry8;Dc#O>@ZweC7tLyj>UAUv5v)&*1yG1 zDkq);aBiQs^pqV#yw>AlxgHrGZQ{j+@;Pv#Tv}K?%bJIaDLHA5k77njjmLjtD~^PI zPB>g* zuG9lNn>WRd_>mT9On9pF88WOfT5ie4v)4*R$uW%eQ~r4j=aV^qI+i|f7Q;{1!Uo|gMrd(;MFY+52AvwKL+X`XS~%4!*zekz32FI% zOVg}u4xSlAgL&QtgPA@*nj6uaWPmCX6OU824Z$3KfFTvOPq#v^kN2D2RpAF~rBVIf z_eu@S$0|oHCW!u8(AZ&eiV3_uqf)U_c2EMFtw`Ba*zA#|1pSyW0ke_4Yd8FRp{4}R zJ}wkCc%^yjQ)`&MF=S%HxYDbqD6yXHGj#-FVOyv%W9$<_UN?5U+ z?|ESlpa=T}`Z&=c;MTHO_B9i6YJ%T)VgK`YpaXnYIQ2{!=D{e$2_ul{{jq_$%N)sz zwvYFLP9N_B{b!lVXf4bloPp&4=#636P0)oaCUEeE{$}P@bxVpc3isvdRef7%3_Kkg zg5>>i2hB6QZiz5{0L@x~aC_`$v!K&y19&C+k6ko{axr?*cW+5su= z9&K57Ez6>k%U;9O(mTotmReiJB41pd-0p3E!N|4<^21Wy8@mMtT8;++IlPGRD&p2e zeX30@_DpdMj|s#g%Rj08r;05--gxKc2b{n*xF4qp(WojR6&?e=<+bTKafhZKGH{0Z z`U{)Ai`50Gku?B|bim1d>vu$gb61M)h0qb3Q?6Pogr0x&5jeIDomGm{)qqf z_4kzDF+VCsan+Z6?tAJTm`T_FD(a)1ZBu~rDw9*%KE7%$oNh{X=`TAfx;9kHl5?nW zGd#x2eI7oI-QW@&(npsApA4-nlsuz4gfg|fyA5#U*MufWAlj!)uRY6$DrI{;L`XfY zh^8<<4>}}x;{G$39`BJ{i1|4yjau)$mS_#th(=u%Wy&FoL1$kpR9N1r)^Fglv`*KZ zg-d90i>EjlQ>r5Ml&<={?EjZyOuky(oo-X^P9e0iMUWfK9tD@D5Lv8YQ4l$e0sXb9 zHZg*gckIM}L|-LBqEeAdHb4gm92&@Go(- z8DHIp;NS$`m)@J%Rqh zn^rA7oc0@Q=sGSIATHNHd`?X*o6{8ZI?i%YoF)H~LhCzFr6H%uHY?oEImc)c{JS){ z=HJFlKkhg>EDuV>ntlv~+I4Zn_^jo|JWn&+eSKuiQ6?cG4A7jn``D8+)6p_YvcjHY zoI#vaezg9?gLj}SOkNKmPwlsh-Wr`;ELBN$ZybMjC>hry5S<=@Uv%YT6wlJc+)0q_xJk>*ga}H`1v;kd;{owrYs^$?jsw%2YyjPd(PM;s)N;9B60OpjrMG>cU+A3v_;HS@i7E`jJ{#yuYx*k&7q>bkP#=zP>@v zVN8ngD?DxB+W;48!dBDQC{+cb8;Ym{ttOAi@MOAoDl5v)IUqo`z*&(l46p}IwWOrO^q){giDW3U`a{a=I>i ztVnYW{)^m0C9;3;5}vx0=kEMZ0hqd#Ttpgpk#P=+Thy|BeN&-Oh6E~JS&0C8g%Biy zRlD>jWyK#;BlIq4nLABQ2l!)SP>wue{nya0w^;GQYnoX;%wy$<|DAg_9;!C6UWK4@?SDL| z8sU(+m|;vUuw9(*u^Vu%(hD37Y0i^L4x2-IqoAabWRWsxqxAWa+$iP*1LSD7^iwj~ zF|OoqY*Ybl*ibq-%WF0-BT3Mx@gC@{TH7W~!U`_@`V?5tNSa2x*uwj5B}qyk zU(j9z2iF3cDa!6yzv4cUP55v;^q~Bym9SfdgyVNfny=bApYz>geMb41_p#IBj&61b zj4=0);;kNqLWE}`Stg{NEhAfO5<$v(@fG$7g|FWma|437eRulFE zYNRUK^?&Z+?2(m7ZR3Gczsi|FZ440oaJ1(}MtpeS?oYJxF0~NRJ8)mKUZg_%j*!|; zK}qLFM8yOTk=RlPl|fdU?n`j(>|+$|u+-8zBDF*4+CwZZkq6193m1)kCk|CzHfgFC zzp9XCinAk$f!YB+is7s!CJsO%N1by7G$N}<^LF=KzO}X}!r3I6@CLmT8~jpU1w^}>7aqheJW(Y%Q6@Q3A=eX)b$k3=@=r61kQZ;EGqA-k z&$i^J%fZ*I!_o}fY+j1;^~w!T1MHs2$*})uEa_5PKTR+Fd}2Z2r2@umJQr9?>xhX;tYh{qd+h>lvLq6t z`+Iq_^NkIzjjv-M2p2P2#V#SdlTh4_%XT?dAChbTMA4SB>Az>@VnCwY7|Pj!OEg|o z0{frEwpwk0=eq%%tXE#^8>1sDx6>v!P8Ke#z{OtDx_5kT4I5m+QrWRObp4`=eM6>Q#Mv%sk=u@uy7*`kVL`Orbr?h$SEXweh2w zDa+!mN<$9d*2a0mZkfsQwH?G@VHpaZC&J`DMLx8QWACJQ)}n>t4K|$~2?hSFs>vk9 zl%zA>Mm0<_wG%MNQ0t@?*l~@EV5B(Vzt3x$CejABj1)nuWm1ol6z)tuu}Fz=+>b14 zv>U|OsOXi-Q_O$my&|UzP9Wg@>zEfQyGAieV<4xi0&N)UAno#6x0w{5{9T`AZI8)J zD6QR4miebthA(VHx;{=x79F^3CFB>qW68vj%6(0JlB6$~ykwU5KH|sLgvDh)X$HQ< z^`0L~K!7#>Av8+dhmhH_!Y4V8pm$y5F~b_M7N4Y~aF zEJl%6h-96M$4(?hA(}}qiq*w^V;dzKY~P?h?Kb8~XdUrzr=@2EV$r|7Hqb+*`ebiL zX~#<0X!58|e&YHrE&M>G{3oKW;q!P&WUK4zbTp2fmwzlM?=-5vVZ=e5U@?F5nWIC} zH2#5gbTk;1MgU}!Sgscq)=g;Fpx}`3UO%xe`x+?>FIAdr@ ziO!MUxuv;oJmX6*4!161;IN@&5)JCW@Rc78IKK@EXRca)cp;MiI9=WMej&=3ga7+sd#$Y4n@Cwe>2 zVZLnV+mCn{=0TWZ5up$8&qW$eY&;ch(MAargzP!diF>=HiFg?| zPBj@uOad_h%f|YyAdP#HQoDF9c53vfRO+QiIVFahw4%+df%fZd*2Bp-J3)%?3Z@aW zN_V{UGg4G#AE-o7akKkpvhB0w@64Lqk7T#GRUD}5mTWt5N(C{x4n;*5nCLCP3Uo?Y zF|>=rsbng=k$DUzWkYy|p{jKZTs&NazSJAAfIh4Yd&u2MBgP+xP`V*y!Z6K3MgbQf zMD-5%qs36xtJ?qabyqit!9AmaAfS>Md;THlulPy|ctiZ;`^MFgPuprYNKS_gC{X90rjmyl4eF;4c?*%Xfqt za$i-s9~U_Ta8s|)%UqbMj`4v^KQeWkVOFW!;%oenObM9wGx$|>K6jN6%$lLoEO>>d zjg~D42Z&K0Lg7ermw-0uvZozR-XOlS$H9f+d!<;kM5;?Xvu-Ukugs))kVyUGj4`q4kE)3pJry&U;YHg=MN!@`eXxdM)tYgs{0x~B84Bv{nA0E=VbyMWREjGSd z&ZeYk4LYzX=*IoDMy-0!Us=3YO}LfjdC3Y;fUR1l?h-3EhV6+`e7DIFh}&0mR^A*} zFHZ*y4?6YjC60$U5k_WoschDwn2?WE~;bItw~(f$-^WQObytA=!5YFc;_``=h( zq`DY#)fBv|ykZiJ4yCj`pvL84DZ1D_IZt2~uE8~W+3JDnpk#Vgx(!gJbL z;c%4+)%h5!nOpwelO3lzpE;qi#Q-B9bgN5fO+((Wc}d=|fCrDfZ;)gSmirA!k)bJ? zt9#jGE@KDL?E$NcDttwr)=%y^sqi`iS9s?oddDRbusjMLyy&6QIlsm=Q_R@a`y0zWoe6&pqNDmrPy|VJt=K8mE8ir_PbQ$YWKUgXzv&d+;u6AK5%PB@{UJ>aI;_C^$jFB zutpI_d7EN9I)7B8Sea z)o+GKK>WQYK#(`>v~4 zz<6ZPf%rAVJYZb;-7jcKCg7U{Wma3hL|yBm$=0Xx#$?Y!<{ZNSncjqQ3++5}!R5bc z|DJK+sJ9ZH_d*1JRe0EUXbuEWGlOKHnPcEc zC7|gTS6d?U0}Xk@tep-tGcix4{hePv-uEM$<`MTSwHdV{zjSw@KnD-!Kh+!9lO~)Z z9m6$sUzVsD`8bP*!Zq{DAkuK0&CTvcg1_D1H6qZ|QV=;cBib2VwHRIWd?8O58tRR@ zd!v#me(>vpd(m|V(!7aB~F%}a47y(#er4_qqh)NL{YP3Wjy`Neu ze#%aiXVc|t)vB)>zXbWN%Pw}8GrSon|p4zEV z9N74g`};5fpe0;7o&&v8)EpkuiFoup z36mg0LrfocG+lluH-%AanwLOX14t@1rRQR*lPCpz$DG1Z z^VH|YmiBc~sxsvTAK=c|GQm-?-Uq&Y9!y5Gw;lAqV`Ohll+*X9Rem8fgsiI!a^3$+FiIG7huC!&ox z;Z53@*>N0FHfqFe;&yO3ZiPb;y-QVXY~0 zrlx2wh631H(!$=qpAb4++PK)<%Re~moe06C>56@Ksj;QDv9UX(X}cnfFEU}3)IsoR zLp=UOoW(ydb5sOn5gsnTET93ORV1bChU^0?fk|%FLK^?|J9Kk@Uxb;g@l5e2N+V4) z3rUlZ@Sh;0=weL-4G*k_`1w>-R8ZVn`esS2I}aw}v3MjKUX2_p4IDMi|EI@AqK-*A z&u!BGkIxZB{wJ1XNBytf$7sKrpQL_%7tA5PHfdaA)^>X*I&0;^Brwgk0}UE~lBBtG zO3g|L=;e*x4#-+_QM{aPuFWyB>ANE81!hronR*bd4~{iB*SL%v&3Cm-&kHvB?D+1I z@7QVfoO`8jJV>2O`w-~=_+8iD802Q*FO8kIu&N|O_|dC6Mf(;rTO4mT%Id*2@r$E` zjlx?34nIhQ+kFIPdE=g_AcX$ab3)@TrFyZgq+W6X zD3d95ycV6Lt-Z2?Q(_7+?{#4430jY3cIFKF$mQc+{g80)ABqIG|xjEmNjyq+3m6?Byo;8`pwtKaq4_OdB zwc)e=f(+-}QL%DH^f!rq8bWUNlWOcKT(KKlZqh>9u zg;VkbUEZavs8diHmf;)b|n>d>U1hOS^1WSB6Tbag@ zbuAsW=sbuVx_cxdwVFfAyujB2Yg?Dtf)6p)BAus+31xRVs<*ZFs!kzomsA7@;*(3E-SN|I73(QUp^fm)6fxL(5*#ZbF_-MIZA<8qYh?dTR$^%lM0T zC{HF&28(xUcN~u*i@p|7=1pJ7N2CT}s}S|w`X8aYS?Y{9y}PD@iRgFE&%}#&AI}Y+ zh!^!E!Q^*;*b%zD2KWo2P2aZ6UM!xAJ=fSjkw58b=8oKMx9*&j*YA>y(FU7FfhT)y zC`=>44euB4sPCL3!LK;IKa$BtpsnGc7mY>V1Kr2d8u&YjZe-U`aN0-m5n8ZAp~{Ce`NY}hVo+~BbR1T@?Sm5Bi_*K4Og;kZcOeUY zWw{U9;Fj#dIL7Wx?sK^&3}t)r?t@XDi?uIu_n`OcZQXXB195p_^FXtidLVZ}47j5L zdlxcJ-EuC5*qb;@HexyeQ|6ocqD!ghU2E35n3q6WW)Ow6Fx zoc(@zEyTpqD=yYlP+*c%P_RmHHY-i2$EE_hZVkm<+V)AqMyN@d`9ARSH+}i6Uj_Re zh?+`1Oy2J zK>}w2=51yJh^rM{Uc1rTa0GbaZln#{Fi)dM?wwuno`_cyWyR6UOMXc0zN12I?ElOk zEfn_n?Y8S9&&IajY{WhFuHHEXH?g%B zsXl5j;l``Xy$b;06;anyHuxPwP#+v=+9TcqqB;UC-0e2`3xcLsKtb{g1?-}0vd^vV z?(=;vcBuUwR7_fG6`AH|vcdUQ(B)NjE9w!(&5lr3LG;xvgR{&l=>_E$T`=RBX9nys zmBx%}=6V0<65B7~g{C*YqYLd;60MuOdQhOV|AICE#MPHpNEbqSM8g6IdxEP)*rkci zhrbP%*eXyGhtbzvxNVS5y*5LP{h4bg@AFmDIUgjJ*Cd~^qQ5n4up^%|n{QM9?K+lw1GCC1LODE{F<+ zki7x%kCu*6=WR3_m@VOhThC_31ZTKsQa}hG6YJi+VAc>3rx5oZ!Nzp!%D-=r^s$RJ zOlJ$$ALdyI5yQRr?tvKl(g3Ln^^j<$BJ<&s<=F1nvvYU+dg0mP13|t0mllOtiH?^m z4_zeO0n~e_`lv;MSTvnDFuyQ}SLS_J*_K(s28hz#}9-MP=Zx!3m2H*-)om?$P zJi2z_Q27!*APS>{eyH|tO2QV+dS)R()cL-ceyHAb08`}0Gld7E$UEAHF21*01n;|; zw)#S6*$_SYzSd!GAT#gWnbc8!-J*9zqc|ko8f%t>Y1C17-C1-A&2*yVzl6=6px{Q_ zMkw3?WL#+n2Dk7AxWb_k1-E*xRDpz3gBR)ZBiKP;2mrY}f;5~OeC0=O_I~|ZoLdYZ zO1K)5J6i?6sHq@^v(vb#ovkV+DY)%|6ycpm2nA z5E$|(-V1~8oqOS}F=u|)-?O!(3%viaNURiYzO?WA?6|91M6o_+vqy_U zpV=~}(Ufmy+L^Nfp`%%MT`Yc*JEm~SMW7c<^}A{aM;q2?2;4pH87de2V!wOc8T=l; zFC6qVrqBC4eXHnI?j`)OXZMN*$%j#V;PIzP7h0weV@O{yb1CEcPESCf38FAoON1P> z64y-RcrvT+`_Ea*HY3NcNudC{idPJ8Cs|SVKUc};o7!h=bDUx0b};YIL?3^UQs1X0 z+@L+qQn%2OmZ2fPe#(VO9<}o@U zcx`#^iKT@oQroKwrzr$42ejln!t3-V0SqpGhd!^KjojEf1=I&21BL2>P=OJv1x*4# zmb&gJXa?4pk<(-yu~{bx@VZ4eAQVht*+~k_stck9-Z}wpOwAt=Tafh_rt6JEp%_lY ztDu-an84BcAR6FGT@Wdd-YMBUfC6Y*H!O1{MGWk$x3**((*6Di-Vn1ztUibUNLv3) z1;lsi?f1q4O4SY15fan`5}^!EBCEQVoydl4Ew~mZ{WnspXQMZKP9H4-aDZ&9nvqF> z@Wh@vJiBL(WTgw1Apt)0TtAH(dz?oIU)*-udT!AH2JZwcoVvtt}H2bz@Dxmof0DBi9?7 z5vlunB`f3ej~`c!pP(*Zn;QZL6R{*rdPV0%J16qjWJmy?ak%DU4lm>pa;hZ#1kgr+E@4?Q5YaDEVEVT%nf8T%mXR2Pcmj4vSWi`7V zTnUU%Z0f2ZYbM_|t2QT~)mm-CKqy)DQI>Y=LHN`czd(E=+^arWRWG0*Z$e4&3J4GL|}$=A8Iki_^%+dp0R$=67VI2 zC}Zkz&B*ff|1p^R>i88HZu0r3u6;6J7P}HodwIq80``r^8PcI&YdJYNurpmQY)p_>uFq!OW9mIPJzRIRHQo zpr3>;aIq3jQ~&t8>A!F}P(E6I8&#sZn``>hbhHn{gswN|Wr=X5LbHvkyJwqVMi<|E zK)tVh`G?QS(OJu_TPvxh2Mag7R6D~W+N4=4E|^o@oD41FP}HvIVzk<}BHYLlOTWic zYwcE_^wxb&pBH_j2L3!1V$lPI)19pb>m2gD6T{r;Al0EWO?U{qX&1Ytg0ZpRq4J(& zMWo*!r`xOp2H2t5aFYC~4ZBHZ&VIq8fAjM&&`_u&4tOQMy*J!O2s9wn!|&9nk}Y;H z(ABkxzKRm7;+`cX_52piN5VC0G$OmLne(1dTPDAWZ1#6&2EU83!fn%ACuJ^sdS#h7 zb!|BaO^)s!I&lBp$@$wv(G&O{ShQn+E6BoN>4xLTu>&xb{1rD}#9{7Jpz%$l=sXsM zYi8P*#8}dII6pRFxIIwCBT=`xxM?VUV|2UPnlGlL(Dh}N1KV(V5r@;{dkiZG^jGyY zuoAE>K~>zRWW5MM|Hn>7yhWrO^6U-LU|?kP5ZT*tB8_Ss>|fHzoJmp3UD;hz`a*6H z->5Ythl71ViQjo9>JyVtU2Viq#x`l&dwLq1P|Y+auTTB&Z<_LF5F~EhB&0KND#ynW z`8=j|Jc>Qzh4-=H-jc7O!C-KixRagN>gSsN4nqm8hbEHd)C@L&%z?F7PT2Y=Ek|b+ zN%3s=+`TCp-={#tvV3}KVpn>wUN(uU`% zdG}N%jG4=72J%=iSn^0ng7y?$3RnvgTI^?1r$OS{;v!FE%G-xAv9Wz|?b}Ldqu|5o zxUIPDLflc8n*;fC`RAtZ486<0?R`vL{H_#j*vBWPN&^AAtB!A9QQzlcjl+rJYQnh} z*WMPG09Z7>i`Q6Zmoje**OKDbhyl0kez%Tquc>K`sRq;)a(!cuNv`>`sIdE#z%3KCgIyJKS|rcME5}QwH$SBs@5O(UUPYb z+J;mKl@8e3_9EDV21+-mIx>!vO{eYGJPnQR4SZTtdQiKni-2tahd}>B!vj=C=mmys zsBLqOI$MZ+QAmEFUX$S0IQVcd6kJblC&hxZNipdK@<$%jZ=%Ra8&NG z+pQ(bAtSoIrYDO)RvC$u2mE^ewktJ*y|D*hLBHL`Y8Jz>rltZ8kT=g0vohC0-EKih z;K`zAu4;JP`q#AgJyx^dd{M&be#-ONzWU=vT{kF?y5&9- z)bi6_Z%rg#`$DkB<98%{>e{4{l_ygHVZRU8zM3EjiZ3zINVxGSS20i<)YVYXhzgMx z4)~(z%^6%&8QqN7y&FneKPgp%^R0gkex&U>ftSufYw;S7K8i^+QfIZgLz!Gn4fr)) z&UmCXZbpAXQ%`=CR5adQvy@YOa;A`00mNpi}-6Gh!UW^LN z{-pNHMB$yv_7sBP)#y&zhSns(@x459uBw(LZ)R~JDu@4~Q^Zskk8fh8@wZWqFO}Uk zA=FjhfiVwL&m3aTGiixXMz+9@<&Ynm!hQCMI|JY+LcP?!dBM8$g)pplQ zuC{OlD$2838YC@N8d(KZk%Ic+)f#r_X4ye!P9cqh;@F$BCu%mn;!Et=N5-wON+wUMc6R6_LYz zsfrM*k|IlbJ zW_lYW_c=84_FUTe@QZJR>sEAbrnH}jFqsL>2S%R@0t#idgGzy`;q2lF!2coXx}%zC zzP1#NfPjkhs=SC&rS||LAktK%_uhN2p@@i7>AgztNDDn6p%Z$CL;{3P03n1x`1qag zkGu2C&e_@7bMEe)xwH2^T#T>WaVu}7L=%gKCN<*d0UzG(J$bf~$dJ zH|I`~JqwdF4CH10z@GudK~741%T;5O9A`PK!Gg=FW3gPA(!bA9`tms`F@1W9H;PXa zU4^(aerEsvT8do?7|Hq0rpaGT=^`KTq=jzd)Mz={+ozmOG0J7djJ0=3PoO5m3s?3{UyvT{c#yM$om+alJGnh%5`P}4we#!at|zD9 z^i8{z1d}!mePKg(dA@Usb#&1it`P4pTwh+3>lzy9J#NpQSo)PZ`9pz>w1bHEeBgrl zt4Br_i!$w|{lV{Op|b%3k}tPq;^GAx{%U6Qh7*#?4z6L(8Twc!P`U81{TcS=}UK@m9_| z&v?{e$3cPNCk`Ipea0La=#qz*^ep%HN0PjOQQ1*~Qtdy;@9_q5+d0(0!wYf+H35(s zSRm{TaI4Z_mtSsb}og!|4Phkv3o%IX=#-p-B4iH^P{qJ zxQjBo{mw6Ne@L98ZvdouC~xw0%Aa;}TkfwG_7IPs8s+c)C?!~nQqPMy{qQT-C;D~v zZpFNT}}o*GG_jdl{=#?_`p_)`cmWYOS%oyeFbPus^e{-;}&$I7^(8c=De{_KuCY zT=ws(XIcKzTW6EjW0tHEFW)dcV6e*rL*Yh-Naf*m79P|osAm0T;QspLt|j=}yu^G_O*`XNGI?;WyU99Fx8h`p`a z`Z!a%G|uR8;iW+mk>#ZSx5y?+Rl+nOa`Et)u-IKfw}ejyF-hjQ`{ZJ76M}%Ew>TeS zLJq->nsg2;bRJ*7U`E|oa+N8e>Yl~LT38u(K*~uX*_lkN?OQzDz!yFO>dGW#eJov%~VGXPAGw;sa8^+cHMF7PieY-u|nJchT*B0z&Qs zE=vI#X>PJ2o@V3Hl%~HG`H#ytT(kdu8~a;Mr$$ih z%~ta7-TC@n>jorz93P;=`&Dg(?c;o7^279_%>ODaBSB@6uN(U?1EWWOE$(wtrW&+gxdzxt?)R|6~T3`O4^e?(MW zi-eg4f4vxJ?~i0tZ+$qL`H@-fj&G-{GS?u4vC(ClirUyp=1=CBZZNsFeC~MPzND$q z+EmRuNlzjw3&BTU4K^}G*9NL)>+N-FJ}cLmtbO13e&bd=ZNV9NB+fo$Ge!`^#p!kV zgs^AMah(ReAoO}pb^E08)J%f%{R}9%T^r(OY72t+(Q&uYvNo_HnL}N1gLauDmFFkWk=SghRvY!=yylNI@^3>kS zDxEKCSsrm#=XGAGt*6v!ajlv4s&gLqPK~+q$V?1XJ1ut)z;$#@hj~WiLa*8#`)_Yu z|LUAPYR{e|c4FQv(A8Qn*wWc-(X6i&M^=z>!O~W8o(QQf`73zF^k{_py%hX%%2vM$ zYe#dnGf`slCbMio>RjWWozj7ItZ+>DxXvvW2_G+3WEna5 zIBM6_SZz)yihsAuj>q`OQe9c~(KB9ps!zd{JJ-Ck6t+xyrn(I#t1Ed6HR+7_zA9)W zuRkr~^TB;A8r>tZdtD*&Ra5z3<+e$xqFJe@HnE%Y;nB0^EXz3`+rGpT05g$qb>%14 z*RXc5x2u2u%ALbTgL}}+-p~?LKBA5nF?@#lsHD_poVRIHY4Ga;rALsp$~4|ys*{dU z&k|ypKedthVn^ZV_tyxR_o9lSCZRuSDyne`@S#AUHD!v^{tv-|LaKxtuQJ|-*cmA1QGQ3JiVPhP}t*I(S?CFbiy0pb1$k?hWTBjL@in3n$+-2a!iht7_u zZs)_5F6Tp#|H?9Uy~SsKMF})(-atOx_wk;6UJkXGka{p);b+61)mV4jfKu+-*Ug_- ztWV6Zq6QWhhG|I0H?-{(xwE2|TXeo-^f{z9A-VSh?%e3#6NVl;r2J>DTk4>o(0}kM zdKr-;wDxWqO6^=TF8t)%g~E&;V~KL3gw1;`?R{@M%iwnf^-E9&qw;DRtij}g6BVDu z`Jwlbx$SoMx8k?5+WXZYpY*GbDKb7Pm+6mN`;1Wr`B&)FsdyO#D%H}q5Vf~-m7uViXcKm3{+PNm|Xc+pa%77gxv9B+j zpMdUO`aePiPsF<{v(R@*Z2Ysxe$#D2wm2?PY>&IP{mLVh)wgkdr9_EZ_IG)+L_X;u zU>fXQu@GxF;;gqw{`0-JvTDqbU49GA?$d^sbP@(k?q8?j>YiU_uZvNW+6P|y3T)v- z;ht5W^v->m32b)GIke+M(Zc(yc7SZ@)~4!80gs6dH5s`AQQ?<6gs-}NisHXT{080E zjx-Q(HLVxDezkbMKy0|i1eE;wu5Fkivh-iWDa^koafW9-UW2+gs-2-&d4Qo9Fv+0n zCb9ncOn&fTrNvKkn(3i8?>q=@mh6M--6zyqpp(8PLgb>B3bh^ECeK)Sop`u1mh$Oo zt4q`q;TIk2k8HQb;>hPLm^0iVPk}2m#(!&V04K!)sqdj+7cIB#U*Fugz?0XomB%NY z;rRFOsgS9D zb32nIccS!8-rsYMxf`*o^X2s`%?{t!mM6W~eWPQh^xUk}c1RlFkK3!()OkB-4IY=* z3>>G56!m8;wpNATokZ4BzGCNgxmHQ+udf)-6 zh1*zbeJ^0=*3Xm>@A*Ukh>yXXJoRO!XHEEixyVeAo413^YzQ0R1Ym`LN;towbi}|Q zg2aN3nKe1IhonKe688tZ@BK-wfGzF)`(EnBORekYzLvn27UJ$7{PQexv=JYjt~Zj` zm>VrfH%L4G@UVv6QjvD05%L3DdXaU5gI615tNy@_M#NV-X~B>WVrQfqZq};Ox0h%a zX)yt4mt_%up<)jeYh8LjJCwTfckkKriJQC-#%TJ0rtmhuKLdjuMAwV~B%Shh>6}fM z78}?Upf64i5`A)?B#o@0ZFVcJLm3iYUK}kD-4?5o8v6B=GDschRMkB!v!OwKa zyL@aho;^^29Dy@r^ei>eE;_C9q?^X-a+e1K37=UTMG#_eC)a@i((D=uNLG`qEz%#{ z`rN@MgI#y4AlHyWXR=#lLoR?8~M5g!F>1}xm)?!WmhLyJ4BvJt4 z0x|vJJ!}DvrK+!cUuE`)`j6m}B~~^1Lwnk^KegLU<(B|*yAF$Cq7xVPbX_e7@1eyuj6l^IU z6TkK){n7mq?Z@%O9J5d2H&VSrn%2xFNEa1M6TbK-<72c=^!W+#c0!E$NVt_3Y}3bR z!se4&q)#!s!NzYIafIwpMs?(qur$Bu;cDM8s_1>U1V6VzI*seQ+K=xrL9Fcl(TUK4 zh1i60#ZlgaxvL!FwS1`~YxJLPo*|D;pCHImq`Lr@L88=RXSnBU?g{TALB9W}EqE(A z1av;X_|o)hoh<38pl1Y+EoWQL{h%7F)@-IfHAo?(v6;NhqXZr|5UB>t=iyYOw!RMWWX|kwk)Fajw>q#)NWPja~$Bq$c z?%y~81DagbLZO_;Re_$-r+#1S66OSVjb7vqb~u5(_);g(1-#i495b44FR2ZIxvFJC zov$=T%RNcXg&v1!=A>z%KJPt(JB(I(s(5$9LJUoERjY)qZ4GU5Rjc!(&=q7&tCHyk zwwK%Y4Sc%#`Y_9<`$nW`Fbt^WkyN^w?d3uXQ($3anUlT`-;+^vlLt-6buAOb45)brcaGSNS0AgkBc?jM-Gz7Ur38aJv|X?3|jIyF{)fjdZVphGp{3z;zsH0~}rY0Iiidi(9YKHB{18%eVCrBlor&0W_KJ@7u$)-5!pq2FTK zKz=xi)Q`g1_K%AAJ-|$Zcs}@~=f8lQ)!mUU5J?(>mFfpghoBzmUoktIC4KDLr4uI+NvU2qP zm1%I)G)}Dtvn+Uxq^WJ$x&+Sx`wv@qWYafM=f2CQ*CAw}v9w*((;L7Od?W7ytON^q z9I~2ri26L&33oT_&R4y-efD>H#)~ig0QGs4wPEWToFY5p+M9Nc`i$>+d--q1*&nou zvj4iUEO=`)ee2)d!;68H;BQ0GhAjuO>6f=+Fw6mS!k z9)I$5m0Nhwd26`69m+>RrvX$xqG(Hz>G$8h2<4;HlieS?Auwh|UzUxN_X&{Q_N_jj zq$cd=&o(4(f9H0JHUcXnKA)-`A9$WSd08h$0Gxz*N+lrF&qjJd*>2{hC=Fk*~>aXIA;# zNCLjW#5Ip-cRa%WGI{pP>5^gn@Z;O@VYPI6_#@%gM@CtBe{bAfOa~wtJq8_K)VM5S8Br6O5wHJ zdsZicq3~+xMKf=2hw;()-C)Moh>T_41S$Pk1x{{7j3zt-gLdlC&pnCcX&*n*%#wP@ z7Yy5ng`}^(o#Y@+Fm*n9zQaJ6ur-&R{jmKz;^bDu_lc2U{$JZMXJX?gt6$G{MZ=HS zGs^sUP{441^@S(1+GOLo#G`UTeFUD|5XW-O;JH=R$yDM5S#y_{JDEJMajl((*t0HZurs| zDWC#DabP5!zZ`7E*+pXK2Qp;442&{kg1b(xdQFM|`un$QBT)6%J$5cqmlKa}=T?0u zy#eQgV&idul`r3Rp%F*Y7fa{1nT83{WTtjUGIWD(-@w@St!{Z>T!F^Osdo+drl5*4 zErG%FRz96oy1Rch^bLhE6Y9a&!B_pDjby3Ed!=ex+x%K#)kA3UFPYUBw=dwXzfW;6HoHzFlB{WNPd3UXrJCeDx<&3tDD7?Q8A(%b>t< z84^(PU%;3;iE+xC>tA5*!m6j=Oy9I}0C=wXJx%*W=Vgwqr^zd*PB9a2d|!H5_nq+z zwEnOB_eu=&lG&$oYBlGhvgM`1_R-g1gZ1O&?TgLO$R3v?&7G^SC|Ns~kBd>(et%XA z(M;b=@5rQ_*e`LeS%J^mrT?DI$dIm(LS^FJBEYJJRnJV|E-qTHi0IaxkF<6qBhPPC zx0Om}`iQnQB2jOoEnKwA`#Y{IkF*!dY%=bSzQvBz^Kd55*0;?0f3wF9NsVjYboQ^- z-F?@T$H>WyYbWm;<%2EFnG$ZtRvXcIk9y3G^yvoQto^R9gE-Q453M$TL|J9D&;xG^ zI5DrPkzPOF8i%@kh6Z`0o&xe$OA?R8rkzLfgFJHY(s!0!4{*|Q4F-D@pStE7Rs4Yt z<$ef?HLA>EVsGWL9UN*VwWeLGGGbz<g-uSUjuXw1_I3(vkjA^v{?y&4D3xGI&(2 zLHWwG@hGk3X5*HlfX9jlDAuSoNKEO-Fy!uDe3XMjaiearM&Rq0N=HU|FL$ORTb{Lh zOE9o6@bUi{>LPRI^E&B66=kQ(4h+qW!YwwBB7>FMgED{oTuB$R+`NiB@ioZcGrL^( zBJ#ATHiG2PaQnU)qip{wA*SPE&KI5Pm@%dYjxv{=RD3j(>SAF>R9Ho~x9vsSk186? z5NYsW{0-Epwe$n74Nk5r(F%4R-|9&l4}TdL$yGD1HX6CK+|ntP(5bcd85rpr16XWX zeEXH1*MvO>Vb=~ z+SNwW(zM*I!l2kxM}{=A_A;zvwb3k7LTYx_g5_4FjeO4P96G4IT0%s_#qsmTX8ZQE zIJnL{xPXjtp0&NfJYXu7d{k_0$!cJ@WPHxu!%^!g=YpuUyN9dR6HZ#O)<47J$QO4y#Yd^ z(VLzfpQwv3?dxE(u+`)G)tUR0XSptZpJ|7vDQ7CiopRQEa$NjtjoB8Yx5zg0P^I@h zruwgNNoyF_i$Jf1{-9r@EO(!p3-N5iHtVoe%*T+)NKGUm_{2Q;7dI(cXgUtK;mGw`Bz2MyqlrT}^ATsFtQpYixLzL1D!Lv&#Wq>21$KjUpY6Az zaOtMi@XVV8_v0qPm@-L%Kvn#^T&_-EYbQJYZt*5x4?oxKA7p**6$75fVxC_9mpfzr zou17rhE%{h;ZEPKLypBW!5dlHVw7yy7Mkbh05<7a7mVJ=r5yMF{({)J8^wccRYi|QnS$A?2 zwA+@-ZN-h(QqnWe)-;Y$i!bdKtR!EYuv#sh z4bM-sTs&`=AZE2Oy&pt;V9hwzNQi$bO$Z#h2C!P<*^u!cOCu75Tp^sjqYt&w4RP^}*E690D^_m95Q# zL7Gbp+=kvyPXl5__0jj|U!WBySvkA98JSuIX49p2nLxkP>8*^j2@~Aae8N_xZNfpN zPNr=7P|ADFZGsgyw`Vzkl+tWXu)l;JIqrhDvz)d3I!w46& z^o2USLLlxrn$Yc$T4CISpma^X7XDv(!9~y)A2h${VobNo;bIrE zVBhfoZgv$qqvncM&xbyKy*j9wx+>vQxjFu?B1vqxOl4g-uk;ipJ3g{z&*cly)bclc zh|QfirTl#J;X#E`N$8jSX$VKPCgSb23HznSMLL8E;_@c!#-vHB>`!^u2VyOV7R1Z# z32p^JZ^rNUvJD_jc0dF(2W>nWjy@Io53o0p$Ydw2;8C#uXgI9j_C1AKUf~t1Z|UA` zpOE&g=fsy_epxNcpTV}3d6eN~i!FJtaRZP22>mYAx?nq*0r|zYd%>l>$-SMwtx)As zs>gF7Y3o%)(&PuSs>j}RYJ>^-9D(1{e_=k{ONP8aOV<-i=VOTY5jVYL5c@aOYCy*G z@4J322d^X$9Gw)M(n?4EGnSj*Fr?j-8N(O?+Ce)f7m^JB_yfKrGlD}3#0MZikFHpt zU0cB8xFgGXSYl5$K4JhNfHrtTa)@oGi-V*J_CPQVUH9NHpHcCk+5_4_nD^br&F999 zoN9sXAT(bK)$pF?5kbdNd^qM*5?$=1JK2DxTPZo)3+& zqbh59_+cCCpvg6%i>(m$q3?j{`hRGbJA8L~-+{A{|0CGGOYTtN_PzrxO-Z@Td!il< zY+@1KQsR<4z9bx86eMsF4lm6iu-|97-=lyfWchVX1bUCf@(BQ#3W5j#{$1{r?^pct z8(6PjJ5M2=k3^9b`hLWR^%SfUN9n;JQH!;qJytSeEF$q?2@S>pt$LR(yDS`tReC?nmQiQjgLEZgxDfcR?iw-6{y1-=j&X2=yS7 z`XpFj$-!Mz7H^P7eby;O+?Ti|ZO2SXGv>NtRp%Blv*aZOSIhQk7kYN79no&uw%lVy zsh4oFRmk-{!wgol#6$hGt3?UKVagza8R5cyn0}1%WWd?q{-U4^`F`vuO|d?VQ7pbP zf5UoU(LuV-%-*r7+#ANxs1O&55zK`oK!;ec0^6=FUboNCGeMM=%!{KK0@;2KvZKFe zp@B=?^n<DobgVCiqj6)55S9KLxL2H)@uyB+lD z&uCLKYErxT+bg)V(2+JwGew@Kc@vVkjbJh=1uow6W7v}NlRT$SG)DZ{nxuV|ARkZ; zBZ3tIn~gC0#(dd}VO#C41{BlZ1|hz`K?El6uoNb0UEIpST`KKIHaH>^$OW73udev3 zkIfByx&c$&M!O0C`7F=_xh#LET$V3QVV&x4jWz8(1<~-TrDGwVP{+lP@P)>Fuhebn zi!jDZCWO*Oa<4~=?eWj92HMUrSSlyZj!o0&Mh8vPO{v#^@np4cf1MlWCc5}O_@UFr zS*Nb&(;I|ni|27Fe%Cne6n0jd#IR?9koi{a&iM%!LI5$@|kUm>@nI#uv$q* zu-dd6voor!iHx-VbWDLMVjGJu&qUG|vyZcAToX+U2kd1_jp+0NOJ=+c@aPOmtKw?9{bL4l7EseS*MR7B+rc{WARDkr zNxdCaf{Tfajj$W4Z=(OHHqW%HkNWiQUTFX%C}uR&KaDf~#q zk@Uy`3&OUX^Gdz*%HMj}S;Oj}Wuk4ZTOJ)?Tm(0kWuUP~le(&#!=&n}GHAN#^oaxwo>3#vs&QM zv$FVGemBS}Vo%TC&~4&URWvT>0wK9-n)SI0=`ku>FJHoW>GZjW%QN{(8?U~n z>mA<3gUOz)TkcZviHks>GA0lxeHi4{{01!VS;lcWN{oXTQR=2oPuT1b4t6&jb|1WTOQ@t`O zI@Q6Ji<@JRFtsu&_)dsYHJVRLxwMa;y3kO$rmZIi|6b0Y&KAipII@`=gl22s2DqdJ zN!c;A>7SqMj5|cptQTEn_{Qv+rZ?bd=6YmW%e&*?FZ|Q>O9FHaN&;G2Kb#-k(^K;Q z#L;C*y87qTxaLaNgtx1>$l$zsY6swIgRRo(TGp)z@P1frDIuys#|a52b&UI$9M3S< zn#ZtZ=o)i8f?qkzQK&C`h);9*)a~v3 zlWFa@BDTdhrdif7#Wkwsy$gl&&ra!fMXYdxB38&=t&%Evf0m_rLB-{$RttDOt739g zr4{H^KLN$=r^sq~CnZaqTbOj6R&|+pc=+CxWhPjWk9F4!Rk|S@V&7krkF-ud*fP|O z*hI-ioH}>PdkFbgZCX$0Y#E;430!A*u-~vmjAg0vn*L7Aw?6_)MLw|TFjPSd_1EKS z;*ydB-iZ_u{O2dPHUhXDuL4Uj)9?g5Xn;w<*A3xHCns%KFoC&J>H{M&5lwH&M z!Q=?6ed>YG86Le;JwxlLkq-6K-zd@H;fPihei@e>!VbN>>qcd3M((({kl{I&p3Pl> zo=v+wQ32=dP5S}S;h72Nq+%RIQ*bSAutlZzrE9v8x&RIRXzOVFT!XQPk5$LPVD$J# zke$JB>$B7`>YCow zf%1v7J?vRKSZy6OkqGL5HYml;K%0D)1ZLuvphZ4$uBmhwM%=Qj#Mggh2%goTqbucNe{V57s#vmokvUNNuK6^wF zCw1;+*I7}gfKIY{!@Mr>xCY`qUdxQ{g{z%>zerXCYqVOLpa zjo=|}fWtB~va|b6B{H-hwlqqK{G{@Wwct;`_&Rh}Ewlj+3UXVukfy~5KxQ|B^AeBX zlrX_QkF)0|mhC@LLVE^*&>%ap2R-jPcrSaJ@>h)JNzsniYm~#?>o?Dr7BHaq7v~BH zF)ZG9q&qL9>|j3x-NBUKq2=@MLdseh4gmI|?t{iqU0N6aW+_KQOfJor#yfhIF9TWA zj5`5ADV`CsJb{-FhrrNe1QiqLFiA!lzG!!FA2bj!ZSCVRf!xBab4dAPjT;kmLt&>f z$J0!RqYf)hI4J#KGpZMb&9e(KL7e+KuIoyOPhdI?ea;{q)?%zgrrXEC?|jZS6EfDW z*&EX-LqS`(2vC_Z%QffW0qa!f`d1fNVCq)6A>5MIXEbkprpA4cXpO;Fdb#EVy6X}r z)*#TCbkP+ky#D2(&6I{;!olp_JmYW*Go&Hom2fb_ju`?5AFwPHavuG>k#MU!fZ>kk zE@yYT8WlK$z92t$v8FOh`nMiT;(SN(Ie3Ake992D3sh&qC|>%X`%*3?BWK*8ET5Fu z73Uu{wB)iUN`nbD}xIVtn#?sW>6%!^O_EW^vCj z3fpurZQs?Xj5@z-1I*8uta5k!gP4rl0!c-uDMIoOW_J-aO=ob4(dF=kj}d?M?&7D&lc;RldCu$gsLrQ_7rsulRKMJN|y9Ml6F3dw!ARUC1A ztG`rp7K^=8j~*yReX`FgY$PPNN!e%rpG>16>dsVx@5zpO2_LPqOL_5MdM_tqhVoV^ zLn5$N(%s5FTTHKH;D0^oZlJv=D`l296yb2o?g&bB7qCo1H)c|WdE+dM@&pX5!xltB zbu4ix5&r!~6bln!;4WhS9pRX4s!DpWHz|=zG+q5X; zAHnT_2cR2zLSngKGEM|1?}oqyDCh<;4tV>gDP668*JN2ULKaN-gL42B&xA4bZP70@9x9aGSiGU{Bvd0xcfTQalUOi+gf)M>h4ED7{RqfDf8Ko8w4+6 zQCFC;&97q*AWqci1J(W6|p^j=*K@pb^S`*S`C|*aU~NRg%Eqt zn;>A^%hFAG`5Fk97a+M7t^>&S2i?O6vi9-|F;h6iBTSG$bk!JZeZn#MI!vW<=gXaf z6NDsVNiWWTh*mvdcil0wQtvI&GZfJKm30RfWrYsxWVr^;kY7KCBLP=@MN~ndThvU% zfslN(L~p(TYj6G;9{LGQn}d7^{NqJ$C^F%n%uooLzjJ*^sjYcxkH2rb4NU+ z>yb-#(!BQ@RDG%e`k4%UOzLJ7B$p1bgcQE?zhO_b58vpL1t22M7Tlb1;2{QtEfm@%{ zw2B(XRvZN4LL89cvdOvpXrZNZCD2PLr>o~n=aQ86L2jFgaTu1Q8@?@6BYf*-^^TY~ zow@G#u0nombkPx=@0eqGifTk^U%&O~j5i&kSizDlnPYC>`gC=h4&ehfX&X^-H*b9w zHUZYK(V&k$9X|jf6H`|O(8v|m6lT{0`K7~+Z&s~_;{SCRUnL%RXDT!0q7C#wEJn))PXoT?wy+<-CQra68-`TwV2dqgq&IixOsTe`;ecF(e!$&P> z^KmLwKRqPfFy$yd?X>>D#h!AsTj#3&z;TPxQM&lXd}+o5m~ynX<<@*@N{MA& z9J(y@)1lvYXQ8%ai`*aGve!mq+F5_DIUTdtR-9kRyy#fMD_e<4oqj*C=|{9; zuM_N~E&rMiajYNLLq)EmL~5t}^^gq4QP#@)Qq}&uH+O*X0qAYu3cs~1_jSp3@xsmL zi<%45k=nUi)o~o~RQ0#*-I?kNQ-^Nf)8a-;Yhb1S`clG3p7v$=fj(Z@8b&J36{vGu zoRzBRzgPXw|b9qUKW-HfYt#5Tte{%*is-*)cpQ zeC#syWT~MsVaOyE^zNc!f;}rr#_iojSp$2PuT03hvszjppOn@fG7D~S(ze}t#hTvr z8r^oFUX$PmJU<$=_LW4pZGU17GP)?88niZ*ylOj8RnZ*EOS$;Et*Hxq-tiel)yVBF zQ;41J(j4j*zWlna%o_04r}Tu=%JxIh=d(hsyp*nr9hLE@TEDv*V}8m_#j(m#{78g!kz)ySy|di2C=ocAfv4c+p3yLdKCR2%P4A-Ay#D(IS^d`wb~k3+F(Lp6ASGFt zeT7Xu_)JhA>+{`om`}t^`hm;F*)0QXbIKi@eFB^RS^-@_t-n1AMAU`SC;a+D1_Fu}u zC!Pb=f*X>}Wujq36gJO{c80t&8%FNo43NG2w9E=g5L#2V8k8jUsEPUtABs}xK5~>w6q0{Tgb&36@ZT41buQ`@dQxxp7hSDyvo344 zf4+=&z}rofADAf?XUQ560EbS+EB${l7iTFi3ss6xUnyJjGcu>V{u;>e!2I7Qa!7>dG`CXTOdI0Y$)zU)Tpi!_FSZY^3fsBr+D<>mn*q`c$_pS&f- z!Z?7YF%CDNXP=Xm`91$cf5|G!)PtG>Uoso%0 zL8-t*%WBd28|^DdcaOuW!@s&|Kob7t%UgA%ZV4zkWD+M9r^SrVhL*+Os9(u1|N0jJ zRoMl|B)jbL-%Ukm&n3|8v+2Eo8Qsv=Xp_=o_?$_41S|6R+W7E%5iWA%b$y(L5jgkF z&Of6Z-Y>pQ?Bu&C+dQ9?6@eiaWjX4o;;UFQ{Ea+1uG=-3`_bo(96gJcj-QS z*aWID)x+`+ALoJWyC)`l{u?aAm-tKV)_sWA?ctJGzpC60YwF>`$~ZCkYkLG8XrEIh z^i+my%vQaGnf~_wUY98?b`+?7Gw^p|R+cGH{jOKXJxYzPQoPwnN`@qdf37W0&S%h@ zBY4t`3Um`xWx8m7aNT+pwRW4fdL(plYj}!7^oaCWUc!^$_=SPq{Ul^=UDaJUoA>Y` zeu1NmveV@h>z%z|lM`TkDzQs0fF&Q^Z4z?|`POhnKJ0kQm^7N}`kv3X>$$`#?%TF8 zlPHV70{l?D`#F|LjMqO$xW=DmcqXZT7dmF24HvBmF<)!CiUgF3gSY!>$5?v-C`UI0Qi?4^kjC@zVdn#_L*xX$nW~Dxokbf$n-KT1D$pi z9kZTfROhGa(KWMpp0=(3ubaa^30G8Z!iX5d`!$8H+TEfi1J$5 zqibI_2^9>*-@dP<#4Dc$6{0-V?t!-MxNjvS@*Xta>Jxv?!^IJ}&63OFjAXs;ZC?LS zNxYd<^Ex$>eYWWfRYb%bb=c=;Yc>qF(R!V|mYXPh|Kmxr{6y7zz>*2E+=VLAVjz+Y zSEj;-D_KIwu3=!ng?J{yrTEy;98&?(M$;^MPMZiPwML^7Rdd}t2807WA_EBbwlLMj`s1}ER5K*Y9EC_j0wE8n851+`DS znSZewd-#cVC}cn6t^!QFnIk|GV%8dA=UU2gAw5zL8uKOZH=0V4w;y{>fo(udt9lI| z9k;b3oEGjfuWKsHw>VO<_0;7OFLiU=8Rq?NQ<^jR7EeV);F|9k@Yvx(S8ib<%xOUh zl6oX%lkW(Rzq^vATT9KaY#ypcSZ6Io)EGQUwA7s%zQ5)>0jx_oq#wGdCbGiKk+l1e zZFXMEu%Y1m?>0QwgE@x$F$9Tc-G=fLLd?P}gc7&7H$(n0#cZf-jhu3kkDQvb26;1V zIQj|_gKQptdCWLK!nBiLeu12Gr=0}(-%yB(2r0ozt7PKYAK!>09ChMN>g&WaCZSL7 z7x8mpPPfbQEub#8l`i?j!!_cJLmH`*|10UM=ZluE#>28pg?(Qyu zH(df!q8vzf#~mRO5}wj=^wCEgAa}&?KHuLT`+8>fd3K*?Hs+a~ncZ=*l2q-5v)fUP zT?^pbqm8j!A}%om;IOT<4v%uMoqXY_T73VNtHOQ8_l-m&<<1>~DD&ifVl%Zp81&3O z$^jzz#P{KzGV{cIs9Ju(T1~;ojny&sIR7cV#+w^vlKnl=*y0v#*O8&bc2Y^hwlW@=d14RPNAa?qfY5I`GSI+f4e}UwRuv5VjcrAV;m4wYV;ocL zw6HPb(VLEZbXvq0Hwj=zP7d2i^)7|ByC7qZ;lsUJ4Xa9y;d-|z_GB2t7$TBq#yEsL z`naq!ws>YGtYadKRaLI>(LL`b-f!fc&}6+?-G!AiA5JwaFYfPAAY<6HUbg~H4}xu4 zPbwph0`&07zhNTiqMHYXS*K*8R$}~&*2!awf6CzLXUK#$OkB~a-g`_)Ml?)>ShUO> z_$ZC@z%jpkwyT~4`@EaGOT+2O8H3vftm>K9vByzCvBjM$`1(;t3Oc)?$Fg}xK6XR5 zAJ|nR1Z>>ptal$aZh2rFa9(DWnf$u~dFu-fnzScZyT!!0=^@WlJ(1R5{57@CrQ||_ z{)6U>>P=+L2XR|w^lMyHP^D#}BjInyDFt{2{im^A5KsEd5BdQ+!4u^{y!{#d<_9GO zHOOf-qfnD7^#*?s&l<)SRVJU!b1PC<6K?9C1yz8vgQ8xlqE+Ea*%D|${Ya(()mx#E ztc&LdA0`u1^2nLlPB?I%@hYTS)ZNhynBMvve;6-1NXZiv!x6QHrXJ*TMYRa(p;+-; z$m#pv`8qDEeiOdrpscWbF<0>ERfqw$Z_OTX`_1Q_DXy{eXX1zUOk+L;P>q*5HNeBQ z7>$=E(t>#w2i=AjJF}o{PJ?{)QhTdCzw4~GnSojCnQq5HbTYv7$>V-a-#s=}^cch; zTOv^~r%x)haA#@?`XhxvpFr;nab!1 zq~t{j^&itUZlwCdo~!oDkXFdOB;N_vlvnNVWvEzR!-oz)0s4~$}g)Kuj0Yd zrH()f+zqH;k;l^~FT?2;&_(6RJ2_Pk=%a!FW4FIbOwCl%F=ThU+X z*Ni;I82>&TtQfGJh)bD4TQ%M+yQsHTI0Z2VIjO-;r?MmEKEJ$|4oEKOco*6cm5e;p z&fI=$sZn7<&Ojd1cF9E0Jut1eO*iIKKK>HgT9vN~o{rZ)+GC8fP=Q1A59a=ib~!*B zdGpo4r(%IIOst3a-B!~B4$#iTd<~fP)Oq)L8I1vxpz6=xLV z`pWxOHS?OFu01oazeTW}r~v#x*5uJ`j9LsCaP^te>Ac7i04SWMY@6p`Zr4T_;dI=s z9(rw+xvdsqq6U`t%|jjuZ~rrbw&t8sFsZ0x6iRK+Zebk#GFZOreuApKdh9Hp0>3fY zv8bZ;p6!q3rG{O$DW3_A`G8#Pn53!OcuxRc+hGhoqffJGW-^;oi-`)R>`+^=I+X)I#e0f-v9(z}M>YR)! zp?+DJ*k}+X>REzB{0%tt+N;ALUL{DcN9ijG%e^gw3xClK+t3Cp82GYqaXjmUx3Cj8Wk{qx?Z4Hrr7$Ue*nUqkqc3)+a`wa%( z&&-oTsaMj_sVb=kj1>x%x$0h;uRqagXn<5YV%ugg_FD~*$tiyxOURg{Ay34GYBh3f z8wBO})0o4u^VRDM6{sG3E(cGR`R+!oENJUR2(l`6{xjqgQyr zsaqMTZ&G+s)vI~iTBR8pVO@9uf=Pa0;?F59(-n||SvQ0q^5>VrOfXl$e5lt5d85e#(xUNhDXJeDG9($&5A6)ifp!MuK-*Wk z82z^kiYgi<*1!0#`^7WFfpKMQH@70#Td!QYTbdpn{r zpQ$!RP$N1mhS7o38LSr=BX9SZ)6 zU20y@NFLi(#%Vk*pZWe}gj~HkDl{kqTozzvZ`^d@7Vt5lp$1%X5F+Krji0`*!GMm@5cQP6u!UA*$TZyAgEg zG(d+cj1|UyFW;`MS({U8tov*8TkP$zfxMmx)5VUGGGIZ7a%yh7EpVB<@yR(QkI&`QUi9pj`Bt%=a(d zGYV1M!_NQNjOVb^@{dWsvj*{fd0}ng8dM_j9=^LJi3OL|D z{FxVfx8ByLwEYSrJKtQzdRiJ~ZXbl`PD_CsM7}>51nAyZVLU(B;0vU9uOo#&Fp<_o z{m5Wh0;}Un%``L{-Pc?jU)4&dqSJ=!8D=DxYaZsCjnmwiyo?lh>$SG&F&0$uG&ix1 zYS^5^vF9JjpE2TB!^$gS(^>J;`0#UwQ$ujAXVvKI&^PG|| zYjaIyO&a$NhMAWr%nAoyizQXoNVOAG6`6T?+w&$eXt`hGz6LWKHXhxMNWNU~O@}|8 z1E~!SHHGwlpnlkZCQ3oPCtrX3$6x!st+LaiXzc^2ssd`cTKOqJulXz0OF|xHv3Ghd z4koVh)KmkI{IUMYhE?-W!7JS&PXqF`4-O{FEh?)}^PbV*vd258y@>ULJ*Eq$$X|V; zh`!5d(aT?bGjRx=XLS}&ZzZ}KdwqXNf%$`kUuk?(ExvTic|5y!xv{hex=K18@oVw@ zC(tnb3b7UHHa&6M+tt96tHe0{EO&M4$}lajo!zJ5%e`kqRnO^OsLSBQkKS&pn%p6u z=`WRWM<8+D6`3y2&$P*xF+Zidtll4Nptu6a7gRvT^XA>REDiagr<( zf1mKW{jILW#UDOR;}f2|VLg(pV=L45F*PSloaUW=#mBH|ACdl&?d`F^X+XNURA)(G z|2#lSa6cq7uph{q$g&e$*dc;ugOg5@``+<|Bwc>Y%?mJ|R~YeWS9vjQP%k@jJE$t* zP+4>h26;{siz7BHXbWQEv`|XSA zfM+LP`PP-tR(W}Iz27Am-Z4DZu&04fE!z+Qr(5!&3j&8R*t~!sJyy+=uPl-SDWNtl z&#thnzvjA`G^w+Q$PKL=$oKUVywXw;yqYS`yX^lfqm=P`+T@Pz zYU<4HuSDU`?@kwie&D`fi7T~n&%>#-6RdHWDX6amHlkh0VUc5?2#Y&rutT zj+TEu6WKpq;76gwCcfm$GE-7!xCCvKt0o;6GZYc^dD%V~Mdl_CK%D-)hsk_)AgpHT;kfBq`|EUR2M zqjZ_Bo>Wpf4<~T0I_mV*eKB3XprF`mffj9>B$ZQ?vG~#2);cGz(Qm{__3&S3ay%?S zoL8pqm^RrDE@$jm_v^nADWp=?+0V>JCWjbRKbEzLS6K=_{HT)s4m6AfQi_K!X?IB! zMh)1bV!-Czd{mJPM4+sV{4SFhcbp^S4s`-H?}JjHcB_Rk>lsIWgvI>BLjw9}|?b&H$^tR1eWkb;UG*E~*E*3;Py41(I9#P1Y{M9TQ!0OujA$ zrao7tA@bp9)$kyp=Tr|guavgJ;zSDFH)Y~{v;Iwg0lv87YD*ruAsA-gRIydVU_0X# zB#}?`**68t4PV?nh+_uNbR`0+ErYf!<){hG3S8zFgleyxv(G4!^sCC8{7Py2Gek!w zyyTUfc)D4-?d5%KvtK9UyzZQ~^YxjZs<_>N2@i=DLR7z@1b&aLb(KYO{1e^kGE zM|BdnV)b<`5IRwv?<`o{>AU%|6qjpR$E>gHdUy&Q!eV2iFoR8UTE*-$KVgSfpwC|0dPhXNWVdkBC(f=FIAl3-&xE1n-(SpC{J(5(`HYbW#9Iy z>;l~$B~@iUoB)?8!^kiCe$W0dW6X~(1>kaHDyQ13GWUGqP;vDUA^lF~!{hU18G?6P zVUuln9Er|11(GB8j|YmY2y5w)`$&?ZCXT%{sDQrMM8KORF8KZ2x3(a6miB9~o*SGF zRPxO&_c{%u!}qie&b_=%)?1cxRH-kq%f0+Jr#B5F7HQiCi4>QaI7+fMPMU^UenjuA zh!hJ3IY_de&djdoO?wZ>6mAY&HIu+wQ|M1M%ElJ`$`Yj%>Lq`Lxa`_4^ShG!S@rA+ z!Hen>rDl$0HPLTjwx`ri@3v%y4u)5sl}i1({N$Gy(%^e51TPD*D|VvI@R2u@9}Tge zqJyWj+ZB_Gr~V$86>)?I*tIbt(|sPq#gxM!XLL8Vt#)mIU#UKi0fDLLdJQ{^8#@Ey zBXpln!_nlZ6oQ8p-ZS7^d|8L`nQj!%@B_EG6kmSt@M-vi9+gss&oKzwrOUaz0_y?>vx+xJCkG6bmc2_5ZW)?nV-TKo)Y z-_622?aS)LJ{bbB|8yC>%Lm8iWk0`XVB5o0Vn4Th->e#*XdD!O85^2)25VD#F`(i` zliY>9lJ5OjZ@sfpfMD5_Up=Ng1@kj)KCEm}9=bgJFQTLG+usF{N_FGWJND8yFulWr zW4%L{)E^6_4~fkyk#!%+c9%>oSewrK&ipFVxI5M>f0{7{ zHd@#nMfcMkORU)(>CaG5IFcxpcvljI?)i0imURXU7Z64G<X`0a?)jh@f6rj|97*gBp5^TPqtxAuy=}Ejg)B;LCfj~k>zKY-l!mz-g@fxa z<2oAFI?|hbHu@F>FjYh}g$;kimWvjq2=qJ-d4oBE;3ig>425O4n!msIW3k`5?MBiS z;j_BFJ$cR29CT*H$V+mABC>S*EKDBgb&UUpJY2yRoYU%oWsY^7=iR}Aigwz+<(F9A z3s|9T!iGGg37?ZiMmit|8{Jp>JnRbk?N*+MTP*&Fa$0fBYZ&>(z>M06SW(`GG@&7{ zQpAS}lEnw<8IN&okHd#X<>E>JP9EOr#CH2uETZBlY$w;*KuLp3zKkq}Uh>huK$aUZ zcz2U=;yu9bh$4fO0Zr~cAb9q#_&2Ai-7r~vyXZ2Do84lJ(CFJ4o79AUCb#W-aWcl^ zx27D5kC1sH84CBh#I7li(h@UV&VMJ=#|oyyLl1GnG&4^-bTGv#SvETon{jR3f3%J= zJcUDqI<^Y!rU-i}rn7CpPwe=S%%ks-_;uXP)_)zgM?E@ywtGBQyI2?{PHi#Chf%__ zF^%yi7n9o37!zMJp~&XF7bRlrDFa_F(*DjD5?5>->PV8uXJj839{zl+VkoK%`@lD9 z`cafhQstx9$KN++Q$i@F0ea=KVTs|pnIdlzn;GE~-XC$$PtR-<% zo=A_n`Y$(>mxO3)Q;k8Egx61x^-N{T5gebWQS$Su`)K&f+Y+`9J$-K5h(T8D58V*$ zghl?v&VQ=eh$kO}H<@F|WfyBHzTqQ?<_&{QngWNq+iG*doi|YSJRaZ%h(yIJ`K}W8>`rMqIK?Y;zTT;rDo#G<9-k%wyLt zz#7MD7bS|R6n%a=FRHDlJA8;UlJ(Uhmk7K^W)vn=``ABog{WZ3V0H3#>5Vq(|CSqv z(`c$CO1>iEDr}~}eoo2cUX2%eMV(5L{5^BlF(ulGJ1LhqI-fv@L!I{)q(i}0@M7c1 zh6GLlLAdJRTR*1v8!Y(L-42)SU-z>Wng+Qk3q;NjD&Gw_x9_0E^a`^&-2< zM1^AMQi=7|3~@Qv4&E=#!M9Jk z6cwxC$r(?=F^FHh$%ZZ#r8Vbm4Jjmfqv#3OpBKD8b`*Gn%Vf8dA!WQtw(i6mAFwFD zaowV^=CSuI=?6y~a*|ykqBy4b!40tqd#l3IaoXM0QhH>;-LbO}QRrrNr=?o7&{yY7 z7YG1X691nC7AJNFo;S`}JC-9hjEt=(OyqW4k_lT@Fxmy8Kx*^arav~>M4Z+LJ5moQ zrux#x9E%r=mCQzJgBY6+x0u9+dt(Nt0LOyNhH!)1Bh7vZ@fW-!l$$^YCuP|P) zWhPa5Kz1jW^W9tANYUu~=nT9jfVb+i7ZKIeXU>>zu{NMstE4&8D$ys1SyG_+XO18B zFP~{VyZg0|q**eh=3vHzdxMVS(zwn%1zWZU`^~dtD@Z8*`Dz%J7om;B1~c|C&M}z{ zr;RnHGBER-kzqBKCv361FF0|!NYBvN?)Z0V7@qU&b-bMjBnWr$iK%x0-uY@LmK6nr z05XZwMSu1gOCZ8{W6gw`O;bquhY}=_=G{ciWBRmB93e-h5RWzCzxNobVMG|J$FbNS zlrQ4S{u|bZ{D)PE)kumVd;!Olq>DFNDf$~WA71$DX#8kDh9N<=4H=@ZzzeK}aA~q; zKJ`kR;IG&j9MMU@>^{B0SBzg?EIozrN2SZ4#IWB=6qW1Gn~eJ~PSX1nPw5g$(m=#E z$Z7c6C}pxAsURYdP8!V}+L`?ESpM$vPlI16xt3))AZbLO8+Wl47$Dm%ry9n*|2#t4 zTU-8Vc-A{?xZstD2jMN!LMR~s%)nh`hS);jxRQ913=km11V<7JLlWg9M>hpT9`Zi) zDl11QHhi%F*g8B(Jfv8(R*Z>HNVEHdq9da7@td&EcVrf%4M zI*Rmnj0i~2FhPV0B#5r;2&?Mp-A`jo0QP}Oo2|?0uSAfL66QFC4Fs+!L05wSnFh8X zp$*X)H8vl1pA~R5jB>-8D@pmI8t1JEL*&4Ce4XlgwN1L%=!P85<3M`MDdo<3DoHc| zcX0t5)M)d;Ad4_8Gu#MhNGMF1eTjWcV4+XprSh|Xeh1h4*jfAQ7IDa{7iG=0^z{+B zYhgsAs&q_3MIR=fpmflWS@O z_%V`9)A~uqitcFPS$3S{w(pj(e51n~IvsU<+EYi-1}t_4&(Z|dZld67pMF-L0fjpU zF_EJVk(f4;H9tR)d=rl?(A{UN0yd=frt4=}3k5M;&4N0t)hy4Kh=Q@%1-}ZLG9W;A zkp4|qlAGT`F0BmNKhtcu1Cs^TomO_DtLC+Am5BYE7*4Tw~y!704~)7HhqTR zC>9;<+&fEcW8sI z!EqkzMhM;;duty#yrL5iz+bnnKvLQ2Nm1!9R*J|TTl^JUr&`ltx>2FWFKm|^uJb}? z{sc0jUIT-n>m46^XKIZp{|V!jM^WxAbUi1q_>}v)CAOiurPdGvYp|uTej_TC7_2j> z*83;7s8u{RAux2Zs*yboLRzO~dCehbNpk*`N>lCVGc`S7bn!7MzmsFsL;*J0EQ_+NW}0 zKo_()_?FI6r+CN)Z0>rS>L~HS%%6t?hg#r;qhK`iw&6$8S9Nhq;#ubQwtoCK_?o*Z zG)QK5J1mpc-sH^QlZ9%P)PZ=(emM*fUS-d!H!HgZ&~~V>25154Vky?e{p4(MxMw7_ z+90GC1xGFk;!BKp^Q&A-@>MMorK4P}(ch~=G6G9RDe7;_Oc1}Ri9TF^Xi=y#7;w>u zQnKlf-YYT8ABBKcjqdfn>9ACHRai#qJH9?o+_~n#Z6R?TLVJPads+J(c z1gHSrN>jw*!SlE{Nj}!du0f`<^~U8$J0wJZ5(33F=X&5kZPfu06ZcMP)>N}$m7&V? z_`feISL)1ua%qO>RI721>cs1R4*TqtNFPfyzuDJn7|BLCh4&x+wfR1x-=CS|ZDDRh z)^8U#BlSzMPW6cx(M@vApk=zcf2HFC{LzucWtm6qvbD+tx$Cu(A!Pd)g8#tr-51qALm;7LB|*su3;rAzNE@vNqxV%|`Y$tjHL( zEamSHljP)1q592Sl36zH7c29*l_JQV;1M<^81mx`RJEtkg_!euVh~ZY^2;>I(||wD zglf$(G%gOTYFP4taRdlsyZzxU%XN9{H^*EK6m!S;b#+~z-qP6i_D(Ux#DTXwKFgq} zyB#NhCCn^+PEpMEWt3fKM{Hrsz~iRgWA6gFc1=^lMFDPNJQi!m>$=GSB!af5vX{Km zrM%4b`bk}j(5|}Izb_W>8)WG*ra1{uOA;Rp+Vx?81B32+%do{^xh-0kj*H7!6$_{5 zEW)(1m4A#&iGx0dE7zXVOVOFfOVgQK4Jx|K&`bU9q2t~ZX#1KO_)%7Z$GC(X9QUh~ zJhy~)$(t9d2rkx12Ym{+Uj#P9F!H+A7vpSEk7+eg)BhMFQ#K>IuY^$d8 z&*1NZ#G+Utti)+*WqNAj$zBo97%1!c69gL-H?JgM&b79B`z$p&`F98zSapeOj$5@^ z{Xv`;uTsBH%V2i?@_^E_f}PX#cKz}ovi{^-eE--(6rO-ZQO=^i3UPR&b*hEp;ttz; z7OM&-*;9Q-`=#F7t#|e#=ynS~DVo7CTKnhjz{Y4Phgx9O1Q_*#?T$LA=7&+JUUxmRk#fr-$*ZY>Y~Sydt)9 zizgs1O11NdS)jf~fNCzh%di*dRHb&=l#x<5T3ZHSPr4gNDzliF?szu zmHmybQ;^VZ&kaIgWRNA~)I63T2DkS3)5d3(LpSLpHxvM%pcJ4L?yX$zzB7yp(YxqsYiJfzI};OPVzH+ z-N-|pw4vRvV4$IakrGE3QHE!!Vq#02;!3k%kukDFjMEMw0XFG9N1)L4=->>@HDb13 z?(f>l;36a7CZ^RkkUSs|V7EjG`gVrV39c!YtPL(sCVau4bi4Jv<>!B=OlMj|U7x|D zu|4Y)M6opWr%zkoSmSvdqWb2^)jPw?UtvHwxxZKb6j#4`c;+JC5WWA_aj6S>i?4Mc zkw29ChK`rHnNxWlFYUNoU~SNp_xa8+@;yk#TWf^Tj0iEN7@-BY*G-n;k>{?D5}{<} zq5NilZttx{e)XC;b&mQu!}77P(zglnN$c93^pO%tl$=;oh(@uIMx9uO_^ z#Kah4>S;shQzvT(ZY>n%E!lid(_w|Db2)#S%dXi-3YGB$C$V}2I{L8}@o1hie3l8_ zVUO%69Ivsw;>4k=@8(0|+dBN$C|;EDz54fN3cIuNa!z2c{Z{P-!#aa|KGHLfu`4h1 zPc0$9?xw-E*1T{ler490UiA6q3FyJHcQ{<&iMLg&7(otM487eC<1%mp9lX0O0VbQwKVBJe>i{4}7-H^cD4{J&E zv^abe0=qRZo2>0g;op;yc^Xt9Date&)A1=_Z*&fGb$6fO$th5}BRLNJ)*f}u;~f>W zFWMu_mOPrCGGxPgz;$~zi=^(Ivy6VfTsw6?nKHEZ>5D5b1JFtdgPfU~q)GBz^*BmwI)Pa0RjXZ=0r2rUDUPlj-s#5RyL;{T@bwH?o|hVq$H8~3@m zed_ioDw1a`hgNW#@HxM3zQe{RCURt>$^^uA-?YFMjkhf}4M|wfPV(^=kh<1?fKggV z5DoSft4TkZrH|^H^Ig}{)ZBX_Wn$rRtH==Dp2X&af`n!Q;M4#73;xF?fc7^LEI=p^ zajbk}d1o%|NtRkjl#p&v+IX)RZ38=Vs?qw}+*0B9XsT{)ynb0pJC7Xd>Bv?(}Rn|#9+e%q27=3y>Z-~z!1~r zR+|@`zaw-5J|=7I=ZpiRilT7=aSi+B0~nqY79YEjSiP<5tp!X{ZgnPS5%U%jfGqQsW&Y*pi6sj$g?9YL0A zN+*hth?MK8Y~HcvU#c?qqvDU6I#v`2Td)8LR=koPlA z%=!CamkTai*Oxi~yGtF?`@27bi~m1W{rdhBd!bfTCidrMc_b6rXz452HnJ0vdSSBB zI$>H=mCGmh6Mc}3-_}Q9u-0jpfrreHI!XSVmPc_-eZGdi=WB zxj#8>mY*%W(7@{M|kbjAH961 z20XdvLdAtZuoq3ML#77_w4>@}VO+7lTiy>kn|YK=*l&u2cPbD`0WL@>6T8|u+RDa@0lD^HOiw|$KuA>+_;$R2u5 z$|zSpoYl4tS&IIeJAmXTLP1|6K{83ud<&CbIZk3|3Sto>R5gU3Tv@0Fdi_M%s71)? zCH^-aZaSm!w}#_2pQ6Mdt8!%1hKv}orcuQ$%&-}3}a>AeFQ|W)!Y0(?V5!t diff --git a/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp b/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp index 2e7812d64..a93d14050 100644 --- a/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp +++ b/addons/sourcemod/scripting/confoglcompmod/ReqMatch.sp @@ -33,10 +33,8 @@ static ConVar RM_hAutoCfg = null, RM_hConfigFile_On = null, RM_hConfigFile_Plugins = null, - RM_hConfigFile_Off = null; - -static char - RM_sMatchName[32]; + RM_hConfigFile_Off = null, + RM_hMatchName = null; void RM_APL() { @@ -132,6 +130,12 @@ void RM_OnModuleStart() } } + RM_hMatchName = FindConVarEx("match_name"); + if (RM_hMatchName == null) + { + RM_hMatchName = CreateConVarEx("match_name", "", "DONT TOUCH THIS CVAR! This is to make it possible to see in error logs which confogl config has troubles!", FCVAR_DONTRECORD | FCVAR_UNLOGGED); + } + // ChangeLevel if (LibraryExists("l4d2_changelevel")) { @@ -353,7 +357,7 @@ static bool RM_UpdateCfgOn(const char[] cfgfile, bool bIsPrint = true) { // PrintToChatAll("\x01[\x05Confogl\x01] Using \"\x04%s\x01\" config.", cfgfile); CPrintToChatAll("{blue}[{default}Confogl{blue}]{default} Loading '{olive}%s{default}'.", cfgfile); - strcopy(RM_sMatchName, sizeof(RM_sMatchName), cfgfile); + RM_hMatchName.SetString(cfgfile); if (RM_DEBUG || IsDebugEnabled()) { @@ -648,7 +652,7 @@ stock bool IsAMatchActive() stock void GetMatchName(char[] sBuffer, int iLen) { - strcopy(sBuffer, iLen, RM_sMatchName); + RM_hMatchName.GetString(sBuffer, iLen); } public int native_IsMatchModeLoaded(Handle plugin, int numParams) From b30f227d86bf9389991dedb9e64f1572f1dbe860 Mon Sep 17 00:00:00 2001 From: nikita1824 Date: Sun, 21 Jan 2024 13:23:34 +0500 Subject: [PATCH 06/11] Update confogl configs L 01/21/2024 - 08:07:14: [CvarSettings] [zonemod] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:07:34: [CvarSettings] [zoneretro] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:07:54: [CvarSettings] [zm3v3] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:08:25: [CvarSettings] [zm2v2] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:08:47: [CvarSettings] [zm1v1] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:09:09: [CvarSettings] [neomod] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:09:30: [CvarSettings] [nextmod] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:09:51: [CvarSettings] [nextmod3v3] [c2m1_highway] Attempt to track ConVar z_tank_health, which is already being tracked. L 01/21/2024 - 08:09:51: [CvarSettings] [nextmod3v3] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:10:26: [CvarSettings] [nextmod2v2] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:10:55: [CvarSettings] [nextmod1v1] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:11:16: [CvarSettings] [pmelite] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:11:16: [CvarSettings] [pmelite] [c2m1_highway] Could not find CVar specified (l4d2_deadstop_penalty) L 01/21/2024 - 08:11:36: [CvarSettings] [deadman] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:11:36: [CvarSettings] [deadman] [c2m1_highway] Could not find CVar specified (confogl_ghost_warp) L 01/21/2024 - 08:11:36: [CvarSettings] [deadman] [c2m1_highway] Could not find CVar specified (confogl_ghost_warp_reload) L 01/21/2024 - 08:11:36: [CvarSettings] [deadman] [c2m1_highway] Could not find CVar specified (hc_bridge_car_damage) L 01/21/2024 - 08:11:36: [CvarSettings] [deadman] [c2m1_highway] Could not find CVar specified (sm_uncinfblock_types) L 01/21/2024 - 08:12:00: [CvarSettings] [acemodrv] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:12:00: [CvarSettings] [acemodrv] [c2m1_highway] Could not find CVar specified (l4d2_heq_allow_horde_during_tank) L 01/21/2024 - 08:12:21: [CvarSettings] [amrv3v3] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:12:21: [CvarSettings] [amrv3v3] [c2m1_highway] Could not find CVar specified (l4d2_heq_allow_horde_during_tank) L 01/21/2024 - 08:12:48: [CvarSettings] [amrv2v2] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:12:48: [CvarSettings] [amrv2v2] [c2m1_highway] Could not find CVar specified (l4d2_heq_allow_horde_during_tank) L 01/21/2024 - 08:13:09: [CvarSettings] [amrv1v1] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:13:09: [CvarSettings] [amrv1v1] [c2m1_highway] Could not find CVar specified (l4d2_heq_allow_horde_during_tank) L 01/21/2024 - 08:13:33: [CvarSettings] [eq] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:13:53: [CvarSettings] [eq3v3] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:14:16: [CvarSettings] [eq2v2] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:14:37: [CvarSettings] [eq1v1] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:15:20: [CvarSettings] [apex] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:15:42: [CvarSettings] [zonehunters] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:16:03: [CvarSettings] [zh3v3] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:16:26: [CvarSettings] [zh2v2] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) L 01/21/2024 - 08:16:50: [CvarSettings] [zh1v1] [c2m1_highway] Could not find CVar specified (confogl_boss_unprohibit) --- cfg/cfgogl/acemodrv/shared_cvars.cfg | 2 +- cfg/cfgogl/acemodrv/shared_settings.cfg | 1 - cfg/cfgogl/apex/shared_cvars.cfg | 2 +- cfg/cfgogl/deadman/confogl.cfg | 6 +++--- cfg/cfgogl/deadman/deadman.cfg | 4 ++-- cfg/cfgogl/eq/shared_cvars.cfg | 2 +- cfg/cfgogl/neomod/shared_cvars.cfg | 2 +- cfg/cfgogl/nextmod/shared_cvars.cfg | 2 +- cfg/cfgogl/nextmod3v3/confogl.cfg | 1 - cfg/cfgogl/pmelite/confogl.cfg | 2 +- cfg/cfgogl/pmelite/pmelite.cfg | 2 +- cfg/cfgogl/zonehunters/shared_cvars.cfg | 2 +- cfg/cfgogl/zonemod/shared_cvars.cfg | 2 +- cfg/cfgogl/zoneretro/shared_cvars.cfg | 2 +- 14 files changed, 15 insertions(+), 17 deletions(-) diff --git a/cfg/cfgogl/acemodrv/shared_cvars.cfg b/cfg/cfgogl/acemodrv/shared_cvars.cfg index 40da28b89..b9f6028a0 100644 --- a/cfg/cfgogl/acemodrv/shared_cvars.cfg +++ b/cfg/cfgogl/acemodrv/shared_cvars.cfg @@ -41,7 +41,7 @@ confogl_match_restart "1" // Sets whet // Confogl Cvars confogl_addcvar confogl_boss_tank "1" // Tank can't be prelit, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player -confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed +//confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed confogl_addcvar confogl_lock_boss_spawns "1" // Enables forcing same coordinates for tank and witch spawns (excluding tanks during finales) confogl_addcvar confogl_remove_escape_tank "1" // Removes tanks which spawn as the rescue vehicle arrives on finales confogl_addcvar confogl_disable_tank_hordes "1" // Disables natural hordes while tanks are in play diff --git a/cfg/cfgogl/acemodrv/shared_settings.cfg b/cfg/cfgogl/acemodrv/shared_settings.cfg index d1c3e4a26..78d331e03 100644 --- a/cfg/cfgogl/acemodrv/shared_settings.cfg +++ b/cfg/cfgogl/acemodrv/shared_settings.cfg @@ -95,7 +95,6 @@ confogl_addcvar l4d2_slowdown_water_survivors_during_tank 220 confogl_addcvar l4d2_slowdown_crouch_speed_mod 1.2 // [l4d2_horde_equaliser.smx] -confogl_addcvar l4d2_heq_allow_horde_during_tank 1 confogl_addcvar l4d2_heq_checkpoint_sound 1 // [l4d_tank_damage_announce.smx] diff --git a/cfg/cfgogl/apex/shared_cvars.cfg b/cfg/cfgogl/apex/shared_cvars.cfg index 920559fee..d520fe520 100644 --- a/cfg/cfgogl/apex/shared_cvars.cfg +++ b/cfg/cfgogl/apex/shared_cvars.cfg @@ -41,7 +41,7 @@ confogl_match_restart "1" // Sets whet // Confogl Cvars confogl_addcvar confogl_boss_tank "1" // Tank can't be prelit, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player -confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed +//confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed confogl_addcvar confogl_lock_boss_spawns "1" // Enables forcing same coordinates for tank and witch spawns (excluding tanks during finales) confogl_addcvar confogl_remove_escape_tank "1" // Removes tanks which spawn as the rescue vehicle arrives on finales confogl_addcvar confogl_disable_tank_hordes "1" // Disables natural hordes while tanks are in play diff --git a/cfg/cfgogl/deadman/confogl.cfg b/cfg/cfgogl/deadman/confogl.cfg index dd1fa5ae2..84569a478 100644 --- a/cfg/cfgogl/deadman/confogl.cfg +++ b/cfg/cfgogl/deadman/confogl.cfg @@ -51,15 +51,15 @@ confogl_match_restart "1" // Confogl Cvars confogl_addcvar confogl_boss_tank "1" -confogl_addcvar confogl_boss_unprohibit "0" +//confogl_addcvar confogl_boss_unprohibit "0" confogl_addcvar confogl_lock_boss_spawns "1" confogl_addcvar confogl_remove_escape_tank "1" confogl_addcvar confogl_disable_tank_hordes "1" confogl_addcvar confogl_block_punch_rock "1" confogl_addcvar confogl_blockinfectedbots "2" confogl_addcvar director_allow_infected_bots "0" -confogl_addcvar confogl_ghost_warp "1" -confogl_addcvar confogl_ghost_warp_reload "1" +//confogl_addcvar confogl_ghost_warp "1" +//confogl_addcvar confogl_ghost_warp_reload "1" confogl_addcvar confogl_reduce_finalespawnrange "1" confogl_addcvar confogl_remove_chainsaw "1" confogl_addcvar confogl_remove_defib "1" diff --git a/cfg/cfgogl/deadman/deadman.cfg b/cfg/cfgogl/deadman/deadman.cfg index 8ac68ae02..5e1f3c8dc 100644 --- a/cfg/cfgogl/deadman/deadman.cfg +++ b/cfg/cfgogl/deadman/deadman.cfg @@ -68,7 +68,7 @@ confogl_addcvar gfc_spit_zc_flags 6 confogl_addcvar gfc_godframe_glows 0 // [l4d2_hittable_control.smx] -confogl_addcvar hc_bridge_car_damage 25.0 +//confogl_addcvar hc_bridge_car_damage 25.0 confogl_addcvar hc_sflog_standing_damage 100.0 confogl_addcvar hc_bhlog_standing_damage 100.0 confogl_addcvar hc_handtruck_standing_damage 8.0 @@ -111,7 +111,7 @@ confogl_addcvar l4d_tank_props_glow 0 // [l4d2_uncommon_blocker.smx] confogl_addcvar sm_uncinfblock_enabled 1 -confogl_addcvar sm_uncinfblock_types 127 +//confogl_addcvar sm_uncinfblock_types 127 // [l4d2_weaponrules.smx] l4d2_addweaponrule smg_mp5 smg_silenced diff --git a/cfg/cfgogl/eq/shared_cvars.cfg b/cfg/cfgogl/eq/shared_cvars.cfg index 108500fe8..d9568c2d5 100644 --- a/cfg/cfgogl/eq/shared_cvars.cfg +++ b/cfg/cfgogl/eq/shared_cvars.cfg @@ -40,7 +40,7 @@ confogl_match_restart "1" // Sets whet // Confogl Cvars confogl_addcvar confogl_boss_tank "1" // Tank can't be prelit, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player -confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed +//confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed confogl_addcvar confogl_lock_boss_spawns "1" // Enables forcing same coordinates for tank and witch spawns (excluding tanks during finales) confogl_addcvar confogl_remove_escape_tank "1" // Removes tanks which spawn as the rescue vehicle arrives on finales confogl_addcvar confogl_disable_tank_hordes "1" // Disables natural hordes while tanks are in play diff --git a/cfg/cfgogl/neomod/shared_cvars.cfg b/cfg/cfgogl/neomod/shared_cvars.cfg index aea9bafca..9a83348ce 100644 --- a/cfg/cfgogl/neomod/shared_cvars.cfg +++ b/cfg/cfgogl/neomod/shared_cvars.cfg @@ -41,7 +41,7 @@ confogl_match_restart "1" // Sets whet // Confogl Cvars confogl_addcvar confogl_boss_tank "1" // Tank can't be prelit, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player -confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed +//confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed confogl_addcvar confogl_lock_boss_spawns "1" // Enables forcing same coordinates for tank and witch spawns (excluding tanks during finales) confogl_addcvar confogl_remove_escape_tank "1" // Removes tanks which spawn as the rescue vehicle arrives on finales confogl_addcvar confogl_disable_tank_hordes "1" // Disables natural hordes while tanks are in play diff --git a/cfg/cfgogl/nextmod/shared_cvars.cfg b/cfg/cfgogl/nextmod/shared_cvars.cfg index ec337ecc8..65f3efc8a 100644 --- a/cfg/cfgogl/nextmod/shared_cvars.cfg +++ b/cfg/cfgogl/nextmod/shared_cvars.cfg @@ -38,7 +38,7 @@ confogl_match_restart "1" // Sets whet // Confogl Cvars confogl_addcvar confogl_boss_tank "1" // Tank can't be prelit, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player -confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed +//confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed confogl_addcvar confogl_lock_boss_spawns "1" // Enables forcing same coordinates for tank and witch spawns (excluding tanks during finales) confogl_addcvar confogl_remove_escape_tank "1" // Removes tanks which spawn as the rescue vehicle arrives on finales confogl_addcvar confogl_disable_tank_hordes "1" // Disables natural hordes while tanks are in play diff --git a/cfg/cfgogl/nextmod3v3/confogl.cfg b/cfg/cfgogl/nextmod3v3/confogl.cfg index e5d1261fe..fe26f5447 100644 --- a/cfg/cfgogl/nextmod3v3/confogl.cfg +++ b/cfg/cfgogl/nextmod3v3/confogl.cfg @@ -38,7 +38,6 @@ confogl_addcvar z_jockey_ride_damage_interval 0.25 confogl_addcvar z_pounce_damage 2 confogl_addcvar z_pounce_damage_interval 0.2 confogl_addcvar hunter_pz_claw_dmg 4 -confogl_addcvar z_tank_health 3350 // Nah tanks, ye Witchies confogl_addcvar versus_tank_chance 0 diff --git a/cfg/cfgogl/pmelite/confogl.cfg b/cfg/cfgogl/pmelite/confogl.cfg index fa5028f5b..54f7c2d7a 100644 --- a/cfg/cfgogl/pmelite/confogl.cfg +++ b/cfg/cfgogl/pmelite/confogl.cfg @@ -52,7 +52,7 @@ confogl_match_restart "1" // Confogl Cvars confogl_addcvar confogl_boss_tank "1" -confogl_addcvar confogl_boss_unprohibit "0" +//confogl_addcvar confogl_boss_unprohibit "0" confogl_addcvar confogl_lock_boss_spawns "1" confogl_addcvar confogl_remove_escape_tank "1" confogl_addcvar confogl_disable_tank_hordes "1" diff --git a/cfg/cfgogl/pmelite/pmelite.cfg b/cfg/cfgogl/pmelite/pmelite.cfg index 5bf7e926e..eec9cc361 100644 --- a/cfg/cfgogl/pmelite/pmelite.cfg +++ b/cfg/cfgogl/pmelite/pmelite.cfg @@ -137,7 +137,7 @@ confogl_addcvar gfc_ff_min_time 0.8 // [l4d2_m2_control.smx] confogl_addcvar z_max_hunter_pounce_stagger_duration 1 -confogl_addcvar l4d2_deadstop_penalty 1 +//confogl_addcvar l4d2_deadstop_penalty 1 //[l4d2_si_staggers.smx] confogl_addcvar l4d2_disable_si_friendly_staggers 4 diff --git a/cfg/cfgogl/zonehunters/shared_cvars.cfg b/cfg/cfgogl/zonehunters/shared_cvars.cfg index 652401a49..fe8af66fb 100644 --- a/cfg/cfgogl/zonehunters/shared_cvars.cfg +++ b/cfg/cfgogl/zonehunters/shared_cvars.cfg @@ -40,7 +40,7 @@ confogl_match_restart "1" // Sets whet // Confogl Cvars confogl_addcvar confogl_boss_tank "1" // Tank can't be prelit, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player -confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed +//confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed confogl_addcvar confogl_lock_boss_spawns "1" // Enables forcing same coordinates for tank and witch spawns (excluding tanks during finales) confogl_addcvar confogl_remove_escape_tank "1" // Removes tanks which spawn as the rescue vehicle arrives on finales confogl_addcvar confogl_disable_tank_hordes "1" // Disables natural hordes while tanks are in play diff --git a/cfg/cfgogl/zonemod/shared_cvars.cfg b/cfg/cfgogl/zonemod/shared_cvars.cfg index 219bb9e6f..1ec1979f4 100644 --- a/cfg/cfgogl/zonemod/shared_cvars.cfg +++ b/cfg/cfgogl/zonemod/shared_cvars.cfg @@ -41,7 +41,7 @@ confogl_match_restart "1" // Sets whet // Confogl Cvars confogl_addcvar confogl_boss_tank "1" // Tank can't be prelit, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player -confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed +//confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed confogl_addcvar confogl_lock_boss_spawns "1" // Enables forcing same coordinates for tank and witch spawns (excluding tanks during finales) confogl_addcvar confogl_remove_escape_tank "1" // Removes tanks which spawn as the rescue vehicle arrives on finales confogl_addcvar confogl_disable_tank_hordes "1" // Disables natural hordes while tanks are in play diff --git a/cfg/cfgogl/zoneretro/shared_cvars.cfg b/cfg/cfgogl/zoneretro/shared_cvars.cfg index 08451ff88..5a7147142 100644 --- a/cfg/cfgogl/zoneretro/shared_cvars.cfg +++ b/cfg/cfgogl/zoneretro/shared_cvars.cfg @@ -41,7 +41,7 @@ confogl_match_restart "1" // Sets whet // Confogl Cvars confogl_addcvar confogl_boss_tank "1" // Tank can't be prelit, frozen and ghost until player takes over, punch fix, and no rock throw for AI tank while waiting for player -confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed +//confogl_addcvar confogl_boss_unprohibit "0" // Enable bosses spawning on all maps, even through they normally aren't allowed confogl_addcvar confogl_lock_boss_spawns "1" // Enables forcing same coordinates for tank and witch spawns (excluding tanks during finales) confogl_addcvar confogl_remove_escape_tank "1" // Removes tanks which spawn as the rescue vehicle arrives on finales confogl_addcvar confogl_disable_tank_hordes "1" // Disables natural hordes while tanks are in play From 2a5146a85805ac0d35d2d684ffa83105f21155b2 Mon Sep 17 00:00:00 2001 From: nikita1824 Date: Sun, 21 Jan 2024 13:28:20 +0500 Subject: [PATCH 07/11] Update match_vote --- addons/sourcemod/plugins/match_vote.smx | Bin 11394 -> 11413 bytes addons/sourcemod/scripting/match_vote.sp | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/sourcemod/plugins/match_vote.smx b/addons/sourcemod/plugins/match_vote.smx index e3518b062aa9e15d4f2ee1d5d204a14cb33120a1..bdde8fa58737d83f31e7e9846ba9b476780c4495 100644 GIT binary patch delta 11264 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 V&?IvNImgQtbe=z<>4|*P`afyUeGvcv delta 11245 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 Date: Sun, 21 Jan 2024 13:39:30 +0500 Subject: [PATCH 08/11] Fix convars not resetting when matchmode unloaded --- addons/sourcemod/plugins/confoglcompmod.smx | Bin 62203 -> 62196 bytes .../scripting/confoglcompmod/ReqMatch.sp | 14 +++++++------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/addons/sourcemod/plugins/confoglcompmod.smx b/addons/sourcemod/plugins/confoglcompmod.smx index 5ccaf08dac9c8fe2047fd49b61baf48b8b2e8108..1f28612015c8fc527671ccfeffa05c582c3099a6 100644 GIT binary patch delta 53169 zcmV)oK%Bq(ZW zjqD%vko{O*w)>QoJYC05=X={uxn7;`c*@&y+aJl>vh$B@nh<*BZ1BzQw&Z8%PkY#9 z>6)jaybGwj7F1qGvz&Ki^Q3IET<*)xXFO>wCpu)SY%V3H`7vQ`)5-8Z{l{{>6VHFi ze%!F{2|D-3^1H^f&F;I&#j&?zr+Y1epKq_aj}`M~cCUr=)jyHnk3QTiAG2igMm#rj zY^VBOPTKx|B5(hT3S8z9FDy38?{~*{N@E{0ddBO5Jl`dcI;!}$Z$Xa#=mNSIVK1^L z?bYj2n8*0KYVDsoamMr6>!_Sjl=puy%a8Du`KL$@@74RX3_svJV@@|eE8myj{7iTM zSi6t88KHN_pQ&k4@@MjM=n0;fF1*h*D&V*6lhbImf<~gAEz?0y?NjfW%fWt64=bJ@ zoU?N->h(tP+__GnuQ<|t58c^^bi1EG^uTv(UHx-)dyN0NTn9d-XpaR2{A7P2?XgNY zZ(UW#@7Z0V3+?wF0(kjOa4+$@4CN4`?mI@wXOZ$G8&Jc<$vHV zUxq6wbK)=EYp)NYdF=FGs(pU}aC`reW8Rk9>DTY5-2?w3Bfm4e$29X~6&++gjDvzs z-m%}7f$Jo?+ggFA_MAyKW{>+9UY9N*`&LP}*LU)@-rU zo>HW(ZLy!Zu=myPf3xq8#~ zAHICqji(s@t}yoV@-cj+gcp8VIHN(u!OFShJDt!YtDK= z&6~Fgbxp8m?wdOJcTRt4zimJ8_s;o>3|4ifd)onhUz#=~_ge=FlTizQ?=7Ru|Au7L zffbTb2l9|n2MT|aQSY_9(aDs$f6&X64MLs8{(n`||7B&8dN%zd(?gIP%nI>deSYB9 z4_==a?Y>_9Uv;)s z!K*9N7CQPit^j?{{*!ZGpcf7Koc7#R z`M$sg#hza5i$HYA*8lEIqq?&MuZQ# z#7U&h6NZ2LUX>+bk4ox)$k&KUT9Iw0RX$f%t(D96<}|bxrX%3~Qzyww)qn7Qnp)I< z8m`IvPn`gt?-)Ca#;dwp>ant2u@A{>e~Nic-cAjuod$ij6ZxGt>~mRaQ6H{FefawS zaNil=XCIa5BTy&6;XST6A2I(riM&6_^rzJld#!&eeWNBl9+Sj+i063A_(kNAPouGX z-lxnP`=4q(e55r$n~}&%BLb~t_dkld_eiVL)>4#b`U|aYc}3Qj@p-i?xvy&K5VGsN zjO5nKnmr7MmRDvyDrXoypVE{$zRWVmQ91MI`GTg*$z_I@D{3i8iFP|-xqcgtxFWO`MWRd z(}+Gm;{MQOJAO!MO?O=FwCd)7{%G#v$`$+r2wXU&gId+eXt zd0L0$zPUWU?~whjTCXjr{2R=_@sRU)P71UQUB)es_~ooUv3`+j>{;kr%d+_Fd4yNw`gE-oqE$X7+`tedIy*s;%PpE`q+mI`#c>o@2LG3wr=eMp4i0d|3$qXPtyJ@I@6)g1NMJs z6mt(9y=A_eV}^Y`9JO_R*PYjh&%DI*NbA0Zm?>YIf zL2))lUAy<$7$;fYyzRoM?FJ4x%Wb{sEQ7=Fe11W&$KA!^z4Z8Yfo}?F+qs+ib3*F# zq=iZj5&Gb}SDJ3=_W+3c@lOZbcOqinBuq0uzDiU#T4vqEcISPz(gJW4yM zkS!@A;7XT03q3b^lB#^qHT&if5?Jk{Lp?_3>xKXftE3rTx)u2Q!L z=CS!zR=cLqyB~hw=~Vo1NmGBm?u?nuY&IP)=Ye#CroxyT=1 z5I7xQTq_Fr(gFIGsRQ&CpaZ1x&;icf7VxD54Cc{~@i}T<{62&DefWR&fWw9^^0F)* z^D_1eJbimWc?Oo3?P<8(z263xDV{MeJ5NjGQPEzoTChLAgU_~^pMORsb9HBMiEBY3 z-Em!(kUzpUVcb#eEv9p930;;HbO|t9n{584I@b)-sYsBwDqq?0H36+(HP;DKhYU|R z*S)y2|3@>|*M?ACJ|};y-{QH&=aGykTN6;~lA>)yJnz;|drY^x_n%^1aC`W%dx-Vi zE$q8f)pJQw&$ZlkTVP%Bx0w~F=Ur@mEY2xJd&fMQCy2Tw)={zknL6apuba<7R6NMX zsg+uvm_y@B`K!o2`>N*d;dcGmS+yviVg&R5V|(eV>hrh?vAut#O02Q?e7k%s9xQS5 zAAuPc_B4oPi!jvQ|7w1IY`VHgWr~5$z-=OD_*VOG}zJ|`0c};yjPsM9CPmyQG zeWf1`6m&k%G{Uj01Myae8edX2S<`L0E1>kZukOgt-=5b=cXmX(BAxk~datZl_v#K? z-c%^kVI1jN(5ruT8uK;%IXQ$rWv@x(#JvI6et`cHkmtKyu~+SPP=BoL@V^!jU^r19 z(7OV@_DSJ7S7_*~DvR!ADfOq96FA-8u2ZG*u_&PM}~Jzrk>*IJ4G zlk>m4JD}8iWVVF+kn9_}TRlG&eH6Zf*TFjEI@}io-qwHVVSHU4%a+-XsQY`{i6jbGh*je{*)6*T+y^=TTmh1?06u z;j4V6BY#`M3>rIrNwKen`h|3O+XtwR1A-ew{d7XHUyPnnsYvt7LK@r#mwl$ew7%*i zjVO08+!rP57PybEM*Bdu^Mrc?+I}NDU!hoI^@#1<- z5W$N0jvvl{tsc`&cK^;H2d_0tZPQ-&@c3;b*&Un{hi(6QLl~>p8tywG#kx-lW0k?u z-HzJm8k&!FKJ2DzgIK8fPXR3b=p# z;{!r^k^WyrZCDkQ-=jg|zKq}+g8ALIQHYJQEr{+ZL(juO^>}vuFfMbVL1r6=+@8^u zJBrFWhn~-C%Dr(o|9ch|QQmEx$VS?!E@$cRGVk6%<;)qbe=ACnZ`29Y(V7M#Um>^~8o0kka7!AvzYoaiBEtPcKu!k{ z?jHm4dW&#lU2-4(V$^0+3YZcEGpm3pMKB8rm@))&RRL2TwDs3gNjnmlbBBMCEjK9F z_gmVIZu;*H2S!jZ`VrtfC_)t3y0;nel?H! ziZow|yo#5Zmnt2h$=u<>(#;>%+oayFankD^Ld-vxYiwDD^`>wrBE4DK4~_nNu#3Kh|e^bW~Y6o!8Dsx zq-jU=^23AU8v{!HkIMpCpPNSGY_X#M$qMee@%&BTa1bXUoTMbWYSQw|{<( zeIxyGdXu+b3m#KT_XK>=MOUBt%>iHfb<<|OJ$kNtW$n@Bb$Wk$Gd=^Iz%G|o)p^h? zRp*apgLU#b$rUDlOF!Y(iMT$B&s)1w@Jr@>W~#xi6VYo$y>~V0(*ZV?dclx<2z^Hb z7K~W8i92oBd5`>Xn{pUgUThB5pwin_`-ONLejU+o7LB8`ti7tY29&yih-VYCW!G*E zNOk^Mw6=MnTYZ0Tgl-;Xe8S&6%3%BI^yr%53FCB^#Lhwr+nl^eZdv!XCm%9OT_(!D<$7VSt0g)tT)j; z|Mda+Ir2~2be%(VJ%8A}9!%G!BB;+roIXjnNp$(*XKh;He9C+LwHuesuNt-tKgs07 zD(-jnj8lJRthDUMv{s&N?4v&Td=llD|E$k3|JlOiEgf!(>2NBzYYcAE11?r?!A&5YaJ2&0X>{(wG=jf{ z{FSEBoV=|u;Ca^KG|K;o#`ZPR>%A8|cgIni zb4F5T?z}Zb=ShJlc$%CoX}6PqFwfw8KZM3kd>+^lB)c9n?6a)!UU{+XyIGuQwd6Dp)T$qB_Th;H0bb z^z#ANJsp^rPP4k|{{alC%o=Wi_(r)lkvHXKAC;~_;_5BkBFD* zOsvIy`t>-hi}m%X@9D;K7QPRNmr=i8Uq%u3?areNQV7@midzEOJxt{-)_xccCo3O+ zJLQ3g*O@G;IrKHY2e(f?hsLm%8SIn~*hL0=Rsnk_+HWD&C1kkI3l--e3;2Jolmj-c z7bN3c-3ylPvV`WC;{6ycFWGw?J5YX0lDRcK2S5VPX(Zd{kL$$gQz@juG{H8mvAf)N zN-Uzhe^rocKX16t#l`(J_F?;MT#h^5)56z{tI*z<1*GpSAbsyrOTe|pjMJ{fI92rq z+Jk_e``*y(J9xvEUzKmj<*R=Ywefl#`;x!mZx3cS_H%i|-Kx-rqV9gUN^!16`5~K^N~2Dg2N(vf)5*Df6LH-26`q#vIq-|%-fAYD6SWw*WTmT7;EGvc4spOJkV zDxbGefbk3QI~UuD&oRk4gH^8t9Qmm1$$s+9osER#z>PQb_a@2CF)dN0mzp1Db zr!@?ZBB6eG&Ru*&e^y@%tv3}?7WehVWtQbpCZ_KiG(HgeCz&mS`UbWK9PqMoIi5ND zDN0kPsT(5l8^R**# zIVQ71R==v3C$&f1xK_Ty=DV-z^;j~X$z()no-(5GHGeXqG!Ge3k7zV}#NXX&eEm80 zntc8F+-vSJ&JQkQ2$#tt^1CyzTxxjTF2{^I>#yQ{FI}3~t*L)QUboT$%EbEy@=aG% zK)Rgm0@3rz5&614ZX=z{J0EnmsZ0))3Np_O%4J@ircPe6OV)l_LH^J=<6(LGT{*07 zKR>d!cp12RwWpuD({VJ0dL2j%p`e9(ySXch2SrNIO9+*;P3b213! zIi{$a&fcWb&BcGQ;e5>h*wEVP-0MX2MSA8zr`tcWII2FAFygo$!8#+r&pCcL|B|RT z4T_`w&K%*->;Bt+cv-YfTxGV2g_yS;;}V0trxJ0o5xjyrksb`KlO1#E+f*!)6hp7VbZiMw@+@Hxj7h=|7KrAUYy8trmRPW^&_yx19D1-Ol_(+Am0GzkuvJ7f?I2#*tk^L3^>BHIjBN z7UUmaBl(c9M)L0r`P~Oz_a}8k++!W@M>)TTxZ5{t@*VlT;a3&5EAoB@wOs`&_cWr_ zR9r5P#j}51ss;U7Hcn%FRAVpZ&jfqsV@tRz;3`vhF5EPe71K;sT#VZ?;vR|5(OUMM zMwyYKg2&K~^py#eK2bd$X{kJcv9x>bKt&7-947US-5Of2I{Z$N9$m-(43 zAwRS6zJT^TTROk%3n=f-*~;Q|cB8XGdeH`Vqc`Ad4vpJPb~iNdH>ckEFccsP0yu zL}S&(sNH7wAUQB4z*kCe`)R?qVG_x}yH+{#Dq;JY_bGJyFCh6ciRd?p=vNwb%9l37 z|CxWt_&nV38y@GyN#g%Kich^EU(+k&XDA%8$3=XOZ#iDCL;YhQDL)@lOmjA=KATQl z*W~FdBzwuRpM$C3tw}DE6}%<#%cSJ4938*#G;27`V$Qz9>?zC`;4_NM7#>d6c3&ew5Ha0#kp2`hpBs6%9ms-zoI%as-3V-@b_W?W(|U zYb3rgy1c4W^1H4%4;h??ZdyDvld|}R=wMGNd~w9`NZQ=lVJS493bEfoH|Mcpur84!FuF63Q5VQ+{7rpQemH z+%F_};rUt7-R^pdefg3E&k_O8sqcRSp5k~jjN1IHN85;bQ+pRmf4;!i6x z`fFnb(eS2xuF3Da!MvGZ&s-P0mU6FWbNO~UAh)fp7IaU(-qMn_&t&Gjms>CDw`pu;UvG@`Il+8?SZWAh$ zuHRI**LBp#!>GN6^Jp*fZA7r+$o7q_73@fzf^WsE5bb|2QI&C9o^>Pn4xoH*SJaO<=6aQV`!eg7MfTw=8si7h z^B{VTq30CR-G-2T<95cE+fD>r{5Yo2w}?##+osQ>x{oRPrE1SPU0X-CrSm@0tIl4p zdn=IFJ!&$)_mUFcK26rr1M4bxXuS8_gsZTj& zk<7QsSW}Wh_SYbn*Qt;)c(RkZtto(mH2=hk~uITyNQMFI` z$kFAMS#%8f+@a^XW172!9A!4-eSc9iD(5_Up3{_hdYSdSjLNAWKzuu(E_3{-dS2Es zpq`g;8`HU)ZrBEi92Ir(S!6ew8%DZAzZ1sG|F>g6f49771Mypi%onY1KyIHncT-)~ z#8G`&e(u-6`%iz)p}F1J0e5}HHpc$?v&g_$hOFghBoW#x(M^0=N8sGbw3o)tggw&URa9v?;e?!th-JtB9bG?z4K zt`5lW9vD4p(Y7Pty@yPsr(+MuNp!E&QTJYsB8hM8ga?1z8pC~loS*$4v7dC(IlyF_ z>?}IG#!b&l`>BAZ4X1T8@{vH#ONhqZ!k!GO=N@<7Z6waQ+J^M>zKZC*^lm`f$FKUN zqv(f)&j-WuNtK`ImxSv?%IRg_?q+^+yc~Q!Q_Kh6-0!ydU3(pq@9TVt&56P+u8_P5 zEhmJ$SFwM*x3IW(edbw->L~7SI-5ruao?5I$VVx`o;iUVBIGQS}}#68DO*&lSU9xxYAN-O*S2({4M%g|AtAXn9<_fSc-m zwV!qPs#^MuA79k~%bT8QEWsznaGjLI)s9$q_Evw4sMGPd0Mq+qXL=P&(x1`fT{{x+ zeMcXk8w{W{WyjH;ljCx`4bG$Gv>S)(UkG@PDFklx)9$o$pHZhJczlz=(lhms>g`CW z*p%D?X1eGyT~D(qsK#Zkg#X6_6g^LwtRi=}X?qKRx!zuUKaK zIv;=Oz4qOow6==TKfFhCRHKsw*xX2z1vsAg|M9VKpWxps>I}p$aOyL*jRyPTzJb=1 zI!EpO?WZL0*avXo%K?XPa;~vw=_<_f50waz)y8R#+ zk5xYLm{Z_^=V!Tjq=1j#eJYsF*O(sK_ZffdyqU(g+LDZfO2%v7i?p>6XBB&zZ47nau)H+`M2bLlK4zVI-Z`e;nHX=_B@*7ooDkXl8&zr z%>2A9Pppg`$o${8^iq&r0BBI?|j(N18)A63>4})RAU2 zy2;Sz?6S{k^rW`W<)g&a{&m3iojHw- zMkVWu$8A|ZgXF`U!nQVd%fIb^0LiOUC)DTJ&#*I1PmQbnGdjoZI-f)NUN|A2=X=p` z`U~=Nux152nCu)Yx^5(q@w0y(XQ*HqOxN%7$U{aG;|tES&@XJ zi1wBby7!4r=b`tse$l_)Q~V{pzLsx2@tSUt&^8J7%=>NKXN55;&$&YVpngqA^(^Y< zi^$eq_eHskSX9*eZnj5Pl=qj=dBE|7Dx!E=u@Ql!uFX$ip_&H~I$E=S8UI8y5?txop0H`Q^V9$fe=^YZ3LYreAXQuSy^L3T6H>C20J;R{~!wffvVjS-KKMx?)K>FPuyB z#JQ|MoXb}L=MuxYmq~xN7f|#I67K;PX|GFHEJ;_QNS6=Jr3K<#Rv^yh1>j8fjf{NR zmX&u2euei6?;jT4?-bteWA8u4WY4)TTl+xjzij!=Hp4IJpB-Pe`eqD%2@M9n>^}F| z>#mfsLGS$sx;qxIpX3q2-+T6!+twi3z5fGCL*(1(uQ+vVf^UDLp+388Y|!5w3PgXc z_-ep?@57+~I~ZD~0^0L^X9oS9?^`M8)`WM;rkrbQSe}aYU*!?MS`**ykv5=+=X}^S zW$g`~0a_9sJ`KOrXBvJ9k6(vh!n*@sb^E2<652Cgzw!Agi}yzq>zO1TpQnCdDxlQy z#6ECd(FfMDIMIL4rP4>gz;lI7hWhT23wiM1%-7s!?8@3#M`Mw1FQWSWM}=R1q5gZN zZ=-cD^t|nDwf|o6+xk1kWor>lDDP9~c~nzQ$=mw7*PFg&uc4Q`Ex)(?`XI_<6}p4@ zZS}dos}Wqu+y2h6UxR$ICf@dU-}r4P&9u)nA3|wn-u8cgj=dim<#X>nr@ii+mG=ss z;J=H>0D7+LH~ih_K;TIJHwLZortKTY$aZ_56vC5Meqxqb0=2=k4tLYX{2k|EEp<=@#d&u^Yhd885NsG@Btz<4<4 z|M0f{tlWPYHdby%b@Pk+mORtQe4eme#4`JmPrNaICD=2c>kWRxIoB&T-kZKn_Z+>w zy!+B={og4pk9^u|^50wieu?#a@-F(gEe+~1AE*w*r6KIyb!IufKTtI`aC_GqAqpr2CCQ z`JOMVKj8D>Zwwl~{NH9?aDTh}8}4r-A@{f8hi(2^ddJ4&*FE+;BgG zqWfE4qx;)aQgG0!rNL8;xt--%7sj{x+o#;j{BQgqCd;M}%|?HACX=z;^YLtiKkw=brTO#0zGRy2T4(RCB-3I3 zystl=`@TDt3}Lu~*>p6~Yrj92$VRir?e`st-dF^|?@E%4?e~`>-PR}jeP1#i55){2 zj|_c35DA58b@(%>4tu86Vb4}|tY=yk_Drk7o~^1dcwP zJ3}9(%UJn9>q7Aa<4kj;Cu`TQ#%?9?8?B!6n^jHcH`aQNZ&tOP->m98zp)l|=4X+^ z@r{wh@r|{v6F*K5^vx!d>pO34cfJ`$!DtH@4&wYA}NqVk?`(lBnEl(CrDWbBUuXt z>zPrJJ~N)C&kP0nY!z=kGs@9tRy=wpMZ-Hty<8daoGSyKb7jDDt_*)FC0QBpoGSyK zb7kb7Ss9iTbyV@?P^>?~X|Xqw$%J|%IofbY{2lVNUyYV@GMnt`@2Rny$@Oh(o$!s< z4S(Zx#NT*b@i$&){EgQgf8#W8f3s-8zssB4j%Q6Typt+9zVVKQzp*MgzHu(a-&mC# z-*{)k-#F*GztJk$-x+@^3GYsvZ5DHUbKz{Woa37dXPX5b-&{C5SrWI8iZz{WsNy|0 zt2)Z$pVw!My#9zDQ_~xY6Co83?gbQEkEbHe=lt`DHbp`)a#gG28Jg3QyVe&ok<6Nz z{!|LYd?ajk9XGRm(To{ShPRu*rLiyt06A%9BI%=%bayP2$(Vl$C?lV|3Zg?|XMZ-E zObE{h8((Y%_MsHcgpXv&b4_G`%7lhHKo7jbJ_8R9JY@(fG`bV7Q!5a1qhedQXXj`9T0vGa=jX!TOsS#C={Euc&ZWjzb`}M;-LY? zRq^1lP$HXYO}4~B$7x&^Co>j7k-rS#dWp3-Tn3>E!Zv>hEfB&G1|f_>n1V11Vc|~e zPWu}WN5T+rV zgRlVM3WOyHr7*dygs=@lGlWhESqOs=h9QhV7=thlVG_bLgtHLNLAU_nSR|B6CW47% zBEp|jFoS=ff{wjs;=Q@&RDV2`=}TsN`xCiuq5f=A{FaXPSo#oqCoBQY0mq>i)KUVNl?GfxOqXNdk0#^M>>Hu9lb)d?b)P_WN?0V%;g*brfEL*-(L`-JMvf)ZN4nFY zEQWvWPxYn&Z-QYk3JsbFM`@GD;v)m8STYkmiql(s2mP}*Va-zzkHk}31U|_0ZrQTQ z5cnW;EMEO97&vqYgI zttA$naPd%gA2cTIN(OB(G6tk#R2NBs`qh686pO(x8O2lmF{+Pr_d$VV?^e>{ja1+9 zOtd?L`Nm+x55nv!cT3I8-5`G;Tq29gA2AFQLNkOEgwqgaAY6h_{85l$5ZWLNLYRPX z9>P@!#bq!yKxl!`3Ly(&0>UJOc?dTknD>DEgU|tC5W)n63uKem$3UJ!Xo3)fFbaQR z2Eqb_MFMVZ8pgq7+0LZwVP?JQs|?cpa!0k+iNX#+VzohBm3oHnlX3UCm{ zmkbR$A^_JEFdM3bjIz_@8g2O57(S~Bp+ z+9Nk`fao2lwaKZ#(;kPY7$jqlmS61bo#49u5efBr^bczQQ}Q4h(7gIS3~*}v@qnkp z2Zle)HY@rUi}Ymc!gR`lpKCJl0iz1!aoxS_OdR+fhcE$Q3c?u(vk>MW%tKg!a1p{4 z2-hGi5&2#Yavg#Rp}L&hCvATzszgEMiX~S>Em~M#9fK-4$I9wMMqh;V3P>9{8a>MF zV_Z4QDP=Z%P9N(ILB^3V;Yx$+4M@46Wpo05F$e#NPQ{3H%p8;e$W#zku-T=kJ!!KLWcaaTGd1*zAr)VT3ZHiEw1VTpu=e zS?}w^W;8<$B+-P~YngvfjKKN~wH5iX7g^>PGUOkly{|jdOK;>d18Ye(luu4%BcXUV zF`9kK@oWfjhceJf&FrzHNj{qNYla{OlUFlt8L>FJp;#<=4Ca&vL&sYq1KCY%eeDq7 z!^~ZlaRDkBjD`nDf2VW8c&0bV%tZ7r6-tNV8UN2(J5eT^j)H%t&S{YC;qo#P3LEGd zuFUKNBBQe=GDtw6@r2^*v6;__a(h}T7 zVVZe5{0C){<|bo@VNZTx$m+}bI_^-7;P5Ot~80qToHJg*Yy`&F8pMefy z?y?%o+?x#dvvo=`F%A=0vOkNg#hI~WZ^q0f&F+2}ZQ~|2){&2959okqRjv7i*`JA+ znPh*uoA8SOQEhHy5Yh}DWj+g5WY97Nk|GKJw6BkYC^CP@>ywPJx|8t~6!Ihm%mmkG zY9Q8-!Whr**!vt^XMb+@jzi6@!B-CKX?-r(vZJ->1HSm+@4fwdZGGl-)BaB?2-6_2 z!odv8nX~K}<|<@70YQ()O!gj*f@Yt9`DPYFy^UK;-MLo?Z_7JXyvk-}YIGb>seht!C@~L%W*H)}}oN&0R0=IIzxa zC5x_f-8Bu`e5g0tZFcp8&e<2uu4DQ$)e*XB#@&B3!`zVnB#E!7c@q9X{FB7jj>cPZ zc$cMlSl>*7uX!MniDW@BvE~$w*5sS%tn0fiam|uhMVaAfny$?s2Vri8lM!p45gCYP z2!6agO_~%bH=9g??vvS*|;=Y)MYrtuaMbPXtcvLt0N3xvB6X&S4s3Gp~?JxnE}z!8WxSwbg{WOY8VAq%jHuq17@nN1%j*@hi$ zqA6d%+k$1~8@4k*#Ntlo5Wt}yS)X~N+A5m>^^jp0m*twz9t~zg@V%P7Q+`2U)zu%! zheH1PfNog`Ll8zFoQ5z7;S7XX2y+k?AY6Zfa23K02t`jAMk#~}2vrd3AT&T|hR_Bf z3?T(!5W*=4V-O}FOhcG~a2~=12p1t-fpGl^%h9<6LOFy=2(=LEAv8f~h0qBh24Mig zFoaPE;}E7GoP}@>!aRgU2$vyTgRlgl7-Uiz1QS9vgl!NSA+$i~fY1ja`{W0F@WFrI z2Y))fV^3ypDAgFshIa6gEvI8Z1oeueo|eM5oNur2J?HQ$e9t+|lJC2cspAlFu)iw< z;L&8l;rnITyW-I>AQjAnjz)6d$V)Jm><+OsvUwcLz|v6|ap){Cm`X+gdFvU#viy5w zAe#=cFNP5hrJ_(mO?Ds)$vCuG+ zJ@nmLU?rn%AEb;BZwLCFVqj*Ery^z*!pTgg0Vr&}JSwyEBK&E&A+slP3<79bJ!u%? zQK4oCMt)u-Xnft)&IL2n8;T|f!bCMA@HQb}U}nHp5k?Lfp`JaEqAvmoEVO?~ek7w% zPb8fLEc}*CvX_?I5{rZ~5k#;YVF}H)n}`n8CPvalE2}kE7ncQxMKVI0s=K!Xkvr5UxR3 zf>68_^cV;xglY)eAT&Z~fzSb=4?=dUv+Pyq8J`DSgyL>PYh1S@7<_-`V=;POgW&Hl z?7dfOQJQu89Z%1?TX?3Jd1zVfTq_W zEI}yx1n8#_Dj^W(y?O}E5LzLGA!H#8Kp2K_3c@IaF$kw2OhK52a0bFz2s037A)JG7 z9>N@i`A@JuW%)nl*3^GReNxBy`R!Xkvr z5UxSE0iozA=pPU&A=E=?h0ytwvux}zn{$Z8c46%3YS&RoCzpT2s6aP|)1$a1iToU} z<12TH%{h(2pXfjQAxy#YkC#pk|xG!EifxF;_(&u=-!{A>TOwO*X`mXxJbAfm;l<0pwkj!%XgRXq;5XzlJ-Cm=%t$Pc# zdsxmkh34VJv#>n;%z;E2sOaezE+72(o(sx+L5us?_`0GtvHgj?p=@{GUciLRw#kyd z`2A2KX2ozDnh5X5kBodf7$KdrF9NcX8H{56Ky&D?(3{c`O9HU*&=M$dQWn`w88N#e z#1el1{iz#9PUux>5VDYjAh40nzX3AHGJ*Fd7=Te~EARf4N%ZG98C#(TA1BBpK&n~B zHIrG^EE^LwpIFO1wilzFBlmZ*$|boHB0(Kfk?v>@$vFy;Y@sNdv`i6E%YMe8t*k*= z>54`8eo;F=D=qoP)<(JMhGt1uokSYZS~7nV86bX~5;D|dnSDap8r$YrLsmkqvdG#N zyag@OWS(W!SWB<81(OM&DA_j4R?DE7Kr5iw#3P}EWlyr2JVWs@6Ol-m`iFHzOpC{A zuw9hFN^oT{`QQr*2eEAOypugWG8**sK%Tn^lQI1*6sIOO;)CXB{7gJZd69n1BTawY zhDFE`J&-!v_4Jqro_qelj>hKaKw%~X3&oCwj%SFT0xyjHS)q_$nk+?g95P)*p`d;| z)ZLc%3D$i**3JQkR2tX@8p^_~$2vF0JQ9hdpm~xh=z!H`U-B5?E!=;zp(9Y8Zlc>J zdtgAUF&mS_{AP83ldi$nqCU#;vEF}yM-3miWwK;#pGybIKF1;(fbD>HXhGD!H)q(x zc^`wNz#Vioo*C-S(ixoJw%ThawHRZa|FpY!m!rKgX|la0>oYl! zbp`W`f+h|`6)<$DrcN@@oh*NPRGWfav^bw2U0ZGL$u#xHLy64(#6fGYU*A=2cI~$0 z?D{TuIhHo$q^qaeETj=N673obwxoRfeQ8^r3=tHm#FoMkt#O+lzZH`K_=K4_Or zkcDx|;Y;J2pR7c(Vr}P|Y8X@9UOS$&W1}Y1!qyqDF(im^q$_e6rnG;B1cj}}KmM+q zSVgQ1Z8$q;1L3iYlgzH`x)r9~I$Yjf=(Ntl{PS+gvmixVgktGPD14lC;c9yT(#Tbz z{j6TF4$oo8LM7Xe@Ny`fVe^DYf+gxY&UY%#9E%T z`cgQz799n>JrT`DL$QD8Tk!cPUy{W6hoe-LBxmjcGguijO_vBCj8-mPC>$n9jf0jN zZ`Fa+Mu8Vyvqw5DWK64O^@mI(mj@upvZyi5U7-YND?o&JaGT+N;;jHU(*C;+>)*72 zSdOjfQ1=l6NCsNok`xOndg%P+5ZM~F-4v>0)|3CAG3yhNV|0J@mK^V#+dH<4Kmd`r zk0E(Kh}s6Q1+9lkY>oq4-Hu1Y;TYAALR=*_m=xbd$eqKPEWW1W)>1nq43+^DG>fZe zk;ksux^iCLevXqKp_DPJ zT9erjh~)627#4qlY^Q#Vjgd?=4QVOCtWUeF{Yv&Hl)lx{lc@VEEvMSrH6vkovO&)& zd)}k^zyEcjHL)h(Q7ETsedbZ35HM{3IuDr;4wxk6leE*Cu}Gpf+Xs-OIb6I))Io~b zGBS1XbIzxf`mj=zGmhNdX?A3@k$8$~EVP}tI3X0Yl;M9U?vr#PMBs>U5c5LxwLow? znH$z;HaNu{{Q?Ek-*xNOZSVu@Bh4gi9Ho0tcicOx)-` z=xT!2TSVMKd-e7uVXPnr62-XH$eO7op@!9FimXUM%MMgiXi!DTxhlXV>Etmwo8Pg= zBu6=rW&?l8bu1LkGOHHLjoPxhVEPke=l(EzGkIh3pIQO=`Vt7nZeY2i5nzKD-M|`6 zbSL8^)7;7ib?8DiW=IlBMOXoi(F`#^nF%s41;NypOot;GhM!d`nS+AFrCUg?J$_ai z>+l;Zfw412D@qg4W~8K`BMUXA0RgOGh7u&ie6)Y4rG)OsB>8rcJc2Y~ke^4xcNCEo zrcjD)o^w}6eX(vU?>Pq;l= z!siP}(qN4aM|5Svx}N}WL@f^S4}b61eBE>UlWW`yCcqcOv|9Cai#Q=Y^))ae=H4}# zb@aiM?nuP%a@80Q(`LpL+s3{3oAEpJ6k|J^Moj#Wae~&XL=O>_(A&O!jx)!Py4Wq- zsMq}7Wf($oA&*?4ZJI9ZUjXzz53pRvoQ&~(xBtX2iLYCcUCk=cS)Kn(P(VZuAIkjW z_;(}Bu;IO&G9hgWG269^+ysM!Ky8A&5Mwt&i%e3(+rw#(M!;sX!PeehQYv04#XuN_q3=zW0y@)+PRRWzG z?VO>Uaj;7tSpTd6lA^Qdrxa2D%Ej-n9#UzGPODn_O8&vGWwKY$_8T2j)>|8%&_}yY z%c=-DtV|X5))gWDO9icpE`!+;r;U-@^NP4<369&D>a-Vd6A<&@sR!{UyFa&DKCUFg zW;RX=a&3e94#(%ny1%@Qi$(Fh1z#^ID$9v*yo|e#d>f+yh#~tBd^z{up9(v}_nss1 zrFau$sYv!e_PDj662?CqKk3=nvX?q=cM;M5Ft9$ZAHwQT`*2@2A7gcUjF;m{ZVWa3 zoVCo#7G-VwEzdT}t5sNE=;4Z1A@No?0fcAtaxGwJ#%_>ir|1d{k*O;{2Urp`yE@}-8B$pteM!lb^kueI12{=4>_dB1` zMJQ*sGYl_)Rb>`)dfYsfNKJNjtG~oA0XsL)-X_fc7cfas`XKr?*R9Y5*@%!zdTTZ3p8oJK+R999v;8D& zA6c7Hq6B$M?Qc_GIb_=Brfi>W;Na<>mt}e^cb&V&gGH$^*h*uNU4oQt{pl97MWMbJnK(O0C1f zoP^1Oozy)nu(JXjX=mkyCkHUT|Kf{awf|aBapiq(EcK_U=z#lK#OfPgKLTZP^a6|< zk@3ZtbbFkoY>M|N0ngTxKD0`6P)3*3<-QsMbtQrF4vkvIHzpty*u0{)cO@76$U&(U z`2utytA1=aP?g^nxcrs3E*{QN3|BuE@CddI{nQC~`$f&*#jB1P7I&e~j;1yMFKy^XVE*UQT_-E1^#Nd)<@fGbqx#ultg_ z0@?)m>997#w5dFffX30`QS3YuO{S3vG4amR22Yp$Ft4er%^WxZ&n$A6=H%}#T6yG= z{y!b`M`Ec=SsoO1Oet~6kSv)o3q$!Uza9%UhJW)cvzTH}0neg1yGki*TF&jrC>7Xob&`ddUD?K8*c+-B6sY1P*!w*Oni8I~H*uqgeg zMCi$}geQ9xFvC~@2*%^u6_}5~qxiLuqbI*;(54Mi&)l)SYn6?83|ioq3%oXSSvRre zMJg9^g~q!dUmGCVmVc|}G-Qa;xe;XpbsIcVEo)vp(Wb`H=?F^-9S9)1h|}nNEf$e& z??#=~{gBuDeMoZx0-rjRGWe-c$flN<`)tW-rs1FV`IGJ^UW-J-VAwA2(= zjp_st}e#j}n$h0uK%Na1OoE zovzU`-^OX{1NZ4K&$#r)f4L8}3F%!Ynu=`ZMJh+))kTB?9LtTeU$(SO`+nu1igly@ z>>h0EtGTg8-%fXR0(JU-rSi5@xC!+}6TKa}=l_=W1#ory9rLP}bDH)3Lg57{6%w!Z z+`XQw6b`6u597lWE|$(*%le=>nMIy{bMH9?JyiG2jTtQ$op4Qx)JWE)mhfQPKXN)| z8L_X_zPk5AU?C6j#J7D6(!;~3H5^zNOulJ0Y9QbmRS3LlK^ml(N}(O%B&n^h3=ZHmbM$k6HE zq_3;tjqx>Yw)XTjp`?*8uN|%v@CG$@{l9@lyf4}T_Hdoo-i9?WE5xF_{~P&xLsPGd~l zJ`ZsBkytu9z>KLp+3FOWd5RC@Xix&@*$7a!A+w3Ppz^z8(U!gK`tuW>dfmOuF3KJ#4pReh=AW5 zCbX(XLX{5u&e7CBMaI_*_eK}~Viw-KBq#Nuh{x_;m|Gt(fEqMI@@=|v=y^GLYS~)Y zba!TzFr35~M7B>EK%X=wQc7-N^^_??Lq}oI0y;7%^@UjTTE83)^=<{ktwhHij&=$O zFRbX55H3AZV?2!$)p_qnw4aiY;SV@Kcok(j@ zNuYSatcL@Hri7Z>qVCp|RMAUjiqiP{WM$On)y1%aAgDK`vqXrl?b*QYK zoH8qayXgoyVuUu!o`O&;zN2L9-n(^B-GNxW$G4mpQJ}t;wqy{bLn7E4v zjtm)igXXXJdHI766JD9-&?}w&4Lni!w2r^G&!e}Qt>1ol(hXd*Yd_t~hwattI9)b_ z>8&nC$tfLVZAETldV4rkEE4=8+Wx!C?hp^Qm+}c0pwoZ){50BmiuII74J&C9ZSd2Z zSHJmP8}ivB_8DOc5@&~>V%J^EQt4$Jm-okm_iYI4x5Fwy4lv&Q z^@P1Fou?n3UU;8${nx4t+w)282)xZUZW+!%&ou^5xKBYFx1{~296{$BoIz{=T3ck7 z-F5XhL*>_HR0ejp(uC7<@ZjDHux-Eb}Pt1=hfS-+IMMzYrS}= zTjlGn|32@MSiN$aKw;I*G+$n!@4Au-3JO$|27V-vv$@on^^(#Gn$&BmTVtqjcP@tw1t;7UsblR7ppSCDS&to>RKl@+ zd!P%Cf+4zw+jm!{74UOTzDC05%?KUY8RUS9Q>4n6q_>Z{KP-SOq@t)Cswez9)R3@mRQ2 z$nbaagd0OUA(mRhJbLC|#gPM6F1-g??_3=_FIT-t2BC!Mt_;uSX_2=GkEV~!V(Y6h zUaLd;eNCRallNDZN0-ck882~Ox|oUa+m~7$4rhexFH>Ht*!q@LV=3?WncJT$M+E1f zD<5$Ene-9dUg3bNoxn$b6X;_zhf4G<-hFeNeqT=%%Q{;Hp>^9b^f|HBx81CxT~%nz zmF&bL8mi++Hph134yXSt(EquDWe)0vCZ~AWyyia;D0I5EenjY*PCA#Wv2&T+Zd6Pr z+|Ju0bo#Num3Z~iaNE6b4D=43`>wevY~k~*`zyjpX&}&S=vF<}1bZt4?+r&(5G(-u z?0VOH=Sp!*Mg;ZibA4={(Z632Do0*McfX=c^tlzd$C^$+wkJspx*bDkQufltU~C$I zdf_bV?O&3>1~YiBa_Dn!>cLB4yy9w{l|a+ZNxENA+fZ+s_uPxyw{qNED)5_;k3@MF zVByJJPXL75trm2@v~^Yu*j5x%`D|O?rs!9*e-wg>7w!qZ!59GQeDwO|tWPeFE-d`2 z-^;rjKUW7#(b%vt9~w`g)5G=FdIzS&+Fs~0GUF@$BviQ@{h=A$K8@hH>dAU$l%Wn2 zLD5PuEaHaehOvz7B8n`~&iZw{4`1@71<}+e0niD$?e!`{xP9%1I{O{3Kd)2re2Djx zYUf&hb$9H))P?P9=kC}NzH-mc`eOw<1}6oqUoyY1hWFH^)(Cg;LUcpfc?cTP%<$61 zal1mP5nE6FlyS>pFTA}^*#tq4nQ9d#TsT*(?vWnvZWQJOJ_MW57IDVCrsu(R5K zoM34%y?y$gg-#vP+whMm8t|^KGxR5+0(P@FcPpf#Fa9m-JNob%NV5Vy?BB9=o>{j# z6n&Wfp&bh%z&1M1f{&9pNZY%7tQeNRovXqI?*NvE@Onp9 zUpZ`yuvz)g49&l3LZJ=5u3U=GQRg}`Th3?S#5|$>XN~Jp#{<9MX^uYIVzAH!^VlQr zocZg=MN(Ge^V3a&!>E)5Ki|uL=(QqTB3B+>Uy8x6_mhGCJn4$WxK$3QZlA=lfkURO z@DGtn2B(LqYh@tW?rkp>m!J}?zO{3xGuxUgJ_9kUbn{uKyo_zYJJtz z0<$zS&t+uQH~Z(!c=(EEm?i9a-8bUCx~a@qz0i@!V?Jwc!=(TlnmSwSmU-`hV~n~r zBf_p5ZtHW}cXac+hM@3ccx%Fn86ywjw|se#EOA$$8hW5CWmL3;9%JqO3#-5}So&Q` zvP3+8((6K6_gE?DbBqDhnb~+P)mNm2G&&&G$yv+V=zz*BmV!!=mlP`m{~VXsp&fpn zSFSYC2mQ98s!OS~>7BJaEO%U)$uRKvutZwX^82`aezn^L$!UwBvb3}AJ&38!)VitC zi)iW9zyp7YwDOOk2P%l@YVWJ{WhGNBr{rNptzi@Ll3Aq}&QcYyqh0&20+LzjfE=t9 znnD06QRrcZ@;J~F-O%7i7(^CFm3?V3p#l;35q-Ihk5jX80pcgT+tZwDm%0+l$}Fc? zMXT#~^Rlx;|0;W{6+K@MCB&8KKubY7N;>mI8(@1 O4YLG2Dr*SaO`Y6&6Zu8#QL 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�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 delta 53188 zcmX`Sbx_>D8!cR*I22ka?oQF-y0{fDEw06jyYr#NiWe`s#i7Mr7k63QrRd^r%ffQM zzjxkyXEMnoe{UKRGDc9W$_i3>JuL^YN;jE{ zbvz$GZQQZl*9=&+KFBP|Z^tcdC;4QmRF~<~=l8MEfcwrG#-CfCMnqlvSt$L@%;PWK zrUR>cFwzoeS&xEQNjWdxz05&a!cDf9Z0^=}wiZ`vW;#f^p-p;ggVBC;Z3{i{L-5d< z60LJuf&rf&V{VpcqfQVHtJAYoV$-t%I``ENQj)CQyS8odqM8J9$!#y0+_NMl>d%iW zO>~2RC(2q(HR)3F?V%U@m}Q_z!>wkH$Ts}g>k}}+HWKh_SIKwuQHLq=?l8zOg4Q+n zeMuHL^=#B7xVQ}{UmIMFoow5N&epTR`Qf71FE!Oj*I^WI&sT1T?duI?7`35k2fs^h z%kIW@%{xmX-$Dr{mPAQ!{0n?fjY}r=sO%w;r^j-wYnpWa|JoWVku9x~1JA~lXyA|a zgTQyx;M$+J`pnr)m4CMHj>V9LVYJkNa7p;%i%~%dQc5^(OOSb>HaGu7fp>c&!EkYq zdq!f_#7ylB_|?vN%>jNhWE{CYvM)A6b8Az>_1U|66rfKx$X;g#*h_rY%<_Yb5L3(Z z!7k)+gV0MU*L0rV)D+Q+^wWj~%qadEzy&+O?pATe=+eBCnB zuQvJ>AMJpQ%-PwZ%V?L^n>DA3E*-=aMbJvHup{Qz4Uzmc_Stz>e7K1)5!=b@K+~dx zdQ~IQT3# z0*1NZl}EEtgeZ5@&a>>%J1*xS#JcNSo(QVfFrYyy#=C4jfXhs?9l8I@D9h(-Nl7@MLLDbo_#uy z`cuck`y6L><3n0QN}vM|#?Arqu0J9lhY_?U$=8XX4UjIP=>ep;AWS&6sERzRpSu{F zlkinUr!=nxZ@Uh;=H|sZ(K#4^-mU8KBomzR?m(iX!hN;t74Ue?RBHjd(@s9byIOI) z--u^Qv22;7JlFE6NM<1u59pO&*@XL6 zfuvlIFsq<3-ey(EDzTM6m$bO)^m>w3Lv7zBG^$~POzz^{xh=6OPoX|58g#3egr;+t zPjPLg?x;t5rcXFmM=y>Ff-rXWGGm$hAp9mkvrUTz ze09b@3wNbV{nK%f8~MB<>iom^*{D9kf5bBPIk>U^-(0FaE_D#4UI@hYdANmVGA1HW zBjEH;pqY8-7fqg91-e$NBfzIvd(Ghcg51Na{HuO~WlOij&2~$JNS!i_5)P2tI|Y$( zy6m*TEhb=k54$(0Y9y&ziTOrq$3dRCVn}G_9hl?q{D^gc2ZbT-%xl-@vgDnjLn&V= zb*@7x{DqyT5{(e3Pi&6D_UARO8~vrq#mJooss45rmlBLwjZn}^)Z+x@Z3|~ZDZxTM zDDVkrKEpe&OZZ?MQ$_UeoJKD@;TMo2zYex~m;t^&`}>?8b7;kr%j3`e8)?aQgFdV*e9 zOE;#9?nl<+G!b&69Cb9Q{IR*3_9IkgHW}Nc*?!l7GCF%Ze538LBV~c;a9c<|w+Cvf z0q`6hm@r}ga^_D6xh(H{^fBJ=6WKj5{%`4xT54;*a!xfL3XO3Qe zTqC`;Pbr?Y&GgaE!~xqQ@jvLC@Q)|t3#{zy#xxr~L&16#3nZVA_F^Bx01rEmT>JrQ+stG0G0_lmWv3=eU;%ei^Mf*x<%1+{BrZ0Z<@er50K;>0Fy8j z1b=i(Wc)fGc;D>mlxCiST zcThm&I!`rR>DpbrhBuy2-=2I0s9W<*Kt5d$71(jwp*XPxmEgr{b?`T;3FC(3&y-q2#J_{?c{@GO~XO)L(Kp0W?K9 zpN7&>Ub_~J(p>Uf+0dtcSf6Sm5NI}h6qxFAqe>eB3<6^KzViLMy~}#{if!eA6?H;9 zz$)0T7V(pobRcg958)^k42vmm*F<0S;oQFbgAaSc5X=4QeCJd73PRiZ>ma;PQcSOG z1?_6_@!ek&o&7ZesdLYFKyY&*`-YpI)wdueZ$06K0vlaSDofJ%Gpqa8WHmXbz1w+A z$ZbwY*zU0PI`L|E}ZT0<%xyws$uCm$1|qP>b*%3AN}@Uz?^aKr%^Dj_6P5&1bKqNfXpK(Frdpqj?~Y9 zB*Bjyfu0MI{4IetI(jRxdb;isI!X-vm7Y_=d|7J8qtCSn-srYn8G}kOCbzWmH}^Hr zC7w2Os}9jxWbvMs-jd9SHimJl;C@!9Fk~k5l-l3;k9^e(p zd+6YZsW@x7I@(q`Cm?p{upZ#lN@WrBd_W_hvCzyxFA$ z`z9!6h(gyK4uR{>sS0Nxmt1r!#neE zzDkvZtp%<9oIaf5RF-ac*| z&=p~p`Zw83#6P)n=eMl-Ms|vdPaIjYRb8=F4WnKz=be8B z%_MemSzyFbcNQ+{$vw%6wV$BP4x)79=Ld`BE%GQrOFtFDt?BWdLq|a~=7wfBiHa%W zWT!DnUbw4+dIdqhm;HJ=P@Fmwb9g=i+7y%PW(*@+lpJg^qBM`3fEs0R;{m@a6s_I_Lq|feRKI z%~DTjZd~`Mq{jDMx#h%C!cOl>M zFY>09@W25L3rS)WKow--vP}fot1oE2LtVaEujvi1I4V7^(4)m;yMc2>`?__o{4iGt z93+5s>Lwhpv;nZ6p$nNsjrLUmzK@NG$FC-$dK-Zb`q#t=p>mv&vne_^GeuYY?#I&=wm!ur68XE7JlN)Me~GqWvUJfYy1Ff``*;m_u{eWf0rZe(IfVFc{k5L2hv)` z_M3Qv*Q6NZE<3m}Yvbnq`Ky&~JB)$*bSRV+^16!h456q$vo_t+p*J z35XGQ*Yb!<>z9%EE=xW&CGd_2vF#JMCS0n%4@+X9yVEMtJtdJVO9&70xN~26Uy0Cq% z)`Dt-(M`-@Ui?}u3Uv=JDF=vLF8DMAmB=w9>p{Lr~0j>X7#I;a( zcBC@r%yMpIGSwOU~XV@a;`k9Uu@dG)HefIKnRE>1|K(}S!yu~D+z$noI zEaOdcftE%o_=6VUrYE~pgT5%QJ&sE!F!EwJ+j^wCmG4Te+?fi2!J)r+Hb@>{`hpY^ z40cJ;cR}$?G#gV#B8&l(jnFsEKFk*q&?>Ui0B_v!zmtud-qjpEh|il(ndhK@d$Ym& zqUrE6X^$AbzU{|y!giXeJ74L5Tl&+w>=G3ziXh|hCI^5yNILu|yw}~hGgB!@A+t)} zw10F=H8peSWZV2|L)>Eqdg$blCD{T_H!u#vOZe})8GQa;B%rtp+QP?7YV(gqL3 zHpp`+)a-ukWkZ8d1yAio(H|kYh72ST#R5m$(~0#XaNZi+)EN}@%#%BVP`i506Bq~0 zJo*Fzxqwp8>6dGI_j0F#WE-PNVe0XZrLpW_0m|7z?J37TTMD(hng2i}Q~lj^J)=K- zv-=_rr3g7_{jD6TUf|ZKKlN;NFhO;D+H?YXcs-xUA_TA7wGKuS1B1Jle zSE|qx%8CL|A^Z7%HJ|oEc%EAA>(*%`7dmQhf&ELdjt+A0Hx2W2)xU=lc4>dEl7aFR^5;pm9ltYvUpQu9%3$7f&Is+pnsi@X)KaZO6GoxfGpFGS z&^}oK5tbEB-~(;C&{*>#f3B+tl&;&Fkfd!3#@%PhUejc3X`dXnb|1)R{aYZC@0&+2iYnWCz+MozI{ENQke|?w3yoKyZO>)UECq#hev-WeJA3`3f;3ZD2 z6ZEaQQpctQ#SS{JXJHH);KCKA*1(H8p$b>ft|W3fZgfu%-zWlXb!qYT4rucqVCUC0 zytOpsfC}Ae(*}Z~+{b`<*so_t3-`-dO$lspg22$qsbWGl^r?RC#>GS;2z=q}u zq5r)-rAAZWO0h~P>1`*c_I=Ke03XYa%Z|1!^6^!(-PoTR*Lq9Uve5hXEXyQ68c>PC zZkA|tAit)R3&JM;!$8Us;Q#jtgK$;kQk|T1f}cjgV_0z(Dbca8ENlWh^*R&mho><< zQ*PDiz_cTyPSRcp_j`)GT@}O-K0qP;+w_m+r$)2kw<7^D9}9}^4O!%e89R;jd9rf} z2RDjcK;9BTad5Mao7=WsK2^L){LUddXOxho6`R5m`raTvN%T)M@Q0wy8sC|+(nS;J z?AN>khy0NTw1TRF_3F3Rk%v$PYofEqZFSHq)RJx+6wOE=n8rF+Cqs!^Xf4j!1QSYWs2SCc!8Y`jjACuS9 z&Mn}Rmk>1hknTWW$Qq>KLp82LYwlP1+V01JH_x4|!leVAd1Jl{d=mFA@@2qYaA<*e zc5vt->Bkh4Y;Q(&A=8pXuw><3Y2ms9VZzpp!rSt6D(xIgIoIhqzXy28QSPfT)e-{} zFZbvKpLZ+$yW%;w7#~6G{6*(AKM#1G4IM>;Pk7#KICOdd3wK{8?w)>!Iyy%|=e3t` zFwCx7Xm9(aoz>_bL4DH)m$?B`VCpXy3MC00$Cc$&@g@NRg)3ya1RJO%;+CAf!``c%DG=C?pk{#5h*4-d0< zp4+0h8<>5gr5jZ|1y~4gm^KD`*impl7s?4u@g<3a6kcRnuWmoT!8p#~h1I0$@ z3M*L7a&Z*Tdj#{CAyo2jNC(kL6XDStzExOwG~n?QJy351C2Jlx$*uAfUDd}x)EvqAYwNmsS-B1Hqconv_ z6-nKf^c9>^iic)8K{MIqUYzo0Wll})3SjCzDlkZX0X>8cLGV+dD{Ni&;rBT)Cw;JA zJK5cT^ibmiKiyhM!S^N@fS z*YGuReQv>a=X6WOoEyChNIEw#el$NzUu9&EV!aiF1~2A#M`tqO{cYcG_eY=!ZBwGg zUJilS$|sh{59k@T7`uE`8ak{zOUw?P<#fP)_CbOr4J zj&>)Wr(O&X43byBXHIAhs6K;L$lO*F%yVA-j{gopYI` zl5eF?c5EfyEvnn}5~Z!{Y&gEmi6%X8Q9=Z4iaQLiui*GML~v*FSfPB+a`|#D=XDkF zV2*@eTO|G-YGb#&V=zE3@E<1it+guLQDjj^v~)c@O$i zLwaTVUGl1idG)PpYMD5xbLMcgJqri-fD^e}LLbbI3o+rgoN)Wd-M3av`a0*-IQ+r8 zCxD*e>L-K4!_Jg*9H8f`t{}?2XpgN z{l697D64-af3y8ktAoZ7#H~-HKLa!5ue0Q@IpV~2Re`L{XEm!p8s~fbgsUy4i)Wht zlJ%ce2dNkQ#PN&U44}a#s;Y%NsE9XpHA?oa3QOzFco z>u=!JAKmrhzrFpHf|uB~LAvrhF*VLn7-s`3e! z_@GTA^#QP>`^GL4BopyB8iS$ZjQGJ@^m{kV#Z3Ou`}4mh!8aRZCZ==jaFd1XNW2L- zVJ@0X6@x%I&*~Clh{zW|Ca2TmYU0fQ&U|=TmoiA3ID9$MTxT{EG(W8~gLl_hQdqYe zIIwA*5=J1p%1dk=7saNEpXvgIIehP)_D1uC6XSua;w&D~T&aNvYCoaU@vi0G&pGu2 zVe!_nWn_9{q<%U<1cP74MI^3^jdiy`@4aU5SLnJfJ6;66S^P-59dKVP2{9Y?O*q@k zLhdv;QkjjOCtn<=bk%(^ZBKAi#Wc1i# zceXl{Wf6FAlQ(BLApZMR*Ceyk$I<$gTWMh4yHDKYd|hJ+SukI3yl1{hPoOV_i0TXe ze)LvaV#h*ai5+fR%$oN4)sw=7 z7#7{E5Q_6S-h~?7!h5geATHY_cra?*)<->uWegbmgy{Kl=^_Cp25Rmu30Hw>9}q0| z<2Jo?q?rraniz|qRHE|e7=Z+3+>A0HTuI_C(DwZZB?l)xa1Na1h9GX@+oMjb zsNBI+I{QX_#i33!FzvNL;-`-du^SO)ueHVG^qqzI;4yV^o=y$sM_mW+{ zLcE)89J$~@S-1J%^|S`JPW4dnG>&|Y@H0Jz+Wpy*>{{hLONOo4FjtBZ;Ngm%y)RcZ zlWR3sg}crKJD_;1$ygBcV+E_3ztKc`!H@VW14*;!+X+Jg%7Y?J(VH(dr$yhvWnU-4 z{fsb-IJ?pu%vE15;@~@$y>P&(X5gX>tXI$2goJk2IKQ{LQ`eamJ|jLRwSHq1@nb<@ zc0jLA1Flr2<4mk1aB5A_l1z395fhVQQC4oEpmm{2F5rLpf>J z2XLK z<1mi8_v&>*9Zo3Fj> z^YSx>Vt@KyiUzx`xSa;r_od(fQYHbGJoP-McQrq}_Md9AuP3AO2VF|6q6Q`bzyOe;BD`8SMN ze%skX6JyRJLHtbU4b0d{&fnim;o8(+nC@g-FKAl(y0-@wY5^}C(Y#je@nYD$u66O@ zml8F71p>40p}Cy;7(G^Y#1G$jLHhROElBi~*Td3?0NM4w`s+set8JjGa(OS}JK>!1 zg1F|hk*_-iDdy1ZL7rSsa8t;^vvwM$RLnMoI7goRxss^Y>_*2Il$TW;s$N|P>iug+ztSm0-_r-6j3uOYkYP=U06M3&7O zAGW?K0p;QW9E!6CzQ!R3LACrH(aZ->yUR*y?0ZN-0u&!ZE3l`jvgn#AC!}DZHhS6G&Jhpr(G`){WGP4>gdcg zf=Z?N_b`K?=f2Q`EE$Brjhq8e1?to zLId{q4Rz_3&T()g*e&6}>alBE=-cZ->a}3P*ui&T-!b;{uB*CLiH}`_XP~!gFb6e& z-~$!Gb!?%Js8zL z+~f!{5b??1=7LLTdY|@n8LcA(_uwWsIQmi!Eqs)H`$pj_bYC?wFB=I`ux`IiHC;9l zWJ?~Jq}f4Pf`a33{2WVi<=kyC<|+WPxf8jeG*^R=D$W4C~stuc3Tg)+EAy9G&97>2wKRKzO5ZLC?1Iv%H$zcmpCl7{XL68Jw=;}swI z`0daaL|vf64EDog7xGW}d`7{bBC)F;GWmc}%r%63$<<_lVduWt89Oq`)NHgV*H^ts z*)Hq92>Ge;w62FN6=s|ltkua<=uhHxrC{Yyg~&HnNyjs@i*Wl-qh6~m{i zxES#OX%fX?Qp1!(I#J}eWvoj#vC9$S5e00njxw#_vOS0yxzx*H0Y@O9mD zIOX@YKKWZvGt@+?{e&#&sp`~v?wD?xY9;kwzinIws_vbhsJCkyez2t6v0qF4VK3Qn zdRjYD->6-fR9#QoFbWPL+^xY`>wau}SlyVzs@!n`V2f2UAOj*7M4QW_P>Rj6Z6-k; zAi(c}kQ!Vkh`VgL%bhXxnHUK`*F4|ow|XJDa6^ea^`LWQdZrAW_no=LzY`@5-iuXu z(@D!K!Oqh4_kx!3T8n)N*Nuf5H|n z&m1#g!q8%g=^q}SrW%ROC97 zeQ`vCprH;9Gg{ja%k=^r0;irTs-~Wt+D*2$7j}`}+bIa6E5IEPztKwyLSa6=i5qA* zbzwI10kR&!r;j6N9=(8xpZ?a&eLiC49%Z=c2V$jxUciOQeRR22@2Np=&P;XroZH7Q zl#(epb>`Hiq^FUJEAihPyj7}wpml9y0@;XIsef73s(aTI559&;iE*&|+?rsooqDCa z`7fK1a{(t%l8A%(yL5PoecQ&R6Xeq2uU5!4>m$-yW>+6u=|;P`0wGu6RhZu#~;a`KAFRm&c+jaQL1H38}VnYS6uMM=fJ12 z$cRpAt=x-8!5!ge#MPB1Y+Kk&Xs14klfIoJVkaPJB*HPcO0O%0V97d#paoW&S{i6T z<@emUDS`G9IKsO>g>4Y-JuL1G9<8G6etJ$*NRAVv6rP`*cMSS^rCZ>=ot*X0?4(%i z9^w~pvUifD{N_&#*-!)*^5jD?<4#l7(;G@{{%8P{v__3>jhIOcHMplgRUh~^l=U>_ z85V@O#z(cD8apT#3RFvuxbB3)r?*b(#H=%70vi8Wp zYMzYZw)rIl$FS!wsk5U5800LTS&r<~T!>ozdie~>Tsw8_h6qy17bcN8Z%bmbL_F;( zH{A>eZ=|aY%DtBxVwBq;ke9VEq(-X!>CLtGTCDp_eUzaaE;;k3+V<}|yj;D|4%naW z^@^`RwL2MPM>G=hG%=}kz^4nEY}JzJ7MYosNV=0>wcZ_HX&DK>ipG59z6^R*hmP>m>f9I z<_P_uqWgdAEw;K5%nH<>14W6C5?l?BA4bRUmS(>&DW^m66Kg7GVTW-3P|5s+K zUI^H^*=F@qZ5WHJaKi5QdX{Wt28Br{G}8J`3cje@ zQvUIUj{k}0gTrpf8LOo72WPJ%w&a!jLjzFy=eNs#T!}sh=Bp=a#Tw5Y`bO;4?^NFO zt1;Et6icO|zNf{`G8r6qG!w8KNZveQakb}ELy^|V%us%?V_KsIaIN`lP)CMXtG@65 zTwDT=vk>)Mbq|mleG6g>=ig*BxHKjr|IL@T`DzmFtQs1ExmavOsefA>_N*d7b~#n>pF-as^W|{gEcdrVU%NF7Kt=TV93(Pd@5nobb?b zuQ*CG^?|nhM3XRmpd9{ATC_4u3qS9b?33Y_WRyVqdf9#bzuX+j(Kf@ql*6ZtugQ4Z zEPkGb`*6L=S{2ET;A5dvllv9Ui)n$&7Y8Axkx8chD`Vx6I zI@#=N7vlC=!k05;$i^_4t7g)TBE5e&RzYirN3PlQ3)ic38KCrgHNGrv7;l&iRsmr# z-I%O?^Gxdu5+f{$0PTrxR@N?T5{Dkog0P1zOa-fsaF5>jyDPrzYqhX3!g%pFIm0{%xur!& zu#1wS%o#F%oC7f8F}l*mxLMc1_Z6ylk5tCwxdOZAN=XS|ywzf4(-EMXvjN$a7RelJlaobS;{ zQy^y;LvG6TTv;H-^+#y)1WUrQR~TogNmn=)%iHLr9{|}&*Rhcc+YI#wx?i4rZ$HR$ zR@!VNp$!HwVh`-Mw<~jgw|}w5kU10zZUk=J{A%|BASe@nV+b z8v$R3QKKW@OAr>dD*0BEnoq6Nks9TOVaz3K1yLBv)~~LrpYso2n}}YU%`4rGzwy%$ zQKiD!;MCq%c8F47HI|rN!;DjDOOm0CjYTOVn^OQj{tos+>;H1Ds(A4Uh&^On3(}%n zYD=y6Wt{VoAUc^ahrB1d2<2@XS^LQEAv{Ejl|Gbzsf5=XHi<`%{-5Q^vC`>?0b(n% zFd?i^LKeF0NY}TrZsf7}gobqWvO}`JLU^$)XnOFm_9W?^={%*$!gx_OQI~dZ-v2Bi z%%lVQ=wfAmeXD+9@w!LhzpjiUT+w?zV=d4bN4lc*Ob?bTEHGg86Mmpek!1_jdX=|j z`ZrgTCKN;y-^ZtENc_!g!qG(V!c`4jj;!jrf(<=!z(`h+9ExtqYl?ZOz*NBz^L}rj zB2WGBvbkDSUUU~aOyP|4o~)Kfe51ia3` z^3*rQq>h&?9h<=&(!Ff zcwq)u|DTVebnwj5js}m=LG!K?J(<+NdFRSoIs;Mq^-VmZrb9k78*h&ix`5s&E4=2k zp8f;z@TL%r!iSkM{k{*F22>^I2ZU^|uZ@O-c%5b0+7ik$dYiGk!?dvTaAXC;46(cj z8`o?bHr~~r#YC z6B(I_zr5%5NVhf)`G8Tdi88%$kjI?s3Dxo%z~1sE#4Cyv)v+i<5*?@*|ZY+jE{>mvmkJ8e@O7W@t)T?KTd_?2A%a2pkAc zWv!`y>7)J2Cim5|Oh#eL@S??HvKiTBtK49y1uZ}%3)l5mxj`A@aZ z(c1+jTA$myYeJ)>E1*M=qQraP6e%#YcZ|Z&#W*JR)J=~aY zgbE6O_e}=H55Yp-fh+M_kkY~uc%@@o%fsP36)nIJjN5o@=kyT51G*1zc{Viy`>oYK zC*$-8V3oV_qIv9b21K;rkZVd$Zog0Nh%ETM#A*)7P}ulkLfP%fYyqM9M*4-7f#*2j z^uPB2q+!nF6F?EOCEn1i8bDEK&!?U?E4S7cys|l>)(>}UXW(m#c)$l+LyIv!0hi*>+@tKOI?FKRK{ar zRQy#rztM0$hl!7Rs1WU8oOhPV({GPkg}S3(NHwo8z&X=Rc$`;wM@nVO;cIRfK={mb z(NJ)aMzwBjPctu^{Lg{rhZTc?mRh-}LV+OMM(pUpS=G4CN>|%PB(vDzYEb4^)}~co zrmZ|iKKXZA9?fJHg^_WV-^qy%)8k|N+Gu{qriF3&^Q}&Zn zS^^}8K(qpxZzZP+`55XZw|wTnS4UZicq0NGYS&;Nl0b%I>L;Y}9G}$Sl2yL7^RN1#-Vp#Zu zne_ECSaQlTWMQs2J!E0nSTlq+|05Ta|7b#w&KT%%_vHTeA0fPvEkWUa3?Pk)>y$)0 z%r;A;!is|1$((##wA4U>Ae((Oehf~;~D`TzZZ+KWltu8*Y8iR#_vbN|ZVx$4UO{=o9c z{rnxW*Xr(2^%us)voW{zOB|Wt zvYUhz1Fte3?fsOBtr|-&jF}UkEYiW2MO={~yzHOY4XH|Lfo^&E}8u zfcf9_ZvN*Zpj}Q%@v%LsFEu7);;qYGz^CcqUEX(-I&zNou-L(8_u>EC52!RtdUVaLbA zaHXH(oK3efuU4Bj#)#LLJ4izHeJw+cdtiA$R*!~!G&9>;TMV^#ZI#Mizb~iLtgVYf5+8KRgWrE7Dafxk-hagb7?

  • iBITv8bE+-m36@IvVeo!6 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 Date: Sun, 21 Jan 2024 13:54:24 +0500 Subject: [PATCH 09/11] Fix convars not resetting when matchmode unloaded (2) --- addons/sourcemod/plugins/confoglcompmod.smx | Bin 62196 -> 62197 bytes .../scripting/confoglcompmod/CvarSettings.sp | 4 ++-- addons/sourcemod/scripting/match_vote.sp | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/sourcemod/plugins/confoglcompmod.smx b/addons/sourcemod/plugins/confoglcompmod.smx index 1f28612015c8fc527671ccfeffa05c582c3099a6..8c9968d9f8be014f11cd41a1856b57279944b888 100644 GIT binary patch delta 61179 zcmY&fX*|^5_ph&{2uVn`Bun<}>qtTp5|XSX+4tQnA6Y||vSl4x$iDA}vL(w{VlWu{ z#9)lU7=!uud-#97?!6DrJrB--{+o#b(+If!Z5_Rh(j!q;`0rd~?4 zOnLkb}6{`w9IcdVxjE&5oIRL{m)BxXMM}YZ?>Ch9-HO?8i=!Fm;)E>(eQjm zATmc)mV^+V)g#u!uHhF|9p8@v*~-2f!x^%&!hnF?%>_>BU$&ePX#Q)rrfnG`NOvlt zu17t;x_l{)A+P14!MvWqe2dWTC!yU6ArBkY=De8pf|&NI7y+rWmKO%u-($+BdgYx~ zUdwssWVZZsdBv(&7Q=<=HE>=Tby^v9S=o^HX2@(2%WUDwY$;&N3_$e)8JR7w4Xnb2 zs?1nXB{5uodgEPIgyg+tGh2cU<^>Jr{SB-LPyMYTg{oe%qKaa0e|jC{y?ZiS9vI9Q z33=$SDwf1pj`dnk^>S)&wa6G)r3zKqu%ZfLaFe}^E-U?V-mIA|&Ia?Jgggvc12tI# z^;iQ9SRLn!6U0!xW-cqqMKo-;{-57&w$N^e(C!x@598!<8V+Eh*TD6Eu}eCwRJp7? z1r>1m%6T_tw&)mGWeG_Z$8b&b#yhVR%XvG>dt>Fj)8)Mt<-7&^Zd*TPH7|*Ao#^#< zTB*xyG0AM1%xodXwyZ=C>%O;1WJ8ySk|czMKh(h zT`oG!udl*PLF_}`>*U5KdsxE25(jKi&f@Q zd%lX4s8ulw@NvFx%zx1?FQZjw@u*)jmTp6jXa*lL2^-^gd5gfLzxz!T2o`nyrm0CIhQU=#< z#6<%h{`7~U4$#8n<(JkQ+rAx)$T|hJp}D=+wF?2?N*TXP&@>KNXt&SzAz0dsQk5yj zG@{^Er?u#STNu^~n`VZFp5x^vCh5$ilLpv-BU$FN{s_w?3DW`14!_PBn1Z>o!v*B3 z{gbpV;TWotSYb}8?uybpW026XyXLW3^&`OHsh9GPzx5MdNAc~ipye5#*4-m1ks`9a zDrNmt@T~>2I;#2gk>-jzCs3f&1YtifSiKCuP@WK-BWz!45>Lz)<%AFWLeL`h-!YF4Ulwy(kk z>kckjdWvcui_hcN7TD;mNg&{*LcWDoq*}FWY)2`mZ_SV;SyhmE#s{l>&sN%vV4z;{ zarLYeA9HH3zl5ZQtvzB{;iwYueO;Z>9kY2gLG6s@(TOFm^K`Aubh6Uq;DENG1gGZy zlFZv>&8%HD=C=NW(CkFf>(xFM4Yz6>SVp7M?{9>AyOq}wpC3XkEYpGebDlh|QlC8; z?>WXj%M!ZmA~u>BAvww1zRLHQV9x6^pmDFL-z30$s0HcmQS=tTJqLVBEBbKYAM?t zo>%QP8d*V0{cMv!)1Q@Z+qawD3UKDkLCCn;(`8>qHTWGeN&W4l!xju@IViCEpoDR- zor%w(`i(u4WY(t)j(oSDbU9ySB-7e=6igLI3)Q}mob?thBB;Q_++*MKR}wS2>|d?& zee3*pWn71HY6fNk=cx`38exbx!3(E)<=4vMDz!i|ByhUcan1$uw_s2UB|rb8?-}&m zE7xRco35GE&f9^!uBJMDZZ{Snh_k&ult?< zB1JPrTsDWT(E;h^FY6zeWupjn$FEvL`+v{sZr9$J?8rK<~Dph zC^``(b6>&fv6<~28;Ne*)J(aIjdL$ls=fr?Xt-s8E$VaW53Exjsd;3S8QfhN9;LC7 zEt?DOR`yi?0W-hi#{(OVwH)fdJU;q#MZ42FTT5K+4jhO+|EPm!&O1oIxrw?z5vQ;% z7JFd!=mh7q-I4!k z{;klTX5@(Sqd_f<)Vb40xJJK=#&*__9z_A(ARGd0hB(f7@$O7_EJt@OygYGhW*Zvw z_^#&UIX&y!@`2uQUd<)_2fZaTLFr+{;L>Uh&u3bldJ`aU)8kiQe<<*uAHU; zMT3=!1z3JLsarRuOFURltDXQ~$nVVZTMYz56vlmNLnO_Q=~6|#zB@oOQ&c~?JqsV! zk={=BFr#maX(;;_@KEy0x7?msmo%GcjgFI_-%Hky(hi-}ID_VRsCQoL@&wJz0%vnC z*_&@Fa8v@%)j8w^eaA20#JEX}KSSOE9?)gY)?tpFm7FlQ)Y+d`7Id0au%|^DHrlI- z!R(Xe)94=Nt+U&vt~*TXeFBN`VSN9QUk?1WyuT*DCM%U%T|SKZK#|>3Xb+onW4#TS zg8IvR45dMgPx|ZFFQ(%vAd)P~G%uCOnq!a%?=vB9v`%~eG7(eL_K$&TKd~8DAs$9mD?F6ahU6@?%T7hKx~I4Tz!2 zoGTEo*D)4i%b8~bh;O3;2k)DtajO%@CVqD${N4e*2rqUFW1fOAC+9I4^9Ds%#s&y&NV zW|FTk-s3RTKM~5eb}!^gWOYLb|CZ-OWP9pm?j&n5-UDtXy&rYV)X;X86rCvT-{yI? z`y%Vu&=S_bwTl>Qom%OO$=N^j&cU?(B|&(|7pJ;Hj}|~H5z0|+5~5lC{&KqQ2^&t> z02QoLnew{7T*ru4RdUkG)IW1djpF?9CZBd^0UVDoTKEV1R# z%jzBm#RVoj8)7iD9eNA*xzRjnn|FTPii90mcq4Q8vh0Qo z{hH#9W&%dk3=hosg2op%X3U|-+T^bjBA@*4cADS+dmw$A`gD3$W-IuO+WEaOS$Qv4 zmU(vCY>s%{%pAEFXA^|>pvX?9PNvx#W5hj`#&heA(dlr;Vmhv805h+(Bkl)d7_ZwM zp3#R#kt_Z_Sz|e2o-!ouq1`l;*|4kdP5^1yKD&0c*A z$E$|qG4o2$odY0G7bkzBAGiS;G z!wqWI>qv>BzsXKgV#5L+uO|rFQy|y%wsN=KyFXW3_0Mb+cmB?^r@Fpug(9omNJhTm z&CimjOArX2*l&$_ssl2s}X|4Jy}xt8v_bOKUZEB?OgEXpy+ssER^gH zX;aqxKIJP6y;Pe0UaEH4%6*C`{mHl zw9sISP_*F&ILiO5R{yd!qgy-dK5cxpzRMR#Pf6)G){huCZ5%5r_HCJ}qVTPiDEGn0O9;z=i%uQM%!$`oU)~# zToZo}&`3c&b5`b=)uQhlcicNB#oBY(RNo~w>K*Oq|7t43fH5_;#V$@Ruib2qsZFj8isWl=6?{{OjzXv)z#LX|c|~l`FKy06_~_ z2yqU7C-r=MVCVEmM(yuB%}%fg?Ab1zz1oH+_qCeSAYO?I?s2@!o;g+oe#im z$vVGtH4;5_a9I4{$KX+(6_PW1&Sy^%o(0d^dq6gG;|4lVdAkp>r5_LGgoiD>AcFgp ze0L~ux-y;9omUs33y}!Ya77Q?L%7Bz{`L>}RQ}O2*$(xST)KA<$E7~7V(dCPa}X7e z2Xt`Bx6&)W1n*gkGw-rCrXWne)6WR>o_)C@WdrF+&SBwx!=yraSt#AyFY^cT48cB~ zC*m9bxM^Q5wG?Tpo@Q$kc>vEKwNi&AO{f`!S>RatL7V^U7fcJXm`yx)tqZMf>?!nN zo+3*BDCYURM7ryA79juU=9t`2gnrVLj1Z zshO;QgX>~hvf~Zei~Gr0H#jdEBsbm=zL=1_@XxN5OuiuiJU$rkDxjk7)8a3Wzxv@W zTt0p>n>29BO&q_oS||%5J3a5wZA@%MIXO6rr2Io}gHH2XyC+NxZ9VcY zn{UB=E1S1W?h&8^VD7i{V9k<8CEr4@A%P)Nxh3_+)P{*2zA~HY66Vh(ve9eD2^$|g zx1OIL|2}#E#A9PT2~nqWU8Xv)a0?&jH1k}s8E3vLD|PPkUSi6)O{ztJaQ$R?Xn1*@1j zY4`yQy*I(^%*Eby-?OJ&-$~2Ov(RjWuKAxV;*l)GZBz;OdLST>k#*&u8I9@PnxIan&OLrFXD40@xM7|{~ncZoGXy~d7bweES=Zya~E ze6LMxU=xXZk$2=_YdD}X4rXtU+1h&9)_zsu2%a} zF1%H~HLdCNL~Jy0sN2bt?32H@2K!0*~f!sxN^k##69xPh|?Do}$q3@-n4f z#mWe1sDVDrxssT%dUCXRpr>VQ4loL6z-uA~I^UtcuLh_l9R$`la0?q!4Li~f(vr__ zX%O5wyvNXu=lzLYRfeUwyKrXezz@Zz`Y2r3co+yEvH_UNE9s`Ec|pKd9n`w zPAz%RMpB@f2xX(^j3F~ngyK<~P>45`9UmK#L3nz^Q^MOl(5@QUXv$OBa*WLMxjnpF^sonbQfc zK}ablQW@Y`wPt|E=b&Py1%dXdF8HmcNdr)2 zbUDUlB)(}0nns(=+StNI{sE=mL7t>Q;B9}Ux(THN#D7AYs8&vKeyChLZP9m|yYaVK ztbhJ(l`^^w$V;#!UNk)t3E>@LO>7ffc@XnER~zX_>@9SU2^ub}E8k+_Lt&$J2W}9Y z9y$c(VMo;nf35EF-ZwqE6#_~X=3N$C@xGl3y{ImA+#QbI+Uyj#(Pem7_Nh*eQXDLc z`AU<98)jkO8Ql*#oD2Y&7~zQDhYQsRZjzrzsoWxfxCX*g8=D0_$F#Y(MK&zU|M6f% z-my6TbaMJ-vr=EIo-I{2GPgwDA=l<@2KKpfAF|*KiF6r#Z}m1qNECZ7gm*kexxQD% zDBtH-n1LZ5VE9kFxiM7na9u7Bt7DMinEvWLm#E`)b!O+^YR$be1J9Km$B3Vbhg${H zloNjg54gr)rI-CPh?Wa&`x$WGp>G#(LuF?^w{{zhT4X`X?;$@&P9justh?DpEy{2& zBE8bO#aGL9N2j!Zaf3wdM6VBX(te7udw)|p^~(E~7fmAVMn&z)Sca8ppGkyem~{W) z{~Am?oK|_FE@IR6c=P*D|CnXl8vhvAuDu^yzzr3iycLdl$J?=I){4~OWz?OnRhvdS zzwH#NEMH&UZ8nF&>Aypu5)D#K;|~mZHI*LF0|b z=^D8HNOYq@osYl!;;BXZh%*cxNJ$#rgFa#0g7&~Ry$Hnp05xg~kZThel(`nX>o zF17ep*1vj{zK*Ew1D&W8yWS^~4$&S0tLI0w%yP#h-`h^V@Y`2v6XVVw(lC-ysax?P z3xiRoqmIvaP?KbSZ{D{3xX~saU}C$3Z_X+R-3a;7&OHT^M~prTs@+PTmobiHINH2E za6OlqSIdm-bxgWd%21m;*iVU; z{z7{&=gy}~Vqd1$F+P(`>qhd&B+nngR+_=t&cBelIw+3<46gOEDqIdI99f7WE?&(r zTuOhb+@7k-v&(Wq{uXsg5wPZaxEb3-Rt0Yd^z1lFuB5YU2>E|$`sprJjHFj6x)EWy zsi16d!blE&cW?LOG6-kdhaDk3SsO~HPnOCi>G6J-k}%LAfc&5`8l2io7+HETibq4B zLu*hw#1htF-C8NVSOw^8W-jV39_dfs9ptWB9~vc8|C1uxOV=ER6sUEQ-5bk)P-L;u z;MvWR*@ZOQ@pQ$5hMeZVs*2|g8u0FVTVt$7!60xq@wD$;mB=QXBX%oCu|UP1hrDl~ zuiGz|MJ-dsY@55!rOCEzRjVMQKrS}nkSe>H2aImpK)Fjc*0?oQyxPRJ(MzBu z`9QX!LNr1n0dBr#D`MNlS63ilWHD}@SMem@PXHfYv2-vs3rZ_%zio^3w7Ro5101nF zF%s}5Z#9ZigVj9YCvDc4uf2wiFX}zdz3(X+!K`8D^&XOz`~D@?Pd5_Pnh{7g{Nr3Wf?vvW-Z5BWa(BPC!|YJ% z-KXnA97ER~@bXt->9nU_^Qo3cL7HwqQ*^uDEC)o+>c8%KLwUCxWIFcbk;rI;v>_-Dd)7)q>|?E*r|Dt zT)&-T)8LL4)2X2>g?5#0UvmGD7IJyNX+5WT)ZKS3+s2{o1}|w;;A^D24`t$OKf;e; zHbpwy%|m>YMk=oXqa6yX~;YXCL4>?6Ui+Qh7n`^Pp(dF(}GEH|uEe&mLz( zI<%g(Ke6&Al7kN6fIi|fM)aZAL#nH;x#(+dmNj!!k-oHCl!IkD&Igr^mS{ws#d_Rb z*eR}T=fwErg1@WU-swIyAABX}uLDB?^r(DpM**fb=(j7}2my{BMW>}W!M!(EPd{Et zOr}?2<4wLD#L4R$?g3Zibv!L?tQx^f40x}Ldsy8FbodpU6*SjcjTuUO6`(j9$k35B zTurTmQ)r~9x}=5oZ*!uNO62%GXkT@3i7Lr}O8h3c zhabU`96P2TkZ}r3L2h3)4{sm)lUkGtMY8aUvCto70!Z8RsMYp$SA{d&*IX^9dsXXG z?kKo})LcRNy`8(0zCl@bK+8YLP;FLebz61HO+%OeEN}(w(Tbm8?pUBym`}B0CD3P; zjL4_EYe|I6Ylds`YF$`J8WBup#Hy9()xH$lA1nxK?igJQIQI8wb|$60!EmxH?nbFs zhVEzuLMsQbI-Vq8wEovX`pq3NBDPf;$E%^zOp(Hc@H$LUg@KZeL(!7!nBf&3C*}(w zO!()N_r*<8mBZqqju+K!|D-54EMOMWTC&SU@MSth?FwZ>oRWFjms3brLO|c{W8Ym| ze^%Jx3fDb%LY5D4-p|Ws`rj5WDn+)<8fYSKV%HtBsGtzU9t4K{W_$G6kuZ9?FTQXe zNn{@PMH>Q#oZC><^}xm6=Wx!M&D>Q*kJ_a=^iFNMntibJA)KKdb9k@JWSrrnf>bG5 zHf~P>(2U35`5E}UyLm^Ep{M!A^4CX53r0lve+!RoO~Z_KJe83wGV3txItRSDkg9s8q30V$w1P*npsiV+pFCFN zLC3;up*nod;izf~Pj1%2Da*k%*O}!8(I0Z_YZrber?A-Br!vuPl}xS`yH06kQrNQA zj(Bn;iY_jHf8A{H*cA=j=%&owzTFF5Oy7Np)~j)kNKtoELU!OuOrXjJcj&Ag6Av$ z%cfDG?8`{&sd^Vo-!AIi!*fN-t2c7yHAx&+FSE#zjEd1yRQtvWE`(Ec;R z{N@2;jd#S!m$RyR5BDyCYV;U>M#)ywza613Ax1ckz+c*v)!7WPd)Iy$nWj^UWH=i@b^z-%>gzXVO4iA+kJa7ht5g~DT-{IkD(>{r?rGu)lzga=~6 z>oS*D_RU})ceFB4tAg!WYf(|KGH;ky%9RicfA98R|Dm(Rb3A z(s!|8E^G=$4Frn|ztZSF2gsA4HRXQN7JG?x96WB3OxGk4ncGN;9u0w?(gb&6&$~C6 zA;29_burs`p-En}6NBgBS4Uj`Wh;2UMgy)sqqBUs3hV#rEWabc9&l>j5ic9cE_SD+ zjWx9ru!5Z+iA5IEscj=hZbbG<_#OV}Z6-N!Znw0hN5d7R(U z!T0`yk;JRMS%y*6?;2^ioFK!a)hMXZ*sMkxMn2a)0AnDT(8+^daAi4#fTy4pUlr@y zC9;j0Gr?zX*Jtp}X2M@!NXshix}E9w4e-Q%Vf836LWdQOBF>>cjg29S-OBzx1>p zf+TvFm5^U2N07fsYl<3^3mVhA_8vNa7YL3nuTxHej8pEAFyUebyl*`Hu>^Qc?)CS) z&!vt-eq+htKj00Y8q8!*ES3(toy`!^X{;7lW%5@nK@Ou8c*MW3D|}sjZ{f8$)oOuv z6_7-IFcO_x4f_vPmvr=sKfAfAY?ZXFa$Xd{#{(g&lTR-U$*Xa2kr`T{b`VWT+0p!f zjwXO^uvpzE<8$@ySlt3#a(Se@8pY$Q4{-86&rENI99O}saryZ03Q`b!!P2iq0ifZ9$WD!~#U z-c#4WxhCLsCLDcgJ48{IY+j>2!ih?FK%b=9L>2ZNwV7kOg5gW6G9*Qp6D~PG*lg); zvcBcHPNi>ZXEuD)Kdi4>daaFVPzsyAR|j?z40L`&X?`Yk6N=xmJpuwE>0hohVEv=r z!yn;IH#N%Yg`}zRwugZnwH(YQWZ2c5`~#o!(?JTKb@IVy5C-&;(tHBaK`CAzo*6pF zH%t+Rr__RUXu0g_;HzHUUO;aCCwJL$3y|o%x#VYNy!09(Mk6xFxIz1xw5@&};I!K% zLlLc0y_QFrlR7h3G|IiX(V-qzkXdmp<0 zAPd_!)K5CH>U5?s+ak96O+Eoew*c>}!5RLq31wGCuz6 z^Xd^wrw8OZFYmZevN3{=XcL-|B^mIXs+M#$V4C=j!B~j)<#LtDPIov$%7E(&rIIFc zu#^G7OB4=Mqu%{NID9dt>?avh=#!1{%^l-|DQ&>mP>O#tN=RCgbSXI74wqZ;P=VZmN!0JUTC4!!hoey+J8Mgr=@%*`D)A&*r zLPI9s$xxk$I(pOe{VXM|@O%VgwyH?%ng?CsPB(sOl(EZW2gro=cuaJ!r~x`Oy21ER z2;xEbUw^|qly1_QboYMuA(OOn?A zU$GXPZW}4G!K)H71W_EgMu8}~;7+Slt6AW|G1$-3P;>R@9|{?FnGxR*Np#z?iNA>U z!Fvs@ACLS2(G!Ap1Wr8)DwJZ#{uxp$zOsJ285d;Gf)BN3Pgj+VGi<$k5-^-s_Zz(f zi&_Q@Ye_E03887zm*{>nm~)&h{FCUbrt`(-)_v(JkeNF^=pH23Zu@KB6XW)I9f^AI zC=59m%@|w%U~8@u*{}3tf5V+a$6e8@+rk59;0SPXM`4K!Vd}e*?D%g3%?uEeC+N|I zKXBF;aA65kpO0g7n9d15{VuwPe-Z(eB?K!AMd(c?nP67XHhu#q)TD~9Pt|!ShWDXh zjpy_t-SlcZyxO)eQe`~ZUwmKV>7+aiFYhyAW#k@s6LXs0*ep^gMB@Q;eP0Q!s|4;Y z0UhIXS%t&5?*nPVCvi6fX+H z>!StUuLB$AuXZvY;bF%gN=yhnf(GP-_PY$*s&(yct-SK}GE2AGy&%FpiQOM}{P=j8 z1qtwX1VM2l$?y&H%MB#blA0msX#21?Fz?9bd&0zgTiv4tPunHgD!|jcIxO5lW+4u) z-vuC=OMVdVN|7afy1$kMOk?JuOi91B=#;>g-RVryUv)M5v8BNT%C!~JGMa{otL@iN zUC{8*jMUzror~+7uWXu1mIFvIF0108{*G-miO;&);2%$aoS#a9(C=aA78%39RL&2< zD%u#o0e_3f=T|HvymcF!zmC=l`dOHc33j`=*OB2{RIGC zq}7(KNGqe~d?Qx2T#x+8*)^~@EIV9RroheY;dlMmCKf`6rN+*Kh22FU*89iK^1v?t zv~Nib-p~xGt*378i+2Cu--iL-r{(7c){<+LO0Mtl5S?=GY^A-@?K^SY3f1WH0MQu} z?(mhQxkBGE#Y?SM^Ha86GuxxlhmMX@1&~;lVQS*ex9ac6Rngv~G|}4r72lox+Mt@= z5#Z8$tC`6=X%au5gQ>1$a_#2U-PHS+RcLVj4Y2TBT^sY}M6!yC?ubn^mC`7(|6HA;O1f-Cxp=PsFc<%_&!!Qhc~;xhLw)@?bonv# zA)fwtPB;>0m7iZ-28g$%fBOTsFO+>kmt^SL)#L)^H4h z`({<2em=CGC95djQz~C$`%LI_FkFb~Y2rF*f6eu~g3y^gn6n{6oVsQ52vO3DRJb6-< zC|5B5!^<|M!g2|OxUoYsHOjin=tPO%hJ22l2t7K#Va$$srDHKnSaKxW&+Yl{c&5-< zA+`&kC6#JRu>eQ7)LI=AHBz#Z&bkxxTQt zXP#m*9Y|TLk%Zh|frf!wjB<&pA2->78B2E5sj zhqq{hfO&kmIh_y2;pox!5TT4&-K;l!(bwy_WJ%}2wTkrTwn>WFxb$WE=JRk$llZwN zKS+^IqZAeS#Fp#fUh~Y{>R+x9F8CAIHrNZ6u_{smkGPw)u7hXiiQU8RNY59&aX5L+ zOJXakFllOI$TP*+GgUh7j%o2m1Mou6YIFQMAkfQ@yWtGS_@?5udka3|CJuD}li6kc zKvkDQS0~UkxhAVB-c#vK;)5K$4lSJFoA{UhMo)WsE`A3fSN9XUqWUvjow756M3(jw znXhbWp8#x)Z_J*<5--P4WWrppYy@I-_!WLP-DxYirp`<^wK{tk-ZC6>Im4aX2mI1} z7Z4G}iHCqn?vwg|oZ>BBJq&L4zsu!Z(w5y9uHONsNtI2^m2&!BaYeFnxV$vG|N3hx zv$I=;Thvd>;y{8d%yr9nP@>~3oL$1chZC}k+ z3B^3%hULJ$&cuTiRi{u=~c{**bMZ{Bv-M%N$KlDmg-oIRw2F*S>@8(p+`XYbF61 zFUuO%GaF!|{5VU#R}lc!}SLUq5NOV>7Yw!5RZB>?Yx}h1HZ`Bs)QMW+N zS_f~$WVU60jq<~~eF`uCdwwoy!5Y*>JWnl)wouvl9~33r!=+ZR!>#mXiY-i=-UU|;l%a1OVbqBuufwuPl zeYF0UPTPJyS`xg+(3O?fG+lhCt$;9{x?H3%2|QX2acJ)9{6uB8LE(>@r3lnM-w?R- zxkgIytYaoM0goh>BCS7x9w#(b22QxKo)i~a(5F6FPktYsDJPm4fBY=mIpDYB?Pv9R z+L-~5r8Lx(5TLw2)E4oiL!i}JZj@c@1TMa?8NPVdw4kf;Q)Qy}GSCFMri*>N@DEm? zW)vs*N)&@AjY|(2{mi>Lto;tZV{YwzvsHBegD%9jrK5PQZAzLIS7pbpZohCg%b^>2 z;eYO=@Jbk-Z1rZp`QU!DVeg?aWN|Jh%vJ_3Yr+_i^U+3Zt5eJv4lvc!{$Yq()B3A= zyT-1!&0yZSXB4~^jZW$Lwg1+)=5p#{)tpo>dJp#zR`0}}et+&mI8#_URviCD4(JFueedlv|Zm^uv>o@;)LRA%PrA0ir2R@ccT z46Exyyd75CCht-1hl(DoO5%lFO=V{a+TagWr-PN}{huZ+HG+8ZmQBvRT*;;n!8(n6 z%6EQe1*ZsaENp%30&CR3oTurEI&$_ua~#r|7r|p%@Ztaqi9<3S!s-w?L#kbTOgcr; ztzmy@*iZU1jUUcyl0u}dvtsi=9Ns7Q7KFyv~sLg-gXRupyl`&P7Wi{R+B%w>gCLV;8tn zhlzX25~7%42ZUxTi~?88>z#_eP+-<60Tlo zFDUp$&_ILaYoXV0D2(i+o32$~*kMYZrrQ7knuEeN7AEa_hB#IC#3WhoLGFk!R z^z|HJ+T0~)pQfT5!}A|%;l#5mw^a$jcF~`=LxyXRbw9!DeRcTv-Uacl|B;CXI}QHO zQQe5*^nl-IZo+#!cmBJ!p(RQ5ZnJmFJ-IOCoBB}eSu?m*L+p#K{e^l?=uosxi^jcw zl$MKoVdH?S7m-x3z0$ztTt`reJlzJoJ9PyQ|CQx#R!f!Hb*_Ef;^qoVt{R<`x@1N2 zv$Ij@+bT;ofpnP6N=jlj8x)iF^)l{9CPqF3$f&nN1XsYAY(vRuNAUR~@N_)yeDxts z3BO-TAAdof)kx9$*#Eao;!iV7C(Y}hZ(nDSQig6j1Uj&F-Fl^9yA)~DzzfVppQcj& zz!Hd^PP>1^NEh42Tvw+OAuZA!e{qqhzX{8SlOVt~U&){zDW^*~akhnF2fl>l;tvC> z3YbQjdCbVvYd@*0v1ikmy;{DHOS;F^{)rIl=p{|k;5K1kVD$^+afhknTZ!%Q>VY@b z71c&iBgNeMJ?O)ZPbZxxfJ|(SXCSXb(xaAL^Z6TNyKh82Yma)olq|@{Xgy}Nj?s6< zBl*uw4nHTT*&PmVQQc9L7*9$=?IDDOI9t4aGm5b(}m2dzW1f9-pvg zALlmd;455r09V`7{q{7LX)eZIc(SA%|BiC%oudR5jg$&dl0rik`o`X)*Y{P0#1I1{mTBJO%7;o9l)6WiJ26Q(*68gLk%kl zs?aExiki-%zaK|AS&2rQruLc}@8-pLfm8F7vuw`p)1XGVW2)s?#q+QxgxBhIGnD~hvo!Cy5tCM`VW7#rSnCH6(|k4SWNVe^=QC{zrpJ@5Np2X z&xRX03@T_-q3EZy8IG6NWvUHLgr#N$UArpo0KngDLSDyN6}M?KoNv~$s{_k5yV4$BgjTO%9L`;&FK&lqq_*u%_p43bxvRLtKJ{NZi9tHdTcRXv_x^n(r=W{bDr@ z)aiJ^9k{=?!>jO>ICGh`mK-^zh84IGh+|(4%sJ0dtA=bV%%`DPyeX3aFZrS0W4G7V zdvCG^BMMX*y*b4JwBG{C+9i* zU6gLzc~QbgaK-AG2$pm`kn-LDA=agMTJ|$Qd(o({sr=!3?xTjx*rD~>peFssJdL4# z=TC_)+kK}Qc1VcZ)j(P+hpo}btoLr#iFNaV7XC2?bh2r9`)cP?yonN z!~|Q;8kW$~G4GbF#j=A_YoH_Gn{8(tNsx@k2U(8~#Nt)f^|O|#&)z|JJ&uzGg1x^S z1Bojp(QB?D4yV^5dyZN@A_)=$IR8@M+P!tGR;=^ry(!1Z7+j_rG!l3xrF`To&DJ45 z=uj8d{1}#zGM`$w%8~n?t;Aw@HZVvH!2nKO#v^)fu0>9A6dn{+xa#>^2=Y3_oLm^h zsq-hkNEt}Har=qg(|=rPxvb#B6TE69!aBijkBsJE>9S@!c2Dh9)JZq@e+om%WBJ30 zV+L{2?_aQEuJdd=M*>m_uXy#cR8_?zH%u-n4qpw}=-Z)Rj1`#{RC`cElf9;(M7iA$jeN) z@ z!Nj)X^6F zY`-j7++9*Wgm#;7dqx>&!3j=W4?JD)k2aBPUvo+3`_Il}WnKdA!*^~krXc0XP{pr` ztlJs5Fw~3PLpMMYV@SK!)R-E!JBYG;U3Zi*oK5n5V(%G6l#sKz}z2cn=&sKczSqqc;Tpj(Zof1MlJ zi1;f3+_Q+!|2}_yH`$AC?McF;kMI8zmBS>dshLebf@6J|Iut~YdOmyzb!^qvFXgC( zGZmZ(mdSVw)qC8-Tuj05#GbGWSXI|~+P*!j`vuC@wm<9v*KaFG3|4Sl`NbAI&L zXNV9Q2k;HtJYlchv_l^#o01-AcbV=em$>47HTjL|hD^=k{5@&++jI>!NH#udOQiyQ zVowvw-R&KXTg{EBw$I8@lkd)fa`V5av=;UFPoK?7JBL4Izuy6&@oK-zC01>#a#eSa zGV;!0oPIWDI=eJ?=475`e8R}w`ZaR@xV_?2Fkspr|H*2!>~}sT$5{Ee^QTuX<6np5 zCFj;__qEPie*WuzdY;_~Z+_=K?>V`YupV1#vP?<+D6T?oGGQNtJbRp-dEHRU0s!5M zoRQV7k3`E3Iy4QvL8g$?$~PXC9j@u)f02D|j(da3vHIhS7PvP8od-=OQtUVz(c_G= z4Z!MavqMeae{QXpn;wT&j&-Ne*A!n6o2dJti%#L(RlUWHW7i76$O%G;hCg7&LbVPb zgRCFBL*#KOo_+LOTPa~u8u9&T1$#1H^Q%Ufmo^fWPzwF6n;>2}Tu}H6%cPFtnVJ_| z6RGFNQ{pm>m9b;Q?BZb){R*suso~iLUC5*W(bC zqtNV!q^CUI_;ryl$Nh#u-IX%)*a7k^m4%`woI~@hX>hcl$94XoqXAAIH0SkN@h;!h zgN~0*^Ag*Gc_F(GunRgX+2w%y6C-^2$Hh22Z4vae%t$2`_UafSEesG!OKf#!i!LHZ`*`I&Gklq2>FoImIHny6hX~m|(_O)3KS+e*^ON z8cI*kYUiWBqi5eo6`n)}=}x17V)NR2XU+zTjRF@jfd_=v9~YjQ1YFxuRu*bTFR8sY zZ1rwAj||0reYB*b0qhv6k~sZehYculimRJYKQ1Pus6>rcJv=x|TSlNq8mTJCh85!R zjY;_ZJL=QS8);w9UtHWIsQ04MzarKuPbcl+r?G;?)x^(>u9&l{uI0DRdcbnJ@+x|v zBk_+dLRVv`e0&U~E9adBqYqF2D*@S~oob|Z`5TJ=D7)Z20gd|~20)=42yU-q=b=#$ zaCu!|aT8)zKx5W1vKx5JN&0Ho&#dOb`VYm7@6i1Ss@RJe$o`L6O=D<8fEIGPYx2Vn z(SI<8K)%9`$RXAjalvLjFCStDW_c9hSD%oa8=Us})x0im3Lxtsr~4OYwJIjfp6ccx zK7HdwOr%EwzQQVtUy#IiSi@@_>z%gtxfrwR(8KyPv3ku<2(uQ(f+N#Ao|K0%c6_&> zVgRK(LtxP%=E!XVi+u$j2-s4-7x@19LagxuD9r6@I_>fA|GaLT1?*+qX7~bAr+f>& z8DR5YR%Qbkc2t~&7t1(R6&w2xXUe0&=aqfNzsqF-ByDs3aE$P3v*Q}dxdMkAe|xo* zF8k4Tv{R6j-0P?^K{#k(OxJO(#g1{~xwCXX`$3>~8(8;XpLLEuj+ly@(;v$d+t;U+ z?=|nTK=_e&HMp*&vrKa}bL%$!Ufu7Y&~ni)s>(<$%RYd<{0d)g5s0FUDqRaF*N}M~ z`SfZ4?ELYA_e176IqoNpIX*4?NpNltwOw1LKwgqmwEaNmx>vqR%2QpH=s7p`%_kg) z>s~pwB3n;-;EloLPnT?p1xEDzij<242$07-&MynIu0cm7DHS?KE)*+R$V4~x!2j;* zna)Kl8_3(^wBxp8hM^gO{L`=O1c|k!bHe}`lQT}Hb%>z(v_sh^pyB&&uD;Eu=ySTH z4wYalXztlH)ye;(=_{l1>X~+NcXxMpm*S;(p}0Hc#tOw@V64#nN! z@Vx7Mf3~gctRyp&Tr-oI-0U_kix)VrR$l8Qoj>ked9>rB7I#pH!`o_B2M&$bg&?JLxxBK)ikS0owr`3cx5ZuR&Km67Kh6|uSQ!!oT01=EdgUCtka?;cHaiG$!)x+x&EAe|tQZHiP)=;@5LUGg=DQ={@>Ycl=2k8D_mT_W;tOAL z!0Vlp?!!m8v<(0C-D1QIOz12Be)3Q|$8UC_V9oJhao;py=vEko>Ul0cxmM%%N`sF4 zwqDn;3Wl3HdnMNHA}b?M;k&yJTS&_;#jB@nqYl1%2j44)?mzHOYlLnSCzI zeR%G@@kOG6u2r3HPhYR+N~8Q8DfS^5NPlpR{R=50a?n%6XzOr+GMR93!T3-pHgloi z{vz~(wNCm_y28GfGMWAO6g{D$(<+{?JwbE%AaZ-H4p|sOf9LNUAy%E<7w*fJEcOJO z%?#q0b&JiM2!yw4-xo8}nr{~(iuCrvoI4k1dU-;=-C*{Cukgw{U_CE+y^q)crZza) z^dhY#J#wTc3etakS)bZyTfbrTLT%e6eQeuXfL9}9o+KSTFPV5X2;cm&e(4tT%Cwuv zdl}R5-0vV|Q{+?hi13B`I_BN^6&`fGn~zEKni-abXod*jwNcGt39n@3dG2L9M5E zeJgaM{Cvn3S1+GKL^@Ics}Ye755B#4+023na3RFbR_1$;@KfCnt3~Z5%(*f4vy3Z6 z>T8egADAO23SyW2FUcROP$mBZ>VbaMqC4=!x8{5^K7FQ8dBHj>2C*>o<_Bk5?}$JKnbUjt7tBCOV%|63_VI_PpAw-~1**Kl=V~1!Qt!{*ngCA`#0R!S#qx;4C!wc%wlehWH%xAqFg);}A=rf0%Q!Mfhw)+NR`n8Sp z_r&Lwp^k(TWCo`y2cAk-fcdfcd1d$A!l*Xl<9y?ndO>P97Mp2tp{ z-h4{iepOrPo9=XoThj=!KK*4`rYj&!2;Q>}hp8Ipf7#*%=1<>T_Z!wWifG;E>YF=$ zegxjWPwB`v)t$>9x>mJBsn5I(TR++YU=GEG_Ks0;rIptdhwEe`^&Hr$p1McjGY8A? zH3^-{v5;geD zuf5u!io6He3cLqJe^p5DjcgA-H=rI6QfOOsx{1Gsa4Zb)i5niEF%&;Fu%wq)>2$Og zfi16Ri1~@@k8@Tb-oNwDcHKwo9rM|(JtTFxU_vhe)qNeLLoPutu60JH)Zb+<*`;fR zsq;X9P^~z!cyHU#BECnRczR6rd9Geak8r}JI|HVDjAd=SG>ww+_7FAZf|Z%qMA?xw zU#;jz=7{WA3+fjSIU|O#ocnv)8J7hiFMu}Xz-tHvCm=X9c|Al&fz^--EH zUDOija8S7Er$X?ROE3p@bYLBU#g@*!5{}#%ED=1+51-pVGbonzEhmjz6Ez(f3LpR=Ur_1hN_9y^GoDlvSEYpiNTFJB*w~fc>`VwwHJdz~FA&Mr(q5NmogOg{j17Di{hKFs- z^%w`y{4Nn`hn{z)msM+~m)uL{^IhqhJ+GkUr}MCeQ*Y4QxQ~=b_H)R?YX8vw?J9ro z`2+F3hgCM;#=@?4aS^}dCFqE1!;QAK$*K%#zOGMozHV$|{yD~+CCzdI@83LkZh{g} zWG8U!BSq~2|F(uN?@tmD)Z`kiZpYS4+89Lk9LX~mo|6Zx@M~AC_e{9;T3Nn4gRE}JWSEQRI9-0b~ z+CGmfe*OOUcjA({7N8QnrU+CzWE=-MwAw!qS5d$9A4hat3hg+wo;?s3`#)#MAio)` z@4AZEdTwQD3|&UMvAjfo`?xzZzV(;xKJ*I{zx4|)yhdvdy^U+jySr_J>QZ+ykgYQI zNH+8ZR#*-n_Pdvc5*mFp%8x)&xaUneb82+&t$b#?w{kbB>FcVQ0Ky-4NB-PJPZnG! zv4b3yzl>NB@nyQC6O)-KtM%=v;pX$BH^pBm_Nh(kj#JZ4BP~bWxmxF7*rJ0OAqM5S zvE|9bf47+BDfTOVB7EHahCzz8@?5uMF6q9$@$i+o8okhw&Raks+m;GigN|nv(sPsa zj_?9vB}tKNzuIRv4e05Iu!rc%4mlu1u%aB55I{G9l%&fRQB3NrH0M(Gea<~d*eI9+ z@#k6bB~esD$0? zNXzCdEWS>$cnBn&h>`e1))B)U8M-fQS9eACFfy1yb@K%200_<)Y@Zri)2}`wANgIh z_Qwd}Krq4S#tG6vz(4zY_O}BvZ@1u+I6^%J5#?V=1Sx_b4kQz-Zk8Yq zgkKc;fvParc>of^Ert+bh0VPRv(AObpj(A1s2WKQp42{W}d&O4%`^`y zDPm)KicEpr^gM_*_d~WQ&yDGbB59hbw^sR?s{ms+BO&=`=5cO%rfWgl`q}>Eq^sdDa5%0_idWy%PFXiE<}Gk||wmo02ezNHX%$QLe^! z75qs@XtWrLLTN~}RCro-4nzKCZSgQ>E{29QcwIbx_LxfMl5)xxg z<$=~<&I0py&@!Cv`wZs~o;0!5EHn#F5KzjG>W+;PsAfGWE$}5n8jqatb6-N*A!g?K zw(wz28=`G?fICh0GR=iVk=slWYDg!1UID-;^^$U=d}ozqvy)+~_V)W{0LLd1+y~rg zU87T1s_l`d!FC<02}G-KsjUoJBvKpJn!}*T(B|h{P8%&Q>%e$U3fzL`&q%XX_PN?9 zzC#Sz|6>}rMIB@aSF z2*jYH$fVC`6@$FOk;D!n2vS4f{$ONnKS#`NT7+Me`u>i%-Mk13l&gN#4~Vu?^$3!j zL0AZd7{e4vQYDQGr3Z;}d9k6?K+R|(p3H~Jqo<`LLZaS<(SHmuf06ionG&bg@7zTY zwcziGDStd{8r9_MY#rDv!ghi+b^DWr8+V;jNd#+KS3qG_x5VaX7pL3sCSOwLm(i|L zT)YX!G|?(T6m0`51uRPZo^%qk6BP%A?;q=lEomALI`YE#vC}OhH8CWyd zYIv8wJ?SE+ko`)+LX+0h3I1~PWKI6i(&wKll$2q!?*yd#CK|67)L;&H6S8ht1pNPo7qy!z{(O&Ofie}NbY#e9Iwk)Ljz*>S51HBg;M+OQ zk_6}SaxwE8na@>zf8(jAs7J;6lj}0STJ{{=)SO|MlOSSO@-(gkeo4f-vhK}wvln_8Q!Rsaoy2gl+I!C@8sC6LT6-*M#j0rm8#vzk$wIhj@@p`U33HCm? zG^lw)5Ft_N_p@cx&umwBM?Q2f70-&0DR+tM<3!3q^T(3tNM42Cp$n>g9!wXE%D_-W z_?RgvG^9#`Rp9}X5g*Oxicin&?v2r>CeH|72VS%nMi9a1@2&4p-BmdqdSdSgCzZXJ zhcG5}!g#@$!%=kI@sQ4Ti;E_0Rj3(LD72ueBKlB$?sc68A8TCepTcxMS?8_hg7F@32(J`wQdIa)xGK%uL$T;(!#a*?Xh zzG4_*IdQsdvp+ zDjZO!Qq?aHeSJB!LV9TCcM;$(-4p;$JzQ_r(Dx~0hiDJ$tXr9M%uL2 zLE`~S_zM6#`p#S~5?)B#7}(8o?ec&=Of#m`kJgj@(jB)zDuic_-En4~PrpP=J<{2U zjK@FN?(qs4X#QjX?ht!wZ0jfvT};S4ub2|3=XSj>mf*9x$Aly^nLk2*zc8`|(r?h~ zIH%_}Z29QDyyVFP#GpxgS50_RnuH0@td5h+O#u?RYI6WjCz9K2Xgw-TDShpgW4T}H zdpR}v7}+G`SgGzcVx2fPC-=~s3;z~AWd5@L1jTPckzsGV^1)mSBpMm4Hya~jcs295 z1$siWpY%J747>73sfd+hv!BW-gEsy3Y3}H+UlMUw$lEhXDmyr)Om(c7}k>%42g;JtT?QgPwba&5Z*@lPT$iYXU0QsBG z1AOxivRB~Bb3rdT#T53b9VJzmx0f%)G_a;3;y1WJD%wVJ2U{DZ(tcWlbKKwNr8_p? z2Jgy~R-x2#mmzGp1a^pC`hsV0)ND)i_fgg1@5;$P_^dkibc3E7t5Ry0nWz?h?4kBWEKT?4bZt(=kS(iXr|Pods9D?R46@2!N|+ zipL;B9Iks6g`Rp|gqjOu4CBS!Bb|rwt36*D%o_bvOMmr@qiEVOGukR*UY)+1=~6-_ zSl29~JR2oKIWQ(DzeZJyrMuJFLVnm755bLcnn%+Nd)sN%Gxf`7e`*Z7+8||;p?}_{ z26)EUCi2VQxiiFMYf*)lrPbU08UWalVSbR6Uszw(D5am2crD-c=lXAakpC!qIM_yb zb40O5LpHs5y^3D~I!nvMlhA`-ZXwrdF+wP!K79ZNtZo~GI*fe^eLqLU?r#YE6gZ+L z1cew(6dDpGfs+tli5(xB^Q4*Wz1&}+yLfFG# zqMVg137v$=!%PzIDZ3Co;818k z|6CL!(fjsRiQ)&yB_f8N|FSrbkn8c&;J_Bb8uFoL@6xUn?wuaocjACnkTdDctLrpo zB81(ou!0!5I*<1U3H7!U$ciLINFwqs`LjfcTN*K#xyn!>a^s-Mb@yu2@kxPg33`!Z zTP>f%a0euN6z?Y8Z2gm?z&>$YlC7kNZV~=zqA3xn-w*(L?lidE>f5W5(ecQO;=Pd3 z>_IhzT#MV^CSh{H>68SI9`U)CKlOz1M^zmd(kT$I=b}1Sg8cl`AoXMj1kHmy?>(`&k6%$fuWz|3`?Kpz6UIf!=0wQeG#dMMb zs0UbyVqiM>s%>#a*Q)j)8w_;R$pehrTFif4Y7{UAwn`fLgj^madCx6jI&H(%8b=B8pG3%mm4puxLs%Lcuhq)6@+Nb{jA%iva9aCtH>Sn* z9eUsfbo5l;8&=5LoJky;+!uH+u$(56*c$yymMx?fG4n$Z1T1v;FHvJ%$tlgA3E4I5B(%8mMhZ(RQJRey zNGXT$IRG~6m0Sz$VPXdMSfP>HE4n4Z7%tK^+0NL0Lgfd2EiN57E_sz74vTup(r_s6spf zq#Z8QLONQ@hOS&yaDwD|Qz#?sHzI$a8kn|!;bb;oFwqGoiBHBEbWI8&1f$51Xkb`;Mx z9RMPgg1&axM99QJLHId_sZpk5;i(614x)78vN56Ihm2B*N0l2Z0dTC)v*?Il5%{O) zUwprcl* zGwqPZdcv(tJRZ`Z!+BJvX4v(`9xg@klYqwny!)EVpE`D?Uf3;COK0tCeu!yyiL^eK z&;HV*5nFsbnCr3RgpXixNg*pE7;{=~g1#sJ{Yj%d{zB>$7~`EhTGj2}EVUV2rmiw! zv=C3~{85>cWz!#;A)H5dllRl81EOr{ z>dJNa=)Q~9q2o+JSO_3!y<4`O~s`1&RQRSz+MoH=E1lCUD zMqa$;yZUPCUPV_#|Cm7?OQ;kI=gF@(r{ntcLO^R?GQjm5RLctx7$UJO$2r;BH%@kqLPkah{75YJl9E5cJSy#>GoXIwdRZ3;D&yYnj6*NN(>KB{mU|gN#)_3okK{Y z8~)CCeBGOp89c=Bd$`=`!tWaxB=TeGyUH#@*Rm39SzLNLksHyIEWkQuwRX7_ZIBU>^rC?m1HqaI zZNgSyiZKA2A+AVfJU#xkmNRjx%ZqYuv1w>(3-3dlL1L?UV6g^&&R6 zg^u>DLP(xoRO!(nrc(`@*O=`z;n(PLf0*RQSD`Jdxh&J!FvSQe^qW-$6cdP^S$Wq> zq5nifu{T@Bx&XR^shVT|(9=G%p?^xSP%}#xmPDM^^h3DZCt>Ys=ze0nDsJk45iiw^i(~lM17qa1*1StkfUCI%hO_=^e)u@s5kViqMNnGMZ`D z)74R83~kAAvOq0;c_kpGPO~PO{u-c@9xkEFvoF}Eo8gAZ-}H(j|F zD#ps4BZQw|k%~HO=gWtz6n~{`YU1=^Rd|y?zyOd#Rv{BVUgHCEjE7}l&_2thHct6W z&cRePgf#}={rkwur!9d-6X8@A&#SH=iCQ*>qZ1#HLRwNZnH!Pd{LN2cdZ@sKufy(_ ze9RAuF}Q?dYld_SP1Y3RdW)Z3H}r$!uO@evSN*%<^-x#0v=~uqoj>HLI^j5*{dv<5 zmHPqtqNZfjf0MzW(KwoDB@)rT=1~r3Jr0(UN7Z5 z^IQCyP-b3Hnn`rIW1rLLPKfypwNB}d$d+lKwOKJzdEJzfU)VO5RVNxXP{zM z%)?n3w9!5QU~Rw>%?A9R8-8Q2vQ&8>H)#V2nVHTgvi+%hKKOsXa7Q%+T$=x~D4|t` zj}wKEd`HziP8fff^b;eSw)%wYxQBf7;MQvSMa_)Qw9l}--Peyg5<&tT)!nYn6x3X> z6vw+uq=^kr2o2+L9J%oal=}>W0NtS5YVmlEou61_gG5Swea>T&SwHr5@fGG^ZHVn- z8)NAh-SSnG{~!bz-_ZK93pEE;9R@(>d1X&yD2c-DBmzyvw~(#c8%iJXP$y;7@DA=yf^yjJ(f~|KSh~|agRvBn&q z=4^xXFWz#}QTYya^XL72`$_hKKiadVsi?g5G(I_~pWp?|$P-V@$q}k;Djr9<_n#86 zEo1@h7LOjfuWa&U^g*W0Iu$jmdkJ+q*6Y7lZ&mC{E0U92e3wRO2YR(}`O2D2&HH7N zv?s&sZblJ13&EN(BXGQIxi%Okh(9{JY&hIt(7x}UBAsU%<%QeKN4zY;b3Kka!6u6} z1@GuGliTLdbeg>1P^Xb>z_e(G1~@EP|3(I?MKYf)pY5=^Vbw8JmBOy!gckbpt>ct^ zTw{bC{7v3M@}s-5MDjVat!XYHTwO~90X zu^#OUyr19pJrj}2D^{sMOHAG?t`(Yepl*-e_!;={$mD?#^7JPV^jZSRv-z!@a3YYt zj4G4IUR)68xQP779DzoZRE|J^NJHDR!@ahk-{9MAhHnQi#pwYw z*4Q8jQsj>N@qlLYM}47^xD{%qlW(>25{m_G6>7`N((1Kv>~*Gv6|chD2=pu%K)9%; zW13}ki>VthcZFw76_6@nEB9_G6NmSx@8cwDD>$q zNV%du6#mfmj;E@^rmvNGBVw~6^GcQ8{vqRBuKCW$r7>}d7fURGkBeB>ga9wuRn^I; zuO+D4o8}5FIIzpkDy+E(dms{HEu4`0nvQ#l{G6&NkF0F*bI7?cO5seN884lvc(hB` z_i08QqgAw$6RXU#J)`9|#&*U<*dFE!;rfkM*jMAui~dj@*|us-C(MmMFXOBPY9C3A z@w9sInM?;t!_A8=n64I8Z~^#vMIF<-{P$T4SyRmX+C0aRJft+GgCp&clnXu zKfNLm6-y1eypy7m=OZxcyZGyTYI>Em$DmfsY%W70?m(Rsi_BNKM?h@I^dHdIXmaSy z7M>=D)V3ZCZNL)Va6hHs;-9mdecFN{dC}$_5|17=m}|*|9j8u)1Z>ouMLQAOt&=u= zYqnc3US}-lGA&a_^cO~P)%aA#_hH{qNU~ zNmTM1tdZ1u3cn)_|G043E-8n7o7xWJwN$s>6l~6>XHLv8oaa-IU&EzJVI5KFEZ1GR zwnpWQoDq{{*-Z&D<&v!O+WT8(sfSFR?b8aUs+~g%NFrkYO$9!)GZ1Sw(I_`RSXvk) zKi7f>o~}x2A}u-vu9Nk}PELqQ6vjfbc;Eye&Dy2Er*cetbjalccmEa zh3Ni?k6XBw^DlEquYQs#fALbZow)mS=AqX>EAm-=`+ncN>hOTVr6aQgdKU3VXsE#B z`_CsbB8v0f_XXfsif6=X!yWorN*lSg1pBfs9p;Jja~v%x)3!~{1iw$aFRr%G(F+rf z&#%X@!Xt~XfAJH?l^5QoQSe7(a@gH3s1gSG{n?$IW3idDzU@fwG9(KA`|{bznYHpd z^H9xz?SMcL9-{i!*-%k|Igqk!R+9U<(Wdf?!t`t+P0$grg(zS|r+0PX;3z;D_SpD} z_~MC85Fv!fGsZcHCM(B8>P~N|q8UpyEMw4N!gH5+Z7Fdd8W+rgVgl36h>-X{r@{Zp z-Z{N2^W++3k`xE!hwVL36+I78k~wIc+8n6mEvCj6Y3D~#x%+`HNHG4|d&j*rAg^={ zM7Z0c^K?9iie&84?yM3=n>>iw+-1ajJD=py;nQD;^qtQKBazRN1mAJgf-;UXoIFvg zEu85v`Uk#58=1lC+NMylO2A6D*KAd=N7}Etcc!YqE2+YXtT{3i_7)T7cvok zyD3hQypq#)%xcuyp<4)z173C<+qYjAsN_5fkxo=@LL^W4No1vwv|?-fTR;L_4(+D? zXoqWg`cx1Zkg~_w!(%{2#`5=$MjaD5-gR)Ld^u531X5Q<{AX=-OkI(EY?@r*p6=5A z9em{&3}Z9ghTM0x`E2rv!jQAiVFKzQUwQYjj~l+?+dw@tUN2dFZ>W7rFiV$r1L{v2 zRm#~N(FN`ojI~dpq*+^6Cn^NT#_r544Nu#;4t>G63CfZs36CPPObOtA^ir1uF0A>M zKC*eD)RB~){f>5!h_dz)sZP@w%gJ@(+G}5PO`F44CkKM_alucQ>lNgVE7t@6r!bSpT8r#Ye8(@I@Pjj!90+Jkb(PHpekxI{QNGHLP9jom%KB9-FS5 zW|lFyGZkjgaI&0pVPQ65Yd={vfCOJ+AR)c@h=_H9YY{u2e$hl{oGpdgjM2AfS`_Vz ztaC{NKNcN*Z2Zcf@(lBDz(%aJiFLFYdHKtYpU-?>z|X1k0Vo~Wxx82r zS{WoN4@?#AmZ8Tx-TW!CQR$Y81ZTeUdmtKx{Ex!3DKns<|9Sb7c4{G~0 z-1?5dW90&d={!8k<`7@{m}7aJH!2aM_QT7m*pX4^-01tb@%0r0&|4tvr_U{zi-C!1 zyYM3NjqN%A_V5b#65}gm{DS*3?n7rR($LMZT#B;Oazw6EtHFGybi%GXRCawm4n4bt}=)^`G6H3qey zx?EPlNAYjn&$@I14*`Q(0x_J?Fa_88l1~aUZ`G_JI`}^&UqhLnc=+u`B!bZ;rVtz zb<9l=^gDDp5ct0PzlhlqkQ-PK>|8txyl9HU|MlBId+;F!e2c-v{U2>XdU+Fkx$__O z+D6NrQSNbv^*uJ^iOQk9-|PP98eh9P0RY=UJ;rhWu#uF7uAgP`_?`oeQkqzYOo4G4z4`>K+xy4WoMV!4LF1|gho=kQv*$VN+AX2kL5f9GyDj@_c-`HGPRa`{V|t{^5A%M- zi(v7Vz#;t16u~;u*~*bej%nlCNABKz@Q4)%6=)g+KeHGDPbYS80sy>)fRy0I*Nvp?E`f z0FY=~{8;06t(ov~WX4eAuYF5bQXWz5v>lPnnE_ttpB&(99hL9}?#w2<2v|H39y9X2 zGF{QGpj+Wc+;M)uv3R0PK;w~IwdMpmXZQMa?R4C=-e*ScELK4r=X80^!0**%-{V(f zi#&@2m54=T{jD&=ae7j%0%q! z`^sxIv5kw?l|#8>s8;bs{*?pLk5KlLYePt3n?6jhR=Fd<2~oa$mSxzcxg=RoO$!@OU^xwfd1BXHgpT-JCZ=aLqli4f#~_D z8}*yRgI)Cj?SvjI8F^n_VBhANG5+un83#hsHAEx%xevw(OlTL;1ulmzfb|o3HTp%I zoAk&dVWNdZB1VVH6GOAm3#d#P;Y0EG}Wl_@whQB*<5 z>`$WO@GHQcM}yy5aCQT!VnAjGI*H5!vPkyUbvrVepIoE%LA@AoE>P7meK6*UzJPo0 zf$#rZDftL9(3#Q6((3@rUF);nW<19Gncop>3*KY({5pI4F>*>Qz)Q{O9g)sw{@T(Y zeB%{zS9}rK5Yp1G(0DA60h(rc4xN+ig=Vpq{1G|Dci})3YM)93#WGLq1v8UW`pqv9 z^|RdHzP=ZtB#Ad?JS^3*LFa(pmC29f>^Npy$-Sk{%jYwewi&(xmY0s84b*b z^F2Rjs-Td;pi5f5hFrH(78ups3cdTYqHghf82tq>ves|i`>{avi(q5ht~+1Qz40>- zxNWgL>hyTAJ@6D0q_XsMv9q||?J7%W&IS%%ysBOcJGIoq7aMelu2~B`ja+OGIrRe5 zy;N1Vh1mh~Uh(^jY+bIrU@p*k&%FQX&Z1cCY1v|Xc<*`*i$-CM)hg$d~^l=3VID`_njWdZ1F9Gl?;{wc10f)S+f>q2MzZ8Xtyglc*5ja z2rL0oF@1&xcNn+e2pv&@WES~M%LZKO!CuvCv8RwAbW`D=QxCn3J64cYp1pnqD>kt5 zRc|51b{TAP+!cXx)88!9GPi6XUxAco-19!q8c9Umj zFn>)J(%J(PsI1zqQ!}!HaK#=(-g5^mlJ(qqfeIE4d+^{zg-}<#K?-)!Q$nDM#k2l9 zLXc4x7$m60$_Qe!2Ca7IrEC`gvTSAQHKT&cnMk3ph#_W+J50ZsKRf6QrG!wx54Kqp ze#=@?<3<+LM>Qw53MS^E?YSvt$SvW{N?62;twN~nkV zXZfg0JG~phf@vd~JfJe20~D6NagvONNQculb#G|)%!7$LtLdO77rn8oPd)Qkgnx?% zF7%tP4Rl(f=f{_^D!tXs;H{!|agh%!tk`Tz`zX_NGW1phCoqER>gt?-aM>{GYPBpq z=2TWNy5Q}lZI{}#EIcy+`II~p-Gt6<#@Cffx6vy^e1cN-*HFV7sp9A=yJV_bGAGkE zMZ)-?{ja8w_m5$9B+by7ruuWUyJFc=nof-4vQ~PwF?^o5DVm!aE+b9&V$`j|?55%w z&#qM$>#cv*Ko06<++{6R6S8zFxThC}kXLvzY`Z$OkIL8Z!xkREF>!`Sbjuam8*HP@ zps@jQ{6hRzMTo*FVl=^)kADu@37-NmtHgw%4aX)R-(? zm+Bp_;x0uNRce>sgdtwBbTIo(-G`%Iw+3GqkJpW8DR=0Ni@43RS}N;L%{KCC(6qTl z$f<1>Myh>vLMq4tG`0jsk`K-?DzF+ERp(YuB9fCaR#~hl*GsE)*qEg@e)WcUtmg;o zq`hFtxGJZpveT8QRJT1@R46fDQnOVGa`~;Wj1LbFWey1msb>n4*Y2fYRkj^u529vx z%}}}T=bx|$*D*DcXvv+m>`b|(3(=D7>Ih!r{bLcUuQT%iIJ=r5NbxMjrTp&-WM{#D z;grU`rt&<|ZY$BguBvI|e!rj_x52N>K9J+=s?eF#E!EY{Xe;?tKTT#eZWJ_ql%9>` zIp%mStd3FqR99Qer3JE$kEG>qDW6ImuSm>}Emf$N z`bz7cKa_`2AJGarvaW-6o(dh}BRNBO6y7r>5X#!sVSVhLU6c;GFv{k4xO`Q=99Axr zrI)VQWqon@Y@Mq9B#@9+qS2mfe6bqW>y#W~`p(tb2uAFPq2c{F@MRB!eLTFm@vp0` z&J zXzZIp?-?580gEK9wywH5kq}nX1fz)|^2#f0$&WObeN#CqSMCGW(P7sKpStC@ZadcF z)!tLWe8(%1)$r5u@UpPAkUdJZ;C%|_na8zg#!>D*Ug2N;Y1eobtmb)+#fr({B^1i( zp;mJS5daZC`$6q@Lq$~u@8)KOSV6;UB>s_sox|_WC4Jm~Y67N;RZ_0HI{fE4u3yRh?I4h} z<=qR*D*CriDy-qsdp;p0cJ;!06XPN_%zomnW2S?WN9;Af#z->KPOVV&3=V4ttF zynyz|DBn>VOo6Em0TWfN?Irr4gyefFrAKYzH3mPb$eG-fbbzWelX z-TUi&^lV~5g<`k@fuLq(l;rpC9h=DR;A-pKY_eN$CK zD>^nXQJ? zM$^2TW9wLpkGi(=gVSaVQk7!6{>=Ipd+}zF6~K4F3L@iKD!aLT9H}rIsm@?If~GH? z!zv|^aaCc9fw|4Nq(;lU{reAx%C%hb{GNV^=-uj{!O=%wYhEo+Ezf8Pw#bQ&Ym64Z zu_M-+e9I4+`i;^~E14>Nw!;CeM}<;O=b38?)GtM%?(ooTc(vV|#?HMkoim+Dl(069 z_q?ZFr;#59z)0%gG;NIf{NoW|w-RG(*jqA__IyFMNmr7u9{<` z%+=Xal2cu-f`;8pMZvSv`)*!S%dY0Yw0JbUz|x_AuzxUD)EyV_0+XY{mal^7xrvaL`N^tF3(-CGbXR}kQJ5H8~w{`L@?XB-2IDly$?ItGBu$S$rU&nbBLDv?iu_|34_5LeEi_We0aUIugJM?azz?%vrv581D0&s0_-EYDXJ6nOp~fX zM1gg=kmhW9~Nn6g4K< zU<#M?pIRxQ^WoWoe9n-pqFaCK+dV*yHI-du_{#mnYXF}h)6XG}N z5+SfS=LE=v5`ED>k~3P&DcG3Cw-pj%g`%G(>Gp+9q?i63@iivgk_yV{Oq-4dcHPVZ zRAr$nz26Nyo@_O_`>Gzo*ux^7jF%P>os;G}O}+HF-dhyv>%@F@fEQ29W<)EVNk2pj zo|lPy3%9A^rEHPgmwfjI4jGX)aN$vYqF;;KS+wkA|R=!}UwX)jG>kY_CGdP=|wTMQP+g)}G3mD65E{<{| zHwdm6fe4BpDO>E>B8G}S=0~Tz4dqO>vGosn*7T^6=)o7un6v4Rnj~)@{=>oUmFFR% zbS3OiMPfDCQ;Hna-&M?4E|+*)DA0*U;@N0o0Wmdk&(5=^9~cpMYWxX}e->z^7(r73 zfC;y-eHje+zVU1#&*sVSv321-csI?^54`_vy)<<;9WTBKA-Gd{)*vPAA(OJyBrQ59 zxA-{f>z$8o9&5;^QmlMaAR&%%pO3q-5U5@-_xTBTep z(S~uZ^VGoU7s>{Mvm$3-mlr(HE?Z43|4P5Rv_eL9}F(-GHH21L9$J zS9)Q%@e2kek^28J&QPU$c>3C1)A10PL{hRDwGvp!T7@Egb+I1NeFh-L`y*^_ovDwA z80|NGc(v>QdPLG7&%J}tYjN$GLL&|K1^AiCj{h|L{B^Acwe=BIPgR{gO~lnK+1Bal zAG*Yr-@ci8>&#pfBRCScZ?_o?f_1O*u*;S8y5)tLl-bvw?$d=O{}ZAkp5ZP^KBZnxt6i>ja7fTcaE>B>ok;l&Fk|* zo~7NF?|rouyz503yd-M;tnH=Yv@SmKC&Y}kbeBBfs{K*Txc;@hy z-7tntzI&2Hs}Hs>7}I<)tifY*Rc9)3`VJMYH}(IRjg0U@B?F_b?v^5qyH;DYLYEK|F`pjAHiTZ-QTziCtljrj%Ggl-loY|vZvA9z zGArlLYtA}jOy+*ItDc(FPxWszm4z;UIC1~-Cbd;ZkWv0vut)wA$h-AA89!Y*#;0TF zInnjS-brx}C6w~!ds~LCZH6nWlnn?$$H4%lOd+@LHd?9OWCAgbPB>qol@2nL9_mZJ11}tueT|OxO_E!h4U5DL_R!U?6QQ~d0j|h zlx z4YG}0Swr@%u}jv$gwR+=maz;o)-i_h^L_pPIQO1=pVxEO*Imwe&U4<(uQr%}O3vaw z*3_spS6!JhfK^{V-j>@)9}fTc#>P~#V5+J*-}Dj}fC^|tw%3$KOH<7^CoJ?WcqG3k zG10eZ$P92P(7a2v<{I%Yjt{>2RhcQFWUBK0TYo9Tt9R<@X!0Igef#j(T1A(6*43oB zB<`+9=-Xl`v-e6xn^Q~&DDgVnFXjzjrF$5TRa;Z*!(?+hm&^4P zxa#FCu0VgY@oNomy{zu_CP5E>fp;M$TOnC4HaNSUw*TI?1nlw!ykR!DwCnt6bh@bM z>LZk-#FaRP6^HTL-$*oB4>o&ZnWPlDg}Hfu$uC|9rDtH+0o68L$fqkPzIV*!+AinD zAxGDmnKE4}+3uQKFg~koQbPEWJFa=PwfPtJR8$8)nn<(S6pZyW{uhIMIhEH-BF)tK$!NpFS`^by@Z^A zDbl^+`HIVB;hk9D%aZ!fisjzmwKl_+Uy@#B{;b_dwRCrA&P&v`xUR#XLJRj-TnQ6{ zPhu4?P}u5!2aSJMYBMF<%sk<>8|POx7NkFCDR#{@%u*k3noghk-T1inW((5wK3ZpON-Ja!JOga0j~`WYYx-k$i_2E0-&YIH+A3XDGi#ij@U*jvivPAr zuX67l?(+?Sz<&d#!E;VN!|Bf>Y_0otZLS9cRCtATR1w@guJ~W#?b~Ms|4gry6H07TOLrnDcx4c*xY|t94^;vgoXlfqrzz_?aT2#E-!-SPfY!D*GW?LuY^>03wt$` z0qw&8h8YVLANot@BUqpyxL?BrcEO&mQZSeMl^lT39q!HNIx;q9Ee((=4ke z<=_25o3#=fw%pdQ$gquoTCGP6~M&&KMbE+Do`R}+h4AGbd;g*SX+Z{kphj26kwI#Cm?FRAo9oV$+9 zw_d-Rb1P~ly6uS?X2h}bE<`K2`t$97`@}BdcSvZ;PmfFN&wnXJ52NVKx>lzzY{mJ< z0<2n@o|n=TzupT6C5MFs^EI59JI(zOlW6V_d2fc3!yG5s<<{JI>$ut@$aVf?VPVKLop&_cQX z3Q%v3@bY-`b}pm=R$c1>K^BL4czhSnL#TP#y*3Z-ZZwFP%$)Xp{rooFpD9~D>KVY= z^wFiRg~gzAQp@wO?5&l=?8n(d7IQ`y4YT_znED;*zIVGqUb3)$rRi z(zDn2Pv6~h2=)HlSCs;Y1SY4cd(*&H|Axa6B|Gpqns<65II!gxX1jvdI%QQr-7Hye z*t7CmW9p|_Eflfar8S-hIcO$)kb@tbcx`Xv-%7<%C7%LQJD2@5RgF~7H_X$HN8&$8_5 z`_SEQ^q%jk>%TUNw?t}l9l*cUDe`}6`&@}liQ(Z~V|lG{Ex!JxIIDTb_{{&)(*MV2 zO-&WK)W!+Ie&fX1ibuIi$jnB16P)_3`_*P)^jDfO4IVBPB?H(hp#8aK!|B(2@2i3l z&-=SiP7~hCop!&%Z#uC?zuu9kuV);7=6=GxKylU+tB(4HqR+Q~{tkP?>(;jaM7fX6wd`#LM@2dO!m`S=WfW_wsj&SX zZ;r>$N8kUxSP~3)yX^+3O6;3Vj2ycJma;#>IC4h=EIxX3{*?!%?Djk!0-tn$^uM&f zZRccp(c8cO(E1fv2ohUeVD4u98&emo{V65SJT4H#8Mpo_P(TweG4?ipj}_m0OIzA? znHy2u6=S8&SF(hY&nEHk%~eY)ggE|Mk5+yOgP7K_1d$qOZ&#%Wr&sU3v!AQUvm?N07HuW(1>`kJoZR`#ZmQJuLk;S8>w|Zcz(s>~$CbRpu$v_>S_N_>9&`Fn z=p=lc(Bb?tA-m$++OrxJf627xR<~5)=a=u7HID1Xj~q_xGu#ip5?YIS@t4I~_RGg* zFD6`@<3kKgY1qS$)H)cF?o#k{TI&__D3QAeZcPeqn&no5H= z3Y)zpkiUn}*4#U-{+|gJ+{v%mGrRudrSW)guoshl*Gq2C+0QukRe^~{vD9DpE4Ww8 zJuexbIi@eS4)dFOL{6L^obUN*jS zn_O@$q^4R4cU#aSGCjK9J$U(_%uOx3t9Om)v+}D-Qs1Mx-Q6-iCfITI8fGUoKDmu} zuxCS?U^|_4>5^nrL2UQ$PqjHr1396u5)Gv78f)jMt~Lj#oV<_S-nviM z_oLOqtAZJSTIrZ!fR;T}PL`t&TDJ!cryA{xE`qr);g&ic3d#CReg5#_{gY1%f`8Tr zK)F0Z*?}R7KyTk0A*21I)?ca`TKolEOG!i(@mwAMJchtFnUAciJzToFKj`>?kKkp` zp}xtqUluz(GX=;0{`+W@9oXEW9bjYkAQzFnB}@d2+ow`+fM_o+_~hVMko~J%b+n7c zYR;8donE8$*LHSvmF`cMg@oqexZ8cmK>b5erS-teTnD~EzuvW)>}m-8nKi%?D0v6VzE|q+cZYe7!8plYmD;h`e<+W6CQzvnhX5(%&Gg5?$r8NJJ&| zU4f{hnlG2-)a2!9*K?PGlWl^kW1;Y4UoZeWbw@$$Pb z&dFOx57cFD{%rAq#;d9`CgAo~a@Idy2=G~WClY$g{xXmtdfVA(bw4u{449iKkUY)I$kEmOQth_0s&nu{g;RlF#cp%*3-di0}T}pr0 z)~^<^4~_t>-bbU0sS5V3>fg?|eomFk-Nr~C>Fvn8kV5#-9bR?4`sr(H(CttSKwRxJ zkd;i1+8+5}a&RT^Fd9{Wo&f%owqB7VWVb?Wt$qY%^a#snaf!QRCI!Dq6Q~{hz^!Uz z^z~x`)ZA((_{E$w-gwYh2_uTd>?{L94u&&1zNxbvsU{cAu=xwr|8%l z@oESSqx(S#(g4VFQM-}t9^$^sk-s%Zj^0;5u~o(pl@Ag3i%I_H?>!&AwN3olV+5MBRv zqbljDk)jD6YMpf5i0Gv3gQKArR-QR}6^hUqDe0CG(J7vGbecWRxEk8-HKTx!l{x|3 ztm9!ne{wZSsUzMyAB{b1Q%5+t{1{7f#f|mbd^{*C*P-qD>w{ z4Fd{AT7z^~+67&N=dpWeE2cnC%!QsS}61R@t zpQ4Q?u##x70}8;Btd86o`KdQqg=(C4`lL^ar4!IaJAuO4J~4;LhoHT{C}{+`XqWKd zh^x^Zgc$0GU4MzfLDo-X(wMCu=jp8h7Z=qArg6r{XL=;*b0+DS^9Hm@x(Z!%4*X=_ zCyjqYW6bD)jIO(dZ6Fl&zi`{@p#bsXY_Bz@1kFK{|mER@C>> zICRlTMp#ticQ9i2?CMXKJP#CQ3Dlt-lq$W47Ck-dBsHy2k$=wOE_67fsE`k5z}^XP zB?nb>M%ECLQ=zd@$Xb-mP^XbO6-u}m_-mHVd%#EVtQ^VwMUp0F96gHkyVQA%9GqqR z&DdG`{s(H7>9;ct`Ya8}`DK$PCQn|4&hKU?ac0#pTn}!NJMUdNd+~?pfKNxxs$IAY z{onc1`B^sa559v!3&FlBouYNJy*rqz#D5x;|`E+`3F!}~|{&E3=J|H!} zpw4|s^Fo08Q_LDvS4dR#)KAVVb%y2#4o6oZarY4y3c!qv#!K8MC z34tK)Td-)HnXD>D$Z!QwZ$k3!PqAoh>!tEBHvi|KDr~lWWz8yl%cKZt_C=2|hM+{c z=vUFXM;RKXvz3xNNkLk#H4y>u&=wuyi_1}V+;Uii4EOaBc@;LlhQv7B!kg{uYab(4 z2r>{9)rgQLi}mCA@p-aEzS_EJskHXC`1lpz?s?KL6^ zaPs6|dlkN}_;#CrZ7_n674~8F-tQuMbjRqd`tKgP?!e3}=4MOm!2+NX$mw^`NmO(7 zrQAnw%7Dj~sW(wSnTOaJZ12lKXJ@s%*F)_9YRmGqNST{KCm|3{t*QT178@H@Z%4}9 z3OYF(vSmOFxg5Dd__Qn-n*KqX;a?~hR$bYDLWbcCwmQ!&hE)PDOVPtGFb`KSRDA^< zT!qMLSzOkj79umg=m9K(z{sotzKJNg8W8FFi)g(Xb{;L1P*|G3ekuQ83qpQ%uzfAC zdTNnjeQ_|HL|IOY+!nvyN1R(N{`bSSqi@!Xn9Bxs@Ra;UzZ1qh3}f8OUVI60>{2DQ zu8!o7|KwVojFgeOUTn?U-1LPFyJzp|DYG{APbP2H=G=YZ|*;mhEh$mGUp=|TXeViFtY`yX)vJgaG7wAG2 zcxu+=w;9v8OFMG(3oBcU-cSyct;;h(^DJxj=09r>gAm9mtXkgVpeiH=tNDA&+f#YX zGpbTK9c%<-&aiKovURv_t5`CJW`rS7>^ddUUUGr_IpE2?fJ|$S=6^xqWY=xA>wP3X z1r-6m;V$AO$W#}^l6v;WQ~hX!t>g8!`dV|;@lw`mZR zR{w9KSl?t-b}q77y4dZ%VwXlF%S*l??{*~Xd9>fsGaFOQ4*U^oy7^~oUEv+61wH%z zS)a=h>#E^9pH^zis`)#aM@OwXLv8&(q7$;RE)6YvEQLDx8WS(9R8=Ou3ZN}0qn?7^d zuA2xRhOx|8l3FdEsuUXbFR1s;X8cZNL3jL|%{-6C3;xVz)z9pNKp+nU;ES9YEnJ7L z!5v1KGs(QH!0>F|?*kSz@N4!5V`decik=Ns`UvyV?=WJe+e8{W9q9Y}vEez=OWo@@k`D zxw-Oc!s984?;UEZp3(O}-A$P@SDS5K2DKpVF>Z?q>3r9kZN9Sp073eGstTR~rO0!@ zb)K-U**dxSm(4CO?W3mTpczQFuOkC;9*R)vO{4ASmVN8DqMK>v3O^k$ORPM~n=MKt zsEm0GqCiN)m+9Lkb_WB|gDiQo-%e)4EF^Y(d`pt9iy*b*|Sx%*TlG`{ur#qL@OjzS}OMq z2(bEh5->aTkDFh!^bTmE+I)ORcS}`~u8Wl4W~~0!&2Hoe**1+(B|}eZ!S~6VX@uSZ z7%E|D`RB^0D$+;ovY3TT2RvDwJB_8;@2hmQr)_-iKm&@^$CvORi`5orB_h{WS5{P! zA!N7g*|uu*6ND_6k1u8Sb+%21994#OoRMuI%hSOSj*v{R`?taoL)Jpbor6Y64_)2y zWlz2;OOn%PZhrr=dCY*#nw2;N4zS!%$@q5<$M-YBQARrwB1>wHb!qwcCCT;*mut=D`s& z8ErehntSjdWL~hGoy?msURjm9Ln_VrYFA_f?{<7d=w;&mt)#6Q?f4pW`)ZNyR`sAB z4SxtimXgoQnizVT*utA@givz1-S1&w6=^foDyFsVW+}Ax6Nov8^>k0S^Kn@iBuvU3ZZOoYnOv%u zQl1y{5J_=0OhM%xK17}(#hzCJNBn+gdo>S{H2M4`d^ZN2o9T|-^PMz@pMOW;dUb%7 zI)kjM0#xWLzoW_JHR8IsJk=Zhfuk~kWg*nl?+7Blc$UpA06MH(BQjUL=K${BJ_&j4 zcXUj892@uQr}e9!$?}U}r$@0cjQk?w=%V7QpO9BSbzc31u@-c5E_o08KhCk;|5Tz#3 zq%&OKE3uocihL-(wc zjb5o~7&-a0-!dRT;&b@Q68?xvY~_$ljEJUrfIFpi&an|qIqN;l5JO`?C8rLjDrj>q@*>!#kc zt~R?Vag2vn^jgH*NeYnDL^t#}q&^$k2IU;{5=K(vt=ml-lVqh*ZFl0GYlXsIXW&DU zQBGAY^7a8$2a-7}Xck>P z*a$Fc^z-}Lnio>rt!R+oK;dchnO4e(e{!N@c?hj-sH-?to8ym6sI8&{F&$R3zkWdr z&ccFB{$^!b!KHM(6f$^-?o1y8(yRUCAv0b}f5J*}!nzI7H!fl? z1Z6w&V;9oBzTE*zM4qIy^wSX;Jf2~}U31uuza>oeB|t8tVKwJPYHZ^ZBKxGHDN%Rz zOxIT>gR{Nogn8jLHLvhv15RXQW$d~uzXzk3E1M&~K8;Jk$PnFl*F!mO4Hl`qirP`8 zT(-mTyI%=;74o0DZ+xtW);M3q>;M9}buuX5jlGTzvRXo!~F_qr^e* z=v?~v96%~?`HDH@n@di9%_n{$-Qi9btE(G>NtX=q)}evXXnL>Ke`bSxjN@+#XctzJ zfbqS~-m>r*2jT?N?CP8Q-*IZ<6lt`~k4?AIbJ#vAhr z5&NK;$%bK@iCZz}ex_;2Rx3z7 zZ0KKKmuM^JvK=Uo)uwBocD=W4#SfFq)M*szy9fiLZXWSWq7}d7)y(GJ5$EimZ29YD=BzHq(f4a27i`r)!tf`1C1b>EogZ(>#Sv@^>Sw z`-z=q&_xOgTk0T|{wqv&x>WJsA3M>gb!>(MQ~FP;auCN~`drp+S~NYSll5<&s*Z2| zKL0>OCPajJ1O1tQ?K}hfTP=yc4-Gs&HBz-W01lC5XKJ{zc0_J@O@BMY3?19~!rdC3 zdiw81&}Cdsb~%Yh&4K{gw`oH&1o8e@*1)K}9T^X8$SEPcWk%Cc(Bq*3bhvP_kz~zZ zSp}r0bS7PN#9P%DTGL7NvWuskdR@BlixH)`0zr8JG(td>xixYs!lGvY(DZtoJxjD3 zCehX%fv~Nr@Zn+RI+?_|9?sR#Z5o*+h_}0pp`#yaX?Z@7aVClN55P~)+U1CaWBKcG z@+-uaTZIfQP%>cA(jEOBd540bc3laK!aU z7(ry7tA7spFwJr%Dxo5c_y$|+c)0c8Y36hk5<7KAXzULl#n>@YV@k|Qk?j>ETBj)9 z@R$?E2Hvq(U42AmrY7$0*}mdXeL|+=*a=w@Ol;f%If9S4rh)t}`V>yY1HzXRdZFT3 z2F}{tD6mTl9X0Y`Ht3J)MNn73`rIpOOHt^R2&3nAyy~68DRtN?*lyp6HK<9R`9xqv z;T#G1`Y_}~VCl}0#>#|qEjTSoR=(|1i>wK7eB;Qa(W2K8F<@sAtTy(^m;Z!yX+1I< zO;1hk0HT+j0G>5%q*TX)!+~p#GgrsH2H1ZMnSY5_+3t9-EA_Hcl}|&>(2?~!X$4}I zCy6T)BxIC_Xm~EC(`-U|LrwGO3D05MK!RW6bE2)oU~1U{BesRiZ&8*TXjd9C4-{>v zdHnm1OU91=e7kcJ=2Z_lr}<)Ym8s?u!!a#rTgwps<)C<~@=LAsPu za9FEV?c(L$cKs|IbDG@gns3(nnH>g(3+Ee_(MyYJ+70gV1rb7>xj}UEBRB?0al-E> zW*LBOLnfJKl6bHA&+AZn<#bIy*74K;lqyE6X}7J@11dW$PqxDbtTO-obwZPc$#pJI z$f4gZ)LEwmo4lwxv6un z{nrV7$Iv8>=29iyrH#CK0 zm;VYgT&@%bi!s7%GyUIIJ{PJLwCM`Vs}ZmnIOJ;md|K#s7gxh+gTm2F)#Ndx)oQkw zAD*v_YoMvi7@a6RrztO5FB}C3H***2GHBhthlxFP&^)+V9f5}AtcoyoR=DFTld0>r z3A^aMN`#;lr}9qgrgJQw&YDcc8iGg%nXKvlQOCVu#3+3iVz+)1pObJYQj4q%joL-t zun0)GU)g&()Yo?W-(9J14+BdgD=o5BlOn0!-3WHUxg!+jX@}NV`{lspjfn-bw0UES=-;zqQ8X zF%SHU(i2RJFyIZ|viVZMdYxI8cAvIX z$^-*uza6Xi6^xzIJgFo7g+C<~ni)=zPRdiZ8L`pdnafi~R?1DcIV+5tb1jQ}!A(zm zOTRo>|7%z1hnGpR*$_8A7LYMU=C)a_Th>{v|82BdpK7;S390f~cso$?b>b=7u{<@N z#ZAg~3b>=GIC)1C5k9rktn?IpX=zkR;%vYzwep3V85Qx}tU0a93`tN3s4}}JWLF-N zX!SiL(fqrgETcuu$rZ^{^|;h+Z3p@BBFpt0-{i5-5rd?_7mvY~y(C5zV=6CmmvzQj z?_!n+HA-`!e!Jkbpxn?CY1m4RfCW(U<&bBtd6LRm<pH%WYFhuY8*WnRR7(vhq4Rb>DyMECZ4W%~0Rt`HFHW@lJEyj*Wr38g%Y$(jfpq~cY)Bg6 z=|soa({%yo)H0WYUYa02lzq|0MElc;a(V}LRE^JU5dU}QW^-MzYn3r0SHPg%8u2j~{pWc7}cE#GhVfyR9+kw%427^uU21x~>%Hj)$ zp0$TA$-7&fw+Du!vP5JP08e8O+{>8CuQF14$;9oCV8g@{&wzhW3y?Xf;EcK#WOL*T@?_JC-JRdB*Ws}$l0eKkrK_bRKsEtUP82*9DV@K7LK)7#L1dKX2pg z&0w{l*yR&7q(YImA|GdUj0jtk7KXjK|r44wEHs93l)Zc~| zY78~&jV?Ii~_ z^}8Ht9l$vkA;8PLsdz|8%-O|qzyX2jo1rUzIWTQv0sV#<^(Fz^pK^E!gLC4cf$N5t zmX^S`8s&i{7-Zm}U9eM0Z%qt5xfkhC>-hTmX>X)5-0Lb&C>-X&OStExF_3gf)b_3EYk6 zOIRrNsXQUMLd(1VvgGz{&X@R9?2ue-+&o))s}!b{JX04ceaa#O;6@WoZW%{ z8Ftv=R&WsOR{nqHd~XO0Dq|dMyL>TRy&pK=;8j_E;+3aEyJpCCH^9jLqc4;{Kg*d3 z*wAoV5Q$l7s!3?pkRtx~7nIie4LaHw8MRKcy$r!mHZi2OD9uke&eAuIkF;1X*$ZQt zGup9YM^vnsnjQHj+!f6P?%sI}5Ft>22)t2Y>Uh#3eFW6!&DcyT5X(>II0xG2$u}`m zp-zEMMFc5W1Ye1vugaR z0M_xOjT0p^&khHf67~&k3;G^}*zEhS>z*w0oC& zxr7h`_m;R`T?^vcLOO^OC@h!)lV+v9e6HF16fd9&KiXw9D5!a;izz^XL__x%jRpjB zD6ab|WR1Ku+YrwL{HR`tQ$i)Jo2%^hXWNi3I(r!jkq7lr3$p6|OhL?BCnS{JTv!Kw zqV1f~4C=uD(I%k`Vf$g2Qp^iTzy|t_=aViMrz(zc^*0vOPxwiC2flHh*&Y(*6MhO9 zcm|p#Q}a^iLO#fIpWN7+`pdChEI_KOwMS!wTl{+kF%^)mggTq>Jm-77Ern{zwh;nHjE)C8ZOvQP3*1>xkLKd!@`|C>Bk& z$(w@yhC0U8Z0%(t{&z6%Wojz|Y#=Rl@I7RQ(=ktIr&w3pSpgYK=~}3<2?wx0-uYaH zeptEwbVhZY`9$no#J|@k_DLXAiL;dz8r9**e>Z+>;$&Ry+2Q=ZowJGT+?Pui)|NE9 zM?|tb1MPJx%L!?4$S~uex_f9;CtWqG6a%G`uS*!q zMTv>J8`^MAU8_31VoC z+w1Bm^A`>23?+y5fⅈ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 delta 61195 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 diff --git a/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp b/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp index c17120ce9..da1ed77bb 100644 --- a/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp +++ b/addons/sourcemod/scripting/confoglcompmod/CvarSettings.sp @@ -50,7 +50,7 @@ void CVS_OnModuleStart() void CVS_OnModuleEnd() { - ClearAllSettings(); + ClearAllCvars(); } void CVS_OnConfigsExecuted() @@ -111,7 +111,7 @@ public Action CVS_ResetCvars_Cmd(int args) return Plugin_Handled; } - ClearAllSettings(); + ClearAllCvars(); PrintToServer("Server CVar Tracking Information Reset!"); return Plugin_Handled; diff --git a/addons/sourcemod/scripting/match_vote.sp b/addons/sourcemod/scripting/match_vote.sp index 745ca6ae6..63aedf374 100644 --- a/addons/sourcemod/scripting/match_vote.sp +++ b/addons/sourcemod/scripting/match_vote.sp @@ -81,7 +81,8 @@ public void OnConfigsExecuted() public void OnPluginEnd() { - if (g_hSvMaxPlayers != null) + // TODO: FIX Exception reported: Invalid convar handle 2c0002bc (error 3) + if (g_hSvMaxPlayers != null) // Didn't help g_hSvMaxPlayers.SetInt(g_hMaxPlayers.IntValue); } From de747efc7924b373edb0e337b8962c8d7656766a Mon Sep 17 00:00:00 2001 From: nikita1824 Date: Sun, 21 Jan 2024 15:52:16 +0500 Subject: [PATCH 10/11] Update slot_vote and match_vote - get rid off mv_maxplayers from match_vote and add it to slot_vote (that makes more sense to put that code in slot_vote plugin); - Update server.cfg and don't worry about resetting sv_maxplayers to set values, slot_vote takes care of it. --- addons/sourcemod/plugins/match_vote.smx | Bin 11413 -> 11161 bytes .../sourcemod/plugins/optional/slots_vote.smx | Bin 8600 -> 9439 bytes addons/sourcemod/scripting/match_vote.sp | 519 +++++++++--------- addons/sourcemod/scripting/slots_vote.sp | 272 +++++---- cfg/server.cfg | 25 +- 5 files changed, 419 insertions(+), 397 deletions(-) diff --git a/addons/sourcemod/plugins/match_vote.smx b/addons/sourcemod/plugins/match_vote.smx index bdde8fa58737d83f31e7e9846ba9b476780c4495..3299531f4cdf08663796d2fe4631743f4dff32aa 100644 GIT binary patch delta 11020 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 jxev0ghR0>%IeXeUYB;p1oFOiW@@* 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 delta 8451 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 #include -#define TEAM_SPECTATE 1 -#define MATCHMODES_PATH "configs/matchmodes.txt" +#define TEAM_SPECTATE 1 +#define MATCHMODES_PATH "configs/matchmodes.txt" Handle - g_hVote = null; + g_hVote = null; KeyValues - g_hModesKV = null; + g_hModesKV = null; ConVar - g_hEnabled = null, - g_hCvarPlayerLimit = null, - g_hMaxPlayers = null, - g_hSvMaxPlayers = null; + g_hEnabled = null, + g_hCvarPlayerLimit = null; char - g_sCfg[32]; + g_sCfg[32]; bool - g_bIsConfoglAvailable = false, - g_bOnSet = false, - g_bCedaGame = false; + g_bIsConfoglAvailable = false, + g_bCedaGame = false; public Plugin myinfo = { - name = "Match Vote", - author = "vintik, Sir, StarterX4", - description = "!match !rmatch !chmatch - Change Hostname and Slots while you're at it!", - version = "1.3", - url = "https://github.com/L4D-Community/L4D2-Competitive-Framework" + name = "Match Vote", + author = "vintik, Sir, StarterX4", + description = "!match !rmatch !chmatch - Change Hostname and Slots while you're at it!", + version = "1.3", + url = "https://github.com/L4D-Community/L4D2-Competitive-Framework" }; public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int iErrMax) { - EngineVersion iEngine = GetEngineVersion(); - if (iEngine != Engine_Left4Dead2) { - strcopy(sError, iErrMax, "Plugin only supports Left 4 Dead 2."); - return APLRes_SilentFailure; - } + EngineVersion iEngine = GetEngineVersion(); + if (iEngine != Engine_Left4Dead2) { + strcopy(sError, iErrMax, "Plugin only supports Left 4 Dead 2."); + return APLRes_SilentFailure; + } - return APLRes_Success; + return APLRes_Success; } public void OnPluginStart() { - char sBuffer[PLATFORM_MAX_PATH ]; - g_hModesKV = new KeyValues("MatchModes"); - BuildPath(Path_SM, sBuffer, sizeof(sBuffer), MATCHMODES_PATH); + char sBuffer[PLATFORM_MAX_PATH ]; + g_hModesKV = new KeyValues("MatchModes"); + BuildPath(Path_SM, sBuffer, sizeof(sBuffer), MATCHMODES_PATH); - if (!g_hModesKV.ImportFromFile(sBuffer)) { - SetFailState("Couldn't load matchmodes.txt!"); - } + if (!g_hModesKV.ImportFromFile(sBuffer)) { + SetFailState("Couldn't load matchmodes.txt!"); + } - g_hEnabled = CreateConVar("sm_match_vote_enabled", "1", "Plugin enabled", _, true, 0.0, true, 1.0); - g_hMaxPlayers = CreateConVar("mv_maxplayers", "30", "How many slots would you like the Server to be at Config Load/Unload?", _, true, 1.0, true, 32.0); - g_hCvarPlayerLimit = CreateConVar("sm_match_player_limit", "1", "Minimum # of players in game to start the vote", _, true, 1.0, true, 32.0); + g_hEnabled = CreateConVar("sm_match_vote_enabled", "1", "Plugin enabled", _, true, 0.0, true, 1.0); - RegConsoleCmd("sm_match", MatchRequest); - RegConsoleCmd("sm_rmatch", MatchReset); + g_hCvarPlayerLimit = CreateConVar("sm_match_player_limit", "1", "Minimum # of players in game to start the vote", _, true, 1.0, true, 32.0); - g_hSvMaxPlayers = FindConVar("sv_maxplayers"); - g_bIsConfoglAvailable = LibraryExists("confogl"); -} + RegConsoleCmd("sm_match", MatchRequest); + RegConsoleCmd("sm_rmatch", MatchReset); -public void OnConfigsExecuted() -{ - if (!g_bOnSet) { - g_hSvMaxPlayers.SetInt(g_hMaxPlayers.IntValue); - g_bOnSet = true; - } -} - -public void OnPluginEnd() -{ - // TODO: FIX Exception reported: Invalid convar handle 2c0002bc (error 3) - if (g_hSvMaxPlayers != null) // Didn't help - g_hSvMaxPlayers.SetInt(g_hMaxPlayers.IntValue); + g_bIsConfoglAvailable = LibraryExists("confogl"); } public void OnLibraryRemoved(const char[] sPluginName) { - if (strcmp(sPluginName, "confogl") == 0) { - g_bIsConfoglAvailable = false; - } + if (strcmp(sPluginName, "confogl") == 0) { + g_bIsConfoglAvailable = false; + } } public void OnLibraryAdded(const char[] sPluginName) { - if (strcmp(sPluginName, "confogl") == 0) { - g_bIsConfoglAvailable = true; - } + if (strcmp(sPluginName, "confogl") == 0) { + g_bIsConfoglAvailable = true; + } } public void OnCedapugStarted() { - g_bCedaGame = true; + g_bCedaGame = true; } public void OnCedapugEnded() { - g_bCedaGame = false; + g_bCedaGame = false; } public Action MatchRequest(int iClient, int iArgs) { - if (!g_hEnabled.BoolValue || iClient == 0 || !g_bIsConfoglAvailable) { - return Plugin_Handled; - } - - if (iArgs > 0) { - //config specified - char sCfg[64], sName[64]; - GetCmdArg(1, sCfg, sizeof(sCfg)); - - if (FindConfigName(sCfg, sName, sizeof(sName))) { - if (StartMatchVote(iClient, sName)) { - strcopy(g_sCfg, sizeof(g_sCfg), sCfg); - - //caller is voting for - FakeClientCommand(iClient, "Vote Yes"); - } - - return Plugin_Handled; - } - } - - //show main menu - MatchModeMenu(iClient); - return Plugin_Handled; + if (!g_hEnabled.BoolValue || iClient == 0 || !g_bIsConfoglAvailable) { + return Plugin_Handled; + } + + if (iArgs > 0) { + //config specified + char sCfg[64], sName[64]; + GetCmdArg(1, sCfg, sizeof(sCfg)); + + if (FindConfigName(sCfg, sName, sizeof(sName))) { + if (StartMatchVote(iClient, sName)) { + strcopy(g_sCfg, sizeof(g_sCfg), sCfg); + + //caller is voting for + FakeClientCommand(iClient, "Vote Yes"); + } + + return Plugin_Handled; + } + } + + //show main menu + MatchModeMenu(iClient); + return Plugin_Handled; } bool FindConfigName(const char[] sConfig, char[] sName, const int iMaxLength) { - g_hModesKV.Rewind(); - - if (g_hModesKV.GotoFirstSubKey()) { - do { - if (g_hModesKV.JumpToKey(sConfig)) { - g_hModesKV.GetString("name", sName, iMaxLength); - return true; - } - } while (g_hModesKV.GotoNextKey(false)); - } - - return false; + g_hModesKV.Rewind(); + + if (g_hModesKV.GotoFirstSubKey()) { + do { + if (g_hModesKV.JumpToKey(sConfig)) { + g_hModesKV.GetString("name", sName, iMaxLength); + return true; + } + } while (g_hModesKV.GotoNextKey(false)); + } + + return false; } void MatchModeMenu(int iClient) { - Menu hMenu = new Menu(MatchModeMenuHandler); - hMenu.SetTitle("Select match mode:"); + Menu hMenu = new Menu(MatchModeMenuHandler); + hMenu.SetTitle("Select match mode:"); - char sBuffer[64]; - g_hModesKV.Rewind(); + char sBuffer[64]; + g_hModesKV.Rewind(); - if (g_hModesKV.GotoFirstSubKey()) { - do { - g_hModesKV.GetSectionName(sBuffer, sizeof(sBuffer)); - hMenu.AddItem(sBuffer, sBuffer); - } while (g_hModesKV.GotoNextKey(false)); - } + if (g_hModesKV.GotoFirstSubKey()) { + do { + g_hModesKV.GetSectionName(sBuffer, sizeof(sBuffer)); + hMenu.AddItem(sBuffer, sBuffer); + } while (g_hModesKV.GotoNextKey(false)); + } - hMenu.Display(iClient, 20); + hMenu.Display(iClient, 20); } public int MatchModeMenuHandler(Menu menu, MenuAction action, int param1, int param2) { - if (action == MenuAction_End) { - delete menu; - } else if (action == MenuAction_Select) { - char sInfo[64], sBuffer[64]; - menu.GetItem(param2, sInfo, sizeof(sInfo)); + if (action == MenuAction_End) { + delete menu; + } else if (action == MenuAction_Select) { + char sInfo[64], sBuffer[64]; + menu.GetItem(param2, sInfo, sizeof(sInfo)); - g_hModesKV.Rewind(); + g_hModesKV.Rewind(); - if (g_hModesKV.JumpToKey(sInfo) && g_hModesKV.GotoFirstSubKey()) { - Menu hMenu = new Menu(ConfigsMenuHandler); + if (g_hModesKV.JumpToKey(sInfo) && g_hModesKV.GotoFirstSubKey()) { + Menu hMenu = new Menu(ConfigsMenuHandler); - FormatEx(sBuffer, sizeof(sBuffer), "Select %s config:", sInfo); - hMenu.SetTitle(sBuffer); + FormatEx(sBuffer, sizeof(sBuffer), "Select %s config:", sInfo); + hMenu.SetTitle(sBuffer); - do { - g_hModesKV.GetSectionName(sInfo, sizeof(sInfo)); - g_hModesKV.GetString("name", sBuffer, sizeof(sBuffer)); + do { + g_hModesKV.GetSectionName(sInfo, sizeof(sInfo)); + g_hModesKV.GetString("name", sBuffer, sizeof(sBuffer)); - hMenu.AddItem(sInfo, sBuffer); - } while (g_hModesKV.GotoNextKey()); + hMenu.AddItem(sInfo, sBuffer); + } while (g_hModesKV.GotoNextKey()); - hMenu.Display(param1, 20); - } else { - CPrintToChat(param1, "{blue}[{default}Match{blue}] {default}No configs for such mode were found."); - MatchModeMenu(param1); - } - } + hMenu.Display(param1, 20); + } else { + CPrintToChat(param1, "{blue}[{default}Match{blue}] {default}No configs for such mode were found."); + MatchModeMenu(param1); + } + } - return 0; + return 0; } public int ConfigsMenuHandler(Menu menu, MenuAction action, int param1, int param2) { - if (action == MenuAction_End) { - delete menu; - } else if (action == MenuAction_Cancel) { - MatchModeMenu(param1); - } else if (action == MenuAction_Select) { - char sInfo[64], sBuffer[64]; - menu.GetItem(param2, sInfo, sizeof(sInfo), _, sBuffer, sizeof(sBuffer)); - - if (StartMatchVote(param1, sBuffer)) { - strcopy(g_sCfg, sizeof(g_sCfg), sInfo); - //caller is voting for - FakeClientCommand(param1, "Vote Yes"); - } else { - MatchModeMenu(param1); - } - } - - return 0; + if (action == MenuAction_End) { + delete menu; + } else if (action == MenuAction_Cancel) { + MatchModeMenu(param1); + } else if (action == MenuAction_Select) { + char sInfo[64], sBuffer[64]; + menu.GetItem(param2, sInfo, sizeof(sInfo), _, sBuffer, sizeof(sBuffer)); + + if (StartMatchVote(param1, sBuffer)) { + strcopy(g_sCfg, sizeof(g_sCfg), sInfo); + //caller is voting for + FakeClientCommand(param1, "Vote Yes"); + } else { + MatchModeMenu(param1); + } + } + + return 0; } bool StartMatchVote(int iClient, const char[] sCfgName) { - if (GetClientTeam(iClient) <= TEAM_SPECTATE) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match voting isn't allowed for spectators."); - return false; - } - - if (!IsBuiltinVoteInProgress()) { - int iNumPlayers = 0; - int[] iPlayers = new int[MaxClients]; - - //list of non-spectators players - for (int i = 1; i <= MaxClients; i++) { - if (!IsClientInGame(i) || IsFakeClient(i) || GetClientTeam(i) <= TEAM_SPECTATE) { - continue; - } - - iPlayers[iNumPlayers++] = i; - } - - if (iNumPlayers < g_hCvarPlayerLimit.IntValue) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match vote cannot be started. Not enough players."); - return false; - } - - char sBuffer[64]; - FormatEx(sBuffer, sizeof(sBuffer), "Load confogl '%s' config?", sCfgName); - - g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); - SetBuiltinVoteArgument(g_hVote, sBuffer); - SetBuiltinVoteInitiator(g_hVote, iClient); - SetBuiltinVoteResultCallback(g_hVote, MatchVoteResultHandler); - DisplayBuiltinVote(g_hVote, iPlayers, iNumPlayers, 20); - - return true; - } - - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match vote cannot be started now."); - return false; + if (GetClientTeam(iClient) <= TEAM_SPECTATE) { + CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match voting isn't allowed for spectators."); + return false; + } + + if (!IsBuiltinVoteInProgress()) { + int iNumPlayers = 0; + int[] iPlayers = new int[MaxClients]; + + //list of non-spectators players + for (int i = 1; i <= MaxClients; i++) { + if (!IsClientInGame(i) || IsFakeClient(i) || GetClientTeam(i) <= TEAM_SPECTATE) { + continue; + } + + iPlayers[iNumPlayers++] = i; + } + + if (iNumPlayers < g_hCvarPlayerLimit.IntValue) { + CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match vote cannot be started. Not enough players."); + return false; + } + + char sBuffer[64]; + FormatEx(sBuffer, sizeof(sBuffer), "Load confogl '%s' config?", sCfgName); + + g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); + SetBuiltinVoteArgument(g_hVote, sBuffer); + SetBuiltinVoteInitiator(g_hVote, iClient); + SetBuiltinVoteResultCallback(g_hVote, MatchVoteResultHandler); + DisplayBuiltinVote(g_hVote, iPlayers, iNumPlayers, 20); + + return true; + } + + CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Match vote cannot be started now."); + return false; } public void VoteActionHandler(Handle vote, BuiltinVoteAction action, int param1, int param2) { - switch (action) { - case BuiltinVoteAction_End: { - delete vote; - g_hVote = null; - } - case BuiltinVoteAction_Cancel: { - DisplayBuiltinVoteFail(vote, view_as(param1)); - } - } + switch (action) { + case BuiltinVoteAction_End: { + delete vote; + g_hVote = null; + } + case BuiltinVoteAction_Cancel: { + DisplayBuiltinVoteFail(vote, view_as(param1)); + } + } } public void MatchVoteResultHandler(Handle vote, int num_votes, int num_clients, \ - const int[][] client_info, int num_items, const int[][] item_info) + const int[][] client_info, int num_items, const int[][] item_info) { - for (int i = 0; i < num_items; i++) { - if (item_info[i][BUILTINVOTEINFO_ITEM_INDEX] == BUILTINVOTES_VOTE_YES) { - if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) { - DisplayBuiltinVotePass(vote, "Matchmode Loaded"); - ServerCommand("sm_forcematch %s", g_sCfg); - - return; - } - } - } - - DisplayBuiltinVoteFail(vote, BuiltinVoteFail_Loses); + for (int i = 0; i < num_items; i++) { + if (item_info[i][BUILTINVOTEINFO_ITEM_INDEX] == BUILTINVOTES_VOTE_YES) { + if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) { + DisplayBuiltinVotePass(vote, "Matchmode Loaded"); + ServerCommand("sm_forcematch %s", g_sCfg); + + return; + } + } + } + + DisplayBuiltinVoteFail(vote, BuiltinVoteFail_Loses); } public Action MatchReset(int iClient, int iArgs) { - if (!g_hEnabled.BoolValue || iClient == 0 || !g_bIsConfoglAvailable) { - return Plugin_Handled; - } + if (!g_hEnabled.BoolValue || iClient == 0 || !g_bIsConfoglAvailable) { + return Plugin_Handled; + } - if (g_bCedaGame) { - return Plugin_Handled; - } + if (g_bCedaGame) { + return Plugin_Handled; + } - //voting for resetmatch - StartResetMatchVote(iClient); - return Plugin_Handled; + //voting for resetmatch + StartResetMatchVote(iClient); + return Plugin_Handled; } bool StartResetMatchVote(int iClient) { - if (GetClientTeam(iClient) <= TEAM_SPECTATE) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Resetmatch voting isn't allowed for spectators."); - return false; - } - - if (!LGO_IsMatchModeLoaded()) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}No matchmode loaded."); - return false; - } - - if (IsNewBuiltinVoteAllowed()) { - int iNumPlayers = 0, iConnectedCount = 0; - int[] iPlayers = new int[MaxClients]; - - for (int i = 1; i <= MaxClients; i++) { - if (!IsClientInGame(i)) { - if (IsClientConnected(i)) { - iConnectedCount++; - } - } else { - if (!IsFakeClient(i) && GetClientTeam(i) > TEAM_SPECTATE) { - iPlayers[iNumPlayers++] = i; - } - } - } - - if (iConnectedCount > 0) { - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Resetmatch vote cannot be started. Players are connecting"); - return false; - } - - g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); - SetBuiltinVoteArgument(g_hVote, "Turn off confogl?"); - SetBuiltinVoteInitiator(g_hVote, iClient); - SetBuiltinVoteResultCallback(g_hVote, ResetMatchVoteResultHandler); - DisplayBuiltinVote(g_hVote, iPlayers, iNumPlayers, 20); - - FakeClientCommand(iClient, "Vote Yes"); - return true; - } - - CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Resetmatch vote cannot be started now."); - return false; + if (GetClientTeam(iClient) <= TEAM_SPECTATE) { + CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Resetmatch voting isn't allowed for spectators."); + return false; + } + + if (!LGO_IsMatchModeLoaded()) { + CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}No matchmode loaded."); + return false; + } + + if (IsNewBuiltinVoteAllowed()) { + int iNumPlayers = 0, iConnectedCount = 0; + int[] iPlayers = new int[MaxClients]; + + for (int i = 1; i <= MaxClients; i++) { + if (!IsClientInGame(i)) { + if (IsClientConnected(i)) { + iConnectedCount++; + } + } else { + if (!IsFakeClient(i) && GetClientTeam(i) > TEAM_SPECTATE) { + iPlayers[iNumPlayers++] = i; + } + } + } + + if (iConnectedCount > 0) { + CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Resetmatch vote cannot be started. Players are connecting"); + return false; + } + + g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); + SetBuiltinVoteArgument(g_hVote, "Turn off confogl?"); + SetBuiltinVoteInitiator(g_hVote, iClient); + SetBuiltinVoteResultCallback(g_hVote, ResetMatchVoteResultHandler); + DisplayBuiltinVote(g_hVote, iPlayers, iNumPlayers, 20); + + FakeClientCommand(iClient, "Vote Yes"); + return true; + } + + CPrintToChat(iClient, "{blue}[{default}Match{blue}] {default}Resetmatch vote cannot be started now."); + return false; } public void ResetMatchVoteResultHandler(Handle vote, int num_votes, int num_clients, \ - const int[][] client_info, int num_items, const int[][] item_info) + const int[][] client_info, int num_items, const int[][] item_info) { - for (int i = 0; i < num_items; i++) { - if (item_info[i][BUILTINVOTEINFO_ITEM_INDEX] == BUILTINVOTES_VOTE_YES) { - if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) { - DisplayBuiltinVotePass(vote, "Confogl is unloading..."); - ServerCommand("sm_resetmatch"); - - return; - } - } - } - - DisplayBuiltinVoteFail(vote, BuiltinVoteFail_Loses); + for (int i = 0; i < num_items; i++) { + if (item_info[i][BUILTINVOTEINFO_ITEM_INDEX] == BUILTINVOTES_VOTE_YES) { + if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) { + DisplayBuiltinVotePass(vote, "Confogl is unloading..."); + ServerCommand("sm_resetmatch"); + + return; + } + } + } + + DisplayBuiltinVoteFail(vote, BuiltinVoteFail_Loses); } \ No newline at end of file diff --git a/addons/sourcemod/scripting/slots_vote.sp b/addons/sourcemod/scripting/slots_vote.sp index 846393e2d..d1e09b963 100644 --- a/addons/sourcemod/scripting/slots_vote.sp +++ b/addons/sourcemod/scripting/slots_vote.sp @@ -5,6 +5,9 @@ #include #include +#undef REQUIRE_PLUGIN +#include + #define L4D2Team_Spectator 1 Handle g_hVote; @@ -12,145 +15,182 @@ char g_sSlots[32]; ConVar hMaxSlots; int MaxSlots; +ConVar L4DToolz_MaxPlayers; +ConVar L4DToolz_VisibleMaxPlayers; +ConVar g_hMaxPlayers; + +ConVar g_cvSurvivorLimit; +ConVar g_cvInfectedLimit; + public Plugin myinfo = { - name = "Slots?! Voter", - description = "Slots Voter", - author = "Sir", - version = "", - url = "https://github.com/SirPlease/L4D2-Competitive-Rework/" + name = "Slots?! Voter", + description = "Slots Voter", + author = "Sir", + version = "", + url = "https://github.com/SirPlease/L4D2-Competitive-Rework/" }; public void OnPluginStart() { - LoadTranslations("slots_vote.phrases"); - RegConsoleCmd("sm_slots", SlotsRequest); - hMaxSlots = CreateConVar("slots_max_slots", "30", "Maximum amount of slots you wish players to be able to vote for? (DON'T GO HIGHER THAN 30)"); - MaxSlots = hMaxSlots.IntValue; - HookConVarChange(hMaxSlots, CVarChanged); + LoadTranslations("slots_vote.phrases"); + RegConsoleCmd("sm_slots", SlotsRequest); + + g_cvSurvivorLimit = FindConVar("survivor_limit"); + g_cvInfectedLimit = FindConVar("z_max_player_zombies"); + + hMaxSlots = CreateConVar("slots_max_slots", "30", "Maximum amount of slots you wish players to be able to vote for? (DON'T GO HIGHER THAN 30)", _, true, 1.0, true, 30.0); // we just prevent going higher with minimum/maximum values + MaxSlots = hMaxSlots.IntValue; + hMaxSlots.AddChangeHook(CvChg_MaxSlotsChanged); + + L4DToolz_MaxPlayers = FindConVar("sv_maxplayers"); + L4DToolz_VisibleMaxPlayers = FindConVar("sv_visiblemaxplayers"); + + g_hMaxPlayers = CreateConVar("mv_maxplayers", "-1", "How many slots would you like the Server to be at Config Load/Unload? (DON'T GO HIGHER THAN 30)", _, true, 1.0, true, 30.0); // we just prevent going higher with minimum/maximum values + g_hMaxPlayers.IntValue = L4DToolz_MaxPlayers.IntValue; + + L4DToolz_MaxPlayers.AddChangeHook(CvChg_MaxPlayersChanged); + L4DToolz_VisibleMaxPlayers.AddChangeHook(CvChg_MaxPlayersChanged); + g_hMaxPlayers.AddChangeHook(CvChg_MaxPlayersChanged); } public Action SlotsRequest(int client, int args) { - if (client == 0) - { - ReplyToCommand(client, "%T", "NotConsoleVote", LANG_SERVER); - return Plugin_Handled; - } - - if (args == 1) - { - char sSlots[64]; - GetCmdArg(1, sSlots, sizeof(sSlots)); - int Int = StringToInt(sSlots); - if (Int > MaxSlots) - { - CPrintToChat(client, "%t %t", "Tag", "LimitSlotsAbove", MaxSlots); - } - else - { - if (GetUserFlagBits(client) & ADMFLAG_GENERIC) - { - char sName[MAX_NAME_LENGTH]; - GetClientName(client, sName, sizeof(sName)); - CPrintToChatAll("%t %t", "Tag", "LimitedSlotsTo", sName, Int); - SetConVarInt(FindConVar("sv_maxplayers"), Int); - } - else if (Int < GetConVarInt(FindConVar("survivor_limit")) + GetConVarInt(FindConVar("z_max_player_zombies"))) - { - CPrintToChat(client, "%t %t", "Tag", "RequiredPlayers"); - } - else if (StartSlotVote(client, sSlots)) - { - strcopy(g_sSlots, sizeof(g_sSlots), sSlots); - FakeClientCommand(client, "Vote Yes"); - } - } - } - else - { - CPrintToChat(client, "%t %t", "Tag", "SlotsUsage"); - } - return Plugin_Handled; + if (client == 0) + { + ReplyToCommand(client, "%T", "NotConsoleVote", LANG_SERVER); + return Plugin_Handled; + } + + if (args == 0) + { + CPrintToChat(client, "%t %t", "Tag", "SlotsUsage"); + return Plugin_Handled; + } + + char sSlots[64]; + GetCmdArg(1, sSlots, sizeof(sSlots)); + int Int = StringToInt(sSlots); + if (Int > MaxSlots) + { + CPrintToChat(client, "%t %t", "Tag", "LimitSlotsAbove", MaxSlots); + } + else + { + if (GetUserFlagBits(client) & ADMFLAG_GENERIC) + { + char sName[MAX_NAME_LENGTH]; + GetClientName(client, sName, sizeof(sName)); + CPrintToChatAll("%t %t", "Tag", "LimitedSlotsTo", sName, Int); + g_hMaxPlayers.IntValue = Int; + } + else if (Int < (g_cvSurvivorLimit.IntValue + g_cvInfectedLimit.IntValue)) + { + CPrintToChat(client, "%t %t", "Tag", "RequiredPlayers"); + } + else if (StartSlotVote(client, sSlots)) + { + strcopy(g_sSlots, sizeof(g_sSlots), sSlots); + FakeClientCommand(client, "Vote Yes"); + } + } + + return Plugin_Handled; } bool StartSlotVote(int client, char[] Slots) { - if (GetClientTeam(client) <= L4D2Team_Spectator) - { - CPrintToChat(client, "%t %t", "Tag", "Spectators"); - return false; - } - - if (!IsBuiltinVoteInProgress()) - { - int iNumPlayers = 0; - int[] iPlayers = new int[MaxClients]; - - // list of non-spectators players - for (int i = 1; i <= MaxClients; i++) - { - if (!IsClientInGame(i) || IsFakeClient(i) || GetClientTeam(i) <= L4D2Team_Spectator) - { - continue; - } - - iPlayers[iNumPlayers++] = i; - } - - char sBuffer[64]; - Format(sBuffer, sizeof(sBuffer), "%T", "LimitSlots", LANG_SERVER, Slots); - - g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); - SetBuiltinVoteArgument(g_hVote, sBuffer); - SetBuiltinVoteInitiator(g_hVote, client); - SetBuiltinVoteResultCallback(g_hVote, SlotVoteResultHandler); - DisplayBuiltinVote(g_hVote, iPlayers, iNumPlayers, 20); - return true; - } - - CPrintToChat(client, "%t %t", "Tag", "CannotBeStarted"); - return false; + if (GetClientTeam(client) <= L4D2Team_Spectator) + { + CPrintToChat(client, "%t %t", "Tag", "Spectators"); + return false; + } + + if (!IsBuiltinVoteInProgress()) + { + int iNumPlayers = 0; + int[] iPlayers = new int[MaxClients]; + + // list of non-spectators players + for (int i = 1; i <= MaxClients; i++) + { + if (!IsClientInGame(i) || IsFakeClient(i) || GetClientTeam(i) <= L4D2Team_Spectator) + { + continue; + } + + iPlayers[iNumPlayers++] = i; + } + + char sBuffer[64]; + Format(sBuffer, sizeof(sBuffer), "%T", "LimitSlots", LANG_SERVER, Slots); + + g_hVote = CreateBuiltinVote(VoteActionHandler, BuiltinVoteType_Custom_YesNo, BuiltinVoteAction_Cancel | BuiltinVoteAction_VoteEnd | BuiltinVoteAction_End); + SetBuiltinVoteArgument(g_hVote, sBuffer); + SetBuiltinVoteInitiator(g_hVote, client); + SetBuiltinVoteResultCallback(g_hVote, SlotVoteResultHandler); + DisplayBuiltinVote(g_hVote, iPlayers, iNumPlayers, 20); + return true; + } + + CPrintToChat(client, "%t %t", "Tag", "CannotBeStarted"); + return false; } public void VoteActionHandler(Handle vote, BuiltinVoteAction action, int param1, int param2) { - switch (action) - { - case BuiltinVoteAction_End: - { - delete vote; - g_hVote = null; - } - case BuiltinVoteAction_Cancel: - { - DisplayBuiltinVoteFail(vote, view_as(param1)); - } - } + switch (action) + { + case BuiltinVoteAction_End: + { + delete vote; + g_hVote = null; + } + case BuiltinVoteAction_Cancel: + { + DisplayBuiltinVoteFail(vote, view_as(param1)); + } + } } public void SlotVoteResultHandler(Handle vote, int num_votes, int num_clients, const int[][] client_info, int num_items, const int[][] item_info) { - for (int i = 0; i < num_items; i++) - { - if (item_info[i][BUILTINVOTEINFO_ITEM_INDEX] == BUILTINVOTES_VOTE_YES) - { - if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) - { - - int Slots = StringToInt(g_sSlots, 10); - char Buffer[32]; - Format(Buffer, sizeof(Buffer), "%T", "LimitingSlots", LANG_SERVER); - DisplayBuiltinVotePass(vote, Buffer); - SetConVarInt(FindConVar("sv_maxplayers"), Slots); - return; - } - } - } - DisplayBuiltinVoteFail(vote, BuiltinVoteFail_Loses); + for (int i = 0; i < num_items; i++) + { + if (item_info[i][BUILTINVOTEINFO_ITEM_INDEX] == BUILTINVOTES_VOTE_YES) + { + if (item_info[i][BUILTINVOTEINFO_ITEM_VOTES] > (num_votes / 2)) + { + int Slots = StringToInt(g_sSlots, 10); + char Buffer[32]; + Format(Buffer, sizeof(Buffer), "%T", "LimitingSlots", LANG_SERVER); + DisplayBuiltinVotePass(vote, Buffer); + + g_hMaxPlayers.IntValue = Slots; + return; + } + } + } + DisplayBuiltinVoteFail(vote, BuiltinVoteFail_Loses); } -public void CVarChanged(Handle cvar, char[] oldValue, char[] newValue) +public void CvChg_MaxSlotsChanged(ConVar cvar, char[] oldValue, char[] newValue) { - MaxSlots = GetConVarInt(hMaxSlots); + MaxSlots = hMaxSlots.IntValue; } + +public void CvChg_MaxPlayersChanged(ConVar cvar, char[] oldValue, char[] newValue) +{ + L4DToolz_MaxPlayers.IntValue = g_hMaxPlayers.IntValue; + L4DToolz_VisibleMaxPlayers.IntValue = g_hMaxPlayers.IntValue; +} + +public void LGO_OnMatchModeLoaded() +{ + g_hMaxPlayers.IntValue = hMaxSlots.IntValue; +} + +public void LGO_OnMatchModeUnloaded() +{ + g_hMaxPlayers.IntValue = hMaxSlots.IntValue; +} \ No newline at end of file diff --git a/cfg/server.cfg b/cfg/server.cfg index 2b3e09db2..13692e04c 100644 --- a/cfg/server.cfg +++ b/cfg/server.cfg @@ -3,14 +3,14 @@ // [General] // ----------------------------------------------------------------------- -hostname "My Cool Server" // Hostname bit that won't change. +hostname "My Cool Server" // Hostname bit that won't change. rcon_password "WowYouKnowThePasswordHere" // Rcon password, used for remote access mostly. sv_steamgroup "13333337" sv_search_key "CompetitiveRework" -sv_steamgroup_exclusive "1" // If set, only members of Steam group will be able to join the server when it's empty, public people will be able to join the server only if it has players. +sv_steamgroup_exclusive "1" // If set, only members of Steam group will be able to join the server when it's empty, public people will be able to join the server only if it has players. // (Forcing the IP as a non-group member in lobby, or directly connecting always works) - + motdfile "mymotd.txt" // This ensures that Valve doesn't overwrite the MoTD every Update. [Edit this file instead of motd.txt, found in the same folder (/left4dead2)] hostfile "myhost.txt" // This ensures that Valve doesn't overwrite the Hostfile every Update. [Edit this file instead of host.txt, found in the same folder (/left4dead2)] @@ -21,14 +21,14 @@ hostfile "myhost.txt" // This ensures that Valve doesn't over // ----------------------------------------------------------------------- sv_allow_lobby_connect_only "0" // If set to 1, players may only join this server from matchmaking lobby, may not connect directly. -// [File Consistency] -// ----------------------------------------------------------------------- +// [File Consistency] +// ----------------------------------------------------------------------- sv_consistency "1" // Whether the server enforces file consistency for critical files. sv_pure "2" // The server will force all client files to come from Steam and additional files matching the Server. sv_pure_kick_clients "1" // If set to 1, the server will kick clients with mismatching files. // [Logging] -// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- log on //Creates a logfile (on | off) sv_logecho 0 //default 0; Echo log information to the console. sv_logfile 1 //default 1; Log server information in the log file. @@ -38,7 +38,7 @@ sv_logflush 0 //default 0; Flush the log files to dis sv_logsdir logs //Folder in the game directory where server logs will be stored. // [Addon Disabler] -// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- // This Setting will disable/enable the Serverside Addon Disabler. // -1 = use addonconfig.cfg // 0 = Disable addons. @@ -54,7 +54,7 @@ sm_cvar sv_allow_wait_command 0 // - When using a different Tickrate, modify settings accordingly: // 1. Change 100000 to (Tickrate * 1000) for Rate and Splitpacket. // 2. Change 100 to (Tickrate) for Cmd and Update Rates. -// ----------------------------------------------------------------------- +// ----------------------------------------------------------------------- sm_cvar sv_minrate 100000 // Minimum value of rate. sm_cvar sv_maxrate 100000 // Maximum Value of rate. sm_cvar sv_minupdaterate 100 // Minimum Value of cl_updaterate. @@ -70,8 +70,9 @@ sm_cvar fps_max 0 // Forces the maximum amount of FP // Tickrate Fixes sm_cvar tick_door_speed 1.3 -// Slots (This prevents constant resetting of sv_maxplayers on map change) -sm_cvar mv_maxplayers 30 +// Slots // slots_vote.smx takes care of resetting back to set bellow values +sm_cvar sv_maxplayers 30 +sm_cvar sv_visiblemaxplayers 30 // Some tweaking sm_cvar mp_autoteambalance 0 // Prevents some shuffling. @@ -82,8 +83,8 @@ sm_cvar sv_forcepreload 1 // Pre-loading is always a good th sm_cvar sv_client_predict 1 // This is already set on clients, but force them to predict. sm_cvar sv_client_cmdrate_difference 0 // Remove the clamp. sm_cvar sv_max_queries_sec_global 10 -sm_cvar sv_max_queries_sec 3 +sm_cvar sv_max_queries_sec 3 sm_cvar sv_max_queries_window 10 -sm_cvar sv_player_stuck_tolerance 5 +sm_cvar sv_player_stuck_tolerance 5 sm_cvar sv_stats 0 // Don't need these. sm_cvar sv_clockcorrection_msecs 25 // This one makes laggy players have less of an advantage regarding hitbox (as the server normally compensates for 60msec, lowering it below 15 will make some players appear stuttery) \ No newline at end of file From 12e75b317bbd95527eb0ac6b1a1165d06e7c4383 Mon Sep 17 00:00:00 2001 From: nikita1824 Date: Sun, 21 Jan 2024 16:06:25 +0500 Subject: [PATCH 11/11] Update match_vote.smx Recompile match_vote (Did I forget to update it?) --- addons/sourcemod/plugins/match_vote.smx | Bin 11161 -> 11161 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/addons/sourcemod/plugins/match_vote.smx b/addons/sourcemod/plugins/match_vote.smx index 3299531f4cdf08663796d2fe4631743f4dff32aa..722a389b9f5d27970b560bca18d198ed1e87ad48 100644 GIT binary patch delta 7715 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