inherit "/std/room/basic_room";
#include <money.h>
//#define DEBUGGER "presto"
#define MAX_OBJECTS 12
nosave private object *list;
nosave private int reused;
void setup() {
set_short( "vault room" );
set_long( "This is the vault for money.\n" );
set_keep_room_loaded(1);
list = ({ });
}
string long(string word, int dark) {
if(query_verb() == "scry" )
return "empty space.";
return ::long(word, dark);
}
int no_init() { return 1; }
// add to the list of objects.
void add_to_list(object ob) {
if(sizeof(list) >= MAX_OBJECTS) {
ob->move("/room/rubbish");
#ifdef DEBUGGER
if (this_player() == find_player(DEBUGGER))
tell_creator(DEBUGGER,
"list too large... throwing away %O\n", ob);
#endif
return;
}
#ifdef DEBUGGER
if (this_player() == find_player(DEBUGGER))
tell_creator(DEBUGGER, "Saving %O\n", ob);
#endif
if (member_array(ob, list) > -1) {
log_file("MONEY_RECYCLE", ctime(time()) + "Same object (%O) added twice, this "
"time by %O. Call stack is %O, %O. CMD == %s\n",
ob, previous_object(), call_stack(2), call_stack(3),
this_player()->query_current_cmd());
return;
}
if (!environment(ob) ||
environment(ob)->test_remove(ob, ob->drop(this_object()),
this_object()))
{
ob->reset_effects();
ob->force_no_join();
ob->move(this_object());
ob->set_already_joined();
ob->remove_property("dropped");
list += ({ ob });
}
else
log_file("MONEY_RECYCLE", ctime(time()) + "Could not move %O from %O (%s) to here\n",
ob, environment(ob), environment(ob)->short());
#ifdef DEBUGGER
if (this_player() == find_player(DEBUGGER))
tell_creator(DEBUGGER, "list is now %O\n", list);
#endif
}
object get_money_ob() {
object ob;
// Don't do any recycling coz there's some bad money about.
// return clone_object(MONEY_OBJECT);
if(sizeof(list)) {
ob = list[0];
if(ob) {
#ifdef DEBUGGER
if (this_player() == find_player(DEBUGGER))
tell_creator(DEBUGGER, "Re-using %O\n", ob);
#endif
ob->set_money_array(({ }));
ob->reset_already_joined();
ob->reset_no_join();
reused++;
}
else
log_file("MONEY_RECYCLE", ctime(time()) + "Found NULL entry in object list\n");
list = list[1 .. ];
#ifdef DEBUGGER
if (this_player() == find_player(DEBUGGER))
tell_creator(DEBUGGER, "list is now %O\n", list);
#endif
}
if(!ob) {
ob = clone_object(MONEY_OBJECT);
}
return ob;
}
object *query_list() { return list; }
mixed stats() {
return ::stats() + ({
({ "list", sizeof(list) }),
({ "reused", reused }),
});
}
int query_theft_command() { return -1; }