WoW:API hooksecurefunc: Difference between revisions
Jump to navigation
Jump to search
m
no edit summary
No edit summary |
mNo edit summary |
||
Line 1: | Line 1: | ||
{{wowapi}}__NOTOC__ | {{wowapi}}__NOTOC__ | ||
Creates a secure 'post hook' for the named function. | Creates a secure 'post hook' for the named function. Your hook will be called with the same arguments, but will not be able to affect the outcome of the original call. | ||
hooksecurefunc([table,] "functionName", hookfunc) | hooksecurefunc([table,] "functionName", hookfunc) | ||
=== | ==Parameters== | ||
:;table : | ===Arguments=== | ||
:;table : Optional Table - if you're hooking a function on an object, provide a reference to the object. | |||
:;functionName : String - the name of the function being hooked. | |||
:;hookfunc : Function - your hook function. | |||
:;" | ==Example== | ||
local echoHook = function (...) | |||
local msg = , ""; | |||
table.foreach({...}, function(k,v) msg = msg .. k .. "=[" .. tostring(v) .."] "; end); | |||
DEFAULT_CHAT_FRAME:AddMessage("[Echo] " .. msg); | |||
end; | |||
hooksecurefunc("CastSpellByName", echoHook); -- Hooks the global CastSpellByName | |||
hooksecurefunc(GameTooltip, "SetUnitBuff", echoHook); -- Hooks GameTooltip.SetUnitBuff | |||
===Result=== | |||
Hooks CastSpellByName and GameTooltip.SetUnitBuff without compromising their secure status. When those functions are called, prints their argument list into the default chat frame. | |||
==Notes== | |||
== | This is the only safe way to hook functions that execute protected functionality. | ||
The hookfunc is invoked after the original function, and receives the same parameters; return values from hookfunc are discarded. | |||
After hooksecurefunc() is used on a function, setfenv() throws an error when attempted on that function |