比方現在在任務店接某任務如下:
> receive b004
你成功地接取了這項任務,請加油!
> quest demo
『尋找傳說中的金色便便(b004)』 黃金便便 ( 0 / 15 )
這是做底下的呼叫
questing("obj_record","set","b004",({ppl,"任務描述","物品檔案1",所需數量,
"物品檔案2",所需數量,
.
. }));
所以我做了底下的修改
quest_data.c 的 quested 函數的 switch("obj_record") 段
修改 set 區、query 區、finish/check_finish 區。
我加上了判斷虛擬物品的相關設定及規則,同樣的,一般來說
wiz 不需知道這裡改了什麼,只要知道如何呼叫即可。
修改時忘了做備份,蠻危險的。
改好了之後用 running code 做測試
questing("obj_record","set","x999",({me,"測試搜集虛擬物品",
"m001",50,"/d/auc/blarket/ob18",10,"m002",50}));
上面是虛擬跟實體物品混在一起的情況。
> quest demo
----------------------------------------------------------------------
『測試搜集虛擬物品(x999)』 腐臭花 ( 0 / 50 )
『測試搜集虛擬物品(x999)』 技能值補正券 ( 1 / 10 )
『測試搜集虛擬物品(x999)』 哀唱草 ( 0 / 50 )
『尋找傳說中的金色便便(b004)』 黃金便便 ( 0 / 15 )
然後更動自己身上的腐臭花數量為 10 再 quest demo:
> quest demo
----------------------------------------------------------------------
『測試搜集虛擬物品(x999)』 腐臭花 ( 0 / 50 )
『測試搜集虛擬物品(x999)』 技能值補正券 ( 1 / 10 )
『測試搜集虛擬物品(x999)』 哀唱草 ( 10 / 50 )
『尋找傳說中的金色便便(b004)』 黃金便便 ( 0 / 15 )
======================================================================
假設某任務的某一步驟,希望玩家去打某怪物以收集某虛擬物品,
而且只有當玩家接到該步驟時才會掉。
現階段支援的其中一種做法,是修改該怪物,增加 mob_drop_rate
函數。以任務編號 x999 第 n 步驟掉編號 q100 物品為例..
int mob_drop_rate(object ppl)
{
string names=ppl->query("name");
int n=questing("check",names,"x999",({"steps"}));
if(n==5)
{
return (["q100":500]); // 滿足條件才有掉落率
}
else
return (["q100":0]); // 不然該物品掉落率就是 0
}
然後我們可以設定玩家可 sell(drop) 該物品,但是不能 trade,
則玩家 sell 該物就形同不讓該物品佔空間(即便沒有放棄任務),
設定不能 trade 玩家就無法轉讓,而沒有滿足 mob_drop_rate 的
條件就不會繼續掉該物品,當玩家在 ob view q100 時,則直接在
q100 的 desc 裡面備註這是哪個任務的相關物品即可,例如..
> ob view q100
白色的透布(物品編號: q100)
────────────────────────────
販賣:可
交換:不可
任務:菲里德古堡尋親任務相關物品 <= 這是 desc
────────────────────────────
這是最簡易的做法也是推薦的做法。
(其它做法都需要額外讀參數,沒必要)
以上,看 norr 與 justin 有無問題,若還有需要修改的部份再跟
我說。目前唯一的問題就是 mob_record 及 obj_record 都是設定
在玩家的 temp_data 區,也就是說當玩家接了某一任務跑到某一
步驟,stepX_end 才設定 mob_record 及 obj_record,結果玩家
卻 quit 了(或 shutdown),那如何讓玩家可重接?
目前的暫定做法就是自訂 stepX_check 函數來因應,我個人是支
持這樣的做法「因為 mob_record 及 obj_record 還是以任務店為
主」,以 quest npc 或 quest here 的做法就自訂函數,如同上面
自定 mob_drop_rate 函數的精神一樣。
我目前則會在近日,在羅德斯找一隻 npc,來模擬類似幻想神域的
任務進行方式,它的特色是...
一、該任務為複合型任務集合,每一步驟都要求玩家要做什麼
二、quest demo 可看到每一步驟的要求項目
1.殺怪
2.收集物品
3.找誰對話再回來
.
.
三、每一步驟都會給玩家獎勵,玩家達成所有步驟給最多獎勵
後續 quest show 的支援部份則比較複雜,因為目前只有針對最後
一個步驟做分析,而且分析方法還蠻笨的。我思考的解決方法是新
增一個 stepX_award 函數,玩家在接任務時會跟 stepX_end 一起
呼叫,但是在做 quest show 時它就會單獨只呼叫 stepX_award,
而它的內定型式如下
varargs stepX_award(object ppl,object npc,string key,string var)
當有參數 var 時,它回傳的將是設定內容,這個會找時間加進去
並公告用法及相關測試結果。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.61.157.53