mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-09 16:07:40 +00:00
38 lines
999 B
Plaintext
38 lines
999 B
Plaintext
/**
|
|
* @file hooks.dm
|
|
* Implements hooks, a simple way to run code on pre-defined events.
|
|
*/
|
|
|
|
/** @page hooks Code hooks
|
|
* @section hooks Hooks
|
|
* A hook is defined under /hook in the type tree.
|
|
*
|
|
* To add some code to be called by the hook, define a proc under the type, as so:
|
|
* @code
|
|
/hook/foo/proc/bar()
|
|
if(1)
|
|
return 1 //Sucessful
|
|
else
|
|
return 0 //Error, or runtime.
|
|
* @endcode
|
|
* All hooks must return nonzero on success, as runtimes will force return null.
|
|
*/
|
|
|
|
/**
|
|
* Calls a hook, executing every piece of code that's attached to it.
|
|
* @param hook Identifier of the hook to call.
|
|
* @returns 1 if all hooked code runs successfully, 0 otherwise.
|
|
*/
|
|
/proc/callHook(hook, list/args=null)
|
|
var/hook_path = text2path("/hook/[hook]")
|
|
if(!hook_path)
|
|
CRASH("Invalid hook '/hook/[hook]' called.")
|
|
|
|
var/caller = new hook_path
|
|
var/status = 1
|
|
for(var/P in typesof("[hook_path]/proc"))
|
|
if(!call(caller, P)(arglist(args)))
|
|
CRASH("Hook '[P]' failed or runtimed.")
|
|
|
|
return status
|