parent $user_interfaces object $set_ui var $root dbref 'set_ui var $root child_index 0 var $root fertile 1 var $root manager $set_ui var $root owned [$set_ui] var $root owners [$] var $root writable [] var $root readable ['parameters, 'methods, 'code] var $old_command_environment verb_cache #[] var $old_command_environment command_cache [["@set *", 'set_cmd], ["@add-setting *", 'add_setting_cmd]] var $old_command_environment shortcuts_cache [] var $has_commands commands [["@set *", 'set_cmd], ["@add-setting *", 'add_setting_cmd], ["@del-setting * on|from *", 'del_setting_cmd], ["@set-info * on *", 'settings_info_cmd]] var $has_commands shortcuts [] var $root inited 1 method set_cmd arg set, name; var pos, obj; pos = name.rindex(" on "); if (pos) { obj = .match_env_nice(substr(name, pos + 4)); name = substr(name, 1, pos - 1); } else { obj = this(); } return ._set_cmd(obj, name); . method add_setting_cmd arg com, name; var obj, pos, values, key, old_vals, line; pos = " on " in name; if (pos) { obj = .match_env_nics(substr(name, pos + 4)); name = substr(name, pos - 1); } else { obj = this(); } pos = " " in name; if (pos) { name = $string.trim(substr(name, 1, pos)); line = substr(name, pos); } else { line = ""; } values = (| obj.get_setting_info(name) |) || ($has_settings.default_setting_info()); if (line) { values = dict_add(values, 'check, ['value, tostr(values['check])]); values = dict_add(values, 'get, ['value, tostr(values['get])]); values = dict_add(values, 'set, ['value, tostr(values['set])]); values = dict_add(values, 'del, ['value, tostr(values['del])]); values = dict_add(values, 'type, ['value, values['type]]); old_vals = #[]; old_vals = dict_add(old_vals, 'set_args, values['set_args]); old_vals = dict_add(old_vals, 'get_args, values['get_args]); values = $parse.my_options(line, values); line = values[1]; values = values[2]; values = dict_add(values, 'check, tosym(values['check])); values = dict_add(values, 'get, tosym(values['get])); values = dict_add(values, 'set, tosym(values['set])); values = dict_add(values, 'del, tosym(values['del])); values = dict_add(values, 'get_args, old_vals['get_args]); values = dict_add(values, 'set_args, old_vals['set_args]); } if (obj.add_setting(name, values)) .tell("Setting added."); else .tell("Usage: @add-setting <name> <options"); . method _set_cmd arg obj, name; var pos, style, value, obj, definer, output, m, matches, info, args, n, o; // The method to do all the actual work for set_cmd and set_on_cmd if (!name) name = " "; //Find out just what the user wants to do. switch (name[1]) { case "+": style = 'boolean; value = 1; name = substr(name, 2); case "-": style = 'boolean; value = 0; name = substr(name, 2); default: pos = "=" in name; if (pos) { switch (name[pos - 1]) { case "+": style = 'add; value = substr(name, pos + 1); name = substr(name, 1, pos - 2); case "-": style = 'del; value = substr(name, pos + 1); name = substr(name, 1, pos - 2); default: style = 'set; value = substr(name, pos + 1); name = substr(name, 1, pos - 1); } } else { style = 'get; value = ""; } } pos = ":" in name; if (pos > 1) { definer = substr(name, 1, pos - 1); name = substr(name, pos + 1); } else if (pos == 1) { definer = 0; name = substr(name, 2); } else { definer = 0; } // We think we know what the definer is. // Make sure it's in the settings. // If not, add that string back on to the name if (definer && (!(obj.has_ancestor($object.to_dbref(definer))))) { name = (definer + ":") + name; definer = 0; } // style may be 'boolean, 'set, 'add, 'del, 'get // 'get means we are looking at settings. // others mean we want to change settings. // If we are changing the a setting 'value is what we want to change it to. // name will contain whatever is left of the name. // Something like: // help-node.evaluator // terminated-tell // .foo // The stuff before the first '.' may be the dbref of the definer. // If it is, that string will be in dict_keys(settings) // If the style is 'get, // we want to show the names and values of all settings that match name. if (style == 'get) { output = [("Settings on " + (obj.name())) + ":"]; matches = obj.all_matching_settings(name, [], 1); // .debug(matches); for m in (matches) { o = m[1]; output = [@output, (o.dbref()) + ":"]; for n in (m[2]) { info = (m[1]).get_setting_info(n); output = [@output, ((((" " + n) + " (") + (info['type])) + "): ") + ($data.unparse(obj.get_setting(n, o)))]; } } .tell(output); return; } // After all that, we know // what the definer is, // the actual name of the setting, // The value we wnat to set it to // The style of change we are makeing catch ~definernf { if (!(.set_setting(name, definer, value, style))) { .tell("! That is an invalid entry for that setting."); return; } .tell("Setting set"); } with handler { .tell(("Setting " + name) + " not found."); return; } . method set_on_cmd arg set, name, on, obj; .debug("foo"); return ._set_cmd(.match_env_nice(obj), name); . method set_info_cmd arg com, setting, on, definer; var pos, part, values, value, v, output; pos = " is " in definer; if (pos) { value = substr(definer, pos + 4); definer = .match_env_nice(substr(definer, 1, pos - 1)); setting = setting.to_list(":"); part = tosym(setting[2]); setting = setting[1]; switch (part) { case "set_args", "get_args": values = value.to_list(","); value = []; for v in (values) { v = v.trim(); if ((v[1]) == "'") v = tosym(v); value = [@value, v]; } case "check", "get", "set", "del": value = tosym(value); case "type": value = value; default: .tell("The setting part must be on of set_args, get_args, check, get, set, del, type"); } part = tosym(part); definer.add_setting(setting, #[[part, value]]); .tell("Setting info changed."); } else { output = [((("Setting " + setting) + " on ") + definer) + ":"]; definer = .match_env_nice(definer); values = .get_setting_info(setting); for value in (dict_keys(values)) output = [@output, ((" " + tostr(value)) + " = ") + ($data.unparse(values[value]))]; .tell(output); } . method settings_info_cmd arg com, setting, on, definer; var pos, part, values, value, v, output; pos = " is " in definer; if (pos) { value = substr(definer, pos + 4); definer = .match_env_nice(substr(definer, 1, pos - 1)); setting = setting.to_list(":"); part = tosym(setting[2]); setting = setting[1]; switch (part) { case 'set_args, 'get_args: values = value.to_list(","); value = []; for v in (values) { v = v.trim(); if ((v[1]) == "'") v = tosym(v); value = [@value, v]; } case 'check, 'get, 'set, 'del: value = tosym(value); case 'type: value = value; default: .tell("The setting part must be on of set_args, get_args, check, get, set, del, type"); } definer.add_setting(setting, #[[part, value]]); .tell("Setting info changed."); } else { output = [((("Setting " + setting) + " on ") + definer) + ":"]; definer = .match_env_nice(definer); if (!(definer.defines_setting(setting))) .tell("Object does not define that setting."); values = definer.get_setting_info(setting); for value in (dict_keys(values)) output = [@output, ((" " + tostr(value)) + ": ") + ($data.unparse(values[value]))]; .tell(output); } . method del_setting_cmd arg com, setting, on, obj; obj = .match_env_nice(obj); obj.del_setting(setting); .tell("Setting deleted."); .