出差剛回來。
※ 引述《justinj (黑旋風)》之銘言:
: 看看能不能擁有這些功能
: 1.限時副本(就是副本只能存活n分鐘)
這個在 instance_data 裡面新增參數來判斷即可,時間一到就是
全員脫出不能再跑。
從這裡可以看出還能增加一個 instance_comm 的欄位,也就是所
謂的「共通設定」。
: 2.任務:擊殺副本的怪幾隻之類的
假設副本區域房間路線不是單一路徑,那上述最簡單的做法就是
「自寫怪物」,然後這些怪物只在副本出現,殺死這些怪物時
int die()
{
this_player()->add_temp("xxx",1);
::die();
return 1;
}
我會比較建議這樣的做法,因為它不管是對「單人」或「多人副
本」來說,都比較好設定,在 die 函數裡面統一解決即可,比方
說人就是
string names=environment(this_object())->query("instance_names");
mixed usr=users();
foreach(ppl in usr)
if(ppl && environment(ppl))
if(environment(ppl)->query("instance_names")==names)
ppl->add_temp("xxx",1); // 在同一副本裡的玩家都+1
: 3.任務:副本通關
最常見有兩種形式(多種也可以)
一、走到這格即通關
在 instance_data 裡面新增參數判斷即可
二、打死該格某隻怪物即通關
用 mob_alldie 來判斷即可
: 4.只有在某副本才會掉的物品(ob)(如果可以,增加連接了某任務才會開始掉ob)
這個只要改 mob_drop 即可,怪物可以設定其它資料,因此只要
讓 mob_drop 讀取這個所謂的「其它資料」,則副本怪就可以比
一般怪(即使檔案一樣)多掉一些東西。
比方怪物都會設定 instance 相關的東西
if(mob->query(instance相關設定))
才會執行副本額外掉落資料;
: 5.國家副本(只有某國家才能進去),或類似限制之類的
這個簡單,等副本穩定再開給玩家寫他國家自己的副本即可。
: 6.是否限制只能進入幾次(還是限制是否能被邀請)
這可以跟任務結合,因為任務有「你要再接任務要再經過多久」
的設計,也就是接任務→才能進副本,則要再進副本自然要再接
任務,這時就能接受任務的 CD 時間設定。
也就是說,實際上沒有這個任務也沒關係,例如
questing("i999",names,...
透過 questing 函數,即便沒有某個任務也能給任務標記,就能
用 quest_data 來儲存玩家的 CD 時間資料。這個以後有空會詳
說。
那初期則可透過設在 /std/new_ob/instance/instance_rooms.c
裡面的資料來判斷,這個適用於「資料不一定要被儲存起來,暫
存即可」,因為 instance_rooms.c 不可被update,所以它可以
儲存比較長時間的暫存資料。
: 7.是否可自行增加額外限制指令
這個透過 add_action 就可處理,instance_room.c 只要有相對
應的函數來對映即可。
: 8.是否可自行增加一進入副本就會在玩家身上多物品
: (我覺得這樣要限制指令或得什麼可能比較好加)
: 暫時這樣...
這個最好寫成虛擬物品,透過 ob use 來控制,則該虛擬物品的
實體物件就能透過 ob_use_func 來控制玩家該指令的使用,例
如在副本裡面才能用(environment(ppl)),沒有在副本裡就不能
用。
這些在回國後都會逐漸實裝。趁現在副本系統架構已定,但是還
在撰寫中,修改彈性是很大的。等到都寫完後要再改,就會比較
難改。
Laechan