剛實驗,可以了,以下為全檔。
// 簡單副本
// /std/new_ob/instance/laechan/006.c
// 該副本設定於 /u/l/laechan/workroom, instance -list 後可選
// "測試串接副本" 的單人 or 多人模式, 進入後往南走兩格, 殺掉
// 所有 corps, 理論上就會出現 next 的出口,連往第二副本
#include "../instance.h"
inherit INSTANCE_OB;
void create()
{
string tmp;
int i;
::create();
seteuid(getuid(this_object()));
set("pre_clean",1);
instance_cd_times=INSTANCE_CD_TIMES;
// 設定區開始
// 理論上多張地圖可畫在同一 map2data 中, 重點在新增出口串接
// 同一副本下模擬其為多個副本的適當做法應該就是這樣, 結案
// 兩個副本寫在同一張 map2data 內
// 分隔方式不一定要照下面, 只要確定副本與副本間原本並無出口連接即可
// 微複雜的多層式副本原則上可以照此做法去設定
[email protected]
501
|
502
|
503
504-505-506
LONG
;
instance_names="測試串接副本";
instance_comm=(["xxxxx":1]);
instance_data=([
"503":([
"instance_check":1,
]),
]);
instance_paths="/u/l/laechan/area/felid/room/"; // 副本實際區域目錄
instance_ob=base_name(this_object()); // 固定
// 副本區域房間範圍, 第一個 room (如083) 固定為起點
instance_files=({
"501","502","503","504","505","506"
});
// 底下固定
foreach(tmp in instance_files)
instance_files[i++]=instance_paths+tmp;
// 怪物資料 files 必備, 其它就是 short, long, ... 等可自訂
instance_mob_datas=([
"corps1":(["files":"/u/l/laechan/area/felid/mob/corps1",
"level":150,
]),
]);
// 副本各房間生怪資料, 所生的怪在 instance_mob_datas 都要有定義
instance_mobs=([
"5":([
"501":({"corps1","corps1"}),
"502":({"corps1","corps1"}),
"503":({"corps1","corps1"}),
"504":({"corps1","corps1"}),
"505":({"corps1","corps1"}),
"506":({"corps1","corps1"}),
]),
]);
// 設定區結束
}
int instance_check(string files,object room)
{
mixed ppl_rooms;
int flags,t;
string ppl_names;
object ob;
switch(files)
{
case "503":
flags=(int)room->query("instance_flags");
t=time();
switch(flags)
{
case 0:
// 工兵都被消滅時
if(!present("felid corps",room))
room->set("instance_flags",1);
break;
case 1:
// 先改 flag
room->set("instance_flags",2);
// 讀取副本創建者
ppl_names=room->query("instance_player");
// 載入 /std/new_ob/instance_rooms.c 物件
ob=find_object_or_load(INSTANCE_ROOMS);
// 讀取該副本下的所有房間, 未來可增加讀取特定房間的函數語法
ppl_rooms=ob->ppl_instance("query",ppl_names);
// 設定連往虛擬第二副本的出口
room->set("exits/next",ppl_rooms["/u/l/laechan/area/felid/room/504"]);
break;
}
break;
}
return 1;
}