#QUESTS 用來設計任務。本段最後以 -1 結尾。#QUESTS 區段中不可加註解。
#QUESTS
{
<questno:number> <minlevel:number> <maxlevel:number>
\
<restrict:number>
<questover:number>
<quest english name:string>
<quest chinese name:string>
{
<questindex:number> <rewardtype:number>
\
<rewardvalue:number> {<prequest:number>} -1
}
-1
}
-1
基本資料
<questno:number> | 任務的編號 |
<minlevel:number> | 要解開這個任務的最小等級(進階等級 +50) |
<maxlevel:number> | 要解開這個任務的最大等級(進階等級 +50) |
<restrict:number> | 設定能解此任務之身份限制 |
<questover:number> | 任務的結束子步驟 |
<quest english name:string> | 任務的英文名稱 |
<quest chinese name:string> | 任務的中文名稱 |
quest entry
<questindex:number> | 這個子步驟的 index |
<rewardtype:number> | 解開這個步驟所能獲得的獎賞種類 |
<rewardvalue:number> | 所能獲得的獎賞值 |
<prequest:number> | 表示要獲得獎賞所必須先解開的子步驟。無則免填。在 rewardvalue 之後,-1 之前的所有號碼都將被視為 prequest。所以 -1 即標明這個 entry 的結束。 |
一個任務可以有任意數目的子步驟,不過為了整齊起見,請由 1 開始順序排列而下。子步驟的宣告是以 -1 結束,整個 #QUESTS 區段的宣告也是以 -1 結束。
#QUESTS
宣告任務區段開始
1 1 50 128 5
questno 是 1,等級 1-50 ,不得為 DM ,最後一步是子步驟
5
quest 1~
英文名稱
任務一~
中文名稱
1 0 100 -1
子步驟 1,獲得經驗值 100,不須先完成任何子步驟
2 1 1 -1
子步驟 2,獲得 str 值 1,不須先完成任何子步驟
3 2 1 1 2 -1
子步驟 3,獲得 int 值 1,須先完成子步驟 1 和 2
4 3 -1 3 -1
子步驟 4,獲得 wis 值 -1,須先完成子步驟 3
5 -1 0 4 -1
子步驟 5,沒有任何獎賞,須先完成子步驟 4
-1
此任務之宣告結束
-1
QUESTS 區段結束
任務的實作
#QUESTS 僅是宣告任務的基本資料、完成條件和獎賞。配合 MOBprogram 和以下指令,便可設計出各種多變的任務。
語法
questsetval <victim> <quest-var> <value>
qset <victim> <quest-var> <value>
qadd <victim> <quest-var> <value>
questmark <victim> <quest-number> <quest-index>
qset 是 questsetval 的簡寫,用來設定 quest variable 的值。qadd 則是「自原來的 quest variable 的 value 再往上加」。quest variable 是自訂的,請使用你管轄範圍內的 vnum,以免和其他區域的任務相衝。
<victim> | 玩家名(可用變數) |
<quest-var> | 欲設定之變數編號 |
<value> | 欲設定給這變數之值 |
questmark 則用來設定玩家進行任務之進度。
<victim> | 玩家名(可用變數) |
<quest-number> | 任務編號(定義於 #QUESTS 中) |
<quest-index> | 子步驟編號(定義於 #QUESTS 中) |
要注意的是,qset 對應的是 Area Builder 自訂的 quest variable,而 questmark 對應的則是已經在 #QUESTS 中定義的任務編號和子步驟。舉例來說:
quest variable 的範例
>speech_prog hiya~
qset $n 10001 1
endif
上例是將 $n 的 quest variable 10001 的值設定為 1,玩家不會接受到任何訊息;
questmark 的範例
>speech_prog hiya~
questmark $n 10001 1
endif
而這則是設定 $n 已經解開了第 10001 號任務的第一個子步驟,也就是大家熟悉的「你剛開始一個任務,希望你能完成它」的瞬間。如果 #QUESTS 中有設定此步驟相應的獎賞,玩家就會看到「你因為完成這個步驟而獲得了…」的訊息和獎賞。如果是最後一步,就會出現「你已經完全解開這個任務了」的成功訊息。
quest variable 能讓我們做出更細膩靈活的任務,例如多線式劇情。quest variable 也並不一定要和 #QUESTS 一起使用。很多隱藏式的任務,或是區域內的一些特效,都是 quest variable 的巧妙運用。使用 MOBprogram 中的判別式,便可以檢驗玩家的 quest value 或任務進度,讓故事有不同的發展。