parent $interfaces parent $has_verbs object $user_data var $root dbref 'user_data var $root child_index 0 var $root fertile 0 var $root manager $user_data var $root owned [$user_data] var $root owners [$user_data] var $root writable [] var $root readable ['parameters, 'methods, 'code] var $has_commands commands [["@user-data * my * is|are *", 'data_is_cmd], ["@user-data *", 'data_cmd]] var $has_commands shortcuts [] var $root inited 1 var $user_data valid_settings #[["real name", 'real_name], ["email", 'email], ["address", 'address], ["affiliation", 'affiliation], ["position", 'position], ["location", 'location], ["interests", 'interests], ["plan", 'plan], ["projects", 'projects], ["see also", 'see_also]] var $user_data user_data #[] var $has_verbs verbs #[["finger %this", ['finger_vrb, 'remote]]] method init_user_info .perms(caller(), $root); user_data = #[['real_name, [1, "???"]], ['email, [1, "???"]]]; . method data_on arg data; data = (| user_data[data] |); if (data) { if ((data[1]) || (.is_writable_by(sender()))) return data[2]; return "not public."; } else { return "not set."; } . method set_data arg key, value, public; .perms(sender(), 'this); user_data = dict_add(user_data, key, [public, value]); . method init_user_data .perms(caller(), $root); user_data = #[['real_name, [1, "???"]], ['email, [1, "???"]]]; . method valid_settings return valid_settings; . method data_is_cmd arg com, public, me, what, is, value; var valid, kvalid, tmp; .perms(sender(), 'parser); valid = $user_data.valid_settings(); what = (| valid[what] |); if (!what) { tmp = " [+p|+public|-p|-public] my <setting name> is <value>'"; .tell(("! => Syntax: '" + com) + tmp); .tell("! Where setting name can be any of: "); tmp = $string.wrap_line($list.to_english(dict_keys(valid)), .linelen(), "! "); tmp = replace(tmp, 1, "! " + (tmp[1])); .tell(tmp); return; } if ((!public) || (public in ["+p", "+public"])) public = 1; else if (public in ["-p", "-public"]) public = 0; else $parse.tell_error("Invalid public setting (must be +p, +public, -p or -public)"); .set_data(what, value, public); .tell("Value set."); . method data_cmd arg com, who; var valid, line, user; .perms(sender(), 'parser); // if (!who) user = this(); else user = (| .find_object(who, 'environment, 'user, 'grasp) |); if (!user) { .tell(("! No user found by the name \"" + who) + "\"."); .tell("! To set a value use the syntax:"); .tell(("! '" + com) + " [+p|+public|-p|-public] my <parameter> is|are <value>'"); return; } .tell(("Current personal data settings on " + (user.namef())) + ":"); valid = $user_data.valid_settings(); .tell(user.display_data()); .tell("-=-"); . method display_data arg [dont_display]; var x, valid, line, len, pub, actor, data, lines, output; actor = sender(); len = actor.linelen(); valid = $user_data.valid_settings(); output = []; for x in (valid) { if (!((x[2]) in dont_display)) { data = (| user_data[x[2]] |); if (data) { if ((data[1]) || (.is_writable_by(actor))) line = data[2]; else line = "not public."; } else { continue; } pub = (| (user_data[x[2]])[1] |); pub = ((!pub) && (type(pub) != 'error)) ? "*" | " "; if ((len - 20) < strlen(line)) { output = [@output, (pub + ($string.capitalize(x[1]))) + ":"]; lines = $string.wrap_line(line, len, " "); lines = replace(lines, 1, " " + (lines[1])); output = output + lines; } else { output = output + [(pub + pad(($string.capitalize(x[1])) + ": ", 13)) + line]; } } } return output; . method finger_vrb arg [args]; .