diff --git a/README.md b/README.md index 8dda62e28..b6c08e3e0 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This is mainly a project that focuses on reworking the very outdated platform fo It will contain both much needed fixes that are simply unable to be implemented on the older sourcemod versions as well as incompatible and outdated files being updated to working versions. > **Included Matchmodes:** -* **Zonemod 2.8.4** +* **Zonemod 2.8.7** * **Zonemod Hunters** * **Zonemod Retro** * **NeoMod 0.4a** diff --git a/addons/sourcemod/configs/matchmodes.txt b/addons/sourcemod/configs/matchmodes.txt index 18cd07c37..be2a4dcf9 100644 --- a/addons/sourcemod/configs/matchmodes.txt +++ b/addons/sourcemod/configs/matchmodes.txt @@ -27,11 +27,11 @@ { "zonemod" { - "name" "ZoneMod 2.8.6" + "name" "ZoneMod 2.8.7" } "zoneretro" { - "name" "ZoneMod Retro 2.8.6" + "name" "ZoneMod Retro 2.8.7" } "zm3v3" { @@ -132,7 +132,7 @@ { "zonehunters" { - "name" "ZoneHunters 2.8.6" + "name" "ZoneHunters 2.8.7" } "zh3v3" { diff --git a/addons/sourcemod/gamedata/l4d_fix_common_shove.txt b/addons/sourcemod/gamedata/l4d_fix_common_shove.txt new file mode 100644 index 000000000..409f2b509 --- /dev/null +++ b/addons/sourcemod/gamedata/l4d_fix_common_shove.txt @@ -0,0 +1,48 @@ +"Games" +{ + "left4dead" + { + "Offsets" + { + "Infected::m_body" + { + "linux" "3472" + "windows" "3452" + } + } + + "Signatures" + { + "ZombieBotBody::SetDesiredPosture" + { + "library" "server" + "linux" "@_ZN13ZombieBotBody17SetDesiredPostureEN5IBody11PostureTypeE" + "windows" "\x83\x2A\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x8B\x2A\xE8\x2A\x2A\x2A\x2A\x83\x2A\x2A\x8B" + /* 83 ? ? ? ? 8B ? ? ? ? 8B ? E8 ? ? ? ? 83 ? ? 8B */ + } + } + } + + "left4dead2" + { + "Offsets" + { + "Infected::m_body" + { + "linux" "7328" + "windows" "7332" + } + } + + "Signatures" + { + "ZombieBotBody::SetDesiredPosture" + { + "library" "server" + "linux" "@_ZN13ZombieBotBody17SetDesiredPostureEN5IBody11PostureTypeE" + "windows" "\x55\x8B\x2A\x83\x2A\x2A\x2A\x8B\x2A\x2A\x2A\x2A\x8B\x2A\xE8\x2A\x2A\x2A\x2A\x8B\x2A\x8B\x2A\x83\x2A\x2A\x74" + /* 55 8B ? 83 ? ? ? 8B ? ? ? ? 8B ? E8 ? ? ? ? 8B ? 8B ? 83 ? ? 74 */ + } + } + } +} \ No newline at end of file diff --git a/addons/sourcemod/plugins/fixes/l4d_fix_common_shove.smx b/addons/sourcemod/plugins/fixes/l4d_fix_common_shove.smx new file mode 100644 index 000000000..887c4e5f2 Binary files /dev/null and b/addons/sourcemod/plugins/fixes/l4d_fix_common_shove.smx differ diff --git a/addons/sourcemod/plugins/optional/l4d2_godframes_control_merge.smx b/addons/sourcemod/plugins/optional/l4d2_godframes_control_merge.smx index a4219d238..d583b2272 100644 Binary files a/addons/sourcemod/plugins/optional/l4d2_godframes_control_merge.smx and b/addons/sourcemod/plugins/optional/l4d2_godframes_control_merge.smx differ diff --git a/addons/sourcemod/scripting/l4d2_godframes_control_merge.sp b/addons/sourcemod/scripting/l4d2_godframes_control_merge.sp index af61d1332..356ad6d8f 100644 --- a/addons/sourcemod/scripting/l4d2_godframes_control_merge.sp +++ b/addons/sourcemod/scripting/l4d2_godframes_control_merge.sp @@ -52,6 +52,8 @@ ConVar g_hSmoker = null, g_hJockey = null, g_hCharger = null, + g_hChargerStagger = null, + g_hChargerFlags = null, g_hSpitFlags = null, g_hCommonFlags = null, g_hGodframeGlows = null, @@ -92,7 +94,11 @@ bool //fake godframes float - g_fFakeGodframeEnd[MAXPLAYERS + 1] = {0.0, ...}; + g_fFakeGodframeEnd[MAXPLAYERS + 1] = {0.0, ...}, + g_fFakeChargeGodframeEnd[MAXPLAYERS + 1] = {0.0, ...}; + +Handle + g_hTimer[MAXPLAYERS + 1] = {null, ...}; int g_iLastSI[MAXPLAYERS + 1] = {0, ...}, @@ -118,8 +124,8 @@ public APLRes AskPluginLoad2(Handle hMyself, bool bLate, char[] sError, int iErr public Plugin myinfo = { name = "L4D2 Godframes Control combined with FF Plugins", - author = "Stabby, CircleSquared, Tabun, Visor, dcx, Sir, Spoon, A1m`", - version = "0.6.8", + author = "Stabby, CircleSquared, Tabun, Visor, dcx, Sir, Spoon, A1m`, Sir", + version = "0.6.9", description = "Allows for control of what gets godframed and what doesnt along with integrated FF Support from l4d2_survivor_ff (by dcx and Visor) and l4d2_shotgun_ff (by Visor)" }; @@ -138,6 +144,8 @@ public void OnPluginStart() g_hJockey = CreateConVar("gfc_jockey_duration", "0.0", "How long should godframes after a ride last?", _, true, 0.0, true, 3.0); g_hSmoker = CreateConVar("gfc_smoker_duration", "0.0", "How long should godframes after a pull or choke last?", _, true, 0.0, true, 3.0); g_hCharger = CreateConVar("gfc_charger_duration", "2.1", "How long should godframes after a pummel last?", _, true, 0.0, true, 3.0); + g_hChargerStagger = CreateConVar("gfc_charger_stagger_extra_time", "0.0", "Additional godframe time before damage from ChargerFlags is allowed.", _, true, 0.0, true, 3.0); + g_hChargerFlags = CreateConVar("gfc_charger_stagger_flags", "0", "What will be affected by extra charger stagger protection time. 1 - Common. 2 - Spit.", _, true, 0.0, true, 3.0); g_hSpitFlags = CreateConVar("gfc_spit_zc_flags", "6", "Which classes will be affected by extra spit protection time. 1 - Hunter. 2 - Smoker. 4 - Jockey. 8 - Charger.", _, true, 0.0, true, 15.0); g_hCommonFlags= CreateConVar("gfc_common_zc_flags", "0", "Which classes will be affected by extra common protection time. 1 - Hunter. 2 - Smoker. 4 - Jockey. 8 - Charger.", _, true, 0.0, true, 15.0); @@ -172,6 +180,10 @@ public void OnPluginStart() HookEvent("pounce_end", PostSurvivorRelease); HookEvent("jockey_ride_end", PostSurvivorRelease); HookEvent("charger_pummel_end", PostSurvivorRelease); + + //Pass over stuff on passover to and from bots + HookEvent("bot_player_replace", Event_Replaced); + HookEvent("player_bot_replace", Event_Replaced); HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy); @@ -203,7 +215,9 @@ public void Event_RoundStart(Event hEvent, const char[] sEventName, bool bDontBr { for (int i = 1; i <= MaxClients; i++) { //clear both fake and real just because g_fFakeGodframeEnd[i] = 0.0; + g_fFakeChargeGodframeEnd[i] = 0.0; g_bBuckshot[i] = false; + if (g_hTimer[i] != null) delete g_hTimer[i]; } } @@ -232,15 +246,41 @@ public void PostSurvivorRelease(Event hEvent, const char[] sEventName, bool bDon g_iLastSI[iVictim] = 8; } - if (g_fFakeGodframeEnd[iVictim] > fNow && g_hGodframeGlows.BoolValue) { - // make player transparent/red while godframed - SetEntityRenderMode(iVictim, RENDER_GLOW); - SetEntityRenderColor(iVictim, 255, 0, 0, 200); - - CreateTimer(g_fFakeGodframeEnd[iVictim] - fNow, Timed_ResetGlow, iVictim, TIMER_FLAG_NO_MAPCHANGE); + SetGodFrameGlows(iVictim); +} + +public void L4D2_OnStagger_Post(int client, int source) +{ + // Charger Impact handling, source is always null. + if (IsValidSurvivor(client) && source == -1 && g_hChargerStagger.FloatValue > 0.0) + { + float fNow = GetGameTime(); + + // In case of multi-charger configs/modes. + if (g_fFakeChargeGodframeEnd[client] > fNow) + fNow = g_fFakeChargeGodframeEnd[client]; + + g_fFakeChargeGodframeEnd[client] = fNow += g_hChargerStagger.FloatValue; } } +public void Event_Replaced(Event hEvent, char[] name, bool dontBroadcast) +{ + bool bBotReplaced = (!strncmp(name, "b", 1)); + int replaced = bBotReplaced ? GetClientOfUserId(hEvent.GetInt("bot")) : GetClientOfUserId(hEvent.GetInt("player")); + int replacer = bBotReplaced ? GetClientOfUserId(hEvent.GetInt("player")) : GetClientOfUserId(hEvent.GetInt("bot")); + + g_fFakeGodframeEnd[replacer] = g_fFakeGodframeEnd[replaced]; + g_fFakeChargeGodframeEnd[replacer] = g_fFakeChargeGodframeEnd[replaced]; + g_iLastSI[replacer] = g_iLastSI[replaced]; + + // Use 500 IQ to re-create 'accurate' timer on the replacer. + if (g_hTimer[replaced] != null) delete g_hTimer[replaced]; + float fRemainingFakeGodFrames = g_fFakeGodframeEnd[replacer] - GetGameTime(); + if (fRemainingFakeGodFrames > 0.0) + SetGodFrameGlows(replacer); +} + public void OnClientPutInServer(int iClient) { SDKHook(iClient, SDKHook_OnTakeDamage, OnTakeDamage); @@ -296,12 +336,22 @@ public Action OnTakeDamage(int iVictim, int &iAttacker, int &iInflictor, float & float fTimeLeft = g_fFakeGodframeEnd[iVictim] - GetGameTime(); - if (StrEqual(sClassname, "infected") && (g_iLastSI[iVictim] & g_hCommonFlags.IntValue)){ //commons + if (StrEqual(sClassname, "infected") && (g_iLastSI[iVictim] & g_hCommonFlags.IntValue)) { //commons fTimeLeft += g_hCommon.FloatValue; + + if (1 & g_hChargerFlags.IntValue && fTimeLeft <= 0.0) { + float charginTime = g_fFakeChargeGodframeEnd[iVictim] - GetGameTime(); + fTimeLeft = charginTime > 0.0 ? charginTime : fTimeLeft; + } } if (StrEqual(sClassname, "insect_swarm") && (g_iLastSI[iVictim] & g_hSpitFlags.IntValue)) { //spit fTimeLeft += g_hSpit.FloatValue; + + if (2 & g_hChargerFlags.IntValue && fTimeLeft <= 0.0) { + float charginTime = g_fFakeChargeGodframeEnd[iVictim] - GetGameTime(); + fTimeLeft = charginTime > 0.0 ? charginTime : fTimeLeft; + } } if (IsValidSurvivor(iAttacker)) { //friendly fire @@ -977,13 +1027,23 @@ public int Native_GiveClientGodFrames(Handle hPlugin, int iNumParams) g_fFakeGodframeEnd[iClient] = fNow + fGodFrameTime; //godFrameTime g_iLastSI[iClient] = iAttackerClass; //attackerClass - if (g_fFakeGodframeEnd[iClient] > fNow && g_hGodframeGlows.BoolValue) { - // make player transparent/red while godframed - SetEntityRenderMode(iClient, RENDER_GLOW); - SetEntityRenderColor(iClient, 255, 0, 0, 200); - - CreateTimer(g_fFakeGodframeEnd[iClient] - fNow, Timed_ResetGlow, iClient, TIMER_FLAG_NO_MAPCHANGE); - } + SetGodFrameGlows(iClient); return 1; } + +void SetGodFrameGlows(int client) +{ + float fNow = GetGameTime(); + if (g_fFakeGodframeEnd[client] > fNow && g_hGodframeGlows.BoolValue) + { + // make player transparent/red while godframed + SetEntityRenderMode(client, RENDER_GLOW); + SetEntityRenderColor(client, 255, 0, 0, 200); + + if (g_hTimer[client] != null) + delete g_hTimer[client]; + + g_hTimer[client] = CreateTimer(g_fFakeGodframeEnd[client] - fNow, Timed_ResetGlow, client, TIMER_FLAG_NO_MAPCHANGE); + } +} \ No newline at end of file diff --git a/addons/sourcemod/scripting/l4d_fix_common_shove.sp b/addons/sourcemod/scripting/l4d_fix_common_shove.sp new file mode 100644 index 000000000..4bbd7bdc3 --- /dev/null +++ b/addons/sourcemod/scripting/l4d_fix_common_shove.sp @@ -0,0 +1,336 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include +#include +#include +#include +#include + +#define PLUGIN_VERSION "1.2" + +public Plugin myinfo = +{ + name = "[L4D & 2] Fix Common Shove", + author = "Forgetest", + description = "Fix commons being immune to shoves when crouching, falling and landing.", + version = PLUGIN_VERSION, + url = "https://github.com/Target5150/MoYu_Server_Stupid_Plugins", +} + +#define GAMEDATA_FILE "l4d_fix_common_shove" + +int g_iOffs_Infected__m_body; +Handle g_hCall_SetDesiredPosture; + +enum ActivityType +{ + MOTION_CONTROLLED_XY = 0x0001, // XY position and orientation of the bot is driven by the animation. + MOTION_CONTROLLED_Z = 0x0002, // Z position of the bot is driven by the animation. + ACTIVITY_UNINTERRUPTIBLE= 0x0004, // activity can't be changed until animation finishes + ACTIVITY_TRANSITORY = 0x0008, // a short animation that takes over from the underlying animation momentarily, resuming it upon completion + ENTINDEX_PLAYBACK_RATE = 0x0010, // played back at different rates based on entindex +}; + +enum PostureType +{ + STAND, + CROUCH, + SIT, + CRAWL, + LIE +}; + +methodmap IBody +{ + public void SetDesiredPosture(PostureType posture) { + SDKCall(g_hCall_SetDesiredPosture, this, posture); + } +} + +methodmap ZombieBotBody < IBody +{ + property int m_activity { + public get() { return LoadFromAddress(view_as
(this) + view_as
(80), NumberType_Int32); } + public set(int act) { StoreToAddress(view_as
(this) + view_as
(80), act, NumberType_Int32); } + } + + property ActivityType m_activityType { + public get() { return LoadFromAddress(view_as
(this) + view_as
(84), NumberType_Int32); } + public set(ActivityType flags) { StoreToAddress(view_as
(this) + view_as
(84), flags, NumberType_Int32); } + } +} + +enum +{ + SHOVE_CROUCHING = 1, + SHOVE_FALLING = (1 << 1), + SHOVE_LANDING = (1 << 2) +}; + +int g_iShoveFlag; + +enum PendingShoveState +{ + PendingShove_Invalid = 0, + PendingShove_Yes, + PendingShove_Callback, +}; + +enum struct PendingShoveInfo +{ + int key; + PendingShoveState state; + float direction_x; + float direction_y; + float direction_z; +} + +int __CompileKey(int entity) { + return EntIndexToEntRef(entity); +} + +methodmap PendingShoveStore < ArrayList +{ + public PendingShoveStore() { + return view_as(new ArrayList(sizeof(PendingShoveInfo) + 1)); + } + + public PendingShoveState GetState(int entity) { + PendingShoveState state; + int idx = this.FindValue(__CompileKey(entity), PendingShoveInfo::key); + if (idx != -1) + state = this.Get(idx, PendingShoveInfo::state); + return state; + } + + public void SetState(int entity, PendingShoveState state) { + int key = __CompileKey(entity); + int idx = this.FindValue(key, PendingShoveInfo::key); + if (idx == -1) + idx = this.Push(key); + this.Set(idx, state, PendingShoveInfo::state); + } + + public bool GetDirection(int entity, float direction[3]) { + int idx = this.FindValue(__CompileKey(entity), PendingShoveInfo::key); + if (idx != -1) { + direction[0] = this.Get(idx, PendingShoveInfo::direction_x); + direction[1] = this.Get(idx, PendingShoveInfo::direction_y); + direction[2] = this.Get(idx, PendingShoveInfo::direction_z); + return true; + } + return false; + } + + public void SetDirection(int entity, const float direction[3]) { + int key = __CompileKey(entity); + int idx = this.FindValue(key, PendingShoveInfo::key); + if (idx == -1) + idx = this.Push(key); + this.Set(idx, direction[0], PendingShoveInfo::direction_x); + this.Set(idx, direction[1], PendingShoveInfo::direction_y); + this.Set(idx, direction[2], PendingShoveInfo::direction_z); + } + + public bool Delete(int entity) { + int idx = this.FindValue(__CompileKey(entity), PendingShoveInfo::key); + if (idx != -1) { + this.Erase(idx); + return true; + } + return false; + } +} +PendingShoveStore g_PendingShoveStore; + +public void OnPluginStart() +{ + GameData gd = new GameData(GAMEDATA_FILE); + if (!gd) + SetFailState("Missing gamedata \""...GAMEDATA_FILE..."\""); + + StartPrepSDKCall(SDKCall_Raw); + if (!PrepSDKCall_SetFromConf(gd, SDKConf_Signature, "ZombieBotBody::SetDesiredPosture")) + SetFailState("Missing signature \"ZombieBotBody::SetDesiredPosture\""); + PrepSDKCall_AddParameter(SDKType_PlainOldData, SDKPass_Plain); + g_hCall_SetDesiredPosture = EndPrepSDKCall(); + + g_iOffs_Infected__m_body = gd.GetOffset("Infected::m_body"); + if (g_iOffs_Infected__m_body == -1) + SetFailState("Missing offset \"Infected::m_body\""); + + delete gd; + + g_PendingShoveStore = new PendingShoveStore(); + + CreateConVarHook("l4d_common_shove_flag", + "7", + "Flag for fixing common shove.\n" + ... "1 = Crouch, 2 = Falling, 4 = Landing", + FCVAR_CHEAT, + true, 0.0, true, 7.0, + CvarChg_ShoveFlag); +} + +void CvarChg_ShoveFlag(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_iShoveFlag = convar.IntValue; +} + +public void OnMapStart() +{ + g_PendingShoveStore.Clear(); +} + +public void OnEntityDestroyed(int entity) +{ + if (IsInfected(entity)) + g_PendingShoveStore.Delete(entity); +} + +public void OnActionCreated(BehaviorAction action, int actor, const char[] name) +{ + if (name[0] == 'I' && strcmp(name, "InfectedShoved") == 0) + { + action.OnStart = InfectedShoved_OnStart; + action.OnShoved = InfectedShoved_OnShoved; + action.OnLandOnGroundPost = InfectedShoved_OnLandOnGroundPost; + } +} + +Action InfectedShoved_OnStart(BehaviorAction action, int actor, any priorAction, ActionResult result) +{ + if (GetEntPropEnt(actor, Prop_Data, "m_hGroundEntity") == -1) // falling check + { + if (g_iShoveFlag & SHOVE_FALLING) + { + result.type = CONTINUE; // do not exit + + g_PendingShoveStore.SetState(actor, PendingShove_Yes); // for later use in "InfectedShoved_OnLandOnGroundPost" + + float direction[3], pos[3]; + direction[0] = action.Get(56, NumberType_Int32); + direction[1] = action.Get(60, NumberType_Int32); + direction[2] = action.Get(64, NumberType_Int32); + GetEntPropVector(actor, Prop_Data, "m_vecAbsOrigin", pos); + SubtractVectors(direction, pos, direction); + + g_PendingShoveStore.SetDirection(actor, direction); + + // almost certain that shove does nothing at the moment, just skip it + return Plugin_Handled; + } + + return Plugin_Continue; + } + + if (g_iShoveFlag & SHOVE_CROUCHING) + { + Infected__GetBodyInterface(actor).SetDesiredPosture(STAND); // force standing to activate shoves + } + + if (g_iShoveFlag & SHOVE_LANDING + || (g_iShoveFlag & SHOVE_FALLING && g_PendingShoveStore.GetState(actor) == PendingShove_Callback)) + { + ForceActivityInterruptible(actor); // if they happen to land on ground at the time, override + } + + if (g_PendingShoveStore.GetState(actor) == PendingShove_Callback) + { + float direction[3], pos[3]; + g_PendingShoveStore.GetDirection(actor, direction); + GetEntPropVector(actor, Prop_Data, "m_vecAbsOrigin", pos); + AddVectors(pos, direction, pos); + + action.Set(56, pos[0], NumberType_Int32); + action.Set(60, pos[1], NumberType_Int32); + action.Set(64, pos[2], NumberType_Int32); + + g_PendingShoveStore.Delete(actor); + } + + return Plugin_Continue; +} + +Action InfectedShoved_OnShoved(BehaviorAction action, int actor, int entity, ActionDesiredResult result) +{ + if (GetEntPropEnt(actor, Prop_Data, "m_hGroundEntity") != -1) // falling check + { + if (g_iShoveFlag & SHOVE_CROUCHING) + { + Infected__GetBodyInterface(actor).SetDesiredPosture(STAND); // force standing to activate shoves + } + } + + return Plugin_Continue; +} + +Action InfectedShoved_OnLandOnGroundPost(BehaviorAction action, int actor, int entity, ActionDesiredResult result) +{ + if (~g_iShoveFlag & SHOVE_FALLING || g_PendingShoveStore.GetState(actor) != PendingShove_Yes) + return Plugin_Continue; + + action.IsStarted = false; // trick the action into calling OnStart as if actor get shoved this frame + g_PendingShoveStore.SetState(actor, PendingShove_Callback); + + ForceActivityInterruptible(actor); // if they happen to land on ground at the time, override + + return Plugin_Handled; +} + +bool ForceActivityInterruptible(int infected) +{ + ZombieBotBody body = Infected__GetBodyInterface(infected); + + switch (body.m_activity) // perhaps unnecessary + { + case L4D2_ACT_TERROR_JUMP_LANDING, + L4D2_ACT_TERROR_JUMP_LANDING_HARD, + L4D2_ACT_TERROR_JUMP_LANDING_NEUTRAL, + L4D2_ACT_TERROR_JUMP_LANDING_HARD_NEUTRAL: + { + body.m_activityType &= ~ACTIVITY_UNINTERRUPTIBLE; + return true; + } + } + + return false; +} + +ZombieBotBody Infected__GetBodyInterface(int infected) +{ + return view_as(GetEntData(infected, g_iOffs_Infected__m_body, 4)); +} + +stock bool IsInfected(int entity) +{ + if (entity > MaxClients && IsValidEdict(entity)) + { + char cls[64]; + GetEdictClassname(entity, cls, sizeof(cls)); + return strcmp(cls, "infected") == 0; + } + return false; +} + +ConVar CreateConVarHook(const char[] name, + const char[] defaultValue, + const char[] description="", + int flags=0, + bool hasMin=false, float min=0.0, + bool hasMax=false, float max=0.0, + ConVarChanged callback) +{ + ConVar cv = CreateConVar(name, defaultValue, description, flags, hasMin, min, hasMax, max); + + Call_StartFunction(INVALID_HANDLE, callback); + Call_PushCell(cv); + Call_PushNullString(); + Call_PushNullString(); + Call_Finish(); + + cv.AddChangeHook(callback); + + return cv; +} \ No newline at end of file diff --git a/cfg/cfgogl/zh1v1/confogl.cfg b/cfg/cfgogl/zh1v1/confogl.cfg index 6a251c095..68faabe3f 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.6" +l4d_ready_cfg_name "1v1 [Zone]Hunters v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zh2v2/confogl.cfg b/cfg/cfgogl/zh2v2/confogl.cfg index 929d305d1..09dafc53c 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.6" +l4d_ready_cfg_name "2v2 [Zone]Hunters v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zh3v3/confogl.cfg b/cfg/cfgogl/zh3v3/confogl.cfg index d831afcd1..1ff85df5c 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.6" +l4d_ready_cfg_name "3v3 [Zone]Hunters v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zm1v1/confogl.cfg b/cfg/cfgogl/zm1v1/confogl.cfg index fbaaab997..919f01c72 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.6" +l4d_ready_cfg_name "1v1 Zonemod v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zm2v2/confogl.cfg b/cfg/cfgogl/zm2v2/confogl.cfg index 93be1eb0f..e482846cb 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.6" +l4d_ready_cfg_name "2v2 Zonemod v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zm3v3/confogl.cfg b/cfg/cfgogl/zm3v3/confogl.cfg index 12d1e3d12..81117eb55 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.6" +l4d_ready_cfg_name "3v3 Zonemod v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zonehunters/confogl.cfg b/cfg/cfgogl/zonehunters/confogl.cfg index ef1187831..f03da2b97 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.6" +l4d_ready_cfg_name "[Zone]Hunters v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/cfgogl/zonemod/confogl.cfg b/cfg/cfgogl/zonemod/confogl.cfg index f930a6637..67e4efa4d 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.6" +l4d_ready_cfg_name "ZoneMod v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. @@ -17,8 +17,8 @@ confogl_addcvar confogl_pills_limit 2 // Limits the number of pain pills on each // ZoneMod 4v4 Cvars confogl_addcvar z_common_limit 30 -confogl_addcvar z_ghost_delay_min 15 -confogl_addcvar z_ghost_delay_max 15 +confogl_addcvar z_ghost_delay_min 16 +confogl_addcvar z_ghost_delay_max 16 confogl_addcvar z_mega_mob_size 50 confogl_addcvar z_mob_spawn_min_size 15 confogl_addcvar z_mob_spawn_max_size 15 diff --git a/cfg/cfgogl/zonemod/shared_plugins.cfg b/cfg/cfgogl/zonemod/shared_plugins.cfg index b793c1c2f..b0068a43a 100644 --- a/cfg/cfgogl/zonemod/shared_plugins.cfg +++ b/cfg/cfgogl/zonemod/shared_plugins.cfg @@ -137,6 +137,7 @@ 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 diff --git a/cfg/cfgogl/zonemod/shared_settings.cfg b/cfg/cfgogl/zonemod/shared_settings.cfg index 2b51f5c54..04b26f575 100644 --- a/cfg/cfgogl/zonemod/shared_settings.cfg +++ b/cfg/cfgogl/zonemod/shared_settings.cfg @@ -74,6 +74,9 @@ confogl_addcvar infected_fire_immunity 3 // [l4d2_nosecondchances.smx] confogl_addcvar bot_kick_delay 0 +// [l4d2_magnum_incap.smx] +confogl_addcvar l4d2_replace_magnum_incap 2 + // [l4d2_saferoom_item_remove.smx] confogl_addcvar sm_safeitemkill_saferooms 3 confogl_addcvar sm_safeitemkill_items 13 @@ -160,6 +163,8 @@ confogl_addcvar gfc_jockey_duration 0 confogl_addcvar gfc_smoker_duration 0 confogl_addcvar gfc_charger_duration 2.1 // frames: 85, fps 30, length: 2.833 confogl_addcvar gfc_long_charger_duration 3.1 // wall-slam: 3.867, ground-slam: 3.967 +confogl_addcvar gfc_charger_stagger_extra_time 0.5 +confogl_addcvar gfc_charger_stagger_flags 2 confogl_addcvar gfc_common_zc_flags 9 confogl_addcvar gfc_spit_zc_flags 6 confogl_addcvar gfc_godframe_glows 1 @@ -318,12 +323,6 @@ sm_weapon pumpshotgun bullets 16 sm_weapon pumpshotgun scatterpitch 3 sm_weapon pumpshotgun scatteryaw 5 -///////////////////////////////// -// [Deagle Tweaks 'n Stuff] // -///////////////////////////////// -sm_weapon pistol_magnum damage 70 -sm_weapon pistol_magnum clipsize 6 - /////////////////// // [Boss tweaks] // /////////////////// diff --git a/cfg/cfgogl/zoneretro/confogl.cfg b/cfg/cfgogl/zoneretro/confogl.cfg index cee781555..4862fefe9 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.6" +l4d_ready_cfg_name "ZoneMod Retro v2.8.7" // Confogl Cvars confogl_addcvar mp_gamemode "versus" // Force Versus for the config. diff --git a/cfg/generalfixes.cfg b/cfg/generalfixes.cfg index 9057db785..e060f3c50 100644 --- a/cfg/generalfixes.cfg +++ b/cfg/generalfixes.cfg @@ -61,6 +61,7 @@ sm plugins load fixes/l4d_tongue_float_fix.smx sm plugins load fixes/l4d2_sg552_zoom_fix.smx sm plugins load fixes/l4d2_changelevel.smx sm plugins load fixes/weapon_spawn_duplicate_fix.smx +sm plugins load fixes/l4d_fix_common_shove.smx // Anti-Cheat. sm plugins load anticheat/l4d2_noghostcheat.smx