AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Plugins (https://forums.alliedmods.net/forumdisplay.php?f=108)
-   -   [L4D & L4D2] Left 4 DHooks Direct (1.150) [06-May-2024] (https://forums.alliedmods.net/showthread.php?t=321696)

Silvers 02-24-2020 01:00

[L4D & L4D2] Left 4 DHooks Direct (1.150) [06-May-2024]
 
172 Attachment(s)
About:

Originally two Extensions [L4D1] Left 4 Downtown created by "Downtown1" and [L4D2] Left 4 Downtown 2 by "ProdigySim" and maintained by various others, this is an all-in-one port to DHooks with many additions.

This also merges natives from L4D2_Direct by "ProdigySim" and L4D_Direct port by "raziEiL".

Since version 1.73 many stocks were added. From "l4d_stocks" include file by "Mr. Zero" and "lux_library" include file by "Lux".

Also created natives from the "l4d2addresses.txt" gamedata by "AtomicStryker" and who?

I done this to learn some stuff, add missing natives and forwards to L4D1 and add more features. Also because the extensions are often broken with SourceMod updates and confusing to find the latest gamedata or working version.

Thanks to Lux and a conversation we had: using the plugin iterator and GetFunctionByName to detect which forwards are being used by plugins. This will only detour functions being used by other plugins. Plugins are rescanned on map change.



Features:
  • Many new forwards and natives in L4D1 and L4D2.
  • Many stock functions added to the include files.
  • Additional features not present in the Extension versions.
  • Test plugin demonstrating animation hooks + all forwards and natives capabilities.

  • Addons Disabler included (L4D2 only).
  • The native L4D_LobbyUnreserve is NOW finally supported from version 1.16 and newer!
  • Dynamic detouring - only detours forwards required by other plugins. Rescans on map change.

  • Animation hooks to modify player animations.
  • View the left4dhooks.*.cfg files in the \addons\sourcemod\data\ folder for activity names and sequence numbers.
  • View the left4dhooks_anim.inc file in the \addons\sourcemod\scripting\include\ folder for activity constants for usage in plugin source code.

  • Natives to execute VScripts (L4D2 only) and retrieve return data.
  • Some natives as wrappers to VScript functions (L4D2 only).

  • Various target filters (used in commands for example "sm_slay @survivors"):
  • Spoiler



Bugs:
  • Forwards L4D2_OnSendInRescueVehicle and L4D2_OnUseHealingItems are blocked in Linux L4D1/L4D2 to prevent crashes. Waiting for DHooks update to support object returns.

  • Developers are tasked with ensuring they provide valid client and entity indexes when using Natives.
  • This is to prevent duplicating checks and additional overhead inside left4dhooks.

  • Reporting Bugs: State which game. Explain how to replicate the issue. Show the plugin or code or PM me if code is private.

  • Test Plugin: Shows usage of all forwards and natives. See the examples provided to understand what is possible.



Thanks:
  • Dr!fter and Peace-Maker - For the DHooks Dynamic Detour extension and various help.
  • Lux - Lots of technical support and ideas + figuring out why some detours were broken.
  • Lux - For the "lux_library.inc" include file.
  • Mr. Zero - For the "l4d_stocks.inc" include files.
  • Dragokas - Server and support testing in Linux for both games, and various stocks.
  • Spirit_12 - Various ideas and support. Suggesting to incorporate "l4d2_direct.inc".
  • xZk - Support testing and helping find a crash.
  • Nuki - Suggesting to incorporate "l4d2_addresses.txt".
  • Forgetest - Lots of fixes, additions, requests and suggestions.
  • Psyk0tik - Various signatures, requests and suggestions.
  • BHaType - Various offsets, requests and suggestions.
  • Marttt - Various plugins and testing.
  • A1m` - Various changes to the code.
  • Various people posting in this thread with reports.
  • Thanks to the following individuals for their contribution to the Extensions.
  • This plugin was made using source code from the following plugins:
Spoiler



Admin Commands: (requires "z" flag)
PHP Code:

// Lists the currently active forwards and the plugins using them.
sm_l4dd_detours or sm_l4dhooks_detours

// Reloads the detour hooks, enabling or disabling depending if they're required by other plugins.
// When adding or removing plugins that use any detours during gameplay. To optimize forwards by disabling unused or enabling required functions that were previously unused.
sm_l4dd_reload or sm_l4dhooks_reload

// Removes lobby reservation.
sm_l4dd_unreserve 



CVars:

Saved to left4dhooks.cfg in your servers \cfg\sourcemod\ folder.

PHP Code:

l4d2_addons_eclipse "-1" // L4D2 only. Addons Manager (-1: use addonconfig; 0: disable addons; 1: enable addons.
left4dhooks_version // Left 4 DHooks Direct plugin version. 




All Forwards, Natives and Stocks:
  • Assume everything is L4D1 and L4D2 compatible unless otherwise stated.
  • View the include files for detailed descriptions.
  • View the test plugin for usage demonstrations.

Forwards: (L4D1 = 142 & L4D2 = 215)
Spoiler


Natives: (L4D1 = 171 & L4D2 = 271)
Spoiler


Stocks: (L4D1 = 114 & L4D2 = 167)
Spoiler



Changes:
Code:

1.150 (06-May-2024)
    - L4D1 Linux: Removed some unused clone functions that were removed from the game update. Thanks to "Ja-Forces" and "Forgetest" for reporting.

    - Updated: Plugin.
    - Updated: "/gamedata/left4dhooks.l4d1.txt" GameData file.
    - Updated: "/scripting/l4dd/l4dd_forwards.sp" project file.

1.149 (06-May-2024)
    - Repackage of the last update to include the GameData changes, which it did not.

1.148 (05-May-2024)
    - Update to fix GameData changes on Linux due to the recent update in L4D1. Thanks to "Forgetest" for fixing.
    - Removed excess "functions" from the L4D1 temporary gamedata file, which were intended only for L4D2.

1.147 (30-Apr-2024)
    - Fixed the "L4D_CancelStagger" not working on Special Infected (hackish fix, the SDKCall does not appear to work). Thanks to "Forgetest" for a solution.
    - Changed "left4dhooks_silver.inc" include file to include the main "left4dhooks.inc" include, required by some functions. Thanks to "Forgetest" for reporting.
    - Moved bool block variables within the forwards to the top, preventing wrongly firing the "*PostHandled" forwards, in case of any error before being set to false.

1.146 (21-Apr-2024)
    - Fixed a memory leak from the Animation hooks system. Thanks to "HarryPotter" for reporting.
    - Fixed native "L4D_WriteMemoryString" buffer length. Thanks to "HarryPotter" for reporting.
    - Changed natives "L4D_Dissolve" and "L4D_TankRockPrj" to return -1 if the entity failed to be created. Thanks to "ReCreator" for reporting.

1.145 (03-Apr-2024)
    - Changed natives "L4D_IsPositionInFirstCheckpoint" and "L4D_IsPositionInLastCheckpoint" to scan for the nearest visible NavArea to prevent finding those outside saferooms, and accurately return true.
    - Fixed target filters that match specific Survivors not working for multiples of the same characters in L4D1. Thanks to "HarryPotter" for reporting.
    - Fixed native "L4D_IsCoopMode" in L4D2 reporting true for Realism mode. Thanks to "HarryPotter" for reporting.
    - Really fixed forward "L4D2_OnChooseVictim_Pre" throwing errors in L4D1 (for some reason the changes in gamedata did not carry over to release version).

1.144 (05-Mar-2024)
    - Added forwards: "L4D2_OnStartUseAction", "L4D2_OnStartUseAction_Post" and "L4D2_OnStartUseAction_PostHandled" to trigger on actions, see "L4D2UseAction" enum from "left4dhooks_stocks.inc" include file. Requested by "Machine".
    - Added native "L4D_IsTouchingTrigger" to detect if an entity is touching a trigger.
    - Added native "L4D_StopBeingRevived" to stop a player being revived from incapacitated state.
    - Fixed native "L4D_IsInLastCheckpoint" to check if a player is within the "info_changelevel" area of the last checkpoint. Thanks to "Shadowysn" for help pointing out some information to make it work accurately.
    - Fixed native "AnimHookDisable" not completely working under some circumstances. Thanks to "Forgetest" for finding and fixing.
    - Fixed forward "L4D2_OnChooseVictim_Pre" throwing errors in L4D1.

1.143 (25-Jan-2024)
    - Added examples for the"L4D_PipeBomb_Detonate*" forwards to the test plugin for differentiating PipeBomb and breakable prop (propane tank, oxygen tank etc) explosions.
    - Clarified forwards "L4D_PipeBomb_Detonate" notes within the include file for differentiating PipeBomb and breakable prop explosions. Thanks to "HarryPotter" for reporting.
    - Changed the Spitter Acid bug fix to play the sound from the victim, instead of from the acid source location. Thanks to "JustMadMan" for reporting.
    - Fixed forward "L4D_TankRock_OnRelease" from possibly given an invalid Tank owner index. Thanks to "Re:Creator" for reporting.
    - Fixed memory leak from clearing animation hook arrays. Thanks to "yongeni" for reporting and "HarryPotter" for fixing.

1.142 (12-Jan-2024)
    - Fixed the last update breaking on Linux servers. Thanks to "Hawkins" for reporting and testing.

1.141 (11-Jan-2024)
    - Added forwards "L4D_MolotovProjectile*", "L4D2_VomitJarProjectile*" and "L4D2_GrenadeLauncherProjectile*" to trigger when various grenade projectiles are created. Requested by "Kerouha".
    - Added forward "L4D2_OnChooseVictim_Pre" which shows the previously targeted entity. Requested by "Forgetest".
    - Added "AmmoDef" and "Ammo_t" methodmaps and natives for ammo definitions. Thanks to "Forgetest" for writing and providing.
    - Changed stock "L4D_IsPlayerStaggering" to be more accurate. Plugins using this stock should be recompiled. Thanks to "HarryPotter" for updating.
    - Changed forward "L4D2_OnChooseVictim" when using return Plugin_Handled to block the function, bots will stand still only instead of targeting themselves and attacking while standing still.
    - Changed natives "L4D_PipeBombPrj", "L4D2_VomitJarPrj", "L4D_MolotovPrj", "L4D2_GrenadeLauncherPrj", "L4D2_SpitterPrj" and "L4D_TankRockPrj" to allow specifying the velocity and rotation. Thanks to "Forgetest" for changing.

1.140 (03-Dec-2023)
    - Added forwards "L4D_OnIncapacitated", "L4D_OnIncapacitated_Post" and "L4D_OnIncapacitated_PostHandled" to trigger when a Survivor is incapacitated. Requested by "HarryPotter".
    - Fixed forwards "L4D2_OnPounceOrLeapStumble*" in L4D1 from throwing errors. Thanks to "HarryPotter" for reporting.
    - Increased the Spitter Acid bug fix volume. Thanks to "Marttt" and "KadabraZz" for reporting.

1.139 (25-Oct-2023)
    - Added new attribute "L4D2IWA_WeaponType" for use with the "L4D2_GetIntWeaponAttribute" native. Thanks to "Forgetest" for providing.
    - Added new enum "WeaponType" for use with the "L4D2IWA_WeaponType" attribute. Thanks to "Forgetest" for providing.

    - Added forward "L4D_OnMotionControlledXY" which is called when staggering or other motion controlled animations. Requested by "Forgetest".
    - Added forward "L4D_OnDeathDroppedWeapons" to list weapon indexes dropped on player death. Requested by "Forgetest".
    - Added forwards "L4D2_GrenadeLauncher_Detonate", "L4D2_GrenadeLauncher_Detonate_Post" and "L4D2_GrenadeLauncher_Detonate_PostHandled" when a Grenade Launcher projectile detonates.

    - Added native "L4D_PrecacheParticle" to precache particle effects.
    - Added native "L4D_RemoveEntityDelay" to remove an entity after a specified amount of time.
    - Added native "L4D_WriteMemoryString" to write a string to a memory address.

    - Changed native "L4D_PipeBombPrj" to optionally create the PipeBomb fuse/light particles. Requested by "Eyal282".
    - Fixed native "L4D2_IsRealismMode" from returning values other than 0 and 1. Thanks to "Eyal282" for reporting.
    - Fixed forward "L4D2_OnFindScavengeItem*" to stop passing invalid entities. Thanks to "kochiurun119" for reporting.

1.138 (25-Sep-2023)
    - Fixed the "L4D2_CGasCan_EventKilled*" forwards not triggering when a gascan had not been picked up. Thanks to "Mystik Spiral" for reporting.

1.137 (23-Sep-2023)
    - Added forwards "L4D2_Infected_HitByVomitJar", "L4D2_Infected_HitByVomitJar_Post" and "L4D2_Infected_HitByVomitJar_PostHandled" to trigger when common infected are hit with a VomitJar. Requested by "Eyal282".
    - Incorporated the Spitter Acid no sound fix for when clients disconnected. Thanks to "Marttt" for reporting.
    - Now also flashes red like the game should when taking damage from this bugged entity. Thanks to "Marttt" for reporting.
    - Updated to the latest version of the "lux_library" include file. Thanks to "Lux" for reporting.

1.136 (05-Sep-2023)
    - Fixed the last update logging an error in L4D1. Thanks to "HarryPotter" for reporting.
    - Fixed forward "L4D_TankClaw_DoSwing_Post" having the wrong name and not activating. Thanks to "Forgetest" for reporting.

1.135 (18-Aug-2023)
    - Added a ton of natives for "PlayerAnimState" in L4D2 only. See the "methodmap PlayerAnimState" section of the "left4dhooks.inc" include file. Thanks to "Forgetest" for the code and "A1m`" for various stuff.
    - Added native "L4D_HasMapStarted" to check if game addresses have been loaded in OnMapStart. For use with some natives that require being called only after OnMapStart.
    - Added an example to the test plugin for use with "L4D_HasMapStarted" and natives that require waiting after OnMapStart. See the first OnMapStart section that is commented out.
    - Fixed forward "L4D2_OnPounceOrLeapStumble" detour to potentially fix rare random crashes. Thanks to "A1m`" and "Forgetest" for reporting.
    - Fixed stock "L4D2_SetEntityGlow" to use the newdecls. Thanks to "Dragokas" for reporting.
    - Fixed the test plugin examples for "L4D1_FirstAidKit_StartHealing" and "L4D2_BackpackItem_StartAction". Thanks to "Mystik Spiral" for reporting.

1.134 (10-Jul-2023)
    - Added "POINTER_SURVIVALMODE" enum for the "L4D_GetPointer" native to return the SurvivalMode pointer.
    - Added "L4D2CT_SurvivalSetupTimer" to the "L4D2CountdownTimer" enum for use with the "L4D2_CTimer*" natives.
    - Added stock "L4D_SetPlayerTempHealthFloat" to the "left4dhooks_stocks.inc" include file to set a players temporary health above 200 HP. Thanks to "Eyal282" for the code.
    - Added forwards "L4D_TankRock_BounceTouch", "L4D_TankRock_BounceTouch_Post" and "L4D_TankRock_BounceTouch_PostHandled" when a tank rock collides with something. Thanks to "Forgetest" for the code.
    - Added natives "L4D2_GetSurvivalStartTime" and "L4D2_SetSurvivalStartTime" to get and set the Survival start time. Requested by "Forgetest".
    - Added native "L4D2_SpawnAllScavengeItems" to spawn all Scavenge items. Thanks to "Eyal282" for some of the code and changes.
    - Added native "L4D2_Rematch" to restart a Versus game. Thanks to "Eyal282" for some of the code and changes.
    - Added native "L4D_EndVersusModeRound" to end the Versus round. Thanks to "Spirit_12" for some of the code and changes.
    - Fixed native "L4D2_Charger_StartCarryingVictim" removing teleporting and placement position bug. Thanks to "HarryPotter" for reporting.
    - Fixed L4D2 GameData offset for "L4D2_GetFirstSpawnClass" and "L4D2_SetFirstSpawnClass" natives. Thanks to "Forgetest" for reporting the new offset.
    - Errors about using natives before OnMapStart will now show the plugin causing it.

1.133 (19-Jun-2023)
    - Added details to some natives explaining they can only be used 1 frame after "OnMapStart" due to pointers being unavailable before. Thanks to "HarryPotter" for reporting.
    - Added an error log when certain natives are used before before "OnMapStart" instead of an ambiguous error about invalid offsets.
    - Added "POINTER_MISSIONINFO" enum for the "L4D_GetPointer" native to return the MissionInfo pointer.
    - Added native "L4D_FindUseEntity" to find a valid Use entity. This was added to find a valid target within the "L4D1_FirstAidKit_StartHealing" and "L4D2_BackpackItem_StartAction" pre hook forwards.
    - Added natives "L4D_ForceHunterVictim", "L4D_ForceSmokerVictim" and "L4D2_ForceJockeyVictim" to pin specific Special Infected on specific Survivors.
    - Added natives "L4D_Hunter_ReleaseVictim", "L4D_Smoker_ReleaseVictim" and "L4D2_Charger_EndCarry" to release pinned victims.
    - Changed forwards "L4D2_BackpackItem_StartAction", "L4D2_BackpackItem_StartAction_Post" and "L4D2_BackpackItem_StartAction_PostHandled" to include a weapon type param.
    - Changed native "L4D2_UseAdrenaline" adding an optional param to fire the related event. Also fixed max health to use the true value instead of hard coding to 100. Thanks to "Eyal282" for reporting.
    - Changed native "L4D_IsMissionFinalMap" adding an optional param to support custom maps with multiple finales to return true if the "env_outtro_stats" entity is detected but not technically the last map.
    - Changed native "L4D2_NavAreaBuildPath" to block being called before OnMapStart, to fix any related crashes while TheNavArea is not initialized. Thanks to "Mika Misori" for reporting.
    - Changed native "L4D_IsInLastCheckpoint" code, to prevent teleporting Survivors on some 3rd party maps. Thanks to "tRololo312312" for reporting.
    - Explanation: calling "TerrorNavMesh::GetLastCheckpoint" would otherwise teleport players to that finale position, for some reason.
    - Fixed native "L4D2Direct_GetSIClassDeathTimer" returning the timer for the wrong Special Infected and errors when checking Chargers. Thanks to "PencilMario" for reporting.

    - Updated "left4dhooks_lux_library" include file, fixing the "Terror_GetAdrenalineTime" stock to check for adrenaline being active. Thanks to "Lux" for changes and "Eyal282" for reporting.

1.132 (25-May-2023)
    - Added forwards "L4D1_FirstAidKit_StartHealing", "L4D1_FirstAidKit_StartHealing_Post" and "L4D1_FirstAidKit_StartHealing_PostHandled" to control first aid kit duration.
    - Added forwards "L4D2_BackpackItem_StartAction", "L4D2_BackpackItem_StartAction_Post" and "L4D2_BackpackItem_StartAction_PostHandled" to control first aid kit duration, defibrillator and other use durations.
    - Forwards requested by "Eyal282". Thanks to "Psyk0tik" for the detour functions and signatures.

    - Fixed various offsets from the from the 2.2.2.7 L4D2 update. Thanks to "sorallll" and "PaaNChaN" for reporting and "SirPlease" for updating.

1.131 (25-May-2023)
    - Fixed signatures broken from the 2.2.2.7 L4D2 update.
    - Thanks to "robex" and "XiLuo" for reporting changes.
    - Thanks to "A1m`" for updating various offsets.

    - Added stock "L4D_IsTankProp" in the "left4dhooks_silver.inc" file, to check if a prop can be hit by tanks. Thanks to "Eyal282" for adding.
    - Added forward "L4D2_OnChargerImpact" to trigger when a Charger impacts after charging. Requested by "Eyal282".
    - Added native "L4D_NavArea_IsConnected" to check if 2 areas are connected. Requested by "Eyal282".
    - Added native "L4D_GetNavAreaCenter" to get the center of a NavArea. Requested by "3ipKa".
    - Added native "L4D_SetPlayerSpawnTime" to set the spawn timer of a SI. Requested by "A1m`".

    - Fixed native "L4D_OnGameModeChange" in L4D2 returning 0 for realism. Thanks to "HarryPotter" for reporting.
    - Fixed forward "L4D2_CGasCan_EventKilled" not setting the correct modified values. Thanks to " 4NTEP xD " for reporting.

    - Fixed stocks "L4D2_GetWeaponUpgradeAmmoCount" and "L4D2_GetWeaponUpgrades" in the "left4dhooks_stocks" file, to return values other than 0 and 1. Thanks to "BHaType" for reporting.
    - Plugins using either of these stocks should be recompiled against the updated file.

    - Changes to the test plugin removing unnecessary lines printed to console when forwards trigger.

1.130 (01-May-2023)
    - Changed native "L4D2_NavAreaTravelDistance" to support L4D1. Thanks to "Eärendil" for reporting, and "Psyk0tik" for the signature.
    - Changed forward "L4D2_CGasCan_EventKilled" to an Action instead of Void forward to allow blocking detonation. Requested by "Mystik Spiral".
    - Added forwards "L4D2_CGasCan_EventKilled_Post" and "L4D2_CGasCan_EventKilled_PostHandled" to pair with the changed forward.
    - Added a check to validate the "CTerrorGameRules::GetMissionInfo" address. Thanks to "yezi" for reporting.

1.129 (31-Mar-2023)
    - Added native "L4D_WarpToValidPositionIfStuck" to teleport a stuck player. Requested by "ioioio".
    - Added forwards "L4D_OnTakeOverBot", "L4D_OnTakeOverBot_Post" and "L4D_OnTakeOverBot_PostHandled" that triggers when a client takes over a bot.
    - Updated "left4dhooks_lux_library" include file to version "0.5.7".

1.128 (06-Feb-2023)
    - Added forwards "L4D_OnDoAnimationEvent", "L4D_OnDoAnimationEvent_Post" and "L4D_OnDoAnimationEvent_PostHandled" to trigger on certain animation events. Requested by "Forgetest".
    - Added native "L4D_GetAllNavAreas" to return an ArrayList of all "TheNavAreas" addresses. Requested by "Marttt". Thanks to "HarryPotter" and "Forgetest" for help.
    - Added natives "L4D_GetNavAreaPos" and "L4D_GetNavAreaSize" to return the origin and size of a NavArea.
    - Added natives "L4D_GetNavAreaID" and "L4D_GetNavAreaByID" to return the ID from a NavArea address, and an address from a NavArea ID.
    - Added natives "L4D2_GetFirstSpawnClass" and "L4D2_SetFirstSpawnClass" to get and set the first Special Infected class that will spawn. L4D2 only. Thanks to "Forgetest" providing.
    - Added more stocks to the "left4dhooks_silver.inc" include file. Thanks to "knifeeeee" for providing.
    - Added enum "POINTER_THENAVAREAS" for the "L4D_GetPointer" native to return the "TheNavAreas" pointer.
    - Added enum list "PLAYERANIMEVENT_*" used by the "L4D2Direct_DoAnimationEvent" native and "L4D_OnDoAnimationEvent*" forwards. Thanks to "A1m`" for providing.
    - Changed native "L4D2Direct_DoAnimationEvent" to expose the variant param. Requested by "Forgetest".
    - Fixed natives "L4D_IsInFirstCheckpoint" and "L4D_IsPositionInFirstCheckpoint" sometimes incorrectly reporting false positives. Thanks to "Voevoda" for reporting.
    - Fixed forward "L4D2_OnEntityShoved_Post*" param "bIsHighPounce" to be more reliable, although it may still not report accurately. Thanks to "Forgetest" for changes.
    - Fixed forwards "L4D_OnSpawnSpecial_*", "L4D2_OnSpawnWitchBride_*" and "L4D_OnSpawnTank_Post*" to allow returning -1 as client index. Thanks to "Forgetest" for reporting.
    - Prevented forwards "L4D_OnTryOfferingTankBot*" from triggering when the client index was 0. Thanks to "Forgetest" for reporting.

1.127 (07-Jan-2023)
    - Added more Charger stocks to the "left4dhooks_silver.inc" include file. Thanks to "Forgetest" for providing.
    - Added some more "L4D2UseAction" enum values to the "left4dhooks_stocks.inc" include file. Thanks to "Marttt" for reporting.
    - Changed natives "L4D_IsPositionIn*" to use a wider search area to the nearest NavArea position, from 300.0 to 1000.0. Suggested by "ProjectSky".
    - Added missing post handled forwards to the include file. Thanks to "Forgetest" for reporting.
        - "L4D_OnStartMeleeSwing_PostHandled", "L4D2_OnChangeFinaleStage_PostHandled", "L4D2_CGasCan_ShouldStartAction_PostHandled",
        - "L4D2_OnHitByVomitJar_PostHandled", "L4D2_CGasCan_ActionComplete_PostHandled", "L4D2_OnJockeyRide_PostHandled" and "L4D2_OnStartCarryingVictim_PostHandled".
    - Added forward "L4D2_OnSlammedSurvivor_PostHandled" when the pre hook is being blocked. Requested by "Forgetest".
    - Changed forward "L4D2_OnSlammedSurvivor" to allow blocking the forward.
    - Changed forward "L4D_OnFatalFalling" to return client index 0 when the client is not available.
    - Fixed forward "L4D_OnFatalFalling" throwing errors when client index is 0. Thanks to "Beatles" for reporting.
    - Fixed forwards "L4D_TankRock_OnRelease" and "L4D_TankRock_OnRelease_Post" crashing on L4D1 Linux not giving a vecAng. Thanks to "Forgetest" for fixing.
    - Deprecated native: "L4D2_AreTeamsFlipped" in favor of using: GameRules_GetProp("m_bAreTeamsFlipped"); - Suggested by "A1m`".

1.126 (21-Dec-2022)
    - Added weapon attribute "L4D2IWA_DefaultSize" for the "L4D2_GetIntWeaponAttribute" and "L4D2_SetIntWeaponAttribute" natives to get a weapons default clip size. Thanks to "iaNanaNana" for adding.
    - Added natives "L4D_IsPositionInFirstCheckpoint" and "L4D_IsPositionInLastCheckpoint" to check if a given vector is within a checkpoint area. Thanks to "Forgetest" for the code.
    - Added native "L4D_GetEntityWorldSpaceCenter" to get an entities worldspace center. Requested by "A1m`".
    - Added forwards "L4D_OnCancelStagger", "L4D_OnCancelStagger_Post" and "L4D_OnCancelStagger_PostHandled" to notify when a players stagger is being cancelled. Requested by "Forgetest".
    - Fixed native "L4D_IsInLastCheckpoint" teleporting players in the finale. Thanks to "HarryPotter" for reporting.
    - L4D1: Fixed forward "L4D_OnReleaseSurvivorPositions" crashing Windows servers by fixing the GameData signature.

    - Changed natives: "L4D2Direct_GetNextShoveTime" and "L4D2Direct_SetNextShoveTime" method. Please report any issues.
    - Deprecated natives: "L4D2Direct_GetShovePenalty" and "L4D2Direct_SetShovePenalty" in favor of using the "m_iShovePenalty" Prop_Send GetEntProp/SetEntProp natives.

1.125 (07-Dec-2022)
    - Fixed update 1.124 breaking "L4D2_OnEndVersusModeRound". Thanks to "Forgetest" for reporting.
    - Fixed update 1.124 errors on Windows L4D1. Thanks to "HarryPotter" for reporting.
    - Fixed native "L4D_SetBecomeGhostAt" not working on Windows L4D1.

1.124 (07-Dec-2022)
    - Fixed natives "L4D2_SetIntMeleeAttribute" and "L4D2_GetIntMeleeAttribute" using Int32 instead of Int16. Thanks to "NoroHime" for reporting.
    - Fixed natives "L4D_IsInFirstCheckpoint" and "L4D_IsInLastCheckpoint" to use SDKCalls for accuracy instead of events. Thanks to "BHaType" for reporting.
    - Changed native "L4D_IsAnySurvivorInStartArea" to also use the "L4D_IsInFirstCheckpoint" method, since it often incorrectly reported false.

1.123 (03-Dec-2022)
    - Added native "L4D_SetBecomeGhostAt" to set when a dead Special Infected player will transition into ghost state. Requested by "sorallll".
    - L4D2: Fixed native "L4D_GetPlayerSpawnTime" on Windows reporting the wrong value.

1.122 (15-Nov-2022)
    - Added native "Left4DHooks_Version" to get the Left4DHooks plugin version.
    - Fixed native "L4D2_SpitterPrj" not playing any acid damage sounds if the attacker index was 0.
    - Fixed forwards "L4D_OnGetCrouchTopSpeed", "L4D_OnGetWalkTopSpeed" and "L4D_OnGetRunTopSpeed" from throwing client not in game errors. Thanks to "Eärendil" for reporting.

1.121 (06-Nov-2022)
    - Added native "L4D_AreAllSurvivorsInFinaleArea". Requested by "Eärendil".
    - Fixed native "L4D2_SpitterPrj" to not emit duplicate sounds from regular Spitter projectiles and playback at about the same volume as default.
    - L4D2: Added forwards "L4D2_OnSlammedSurvivor" and "L4D2_OnSlammedSurvivor_Post" when a Survivor is carried by a Charger and slammed into a wall. Thanks to "Forgetest" for adding.
    - L4D2: Added stocks "L4D2_GetQueuedPummelStartTime", "L4D2_IsInQueuedPummel", "L4D2_GetQueuedPummelAttacker" and "L4D2_GetQueuedPummelVictim" to the "left4dhooks_silver.inc" include file.
    - L4D1: Fixed trying to load the "IsVisibleToPlayer" signature. Thanks to "HarryPotter" for reporting.
    - Fixed stocks "IsUsingMinigun" and "StopUsingMinigun" throwing errors from the "left4dhooks_silver.inc" include file. Plugins must recompile to fix this error. Thanks to "HarryPotter" for reporting.

1.120 (20-Oct-2022)
    - Update for L4D2.

    - Added native "L4D2_CommandABot" to command a bots actions.
    - Added native "L4D2_GetScriptScope" to get an entities script ID. Thanks to "Forgetest" for help.
    - Added native "L4D2_GetVScriptEntity" to get a VScript "logic_script" entity index.
    - Added native "L4D2_IsVisibleToPlayer" to get a VScript "logic_script" entity index. Requested by "morzlee", thanks to "fdxx" and "Psyk0tik" for the code and gamedata.
    - Fixed native "ITimer_GetTimestamp" using the wrong stock and returning the wrong values. Thanks to "Forgetest" for reporting.
    - L4D2: Fixed forward "L4D2_OnGetScriptValueVector" not returning a vector value and not setting the value when changed.
    - Fixed forwards "L4D2_OnGetScriptValue*" not working after map change. Thanks to "Forgetest" for reporting.

1.119 (15-Oct-2022)
    - L4D2: Added a new pointer "POINTER_SCRIPTVM" to the "L4D_GetPointer" native.
    - L4D2: Added native "L4D2_GetDirectorScriptScope" to get the directors script scope.
    - L4D2: Added forwards "L4D2_OnGetScriptValueInt", "L4D2_OnGetScriptValueFloat", "L4D2_OnGetScriptValueVector" and "L4D2_OnGetScriptValueVoid" to use a new system of detecting script values. Thanks to "Forgetest" for coding.
    - L4D2: Added forward "L4D_OnForceSurvivorPositions_Pre" - pre relative to "L4D_OnForceSurvivorPositions" forward. Requested by "gabuch2".
    - L4D2: Changed native "L4D2_UseAdrenaline" to fire the event even when not healing. Thanks to "HarryPotter" for reporting.
    - L4D1 Linux: fixed forward "L4D_OnReleaseSurvivorPositions" using the wrong signature. Thanks to "HarryPotter" for reporting.
    - Added stocks "IsUsingMinigun" and "StopUsingMinigun" in the "left4dhooks_silver.inc" include file. Requested by "knifeeeee".
    - Added native "L4D_CleanupPlayerState" to clean up a players state. Requested by "knifeeeee".

1.118 (03-Oct-2022)
    - Fixed forward "L4D_OnReleaseSurvivorPositions" not being detected when used. Thanks to "gabuch2" for reporting.

1.117 (30-Sep-2022)
    - Added forward "L4D_OnReleaseSurvivorPositions" to trigger after round start when Survivors are released from starting positions, usually first map and finale escape start, not all maps. Requested by "gabuch2".
    - Added forwards "L4D_OnSpeakResponseConcept_Pre" and "L4D_OnSpeakResponseConcept_Post" to trigger when a talker response is triggered. Requested by "gabuch2".
    - Added some details for the "*_Detonate*" forwards in the "left4dhooks.inc" include file

1.116 (21-Sep-2022)
    - L4D1: Fixed GameData missing the "L4D_Molotov_Detonate" and "L4D_PipeBomb_Detonate" forwards data.
    - L4D2: Fixed native "L4D2_SpitterPrj" crashing the server when playing damage sounds. Thanks to "Marttt" for fixing.

1.115 (20-Sep-2022)
    - Added forward "L4D_OnForceSurvivorPositions" Triggers after round start when Survivors are forced into starting positions, usually first map and finale escape start, not all maps. Requested by "gabuch2".
    - Added forwards "L4D_Molotov_Detonate", "L4D_PipeBomb_Detonate" and "L4D2_VomitJar_Detonate" with their relative "_Post" and "_PostHandled" forwards to trigger when a grenade projectile is about to explode.
    - L4D2: Fixed native "L4D2_SpitterPrj" not causing damage sounds when the projectile is not connected with a player from the Special Infected team. Thanks to "Marttt" for reporting.
    - L4D2: Fixed native "L4D2_UseAdrenaline" to use the "adrenaline_health_buffer" cvar value instead of "pain_pills_health_value" for healing and prevent over-healing. Thanks to "HarryPotter" for fixing.
    - Fixed stock "L4D_StopReviveAction" from "left4dhooks_silver.inc" include file from throwing errors. Thanks to "Red Flame" for reporting.

1.114 (01-Sep-2022)
    - Added forwards "L4D_OnPlayerCough", "L4D_OnPlayerCough_Post" and "L4D_OnPlayerCough_PostHandled" when a player is coughing from a Smoker Cloud.
    - Added native "L4D_GoAwayFromKeyboard" to set a client as idle. Requested by "knifeeeee".
    - Added natives "L4D_GetNavArea_AttributeFlags" and "L4D_SetNavArea_AttributeFlags" to get and set a nav areas attribute flags.
    - Added natives "L4D_GetNavArea_SpawnAttributes" and "L4D_SetNavArea_SpawnAttributes" to get and set a nav areas spawn attribute flags.
    - Initial adding of native "L4D2_GetScriptValueString" to return the directors string key values. This crashes when the key has not been set.
    - Fixed forward "L4D_OnGetScriptValueString" throwing errors.

    - Added missing forwards "L4D2_CInsectSwarm_CanHarm_PostHandled" and "L4D2_OnSpawnWitchBride_PostHandled" to the include file.
    - Changes to some forwards information in the include file.
    - Changes to prevent errors throwing from some forwards in the test plugin.

1.113 (16-Aug-2022)
    - Fixed the natives "L4D_GetCheckpointFirst" and "L4D_GetCheckpointLast" not always finding the saferoom door. Thanks to "azureblue" for reporting.

1.112 (15-Aug-2022)
    - Added native "L4D2_GetScriptValueFloat" to return the directors float key values. See the left4dhooks.inc include file for details.
    - Changed forwards "L4D_OnGetScriptValueInt" to read and modify the post hook values.
    - Probably fixed forward "L4D_OnGetScriptValueString" not modifying the return value when changed.
    - Initial adding of forward "L4D_OnGetScriptValueVector" to return the directors vector key values. This is unused and commented out in code due to not being tested.
    - Thanks to "Forgetest" for help coding and testing.
    - Wildcarded the "SurvivorBot::UseHealingItems" signature to prevent conflicts with other plugins.

1.111 (30-Jul-2022)
    - Fixed native "L4D_GetNearestNavArea" additional params not being backwards compatible with plugins compiled against older versions of left4dhooks. Thanks to "Mr. Man" for reporting.

1.110 (15-Jul-2022)
    - Added L4D2 native "L4D2_NavAreaBuildPath" to replace the "L4D2_VScriptWrapper_NavAreaBuildPath" native VScript wrapper. Requested by "morzlee". Thanks to "Forgetest" for helping.
    - Changed native "L4D_GetNearestNavArea" to accept some more parameters. Suggested by "Forgetest".

    - Various minor code changes to adjust for splitting the project (cleaner comments and better error handling when compiling the split project files). Thanks to "Psyk0tik" for some help.

1.109 (05-Jul-2022)
    - Plugin now requires SourceMod 1.11. Utilizing some fixes from the new SourceMod and changed code to use new methodmaps.
    - Core changes to the source code splitting into multiple files for maintainability. Thanks to "Psyk0tik" for some suggestions.

    - Changed forward "L4D2_OnEntityShoved" client detection method. Thanks to "A1m`" for a solution.

    - Fixed forwards: "L4D_OnTryOfferingTankBot", "L4D_OnSpawnSpecial", "L4D_OnSpawnTank", "L4D_OnSpawnWitch", "L4D2_OnSpawnWitchBride", "L4D_PipeBombProjectile_Pre" and "L4D2_OnFindScavengeItem"
        to return -1 instead of 0 when blocking the functions. Thanks to "Forgetest" for reporting.

    - New project files located in "scripting/l4dd/"

1.108 (20-Jun-2022)
    - Added support for the "Updater" plugin by "GoD-Tony" to auto-update Left4DHooks. Can change the "ALLOW_UPDATER" define value for various options.
    - L4D2: Added native "L4D2_Jockey_EndRide" to stop a Jockey riding a Survivor. Requested by "Eyal282".

1.107 (08-Jun-2022)
    - Fixed memory leak when players disconnect. Thanks to "hefiwhfcds2" for reporting.
    - Fixed forwards "L4D_OnShovedBySurvivor*" from throwing "null pointer" errors. Thanks to "HarryPotter" for reporting.
    - Fixed native "L4D_TakeOverZombieBot" not always setting the correct zombie type in L4D2. Thanks to "a2121858" for fixing.
    - Fixed native "L4D2Direct_SetTankTickets" crashing servers. Requires SourceMod 1.11. Thanks to "a2121858" for reporting.
    - Potentially fixed other server crashes on map change when writing to memory. Requires SourceMod 1.11.

1.106 (02-Jun-2022)
    - Added stock "L4D_HasReachedSmoker" to return if a Survivor has reached the Smoker. Requested by "Nuki".
    - Plugin now warns if Left4DHooks is already running, to avoid duplicate plugins.
    - Reverted accidental debug logging from the last update. Thanks to "Hawkins" for reporting.

1.105 (01-Jun-2022)
    - L4D1: Fixed native "L4D2_GetTankCount" not reporting the correct value. Thanks to "Alexmy" for reporting.

1.104 (28-May-2022)
    - Fixed the new natives from the last update throwing errors in L4D1.

1.103 (28-May-2022)
    - L4D2: Added new natives:
        "L4D2_Charger_ThrowImpactedSurvivor" - To throw a Survivor like when they're flung by a Charger impacting nearby.
        "L4D2_Charger_StartCarryingVictim" - To carry a Survivor by a Charger.
        "L4D2_Charger_PummelVictim" - To pummel a specific Survivor by a Charger.
        "L4D2_Charger_EndPummel" - To end pummelling a Survivor by a Charger.

    - Various changes to the "left4dhooks.inc" include file. Thanks to "Vinillia" for fixing.
        - Added some missing params
        - Added some const qualifiers
        - Renamed some brief params
        - Changed some return types to any to avoid extra casting

    - When recompiling plugins changes maybe required to align with these fixes.

1.102 (16-May-2022)
    - Added various post hook forwards that will trigger even when the relative pre hook has been blocked with return Plugin_Handled. This is since the changes in Left4DHooks version 1.94.

    - Added new forwards:
        "L4D_OnSpawnSpecial_PostHandled", "L4D_OnSpawnTank_PostHandled", "L4D_OnSpawnWitch_PostHandled", "L4D_OnMobRushStart_PostHandled", "L4D_OnSpawnITMob_PostHandled", "L4D_OnSpawnMob_PostHandled",
        "L4D_OnEnterGhostState_PostHandled", "L4D_OnFirstSurvivorLeftSafeArea_PostHandled", "L4D_OnGetMissionVSBossSpawning_PostHandled", "L4D_TankClaw_OnPlayerHit_PostHandled", "L4D_OnTryOfferingTankBot_PostHandled",
        "L4D_OnCThrowActivate_PostHandled", "L4D2_OnEndVersusModeRound_PostHandled", "L4D_OnLedgeGrabbed_PostHandled", "L4D2_OnStagger_PostHandled", "L4D_OnShovedBySurvivor_PostHandled", "L4D2_OnEntityShoved_PostHandled",
        "L4D2_OnPounceOrLeapStumble_PostHandled", "L4D_OnKnockedDown_PostHandled", "L4D2_OnPummelVictim_PostHandled", "L4D2_OnThrowImpactedSurvivor_PostHandled", "L4D2_OnPlayerFling_PostHandled",
        "L4D_OnMaterializeFromGhost_PostHandled", "L4D_OnVomitedUpon_PostHandled", "L4D_PipeBombProjectile_PostHandled", "L4D_OnPouncedOnSurvivor_PostHandled", "L4D_OnGrabWithTongue_PostHandled".

1.101 (10-May-2022)
    - Added natives "L4D_GetCheckpointFirst" and "L4D_GetCheckpointLast" to get the first and last saferoom door entities.

1.100 (28-Apr-2022)
    - Fixed forward "L4D2_OnStagger_Post" throwing errors. Thanks to "Eyal282" for reporting.

1.99 (27-Apr-2022)
    - Fixed forward "L4D2_OnStagger_Post" not triggering. Thanks to "Eyal282" for reporting.

1.98 (27-Apr-2022)
    - Added new forward "L4D_OnSwingStart" to trigger when a Survivor shoves.
    - Added post hook forward "L4D_OnShovedBySurvivor_Post". Requested by "Eyal282".
    - Added post hook forwards: "L4D_TankRock_OnRelease_Post, "L4D_OnCThrowActivate_Post", "L4D_OnLedgeGrabbed_Post", "L4D2_OnEntityShoved_Post",
        "L4D_OnPouncedOnSurvivor_Post", "L4D_OnStartMeleeSwing_Post" and "L4D2_OnChangeFinaleStage_Post"

    - Fixed native "L4D2Direct_SetNextShoveTime" not working when setting the shove time earlier than the current value. Thanks to "Eyal282" for reporting and helping fix.

1.97 (15-Apr-2022)
    - Fixed removing animation detours in the same frame as the detour callback, crashing the server. Thanks to "Red Flame" and "fdxx" for reporting and helping.
    - Fixed not erasing all animation hooks on client disconnect. Thanks to "sorallll" for reporting and fixing.
    - Fixed not hooking pre hooks when only post forwards were used. Thanks to "Beatles" for reporting.

1.96 (11-Apr-2022)
    - Fixed error on client disconnect. Thanks to "sorallll" for reporting.

1.95 (10-Apr-2022)
    - Added stock "GetRandomClient" in the "left4dhooks_silver.inc" include file.
    - Added forward "L4D_OnWitchSetHarasser" to fire when a Witch has been startled. Requested by "ProjectSky".
    - Added post hook forward "L4D_OnTryOfferingTankBot_Post" to compliment it's related forward "L4D_OnTryOfferingTankBot".

    - Fixed animation hooks not removing the detour when no longer required.
    - Fixed animation hooks not cleaning up when a client disconnects.
    - Fixed animation hooks triggering on clients other than those specified. Thanks to "JoinedSenses", "nosoop" and "Impact" for helping.
    - Fixed forward "L4D2_OnPummelVictim" bugging out the victim when blocking the pummel.
    - Fixed some description errors in the "left4dhooks.inc" include file. Thanks to "Eyal282" for reporting.
    - Fixed a compile warning in 1.11 from the "left4dhooks_silver.inc" include file.

1.94 (29-Mar-2022)
    - Added natives "L4D_GetReserveAmmo" and "L4D_SetReserveAmmo" to get and set a players weapons reserve ammo.

    - Changed forward "L4D2_CGasCan_ShouldStartAction" swapping the nozzle and gascan params - to keep consistency with "L4D2_CGasCan_ActionComplete". Thanks to "Eyal282" for reporting.

    - Fixed forward "L4D2_OnPlayerFling" not firing. Thanks to "Forgetest" for reporting.

    - The follow forwards will no longer fire their post hook counterparts when blocked in the pre-hook (this allows using the post hooks to guarantee the forwards detoured function is invoked):
        "L4D2_OnHitByVomitJar", "L4D_OnVomitedUpon", "L4D2_CInsectSwarm_CanHarm", "L4D2_OnStartCarryingVictim", "L4D2_OnStartCarryingVictim", "L4D2_OnJockeyRide", "L4D_OnGrabWithTongue",
        "L4D2_CGasCan_ActionComplete", "L4D2_CGasCan_ShouldStartAction", "L4D_PipeBombProjectile_Pre", "L4D_OnMaterializeFromGhostPre", "L4D2_OnPlayerFling", "L4D2_OnThrowImpactedSurvivor",
        "L4D2_OnPummelVictim", "L4D_OnKnockedDown", "L4D2_OnPounceOrLeapStumble", "L4D2_OnEndVersusModeRound", "L4D_OnTryOfferingTankBot", "L4D_TankClaw_OnPlayerHit_Pre", "L4D_OnGetMissionVSBossSpawning",
        "L4D_OnEnterGhostState", "L4D_OnSpawnMob", "L4D_OnSpawnITMob", "L4D_OnMobRushStart", "L4D_OnFirstSurvivorLeftSafeArea", "L4D_OnSpawnWitch", "L4D2_OnSpawnWitchBride", "L4D_OnSpawnTank" and "L4D_OnSpawnSpecial".

1.93 (25-Mar-2022)
    - Fixed forward "L4D_OnVomitedUpon_Post" throwing errors.

1.92 (24-Mar-2022)
    - Fixed forward "L4D_OnSpawnSpecial_Post" firing when the client index is -1. Seems the code wasn't copied to the release.

1.91 (24-Mar-2022)
    - Added post hook forwards:
        "L4D2_CGasCan_ShouldStartAction_Post", "L4D2_CGasCan_ActionComplete_Post", "L4D2_CInsectSwarm_CanHarm_Post",
        "L4D_OnMobRushStart_Post", "L4D_OnSpawnITMob_Post", "L4D_OnSpawnMob_Post", "L4D2_OnStagger_Post", "L4D2_OnPounceOrLeapStumble_Post",
        "L4D_OnSetCampaignScores_Post", "L4D_OnRecalculateVersusScore_Post", "L4D_OnHasConfigurableDifficulty_Post",
        "L4D_OnVomitedUpon_Post", "L4D2_OnHitByVomitJar_Post", "L4D2_OnJockeyRide_Post" and "L4D2_OnStartCarryingVictim_Post".

    - Changed forward "L4D2_CGasCan_ShouldStartAction" params to include the nozzle entity.

    - Added some missing "MarkNativeAsOptional" lines to the include file.
    - Cleaned and tidied up some code.

    - Fixed forward "L4D_OnSpawnSpecial" firing when the client index is -1. Thanks to "Marttt" for reporting.
    - Fixed forward "L4D2_CGasCan_ShouldStartAction" crashing. Thanks to "Eyal282" for reporting.
    - Fixed native "L4D_GetCurrentChapter" sometimes reporting the wrong chapter number.

1.90 (20-Mar-2022)
    - Added forwards "L4D_OnKnockedDown" and "L4D_OnKnockedDown_Post" to trigger when a Survivor is being thrown by a Tank rock or Hunter lung.
    - Added forwards "L4D2_OnThrowImpactedSurvivor" and "L4D2_OnThrowImpactedSurvivor_Post" to trigger when a Survivor is impacted by a Charger.
    - Added forwards "L4D2_OnPummelVictim" and "L4D2_OnPummelVictim_Post" to trigger when a Survivor is about to be pummelled by a Charger.
    - Added native "L4D_EstimateFallingDamage" to check a players estimated falling damage. Requested by "Eyal282".
    - Added stocks "L4D_GetPinnedSurvivor" and "L4D2_IsMultiCharged" in the "left4dhooks_silver.inc" include file. Requested by "Eyal282".
    - Changed stock "L4D_IsPlayerStaggering" in the "left4dhooks_silver.inc" include file to add better thanks. Thanks to "HarryPotter" for modifying.
    - Changed forward "L4D_OnMaterializeFromGhost" from "Action" type to "void". Thanks to "Eyal282" for reporting.

1.89 (02-Mar-2022)
    - Fixed various @ targeting from only selecting 1 player. Thanks to "Eyal282" for reporting.
    - Changed stock "L4D_ForcePanicEvent" in the "left4dhooks_silver.inc" include file to fix breaking and in L4D2 trigger under more circumstances. Thanks to "Eyal282" for reporting.

1.88 (01-Mar-2022)
    - Added forward "L4D2_CGasCan_ShouldStartAction" (L4D2 only) to trigger when someone is about to pour a gascan. Requested by "Eyal282".
    - Added forward "L4D2_OnPlayerFling_Post" as a post hook to supplement the "L4D2_OnPlayerFling" forward. Requested by "Eyal282".

    - Added natives "L4D_ForceVersusStart", "L4D_ForceSurvivalStart" and "L4D2_ForceScavengeStart" (L4D2 only). Requested by "ProjectSky".
    - Thanks to "Lux" for some advice.

    - Added stock "L4D_GetClientTeam" in the "left4dhooks_stocks.inc" include file. Requested by Eyal282".
    - Added stock "L4D_IsPlayerStaggering" in the "left4dhooks_silver.inc" include file. Thanks to "HarryPotter" for writing.
    - Changed stock "L4D_ForcePanicEvent" in the "left4dhooks_silver.inc" include file to strip cheat flags when executing the command. Thanks to "Eyal282" for reporting.

    - Fixed stock "L4D_GetPinnedInfected" in the "left4dhooks_silver.inc" include file not returning a Charger carrying someone. Thanks to "Eyal282" for reporting.

    - Added enums "L4D1ZombieClassname" and "L4D2ZombieClassname" to the "left4dhooks_stocks.inc" include file to retrieve a classname from the relative "L4D1ZombieClassType" and "L4D2ZombieClassType" enums.

    - Added target filters "@blackwhite" and "@bw" to target people who are on their third strike (black and white - about to die). Requested by "eyal282".
    - Added target filters "@survivorbots" and "@sb" to target Survivor Bots. Requested by "LordVGames".
    - Added target filters "@infectedbots" and "@ib" to target Infected Bots. Requested by "LordVGames".

    - Changed "L4D2Direct_SetShovePenalty" and "L4D2Direct_SetNextShoveTime" to use SDKCalls instead of writing to memory.

    - Changes to potentially fix intermittent crashing on map change when using "CTimer_Set*", "ITimer_Set*", natives.
    - Thanks to "Forgetest" and "vikingo12" for reporting and possible solutions.
    - Requires re-compiling with SourceMod 1.11 to take affect.

    - Plugins using these stocks should recompile their plugin if the relative stock mentioned above has been updated.

1.87 (06-Feb-2022)
    - Added native "L4D_LobbyIsReserved" to return if players connected from the lobby and reserved the server.
    - Added natives "L4D_GetLobbyReservation" and "L4D_SetLobbyReservation" to get and set the lobby reservation ID.
    - Setting lobby reservation may not work when L4DToolZ is installed.

    - Added new weapon attribute. Requested by "vikingo12".
        - L4D2FloatWeaponAttributes: "L4D2FWA_ReloadDuration".

    - L4D2: now dynamically generates the "CTerrorGameRules::IsRealism" signature to future proof against updates breaking the signature.

1.86 (02-Feb-2022)
    - Added forward "L4D_OnServerHibernationUpdate" to report when server hibernation status changes. Requested by ProjectSky".
    - Added new weapon attribute. Requested by "A1m`".
        - L4D2FloatWeaponAttributes: "L4D2FWA_GainRange".

    - Fixed broken signatures in L4D1 and L4D2 due to game updates.

1.85 (10-Jan-2022)
    - Fixed "L4D2IWA_Bucket", "L4D2IWA_Tier", "L4D2FWA_VerticalPunch" and "L4D2FWA_HorizontalPunch" not reading offsets. Thanks to "DarklSide" for reporting.
    - Fixed native "AnimHookDisable" removing all hooks when multiple identical hook callbacks are added from a single plugin. Thanks to "Eärendil" for reporting.

1.84 (08-Jan-2022)
    - Fixed forward "L4D_OnTryOfferingTankBot" detour returning the wrong value when using "Plugin_Changed". Thanks to "Nuki" for reporting.
    - Fixed "Local_GetRandomClient" not processing alive or bots values correctly. Thanks to "Mrs cheng" for reporting.
    - Now using a random seed when using functions that randomly select players. Requested by "Mrs cheng".
    - More error messages report the OS, game and plugin version.

1.83 (25-Dec-2021)
    - Made error messages report the OS, game and plugin version.
    - Wildcarded the "CDirector::RestartScenarioFromVote" signature for L4D1. Thanks to "Beatles" or reporting.

1.82 (14-Dec-2021)
    - Added new weapon attributes. Thanks to "iaNanaNana" for requesting and giving offsets.
        - L4D2IntWeaponAttributes: "L4D2IWA_Bucket" (both games) and "L4D2IWA_Tier" (L4D2 only).
        - L4D2FloatWeaponAttributes: "L4D2FWA_VerticalPunch" and "L4D2FWA_HorizontalPunch".

1.81 (30-Nov-2021)
    - Fixed forward "L4D_OnVomitedUpon" sometimes throwing errors about null pointer. Thanks to "Krufftys Killers" for reporting.
    - Changed function "Local_GetRandomClient" in "left4dhooks_silver.inc" to be stock. Thanks to "A1m`" for reporting.

1.80 (24-Nov-2021)
    - Fixed forward "L4D_OnSpawnSpecial_Post" param error. Thanks to "fdxx" for reporting.

1.79 (23-Nov-2021)
    - Changed forward "L4D_OnSpawnSpecial_Post" prototype to remove the reference variable.

1.78 (23-Nov-2021)
    - Added forwards "L4D_OnSpawnSpecial_Post", "L4D_OnSpawnTank_Post", "L4D_OnSpawnWitch_Post" and "L4D2_OnSpawnWitchBride_Post". Requested by "A1m`".
    - Added stocks "GetAnyRandomClient", "GetRandomSurvivor" and "GetRandomInfected" to the "left4dhooks_silver.inc" include file.

1.77 (21-Nov-2021)
    - Fixed not detouring some functions when only 1 detour was used instead of both pre and post. Thanks to "fdxx" for reporting.

1.76 (20-Nov-2021)
    - Fixed native "L4D2_IsReachable" using a bad signature. Thanks to "tRololo312312" for reporting.
    - Wildcarded the "Music::Play" signatures to be compatible with plugins detouring. Thanks to "user2000", "Edison1318" and "Shadowysn" for reporting.
    - Wildcarded the "ZombieManager::SpawnTank" signatures to be compatible with plugins detouring. Thanks to "Tank Rush" for reporting.

    - L4D1 and L4D2 GameData files updated.

1.75 (18-Nov-2021)
    - Fixed forward "L4D2_OnHitByVomitJar" throwing errors about null pointer.
    - Forwards "L4D_OnVomitedUpon" and "L4D2_OnHitByVomitJar" attacker can now be reported as 0.

    - "left4dhooks_silver.inc" include:
        - Deprecated stock "L4D_IsPlayerIncapped".

    - "left4dhooks_stocks.inc" include:
        - Renamed the stock "L4D_HasAnySurvivorLeftSafeArea" to "L4D_HasAnySurvivorLeftSafeAreaStock" (the native "L4D_HasAnySurvivorLeftSafeArea" still exists).
        - Fixed compile errors on SourceMod version 1.11. Thanks to "user2000" for reporting.
        - Replaced indentation spaces with tabs.

    - Note: "#include <left4dhooks>" will load all <left4dhooks_*> includes. Other "#include <left4dhooks_*>" will attempt to load each other if included on their own.
    - Only required to use "#include <left4dhooks>" for all features and stocks availability.

    - Plugin and Include files updated.

1.74 (16-Nov-2021)
    - Fixed releasing 1.73 with the wrong "left4dhooks_stocks.inc" include file version. Thanks to "moschinovac" for reporting.

1.73 (15-Nov-2021)
    - Added tons of new stocks! About 150!

    - Added some new enums to the "left4dhooks_silver.inc" include file: "L4D_TEAM_*", "L4D_ZOMBIE_CLASS_*", "L4D2_ZOMBIE_CLASS_*" and "L4D_WEAPON_SLOT_*".
    - Added new include file "left4dhooks_lux_library.inc" - various new stocks from "lux_library.inc". Thanks to "Lux" for the original file and allowing use.
    - Added new include file "left4dhooks_silver.inc" - various new stocks. This will be updated over time to add new simple stock functions.
    - Added new include file "left4dhooks_stocks.inc" - various new stocks from "l4d_stocks.inc". Thanks to "Mr. Zero" for the original files.
    - This is also combined with the "l4d_weapon_stocks.inc" include file by "Mr. Zero".
    - Only required to copy to the "scripting/include" directory when compiling, "left4dhooks.inc" will include these automatically.

    - New GameData file "lux_library.txt" used for the "left4dhooks_lux_library.inc" include file. Thanks to "Lux" for providing these.

    - Added: New include files and GameData file.

1.72 (10-Nov-2021)
    - Added native "L4D_GetPointer" to return various pointer addresses.
    - Added native "L4D_GetClientFromAddress" to return a client index from a memory address.
    - Added native "L4D_GetEntityFromAddress" to return an entity index from a memory address.
    - Added native "L4D_ReadMemoryString" to read a string from a memory address.
    - Added native "L4D_GetServerOS" to return the current server OS.

1.71 (07-Nov-2021)
    - Fixed native "L4D2_GetSurvivorSetMod" not being restricted to L4D2. Thanks to "HarryPotter" for reporting.
    - Plugin now loads about 1 second faster and no longer creates about 1 second delay on map changes.
    - Changes to the "sm_l4dd_detours" and "sm_l4dhooks_detours" commands to prevent errors when using the DEBUG or DETOUR defines.

1.70 (07-Nov-2021)
    - Added native "L4D_TankRockPrj" to create a Tank Rock projectile.
    - Added native "L4D_DetonateProjectile" to detonate grenade projectiles.
    - Added natives to L4D2: "L4D2_GetSurvivorSetMap" and "L4D2_GetSurvivorSetMod" to return the maps and modified Survivor set.
    - Changed forwards "L4D_OnGetSurvivorSet" and "L4D_OnFastGetSurvivorSet" to post hooks to retrieve the correct value. Thanks to "Gabe Iggy" for reporting.
    - Fixed detours "OnShovedBySurvivor_Clone" and "OnStaggered_Clone" being broken on L4D1 linux. Thanks to "HarryPotter" for reporting.

    - GameData files, include file and plugins updated.

1.69a (04-Nov-2021)
    - Added missing forwards "L4D_OnPouncedOnSurvivor" and "L4D2_OnStartCarryingVictim" to the include file. Thanks to "ProjectSky" for reporting.

1.69 (03-Nov-2021)
    - Added forward "L4D_OnPouncedOnSurvivor" to notify when a Survivor is being pounced on by a Hunter.
    - Added forward "L4D2_OnStartCarryingVictim" to L4D2 to notify when a Survivor is being grabbed by a Charger.
    - Fixed some natives disabling the plugin if their signatures broke. Only their functionality will break.

    - GameData files, include file and plugins updated.

1.68 (02-Nov-2021)
    - Added forward "L4D_OnGrabWithTongue" to L4D2 to notify when someone is about to be grabbed by a Smoker Tongue. Requested by "Alexmy".
    - Added forward "L4D2_OnJockeyRide" to notify when someone is about to be ridden by a Jockey. Requested by "Alexmy".
    - Cleaned and consolidated the code: standardized gamedata names, function names and variable names.
    - Compatibility support for SourceMod 1.11. Fixed various warnings.

    - GameData files, include file and plugins updated.

1.67 (25-Oct-2021)
    - Fixed the create projectile natives from failing still when passing 0 entity index. Thanks to "BHaType" for reporting.
    - Fixed L4D1 Linux forward "TryOfferingTankBot" sometimes throwing errors. Thanks to "HarryPotter" for reporting.
    - Fixed L4D1 setting "L4D2FWA_PenetrationNumLayers" - float values will be rounded to ceiling. Thanks to "epzminion" for finding and "Psyk0tik" for reporting.
    - Fixed target filters "@isb" and "@isp" being flipped.

1.66 (21-Oct-2021)
    - Fixed L4D1 Linux not finding the "g_pWeaponInfoDatabase" signature. Thanks to "Ja-Forces" for reporting.
    - L4D1 GameData updated.

1.65 (20-Oct-2021)
    - Changed forward "L4D2_CGasCan_EventKilled" params to show the inflictor and attacker.
    - Thanks to "ProjectSky" for reminding me.

1.64 (20-Oct-2021)
    - Added 1 new forward to L4D1 and L4D2:
        - "L4D_CBreakableProp_Break" - When a physics prop is broken.

    - Added 3 new forwards to L4D2:
        - "L4D2_CGasCan_EventKilled" - When a GasCan is destroyed.
        - "L4D2_CGasCan_ActionComplete" - When a Survivor has finished pouring gas.
        - "L4D2_CInsectSwarm_CanHarm" - When Spitter Acid is checking if a player or entity can be damaged.

    - Added 1 new native to L4D1 and L4D2:
        - "L4D_GetWeaponID" - to get the Weapon ID by classname

    - Added and unlocked all the weapon attribute modification natives to L4D1:
    - Thanks to "Psyk0tik" for the suggestion and information about offsets.
        - "L4D2_IsValidWeapon"
        - "L4D2_GetFloatWeaponAttribute" and "L4D2_SetFloatWeaponAttribute"
        - "L4D2_GetIntWeaponAttribute" and "L4D2_SetIntWeaponAttribute"
        - "L4D2IntWeaponAttributes" enums - ("L4D2IWA_Bullets", "L4D2IWA_Damage", "L4D2IWA_ClipSize")
        - "L4D2FloatWeaponAttributes" enums - ("L4D2FWA_MaxPlayerSpeed", "L4D2FWA_SpreadPerShot", "L4D2FWA_MaxSpread", "L4D2FWA_Range", etc)

    - Added new target filters (requested by Tonblader):
        "@deads" - Dead Survivors (all, bots)
        "@deadsi" - Dead Special Infected (all, bots)
        "@deadsp" - Dead Survivors players (no bots)
        "@deadsip" - Dead Special Infected players (no bots)
        "@deadsb" - Dead Survivors bots (no players)
        "@deadsib" - Dead Special Infected bots (no players)
        "@sp" - Survivors players (no bots)
        "@sip" - Special Infected players (no bots)
        "@isb" - Incapped Survivor Only Bots
        "@isp" - Incapped Survivor Only Players

    - Changed target filter names (requested by Tonblader):
        "@incappedsurvivorbot" to "@rincappedsurvivorbot"
        "@isb" to "@risb"
        "@survivorbot" to "@rsurvivorbot"
        "@sb" to "@rsb"
        "@infectedbot" to "@rinfectedbot"
        "@ib" to "@rib"
        "@tankbot" to "@rtankbot"
        "@tb" to "@rtb"

    - Added "FINALE_*" enums to the include file for use with the "L4D2_ChangeFinaleStage" and "L4D2_GetCurrentFinaleStage" natives and "L4D2_OnChangeFinaleStage" forward.
    - Thanks to "Dragokas" for suggesting.

    - GameData files, include file and plugins updated.

1.63 (15-Oct-2021)
    - Changed all projectile natives to allow passing 0 (world) instead of a client index. Thanks to "BHaType" for reporting.
    - Changed forward "L4D_OnGameModeChange" from "Action" type to "void". Thanks to "Psyk0tik" for reporting.
    - Fixed commands "sm_l4dd_detours" and "sm_l4dhooks_detours" not showing all forwards when they have pre and post hooks.

    - Added 11 new forwards to L4D1 and L4D2. Thanks to "Psyk0tik" for the suggestions, signatures and detour functions.
        - "L4D_TankClaw_DoSwing_Pre" - When a tank is swinging to punch.
        - "L4D_TankClaw_DoSwing_Post" - When a tank is swinging to punch.
        - "L4D_TankClaw_GroundPound_Pre" - When an tank punches the ground.
        - "L4D_TankClaw_GroundPound_Post" - When an tank punches the ground.
        - "L4D_TankClaw_OnPlayerHit_Pre" - When a tank swings and punches a player.
        - "L4D_TankClaw_OnPlayerHit_Post" - When a tank swings and punches a player.
        - "L4D_TankRock_OnDetonate" - When a tank rock hits something.
        - "L4D_TankRock_OnRelease" - When a tank rock is thrown.
        - "L4D_PlayerExtinguish" - When a player is about to be extinguished.
        - "L4D_PipeBombProjectile_Pre" - When a PipeBomb projectile is being created.
        - "L4D_PipeBombProjectile_Post" - After a PipeBomb projectile is created.

    - Added 1 new forward to L4D2. Thanks to "Lux" for the suggestion, signature and detour functions.
        - "L4D2_MeleeGetDamageForVictim" - When calculating melee damage to inflict on something.

    - GameData files, include file and plugins updated.

1.62 (08-Oct-2021)
    - L4D1 Linux: Update thanks to "Forgetest" for writing.
    - L4D1 Linux: Fixed issues with the forwards "L4D_OnShovedBySurvivor" and "L4D2_OnStagger". Thanks "HarryPotter" for reporting.

    - L4D1 GameData file and plugin updated.

1.61 (05-Oct-2021)
    - Added natives "L4D_GetTempHealth" and "L4D_SetTempHealth" to handle Survivors temporary health buffer.
    - Added natives "L4D_PlayMusic" to play a specified music string to a client. Thanks to "DeathChaos25" and "Shadowysn" for "Dynamic Soundtrack Sets" plugin.
    - Added natives "L4D_StopMusic" to stop playing a specified music string to a client. Thanks to "DeathChaos25" and "Shadowysn" for "Dynamic Soundtrack Sets" plugin.
    - Moved the animation ACT_* enums from "include/left4dhooks.inc" to "include/left4dhooks_anim.inc". Suggested by "Accelerator". No plugin changes required.

    - Thanks to "Psyk0tik" for requesting the following forwards and natives and their signatures found here: https://github.com/Psykotikism/L4D1-2_Signatures

    - Added natives:
        - "L4D2_HasConfigurableDifficultySetting" - Returns if there is a configurable difficulty setting.
        - "L4D2_IsGenericCooperativeMode" - Returns if the current game mode is Coop/Realism mode.
        - "L4D_IsCoopMode" - Returns if the current game mode is Coop mode.
        - "L4D2_IsRealismMode" - Returns if the current game mode is Realism mode.
        - "L4D2_IsScavengeMode" - Returns if the current game mode is Scavenge mode.
        - "L4D_IsSurvivalMode" - Returns if the current game mode is Survival mode.
        - "L4D_IsVersusMode" - Returns if the current game mode is Versus mode.

    - Added forwards:
        - "L4D_OnFalling" - Called when a player is falling.
        - "L4D_OnFatalFalling" - Called when a player is falling in a fatal zone.
        - "L4D2_OnPlayerFling" - Called when a player is flung to the ground.
        - "L4D_OnEnterStasis" - Called when a Tank enters stasis mode in Versus mode.
        - "L4D_OnLeaveStasis" - Called when a Tank leaves stasis mode in Versus mode.

    - GameData files, include file and plugins updated.

1.60 (29-Sep-2021)
    - Added native "L4D2_GrenadeLauncherPrj" to create an activated Grenade Launcher projectile which detonates on impact. L4D2 only.
    - Fixed L4D1 Linux "CMolotovProjectile::Create" signature. Thanks to "Ja-Forces" for reporting.

1.59 (29-Sep-2021)
    - HotFix: Fix Linux not loading the last 2 natives.

1.58 (29-Sep-2021)
    - Added native "L4D_MolotovPrj" to create an activated Molotov projectile which detonates on impact.
    - Added native "L4D2_VomitJarPrj" to create an activated VomitJar projectile which detonates on impact. L4D2 only.
    - Added "STATE_*" enums to the include file for use with the "L4D_State_Transition" native. Thanks to "BHaType" for providing.
    - Fixed some incorrect information in the include file. Thanks to "jackz" for reporting.

    - GameData files, include file and plugins updated.

1.57 (18-Sep-2021)
    - Changed the method for getting the current GameMode. Should have no more issues. Thanks to "ddd123" for reporting.
    - L4D2: Wildcarded the "CTerrorPlayer::Fling" signature for compatibility with being detoured. Thanks to "ddd123" for reporting.

    - L4D2 GameData file and plugin updated.

1.56 (15-Sep-2021)
    - Fixed spawning an entity directly OnMapStart (can cause crashes), delayed by a frame to fix errors. Thanks to "fdxx" for reporting.

1.55 (12-Sep-2021)
    - Fixed native "L4D2Direct_TryOfferingTankBot" not working for L4D1 Linux due to the last update. Thanks to "Forgetest" for reporting.

1.54 (12-Sep-2021)
    - Big thanks to "Forgetest" and "HarryPotter" for helping fix and test this release.

    - Added forward "L4D_OnGameModeChange" to notify plugins when the mode has changed to Coop, Versus, Survival and Scavenge (L4D2).
    - Added native "L4D_GetGameModeType" to return if the current game mode is Coop, Versus, Survival or Scavenge (L4D2).

    - Update for L4D1:

    - Fixed on Linux forward "L4D_OnSpawnWitch" from not triggering for some Witch spawns. Thanks to "Forgetest" for fixing.
    - Fixed on Linux forward "L4D_OnTryOfferingTankBot" from not triggering on the first tank. Thanks to "Forgetest" for fixing.
    - Unlocked native "L4D2Direct_GetMobSpawnTimer" for usage in L4D1. Thanks to "HarryPotter" for reporting functionality.
    - Unlocked native "L4D2Direct_GetTankCount" for usage in L4D1. Missed this from the last update.

    - L4D1 GameData file, include file and plugins updated.

1.53 (09-Sep-2021)
    - Update for L4D1:

    - Added forward "L4D_OnRecalculateVersusScore" from "raziEiL"'s port of "L4D Direct".
    - Added natives "L4DDirect_GetSurvivorHealthBonus", "L4DDirect_SetSurvivorHealthBonus" and "L4DDirect_RecomputeTeamScores" from "raziEiL"'s port of "L4D Direct".
    - Changed native "L4D2_GetTankCount" to use the directors variable instead of counting entities. Thanks to "Forgetest" for the offsets.
    - Unblocked native "L4D_GetTeamScore" for usage in L4D1. Accepts logical_team params 1-6.
    - Fixed forward "L4D_OnFirstSurvivorLeftSafeArea" not blocking correctly. Thanks to "Forgetest" for the solution.
    - Various fixes and additions thanks to "HarryPotter" for requesting and testing.

    - L4D1 GameData file, include file and plugins updated.

1.52 (31-Aug-2021)
    - Added L4D1 and L4D2 specific "ACT_*" animation activity constants to the include file for usage in animation pre-hooks. See the include file for details.
    - Wildcarded "RestartScenarioFromVote" detour to be compatible with the "[L4D2] Restart Without Changelevel" plugin by "iaNanaNana".
    - Various minor changes to the code legibility.

1.51 (10-Aug-2021)
    - Added natives "L4D_GetCurrentChapter" and "L4D_GetMaxChapters" to get the current and max chapters count. Thanks to "Psyk0tik" for help.
    - L4D1: Added natives "L4D_GetVersusMaxCompletionScore" and "L4D_SetVersusMaxCompletionScore" to get/set Versus max score. Thanks to "BHaType" for offsets.
    - L4D1: Fixed broken "CThrowActivate" signature due to the 1.0.4.0 update. Thank to "matrixmark" for reporting.

    - GameData files, include file and plugins updated.

1.50 (22-Jul-2021)
    - Fixed "Native was not found" errors in L4D1. Thanks to "xerox8521" for reporting.
    - Test plugin: Fixed "L4D_OnMaterializeFromGhostPre" and "L4D_OnMaterializeFromGhost" throwing "String formatted incorrectly" errors.

1.49 (13-Jul-2021)
    - L4D2: Fixed the "SpawnTimer" offset being wrong. Thanks to "Forgetest" for reporting.

1.48 (13-Jul-2021)
    - Fixed "Param is not a pointer" in the "L4D_OnVomitedUpon" forward. Thanks to "ddd123" for reporting.
    - L4D2: Changed the way "ForceNextStage" address is read on Windows, hopefully future proof.

1.47 (10-Jul-2021)
    - Fixed "Trying to get value for null pointer" in the "L4D_OnVomitedUpon" forward. Thanks to "Shadowart" for reporting.

1.46 (09-Jul-2021)
    - L4D2: Added native "L4D2_ExecVScriptCode" to exec VScript code instead of having to create an entity to fire code.
    - L4D2: Fixed GameData file from the "2.2.2.0" game update.

1.45 (04-Jul-2021)
    - Fixed bad description for "L4D_SetHumanSpec" and "L4D_TakeOverBot" in the Include file.
    - L4D1: Fixed forward "L4D_OnVomitedUpon" crashing. GameData file updated. Thanks to "Psyk0tik" for reporting.

1.44 (01-Jul-2021)
    - Fixed forward "L4D_OnMaterializeFromGhost" not firing. Thanks to "ProjectSky" for reporting.
    - Fixed changelog description. Thanks to "Spirit_12" for reporting.

1.43 (01-Jul-2021)
    - L4D1 & L4D2 update:
    - Added forward "L4D_OnMaterializeFromGhostPre" and "L4D_OnMaterializeFromGhost" when a client spawns out of ghost mode. Thanks to "ProjectSky" and "sorallll" and for suggesting.

    - Added native "L4D_RespawnPlayer" to respawn a dead player.
    - Added native "L4D_SetHumanSpec" to takeover a bot.
    - Added native "L4D_TakeOverBot" to takeover a bot.
    - Added native "L4D_CanBecomeGhost" to determine when someone is about to enter ghost mode.
    - Added native "L4D2_AreWanderersAllowed" to determine if Witches can wander.
    - Added native "L4D_IsFinaleEscapeInProgress" to determine when the rescue vehicle is leaving until.
    - Added native "L4D_GetLastKnownArea" to retrieve a clients last known nav area.

    - Added missing "ACT_ITEM2_VM_LOWERED_TO_IDLE" to the "data/left4dhooks.l4d2.cfg" config.

1.42 (23-Jun-2021)
    - L4D1 & L4D2 update:
    - Added forward "L4D_OnVomitedUpon" when client is covered in vomit.
    - Added forward "L4D_OnEnterGhostStatePre" with the ability to block entering ghost state.
    - Changed 2 signatures to be compatible with detouring: "CTerrorPlayer::OnStaggered" and "CTerrorPlayer::OnVomitedUpon".

    - L4D2 update only:

    - Added forward "L4D2_OnHitByVomitJar" when a Bilejar explodes on clients.
    - Added native "L4D2_NavAreaTravelDistance" to return the nav flow distance between two areas.
    - Added native "L4D2_UseAdrenaline" to give a player the Adrenaline effect and health benefits.

    - Added various natives as wrappers executing VScript code:
        - These are slower than native SDKCalls, please report popular ones to convert to fast SDKCalls.
        "L4D2_VScriptWrapper_GetMapNumber"
        "L4D2_VScriptWrapper_HasEverBeenInjured"
        "L4D2_VScriptWrapper_GetAliveDuration"
        "L4D2_VScriptWrapper_IsDead"
        "L4D2_VScriptWrapper_IsDying"
        "L4D2_VScriptWrapper_UseAdrenaline"
        "L4D2_VScriptWrapper_ReviveByDefib"
        "L4D2_VScriptWrapper_ReviveFromIncap"
        "L4D2_VScriptWrapper_GetSenseFlags"
        "L4D2_VScriptWrapper_NavAreaBuildPath"
        "L4D2_VScriptWrapper_NavAreaTravelDistance" // Added as a demonstration and test, SDKCall is available, use "L4D2_NavAreaTravelDistance" instead.

    - Thanks to "Eärendil" for showing me how to call some VScript functions.

1.41 (18-Jun-2021)
    - L4D2: Fixed "InvulnerabilityTimer" offset. Thanks to "Nuki" for helping.

1.40 (16-Jun-2021)
    - L4D2: Fixed various offsets breaking from "2.2.1.3" game update. Thanks to "Nuki" for reporting and helping.

1.39 (16-Jun-2021)
    - Changed command "sm_l4dd_detours" results displayed to be read easier.
    - L4D2: Fixed signatures breaking from "2.2.1.3" game update. Thanks to "Psyk0tik" for fixing.
    - L4D2: Fixed "VanillaModeOffset" in Linux breaking from "2.2.1.3" game update. Thanks to "Accelerator74" for fixing.

1.38 (28-Apr-2021)
    - Changed native "L4D2_IsReachable" to allow using team 2 and team 4.

1.37 (20-Apr-2021)
    - Removed "RoundRespawn" being used, was for private testing, maybe a future native. Thanks to "Ja-Forces" for reporting.

1.36 (20-Apr-2021)
    - Added optional forward "AP_OnPluginUpdate" from "Autoreload Plugins" by "Dragokas", to rescan required detours when loaded plugins change.
    - Fixed native "L4D2Direct_GetFlowDistance" sometimes returning -9999.0 when invalid, now returns 0.0;
    - Fixed native "L4D_FindRandomSpot" from crashing Linux servers. Thanks to "Gold Fish" for reporting and fixing and "Marttt" for testing.
    - Restricted native "L4D2_IsReachable" client index to Survivor bots only. Attempts to find a valid bot otherwise it will throw an error. Thanks to "Forgetest" for reporting.
    - Signatures compatibility with plugins detouring them. L4D1: "OnLedgeGrabbed", "OnRevived" and L4D2: "OnLedgeGrabbed". Thanks to "Dragokas" for providing.

1.35 (10-Apr-2021)
    - Fixed native "L4D_GetTeamScore" error message when using the wrong team values. Thanks to "BHaType" for reporting.
    - Restricted native "L4D2_IsReachable" client index to bots only. Attempts to find a valid bot otherwise it will throw an error. Thanks to "Forgetest" for reporting.

1.34 (23-Mar-2021)
    - Added native "L4D_HasPlayerControlledZombies" to return if players can control infected. Thanks to "Spirit_12" for requesting.
    - Thanks to "Psyk0tik" for the L4D1 signature.
    - Fixed Linux detection accidentally being broken from version 1.17 update.

1.33a (04-Mar-2021)
    - L4D1 GameData updated. Changes fixing "L4D2_OnEntityShoved" were missing from the previous update.

1.33 (02-Mar-2021)
    - Changed forward "L4D2_OnEntityShoved" to trigger for all entities being shoved not just clients.
    - Fixed forward "L4D2_OnEntityShoved" not working in L4D1. GameData file updated for L4D1.
    - Fixed native "L4D_IsFirstMapInScenario" crashing in L4D1 from changes in version 1.30 update.

1.32 (23-Feb-2021)
    - Changed native "L4D_GetRandomPZSpawnPosition" to accept client index of 0. Thanks to "Accelerator74" for reporting.
    - Fixed target filters misspelling "incapped". Thanks to "Forgetest" for reporting.

1.31 (23-Feb-2021)
    - Added Target Filters to target randomly. Requested by "Tonblader":
        "@incappedsurvivors", "@is"
        "@randomincappedsurvivor", "@ris"
        "@randomsurvivor", "@rs"
        "@randominfected", "@ri"
        "@randomtank", "@rt"
        "@incappedsurvivorbot", "@isb"
        "@survivorbot", "@sb"
        "@infectedbot", "@ib"
        "@tankbot", "@tb"

    - Fixed "L4D_GetPlayerSpawnTime" from returning the wrong value again. Thanks to "Forgetest" for reporting.

1.30 (15-Feb-2021)
    - Fixed natives "L4D2_SetIntMeleeAttribute" and "L4D2_SetFloatMeleeAttribute" functions. Thanks to "bw4re" for reporting.
    - Fixed native "L4D_GetPlayerSpawnTime" giving the wrong time. Thanks to "Forgetest" for reporting.

    - Fixes by "Dragokas"
    - Fixed native "L4D_IsFirstMapInScenario" call with SDKCall_Raw returned error in SM 1.11, L4D1. Thanks to "Crasher" for reporting, and "Rostu" for help.
    - Fixed "ForceNextStage" signature (WIN).

1.29 (10-Oct-2020)
    - Fixed "L4D_StaggerPlayer" not working with NULL_VECTOR. Thanks to "Zippeli" for reporting.

1.28 (09-Oct-2020)
    - Added command "sm_l4dd_unreserve" to remove lobby reservation. Added for testing purposes but is functional.
    - Fixed L4D1 GameData failing to find "g_pServer" address. Thanks to "Ja-Forces" for reporting.
    - Fixed forward "L4D_OnFirstSurvivorLeftSafeArea" throwing errors about null pointer.

1.27 (05-Oct-2020)
    - Fixed not loading in L4D1 due to recent changes. Thanks to "TiTz" for reporting.

1.26 (01-Oct-2020)
    - L4D2: Fixed the new target filters not working correctly, now matches by modelname for Survivors instead of character netprop.

1.25 (01-Oct-2020)
    - Added survivor specific target filters: @nick, @rochelle, @coach, @ellis, @bill, @zoey, @francis, @louis
    - Added special infected target filters: @smokers, @boomers, @hunters, @spitters, @jockeys, @chargers
    - Changed native "L4D2_GetMeleeWeaponIndex" to return -1 instead of throwing an error, due to melee being unavailable.
    - Fixed melee weapon IDs being incorrect depending on which are enabled. Thanks to "iaNanaNana" for reporting.
    - Updated the "data/left4dhooks.l4d2.cfg" config with latest "ACT_*" animation numbers.

1.24 (27-Sep-2020)
    - Reverted change: native "L4D_GetTeamScore" now accepts values 1 and 2 again.
    - Changed natives:
        "L4D2Direct_GetVSTankFlowPercent", "L4D2Direct_SetVSTankFlowPercent", "L4D2Direct_GetVSTankToSpawnThisRound",
        "L4D2Direct_SetVSTankToSpawnThisRound", "L4D2Direct_GetVSWitchFlowPercent", "L4D2Direct_SetVSWitchFlowPercent",
        "L4D2Direct_GetVSWitchToSpawnThisRound" and "L4D2Direct_SetVSWitchToSpawnThisRound".
    - Corrected natives "roundNumber" to consider "m_bAreTeamsFlipped" and "m_bInSecondHalfOfRound".
    - Thanks to "devilesk" for native value clarification.

1.23 (27-Sep-2020)
    - Update by "ProdigySim" to fix Addons Eclipse. Thank you!

1.22 (24-Sep-2020)
    - Compatibility update for L4D2's "The Last Stand" update.
    - Big thanks to "ProdigySim" for help updating various gamedata offsets and signatures.
    - Added support for the 2 new melee weapons.
    - Changed native "L4D_GetTeamScore" to accept values 0 and 1 which seems is the standard.
    - Late loading with debug enabled now shows the g_pGameRules pointer.
    - Moved hard coded Addon Eclipse offsets to gamedata.

1.21 (01-Sep-2020)
    - Removed teleporting the old and new tank players when using "L4D_ReplaceTank" native.

1.20 (28-Aug-2020)
    - Changed forward "L4D_OnEnterGhostState" hook from pre to post hook. Thanks to "Forgetest" for reporting.
    - Fixed forward "L4D_OnShovedBySurvivor" client and target order being wrong. Thanks to "Forgetest" for reporting.

1.19 (27-Aug-2020)
    - Fixed native "L4D2Direct_TryOfferingTankBot" from crashing the server. Thanks to "disawar1" for reporting.

1.18 (20-Aug-2020)
    - Thanks to "Forgetest" for reporting the following issues and testing multiple fixes.
    - Fixed natives using "L4D2CT_VersusStartTimer" from reading the incorrect address.
    - Fixed native "L4D2_IsValidWeapon" returning false when the classname is missing "weapon_".
    - Fixed address "g_pGameRules" being incorrect after certain map or mode changes, this broke the following natives:
        "L4D2_GetVersusCompletionPlayer", "L4D_GetVersusMaxCompletionScore" and "L4D_SetVersusMaxCompletionScore".

    - Note: native "L4D2_IsValidWeapon" and various "*WeaponAttribute" natives still returns invalid for CSS weapons.
        This only happens on the servers first load until map is changed and the CSS weapons are precached using whichever method
        your server uses to enable CSS weapons. Plugins using or modifying CSS weapons might need to be updated with this in mind.

1.17 (20-Jul-2020)
    - Added native (L4D2 only): "L4D2_IsReachable" to check if a position is accessible to a Survivor Bot.
    - Fixed include native "L4D2_AreTeamsFlipped" returning an int instead of bool. Thanks to "BloodyBlade" for reporting.
    - Fixed native "L4D_GetHighestFlowSurvivor" throwing errors in 1.11. Thanks to "yuzumi" for reporting.
    - Removed some useless "view_as" code. Might remove more in the future.

1.16a (16-Jun-2020)
    - Fixed using the wrong offset for "m_PendingMobCount". Thanks to "fbef0102" for reporting.

1.16 (05-Jun-2020)
    - Added native "L4D_LobbyUnreserve" finally, to support "Remove Lobby Reservation (When Full)" plugin.
    - Huge thanks to "GAMMACASE" and "Deathreus" for helping figure why the native was crashing.

1.15 (15-May-2020)
    - Added a valid entity check for "L4D2_OnFindScavengeItem" due to so many plugins passing bad entities and throwing errors.
    - Fixed "L4D_Dissolve" native description in the include file. Thanks to "Psyk0tik" for reporting.

1.14 (10-May-2020)
    - Added native (L4D2 only): "L4D2Direct_GetScriptedEventManager" to return the scripted event manager pointer.
    - This native replicates "L4D2_GetCDirectorScriptedEventManager" used by other plugins.

    - Added 19 missing natives from L4D2Direct (L4D1 and L4D2):
    - "CTimer_Reset", "CTimer_Start", "CTimer_Invalidate", "CTimer_HasStarted", "CTimer_IsElapsed", "CTimer_GetElapsedTime", "CTimer_GetRemainingTime",
    - "CTimer_GetCountdownDuration", "ITimer_Reset", "ITimer_Start", "ITimer_Invalidate", "ITimer_HasStarted", "ITimer_GetElapsedTime",
    - "CTimer_GetDuration", "CTimer_SetDuration", "CTimer_GetTimestamp", "CTimer_SetTimestamp", "ITimer_GetTimestamp", "ITimer_SetTimestamp"

    - Fixed "L4D_OnTryOfferingTankBot" not returning a valid client index.
    - Thanks to "Mis" for requesting changes and reporting bugs.

1.13 (05-May-2020)
    - Added better error log message when gamedata file is missing.
    - Fixed "L4D2_OnEntityShoved" not detecting the last client. Thanks to "Addie" for reporting.
    - Made all natives optional from the include file. Thanks to "Psyk0tik" for requesting.
    - Optional natives can be set by plugins with "#undef REQUIRE_PLUGIN" before "#include <left4dhooks>" and "#define REQUIRE_PLUGIN" after.

1.12 (09-Apr-2020)
    - Added commands "sm_l4dd_detours" and "sm_l4dd_reload" as wrappers to "sm_l4dhooks_detours" and "sm_l4dhooks_reload".
    - Fixed command "sm_l4dhooks_detours" displaying the wrong forward, now also displays the plugin name using that forward.

1.11 (18-Mar-2020)
    - Added command "sm_l4dhooks_detours" to display which forwards are enabled.
    - Added missing natives: "L4D2Direct_GetPendingMobCount" and "L4D2Direct_SetPendingMobCount" from "raziEiL"'s port.
    - Fixed native "L4D2_GetVScriptOutput" using the provided buffer to execute code. Buffer now can be small to get small return values.
    - Optimized native "L4D2_GetVScriptOutput" to reuse the same entity for multiple calls in the same frame.
    - Maximum native "L4D2_GetVScriptOutput" code allowed seems to be 1006 characters.

1.10 (14-Mar-2020)
    - Added natives (L4D1 & L4D2): "L4D_IsAnySurvivorInStartArea", "L4D_IsInFirstCheckpoint" and "L4D_IsInLastCheckpoint".
    - Added native (L4D2 only): "L4D2_GetCurrentFinaleStage".
    - Thanks to "Nuki" for requesting.

    - Fixed missing "L4D2IWA_ClipSize" offset. Now this works: L4D2_SetIntWeaponAttribute("weapon_rifle", L4D2IWA_ClipSize, 100);
    - See include for details.

1.9 (10-Mar-2020)
    - Added native (L4D2 only): "L4D2_GetVScriptOutput" to execute VScript code and get return data.
    - This is modified from an example script I published on 29-Jun-2019: https://forums.alliedmods.net/showthread.php?t=317145

    - Added new natives (L4D2 only): "L4D2_ForceNextStage", "L4D2_IsTankInPlay" and "L4D2_GetFurthestSurvivorFlow"
    - Added new natives (L4D1 & L4D2): "L4D_HasAnySurvivorLeftSafeArea" and "L4D_IsAnySurvivorInCheckpoint".
    - See the "NATIVES - Silvers" section inside the include file for details.
    - Thanks to "Nuki" for requesting.

1.8 (08-Mar-2020)
    - Added AutoExecConfig to generate a cvars config saved to "cfgs/sourcemod/left4dhooks.cfg".
    - Loads signatures in "OnPluginStart" except "g_pGameRules" which can only load in "OnMapStart".
    - Thanks to "Accelerator74" for requesting and testing.
    - Fixed some wrong return types in the include file.

1.7 (04-Mar-2020)
    - Added natives "L4D_GetNearestNavArea" and "L4D_FindRandomSpot" to get a random spawn position.
    - Fixed native "L4D2Direct_GetFlowDistance" sometimes causing server crashes.
    - Fixed natives "L4D_IsFirstMapInScenario" and "L4D_IsMissionFinalMap" sometimes returning incorrect values. Thanks to "Accelerator74".

1.6 (02-Mar-2020)
    - Fixed the animation hook throwing an "Exception reported: Client is not connected" error.

    Thanks to "Accelerator74" for reporting:
    - Fixed Addons Disabler "l4d2_addons_eclipse" not working without any plugins using the forward to detour.
    - Fixed "L4D2Direct_GetVSWitchFlowPercent" and "L4D2Direct_SetVSWitchFlowPercent" natives.

1.5 (29-Feb-2020)
    - Added Director Variables to be rechecked:
    - Some of these only work in the Finale, some may only work outside of the Finale. L4D2 is weird.
        "SmokerLimit", "BoomerLimit", "HunterLimit", "SpitterLimit", "JockeyLimit", "ChargerLimit", "TankLimit",
        "DominatorLimit", "WitchLimit" and "CommonLimit".

        Challenge Mode variables, if required:
        "cm_MaxSpecials", "cm_BaseSpecialLimit", "cm_SmokerLimit", "cm_BoomerLimit", "cm_HunterLimit", "cm_SpitterLimit",
        "cm_JockeyLimit", "cm_ChargerLimit", "cm_TankLimit", "cm_DominatorLimit", "cm_WitchLimit" and "cm_CommonLimit".

    - Added Target Filters (thanks to "hoanganh810972" for reporting as missing):
        Survivors: "@s", "@surv", "@survivors"
        Specials:  "@i", "@infe", "@infected"
        Tanks:    "@t", "@tank", "@tanks"

    - Fixed native "L4D_CreateRescuableSurvivors" from not working. Now spawns all dead survivors into rescuable rooms.
    - Removed "L4D_OnGetRandomPZSpawnPosition" forward due to spawning specials at 0,0,0 when modifying any value.

1.4 (28-Feb-2020)
    - AnimHooks no longer affect the same client index if the previous user disconnected and someone else connected.
    - Clarified AnimHooks details in the include file. All AnimHooks are removed on map change.
    - Fixed L4D1: "Invalid Handle" errors caused by Director Variables fix. Thanks to "TiTz" for reporting.

1.3 (27-Feb-2020)
    - Added forward "L4D_OnGetRandomPZSpawnPosition" to display when the game selects a position.
    - Added native "L4D_GetRandomPZSpawnPosition" to select a random position.
    - Thanks to "Accelerator74" for requesting.

    - Added forward "L4D2_OnSelectTankAttackPre" to handle "ACT_*" activity numbers.
    - Changed "L4D2_OnSelectTankAttack" to use "m_nSequence" numbers instead, just like the extension did.
    - Changed the "AnimHook" functions to use "ACT_*" activity numbers (pre-hook) and "m_nSequence" animation number (post-hook).
    - Existing plugins using "L4D2_OnSelectTankAttack" no longer need to change anything.
    - Existing plugins with the new "AnimHook" hook can now use normal model "m_nSequence" sequence numbers in the post hook.
    - Thanks to "Accelerator74" for reporting the fix.

1.2 (27-Feb-2020)
    - Wildcarded the following signatures to be compatible with 3rd party plugin detours:
    - L4D2: "ChooseVictim", "GetSurvivorSet" and "ChangeFinaleStage".
    - Thanks to "xZk" for reporting.

1.1 (27-Feb-2020)
    - Added 26 new natives to L4D2 and 15 to L4D1 from "l4d2addresses.txt". Thanks to "Nuki" for suggesting.
    - See the "NATIVES - l4d2addresses.txt" section inside the include file for details.

    - Added 7 new natives to L4D2 and 5 to L4D1 from my plugins.
    - See the "NATIVES - Silvers" section inside the include file for details.

    - Fixed "L4D2_OnEndVersusModeRound" forwards triggering more than once per round. Thanks to "spumer" for reporting.
    - Fixed creating forwards and natives in the wrong place. Thanks to "Accelerator74" for reporting.
    - Fixed some signatures failing when other plugins detour them. Thanks to "hoanganh810972" for reporting.
    - Fixed cvar "l4d2_addons_eclipse" - values 0 and 1 now disable/enable addons unless otherwise handled.
    - Fixed not forwarding some Director Variables that were initialized too early. Thanks to "hoanganh81097" for reporting.
    - Thanks to "Spirit_12" for ideas with the Director Variables fix.
    - Removed unused actions from some forwards.

1.0 (24-Feb-2020)
    - Initial release.



Compiling/Updating Plugins:
For plugins changing from "left4downtown" or those using "l4d2_direct":
  • Replace include line: "<left4downtown>" with "<left4dhooks>"
  • Replace "<l4d2_direct>" with "<left4dhooks>" or remove the line if already replacing "<left4downtown>" with "<left4dhooks>"


Requirements:
  • Requires SourceMod 1.11+ due to various methodmaps.
  • Conflicts with Left4Downtown, remove the extension to run.
  • Optional: Use the Updater plugin to keep Left4DHooks updated to the latest version.


Installation:
  1. Download the .zip and extract the files to their respective folders in your servers \addons\sourcemod\ folder.


NOTICE:
  1. This plugin now requires SourceMod version 1.11 or newer.
  2. Upgrading SourceMod will benefit your server from improved stability, new features and fixes.
  3. Depending on the plugins using Left4DHooks, your server may no longer randomly crash, and some features now work properly without sometimes failing (known issues from SM 1.10 and less).

Silvers 02-24-2020 01:01

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Plugins Using This:






Other Plugins:
  • All original "left4downtown" plugins should work, they simply need to be recompiled changing the include "left4downtown" to "left4dhooks".

Psyk0tik 02-24-2020 02:51

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
This is epic!

Dragokas 02-24-2020 06:25

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Code:

                                  .''.     
      .''.      .        *''*    :_\/_:    .
      :_\/_:  _\(/_  .:.*_\/_*  : /\ :  .'.:.'.
  .''.: /\ :  ./)\  ':'* /\ * :  '..'.  -=:o:=-
 :_\/_:'.:::.    ' *''*    * '.\'/.' _\(/_'.':'.'
 : /\ : :::::    *_\/_*    -= o =-  /)\    '  *
  '..'  ':::'    * /\ *    .'/.\'.  '
      *            *..*        :
      *
        *


spumer 02-24-2020 10:04

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
You did not respect crash-protection for L4D2_OnEndVersusModeRound https://github.com/Attano/Left4Downt..._round.cpp#L42

This very usefull. And this is why i was add L4D2_OnEndVersusModeRound_Post hook
https://github.com/Attano/Left4Downtown2/pull/1

DragShot 02-24-2020 10:36

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Man, this feels like I'm watching the future itself become reality. I love it.

Spirit_12 02-24-2020 18:05

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
I remember when you actually took charge to start this project. Great to see it come to fruition. I feel like this need to be a revolving plugin with updates based on new natives.

Wait you actually implemented IsTeamFull native ? That's huge.

Silvers 02-24-2020 18:13

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Thanks.

Planning to add more natives from "l4d2addresses.txt" over the next few days.

Quote:

Originally Posted by spumer (Post 2684897)
You did not respect crash-protection

Will add.

Spirit_12 02-24-2020 19:34

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
1 Attachment(s)
Just gonna leave this here for now. I didn't have time to test and don't want to create a whole thread without testing. Feel free to try it out.

This is just a tiny plugin to showcase the L4D_OnLedgeGrabbed forward. Pretty much it allows you to control if a survivor will grab onto the ledge when they are being smoked or jocked.

Code:

"l4d2_lc",                                "1",        "On/Off for the plugin.
"l4d2_lc_jockey",                        "1",        "On/Off switch for Jockey ledge grab"
"l4d2_lc_smoker",                        "1",        "On/Off switch for Smoker ledge grab"


Accelerator 02-25-2020 03:40

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Very well! Great replacement left 4 downtown!

But the creation of natives and forwards is better to transfer to the function AskPluginLoad2. otherwise we get something like this:
Code:

L 02/25/2020 - 12:03:02: [SM] Unable to load plugin "l4d_scorefixesfinale.smx": Native "L4D_IsMissionFinalMap" was not found
L 02/25/2020 - 12:03:02: [SM] Unable to load plugin "l4d2_match_start.smx": Native "L4D_RestartScenarioFromVote" was not found
L 02/25/2020 - 12:03:02: [SM] Unable to load plugin "bossfixes.smx": Native "L4D2_SetVersusTankFlowPercent" was not found
L 02/25/2020 - 12:03:02: [SM] Unable to load plugin "CmdBalance.smx": Native "L4D2_SetVersusCampaignScores" was not found
L 02/25/2020 - 12:03:02: [SM] Unable to load plugin "TwoTanks.smx": Native "L4D2Direct_GetMapMaxFlowDistance" was not found

Correct it error :) (oldtank -> newtank)
Code:

                ThrowNativeError(SP_ERROR_PARAM, "Invalid oldtank client %d.", newtank);

hoanganh81097 02-25-2020 08:58

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Can u help me ? :D
Quote:

L 02/25/2020 - 05:58:10: [SM] Unable to load plugin "ai_jockeybehaviour.smx": Native "L4D_StaggerPlayer" was not found
L 02/25/2020 - 05:58:14: [left4dhooks.smx] Failed to load "ChooseVictim" signature.
L 02/25/2020 - 05:58:14: [left4dhooks.smx] Failed to load "StartMeleeSwing" signature.

SkiPlix 02-25-2020 14:43

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Seems this makes the server spawn more than one of each infected, even though the limit is set to 1 for each one).

Spirit_12 02-25-2020 18:09

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Quote:

Originally Posted by hoanganh81097 (Post 2684995)
Can u help me ? :D

Windows or Linux?

Quote:

Originally Posted by SkiPlix (Post 2685036)
Seems this makes the server spawn more than one of each infected, even though the limit is set to 1 for each one).

Which native or plugin are you using to spawn infected?

Silvers 02-25-2020 19:09

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Quote:

Originally Posted by Spirit_12 (Post 2684928)
Just gonna leave this here for now.

Nice one! Haven't tested yet but will put link to your plugin and any using left4dhooks in the 2nd post.


Quote:

Originally Posted by Accelerator74 (Post 2684958)
-

Thanks, forgot to move natives/fowards for release. All fixed next version.



Quote:

Originally Posted by Spirit_12 (Post 2685043)
Quote:

Originally Posted by hoanganh81097 (Post 2684995)
Can u help me ? :D

Windows or Linux?

Windows probably. Those functions already detoured by another plugin, so wildcarded first bytes. Fixed next update.

Almost done adding l4d2addresses natives. Over 30 new ones.



Quote:

Originally Posted by SkiPlix (Post 2685036)
Seems this makes the server spawn more than one of each infected, even though the limit is set to 1 for each one).

Doesn't make sense why this would occur, the plugin itself does nothing on it's own except detour various functions but only if they're being used. That itself is unlikely to cause this and possibly another plugin that's using forwards or natives provided by this? Or more likely not related to left4dhooks at all. Edit: sure you can probably override the limits by changing the type in some forwards (SpawnSpecial) or manually spawning. If you want a plugin to respect the limits write that into it. Not something I'll be doing for this as this plugin shouldn't reduce functionality by limiting anything.

hoanganh81097 02-26-2020 02:46

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Quote:

public Action L4D_OnGetScriptValueInt(const char[] key, int &retVal)
{
if (!InfectedAllowed && StrEqual(key, "MaxSpecials") && SiSpMore.BoolValue && AutoDifficulty.BoolValue)
{
retVal = MaxSpecials;
return Plugin_Handled;
}
return Plugin_Continue;
}
Without l4dt. Plugin cant spawn more SI. Can you help me replace this with left4dhooks ?

Spirit_12 02-26-2020 18:07

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Quote:

Originally Posted by hoanganh81097 (Post 2685061)
Without l4dt. Plugin cant spawn more SI. Can you help me replace this with left4dhooks ?

It is the same native, so I feel like something else might be a miss on the plugin. Can you link the actual plugin, so maybe we can look up the code?

hoanganh81097 02-26-2020 19:36

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
1 Attachment(s)
Quote:

Originally Posted by Spirit_12 (Post 2685147)
It is the same native, so I feel like something else might be a miss on the plugin. Can you link the actual plugin, so maybe we can look up the code?

Of course :D :
Attachment 179923

Silvers 02-26-2020 19:46

Re: [L4D & L4D2] Left 4 DHooks Direct (1.0) [24-Feb-2020]
 
Quote:

Originally Posted by hoanganh81097 (Post 2685061)
Without l4dt. Plugin cant spawn more SI. Can you help me replace this with left4dhooks ?

So for now this is a limitation with the plugin version. The extension seems to be loaded before the director processes variables while plugins load after.

Might have a solution for version 1.2+ by calling the variables to be read again, or providing a native to force specified variable keys to be read again in turn firing the forward. The latter would require changes to existing plugins whose variables are processed too early for the plugin detours/forwards. The latter would also be easier and guaranteed while the former might only work on specific variables being called to re-check.

An ugly solution would be storing a list of all variables (or at least known ones required or processed before the plugin) and calling them all to be rechecked thereby firing the GetScript* forwards. I'm tempted to go with this method which saves numerous additional signatures or modifications to existing plugins. Very tempted to add this, might even for 1.1

Will release 1.1 next few hours once I finish the notes on it.

Silvers 02-27-2020 00:04

Re: [L4D & L4D2] Left 4 DHooks Direct (1.1) [27-Feb-2020]
 
Code:

1.1 (27-Feb-2020)
    - Added 26 new natives to L4D2 and 15 to L4D1 from "l4d2addresses.txt". Thanks to "Nuki" for suggesting.
    - See the "NATIVES - l4d2addresses.txt" section inside the include file for details.

    - Added 7 new natives to L4D2 and 5 to L4D1 from my plugins.
    - See the "NATIVES - Silvers" section inside the include file for details.

    - Fixed "L4D2_OnEndVersusModeRound" forwards triggering more than once per round. Thanks to "spumer" for reporting.
    - Fixed creating forwards and natives in the wrong place. Thanks to "Accelerator74" for reporting.
    - Fixed some signatures failing when other plugins detour them. Thanks to "hoanganh810972" for reporting.
    - Fixed cvar "l4d2_addons_eclipse" - values 0 and 1 now disable/enable addons unless otherwise handled.
    - Fixed not forwarding some Director Variables that were initialized too early. Thanks to "hoanganh81097" for reporting.
    - Thanks to "Spirit_12" for ideas with the Director Variables fix.
    - Removed unused actions from some forwards.

    - Plugin, GameData and Include files updated.



Quote:

Originally Posted by hoanganh81097 (Post 2685061)
Without l4dt. Plugin cant spawn more SI. Can you help me replace this with left4dhooks ?

This should now be fixed.


Any additional director variables initialized too early and not being changed please let me know and I can add these in.

Accelerator 02-27-2020 00:28

Re: [L4D & L4D2] Left 4 DHooks Direct (1.1) [27-Feb-2020]
 
Code:

public Action:OnPlayerRunCmd(client, &buttons, &impulse, Float:vel[3], Float:angles[3], &weapon)
{
        if (!buttons)
                return Plugin_Continue;
       
        if (!IsClientInGame(client) || IsFakeClient(client) || GetClientTeam(client) != 3
                || GetEntProp(client, Prop_Send, "m_zombieClass") != 8)
                        return Plugin_Continue;
       
        if (buttons & IN_RELOAD)
        {
                g_iQueuedThrow[client] = 3; //two hand overhand
                buttons |= IN_ATTACK2;
        }
        else if (buttons & IN_USE)
        {
                g_iQueuedThrow[client] = 2; //underhand
                buttons |= IN_ATTACK2;
        }
        else
        {
                g_iQueuedThrow[client] = 1; //one hand overhand
        }
       
        return Plugin_Continue;
}

public Action:L4D2_OnSelectTankAttack(client, &sequence)
{
        if ((sequence == 761 || sequence == 762) && g_iQueuedThrow[client])
        {
                //rock throw
                sequence = g_iQueuedThrow[client] + 48;
                return Plugin_Handled;
        }
        return Plugin_Continue;
}

I don’t understand what I'm doing wrong, but it doesn’t work) The rock throw animation is just buggy.

Silvers 02-27-2020 00:47

Re: [L4D & L4D2] Left 4 DHooks Direct (1.1) [27-Feb-2020]
 
PHP Code:

sequence g_iQueuedThrow[client] + 760

Code:

#define L4D2_ACT_HULK_THROW                        761
#define L4D2_ACT_TANK_OVERHEAD_THROW                762
#define L4D2_ACT_HULK_ATTACK_LOW                763
#define L4D2_ACT_TERROR_ATTACK_MOVING                790

#define L4D1_ACT_HULK_THROW                        1254
#define L4D1_ACT_TANK_OVERHEAD_THROW                1255
#define L4D1_ACT_HULK_ATTACK_LOW                1256
#define L4D1_ACT_TERROR_ATTACK_MOVING                1282

The demo plugin has an example that modifies tank throw to always use the under arm throw anim.

Remember these are not models "m_nSequence" but the "ACT_*" sequence numbers.



EDIT: Thanks to Accelerator74 for pointing out the extension used a posthook instead which corresponds to the actual models "m_nSequence" number while the prehook handles the "ACT_*" values. So I'll be adding changing the current animation hooks to append "Pre" to their forward names, and adding the post hooks to use the current forward names, this will maintain expected behaviour like the extension without plugins needing to modify anything.



This whole project has taken over 3 weeks, over 200 hours. I rushed through without looking closely at everything and wondered why the animation was using "ACT_*" instead of "m_nSequence", should have looked again more closely.

Ja-Forces 02-27-2020 00:48

Re: [L4D & L4D2] Left 4 DHooks Direct (1.1) [27-Feb-2020]
 
Great job! Useful Stuff :)

Silvers 02-27-2020 05:33

Re: [L4D & L4D2] Left 4 DHooks Direct (1.3) [27-Feb-2020]
 
Another major change:

Code:

1.3 (27-Feb-2020)
    - Added forward "L4D_OnGetRandomPZSpawnPosition" to display when the game selects a position.
    - Added native "L4D_GetRandomPZSpawnPosition" to select a random position.
    - Thanks to "Accelerator74" for requesting.

    - Added "L4D2_OnSelectTankAttackPre" forward to handle "ACT_*" activity numbers.
    - Changed "L4D2_OnSelectTankAttack" to use "m_nSequence" numbers instead, just like the extension did.
    - Changed the "AnimHook" functions to use "ACT_*" activity numbers (pre-hook) and "m_nSequence" animation number (post-hook).
    - Existing plugins using "L4D2_OnSelectTankAttack" no longer need to change anything.
    - Existing plugins with the new "AnimHook" hook can now use normal model "m_nSequence" sequence numbers in the post hook.
    - Thanks to "Accelerator74" for reporting the fix.

    - Updated: Test plugin to demonstrate each change.
    - Updated: Plugin, Include and GameData files.


Kai0205 02-27-2020 06:07

Re: [L4D & L4D2] Left 4 DHooks Direct (1.3) [27-Feb-2020]
 
I'm so sorry that I don't understand English, I want to ask something briefly.
This plugin will replace "[L4D2] Left 4 Downtown 2" ?

hoanganh81097 02-27-2020 06:51

Re: [L4D & L4D2] Left 4 DHooks Direct (1.3) [27-Feb-2020]
 
native L4D_OnGetScriptValueInt still wont work. Plugin cant spawn more "MaxSpecials" :(

TiTz 02-27-2020 08:52

Re: [L4D & L4D2] Left 4 DHooks Direct (1.3) [27-Feb-2020]
 
Hi Silvers,

Just installed this on my L4D1 server - sourcemod 1.10 and installed DHooks (Dynamic Hooks - Dev Preview) as instructed.

But on booting the server I got this error:

L 02/27/2020 - 13:37:16: [SM] Exception reported: Invalid Handle 0 (error 4)
L 02/27/2020 - 13:37:16: [SM] Blaming: left4dhooks.smx
L 02/27/2020 - 13:37:16: [SM] Call stack trace:
L 02/27/2020 - 13:37:16: [SM] [0] SDKCall
L 02/27/2020 - 13:37:16: [SM] [1] Line 1370, C:\Servers\L4D2\left4dead2\addons\sourcemod\s cripting\left4dhooks.sp::OnMapStart

Regards

TiTz

Sev 02-27-2020 09:23

Re: [L4D & L4D2] Left 4 DHooks Direct (1.3) [27-Feb-2020]
 
Very innovative stuff here.

Like the AI for plugins really.

Now all we need is...

1. Randomized witch behavior...standing or sitting at random...aggro to silent and vice versa
2. Create a survivor
3. Driveable Jimmy Gibbs car and other vehicles like the helicopter
4. Survivors can lock doors/SI can open doors without needing to bust them down
5. Playable common infected

Dragokas 02-27-2020 13:45

Re: [L4D & L4D2] Left 4 DHooks Direct (1.3) [27-Feb-2020]
 
offtopic.

Quote:

Originally Posted by Sev (Post 2685191)
1. Randomized witch behavior...standing or sitting at random...

this is already done: Drunked witch.

xZk 02-27-2020 14:30

Re: [L4D & L4D2] Left 4 DHooks Direct (1.3) [27-Feb-2020]
 
Quote:

Originally Posted by hoanganh81097 (Post 2685182)
native L4D_OnGetScriptValueInt still wont work. Plugin cant spawn more "MaxSpecials" :(

try this: https://forums.alliedmods.net/showthread.php?p=2535972

Silvers 02-27-2020 16:15

Re: [L4D & L4D2] Left 4 DHooks Direct (1.3) [27-Feb-2020]
 
Quote:

Originally Posted by Kai0205 (Post 2685181)
I'm so sorry that I don't understand English, I want to ask something briefly.
This plugin will replace "[L4D2] Left 4 Downtown 2" ?

Yes.


Quote:

Originally Posted by TiTz (Post 2685189)
But on booting the server I got this error

Thanks, fixed. Forgot to add a check to exclude L4D1 from Director Variables fix.


Quote:

Originally Posted by hoanganh81097 (Post 2685182)
native L4D_OnGetScriptValueInt still wont work. Plugin cant spawn more "MaxSpecials" :(

Well it's definitely being read again. Maybe the director already has the value and won't change when reading a new one, but that doesn't seem right since on some maps the var is triggered many times during gameplay and dynamically changed.

Edit: so I added this to test, used z_spawn hunter, and it was limiting the number of special infected allowed to spawn. Each time I used z_spawn it would trigger "MaxSpecials" below. See the results:
PHP Code:

public Action L4D_OnGetScriptValueInt(const char[] keyint &retVal)
{
    if (
StrEqual(key"MaxSpecials") )
    {
        
PrintToServer("TEST_FWD ############## %s %d"keyretVal);
        
retVal = -1// No specials can spawn.
        
retVal 0// 1 special can spawn.
        
retVal 1// 2 specials can spawn.
        
return Plugin_Handled;
    }
    return 
Plugin_Continue;


It's strange setting the value to 1 less than the amount you want to spawn, but that's just how it seems to work. That's the games odd behaviour, left4dhooks isn't randomly setting -1 on the variable you change.

When left4dhooks starts, it calls the variable "MaxSpecials" which triggers the "L4D_OnGetScriptValueInt" forward with "MaxSpecials" variable.

If there are any other director variables not being set because they're triggered too early let me know and I'll add them to also trigger forwards when the plugin starts.




Updated:
Code:

1.4 (28-Feb-2020)
    - AnimHooks no longer affect the same client index if the previous user disconnected and someone else connected.
    - Clarified AnimHooks details in the include file. All AnimHooks are removed on map change.
    - Fixed L4D1: "Invalid Handle" errors caused by Director Variables fix. Thanks to "TiTz" for reporting.


hoanganh81097 02-28-2020 01:50

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
Thank Silvers for supporting.
It seems to be worked. But i need to test more. Maybe my plugin cant work or maybe native L4D_OnGetScriptValueInt with sm 1.10
Can you share left4dhooks 1.9 ?. I cant compile with sm 1.9. I need this to test.
Code:

[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(210) : error 139: could not find type "PrivateForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(211) : error 139: could not find type "PrivateForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(224) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(225) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(226) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(227) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(228) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(229) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(230) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(231) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(232) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(233) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(234) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(235) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(236) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(237) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(238) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(239) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(240) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(241) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(242) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(243) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(244) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(245) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(246) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]    scripting 1.09\left4dhooks.sp(247) : error 139: could not find type "GlobalForward"
[28/2/2020 1:50:06 PM]   
[28/2/2020 1:50:06 PM]    Compilation aborted.
[28/2/2020 1:50:06 PM]    26 Errors.
[28/2/2020 1:50:06 PM]   
[28/2/2020 1:50:06 PM] Compiling failed! Compiled output file can not be found!


Silvers 02-28-2020 08:57

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
Quote:

Originally Posted by hoanganh81097 (Post 2685258)
Thank Silvers for supporting.
It seems to be worked. But i need to test more. Maybe my plugin cant work or maybe native L4D_OnGetScriptValueInt with sm 1.10
Can you share left4dhooks 1.9 ?. I cant compile with sm 1.9.

No. :rtfm:

Quote:

Originally Posted by Silvers (Post 2684862)
Requires SourceMod 1.10 due to various methodmaps. Done this to force servers to update. Can work on SM 1.9 but requires reverting methodmaps code and variable types. Instead you should just upgrade SM to benfit from fixes, improvements, and new features.


hoanganh81097 02-28-2020 09:30

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
1 Attachment(s)
Nevermind, after few test ...
"MaxSpecials" always become "n" when i change value
PHP Code:

public Action L4D_OnGetScriptValueInt(const char[] keyint &retVal)
{
    if (
StrEqual(key"MaxSpecials") )
    {
        
PrintToServer("TEST_FWD ############## %s %d"keyretVal);
        
retVal = -1// No specials can spawn.
        
retVal 0// 1 special can spawn.
        
retVal 1// 2 specials can spawn.  -------n is here
        
return Plugin_Handled;
    }
    return 
Plugin_Continue;


It seems impossible to change "MaxSpecials" based on Survivors like l4d_superversus. ( but can work with l4dt - code line 1330 ) :(
Attachment 179929
sorry for my bad english.

Silvers 02-28-2020 10:07

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
This was just an example... Use the original plugin you were using to modify the value. Or use the above and change N to the value you want, I mean seriously c'mon what do you expect.

hoanganh81097 02-28-2020 11:17

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
Sorry about that. I have to reconfig my plugin and now "MaxSpecials" worked with l4dhooks :D
But i have an another problem.
When "MaxSpecials" change, "BoomerLimit", "SmokerLimit" , ... changed = "MaxSpecials" value
I tried change cvar z_boomer_limit = 1, ... but not work.
Example :
"MaxSpecials" become 10. So "BoomerLimit" become 10 too. But z_boomer_limit still 1

Beside, can you add special targets just use them in a command. e.g. sm_kick @infected or !slay @survivors like L4dt ? :D
Thank you !

Silvers 02-28-2020 11:54

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
Quote:

Originally Posted by hoanganh81097 (Post 2685297)
Beside, can you add special targets just use them in a command. e.g. sm_kick @infected or !slay @survivors like L4dt ? :D
Thank you !

I didn't notice the extension provided this. I'll also add next update, thanks.

Quote:

Originally Posted by hoanganh81097 (Post 2685297)
When "MaxSpecials" change, "BoomerLimit", "SmokerLimit" , ... changed = "MaxSpecials" value
I tried change cvar z_boomer_limit = 1, ... but not work.

This is what I was wondering. In the source these lines commented out, you can uncomment the lines and recompile. I'll do this in the next update for all "Limit" vars, to force them to trigger the forward like "MaxSpecials" does.


Edit: I've tried setting "BoomerLimit" and "TotalHunters" using various methods but they don't seem to have any affect. Are you sure these actually used to work? Edit: Thanks to "hoanganh81097" for helping test, the games *Limit director variables don't seem to work just like the cvars are broken... see Edit3.

Edit2: I've written a plugin to use the "z_*_limit" cvars and prevent spawning specific zombie classes when their limit has reached, will release soon.

Edit3: the *Limit director variables for special infected works in Finale but not the "MaxSpecials" lol, for bots anyway. This game is crazy.

spumer 02-29-2020 11:32

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
It will be great see this project on github. This allow track all changes and they history :)
May be someone create issues or make own PR

Silvers 02-29-2020 13:01

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
Quote:

Originally Posted by spumer (Post 2685389)
It will be great see this project on github. This allow track all changes and they history :)
May be someone create issues or make own PR

Maybe one day, I find github confusing and dunno how to use it (haven't tried in years).


Update:
Code:

1.5 (29-Feb-2020)
    - Added Director Variables to be rechecked:
    - Some of these only work in the Finale, some may only work outside of the Finale. L4D2 is weird.
        "SmokerLimit", "BoomerLimit", "HunterLimit", "SpitterLimit", "JockeyLimit", "ChargerLimit", "TankLimit",
        "DominatorLimit", "WitchLimit" and "CommonLimit".

        Challenge Mode variables, if required:
        "cm_MaxSpecials", "cm_BaseSpecialLimit", "cm_SmokerLimit", "cm_BoomerLimit", "cm_HunterLimit", "cm_SpitterLimit",
        "cm_JockeyLimit", "cm_ChargerLimit", "cm_TankLimit", "cm_DominatorLimit", "cm_WitchLimit" and "cm_CommonLimit".

    - Added Target Filters (thanks to "hoanganh810972" for reporting as missing):
        Survivors: "@s", "@surv", "@survivors"
        Specials:  "@i", "@infe", "@infected"
        Tanks:    "@t", "@tank", "@tanks"

    - Fixed "L4D_CreateRescuableSurvivors" native from not working. Now spawns all dead survivors into rescuable rooms.
    - Removed "L4D_OnGetRandomPZSpawnPosition" forward due to spawning specials at 0,0,0 when modifying any value.

    - Updated: Test plugin to reflect above changes.
    - Updated: Plugin, Include and GameData files.


Plugin, gamedata and include files should be updated.

hoanganh81097 02-29-2020 13:53

Re: [L4D & L4D2] Left 4 DHooks Direct (1.4) [28-Feb-2020]
 
Quote:

Originally Posted by Silvers (Post 2685396)
Maybe one day, I find github confusing and dunno how to use it (haven't tried in years).


Update:
Code:

1.5 (29-Feb-2020)
    - Added Director Variables to be rechecked:
    - Some of these only work in the Finale, some may only work outside of the Finale. L4D2 is weird.
        "SmokerLimit", "BoomerLimit", "HunterLimit", "SpitterLimit", "JockeyLimit", "ChargerLimit", "TankLimit",
        "DominatorLimit", "WitchLimit" and "CommonLimit".

        Challenge Mode variables, if required:
        "cm_MaxSpecials", "cm_BaseSpecialLimit", "cm_SmokerLimit", "cm_BoomerLimit", "cm_HunterLimit", "cm_SpitterLimit",
        "cm_JockeyLimit", "cm_ChargerLimit", "cm_TankLimit", "cm_DominatorLimit", "cm_WitchLimit" and "cm_CommonLimit".

    - Added Target Filters (thanks to "hoanganh810972" for reporting as missing):
        Survivors: "@s", "@surv", "@survivors"
        Specials:  "@i", "@infe", "@infected"
        Tanks:    "@t", "@tank", "@tanks"

    - Fixed "L4D_CreateRescuableSurvivors" native from not working. Now spawns all dead survivors into rescuable rooms.
    - Removed "L4D_OnGetRandomPZSpawnPosition" forward due to spawning specials at 0,0,0 when modifying any value.

    - Updated: Test plugin to reflect above changes.
    - Updated: Plugin, Include and GameData files.


Plugin, gamedata and include files should be updated.

<3 excellent, thank you !!!

Silvers 03-01-2020 21:06

Re: [L4D & L4D2] Left 4 DHooks Direct (1.6) [02-Mar-2020]
 
Code:

1.6 (02-Mar-2020)
    - Fixed the animation hook throwing an "Exception reported: Client is not connected" error.

    Thanks to "Accelerator74" for reporting:
    - Fixed Addons Disabler "l4d2_addons_eclipse" not working without any plugins using the forward to detour.
    - Fixed "L4D2Direct_GetVSWitchFlowPercent" and "L4D2Direct_SetVSWitchFlowPercent" natives.



All times are GMT -4. The time now is 17:15.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.