// Taniwha, added checks for OMIQ in progress "/global/omiq"->flag_in_progress(). restore/save disabled during OMIQ's
#define MAXINV 40
// Inherit this to get your rooms to save objects through reboots.
// ANY object, NPCs, weapons, armours ... whatever. Best example
// would be a dragon hoard. Original code was done by Taniwha and
// Raisa, January 5, 1996
//
// In your setup():
// set_void(string path);
// Use this to make a destination for players in case of reboot
// Generally make it an adjoining room. Do NOT make the destination
// a room_save.c as well. Bad things happen...
//
// Mask the dest_me() if you want to do some house cleaning or personal
// code to the room just before the contents are saved. Be sure to
// return ::dest_me(); to the mudlib.
//
// Any immortal using this room needs to have approval beforehand
// by a Demi-god.
//
//Radix, Jan 6, 1996
inherit "/std/room";
inherit "/global/auto_load";
string *auto_load, voidpath;
int query_saveroom() { return(1); }
void set_void(string path) { voidpath = path; }
int maxinv;
void create()
{
object *olist;
maxinv = MAXINV;
::create();
auto_load = ({ });
if(!"/global/omiq"->flag_in_progress())
{
seteuid("Root");
restore_object(file_name(this_object()),1);
if(sizeof(auto_load))
olist = load_auto_load(auto_load,this_object());
// can't see the purpose of the assignment above, given
// that the var is local -randor
}
}
int test_add(object ob,int flag)
{
if(ob && !interactive(ob))
{
if(sizeof(all_inventory(TO)) > maxinv) return 0;
}
return ::test_add(ob,flag);
}
void dest_me()
{
int i;
object dst;
object *olist = all_inventory(this_object());
// ugly as hell
for(i = 0; i < sizeof(olist); i++)
if(interactive(olist[i]))
{
if(!voidpath) olist[i]->move("/room/void");
else
{
dst = load_object(voidpath);
if(!dst || dst->query_saveroom())
olist[i]->move("/room/void");
else
olist[i]->move(dst);
}
}
olist = all_inventory(this_object());
if(sizeof(olist))
auto_load = create_auto_load(olist);
else auto_load = 0;
if(!"/global/omiq"->flag_in_progress())
save_object(file_name(this_object()),1);
::dest_me();
}