mirror of
https://github.com/ldmud/ldmud
synced 2026-08-12 14:26:05 -04:00
Driver hooks that accepted lfun closures before can now handle any type of closure. Also the H_CREATE_* hooks can now handle any type of closure.
60 lines
2.3 KiB
Text
60 lines
2.3 KiB
Text
SYNOPSIS
|
|
#include <sys/driver_hooks.h>
|
|
|
|
set_driver_hook(H_MODIFY_COMMAND, value)
|
|
|
|
<value> being:
|
|
|
|
int|string <closure>(string cmd, object player)
|
|
int|string <name>(string cmd)
|
|
<mapping>
|
|
|
|
DESCRIPTION
|
|
Optional hook to modify commands (both entered or given by a
|
|
call to command()) before the parser sees them.
|
|
|
|
Hook setting can be any closure, the name of the function to
|
|
call in the object, or a mapping.
|
|
|
|
For interactives this hook is used only if the interactive
|
|
object has no command modifier already set by the efun
|
|
set_modify_command().
|
|
|
|
If the hook is a closure, it is called with the entered
|
|
command as first, and the command giving player as second
|
|
argument. Unbound lambda closures are bound to the command
|
|
giving player.
|
|
|
|
If the hook is a string, it is used as the name of an lfun
|
|
in the command giving player, which is called with the command
|
|
as argument.
|
|
|
|
If the hook is a mapping, it is queried with the given command
|
|
as index, and the data retrieved is used as new command
|
|
(defaults to 0 if no data is stored for a given command). If
|
|
an entry is a closure instead of a string, it is called as
|
|
|
|
int|string <closure>(string cmd, object player)
|
|
|
|
and the result from the call is used as 'the' command.
|
|
|
|
The result is treated equal in all three cases:
|
|
- If the result is a string, it is the new command to execute
|
|
instead of the given one. Note that it is not possible to
|
|
make several commands from one this way!
|
|
- If the result is a non-zero number, the given command is to
|
|
be ignored. In case of the closure/lfun setting this may
|
|
mean that the closure/lfun already executed it.
|
|
- If the result is 0, the originally given command is to be
|
|
used.
|
|
|
|
It is possible for the hook to change the command giver
|
|
(this_player()) for the execution of the command. This means that
|
|
even though the commands are execute for the original commandgiver,
|
|
this_player() will return the changed commandgiver.
|
|
|
|
HISTORY
|
|
|
|
SEE ALSO
|
|
hooks(C), command(H), modify_command_fname(H), notify_fail(H),
|
|
send_notify_fail(H)
|