parent $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 [["@set?tings *", 'settings_cmd], ["@add-setting-template|@ast * as * on *", 'add_setting_template_cmd], ["@del-setting-template|@dst * from *", 'del_setting_template_cmd]] var $has_commands shortcuts [] var $root inited 1 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 list_settings arg how; var templates, settings, setting_templates, t, x, len, line; (> .perms(sender()) <); len = ((.linelen()) - 2) / 2; switch (how) { case 'all: templates = .all_setting_templates(); settings = .settings(); setting_templates = dict_keys(settings); for x in (templates) { .tell(("Settings available on " + ((x[1]).namef('xref))) + ":"); for t in (x[2]) { switch (t[2]) { case 'boolean: line = " " + pad("[+|-]" + (t[1]), len); case 'integer: line = " " + pad((" " + (t[1])) + "=<integer>", len); case 'string: line = " " + pad((" " + (t[1])) + "=<string>", len); } if (!((t[1]) in setting_templates)) { line = line + " is unset"; } else { switch (t[2]) { case 'boolean: line = (line + " is ") + (((settings[t[1]])[2]) ? "+" | "-"); default: line = (line + " is ") + toliteral((settings[t[1]])[2]); } } .tell(line); } } case 'local: settings = .settings(); if (!settings) return .tell("All of your settings are either off or unset."); .tell("Your settings:"); for x in (settings) { switch ((x[2])[1]) { case 'boolean: line = " +" + (x[1]); default: line = ((" " + (x[1])) + "=") + toliteral((x[2])[2]); } .tell(line); } } .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())); .