#include <ansi.h>
inherit ROOM;

int r_flag = 0;
int s_flag = 0;

mapping wks = ([
        "north" : "south",
        "south" : "north",
        "west"  : "east",
        "east"  : "west",
        "out"   : "enter",
        "enter" : "out",
        "up"    : "down",
        "down"  : "up",
]);

string *dirs = ({
        "/d/youxia/",           //wanmei
        "/d/qujing/fengxian/",  //fengxian
        "/d/qujing/huangfeng/", //huangfeng
        "/d/qujing/baoxiang/",  //baoxiang
        "/d/qujing/pingding/",  //pingding yalong
        "/d/qujing/wuji/",      //wuji
        "/d/qujing/jindou/",    //jindou
        "/d/qujing/nuerguo/",   //nrg
        "/d/qujing/dudi/",      //dudi
        "/d/qujing/firemount/", //firemount
        "/d/qujing/jilei",      //jilei
        "/d/qujing/jisaiguo/",  //jisaiguo
        "/d/qujing/jingjiling/",//jjl
        "/d/qujing/xiaoxitian/",//xxt
        "/d/qujing/zhuzi/",     //zhuzi
        "/d/qujing/qilin/",     //qilin
        "/d/qujing/pansi/",     //pansi
        "/d/qujing/biqiu/",     //biqiu
        "/d/qujing/qinfa/",     //qinfa qinghua
        "/d/qujing/yuhua/",     //yuhua
        "/d/qujing/baotou/",    //baotou
        "/d/qujing/zhujie/",    //zhujie
        "/d/qujing/qinglong/",  //qinglong
        "/d/qujing/jinping/",   //jinping
        "/d/qujing/tianzhu/",   //tianzhu
        "/d/qujing/maoying/",   //my
        "/d/qujing/sanjie/",    //sanjie
        "/d/qujing/wuzhuang/",  //wzg
        "/d/dntg/hgs/", //hgs
});     

object random_room()
{
int  i, j,k;
object newob;
mixed*  file, exit;
if( !sizeof(dirs) )  return 0;
if( !sizeof(dirs) )  return 0;

i = random(sizeof(dirs));    
file = get_dir( dirs[i]+"/*.c", -1 );
if( !sizeof(file) )
        {
        write("size of file <0\n");     
        return 0;
        }
for(k=0;k<30;k++) 
        { 
        j = random(sizeof(file));
        if( file[j][1] > 0 ) 
                {
                newob = load_object(dirs[i]+file[j][0]);
                if (newob) 
                        {  
                        if( newob->query("no_fight") || newob->query("no_magic") 
                         || !(exit=newob->query("exits")) || sizeof(exit)<1 
                        || sizeof(all_inventory(newob))<1 )
                                continue;
                        else    return newob;
                        }
                }
        else    {
                write("no file.\n");
                return 0;
                }       
        }
return 0;
}

void remove_room(object where)
{
if ( !where )
        return;
if ( !mapp(where->query("old_exit")) )
        return;
where->set("exits",where->query("old_exit"));
where->delete("old_exit");
message("channel:rumor",HIB"\n大变过后，"HIR+MISC_D->find_place(where)+HIB" 逐渐又恢复了往日的平静。。。。\n\n"NOR,users());        
}

void setup()
{

object where;   
::setup();
if ( r_flag!=1 )
        {
        where = random_room();
        if ( !where || !objectp(where) || stringp(where->query("exits/enter")) )
                message("channel:rumor",HIB"\n风云恒远，波澜不惊，此刻什么变化也没有。。。。\n\n"NOR,users());
        else    {
                r_flag = 1;
                where->set("old_exit",where->query("exits"));
                where->set("exits/enter",__FILE__);
                remove_call_out("remove_room");
//              call_out("remove_room",300,where);
                call_out("remove_room",5,where);
                message("channel:rumor",HIB"\n风云忽变，波澜狂涌，据说在 "HIR+MISC_D->find_place(where)+HIB" 出现了一道奇怪的入口。。。。\n\n"NOR,users());
                }               
        }
}
        
void create()
{
set("short","未知世界入口");
set("long",YEL+@LONG
这里是未知世界的入口。进入未知世界，必须知道
        1.      在此世界死亡，只会减少等级经验，如果等级经验小于0，
                则会自动降一级；
        2.      在此世界，必须组队进入(help team)，等级相差30级以
                外的，不能组队；
        3.      在此世界内的怪物，杀死后，随机有武学经验或道行或潜
                能或等级经验奖励。
        4.      杀此怪物后，在场的组员全部有相应的奖励。
        5.      如果想中途退出未知世界，输入 quit|halt 即可
        
LONG+NOR);
set("exits",([
        "west" : __DIR__"road",
]));
setup();
}

void delete_room(object *ob)
{
int i,k;
object *inv;    
if ( !pointerp(ob) )
        return;
i = sizeof(ob);
while(i--)
        {
        if ( objectp(ob[i]) )
                {
                inv = all_inventory(ob[i]);
                k = sizeof(inv);
                while(k--)
                        {
                        if ( objectp(inv[k]) )
                                {
                                if ( !userp(inv[k]) )
                                        destruct(inv[k]);
                                else    inv[k]->command("halt");
                                }
                        }
                destruct(ob[i]);
                }
        }                                                               
}               

int valid_leave(object who,string dir)
{
int i,ff=0;
object *ob,*where;
object w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,w11,w12,w13,w14,w15,w16,w17,w18,w19,w20;
object r1,r2;
string di,*dis;
string name;

if ( s_flag )
        return notify_fail("这个入口已经有人进入了。\n");
                
if ( !userp(who) )
        return 0;
if ( dir=="west" )
        {
        ob = who->query_team(); 
        if ( !ob || !pointerp(ob) )
                return notify_fail("你尚未组队，不能进入！\n");
        if ( !who->is_team_leader() )
                return notify_fail("你不是所在小组的组织者，不能进入。\n");
        i = sizeof(ob);
        name = who->query("name")+"带领";
        while(i--)                                                                     
                {
                if ( ob[i]==who )
                        continue;
                name+= ob[i]->query("name")+" ";
                }
        s_flag = 1;     
        message("channel:rumor",HIB"\n听说 "+name+"闯进了"HIR"未知空间"HIB"！为时五分钟\n\n"NOR,users());
        w0 = clone_object(__DIR__"room.c");
        if ( !w0 )
                error("__DIR__'room.c' 缺少!\n");
        w1 = clone_object(__DIR__"room.c");
        w2 = clone_object(__DIR__"room.c");
        w3 = clone_object(__DIR__"room.c");
        w4 = clone_object(__DIR__"room.c");
        w5 = clone_object(__DIR__"room.c");
        w6 = clone_object(__DIR__"room.c");
        w7 = clone_object(__DIR__"room.c");
        w8 = clone_object(__DIR__"room.c");
        w9 = clone_object(__DIR__"room.c");
        w10 = clone_object(__DIR__"room.c");
        w11 = clone_object(__DIR__"room.c");
        w12 = clone_object(__DIR__"room.c");
        w13 = clone_object(__DIR__"room.c");
        w14 = clone_object(__DIR__"room.c");
        w15 = clone_object(__DIR__"room.c");
        w16 = clone_object(__DIR__"room.c");
        w17 = clone_object(__DIR__"room.c");
        w18 = clone_object(__DIR__"room.c");
        w19 = clone_object(__DIR__"room.c");
        w20 = clone_object(__DIR__"room.c");
        where = ({w0,w1,w2,w3,w4,w5,w6,w7,w8,w9,w10,
                  w11,w12,w13,w14,w15,w16,w17,w18,w19,w20});
        remove_call_out("delete_room");
        call_out("delete_room",300,where);
        while(ff<21)
                {
                r1 = where[random(sizeof(where))];
                dis = keys(wks);
                di = dis[random(sizeof(dis))];
                if ( !r1->query("exits/"+di) ) 
                        {
                        r2 = where[random(sizeof(where))];
                        if ( !r2->query("exits/"+wks[di]) ) 
                                {
                                ff++;   
                                r1->set("exits/"+di,r2);
                                r2->set("exits/"+wks[di],r1);
                                message("team",YEL"『"WHT"系统"YEL"』"CYN"通道随机连机"+ff+"完成\n"NOR,ob);
                                }
                        }
                }
        i = sizeof(ob);
        while(i--)
                {
                ob[i]->start_busy(1);
                if ( ob[i]->move(w0) )
                        message("team",HIW"【组队】"+ob[i]->query("name")+HIW"：我已进入地图。\n"NOR,ob);
                }       
        return notify_fail("你决定带领队员进入未知空间。\n");
        }
return 0;
}       
