[wizs] [任務] 帶 npc 通過某些地方的任務

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間14年前 (2011/06/28 14:16), 編輯推噓2(209)
留言11則, 3人參與, 最新討論串1/1
我想為這個建立比較簡易的寫法。 某 npc: 你可以帶著這個小孩去見他的父母嗎? > answer yes ppl->呼叫某函數(參數); 小孩開始跟隨你. > look 房間跟怪物訊息; 小孩正跟著你一起行動. <= 額外處理得到的訊息 > 他人 look 房間跟怪物訊息; 蓓兒丹娣(Belldandy:牧師)正站在這個地方 <= ppl->呼叫某函數(某參數); └小孩正跟著她一起行動. ================================================= 一、小孩平常並不需要去 look 他。 二、帶著小孩四處移動的訊息也不需要。 三、小孩不會隨著房間的可能 reborn 而消失。 四、玩家若 quit、小孩就消失,該任務就視為必須重新接。 綜合上述四點得到的簡單結論就是:小孩是虛擬的。 我打算用到玩家的兩個 temp 欄位,如下.. quest_npc = ({"小孩",...}); quest_npc_info = ({ ({第一個npc的相關資訊}),... }) 也就是說,把最常用的「小孩」這個名字,獨立成一個欄位, 再把不太常用的其它資訊擺在另一個欄位,例如說,帶著受傷 的天使要通過某條充滿惡魔的道路,那麼在惡魔的special_fun 就可以這樣寫.. mixed infos; int n; n=ppl->check_quest_npc("受傷的天使"); if(n!=-1) // 代表有 { infos=(mixed)ppl->query_temp("quest_npc_info"); // 第n個陣列 // 而因為受傷的天使這個 info 是「專用」在這個地方, // 那 info 的內容自然自己會知道它的格式是什麼 // 例如 infos = ({"hp-100000","times-何時接的任務"}); tmp=infos[n][0]; // 透過 n 取出該參數 sscanf(tmp,"hp-%d",hp); // 得到了受傷的天使的剩餘 hp m=9000+random(1000); if(hp-m<0) { show(ppl,mob,"$O趁$N不注意時偷襲了受傷的天使,使他受到了一些傷害!!\n"+ "受傷的天使陣亡了!!任務失敗!!\n"); ppl->呼叫某函數(某參數); return 1; } show(ppl,mob,"$O趁$N不注意時偷襲了受傷的天使,使他受到了一些傷害("+m+")!!\n"+ "受傷的天使受的傷更重了,不快點把他送到天神的身邊是不行的."); infos[n][0]="hp-"+(hp-m); ppl->set_temp("quest_npc_info",infos); return 1; } 要實作不難,在 /std/user.c 或 /std/user/xxx.c 新增必要 的函數即可,然後再修改 /adm/daemons/look_d.c,剩下的就 是撰寫對應的任務 npc 及區域怪物即可。 函數大概新增最多三個,add、check 及 del。 聖殿一向缺乏這種類型的任務,往後我希望能多一點,工欲善 其事必先利其器,所以相關的東西會先寫出來,好方便各位使 用。 上面兩個欄位的寫法也可以合成一個 mapping 寫法,缺點是必 須使用 keys 這樣的東西,但是它的好處也蠻多的,我可能會 考慮。(而且特別的 quest_npc 給特別的 key_name 也會簡化 相關判斷) Belldandy. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 115.83.29.88

06/28 15:58, , 1F
這樣護衛型的任務才好寫.....amem
06/28 15:58, 1F

06/28 16:02, , 2F
任務npc也需要有一個樣本.目前休養身體中先記下來
06/28 16:02, 2F

06/28 17:40, , 3F
recall的話,npc會消失
06/28 17:40, 3F

06/28 17:45, , 4F
if(base_name(environment(ppl))=="/d/wiz/room/disc
06/28 17:45, 4F

06/28 17:45, , 5F
")
06/28 17:45, 5F

06/28 17:45, , 6F
{
06/28 17:45, 6F

06/28 17:45, , 7F
this_object()->move_to(ppl);
06/28 17:45, 7F

06/28 17:45, , 8F
return 0;
06/28 17:45, 8F

06/28 17:46, , 9F
}
06/28 17:46, 9F

06/28 17:46, , 10F
我找不到npc不消失的方法,只能用這招了
06/28 17:46, 10F

06/28 17:53, , 11F
所以npc虛化是最好...amem
06/28 17:53, 11F
文章代碼(AID): #1E2N7NBX (mud_sanc)
文章代碼(AID): #1E2N7NBX (mud_sanc)