[wizs] [任務] 帶 npc 通過某些地方的任務
我想為這個建立比較簡易的寫法。
某 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
06/28 15:58, 1F
→
06/28 16:02, , 2F
06/28 16:02, 2F
→
06/28 17:40, , 3F
06/28 17:40, 3F
→
06/28 17:45, , 4F
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
06/28 17:45, 7F
→
06/28 17:45, , 8F
06/28 17:45, 8F
→
06/28 17:46, , 9F
06/28 17:46, 9F
→
06/28 17:46, , 10F
06/28 17:46, 10F
推
06/28 17:53, , 11F
06/28 17:53, 11F
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
21
49