@@ -3,10 +3,15 @@ object PROG
33 parent: BUILDER
44 location: FIRST_ROOM
55 owner: WIZ
6+ wizard: true
7+ programmer: true
68 fertile: true
79 readable: true
810
911 verb eval (any any any) owner: ARCH_WIZARD flags: "rxd"
12+ if (player != caller)
13+ raise(E_PERMS);
14+ endif
1015 set_task_perms(player);
1116 answer = eval("return " + argstr + ";");
1217 if (answer[1])
@@ -16,4 +21,75 @@ object PROG
1621 endif
1722 player:tell(result_event);
1823 endverb
24+
25+ verb "@edit" (any any any) owner: ARCH_WIZARD flags: "rxd"
26+ "Edit a verb on an object using the presentation system.";
27+ "Usage: @edit <object>:<verb> [info]";
28+ "Examples: @edit #1:look_self, @edit player:tell, @edit $match:match_object info";
29+ if (player != caller)
30+ raise(E_PERMS);
31+ endif
32+ set_task_perms(player);
33+ "Check for usage errors";
34+ if (!argstr)
35+ player:tell($event:mk_error(player, "Usage: " + verb + " <object>:<verb> [info]"));
36+ return;
37+ endif
38+ "Parse arguments - check for 'info' mode";
39+ args_list = argstr:split(" ");
40+ verbref_string = args_list[1];
41+ "Parse the verb reference";
42+ parsed = verbref_string:parse_verbref();
43+ if (!parsed)
44+ player:tell($event:mk_error(player, "Invalid verb reference format. Use 'object:verb'"));
45+ return;
46+ endif
47+ {object_str, verb_name} = parsed;
48+ "Match the object";
49+ target_obj = $match:match_object(object_str, player);
50+ if (typeof(target_obj) == ERR)
51+ if (target_obj == E_INVARG("No object found matching '" + object_str + "'"))
52+ player:tell($event:mk_error(player, "I don't see '" + object_str + "' here."));
53+ else
54+ player:tell($event:mk_error(player, "Error matching object: " + tostr(target_obj)));
55+ endif
56+ return;
57+ endif
58+ "Find and retrieve the verb code";
59+ try
60+ "Find where the verb is actually defined";
61+ verb_location = target_obj:find_verb_definer(verb_name);
62+ if (verb_location == #-1)
63+ player:tell($event:mk_error(player, "Verb '" + tostr(verb_name) + "' not found on " + target_obj.name + " or its ancestors."));
64+ return;
65+ endif
66+ "Get verb information for editor";
67+ verb_info_data = verb_info(verb_location, verb_name);
68+ {verb_owner, verb_flags, verb_names} = verb_info_data;
69+ "Open the editor";
70+ player:present_editor(verb_location, verb_name);
71+ player:tell($event:mk_info(player, "Opened verb editor for " + tostr(target_obj) + ":" + tostr(verb_name)));
72+ except (E_VERBNF)
73+ player:tell($event:mk_error(player, "Verb '" + tostr(verb_name) + "' not found on " + target_obj.name + "."));
74+ return;
75+ endtry
76+ endverb
77+
78+ verb present_editor (this none this) owner: ARCH_WIZARD flags: "rxd"
79+ if (caller != this)
80+ raise(E_PERM);
81+ endif
82+ {verb_location, verb_name} = args;
83+ editor_id = "edit-" + tostr(verb_location) + "-" + verb_name;
84+ editor_title = "Edit " + verb_name + " on " + tostr(verb_location);
85+ obj_str = tostr(verb_location);
86+ if (obj_str[1] == "#")
87+ object_curie = "oid:" + obj_str[2..$];
88+ elseif (obj_str[1] == "$")
89+ object_curie = "sysobj:" + obj_str[2..$];
90+ else
91+ object_curie = obj_str;
92+ endif
93+ present(player, editor_id, "text/plain", "verb-editor", "", {{"object", object_curie}, {"verb", verb_name}, {"title", editor_title}});
94+ endverb
1995endobject
0 commit comments