作者laechan (小太保)
看板mud_sanc
标题[指令] 今日 quest 及任务脚本参数增改纪录
时间Tue Oct 11 00:49:09 2011
任务系统大致写到今天结束,有空我会补范例区域进去。今
天晚上还有一点时间则用来清理冗余的 simul_efun,清完後
我要新增 quest 相关的全域函数,预定只新增一个,用这个
来做所有的事情。
星期三起则要写新的东西,有空时则会继续补完道具那篇,
以及撰写零星的对话任务,用於...
1. learn skill from npc <= 以後你要 learn 就得先解任务
2. l mirror <= 你要先跟次元镜管理人做朋友
3. join 公会 <= 公会老大:喂, 你以为我们什麽杂鱼都收吗
4. buy xx from 商店 <= 商店老板:喂, 等等, 先报上名来
5. 进八卦, 血肉, ... <= 你以为说进就进喔
这些任务完全不需要玩家写,当然玩家愿意主动写我们很欢迎
,若是我写,一开始都很简单啦就是找些 npc 对话一下而已。
等以後有空再一个一个慢慢改复杂即可。
一、指令 quest 新增 quest check 脚本档名 语法
假设 l003 的 step1_msg 我改成如下
stpe1_mgs
$M: 我好想喝乌龙茶(Oolong)啊啊啊~~~
$N: 那给我钱啊我买来给你
$M: .......
##
$M: 我好想喝乌龙茶(Oolong)啊啊啊~~~
$M: 喂~别装死啊!##
标红色的部份就是脚本常错之处,包括参数名错误、## 误加等。
> quest check l003
=============================================
step1_npc=/d/map/lodoos/mob/vendor##
stpe1_mgs
$M: 我好想喝乌龙茶(Oolong)啊啊啊~~~
$N: 那给我钱啊我买来给你
$M: .......
=============================================
没有发现应存在的 = 号喔.
它会先抓出你有没有漏加了 = 号,修正後..
> quest check l003
=============================================
step1_npc=/d/map/lodoos/mob/vendor##
stpe1_mgs=
$M: 我好想喝乌龙茶(Oolong)啊啊啊~~~
$N: 那给我钱啊我买来给你
$M: .......
=============================================
这一段发现有问题喔.
你就会发现 stpe1_mgs 拼错了。修正後
> quest check l003
=============================================
step1_msg=
$M: 我好想喝乌龙茶(Oolong)啊啊啊~~~
$N: 那给我钱啊我买来给你
$M: .......
##
$M: 我好想喝乌龙茶(Oolong)啊啊啊~~~
$M: 喂~别装死啊!
=============================================
没有发现应存在的 = 号喔.
没有等号同时也是可能漏加了参数的意思,如上,当
它看到 ## 时底下应该要设参数,却没设,所以这里
的判断就是「实际上你多加了 ## 才造成它的误判」
把多出来的 ## 去掉後
> quest check l003
quest check: 脚本 l003 确认完毕,没有发现问题.
> quest read l003
quest read: 脚本 l003 更新及载入了.
有时会发生脚本有写错、但实际上却可被 read 成功
的情况,然後在实际测试时才发现问题,以後 wiz便
可使用 check 做事先的检查,特别是脚本档庞大的情
况,check 就是一个很好的事前检查工具。
二、任务脚本新增 others 参数
用法很简单,在脚本的最底下类似这样子写..
others=
int test_1()
{
write("test.\n");
return 1;
}##
则当该脚本被 read 时,others 所接的东西就会一
字不变地写进物件档中,如下..
int test_1()
{
write("test.\n");
return 1;
}
这是方便 wiz 在写脚本档时顺便新增自己所需要的
函数用的。如果该函数只做为该脚本任务使用,就
以 others 的方式添增;如果该函数你觉得应该让
全部的脚本都可以呼叫,就写进 quest_d.c。
(当然实际上我不希望你经常去动 quest_d.c)
使用这个参数唯一要注意的当然是不要让它宣告的
函数或全域变数,与已存在的宣告重覆。
三、任务脚本实装 timeX_msg、timeX_end 参数
简单的说 timeX 的 X 指的就是「第几次完成任务
」的意思,例如说 vendor 的 oolong 任务..
steps=4##
step4_end=
give_obj(ppl,"/d/ppl/norr/special_obj/suicide_potion",1)##
time2_end=
give_obj(ppl,"/d/ppl/norr/special_obj/volcano_potion",1)##
上面的意思就是,一般的情况下,当你解完第 4 步骤後,
会得到 suicide_potion,但是当你第 2 次解完第 4 步骤
时,它就不会去呼叫 step4_end, 而改呼叫 time2_end,
意思就是「既然你是解完第 2 次我就呼叫 time2_end」的
意思。
这时得到的就不是 suicide_potion 而是 volcano_potion
而如果你还有加设 time2_msg,那麽 step4_msg 就会被
time2_msg 取代。
简单的说,实装这两个参数的用意,就是为了设定,当玩家
解了该任务到特定次数时,就给予不同的报酬。
至於 timeX_check,因为它有问题(主要是判断),最好别用
,因为 stepX_check 遇到 timeX_check 会被无效化,造成
每一步骤的 check 都会是 timeX_check(这我当初没想到)。
四、
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 115.80.77.46 (10/11 14:52)
1F:推 justinj :用step4_endX...代表第n次解完後就换它了...amem 10/12 08:48
这也是可以,不过太迟了。(不想再动程式码了)
※ 编辑: laechan 来自: 115.80.122.112 (10/12 09:18)