#RESETS 控制的是區域重設時的各項初始值,包括 reboot 後的初始狀態和每次的 reborn。#RESETS 的格式全為單行,每個指令皆有四組 value(G 指令和 R 指令除外),行末可加註解。本段最後以 S 結尾。
#RESETS
{
* <comment:to_eol>
}
{
M <:number> <mob-vnum:number> <limit:number> \
<room-vnum:number> <comment:to_eol>
}
{
O <:number> <obj-vnum:number> <:number> <room-vnum:number>
\
<comment:to_eol>
}
{
P <:number> <obj-vnum:number> <:number> <obj-vnum:number>
\
<comment:to_eol>
}
{
G <:number> <obj-vnum:number> <:number> <comment:to_eol>
}
{
E <:number> <obj-vnum:number> <:number> <wear_loc:number>
\
<comment:to_eol>
}
{
D <:number> <room-vnum:number> <door:number>
\
<state:number> <comment:to_eol>
}
{
R <:number> <room-vnum:number> <last-door:number>
\
<comment:to_eol>
}
S
M command
M | 生產怪物 |
<:number> | 無意義,填 0 即可 |
<mob-vnum:number> | 怪物的 vnum |
<limit:number> | reborn 上限 |
<room-vnum:number> | 要放在哪個房間 |
<comment:to_eol> | 註解 |
範例
M 0 5009 5 5028 * large puppet
在 room #5028 生產一隻 mob
#5009 (large puppet),最多五隻
上面的寫法,很容易被誤會成是「一次生出五隻 large puppet」,這是不正確的。M 指令的每一行都只宣告一隻 mob。區域重設時,如果該怪物「未達上限」,就會再生一隻出來,直到最終達到上限為止。也就是說,如果你需要一次生出五隻怪物,就需要寫五行的 M 指令才行。另外要注意的是,系統會依寫作的先後順序讀取檔案,亦即寫在前面的怪物會比寫在後面的怪物「早出生」。如果你需要利用怪物作 reset_prog 的各種檢查,請記得把它寫在最前面。
O command
O | 生產物品 |
<:number> | 無意義,填 0 即可 |
<obj-vnum:number> | 物品的 vnum |
<:number> | 無意義,填 0 即可 |
<room-vnum:number> | 要放在哪個房間 |
<comment:to_eol> | 註解 |
範例
O 0 3010 0 3700 * donation pit
在 room #3700 生產一個 object
#3010 (donation pit)
O 指令生產的是「地上的物品」。房間內若已有同樣的物品,或區域內有玩家時,系統便不會執行此指令。「怪物穿在身上的物品」請見 E 指令,「怪物拿在身上的物品」請見 G 指令,「容器內的物品」請見 P 指令。
P command
P | 將物品並置入容器 |
<:number> | 無意義,填 0 即可 |
<obj-vnum:number> | 物品的 vnum |
<:number> | 無意義,填 0 即可 |
<obj-vnum:number> | 要放在哪個容器 |
<comment:to_eol> | 註解 |
範例
P 0 3138 0 3010 * water skin in pit
在 #3010 (pit) 中置入
#3138 (water skin)
P 指令會將物品置入「最新鮮的容器」,因此請勿重覆使用相同 vnum 的容器,以避免放錯地方。當指定的容器不存在,或該容器被人撿走,或容器內已有該物品時,系統便不會執行此指令。另外,由於容器的容量會扣除其重量,當你設計容器時,請記得讓它的容量大於重量,不然會什麼都放不進去。
G command
G | 將物品交給怪物 |
<:number> | 無意義,填 0 即可 |
<obj-vnum:number> | 物品的 vnum |
<:number> | 無意義,填 0 即可 |
<comment:to_eol> | 註解 |
範例
M 0 5009 5 5028 * large puppet
這裡有一隻 large puppet
G 0 3138 0 * water skin
把 #3138 (water skin) 拿給它
G 指令只有三組 value,指令本身不設定對象,系統會將物品放在前一個 M 指令所生產的怪物身上,如上例所示。若 M 指令未執行(如已達上限),G 指令也不會被執行。
E command
E | 將物品裝備在身上 |
<:number> | 無意義,填 0 即可 |
<obj-vnum:number> | 物品的 vnum |
<:number> | 無意義,填 0 即可 |
<wear_loc:number> | 要穿在哪裡,請參考 wear location 對照表 |
<comment:to_eol> | 註解 |
範例
M 0 5009 5 5028 * large puppet
這裡有一隻 large puppet
E 0 5000 0 5 * puppet suit
把 #5000 (puppet suit) 穿在 body
上
和 G 指令類似,E 指令也是將物品裝備在前一個 M 指令所生產的怪物身上。M 指令若未執行,E 指令也不會被執行。若未另外定義,E 指令產生的的裝備,其等級等於怪物本身的等級減二。
D command
D | 這是一扇門 |
<:number> | 無意義,填 0 即可 |
<room-vnum:number> | 房間的 vnum |
<door:number> | 哪個方向的門,請參考 door state 對照表 |
<state:number> | 門的狀態,請參考 door state 對照表 |
<comment:to_eol> | 註解 |
範例
D 0 2601 1 0
向東通往 #2061 敞開的門
D 0 10890 3 2
向西通往 #10890 鎖住的門
D 指令控制的是門的初始狀態。要注意的是「可以關的門」和「每次 reborn 就會關上的門」是兩件事。你需要先在 #ROOMS 裡的 D 宣告設計一扇門,再用 #RESETS 的 D 指令決定它的初始狀態。
R command
R | 這是一個隨機的出口 |
<:number> | 無意義,填 0 即可 |
<room-vnum:number> | 房間的 vnum |
<last-door:number> | 可供變換的方向 |
<comment:to_eol> | 註解 |
範例
* 假設 room #10890 有兩個出口
這只是在表演怎麼做單純的註解
R 0 10890 4
對 room #10890 用四個方向去作兩個出口的變化
用數學的方式來說明的話,設房間的原始出口數為 x,<last-door:number> 為 y,則 R 指令的效果,相當於機率中的 y 取 x。但 <last-door:number> 的效果比較複雜,請見下表:
0 | 對 0 個方向進行變換 | 無 |
1 | 對 1 個方向進行變換 | 北 |
2 | 對 2 個方向進行變換 | 北、東 |
3 | 對 3 個方向進行變換 | 北、東、南 |
4 | 對 4 個方向進行變換 | 北、東、南、西 |
5 | 對 5 個方向進行變換 | 北、東、南、西、上 |
6 | 對 6 個方向進行變換 | 北、東、南、西、上、下 |
也就是說,「可以變換哪些方向」是固定的。除此之外,「原始的出口方向」也必須包含在「被拿來做變化的方向」之中,才會產生變化。
在上面的例子中,假設 #10890 的原始出口是上下的話,由於 4 並不包括上下在內,因此 #10890 的出口也不會產生變化。假設 #10890 的原始出口是東下的話,由於 4 的範圍涵蓋了東方在內,原本向東的出口就會在北東西南四個方向之中任選一個作變化,而未被包括在 4 之內的向下出口就會維持原狀不變。同理,假設 #10890 的原始出口是南北的話,經過 R 指令的變化後,#10890 就會變成在北東西南之中任選兩個出口。
以實用性來說,0 和 1 的實質意義不大(0 是不作任何變化,1 則是一律變成北方),相對來說 4 和 6 可以做出二次元和三次元的迷宮,效果也比較好掌握。R 指令和 D 指令的混用,可能會導致難以預期的效果,請謹慎使用。