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);
.