[wizs] 殺怪型任務腳本設計

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間14年前 (2011/09/30 09:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
假設我們以「最少的改動」為前提,那麼在 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
文章代碼(AID): #1EXI9yS2 (mud_sanc)
文章代碼(AID): #1EXI9yS2 (mud_sanc)