@verb #14:"@verb*!" any any any rdo #55 @program #14:"@verb*!" any any any if (player != this) return $msg:mtell("huh") elseif (!player.programmer) return player:_prog_disclaimer("create verbs") elseif (!(args && (spec = $code_utils:parse_verbref(args[1])))) return player:tell("Usage: ", verb, " <object>:<verb-name(s)> [<dobj> [<prep> [<iobj> [<permissions> [<owner>]]]]]") elseif ($command_utils:object_match_failed(object = player:my_match_object(spec[1]), spec[1])) return endif set_task_perms(player) specialverb = 0 name = tostr(spec[2]) "...Adding another verb of the same name is often a mistake..." namelist = $string_utils:explode(name) for n in (namelist) if (i = index(n, "*")) n = n[1..i - 1] + n[i + 1..length(n)] endif if ((hv = $object_utils:has_verb(object, n)) && hv[1] == object) player:tell("Warning: Verb `", n, "' already defined on that object.") if (verb != "@verb!") return player:tell("Use @verb! to really add this verb.") endif endif endfor if (typeof(pas = $code_utils:parse_argspec(@listdelete(args, 1))) != $LIST) return player:tell(pas) endif verbargs = {@pas[1], "none", "none", "none"}[1..3] rest = pas[2] if (rest) if (index(perms = rest[1], "w")) return $msg:mtell("verb_w_disabled") endif elseif (verbargs == {"this", "none", "this"}) perms = "rxdo" else perms = "rdo" endif "... Adding a +x notify, do_command, or similar verb is always bad ..." if (index(perms, "x")) for badverb in ($code_utils.dangerous_verbs) if ($code_utils:verbname_match(name, badverb)) player:tell("Warning: Verb ", name, " cannot be set +x initially.") player:tell("You may use @chmod to enable this verb after it has been correctly programmed.") perms = strsub(perms, "x", "") break endif endfor endif if (length(rest) < 2) owner = player.wizard ? $hacker | player elseif (length(rest) > 2) return player:tell("\"", rest[3], "\" unexpected.") elseif ($command_utils:player_match_result(owner = $string_utils:match_player(rest[2]), rest[2])[1]) return elseif (owner == $nothing) return player:notify("Verb can't be owned by no one!") endif x = `add_verb(object, {owner, perms, name}, verbargs) ! ANY' if (x == E_INVARG) player:tell(rest ? tostr("\"", perms, "\" is not a valid set of permissions.") | tostr("\"", verbargs[2], "\" is not a valid preposition (?)")) elseif (typeof(x) == $ERR) player:tell(x) else player:tell("Verb ", object, ":", name, " (", length(object:verbs()), ") {", $string_utils:from_list(verbargs, " "), "} added.") endif "Last modified by Dax (#789) on Wed May 4 06:46:00 2005 MDT." .