parent $user_interfaces object $settings_ui var $root dbref 'settings_ui var $root child_index 0 var $root fertile 0 var $root manager $settings_ui var $root owned [$settings_ui] var $root owners [$settings_ui] var $root writable [] var $root readable ['parameters, 'methods, 'code] var $has_commands commands [["@add-setting-template|@ast * as * on *", 'add_setting_template_cmd], ["@del-setting-template|@dst * from *", 'del_setting_template_cmd], ["@set *", 'set_cmd], ["@set?tings on *", 'settings_on_cmd]] var $has_commands shortcuts [] var $root inited 1 var $old_command_environment verb_cache #[] var $old_command_environment command_cache [["@add-setting-template|@ast * as * on *", 'add_setting_template_cmd], ["@del-setting-template|@dst * from *", 'del_setting_template_cmd], ["@set *", 'set_cmd], ["@set?tings on *", 'settings_on_cmd]] var $old_command_environment shortcuts_cache [] method settings_cmd arg cmd, args; var flag, value, template, syn, bool, line; (> .perms(sender()) <); syn = cmd + " [+|-]<flag>[=<value>]"; if (!args) { return .list_settings('local); } else if (args in ["-all", "-a"]) { return .list_settings('all); } else { bool = (args[1]) in ["-", "+"]; if (bool) args = substr(args, 2); args = explode(args, "="); flag = args[1]; if (listlen(args) == 2) value = args[2]; else value = ""; template = .setting_template(flag); if (!template) $parse.tell_error(("No setting available with the flag \"" + flag) + "\".", syn); switch (template[2]) { case 'boolean: if (!bool) $parse.tell_error(("Value must be boolean (+|-" + flag) + ").", syn); value = bool - 1; case 'integer: if (!($string.is_numeric(value))) $parse.tell_error(("Value must be an integer (" + flag) + "=<integer>).", syn); value = toint(value); case 'string: if (!value) $parse.tell_error(("Value must be a string (" + flag) + "=<string>).", syn); } .set_setting(flag, value); line = ("Setting " + flag) + " set to "; switch (template[2]) { case 'boolean: line = line + ((value == 1) ? "+" | "-"); default: line = line + toliteral(value); } .tell(line); } . method settings_on_cmd arg cmd, on, args; var all, obj, syn; (> .perms(sender()) <); syn = ((cmd + " ") + on) + " <object> [-all]"; args = $parse.options(args, #[["all", [1, 0]]]); if (!(args[1])) $parse.tell_error("", syn); all = (((args[2])["all"])[1]) ? 'all | 'local; obj = .match_env_nice((args[1])[1]); if (!(obj.has_ancestor($has_settings))) $parse.tell_error(((obj.namef('xref)) + " is not a descendant of ") + ($has_settings.namef('xref))); .tell(("Settings available on " + (obj.namef('xref))) + ":"); .tell(obj.list_settings(all)); .tell("---"); . method add_setting_template_cmd arg cmd, flag, as, vtype, on, obj; var syn; (> .perms(sender()) <); syn = ((((cmd + " <flag> ") + as) + " <setting type> ") + on) + " <object>"; obj = .match_env_nice(obj); if ((flag[1]) in ["-", "+"]) flag = substr(flag, 2); if ((vtype[1]) == "'") vtype = substr(vtype, 2); vtype = tosym(vtype); if (!(vtype in ['boolean, 'integer, 'string])) $parse.tell_error("Setting type must be one of: 'boolean, 'integer, or 'string.", syn); catch ~perm { obj.add_setting_template(flag, vtype); } with handler { $parse.tell_error(("You cannot add settings to " + (obj.namef('xref))) + ".", syn); } .tell((((("Setting template with flag \"" + flag) + "\" as value of type ") + tostr(vtype)) + " added to ") + (obj.dbref())); . method del_setting_template_cmd arg cmd, flag, from, obj; var syn; (> .perms(sender()) <); syn = ((cmd + " <flag> ") + from) + " <object>"; obj = .match_env_nice(obj); if ((flag[1]) in ["-", "+"]) flag = substr(flag, 2); catch ~perm { obj.del_setting_template(flag); } with handler { $parse.tell_error(("You cannot change settings on " + (obj.namef('xref))) + ".", syn); } .tell((("Setting template with flag \"" + flag) + "\" deleted from ") + (obj.dbref())); . method set_cmd arg cmd, args; var flag, value, template, syn, bool, line; (> .perms(sender(), 'this) <); syn = cmd + " [+|-]<flag>[=<value>]"; if (!args) $parse.tell_error("", syn); bool = (args[1]) in ["-", "+"]; if (bool) args = substr(args, 2); args = explode(args, "="); flag = args[1]; if (listlen(args) == 2) value = args[2]; else value = ""; template = .setting_template(flag); if (!template) $parse.tell_error(("No setting available with the flag \"" + flag) + "\".", syn); switch (template[2]) { case 'boolean: if (!bool) $parse.tell_error(("Value must be boolean (+|-" + flag) + ").", syn); value = bool - 1; case 'integer: if (!($string.is_numeric(value))) $parse.tell_error(("Value must be an integer (" + flag) + "=<integer>).", syn); value = toint(value); case 'string: value = $string.strip(value, "\""); } .set_setting(flag, value); line = ("Setting " + flag) + " set to "; switch (template[2]) { case 'boolean: line = line + ((value == 1) ? "+" | "-"); default: line = line + toliteral(value); } .tell(line); .