作者laechan (眼镜男)
看板mud_sanc
标题Re: [wizs]问题请教(四)
时间Mon Mar 12 23:05:08 2007
※ 引述《amosdeus (幽素)》之铭言:
: 问题:请问要怎样让它随者问的变数不同而回答问题?
你底下那样写是有问题的。想一下就知道了,
add_action("要呼叫的函数","玩家下的指令");
你三行 add_action 要让玩家下的指令都是 ask,它只会抓
最後那一个 add_action 所定义的。
(也就是下 ask 它会呼叫 ask_s3 函数)
你在 mob 内设定比较方便.
set("inquiry",(["xxxx":"怪物回答你: 你问了我 xxxx 这件事.\n",
"yyyy":"怪物回答你: 你问了我 yyyy 这件事.\n",
"zzzz":"怪物回答你: 你问了我 zzzz 这件事.\n",
]));
// 若要额外让怪物再做其它的动作
set("inquiry_func",(["xxxx":"ask_s1",
"yyyy":"ask_s2",
"zzzz":"ask_s3",
]));
然後宣告函数
int ask_s1()
{
write("怪物回答你: 喔, xxxx 啊, 就是#!$@$#@%#\n");
return 1;
}
int ask_s2()
{
write("怪物回答你: 喔, yyyy 啊, 就是%%#$@%#$\n");
return 1;
}
int ask_s3()
{
write("怪物回答你: 喔, zzzz 啊, 就是%$#%#@@#@!\n");
return 1;
}
另外怪物若加设 set("no_show",1); 就不会出现暗蓝色的
"你问了怪物有关 oooo 的事"这一行.
还有, 要实验一些写法, 最好另外写新怪物, 而不要用旧怪
物一直累加设定跟函数, 不然到时你会看得雾煞煞.
(别人要看你的怪物也会累, 因为行数太多)
: 问题:怎样让他随机空白不执行认主程序?
: 当他随机选到case 1..9空白时底下认主就会执行
: 这时就会出现错误!
: 省略
: switch (r) {
: case 1..9 : break;
: case 10..11 : xxxx break;
: case 12..19 : break;
: default : xxxx break;
: }
: ob->set("names",tar->query("name"));
: ob->move_to(tar);
: 省略
: }
: 劳烦请帮我解答 谢谢
: Plain@Sanc
switch 的结构是...
switch(判断用的值)
{
case 符合区间设定之一:
要它做什麽事;
break; // 符合上述区间一的就到这里为止
case 符合区间设定之二:
要它做什麽事;
break; // 符合上述区间二的就到这里为止
default: // 不在区间一也不在区间二的其它值通通在这里
要它做什麽事;
break;
}
例如要判断某人的分数, 假设该人分数为 r
switch(r)
{
case 100:
write("恭喜你,拿到满分 100 分,加你战功一万!!\n");
me->add_warexp(10000);
break; // 100 分的判断只到这里就结束
case 60..99: // 拿到 60~99 分
write("恭喜你拿到及格分数 "+r+" 分, 给你 50000 影特币!!\n");
me->add("balance",50000);
break; // 60~99 分的判断只到这里就结束
case 1..59: // 拿到 1~59 分
write("唔, 这次考不及格喔, 只拿到 "+r+" 分, 要再加油嘿!!\n");
break; // 1..59 的判断就到这里
default: // 不是100,也不是60-99,也不是1-59, 自然就是0分
// 所以上面也可以用 case 0: 替代
// 换言之,switch 里头不一定要有 default
// default 是为了收纳所有的例外状况
write("你竟敢给我考零分!!把你的等级降为 2 做为处罚!!\n");
me->set("level",2);
break;
}
就降子而已。你可以自己实作试试。
Laechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.140.113.219
※ 编辑: laechan 来自: 220.140.113.219 (03/12 23:07)
1F:推 amosdeus:之所以不用inquiry是MOB会用悄悄话回答,我是想它用一般 03/13 00:59
2F:→ amosdeus:方式去回答问题。其实这只写後来无错误会直接用上。 03/13 01:01
3F:→ amosdeus:谢谢您的解答 BOW 03/13 01:03
4F:推 laechan:加上 set("no_show",1); 怪物就不会用悄悄话告诉你了. 03/13 07:01