1a92
@rename #7200 to "Option Utilities,opt_utils"
@ref #7200 is $opt_utils
@chparent $opt_utils to $utility
;$opt_utils.description = $cmd_utils:read_lines();
Szass' Option Utilities
This utility package has as a goal to provide a scalable option system
for programmers to players alike, aplicable without the creation of extra
objects and usable on any object that is virtualy contained in MOO Canada.
Since the method proposed for dealing with options is radically different
then the standard LambdaMOO installment currently implemented, Szass Sam has
provided you with a more indepth look into both the theories, concepts and
iner workings that lie behind it all.
.
;$opt_utils.msg_help = $cmd_utils:read_lines();
For a complete description of a given verb, do `help $string_utils:verbname'
.options_settings_names => {[name], [...]}
.options_settings_values => {[value], [...]}
.options_names => {[name], [..]}
.options_values => {[description], [key], [perms], [type], [setting], [settings] @[,descs]}
description => {STR, STR, STR}
key =>
LIST => list of values acceptable
STR => eval that should return 1 or 0
perms =>
LIST => list of players acceptable, or {LIST, LIST} for reading, writing respectively
STR => eval that should return 0 for fail, 1 for reading, 2 for writing
type =>
0 => option on player
1 => option on room
2 => directory
3 => redirect option
4 => redirect directory
5 => hidden option
descs => {[option], [desc]}
.
@verb $opt_utils:msg_help tnt rdox
@program $opt_utils:msg_help
"Programmed by Quadir (#9780) 07/10/2000";
"Syntax:";
" :msg_help()";
"--";
"This verb was written to overide the standard :msg_help() on $utility";
"It is called automaticaly when one tryes to access this object's help file.";
return this.msg_help
.
@verb $opt_utils:read_for_player tnt rdox
@program $opt_utils:read_for_player
"Programmed by Quadir (#9780) 07/10/2000";
"Syntax:";
" :read_object_or_player([object], [player], [option]);";
"--";
"Returns {[where], [value]}, if [where] is:";
" -1 => option found on player but not object";
" 0 => option was not found";
" 1 => found the option on the player";
" 2 => found the option on the object";
{object,who,option} = args;
object_results = this:read_object(@args);
player_results = this:read_player(@args);
if (player_results[1] && object_results[1])
object_results[5] = player_results[2];
return {1, object_results};
elseif (object_results[1])
return {2, object_results[2]};
elseif (player_results[1])
return {-1, player_results[2]};
else
return {0,0};
endif
.
@verb $opt_utils:read_object tnt rdox
@program $opt_utils:read_object
"Programmed by Quadir (#9780) 07/10/2000";
"Syntax:";
" :read_object([object], [player], [option]);";
"--";
"Returns {[success], [value]}, [success] is 1 or 0";
{object,who,option} = args;
if (opt=(option in this:options_names_list(object)))
value = this:options_values_read(object, opt);
if (this:resolve_perms(who, value[3], 1))
return {1, value};
endif
endif
return {0,0};
.
@verb $opt_utils:read_player tnt rdox
@program $opt_utils:read_player
"Programmed by Quadir (#9780) 07/10/2000";
"Syntax:";
" :read_player([object], [playr], [option] [,object_results]);";
"--";
"Returns {[success], [value]}, [success] is 1 or 0";
{object,who,player}=args;
for opt in (this:options_settings_list(who))
if (opt[1] == object)
for opty in (opt[2])
if (opty[1] == option)
return {1,opty[2]};
endif
$cmd_utils:suspend_if_needed(0);
endfor
endif
$cmd_utils:suspend_if_needed();
endfor
return {0,0};
.
@verb $opt_utils:set_for_player tnt rdox
@program $opt_utils:set_for_player
"Programmed by Quadir (#9780) 07/10/2000";
"Syntax:";
" :options_set([object] [,player], [option], [value]);";
"--";
.
@verb $opt_utils:set_object tnt rdox
@program $opt_utils:set_object
"Programmed by Quadir (#9780) 07/10/2000";
"Syntax:";
"--";
.
@verb $opt_utils:set_player tnt rdox
@program $opt_utils:set_player
"Programmed by Quadir (#9780) 07/10/2000";
"Syntax:";
"--";
.
@program $opt_utils:options_set
"Programmed by Quadir (#9780) 07/08/2000";
"Syntax:";
" :options_set([object] [,player], [option], [value]);";
"--";
"Sets the [option] on the [object] as if it was [player] to [value]";
"Returns 0 for failed, 1 for success, E_PERM for no permishion";
if (length(args) == 4 && caller_perms():controls(this))
{object, who, option, value} = args;
else
{object, option, value} = args;
who = caller_perms():controls(this) ? this | caller_perms();
endif
opt = option in this:options_names_list(object);
if (opt)
if (this:options_ok(who, this:options_values_read(object, opt)[3], 2))
this:options_values_set(object, 1, opt, value);
return 1;
endif
endif
return 0;
.
@program $opt_utils:options_add
"Programmed by Quadir (#9780) 07/10/2000";
"Syntax:";
" :options_add([object] [,player] [option], [value], [type])";
"--";
"adds to player if type 1, adds to object if type 2";
if (length(args) == 5)
{object, who, option, value, type} = args;
else
{object,option,value,type} = args;
who = caller_perms():controls(this) ? this | caller_perms();
endif
if (type == 1 && this:options_ok(who, this:
settings = this:options_settings_list();
for setting in [1..length(settings)]
if (setting[1] == object)
elseif (type == 2)
elseif (type in {1, 2})
return E_PERM;
else
retrn E_TYPE;
endif
return 0;
.
@program $opt_utils:options_remove
"Programmed by Quadir (#9780) 07/08/2000";
"Syntax:";
"--";
.
@program $opt_utils:options_move
"Programmed by Quadir (#9780) 07/08/2000";
"Syntax:";
"--";
.
@program $opt_utils:options_dir*ectory
"Programmed by Quadir (#9780) 07/08/2000";
"Syntax:";
"--";
.
@program $opt_utils:options_tree
"Programmed by Quadir (#9780) 07/08/2000";
"Syntax:";
"--";
.
@program $opt_utils:resolve_perms
"Programmed by Quadir (#9780) 07/08/2000";
"Syntax:";
"--";
.
@program $opt_utils:options_toggle
"Programmed by Quadir (#9780) 07/08/2000";
"Syntax:";
"--";
"1 => Read";
"2 => Write";
.
.
0