作者laechan (小太保)
看板mud_sanc
標題[摳頂] 副本系統
時間Fri Feb 21 08:35:47 2014
#define INSTANCE_ROOM
static mixed files=({});
static mapping instance_area=([]);
int product_instance(object ppl)
{
string f,names;
object room,ob;
names=ppl->query("name");
instance_room[names]=([]);
foreach(f in files)
{
if(!file_exists(f+".c"))
{
write("副本產生失敗!\n");
return 1;
}
else if(catch(room=find_object_or_load(f)))
{
write("副本產生失敗!\n");
return 1;
}
ob=clone_object(INSTANCE_ROOM);
ob->set("short",room->query("short"));
ob->set("long",room->query("long"));
ob->set("exits",room->query("exits"));
ob->set("objects",room->query("objects"));
ob->reset();
instance_room[names][f]=ob;
}
write("副本產生中......\n");
call_out("enter_instance",2,ppl,names);
return 1;
}
int enter_instance(object ppl)
{
object ob;
if(!ppl)
{
clean_instance(ppl,names);
return 1;
}
ob=instance_room[names][files[0]];
ppl->move_player(ob,"SNEAK");
ob->start_count_time(ppl);
return 1;
}
========================================================
這個副本系統是比之前更單純的東西,如上所見,它的核心只有
幾行,加上一些擴充的東西應該 200 行以內也可以搞定,精華
主要寫在 INSTANCE_ROOM 裡頭。結合 quest 的話就類似底下的
表現..
> quest ooo about xxx
某人: 好的, 現在就送你到OO之地, 請跟那裡的神官對話!
副本產生中....
+ 羅德斯大教堂 +
你現在位於本地最負盛名的教堂裡,這個教堂已經有相當久的歷
史了,看起來大概有一、二百年的時間,牆上的繪畫已經開始剝
落了,已經快看不出來在畫些什麼了,但依稀可見到的是,天神
創造這個世界的情況。目前這個教堂由幾個牧師來管理,幫忙人
們辦理結婚大事。你可以打(help marriage)來獲得訊息。
明顯出口有: north.
Lv200.教堂神官-尤尼(Yuuni)
>
這東西不會很難寫,而且它也支援組隊過副本、多人副本、腳本
架構等,甚至玩家也有能力寫,因為它的腳本架構還蠻簡單的。
不過這東西我現在沒啥動力寫(給我一些動力吧!!),可以確定的
是這東西一定會出現在聖殿。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: laechan 來自: 210.61.157.53 (02/21 10:47)
1F:→ laechan :我想說先決定一下要怎麼測這東西 02/21 13:48
難決定的原因是比方我拿現用的區域,則到時要憑空創出區域時
得改很多東西。
但假若一開始拿憑空創出的區域測試,則怕寫出來的東西反而會
不相容於現有區域(而且比較花時間)。
然後理論上應該從後者開始,但實務上一般多會拿現用的..
so,到下班前我得多考慮考慮。
※ 編輯: laechan 來自: 210.61.157.53 (02/21 14:56)
2F:→ laechan :另一個問題就是除了quest,這東西有無其它用途 02/21 14:57
3F:→ laechan :比方幻想有所謂的50關副本,「理論上」聖殿是可以做 02/21 14:58
4F:→ laechan :的,只是比起單純闖區域,副本除非有吸引力不然玩家 02/21 14:58
5F:→ laechan :一般是不會想去打副本的 <- 所以我才會沒啥興趣寫 02/21 14:58
順便備份
副本一定包括底下幾個要素
1.跑副本的封閉區域
2.每一房間的觸發設定(init)
a.觸發生怪(生出物件)
b.觸發劇情(生出 npc、對話等)
c.觸發劇情提示
d.可下指令(add_action)
e.block 玩家(block_command)
3.怪物死亡設定(物件的 die 函數)
a.死亡後生出可對話 npc
b.死亡後生出出口
c.死亡後觸發劇情
4.times_check 輔助管理該副本
※ 編輯: laechan 來自: 210.61.157.53 (02/21 15:25)
6F:→ laechan :我覺得還是用腳本化的做法,但捨棄之前的一些構想方式 02/21 17:37
7F:→ laechan :(之前是想連地圖都腳本化) 02/21 17:37