• A way to ensure hook is called last
    3 replies, posted
I need my hook added with hook.Add to be called after all other hooks. Like a way to make them the lowest priority. Any ideas?
Not with the current [URL="https://github.com/garrynewman/garrysmod/blob/master/garrysmod/lua/includes/modules/hook.lua"]hook[/URL] system, it uses pairs to loop through the stored hooks so the order is undefined. ulx modifies the hook system [url]https://github.com/Nayruden/Ulysses/blob/master/ulib/lua/ulib/shared/hook.lua[/url] to add a priority argument to group hooks, I'm not sure on other admin addons.
This might work: [lua]local oldhookfunc = GAMEMODE.PlayerDeath -- obviously replace PlayerDeath with the hook you need function GAMEMODE:PlayerDeath(victim, inflictor, attacker, whatever) local ret = nil if oldhookfunc then ret = oldhookfunc(victim, inflictor, attacker, whatever) end -- Your code here return ret end[/lua] Untested, YMMV.
Hm well I can't modify the hook system myself because then it might conflict with ulx. I don't want to detour gamemode functions if I don't have to since there's no telling what problems that might cause. Lua orders it's keys by their hash value right? What if I can find a string with a high hash value. [editline]13th April 2016[/editline] I guess this is my solution. [lua] --Ensure that SF hooks are called after all other hooks. local detour = GAMEMODE[ hookname ] if detour then GAMEMODE[ hookname ] = function ( self, ... ) local a, b, c, d, e, f = detour( self, ... ) if ( a != nil ) then return a, b, c, d, e, f else return run( lower, customfunc, ... ) end end else GAMEMODE[ hookname ] = function ( self, ... ) return run( lower, customfunc, ... ) end end [/lua]
Sorry, you need to Log In to post a reply to this thread.