作者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