[wizs] set_npcs 與 quest 的設定問題
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間13年前 (2013/02/07 11:34)推噓0(0推 0噓 0→)留言0則, 0人參與討論串1/2 (看更多)
目前以 set_npcs 的形式所叫出來的 npc,都指向同一個物件
/std/new_ob/npc。
雖然說 quest 指令可以依「關鍵字」的不同,決定要執行的是
哪一個任務(也就是同一 npc 物件可設定多個任務的設計),但
是在做 quest show 時就會出問題。
因此我構思了一個讓 npc.c include 的 npc.h,設計如下..
> more npc.h
:::::::::::::: /open/cmds/quest/npc.h ::::::::::::::
#define NPC_QUEST ([\
"oolong":"/u/l/laechan/skycastle/room/street/supply1",\
])
「oolong」原為小販任務的關鍵字,先借用,以後一律用英文
當 key name,因此在寫任務腳本時,英文的關鍵字需擺在前面
,中文的則擺後面(中間用 ; 分隔)。
npc.c 裡面則這樣寫..
object current_npc(object npc,string key_name)
{
object ob;
string files;
if(!files=NPC_QUEST[key_name])
return npc;
if(catch(ob=find_object_or_load(files)))
return npc;
if(!ob=ob->query("npc"))
return npc;
return ob;
}
然後更改 /open/cmds/quest/quest_d.c 關於 show 的部份
else if(ob=clone_object(t))
{
if(function_exists("current_npc",ob))
{
ob=ob->current_npc(ob,query_quest_key()[0]);
msg+=sprintf("│%2d.與%s對話。"CSI"80;"+LAST_POSITION+"H │\n",i,
""+ob->query("short"));
}
else
{
msg+=sprintf("│%2d.與%s對話。"CSI"80;"+LAST_POSITION+"H │\n",i,
""+ob->query("short"));
ob->remove();
}
}
這樣 quest show 即可正常顯示,如下...
> quest show l003
┌────────────────────────────────┐
│任務編號:l003 (可解 5 次) │
│任務名稱:羅德斯小販任務 │
│任務標記:2011/09/29 │
│任務作者:無名氏 │
│關 鍵 字:oolong, 烏龍茶 │
├────────────────────────────────┤
│任務流程: │
│ │
│ 1.與花媽(Chen Chu)對話。 │
│ 2.與小販(Vendor)對話。 │
│ 3.前往羅德斯廣場。 │
│ 4.最後與小販(Vendor)對話,任務結束。 │
而 quest shows 則顯示如下...
> quest shows l003
┌────────────────────────────────┐
│任務編號:"l003", quest_times=5, quest_repeat=0 │
│任務名稱:title="羅德斯小販任務" │
│任務標記:date="2011/09/29" │
│任務流程:steps=4 │
│任務作者:author="無名氏" │
│任務關鍵字:quest_key=({ "oolong", "烏龍茶" }) │
├────────────────────────────────┤
│任務流程: │
│ │
│step1_npc=npc in /u/l/laechan/skycastle/room/street/supply1.c │
│step2_npc=/d/map/lodoos/mob/vendor.c │
│step3_npc=/d/map/lodoos/room/square.c │
│step4_npc=/d/map/lodoos/mob/vendor.c │
上面的意思就是說,若我們用 npc.c 當做任務 npc 的話,
就去 npc.h 設定關鍵字對應的 npc 所在位置即可。
則當玩家問說花媽在哪裡時,quest shows 即可一目瞭然。
但是在 quest chu about oolong 時會出現如下錯誤...
> quest chu about oolong
> $M: 我好想喝烏龍茶(Oolong)啊啊啊~~~
你: 那給我錢啊我買來給你
$M: .......
$M: 我好想喝烏龍茶(Oolong)啊啊啊~~~
你: 喂~別裝死啊!
上面的意思就是說,若我們用 npc.c 當做任務 npc 的話,
「就盡量不要用 $M 而直接用像是花媽這樣的名字」。
supply1.c 的 set_npcs 設定如下..
set_npcs(({"level",120,"race","human","id",({"chen chu","chu"}),
"short","花媽(Chen Chu)","quest_num","l003",
"long","她是穀\物收購店的老闆娘,老伴死後她就獨自一個人經營他遺留\n"+
"下來的店。身材中胖。她同時也是商店街公會的會長。\n"}));
這樣寫的好處是我們連任務 npc 都可以不用寫,直接透過設
定的方式,便可得到實體化的東西,其成效如下..
> l
[花媽穀物收購店]
這裡是收購店,像這樣有在收購農作物的店家在商店街還有
蠻多間的,老闆花媽經營這間店已有幾年的時間,雖然是中
途接手,但生意卻好的不得了呢!
-- 這裡可以使用 supply 指令 --
明顯出口有: west.
(!quest)Lv120.花媽(Chen Chu)
以上供各位 wizs 參考。
Laechan
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: laechan 來自: 210.61.157.53 (02/07 11:37)
討論串 (同標題文章)
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
13
30