# Tut 0x021 ## Detouring Detouring is a method commonly used in lua, even outside of gmod development. The idea is to redirect a function through your function first, then call the function you're redirecting at the end (or maybe the beginning, or anywhere really). Let's see an example: garrysmod/lua/autorun/detourprint.lua local oldprint = print function print(...) local args = {...} args[#args + 1] = "if you know what I mean..." oldprint(unpack(args)) end The above script __replaces__ the print function, with a new function, which eventually calls the original print function, with modified arguments. The above can be done with modules in Artery as well. For example, `log.lua`'s .error() function currently only prints a message in red, it dosn't actually show what failed or why. Let's modify it to show a stack trace. garrysmod/addons/artery_rougelite/trace_errors.lua local log = nrequire("log.lua") local colors = nrequire("config/colortheme.lua") --Holds colors local oldlog = log.error function log.error(...) oldlog(unpack({...})) MsgC(colors.console.red,debug.traceback()) end For more information on colortheme.lua see @{colortheme.lua}, for more on debug.traceback() see [the gmod wiki](http://wiki.garrysmod.com/page/debug/traceback).