作者laechan (小太保)
看板mud_sanc
标题Re: [问题] quest相关设定
时间Mon Oct 28 09:47:31 2013
questing 的本体在 /open/cmds/quest/quest_data/quest_data.c
,里头的 quested 函数,questing 本身是 simul_efun 所以直接
呼叫即可。
questing 其实很单纯,它的用途分三种..
一、quest 本身在用的
questing("set") 及 questing("check") 这两个而已。
然後你就想参数一定会带「设定的目标(玩家)」以及「哪一个
任务(quest_num)」,以及一个 ({ }) 参数,里面带要设定或
判断的东西。例如要设定玩家某一任务直接解到第 5 步骤
questing("set",names,quest_num,({"steps",5}));
而要判断玩家某一任务是否已解到第 5 步骤
if(questing("check",names,quest_num,({"steps",5}))>0)
再搭配 quest 本身给的 stepX_check 及 stepX_end,就可以
在玩家接取某一任务「前」及某一任务「後」做各种需要的判
断及设定,再搭配 quest query 指令就可立时观看结果。
二、跟 quest 有关的
questing("mob_record")、questing("obj_record")、.....
这些就是与 questing 有关的,它的使用规则也很简单
questing("mob_record","set", quest_num,({设定群}));
"add",
"check_finish",
也就是并非一的情况时,就让 names 当 "set","add",....
等功能区别参数,然後 quest_num 一样当做一种任务标记,
剩下的设定及判断用参数就丢到 ({ }) 里头。
mob_record :([ "a003" : ([
"/d/ppl/fmf/lion/mob/blue" : "##一群蓝鬃狮##0/20",
"/d/ppl/fmf/lion/mob/gray" : "##一群灰鬃狮##0/20",
"/d/ppl/fmf/lion/mob/white" : "##一对白狮##0/10",
"#name" : "斩杀在狮子山中作乱的狮子(02)" ]) ])
对应 questing 就是
questing("mob_record","set","a003",({
ppl, // 第一个参数一定是接玩家ob
"斩杀在狮子山中作乱的狮子(02)", // 第二个参数一定是接该任务名字
"/d/ppl/fmf/lion/mob/blue",20, // 从第三个参数起就是怪物,只数,..
"/d/ppl/fmf/lion/mob/gray",20,
"/d/ppl/fmf/lion/mob/white",10
}));
以上是之前与 norr 讨论出的设定呼叫方式,此呼叫最简易
、最直觉、最方便大量设定。
换言之了解呼叫语法的话,就同样能在需要的时候为玩家设
定「这个时候请你去打败哪些怪物各几只」,它就不会仅限
於只能在任务店使用,举个例子:
step4_end=
questing("mob_record","set","x501",({ppl,"打败火龙流星","/u/l/laechan/area/firedragon/mob/shuttin1",1}))##
然後在 step5_check 就是这样
step5_check=
questing("mob_record","check_finish","x501")<1
你要先去打败火龙流星喔!!##
三、跟 quest 无关的
这就是我以前有提过的,questing 既然是全域函数,就不一
定只能给 quest 用,wiz 是可以视需要自己加东西进去的,
但是加完要报备就是了。
我目前有在使用的是 questing("skyroom") 语法。
questing("skyroom","玩家的name","参数",({副参数群}));
比方说我想知道玩家 laechan 的 skyroom 储存了哪些东西
mapping objs=questing("skyroom","laechan","obj_num");
这就相当於做 skyroom->query("obj_num") 的动作。
比方说我想知道玩家 laechan 的 skyroom 屯积的玉米量
int n=questing("skyroom","laechan","crops",({"corn"}));
这就相当於做 skyroom->query("crops/corn") 的动作。
为什麽我觉得这个可以全域函数化?因为这样一来我就不需
要去做 object ppl=find_player("laechan"),也不需要做
object skyroom=find_object_or_load("/u/l/laechan..")
的动作,更不需要去判断一些有的没的「因为函数都帮我判
断好了」,然後可随时呼叫「因为它是全域函数」。
给各位 wiz 做参考。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53