#include "boot.clh"
object BUILDER
parents PLAYER;
verb "@addo*wner" : "on to onto" = addowner_cmd;
verb "@addo*wner" = addowner_cmd;
verb "@addp*arent" : "on to onto" = addparent_cmd;
verb "@addp*arent" = addparent_cmd;
verb "@clone" = clone_cmd;
verb "@clone" : "named" = clone_cmd;
verb "@create" = create_cmd;
verb "@destroy" = destroy_cmd;
verb "@dig" = dig_cmd;
verb "@find" = find_cmd;
verb "@link" = link_cmd;
verb "@link" : "to" = link_cmd;
verb "@list" : "on" = list_cmd;
verb "@list" = list_cmd;
verb "@open" = open_cmd;
verb "@open" : "to" = open_cmd;
verb "@methods" = methods_cmd;
verb "@mutate" : "to into" = mutate_cmd;
verb "@mutate" = mutate_cmd;
verb "@nick*name" : "is as to" = nickname_cmd;
verb "@nick*name" = nickname_cmd;
verb "@pub*lish" = publish_cmd;
verb "@unpub*lish" = unpublish_cmd;
verb "@rmp*arent" : "from on to onto" = rmparent_cmd;
verb "@rmp*arent" = rmparent_cmd;
verb "@rmo*wner" : "from on to onto" = rmowner_cmd;
verb "@rmo*wner" = rmowner_cmd;
verb "@show" = show_cmd;
verb "@spew" : "on" = spew_cmd;
verb "@spew" = spew_cmd;
verb "@tel*eport" : "to" = teleport_cmd;
verb "@ve*rbs" = verbs_cmd;
name = "Generic Builder";
method init
if (this == BUILDER)
this.add_owner(WIZARD);
else
pass();
endif
endmethod /* init */
method clone_cmd
var parent, new;
if (caller != this)
return 1;
elseif (!args[2] || (args[3] && !args[4]))
echo("Usage: @clone <thing>");
echo(" @clone <thing> named <name>");
return 0;
endif
parent = this.match_env(args[2]);
if (!parent)
echo("I don't see that here.");
else
new = parent.clone(args[4]); /* SSPOT */
if (!new)
echo("You can't clone that.");
else
echo("New \"" + parent.name + "\" cloned: " + new.id);
endif
endif
endmethod /* clone_cmd */
method mutate_cmd
var r, what, newparent;
ignore E_MAXREC, E_RANGE, E_INVIND, E_OBJNF, E_PERM;
if (caller != this)
return 1;
elseif (!args[2] || !args[3] || !args[4])
echo("Usage: @mutate <thing> into <what>");
return 0;
endif
what = this.match_env(args[2]);
newparent = this.match_env(args[4]);
if (!what || !newparent)
echo("I don't see that here.");
else
r = what.chparents({newparent});
if (typeof(r) == ERR && r != E_NONE)
this.parent_result(r);
else
echo("Mutated.");
endif
endif
endmethod
method nickname_cmd
var what;
if (caller != this)
return 1;
elseif (!args[2] || !args[3] || !args[4])
echo("Usage: @nickname <thing> is <nickname>");
return 0;
endif
what = this.match_env(args[2]);
if (!what)
echo("I don't see that here.");
else
setvar("nick_" + args[4], what);
echo("Nickname set.");
endif
endmethod
method publish_cmd
var what;
if (caller != this)
return 1;
elseif (!args[2])
echo("Usage: @publish <thing>");
return 0;
endif
what = this.match_env(args[2]);
if (!what)
echo("I don't see that here.");
elseif (what.publish())
echo("You can't publish that.");
else
echo(what.id + " published.");
endif
endmethod
method unpublish_cmd
var what;
if (caller != this)
return 1;
elseif (!args[2])
echo("Usage: @unpublish <thing>");
return 0;
endif
what = this.match_env(args[2]);
if (!what)
echo("I don't see that here.");
elseif (what.unpublish())
echo("You can't publish that.");
else
echo(what.id + " unpublished.");
endif
endmethod
method addowner_cmd
var what, owner;
ignore E_PERM;
if (caller != this)
return 1;
elseif (!args[2] || !args[3] || !args[4])
echo("Usage: @addowner <what> to <thing>");
return 0;
endif
owner = SYS_OBJ.find_player(args[2]);
what = this.match_env(args[4]);
if (!owner)
echo("\"" + args[2] + "\" is not the name of any player.");
elseif (!what)
echo("I don't see that here.");
elseif (what.add_owner(owner) == E_PERM)
echo("Permission denied.");
else
echo("Owner added.");
endif
endmethod
method rmowner_cmd
var what, owner;
ignore E_PERM;
if (caller != this)
return 1;
elseif (!args[2] || !args[3] || !args[4])
echo("Usage: @rmowner <what> from <thing>");
return 0;
endif
owner = SYS_OBJ.find_player(args[2]);
what = this.match_env(args[4]);
if (!owner)
echo("\"" + args[2] + "\" is not the name of any player.");
elseif (!what)
echo("I don't see that here.");
elseif (what.rm_owner(owner) == E_PERM)
echo("Permission denied");
else
echo("Owner removed.");
endif
endmethod
method addparent_cmd
var r, what, parent;
ignore E_MAXREC, E_RANGE, E_INVIND, E_OBJNF, E_PERM;
if (caller != this)
return 1;
elseif (!args[2] || !args[3] || !args[4])
echo("Usage: @addparent <what> to <thing>");
return 0;
endif
what = this.match_env(args[4]);
parent = this.match_env(args[2]);
if (!what || !parent)
echo("I don't see that here.");
else
r = what.add_parent(parent);
if (typeof(r) == ERR && r != E_NONE)
this.parent_result(r);
else
echo("Parent added.");
endif
endif
endmethod
method rmparent_cmd
var r, what, parent;
ignore E_MAXREC, E_RANGE, E_INVIND, E_OBJNF, E_PERM;
if (caller != this)
return 1;
elseif (!args[2] || !args[3] || !args[4])
echo("Usage: @rmparent <what> from <thing>");
return 0;
endif
what = this.match_env(args[4]);
parent = this.match_env(args[2]);
if (!what || !parent)
echo("I don't see that here.");
else
r = what.rm_parent(parent);
if (typeof(r) == ERR && r != E_NONE)
this.parent_result(r);
else
echo("Parent removed.");
endif
endif
endmethod
method parent_result
if (args[1] == E_OBJNF)
echo("Parent does not exist.");
elseif (args[1] == E_INVIND)
echo("Parent must be local.");
elseif (args[1] == E_PERM)
echo("Parent permission denied.");
elseif (args[1] == E_RANGE)
echo("Object must have at least one parent.");
elseif (args[1] == E_MAXREC)
echo("New parent would cause a loop.");
else
echo("Parent invalid.");
endif
endmethod
method create_cmd
var new;
if (caller != this)
return 1;
elseif (!args[2])
echo("Usage: @create <name>");
else
new = THING.clone(args[2]);
echo("Thing created: " + new.id);
endif
endmethod /* create_cmd */
method destroy_cmd
var what;
if (caller != this)
return 1;
endif
what = this.match_env(args[2]);
if (!what)
echo("What's a " + args[2] + "?");
else
what.destroy();
echo("Destroyed.");
endif
endmethod /* destroy_cmd */
method dig_cmd
var new;
if (caller != this)
return 1;
elseif (!args[2])
echo("Dig what?");
return 0;
endif
new = ROOM.clone(args[2]);
echo("Room dug: " + new.id);
endmethod /* dig_cmd */
method spew_cmd
var what;
if (caller != this)
return 1;
elseif (!args[2] || !args[4])
echo("Usage: @spew <method> on <object>");
else
what = this.match_env(args[4]);
if (!what)
echo("I don't see that here.");
else
echo(what.spew_method(args[2]));
endif
endif
endmethod /* dump_cmd */
method link_cmd
var exit;
if (caller != this)
return 1;
elseif (!args[2])
echo("Link what?");
elseif (!args[3]) /* no preposition */
echo("Usage: @link <exit name> to <room #>");
else
exit = location.match_exit(args[2]);
if (!exit)
echo("I don't know what you want to link!");
else
this.link(exit, args[4]);
endif
endif
endmethod /* link_cmd */
method link
var new_dest;
ignore E_METHODNF;
if (!PERMS_OK)
echo("Permission denied.");
else
new_dest = this.match_env(args[2]);
if (!new_dest)
echo("Link to where?");
elseif (!new_dest.link_ok)
echo("You can't link to that!");
else
args[1].set_dest(new_dest);
echo("Linked.");
endif
endif
endmethod /* link */
method find_cmd
var nm, thing;
ignore E_METHODNF;
if (caller != this)
return 1;
endif
for thing in (creations)
if (args[2])
nm = thing.name;
if (lengthof(args[2]) > lengthof(nm))
if (args[2][1..lengthof(nm)] == nm)
echo(thing.id);
endif
elseif (nm[1..lengthof(args[2])] == args[2])
echo(thing.id);
endif
else
echo(thing.id);
endif
endfor
echo("---");
endmethod /* find */
method list_cmd
var what;
if (caller != this)
return 1;
elseif (!args[2] || !args[4])
echo("Usage: @list <method> on <object>");
else
what = this.match_env(args[4]);
if (!what)
echo("I don't see that here.");
else
echo(what.list_method(args[2]));
endif
endif
endmethod /* list_cmd */
method open_cmd
var exit;
if (caller != this)
return 1;
elseif (!args[2])
player.tell("Open an exit in what direction?");
else
if (!location.open_ok)
echo("You can't open an exit here!");
else
exit = EXIT.clone(args[2]);
location.add_exit(exit);
exit.set_source(location);
echo("Exit " + exit.id + " opened.");
if (args[3]) /* if there's a preposition ("to") */
this.link(exit, args[4]);
endif
endif
endif
endmethod /* open */
method methods_cmd
var what, m;
if (caller != this)
return 1;
elseif (!args[2])
echo("Usage: @methods <object>");
return 0;
endif
what = this.match_env(args[2]);
if (!what)
echo("I don't see that here.");
else
for m in (what.methods)
echo(" " + m);
endfor
echo("---");
endif
endmethod /* methods_cmd */
method show_cmd
var r, what;
ignore E_SERVERDN, E_METHODNF, E_OBJNF;
if (caller != this)
return 1;
elseif (!args[2])
echo("Usage: @show <object>");
return 0;
endif
what = this.match_env(args[2]);
if (!what || what.name == E_OBJNF)
echo("I don't see that here.");
else
r = what.show(args[1], args[2]); /* SSPOT */
if (r == E_SERVERDN || r == E_METHODNF)
echo("You can't show that.");
endif
endif
endmethod /* show_cmd */
method verbs_cmd
var what, v;
if (caller != this)
return 1;
elseif(!args[2])
echo("Usage: @verbs <object>");
return 0;
endif
what = this.match_env(args[2]);
if (!what)
echo("I don't see that here.");
else
for v in (what.verbs)
if (v[2])
echo(" " + v[1] + " : " + v[2] + " = " + v[3]);
else
echo(" " + v[1] + " = " + v[3]);
endif
endfor
echo("---");
endif
endmethod /* verbs_cmd */
endobject /* BUILDER */