#include <std.h> #include <security.h> #include <dirs.h> inherit ROOM; private string *__Clones; private string __SaveFile, __Owner; nomask void set_save_file(string str); nomask void do_save(); void create() { ::create(); __Clones = ({}); } void reset() { object ob; int i; ::reset(); if(!__Clones || !(i=sizeof(__Clones))) return; while(i--) { catch(ob = new(__Clones[i])); if(ob) ob->move(this_object()); } } nomask void set_save_file(string str) { if(geteuid(previous_object()) != UID_HM) return; __SaveFile = str; do_save(); } nomask void set_owner(string str) { if(geteuid(previous_object()) != UID_HM) return; __Owner = str; } nomask void do_save() { save_object(__SaveFile); } nomask void setup(string file) { if(geteuid(previous_object()) != UID_HM) return; restore_object(file); } void add_clone(string file) { object ob; if(!file_exists(file) && !file_exists(file+".c")) return; if(catch(ob=new(file))) return; seteuid(UID_LOG); log_file("castles", file+" added to "+__Owner+"'s file: "+__SaveFile+ " by "+file_name(previous_object())+"("+geteuid(previous_object())+")\n"); seteuid(getuid()); ob->move(this_object()); __Clones += ({ file }); } string query_owner() { return __Owner; } string query_save_file() { return __SaveFile; } string *query_clones() { return __Clones; }