另一种形式的迷宫
2007/5/10 20:48:20

上一种是一个room生成迷宫,下面要说的是多个room生成迷宫
//2>多个room生成迷宫
//modified by hyee
//将指定的一个房间目录连成一个圆周,并随机取两个房间连接出入口。
//must define:
//要变的房间目录home
//string home=house+"/dynamic/"
//出入口(entry and exit)的file_name
//string entry=house+"/yongdao3"
//string exit=house+"/hall"
//string *add_room:house以外的room
//default:add_room=({});
//string *add_obj:要在里面放入的obj的base_name集
//add_obj=({});
/*
eg:
//ddd.c
#include SILENT
void create()
{
        seteuid(getuid());
        home=HYEE("room/chzhuang/dynamic/");
        entry=HYEE("room/chzhuang/yongdao3");
        exit=HYEE("room/chzhuang/hall");
        add_obj=({HYEE("center/killer/dizi")});
        call_out("r_map",1);
        return;
}
*/
int i,j,size;
string *dyna_room,dir1,rev_dir1,*dirs,*rev_dirs,home,entry,exit;
object *room_object,cur_room,room;
mixed *room_list,*add_room=({}),*add_obj=({});
private int r_map();
private int r_map()
{
        object *inv;
        string *di,*rd;
               
        remove_call_out("r_map");
//call_out("r_map",3600); // regenerate map every 30 mins.
  //    CHANNEL_D->do_channel( this_object(), "sys",
    //  "动态地图已经启动。\n");
        room_list = get_dir(home+"*.c");       
        for(i=0;i<sizeof(room_list);i++)
        room_list[i] = home+room_list[i];
        add_room-=({0});
        if(!sizeof(add_room))
        add_room=({});
        room_list += add_room;                             
        dyna_room = ({});
        while(sizeof(room_list))
        {
                j = random(sizeof(room_list));
                if(!objectp(room=load_object(room_list[j]))
                ||!inherits(ROOM,room))
                {
                        room_list-=({room_list[j]});
                        continue;
                }             
                dyna_room += ({room_list[j]});
                room_list -= ({room_list[j]});
        }
        //随机分配位置完毕                                             
        //hyee remodified,太复杂了反而不好.
        //CHANNEL_D->do_channel(this_object(),
        //"sys","开始重新生成地图。\n");
        size = sizeof(dyna_room);
        room_object = ({});
        for(i=0;i<size;i++)
        {
        if( !(cur_room = find_object(dyna_room[i])) )
                cur_room = load_object(dyna_room[i]);
                inv=all_inventory(cur_room);
                if(sizeof(inv))
                for(j=0;j<sizeof(inv);j++)
                {
                        if(!clonep(inv[j]))
                        continue;
                        if(userp(inv[j]))
                        continue;
                        if(!random(2))
                        reload_object(inv[j]);
                        else destruct(inv[j]);
                }
                else if(!random(2)&&sizeof(add_obj)) {
                j=random(sizeof(add_obj));
                if(objectp(new(add_obj[j])))   
                new(add_obj[j])->move(cu

下一页
返回列表
返回首页
©2025 MUD游戏网_文字mud 电脑版
Powered by iwms