[wizs] 殺怪型任務腳本設計
假設我們以「最少的改動」為前提,那麼在 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
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
21
49