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