作者laechan (小太保)
看板mud_sanc
标题[wizs] set_npcs 与 quest 的设定问题
时间Thu Feb 7 11:34:43 2013
目前以 set_npcs 的形式所叫出来的 npc,都指向同一个物件
/std/new_ob/npc。
虽然说 quest 指令可以依「关键字」的不同,决定要执行的是
哪一个任务(也就是同一 npc 物件可设定多个任务的设计),但
是在做 quest show 时就会出问题。
因此我构思了一个让 npc.c include 的 npc.h,设计如下..
> more npc.h
::::::::::::::
/open/cmds/quest/npc.h ::::::::::::::
#define NPC_QUEST ([\
"oolong":"/u/l/laechan/skycastle/room/street/supply1",\
])
「oolong」原为小贩任务的关键字,先借用,以後一律用英文
当 key name,因此在写任务脚本时,英文的关键字需摆在前面
,中文的则摆後面(中间用 ; 分隔)。
npc.c 里面则这样写..
object current_npc(object npc,string key_name)
{
object ob;
string files;
if(!files=NPC_QUEST[key_name])
return npc;
if(catch(ob=find_object_or_load(files)))
return npc;
if(!ob=ob->query("npc"))
return npc;
return ob;
}
然後更改 /open/cmds/quest/quest_d.c 关於 show 的部份
else if(ob=clone_object(t))
{
if(function_exists("current_npc",ob))
{
ob=ob->current_npc(ob,query_quest_key()[0]);
msg+=sprintf("│%2d.与%s对话。"CSI"80;"+LAST_POSITION+"H │\n",i,
""+ob->query("short"));
}
else
{
msg+=sprintf("│%2d.与%s对话。"CSI"80;"+LAST_POSITION+"H │\n",i,
""+ob->query("short"));
ob->remove();
}
}
这样 quest show 即可正常显示,如下...
> quest show l003
┌────────────────────────────────┐
│任务编号:l003 (可解 5 次) │
│任务名称:罗德斯小贩任务 │
│任务标记:2011/09/29 │
│任务作者:无名氏 │
│关 键 字:oolong, 乌龙茶 │
├────────────────────────────────┤
│任务流程: │
│ │
│
1.与花妈(Chen Chu)对话。 │
│ 2.与小贩(Vendor)对话。 │
│ 3.前往罗德斯广场。 │
│ 4.最後与小贩(Vendor)对话,任务结束。 │
而 quest shows 则显示如下...
> quest shows l003
┌────────────────────────────────┐
│任务编号:"l003", quest_times=5, quest_repeat=0 │
│任务名称:title="罗德斯小贩任务" │
│任务标记:date="2011/09/29" │
│任务流程:steps=4 │
│任务作者:author="无名氏" │
│任务关键字:quest_key=({ "oolong", "乌龙茶" }) │
├────────────────────────────────┤
│任务流程: │
│ │
│
step1_npc=npc in /u/l/laechan/skycastle/room/street/supply1.c │
│step2_npc=/d/map/lodoos/mob/vendor.c │
│step3_npc=/d/map/lodoos/room/square.c │
│step4_npc=/d/map/lodoos/mob/vendor.c │
上面的意思就是说,若我们用 npc.c 当做任务 npc 的话,
就去 npc.h 设定关键字对应的 npc 所在位置即可。
则当玩家问说花妈在哪里时,quest shows 即可一目了然。
但是在 quest chu about oolong 时会出现如下错误...
> quest chu about oolong
> $M: 我好想喝乌龙茶(Oolong)啊啊啊~~~
你: 那给我钱啊我买来给你
$M: .......
$M: 我好想喝乌龙茶(Oolong)啊啊啊~~~
你: 喂~别装死啊!
上面的意思就是说,若我们用 npc.c 当做任务 npc 的话,
「
就尽量不要用 $M 而直接用像是花妈这样的名字」。
supply1.c 的 set_npcs 设定如下..
set_npcs(({"level",120,"race","human","id",({"chen chu","chu"}),
"short","花妈(Chen Chu)","quest_num","l003",
"long","她是谷\物收购店的老板娘,老伴死後她就独自一个人经营他遗留\n"+
"下来的店。身材中胖。她同时也是商店街公会的会长。\n"}));
这样写的好处是我们连任务 npc 都可以不用写,直接透过设
定的方式,便可得到实体化的东西,其成效如下..
> l
[花妈谷物收购店]
这里是收购店,像这样有在收购农作物的店家在商店街还有
蛮多间的,老板花妈经营这间店已有几年的时间,虽然是中
途接手,但生意却好的不得了呢!
-- 这里可以使用 supply 指令 --
明显出口有: west.
(!quest)Lv120.花妈(Chen Chu)
以上供各位 wizs 参考。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
※ 编辑: laechan 来自: 210.61.157.53 (02/07 11:37)