[wizs] [置底] questing 的函數用法整理
這篇會隨時新增。questing 函數寫在 /open/cmds/quest/quest_d.c
,並支援全域呼叫的模式。
(以後則會把它挪到 /adm/daemons 下存放)
全域的意思是說,例如某房間 set("pre_exit_func/north","hihi");
int hihi()
{
if( questing("check",玩家id,任務編號,({"times"})) > 0 )
return 0;
write("你要先解過 XXXX 任務才可以往北邊走喔.\n");
return 1;
}
所以我才會跟 norr 說這個東西以後會很常被用到。
============================================================
kind names quest_num vars
if( questing("check","玩家id","任務編號",({"times",3})) >0 )
write("玩家有解過這個任務 3 次.\n");
n = questing("check","玩家id","任務編號",({"times"}));
write("玩家解過這個任務 "+n+" 次.\n");
if( questing("check","玩家id","任務編號",({"steps",3})) > 0 )
write("玩家在這個任務上已經解到第 3 步驟.\n");
n = questing("check","玩家id","任務編號",({"steps"}));
write("玩家解這個任務解到第 "+n+" 步驟了.\n");
※假設你要進行的判斷是「玩家已經解這個任務解過 2 次,
正在解第 3 次,而且也已經解到第 4 步驟了」,它的判
斷方式就是..
if( questing("check","玩家id","任務編號",({"times",2})) > 0 &&
questing("check","玩家id","任務編號",({"steps",4})) > 0 )
10/20更新:
questing 新增支援 kind="skyroom" 的語法, 並以 vars 做
為「判斷值是否符合」或是「傳回值」的依據.
傳回值
// 傳回天空城作物資料
mapping crosp=questing("skyroom","laechan","crops",({}));
// 傳回天空城 m1 這個作物的數量
int n=questing("skyroom","laechan","crops",({"m1"}));
┌← 一定要有
// 傳回 laechan 的 myskill 的名字 ↓
string sname=questing("skyroom","laechan","myskill_name",({""}));
確認值
// 確認天空城 m1 這個作物的數量是不是等於 100
if( questing("skyroom","laechan","crops",({"m1",100})) > 0)
write("laechan 家的 m1 作物數量確實等於 100.\n");
// 確認 laechan 的 myskill 的名字是不是 怒火燒盡九重天
if( questing("skyroom","laechan","myskill_name",({"","怒火燒盡九重天"}) > 0)
write("laechan 的自創武功名字確實是怒火燒盡九重天.\n");
mob_record:
if(questing("mob_record","check","xxx",({玩家}))>0)
write("我已經接了 xxx 這個打怪任務.\n");
else
write("我還沒接 xxx 這個打怪任務.\n");
玩家接了 xxx 這個打怪任務時的設定語法
questing("mob_record","set","xxx",({玩家,
"/u/l/laechan/area/felid/mob/lovers1",10,
"/u/l/laechan/area/whitetile/mob/customer1",10}));
也就是從玩家物件之後所接的東西,就是 "怪物檔",隻數,"怪物檔",隻數,..
當玩家殺死一隻 lovers1 時,在 die 函數裡就會做如下呼叫
questing("mob_record","add",
"/u/l/laechan/area/felid/mob/lovers1",
({玩家}));
要讀取玩家目前殺怪的完成率時,就做如下讀取
write("殺完後資料如下:\n"+
identify(questing("mob_record","query","xxx",({玩家})))+"\n");
執行結果範例如下
({ 已殺隻數 應殺隻數
({ "/u/l/laechan/area/whitetile/mob/customer1", 0, 10 }),
({ "/u/l/laechan/area/felid/mob/lovers1", 1, 10 }),
})
可以看到它是一個雙層的陣列架構,宣告一個 mixed 就能讀取它。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
→
10/19 13:19, , 1F
10/19 13:19, 1F
※ 編輯: laechan (61.224.78.65), 10/12/2015 22:01:46
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
106
322
23
29
16
41
17
25