作者laechan (小太保)
看板mud_sanc
标题[wizs] 杀怪型任务脚本设计
时间Fri Sep 30 09:59:20 2011
假设我们以「最少的改动」为前提,那麽在 mob_d.c 的
die 函数里大概会这样子做..
mob_record=(mapping)killer->query_temp("mob_record");
files=base_name(mob);
if(!undefinedp(mob_record[files]))
mob_record[files]++;
上面的意思就是,当玩家 quest npc about xx 时,如果
在第 X 步骤 npc 要求你接下来要去杀 n 只 mob,那脚
本可以这样写...
stepX_end=this_player()->add_mob_record("怪物档名")##
接下来是重点
step(X+1)_check=
this_player()->query_mob_record("怪物档名")<几只
你还没杀够喔.##
问题:如何让玩家知道自己已经杀了几只?
有两种做法,而且可并行,我先讲第二种做法
首先,玩家杀了哪些怪物几只,会纪录在 mob_record 里
头,所以只要 quest 指令新增 quest mob_record 即可.
if(str=="mob_record")
{
mob_record=ppl->query_temp("mob_record");
tmps=keys(mob_record);
str="你所杀的任务相关怪物及只数总表:\n"+
"====================================\n";
foreach(tmp in tmps)
{
mob=clone_object(tmp);
str+=sprintf("%s"CSI"24;22H 已杀 %d 只\n",
mob->query("short"),(int)mob_record[tmp]);
}
write(str+====================================\n");
return 1;
}
上面的好处简单整理如下..
一、不需要改怪物档
除非该怪物自订了 die 函数那就需要 check 看看该
函数有没有 ::die(); 这行
二、在 /std/user/xxx.c 里头新增 mob_record 的相关函
数即可。上面只是例子,实际上新增的函数与上面并
不一样。
三、目前的 quest 指令版本就可执行这类的的脚本
比方玩家已完成任务,那 end 脚本其中一行就是这样写..
step(X+1)_end=this_player()->remove_mob_record("怪物档")##
这样完成该任务的同时,玩家所杀的怪物只数纪录也会顺
手移除,玩家就可重新接该任务。
底下接着讲另一种脚本。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 101.13.236.143