#include <config.h> #ifndef __DISTRIBUTION_LIB__ #include <thief.h> #endif inherit "/std/room/basic_room"; mapping room_cont; int max_num; int loot; mapping shop_type; void create() { room_cont = ([ ]); shop_type = ([ ]); max_num = 8; ::create(); loot = random(10); set_keep_room_loaded(1); call_out("test_cont", 1); } /* create() */ mapping query_room_cont() { return room_cont; } /* query_room_cont() */ int query_max_num() { return max_num; } void set_max_num(int i) { max_num = i; } void add_thing(object ob) { string shr; if (!ob || environment(ob) != this_object()) return ; shr = (string)ob->query_property("shop type"); if (!shop_type[shr]) shop_type[shr] = ({ ob }); else shop_type[shr] += ({ ob }); shr = (string)ob->short(); if (!room_cont[shr]) { room_cont[shr] = ({ ob }); return ; } if (sizeof(room_cont[shr]) > max_num) call_out("do_dest", 1, ob); else room_cont[shr] += ({ ob }); return ; } /* add_thing() */ /* for updateing etc.... */ void test_cont() { int i; object *obs; obs = all_inventory(); for (i=0;i<sizeof(obs);i++) add_thing(obs[i]); } /* test_cont() */ void remove_thing(object ob) { mixed *arr; int i; string sh; if (!ob || environment(ob) == this_object()) return ; sh = (string)ob->query_property("shop type"); if (shop_type[sh]) shop_type[sh] = (object *)shop_type[sh] - ({ ob }); sh = (string)ob->short(); if (!room_cont[sh]) return ; arr = room_cont[sh]; if ((i = member_array(ob, arr)) == -1) return ; if (sizeof(arr) <= 1) { room_cont = m_delete(room_cont, sh); } else room_cont[sh] = delete(arr, i, 1); } /* remove_thing() */ void event_enter(object ob, string, object) { call_out("add_thing", 1, ob); } /* event_enter() */ void event_exit(object ob, string mesage, object to) { call_out("remove_thing", 1, ob); } /* event_exit() */ void do_dest( object thing ) { if ( !thing ) return; thing->move( "/room/rubbish" ); } /* do_dest() */ mapping query_shop_type_mapping() { return shop_type; } int clean_up(int) { return 0; }