#include "boot.clh"
object ROOT_OBJ
list owners;
num public = 1;
str name = "Root Object";
verb "@rename" : "to" = rename_verb;
method init
if (this == ROOT_OBJ)
this.add_owner(WIZARD);
elseif (PERMS_OK)
owners = {};
else
raise E_PERM;
endif
endmethod
method clone
var new;
if (!PERMS_OK && !public)
raise(E_PERM);
else
new = clone();
new.init();
new.add_owner(player);
if (args)
new.set_name(args[1]);
endif
return new;
endif
endmethod /* clone */
method destroy
var owner;
if (PERMS_OK)
for owner in (owners)
owner.rm_creation(this);
endfor
destroy();
else
raise(E_PERM);
endif
endmethod /* destroy */
method name
return name;
endmethod /* name */
method id
return (name + "(" + tostr(this) + ")");
endmethod /* id */
method sdesc
return ("You see " + name + " here.");
endmethod /* sdesc */
method set_name
if (PERMS_OK)
name = args[1];
else
raise(E_PERM);
endif
endmethod /* set_name */
method rename_verb
var r;
ignore E_RANGE;
if (!this.match(args[2]))
return 1;
elseif (!PERMS_OK)
player.tell("You can't rename that.");
return 0;
endif
r = this.set_name(args[4]);
if (r == E_RANGE)
player.tell("You can't use that new name.");
else
player.tell("Name set.");
endif
endmethod /* rename_verb */
method publish
if (!PERMS_OK)
raise(E_PERM);
else
public = 1;
endif
endmethod
method unpublish
if (!PERMS_OK)
raise(E_PERM);
else
public = 0;
endif
endmethod
method add_parent
if (!PERMS_OK)
raise(E_PERM);
else
chparents(parents + args[1]);
endif
endmethod
method rm_parent
if (!PERMS_OK)
raise(E_PERM);
else
chparents(parents - args[1]);
endif
endmethod
method chparents
if (!PERMS_OK)
raise(E_PERM);
else
chparents(args[1]);
endif
endmethod
method add_verb
if (!PERMS_OK)
raise(E_PERM);
else
return add_verb(args[1], args[2], args[3]);
endif
endmethod /* add_verb */
method rm_verb
if (!PERMS_OK)
raise(E_PERM);
else
return rm_verb(args[1]);
endif
endmethod
method rm_method
if (!PERMS_OK)
raise(E_PERM);
else
return rm_method(args[1]);
endif
endmethod
method rm_var
if (!PERMS_OK)
raise(E_PERM);
else
return rm_var(args[1]);
endif
endmethod
method owners
return owners;
endmethod /* owners */
method add_owner
if (PERMS_OK)
owners = owners + args[1];
args[1].add_creation(this);
else
raise(E_PERM);
endif
endmethod /* add_owner */
method rm_owner
if (PERMS_OK)
owners = owners - args[1];
args[1].rm_creation(this);
else
raise E_PERM;
endif
endmethod /* rm_owner */
method show
var vars;
var item;
player.tell(this.id + " Size: " + tostr(objsize()) + " bytes");
if (parents)
player.tell("Parents: " + tostr(parents));
else
player.tell("No parents.");
endif
if (!public && !PERMS_OK)
player.tell("The rest of the object is not public.");
return;
endif
vars = vars();
if (vars)
for item in (vars)
player.tell(" " + item + ": " + tostr(getvar(item)));
endfor
else
player.tell("No vars.");
endif
endmethod /* show */
method verbs
if (PERMS_OK || public)
return verbs();
endif
endmethod /* verbs */
method methods
if (PERMS_OK || public)
return methods();
endif
endmethod /* methods */
method spew_method
var code;
ignore E_METHODNF;
if (!PERMS_OK && !public)
raise E_PERM;
endif
code = spew_method(args[1]);
if (code == E_METHODNF);
return "That object does not define that method.";
else
return code;
endif
endmethod /* spew_method */
method list_method
var code, parent;
ignore E_METHODNF;
if (!PERMS_OK && !public)
raise E_PERM;
endif
code = list_method(args[1], 0, 0);
if (code)
return code;
endif
/* didn't find it; look on parents */
parent = find_method(args[1]);
if (parent)
code = parent.list_method(args[1]);
if (code)
return "That object does not define that method, but its ancestor " + parent.id + " does:\n" + code;
endif
endif
return "That object does not define that method.";
endmethod /* list_method */
endobject /* ROOT_OBJ */