作者laechan (小太保)
看板mud_sanc
标题[wizs] [置底] questing 的函数用法整理
时间Wed Oct 19 11:00:56 2011
这篇会随时新增。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)
1F:→ hlead :soga... 10/19 13:19
※ 编辑: laechan (61.224.78.65), 10/12/2015 22:01:46