mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-20 07:12:55 +00:00
Conflicts: code/__HELPERS/time.dm code/controllers/hooks-defs.dm code/controllers/hooks.dm code/game/machinery/computer/card.dm code/game/machinery/podmen.dm code/modules/admin/player_panel.dm code/modules/client/preferences.dm code/modules/mob/living/carbon/brain/brain_item.dm code/modules/mob/living/carbon/human/death.dm code/modules/mob/living/login.dm code/modules/mob/mob.dm code/modules/security levels/keycard authentication.dm code/setup.dm icons/mob/mob.dmi
40 lines
1.0 KiB
Plaintext
40 lines
1.0 KiB
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)
|
|
error("Invalid hook '/hook/[hook]' called.")
|
|
return 0
|
|
|
|
var/caller = new hook_path
|
|
var/status = 1
|
|
for(var/P in typesof("[hook_path]/proc"))
|
|
if(!call(caller, P)(arglist(args)))
|
|
error("Hook '[P]' failed or runtimed.")
|
|
status = 0
|
|
|
|
return status
|