inherit ROOM_OBJ; mapping room_cont, shop_type; int max_num, loot; 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; } 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 || ENV(ob) != TO ) 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 updating etc... */ void test_cont() { map( INV(TO), (: add_thing($1) :) ); } /* test_cont() */ void remove_thing( object ob ) { mixed arr; int i; string sh; if( !ob || ENV(ob) == TO ) return; sh = (string)ob->query_property("shop type"); if( shop_type[sh] ) shop_type[sh] = 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 ) { map_delete( room_cont, sh ); } else room_cont[sh] = delete( arr, i, 1 ); } /* remove_thing() */ void event_enter( object ob ) { 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 parent ) { return 0; }