Skip to content

Commit

Permalink
Fixes and new patches
Browse files Browse the repository at this point in the history
  • Loading branch information
unknown-gd committed Mar 2, 2024
1 parent 4c198b4 commit c091ddd
Showing 1 changed file with 109 additions and 51 deletions.
160 changes: 109 additions & 51 deletions lua/autorun/!!!random-patches.yue
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
-- ULib support ( I really don't like this )
if file.Exists( "ulib/shared/hook.lua", "LUA" )
include( "ulib/shared/hook.lua" )

hook_Add, hook_Remove = hook.Add, hook.Remove
HOOK_MONITOR_HIGH = HOOK_MONITOR_HIGH
PRE_HOOK = PRE_HOOK or HOOK_MONITOR_HIGH
color_white = color_white
CurTime = CurTime
:Simple = timer
CLIENT = CLIENT
SERVER = SERVER
pairs = pairs

addonName = "Random Patches v5.16.0"
addonName = "Random Patches v5.17.0"

getHookName = ( patchName, hookName ) ->
return addonName .. "::" .. patchName .. ( hookName or "" )
Expand Down Expand Up @@ -102,6 +106,47 @@ do

return tbl[ index ], index

do

hook_Remove( "OnEntityCreated", "player.Iterator" )
hook_Remove( "EntityRemoved", "player.Iterator" )

hook_Remove( "OnEntityCreated", "ents.Iterator" )
hook_Remove( "EntityRemoved", "ents.Iterator" )

iterator = ipairs( {} )

players = nil
do

:GetAll = player

player.Iterator = ->
if players == nil
players = GetAll!

return iterator, players, 0

entities = nil
do

:GetAll = ents

ents.Iterator = ->
if entities == nil
entities = GetAll!

return iterator, entities, 0

invalidateCache = ( entity ) ->
if entity\IsPlayer!
players = nil

entities = nil

hook_Add( "OnEntityCreated", "player/ents.Iterator", invalidateCache, PRE_HOOK )
hook_Add( "EntityRemoved", "player/ents.Iterator", invalidateCache, PRE_HOOK )

do

:yield = coroutine
Expand Down Expand Up @@ -155,10 +200,12 @@ do

cache = {}

hook_Add "EntityRemove", getHookName( "Entity.GetTable" ), ( entity ) ->
hook_Add( "EntityRemove", getHookName( "Entity.GetTable" ), ( entity ) ->
Simple 0, ->
cache[ entity ] = nil

PRE_HOOK )

getTable = ( entity ) ->
if cache[ entity ] == nil
cache[ entity ] = getCTable( entity ) or {}
Expand Down Expand Up @@ -189,14 +236,13 @@ do
:Weapon = registry

Weapon.__index = ( key ) =>
if key == "Owner"
return GetOwner( @ )

value = Weapon[ key ]
if value == nil
value = ENTITY[ key ]
if value == nil
return getTable( @ )[ key ]
value = getTable( @ )[ key ]
if value == nil and key == "Owner"
return GetOwner( @ )

return value

Expand Down Expand Up @@ -606,12 +652,14 @@ do
Register( "Player Shoot Position Fix", ( hookName ) ->
:GetShootPos = PLAYER

hook_Add "SetupMove", hookName, =>
hook_Add( "SetupMove", hookName, =>
if IsBot( @ ) or not Alive( @ )
return

@m_RealShootPos = GetShootPos( @ )

PRE_HOOK )

hook_Add "EntityFireBullets", hookName, ( data ) =>
if not @IsPlayer! or IsBot( @ ) or not Alive( @ )
return
Expand All @@ -631,7 +679,7 @@ do
gameevent.Listen( "player_hurt" )
Player = Player

hook_Add "player_hurt", getHookName( "Player Decals Fix" ), ( data ) ->
hook_Add( "player_hurt", getHookName( "Player Decals Fix" ), ( data ) ->
health = data.health
if health > 0
return
Expand All @@ -642,6 +690,8 @@ do
if IsValid( ply )
ply\RemoveAllDecals!

PRE_HOOK )

-- Trying to start a new lag compensation session while one is already active!
-- Source: https://github.com/Heyter/glua-turbo/blob/main/2_random_patches.lua
do
Expand All @@ -657,21 +707,22 @@ do
cLagCompensation( @, bool )

hook_Add "PlayerFootstep", getHookName( "Player Footstep Fix" ), =>
if @IsOnGround!
return

return true
unless @IsOnGround!
return true

do

MOVETYPE_NOCLIP = MOVETYPE_NOCLIP
IN_DUCK = IN_DUCK

hook_Add "StartCommand", getHookName( "Air Crouching Fix" ), ( cmd ) =>
hook_Add( "StartCommand", getHookName( "Air Crouching Fix" ), ( cmd ) =>
if @GetMoveType! == MOVETYPE_NOCLIP or @IsOnGround! or cmd\KeyDown( IN_DUCK ) or not @Crouching!
return

cmd\AddKey( IN_DUCK )
return

PRE_HOOK )

if SERVER

Expand Down Expand Up @@ -715,32 +766,13 @@ if SERVER
if IsBot( @ ) or @IsListenServerHost! or @IsFullyAuthenticated!
return

@Kick( "Your SteamID wasn\'t fully authenticated, try restart your Steam client." ),
HOOK_MONITOR_HIGH ),
@Kick( "Your SteamID wasn\'t fully authenticated, try restart your Steam client." )
return
PRE_HOOK ),
( hookName ) ->
hook_Remove "PlayerInitialSpawn", hookName
)

-- https://github.com/Facepunch/garrysmod-issues/issues/2447
-- Source: https://github.com/SuperiorServers/dash/blob/master/lua/dash/extensions/player.lua#L44-L57
do

hookName = getHookName( "Player SetPos" )
:SetPos = ENTITY
players = {}

PLAYER.SetPos = ( origin ) =>
players[ @ ] = origin

hook_Add "PlayerDisconnected", hookName, =>
players[ @ ] = nil

hook_Add "FinishMove", hookName, =>
if players[ @ ] ~= nil
SetPos( @, players[ @ ] )
players[ @ ] = nil
return true

:GetInternalVariable = ENTITY

do
Expand All @@ -756,7 +788,7 @@ if SERVER
}

start = ->
hook_Add "EntityRemoved", hookName, ( entity ) ->
hook_Add( "EntityRemoved", hookName, ( entity ) ->
unless classes[ GetClass( entity ) ]
return

Expand All @@ -769,23 +801,28 @@ if SERVER
SetSaveValue( portal, "target", "" )
Fire( portal, "open" )

PRE_HOOK )

stop = ->
hook_Remove "EntityRemoved", hookName

hook_Add "PreCleanupMap", hookName, stop
hook_Add "PostCleanupMap", hookName, start
hook_Add "ShutDown", hookName, stop
hook_Add "PostCleanupMap", hookName, start, PRE_HOOK
hook_Add "PreCleanupMap", hookName, stop, PRE_HOOK
hook_Add "ShutDown", hookName, stop, PRE_HOOK
start!

do

SOLID_VPHYSICS = SOLID_VPHYSICS

hook_Add "PlayerSpawnedSENT", getHookName( "HL2 Chargers Physics" ), ( _, entity ) ->
hook_Add( "PlayerSpawnedSENT", getHookName( "HL2 Chargers Physics" ), ( _, entity ) ->
className = GetClass( entity )
if className == "item_suitcharger" or className == "item_healthcharger"
entity\PhysicsInit( SOLID_VPHYSICS )
entity\PhysWake!
return

PRE_HOOK )

-- Little optimization idea by Billy (used in voicebox)
-- "for something that really shouldn't be O(n)"
Expand All @@ -806,45 +843,59 @@ if SERVER
hookName, cacheFunc = getHookName( "UserID Cache" ), =>
@m_bUserID = cUserID( @ )

hook_Add "PlayerInitialSpawn", hookName, cacheFunc, HOOK_MONITOR_HIGH
hook_Add "PlayerAuthed", hookName, cacheFunc, HOOK_MONITOR_HIGH
hook_Add "PlayerInitialSpawn", hookName, cacheFunc, PRE_HOOK
hook_Add "PlayerAuthed", hookName, cacheFunc, PRE_HOOK

-- https://github.com/Facepunch/garrysmod-issues/issues/2452
do

hookName = getHookName( "Pod Performance Fix" )
EFL_NO_THINK_FUNCTION = EFL_NO_THINK_FUNCTION

hook_Add "OnEntityCreated", hookName, ( entity ) ->
hook_Add( "OnEntityCreated", hookName, ( entity ) ->
if GetClass( entity ) == "prop_vehicle_prisoner_pod"
entity\AddEFlags( EFL_NO_THINK_FUNCTION )

hook_Add "PlayerLeaveVehicle", hookName, ( _, entity ) ->
PRE_HOOK )

hook_Add( "PlayerLeaveVehicle", hookName, ( _, entity ) ->
if GetClass( entity ) == "prop_vehicle_prisoner_pod"
hook_Add "Think", entity, ->
hook_Add( "Think", entity, ->
hook_Remove "Think", entity

if GetInternalVariable( entity, "m_bEnterAnimOn" ) or GetInternalVariable( entity, "m_bExitAnimOn" )
return

entity\AddEFlags( EFL_NO_THINK_FUNCTION )
return

PRE_HOOK )
return

hook_Add "PlayerEnteredVehicle", hookName, ( _, entity ) ->
PRE_HOOK )

hook_Add( "PlayerEnteredVehicle", hookName, ( _, entity ) ->
if GetClass( entity ) == "prop_vehicle_prisoner_pod"
entity\RemoveEFlags( EFL_NO_THINK_FUNCTION )
hook_Remove "Think", entity
return

PRE_HOOK )

-- Fixes for prop_vehicle_prisoner_pod, worldspawn (and other not Valid but not NULL entities) damage taking (bullets only)
-- Explosive damage only works if is located in front of prop_vehicle_prisoner_pod (wtf?)
do

:TakePhysicsDamage = ENTITY

hook_Add "EntityTakeDamage", getHookName( "prop_vehicle_prisoner_pod Damage Fix" ), ( entity, damageInfo ) ->
hook_Add( "EntityTakeDamage", getHookName( "prop_vehicle_prisoner_pod Damage Fix" ), ( entity, damageInfo ) ->
if GetClass( entity ) ~= "prop_vehicle_prisoner_pod" or entity.AcceptDamageForce
return

TakePhysicsDamage( entity, damageInfo )
return

PRE_HOOK )

if CLIENT and not MENU_DLL

Expand All @@ -858,7 +909,7 @@ if CLIENT and not MENU_DLL

values, name, old, new = {}, "", "", ""

hook_Add "server_cvar", "cvars.OnConVarChanged", ( data ) ->
hook_Add( "server_cvar", "cvars.OnConVarChanged", ( data ) ->
name, new = data.cvarname, data.cvarvalue

old = values[ name ]
Expand All @@ -875,6 +926,8 @@ if CLIENT and not MENU_DLL
OnConVarChanged( name, old, new )
return

PRE_HOOK )

-- Speeding up LocalPlayer
do

Expand Down Expand Up @@ -967,7 +1020,7 @@ if CLIENT and not MENU_DLL
IN_ATTACK, IN_ATTACK2 = IN_ATTACK, IN_ATTACK2
lastNoFocusTime = 0

hook_Add "CreateMove", getHookName( "Focus Attack Fix" ), ( cmd ) ->
hook_Add( "CreateMove", getHookName( "Focus Attack Fix" ), ( cmd ) ->
if ( CurTime! - lastNoFocusTime ) < 0.25
cmd\RemoveKey( IN_ATTACK )
cmd\RemoveKey( IN_ATTACK2 )
Expand All @@ -977,12 +1030,14 @@ if CLIENT and not MENU_DLL

lastNoFocusTime = CurTime!

PRE_HOOK )

do

:IsGameUIVisible, :ActivateGameUI, :HideGameUI = gui

lastState = nil
hook_Add "Think", getHookName( "False Screen Capture Fix" ), ->
hook_Add( "Think", getHookName( "False Screen Capture Fix" ), ->
if HasFocus!
if lastState ~= nil
if lastState
Expand All @@ -994,6 +1049,9 @@ if CLIENT and not MENU_DLL
lastState = not IsGameUIVisible!
if lastState
ActivateGameUI!
return

PRE_HOOK )

MsgC( SERVER and Color( 50, 100, 250 ) or Color( 250, 100, 50 ), "[" .. addonName .. "] ", color_white, table.Random( {
"Here For You ♪", "Game Patched!", "OK", "Successfully initialized!",
Expand Down

0 comments on commit c091ddd

Please sign in to comment.