[指令] 今日 quest 及任務腳本參數增改紀錄
看板mud_sanc (Sanctuary - 聖殿)作者laechan (小太保)時間14年前 (2011/10/11 00:49)推噓1(1推 0噓 0→)留言1則, 1人參與討論串9/9 (看更多)
任務系統大致寫到今天結束,有空我會補範例區域進去。今
天晚上還有一點時間則用來清理冗餘的 simul_efun,清完後
我要新增 quest 相關的全域函數,預定只新增一個,用這個
來做所有的事情。
星期三起則要寫新的東西,有空時則會繼續補完道具那篇,
以及撰寫零星的對話任務,用於...
1. learn skill from npc <= 以後你要 learn 就得先解任務
2. l mirror <= 你要先跟次元鏡管理人做朋友
3. join 公會 <= 公會老大:喂, 你以為我們什麼雜魚都收嗎
4. buy xx from 商店 <= 商店老闆:喂, 等等, 先報上名來
5. 進八卦, 血肉, ... <= 你以為說進就進喔
這些任務完全不需要玩家寫,當然玩家願意主動寫我們很歡迎
,若是我寫,一開始都很簡單啦就是找些 npc 對話一下而已。
等以後有空再一個一個慢慢改複雜即可。
一、指令 quest 新增 quest check 腳本檔名 語法
假設 l003 的 step1_msg 我改成如下
stpe1_mgs
$M: 我好想喝烏龍茶(Oolong)啊啊啊~~~
$N: 那給我錢啊我買來給你
$M: .......##
$M: 我好想喝烏龍茶(Oolong)啊啊啊~~~
$M: 喂~別裝死啊!##
標紅色的部份就是腳本常錯之處,包括參數名錯誤、## 誤加等。
> quest check l003
=============================================
step1_npc=/d/map/lodoos/mob/vendor##
stpe1_mgs
$M: 我好想喝烏龍茶(Oolong)啊啊啊~~~
$N: 那給我錢啊我買來給你
$M: .......
=============================================
沒有發現應存在的 = 號喔.
它會先抓出你有沒有漏加了 = 號,修正後..
> quest check l003
=============================================
step1_npc=/d/map/lodoos/mob/vendor##
stpe1_mgs=
$M: 我好想喝烏龍茶(Oolong)啊啊啊~~~
$N: 那給我錢啊我買來給你
$M: .......
=============================================
這一段發現有問題喔.
你就會發現 stpe1_mgs 拼錯了。修正後
> quest check l003
=============================================
step1_msg=
$M: 我好想喝烏龍茶(Oolong)啊啊啊~~~
$N: 那給我錢啊我買來給你
$M: .......##
$M: 我好想喝烏龍茶(Oolong)啊啊啊~~~
$M: 喂~別裝死啊!
=============================================
沒有發現應存在的 = 號喔.
沒有等號同時也是可能漏加了參數的意思,如上,當
它看到 ## 時底下應該要設參數,卻沒設,所以這裡
的判斷就是「實際上你多加了 ## 才造成它的誤判」
把多出來的 ## 去掉後
> quest check l003
quest check: 腳本 l003 確認完畢,沒有發現問題.
> quest read l003
quest read: 腳本 l003 更新及載入了.
有時會發生腳本有寫錯、但實際上卻可被 read 成功
的情況,然後在實際測試時才發現問題,以後 wiz便
可使用 check 做事先的檢查,特別是腳本檔龐大的情
況,check 就是一個很好的事前檢查工具。
二、任務腳本新增 others 參數
用法很簡單,在腳本的最底下類似這樣子寫..
others=
int test_1()
{
write("test.\n");
return 1;
}##
則當該腳本被 read 時,others 所接的東西就會一
字不變地寫進物件檔中,如下..
int test_1()
{
write("test.\n");
return 1;
}
這是方便 wiz 在寫腳本檔時順便新增自己所需要的
函數用的。如果該函數只做為該腳本任務使用,就
以 others 的方式添增;如果該函數你覺得應該讓
全部的腳本都可以呼叫,就寫進 quest_d.c。
(當然實際上我不希望你經常去動 quest_d.c)
使用這個參數唯一要注意的當然是不要讓它宣告的
函數或全域變數,與已存在的宣告重覆。
三、任務腳本實裝 timeX_msg、timeX_end 參數
簡單的說 timeX 的 X 指的就是「第幾次完成任務
」的意思,例如說 vendor 的 oolong 任務..
steps=4##
step4_end=
give_obj(ppl,"/d/ppl/norr/special_obj/suicide_potion",1)##
time2_end=
give_obj(ppl,"/d/ppl/norr/special_obj/volcano_potion",1)##
上面的意思就是,一般的情況下,當你解完第 4 步驟後,
會得到 suicide_potion,但是當你第 2 次解完第 4 步驟
時,它就不會去呼叫 step4_end, 而改呼叫 time2_end,
意思就是「既然你是解完第 2 次我就呼叫 time2_end」的
意思。
這時得到的就不是 suicide_potion 而是 volcano_potion
而如果你還有加設 time2_msg,那麼 step4_msg 就會被
time2_msg 取代。
簡單的說,實裝這兩個參數的用意,就是為了設定,當玩家
解了該任務到特定次數時,就給予不同的報酬。
至於 timeX_check,因為它有問題(主要是判斷),最好別用
,因為 stepX_check 遇到 timeX_check 會被無效化,造成
每一步驟的 check 都會是 timeX_check(這我當初沒想到)。
四、
--
※ 發信站: 批踢踢實業坊(ptt.cc)
※ 編輯: laechan 來自: 115.80.77.46 (10/11 14:52)
推
10/12 08:48, , 1F
10/12 08:48, 1F
這也是可以,不過太遲了。(不想再動程式碼了)
※ 編輯: laechan 來自: 115.80.122.112 (10/12 09:18)
討論串 (同標題文章)
完整討論串 (本文為第 9 之 9 篇):
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
17
23