四度空間 Area 工具v0.4

勾選參數、填好敘述,自動產生 .are 或 Lua 區域碼。資料自動存在瀏覽器 (localStorage),關掉再開不會不見。搭配 Area 製作教學 使用。
輸出格式: 切換後所有預覽與匯出即時更新
vnum 請使用站方分配給你的專屬區間;檔案最後請以 Big5 編碼儲存 (匯出的內容是文字,貼到 Notepad++ / VS Code 後「以 Big5 編碼儲存」即可)。
房間旗標
出口(勾選要開的方向)
額外敘述(look 關鍵字)
房間程式 progs(進階,可不填)
房間可用的觸發只有 7 種(怪物專屬的 talk/give/fight 等不會列出, 因為掛在房間上載入成功卻永遠不會執行)。
房間程式由一隻隱形的系統怪代為執行,所以要用 mpechompechoat, 不要用 say$i$I$v 是本房間的 vnum。
內文語法依輸出格式而異,切換格式時內文不會自動轉換。

這個房間的碼(即時預覽)


行為旗標 ACT
狀態旗標 AFF
行為程式 progs(讓怪會互動,可不填)
灰底的頭尾兩行是自動產生的,不用自己打——你只要選觸發、填參數、 寫中間那段指令,>fight_prog 10~ 這種包裝會依你的選擇即時組出來。
內文語法依輸出格式而異:.are 用 MUD 指令列($n=觸發者),Lua 用 Lua 程式(ch=觸發者); 切換格式時內文不會自動轉換。可先用「插入範本」再改成自己的內容。

這隻怪的碼(即時預覽)


數值 v0–v3(意義隨類型變化)
特殊旗標 ITEM
穿戴位置 WEAR
屬性加成 A(裝備才有意義)
例如「命中 +2」「生命力 +50」。沒有加成的裝備只是普通衣服。
額外敘述 E(look 關鍵字)

這個物品的碼(即時預覽)


Reset 決定重置時什麼東西出現在哪。G/E 作用在「上一條 M 的怪」身上,順序很重要,可用 ↑↓ 調整。
下載/複製後,請用編輯器以 Big5 編碼另存(教學第 0 章有步驟), 再放進 area\ 並加入 area.lst

適用於 Area Builder Kit。本文分兩部分:傳統 .are 格式與 Lua 格式。 新手建議從 .are 入門;想寫互動劇情(考試、任務、對話)再用 Lua。 不想手寫的話,可以用 視覺化編輯器 勾選產生。

0. 開始之前:共通觀念

vnum:一切的鑰匙

每個房間、怪物、物品都有一個唯一編號 vnum。三種東西的編號空間是分開的 (房間 3001 和怪物 3001 可以同時存在)。開始製作前,先向站方申請一段專屬的 vnum 區間(例如 25000–25099),你的所有東西都只能用這段編號,也只能引用 「自己的編號」和站方明確開放的系統編號。

最重要的規則:引用了不存在的 vnum(出口通到沒定義的房間、 reset 放不存在的怪),伺服器開機時會直接結束,主控台會印出 Get_room_index: bad vnum N 之類的訊息告訴你是哪個編號。

檔案編碼:Big5

所有區域檔(.are 與 .lua)都必須以 Big5 編碼儲存。編輯器請設定用 Big5(CP950)開檔與存檔——若不小心用 UTF-8 重存,遊戲裡整片亂碼。 Windows 可用 Notepad++(編碼選單 → Big5)或 VS Code(右下角編碼 → Reopen/Save with Encoding → Big5)。

讓伺服器載入你的檔案

把檔案放進 area\,然後編輯 area\area.lst, 在 greeting.pic 那行之前加上你的檔名,重新啟動伺服器即可。 副檔名決定格式:.are 走傳統格式、.lua 走 Lua 格式。

1. 傳統 .are 格式

1.1 檔案骨架

一個 .are 檔由數個區段組成,每段以 #區段名 開頭。 不需要的區段可以整段省略,但順序建議照慣例:

#AREA   {25 35} YourName 你的區域名稱~

#MOBILES
(怪物定義……)
#0

#OBJECTS
(物品定義……)
#0

#ROOMS
(房間定義……)
#0

#RESETS
(重生規則……)
S

#SHOPS
(商店……)
0

#SPECIALS
(特殊行為……)
S

#$

1.2 房間 #ROOMS

#25001
溫暖的小屋~
這是一間木造的小屋, 壁爐裡的火燒得正旺, 讓整個房間充滿暖意.
角落有一張看起來十分舒適的床.
~
0 8 0
D0
你看到一條通往森林的小徑.
~
~
0 -1 25002
E
bed 床~
一張鋪著厚棉被的木床, 看起來就很好睡.
~
S
說明
#25001房間 vnum
溫暖的小屋~房間名稱(look 時的標題)
敘述 + ~房間描述,可多行,單獨一行 ~ 結束
0 8 0三個數字:保留欄(填0)、房間旗標、地形。旗標可用 | 組合, 例:8|1024 = 室內+安全區。旗標與地形數值見速查表
D0 區塊出口。D0=北 D1=東 D2=南 D3=西 D4=上 D5=下。 內容依序是:出口敘述~、門的關鍵字~(沒門就留空一行~)、 然後一行三個數字 門 鑰匙 目的地:門 0=無門 1=普通門 2=撬不開的門; 鑰匙=鑰匙物品 vnum(無鑰匙填 -1);目的地=對面房間 vnum
E 區塊額外敘述(可省略):關鍵字列~ + 敘述~, 玩家 look bed 就會看到
S房間結束
出口是單向的:A 房間 D1(東)通到 B,B 也要寫 D3(西)通回 A, 不然玩家會回不來。開機 log 若出現 Fix_exits 警告就是兩邊沒對好。

1.3 怪物 #MOBILES

#25001
innkeeper 老闆~
旅店老闆~
和藹的旅店老闆站在櫃臺後面./innkeeper
~
他看起來五十多歲, 臉上總是掛著親切的笑容.
~
2 0 300 S
30 20 -50 5d10+300 3d6+10
5000 0
8 8 1
說明
#25001怪物 vnum
innkeeper 老闆~關鍵字(玩家指令用來指定目標,建議中英都放)
旅店老闆~短稱(戰鬥訊息等使用)
長敘述 + ~站在房間裡時顯示的句子。慣例會在結尾加 /英文關鍵字 方便玩家知道怎麼指定
詳細敘述 + ~look innkeeper 時顯示
2 0 300 S行為旗標、狀態旗標、陣營、S。行為旗標例:2=定點不走動、 32=主動攻擊、可用 | 組合(如 2|64=定點+只待本區域)。陣營 -1000(極惡)~ 1000(極善)。 結尾 S 固定要有
30 20 -50 5d10+300 3d6+10等級、命中加成、防禦(AC,越低越硬)、 HP骰(NdS+P)、傷害骰(NdS+P)
5000 0金錢、經驗值(經驗填 0 讓系統自動算)
8 8 1位置、位置、性別(0=中性 1=男 2=女;位置 8=站立)

怪物類別(C 行,可省略)

數值行之後可以加一行 C Class <n> $ 指定特殊類別,實際區域檔用了一千多次:

類別效果
1CONJURATION 召喚獸召喚系怪物
2STATUE 雕像不可被攻擊(最常用,佈景用 NPC 都該設)
3TRANSPORT 交通工具載具,同樣不可攻擊
4MERIT 戰功怪擊殺可獲戰功
5UNDEAD 不死系不死屬性
8 8 1
C Class 2 $

Lua 格式寫成 class = 2,。不需要特殊類別就整行省略。

怪物可以在數值行之後加行為程式(mob prog),讓它會回應玩家:

>talk_prog topic~
 mpechoat $n 歡迎光臨! 要住宿嗎?
~
>greet_prog 100~
 smile
 say 歡迎光臨!
~
|

每段以 >觸發_prog 參數~ 開頭、單獨一行 ~ 結束; 最後一段之後加一行 | 表示這隻怪的程式結束。 常用觸發:greet_prog 機率(玩家進房)、talk_prog 關鍵字(玩家 talk)、 give_prog 物品(玩家給東西)、fight_prog 機率(戰鬥中)、 death_prog 機率(死亡時)、rand_prog 機率(隨機)。

參數的意義隨觸發而不同,填錯等於整段程式失效。 機率類的判斷是 number_percent() <= 參數,而 number_percent() 回傳 1–100, 所以參數填 0、留空或填成文字(atoi 得 0)時,這段程式永遠不會觸發,而且不會有任何錯誤訊息。
參數型別屬於哪些觸發說明
機率 % greet/all_greet/leave/all_leave/rand/fight/death/dying/entry/tick/birth/timetodie/killer/reset 1–100,100 = 必定觸發
血量門檻 %hitprcnt血量低於此百分比時觸發
關鍵字talk/speech/act/give/learn/skill/action speech 與 act 可用 p 開頭改成比對整句;give 可用 allspeech/act 一格只放一個關鍵字——填多個時,玩家一句話同時命中兩個, 內文會執行兩次(獎勵發兩份)。p 開頭可避免這點
金額bribe給錢達到此數才觸發
兩個數字affect「法術編號 機率」,例如 12 100
忽略drop每次都觸發
.are prog 內文只能用真正的遊戲指令。 Lua 區域用的 saytoechoatself 等是 lua/void.lua 定義的輔助函式,在 .are prog 裡完全無效—— 而且會靜默失敗:怪沒有連線descriptor,錯誤訊息無處可送,log 也不會記錄, 你只會看到「怪什麼都沒做」。

.are prog 常用指令

指令說明
mpechoat $n 訊息只有觸發者看得到的訊息(最接近 Lua 的 sayto)
mpecho 訊息房間內所有人都看到(怪自己看不到)
mpechoaround $n 訊息房間內除了觸發者以外的人看到
say 內容 / tell $n 內容怪開口說話(房間 / 私聊)
smilenod一般社交指令,直接寫
mpjunk self all銷毀自己身上的所有物品(self 在此是指令參數,合法)
mpmload 怪vnum在房間生出怪物(沒有 mpload 這個指令;此指令不吃等級參數,多寫會被忽略)
mpoload 物vnum [等級]生出物品到怪自己的背包永遠放不到地上——想放地上請用下一行的 rpoload
mpoload 物vnum 等級 $z生出物品直接給該玩家(怪看不見對方時會退回自己背包)
rpoload 物vnum 等級把物品放到地上。怪程式與房間程式都能用;等級可省略但會寫進 bug log,請一律填
mpgoto vnummptransfer $n vnum怪自己移動 / 把玩家傳送走
mpforce $n 指令強迫玩家執行指令

$ 變數與條件判斷

變數意義
$n觸發者名字。怪看不到對方時會變成「某位不知名人士」
$z觸發者名字,不受隱形/躲藏影響(站內區域檔最常用這個)
$i怪自己的名字(關鍵字)
$I怪自己的短稱
$t / $o目標對象 / 相關物品
>greet_prog 100~
if ispc($n)
  if rand(30)
    mpechoat $z 你覺得有人在看著你...
  endif
endif
~
|

條件判斷用 if 判斷式endif(可搭配 else)。 常用判斷:rand(機率)ispc($n)isnpc($n)level($n) > 20inroom($i) == 房間vnumclan($n) == 幫派編號hours($i) < 4goldamt($n)is_qmark($n)(任務旗標)。

房間也可以有程式,但觸發種類完全不同

房間 prog 寫在房間的 S 之前(額外敘述 E 區塊之後),格式與怪物相同。 但房間只支援 7 種觸發,把怪物專屬的 talk_progfight_prog 等寫在房間上, 檔案會正常載入、然後永遠不會執行

房間可用的觸發參數意義說明
greet_prog / all_greet_prog機率 1-100 玩家走進房間。兩者只會生效一個(有 greet 就不會跑 all_greet)。 房間版沒有視線判定(房間沒有「看得到/看不到」可言),所以兩者完全等價, 擇一即可——但不要同時寫,同時寫的話 all_greet 那條永遠不會執行。 (怪物版才有「看得到才觸發」的差別。) 注意:被 mptransfer 傳送進來不會觸發,只有正常走路才會
leave_prog / all_leave_prog機率 1-100 玩家離開房間,同樣兩者擇一、同樣沒有視線判定。 擋不住人:在這裡把玩家傳走,他仍會抵達原本的目的地
action_prog指令字串 玩家在此房間輸入某個指令時觸發,可自創指令(如 touch)。 比對的是玩家輸入的整行文字>action_prog north~ 攔不到 n, 反之亦然,多一個空白也不中(大小寫不拘)。命中時會攔截真正的指令—— 取名 look 會讓房內所有人不能單獨打 look(但 look 招牌 仍正常)
reset_prog機率 1-100區域重置時。需要該房間有 V reset 行才會被呼叫
drop_prog(忽略)物品被放進此房間時。觸發面很廣(屍體、重置放物、法術造物都算)
房間程式的內文不能照抄怪物的寫法。 房間沒有「自己」,系統會臨時生一隻隱形怪代跑,牠的短稱只是一個色碼。所以:
  • mpecho(整房)或 mpechoat $n(只給觸發者)輸出訊息
  • 不要用 say——會顯示成沒有名字在說話,還會觸發同房怪物的 speech_prog
  • 不要用 $i$I——會印出內部字串 roommob 或一片空白
  • $v 是本房間的 vnum,這是房間程式專屬的好用變數
  • reset_progdrop_prog 觸發時沒有觸發者$n$z 會是空的
#25101
古老的石室~
房間中央立著一塊斑駁的石碑.
~
0 8 0
D1

~
~
0 -1 25102
>all_greet_prog 100~
mpechoat $n 你踏進石室,一股寒意爬上背脊。
~
>action_prog touch~
if ispc($n)
  mpechoat $z 你伸手觸摸石碑,碑面浮現一行古老的文字。
  mpechoaround $z $z 伸手觸摸了石碑。
endif
~
|
S

房間程式另有幾個專用指令: rpdamage <hp|mana|move|power> <對象> <下限> <上限>(陷阱扣血)、 rpoload <物品vnum> <等級>rpcastrpaffectrpdamage 有兩個常見寫錯的地方:第一個參數是傷害類型,不能省略 (省略會讓後面全部位移,找不到目標而整行靜默失效);傷害範圍小的要寫前面—— 寫反時不會隨機,會固定取到前面那個值。

1.4 物品 #OBJECTS

#25001
bread 麵包~
香噴噴的麵包~
一塊香噴噴的麵包被遺忘在這裡.~
~
19 0 1
10 0 0 0
1 20 0
說明
#25001 / 三行文字vnum、關鍵字~、短稱~、 掉在地上時的敘述~、第四行通常留空 ~
19 0 1物品類型、特殊旗標、穿戴位置。類型例:5=武器 9=防具 19=食物 15=容器; 穿戴位置 1=可撿取,武器用 1|8192(可撿+可持)、防具依部位組合,見速查表
10 0 0 0v0–v3 四個數值,意義依類型而異:武器 v1=最小傷害、v2=最大傷害不是骰子!本站是 number_range(v1,v2))、v3=攻擊型態;防具 v0=護甲值; 食物 v0=飽食度、v3≠0 表示有毒;容器 v0=容量
1 20 0重量、價格、保留(0)

屬性加成 A 與額外敘述 E(裝備必看)

數值行之後可以接任意多組 A(加成)與 E(額外敘述)區塊。 沒有 A 區塊的裝備就只是件普通衣服——防具的護甲值來自 v0,其他所有加成都靠 A:

#25002
sword 神劍~
一把神劍~
一把神劍插在地上.~
~
5 1 8193
0 10 30 3
10 5000 0
A
18 5              * 命中 +5(18 = APPLY.HITROLL)
A
13 100            * 生命力 +100(13 = APPLY.HIT)
E
blade 劍身~
劍身上刻著古老的符文.
~

A 之後一行兩個數字:效果代碼、加減值(可為負數)。 常用代碼:命中 18、傷害 19、生命力 13、精神力 12、移動力 14、防禦 17、 力量 1、速度 2、智力 3、睿智 4、體格 5、內力 27,完整清單見速查表的 APPLY

E 之後是關鍵字列 ~ 加敘述 ~,玩家 look blade 就會看到。

Lua 格式分別寫成 affects = { { location = APPLY.HITROLL, modifier = 5 }, … }extras = { ["blade 劍身"] = [[ … ]] }

1.5 重生 #RESETS

Reset 決定「開機與定期重置時,什麼東西出現在哪」。每行一條規則,區段以單獨一行 S 結束:

#RESETS
M 1 25001 1 25001      * 把怪 25001 放進房間 25001(最多 1 隻)
G 1 25001 0            * 給「上一隻 M 的怪」物品 25001(拿在身上)
E 1 25002 0 16         * 讓上一隻怪穿上物品 25002(16=穿戴位置代碼)
O 1 25003 0 25002      * 把物品 25003 放在房間 25002 地上
P 1 25004 0 25003      * 把物品 25004 放進容器物品 25003 裡
D 1 25001 0 1          * 房間 25001 的 0 號門(北)重置為關閉
M 3 25005 1 25004      * 每 3 次重置才生出一次(稀有怪)
V 1 25001 0 0          * 標記房間 25001,它的 reset_prog 才會被呼叫
S
第二個欄位不是固定的 0。本站把它改成了 time: 填 N 表示「每 N 次區域重置才執行一次」,填 01 都是每次都執行。 現有區域檔裡約四分之一的 reset 行用了非 0 的值(M 3 就出現四百多次), 拿來做稀有怪或稀有寶物的生成控制。
GE 一定緊跟在某條 M 後面, 它們作用在「最近一條 M 生出來的那隻怪」身上。
V 這一行只是「標記」:房間若寫了 reset_prog必須再加一條 V reset 指向它,否則那段程式永遠不會被呼叫。

1.6 商店與特殊行為

#SHOPS
25001  19 0 0 0 0  120 80  0 23   * 老闆vnum 收購類型×5 買價% 賣價% 營業時間
0

#SPECIALS
M 25002 spec_guard        * 讓怪 25002 有警衛行為
S

商店行:老闆的怪物 vnum、五個「收購的物品類型」(不收購就填 0)、 賣出價 %(120=賣玩家 1.2 倍價)、收購價 %(80=用 0.8 倍價收)、開店與關店時間(0–23)。 特殊行為常用的有 spec_guard(警衛)、spec_janitor(撿垃圾)、 spec_fido(吃屍體)、spec_thief(偷錢)、spec_cast_adept(幫新手補血), 完整清單向站方索取。

2. Lua 格式

Lua 格式能做到 .are 做不到的事:真正的程式邏輯(變數、條件、計分、多步驟任務)。 代價是要會一點 Lua。結構上它就是「用 Lua 表格描述同一批資料」,再加上可以掛函式。

2.1 檔案骨架

-- myarea.lua(記得存成 Big5 編碼)
area = {
    name = "{25 35} YourName 你的區域名稱",
    testing = 0,
}
register_area(area)

rooms = {}
mobs = {}
objs = {}

-- (下面各節的定義寫在這裡)

register_rooms(rooms)
register_mobs(mobs)
register_objs(objs)

resets = {
    { rtype = RESET.MOB, mob = 25001, room = 25001 },
}
register_resets(resets)
呼叫順序重要:先 register 房間/怪/物品,最後才 register_resets—— reset 註冊時會立刻檢查引用的 vnum 是否存在,不存在就開機失敗。

2.2 房間

rooms[25001] = {
    vnum = 25001,
    name = "溫暖的小屋",
    description = [[
    這是一間木造的小屋, 壁爐裡的火燒得正旺, 讓整個房間充滿暖意.
    角落有一張看起來十分舒適的床.
    ]],
    room_flags = ROOM.INDOORS,
    sector_type = SECTOR.INSIDE,
    doors = {                                            -- 沒有出口時也要寫 doors = {}
        [DIR.NORTH] = { vnum = 25002 },                  -- 普通出口
        [DIR.EAST]  = { vnum = 25003, locks = 1,         -- 有門(見下方說明)
                        key = 25010,                     -- 鑰匙物品(無鑰匙填 -1)
                        keyword = "door 木門" },
    },
    extras = {
        ["bed 床"] = [[
        一張鋪著厚棉被的木床, 看起來就很好睡.
        ]],
    },
}

2.3 怪物與程式(progs)

mobs[25001] = {
    vnum = 25001,
    name = "innkeeper 老闆",
    short_descr = "旅店老闆",
    long_descr = "和藹的旅店老闆站在櫃臺後面./innkeeper\n",
    description = [[
    他看起來五十多歲, 臉上總是掛著親切的笑容.
    ]],
    act = ACT.SENTINEL + ACT.STAY_AREA,
    affected_by = 0,
    alignment = 300,
    level = 30,
    hitroll = 20,
    dc = -50,                       -- 防禦,越低越硬
    hp_dicenum = 5,  hp_dicesize = 10,  hp_plus = 300,   -- HP = 5d10+300
    damage_dicenum = 3, damage_dicesize = 6, damage_plus = 10,
    gold = 5000,
    sex = SEX.MALE,
    progs = {
        {
            ptype = PROGTYPE.TALK,          -- 玩家對他 talk topic 時觸發
            argument = "topic",
            prog = function()
                sayto(ch, "歡迎光臨! 住一晚 100 元, 錢直接給我就行.")
            end
        },
        {
            ptype = PROGTYPE.BRIBE,         -- 玩家給錢時觸發
            argument = "100",               -- 給滿 100 才觸發這段
            prog = function()
                mdo("smile")
                sayto(ch, "好的, 房間在北邊, 請慢用!")
            end
        },
    },
}
ch 能讀的欄位是固定的,只有: nameshort_descrlong_descrhpmax_hpmanamax_manasexvnumroomargis_npcnext_in_roomlevellife。 讀取清單外的欄位(例如 ch.gold不會回傳 nil,而是直接丟出錯誤中斷這段 prog。 要判斷金錢請改用 PROGTYPE.BRIBE(如上例)。

prog 裡可用的東西(常用):

名稱說明
self這隻怪自己
ch觸發程式的玩家
sayto(ch, "...")對某人說話
mdo("指令")讓怪執行任何遊戲指令(可多個參數連續執行)
echoat(ch, "...")對某人顯示訊息
rand(30)30% 機率回傳 true;rand() 不給參數則回傳 1–100
time()取得遊戲時間 {hour=, week=}
say("...") / yell("...")怪說話 / 大喊
social("笑", ch)對某人做社交動作
get_room(vnum)取得房間物件

以上大多是引擎內建函式;sayto 則定義在你收到的 lua/void.lua 裡(它是 echoat 的包裝,會輸出「某某 說 '……'」的格式), 可以直接打開來看有哪些輔助函式。

觸發類型用 PROGTYPE.*TALK(talk 關鍵字)、GREETALL_GREET(玩家進房)、 GIVE(收到物品,argument 填物品關鍵字或 "all")、 FIGHTDEATHRAND(argument 填機率)等,完整列表見速查表。 更進階的玩家操作(任務旗標 ch:has_qmark() 等)請參考站方提供的 Lua 區域範例。

2.4 物品

objs[25001] = {
    vnum = 25001,
    name = "bread 麵包",
    short_descr = "香噴噴的麵包",
    description = "一塊香噴噴的麵包被遺忘在這裡.",
    item_type = ITEMTYPE.FOOD,
    extra_flags = 0,                          -- ITEM.GLOW + ITEM.MAGIC ...
    wear_flags = WEAR.TAKE,                   -- 武器: WEAR.TAKE + WEAR.WIELD
    values = { 10, 0, 0, 0 },                 -- 意義依類型,同 .are 的 v0-v3
    weight = 1,
    cost = 20,
    affects = {                               -- 同 .are 的 A 區塊,裝備才需要
        { location = APPLY.HITROLL, modifier = 5 },
        { location = APPLY.HIT,     modifier = 100 },
    },
    extras = {                                -- 同 .are 的 E 區塊
        ["blade 劍身"] = [[
        劍身上刻著古老的符文.
        ]],
    },
}

2.5 重生

resets = {
    { rtype = RESET.MOB,  mob = 25001, room = 25001 },   -- 怪放進房間
    { rtype = RESET.GIVE, obj = 25001 },                 -- 給上一隻怪(拿著)
    { rtype = RESET.EQ,   obj = 25002 },                 -- 上一隻怪穿上
    { rtype = RESET.OBJ,  obj = 25003, room = 25002 },   -- 物品放地上
    { rtype = RESET.PUT,  obj = 25004, tobj = 25003 },   -- 物品放進容器
    { rtype = RESET.DOOR, room = 25001, dir = DIR.EAST },-- 門重置為關閉
    { rtype = RESET.MOB,  mob = 25002, room = 25003, time = 3 },  -- 每 3 次重置才重生一次
}
register_resets(resets)
time 欄位(可省略,預設 1)是這套系統的擴充: 填 3 表示每 3 個重置週期才執行一次,適合稀有怪或稀有寶物。

3. 測試你的區域

  1. 把檔案放進 area\、加入 area.lst(見第 0 節),執行 startup.bat
  2. 看主控台訊息:格式錯誤或壞 vnum 會在這裡直接告訴你
  3. 建立測試角色並升為巫師(做法見 Builder Kit 的 README.md),然後:
    指令用途
    goto 25001直接跳到你的房間
    load mob 25001 / load obj 25001當場生出怪/物品
    purge清空房間裡的怪與物品
    mstat 怪 / ostat 物品 / rstat檢視怪/物品/房間的內部數值
  4. 逐一走過每個房間、每個出口,確認雙向都通、門和鑰匙行為正確
  5. 用一般玩家角色再走一次(很多問題巫師看不到,例如 no_mob 旗標擋怪)

4. 常見陷阱

以下都是「檔案載得進去、開機不報錯、但行為不對」的狀況。 編輯器產出的碼已經避開這些,手寫或手改時才會踩到。

4.1 行為程式

陷阱正確做法
同一隻怪/同一個房間寫第二個 prog 區塊,第一個會被靜默覆寫 所有 prog 寫在同一個區塊裡,中間不要插入其他欄位
怪物上寫 action_progreset_progdrop_prog—— 會正常載入、mpstat 也看得到,但永遠不會執行(這三種只有房間版有觸發點) 這三種只寫在房間上
mpkill 不能縮寫mpk——會被另一個同名的低階指令吃掉,然後什麼也不做 拼完整。mpset 系列同理,一律拼完整
give_progbribe_prog 裡的 $p 恆為空字串if number($p) 會被判為 false 且不報錯 改用 $o(物品名)/$O(物品短稱)。 建議寫 >give_prog all~ 再用 if number($o) == <vnum> 判定,比字串比對安全
charm(魅惑)的怪完全不跑任何 prog,也失去 mp 指令權限 關鍵機關怪要防 charm
prog 型別名稱打錯一個字母 → 開機直接中止 這個至少會當場發現;照速查表拼
>+語言選擇> 是傳統文字、+ 是 Lua。 兩者都能寫在一般 .are 裡,但同一個怪物 prog 區塊內不可混用(混用會中止開機) 一個區塊只用一種。用錯符號不會報錯,只會把內文當成另一種語言解讀
怪物版 greet/leave 掃描同房角色時最多只看 31 個,人太多時後面的會被跳過 人潮密集處不要依賴它做關鍵判定

4.2 程式內文的指令

陷阱正確做法
mpcast等級參數會被直接丟棄,一律以施法者等級施放 只用 mpcast <法術名> [目標]
技能名是前綴比對,寫短了會靜默授予另一個技能 技能名一律寫完整
mpteach 在玩家記憶點數不足時對程式而言是靜默失敗 (玩家看得到訊息,但程式無法分支、也不會留 log) 先用 if can_learn $n <技能> 判定,發不出去時給替代獎勵

4.3 任務標記(qmark)

陷阱正確做法
房間 qmark(mpadd_qmark <房號> <標記>)不會存檔,重開機就歸零, 而且是全服共用,不是個人進度 個人進度一律用玩家 qmark:mpadd_qmark $z <標記>
玩家 qmark 只要既不是已註冊的任務完成標記、也沒有 _noclear 後綴, 玩家打一個 quests clear 就會被清光 命名一律 <區域前綴>_<用途>_noclear。 qmark 是全服共用的字串命名空間,前綴不可省,否則會撞到別人的區域
_nosave 後綴的 qmark 不會存檔 要跨登入保留的進度不要加這個後綴;只有暫態標記才用

5. 指令速查表

行為程式的內文寫的就是遊戲指令。這裡列出區域檔實際會用到的,依用量排序。

5.1 行為程式專用指令

只有掛了 prog 的怪或房間能執行,玩家打不出來。「用量」是這個指令在現有區域檔中出現的次數,可以當成「這是不是常用寫法」的參考。

用法作用注意用量
mpecho <訊息>房間裡所有人都看到(怪自己看不到)訊息會再去觸發同房間其他怪的 act_prog,兩隻怪互相 echo 會沒完沒了8090
mpechoat <對象> <訊息>只有指定對象看得到對象找不到時完全靜默,沒有任何 log,名字打錯最難查。填 self 送不到任何人4880
mpcast <法術名> [對象]施放法術不吃等級參數——寫成 mpcast 2 fireball 時那個 2 會被忽略,一律以施法者等級施放4534
mpat <地點> <指令>讓怪「在別的地方」執行一個指令,執行完回到原處地點可以是 vnum、角色名或落在地上的物品名,依此順序解析3865
mpdel_qmark <對象|房間vnum> <標記>移除任務標記第一參數可以是房間 vnum,但房間標記重開機就沒了、而且全服共用3603
mpadd_qmark <對象|房間vnum> <標記>加上任務標記第一參數可以是房間 vnum,但房間標記重開機就沒了、而且全服共用。個人進度請用 $z3390
mpforce <對象|all> <指令>強迫對方執行一個指令被強迫的人若執行 say,那句話會再觸發別的 speech_prog2706
mptransfer <對象|all> [地點]把玩家傳送走地點可省略,省略時傳到怪自己所在的房間2005
mpfist <基準> <誤差> <招式名>對交戰對象造成傷害基準值 ± 誤差,不是最小值最大值。第三個參數是招式名稱,會顯示給玩家1269
rpdamage <hp|mana|move|power> <對象> <下限> <上限>房間陷阱扣血第一個參數是傷害類型,不能省略;範圍小的要寫前面,寫反會固定取到前面那個值1261
mpoload <物vnum> [等級] [對象]生出物品永遠放不到地上——沒給對象就進怪自己的背包。要放地上用 rpoload1236
mpmload <怪vnum> [range <起始房> <結束房> [數量]]生出怪物不吃等級參數,多寫會被忽略。range 形式最多生 15 隻1173
mppurge [<對象>]銷毀對象;不給參數則清掉自己清掉一隻怪時,牠背包裡的東西會跟著消失1170
mpjunk <對象> <物品|all|all.關鍵字>銷毀某人身上的物品對象在前、物品在後,順序很容易寫反1154
mpgoto <地點>怪自己移動過去681
mpallfist <基準> <誤差> <招式名>對房間內所有敵人造成傷害基準值 ± 誤差,不是最小值最大值637
rpoload <物vnum> [等級]把物品放到地上怪程式與房間程式都能用。等級可省略但會寫進 bug log,請一律填445
rpremaffect <對象> <sn|all|allother|allskill|allspell>移除狀態第二參數是 sn,不是 slot410
mpteach <對象> <技能名>教授技能技能名要拼完整(前綴比對,寫短了會教到別的技能)。對方記憶點數不足時,程式端無法察覺失敗383
mpkill <對象>攻擊對方不可縮寫成 mpk——那是另一個指令,對怪執行等於什麼都沒做370
rpcast <法術名> <對象>房間版施法對象必填,與 mpcast 不同237
mpsetcycle <對象> <數值>設定週天缺任一參數會寫 bug log(其他 mpset* 不會)121
mpechoaround <對象> <訊息>房間裡除了該對象以外的人看到只檢查對象非空,訊息留空不會報錯120
mpmobclean <名字關鍵字>清掉符合關鍵字的怪掃的是全世界,不是本房間也不是本區域。呼叫者自己會被跳過98
mpsethp <對象> <數值>設定生命值帶 + 或 - 是相對增減,不帶前綴是絕對設定;上限夾在最大生命。扣血是真的會死的——壓到死亡門檻會照一般戰鬥規則死亡(有瀕死狀態與急救窗口),boss 吸血招請照這個前提設計數值61
mpasound <訊息>相鄰房間聽得到的聲響不會觸發別人的 act_prog(與 mpecho 相反)59
rpaffect <對象> <slot> [持續] [位置] [修正] [bit]附加狀態第二參數是法術 slot,不是 sn——與 rpremaffect 收的東西不通用41
mpechoarea <訊息>整個區域都看得到22
mpforceflee <對象>強迫對方逃跑8
mpsetmana <對象> <數值>設定法力帶 + 或 - 是相對增減,不帶前綴是絕對設定;上限夾在最大法力2
rpremaffectbit <對象> <bit值>依 bit 移除狀態2
mpsetpower <對象> <數值>設定內力目標是 NPC 時直接靜默 return;上限夾在最大內力1
mpsetmove <對象> <數值>設定移動力帶 + 或 - 是相對增減,不帶前綴是絕對設定;負值夾成 0、上限夾在最大移動力1
mpslay <對象>直接殺死對方1

其餘較少用的:mprevoltmpareaclean

5.2 巫師指令(怪也能用)

為什麼怪能用巫師指令? 指令派送時,只要執行者是掛了 prog、沒被 charm、沒被 switch 的 NPC, 等級檢查就整個被跳過。所以 prog 內文其實可以用任何指令,不限於 mp 開頭的那些—— 現有區域檔大量使用 atechorestore 等巫師指令就是這樣來的。
但被 charm(魅惑)的怪會失去這項待遇,連 prog 本身都不會執行。關鍵機關怪要防 charm。
用法作用注意用量
at <地點> <指令>同 mpat,是 imm 指令版本兩個參數都必填,缺任一只回一句提示、沒有 log1711
echo <訊息>全服廣播(imm 指令)整行原文送出,不切 token700
peace停止房間內所有戰鬥完全忽略參數,一律清掉整個房間的戰鬥狀態347
restore <all|self|對象>補滿血魔(imm 指令)324
mset <對象> <欄位> <值>修改角色數值(imm 指令)第三段吃的是整行剩下的字,不是單一 token300
oload <物vnum> [等級]生出物品到自己身上(imm 指令)175
delexit <方向>當場關掉一個出口91
addexit <方向> <目標vnum>當場開一個出口84
force <對象|all> <指令>強迫對方執行指令,同 mpforce45
recho <訊息>對本房間廣播(imm 指令)45
goto <vnum|self|角色名|物品名>移動過去(imm 指令)12
purge [<對象>]銷毀對象,同 mppurge不給參數會清掉房間內所有 NPC 與地上所有物品,包括玩家掉落的裝備8
advance <對象> <等級>調整等級(imm 指令)7
transfer <對象|all> [地點]把玩家傳送走,同 mptransfer2

其餘較少用的:osetslaydelqmarkimmtalkaddqmarkssetmloadprisonholylight

5.3 一般指令

玩家自己也能用的指令,怪照樣能用。直接寫指令名即可。

用法作用注意用量
say <內容>怪開口說話房間程式用會顯示成無名字,且會觸發同房怪物的 speech_prog8236
tell <對象> <內容>私下對某人說2695

區域檔常用的其他一般指令:dropyellgivefleewearfistlookremovekillshootquaffemoteopenfollowslashwakedisarmshoutwindslicewestcastwieldattackclosehunteastnorthtalksoutheatchatstungetbuttockorderunlockhidedisposerestsneakabscondreflexion ——用法與玩家自己打的時候相同。社交動作(smilenodponder 等 121 個)也可以直接寫。

6. 常數速查表

Lua 直接用常數名;.are 檔要填數值(多個旗標把數值相加或用 | 串接)。

要用 Ctrl+F 搜尋整份速查表時,請先按「全部展開」(部分瀏覽器搜尋不到收合中的內容)。

怪物行為 ACT
Lua 常數數值(.are 用)說明
ACT.IS_NPC1系統自動設定,勿手動使用 — Auto set for mobs
ACT.SENTINEL2定點不走動 — Stays in one room
ACT.SCAVENGER4會撿地上物品 — Picks up objects
ACT.AGGRESSIVE32主動攻擊玩家 — Attacks PC's
ACT.STAY_AREA64不離開所屬區域 — Won't leave area
ACT.WIMPY128血少會逃跑 — Flees when hurt
ACT.PET256寵物(系統用) — Auto set for pets
ACT.TRAIN512可訓練屬性 — Can train PC's
ACT.PRACTICE1024可練習技能 — Can practice PC's
ACT.JOIN2048入會功能
ACT.BANK4096銀行員
ACT.NO_CHARM8192不能被魅惑
ACT.NO_SUMMON16384不能被召喚 — Use by Urge
ACT.GROUNDED32768不能飛行/被吹走
ACT.NO_SLEEP65536免疫睡眠(法術與點穴都無效)。Lua 端沒有這個常數,請直接寫數值
怪物狀態 AFF
Lua 常數數值(.are 用)說明
AFF.BLIND1目盲
AFF.INVISIBLE2隱形
AFF.DETECT_EVIL4偵測邪惡
AFF.DETECT_INVIS8偵測隱形
AFF.DETECT_MAGIC16偵測魔法
AFF.DETECT_HIDDEN32偵測隱藏
AFF.HOLD64(未使用) — Unused
AFF.SANCTUARY128聖光(傷害減半)
AFF.FAERIE_FIRE256妖火
AFF.INFRARED512紅外視覺
AFF.CURSE1024詛咒
AFF.FLAMING2048(未使用) — Unused
AFF.POISON4096中毒
AFF.PROTECT8192防護邪惡
AFF.PARALYSIS16384麻痺 — Use by Qing
AFF.SNEAK32768潛行
AFF.HIDE65536隱藏
AFF.SLEEP131072昏睡
AFF.CHARM262144被魅惑
AFF.FLYING524288飛行
AFF.PASS_DOOR1048576穿門
AFF.BARRIER2097152屏障
AFF.DARK_SPACE4194304黑暗空間
AFF.REFLEXION8388608反射
AFF.MAGIC_CLOCK16777216魔法時鐘
AFF.TUOCHANGSTARMOVE33554432脫韁星移 — add by Gooder
AFF.ELEMENT67108864元素 — 五行
AFF.AIR134217728罡氣罩 — 狂風陣
AFF.GOD_BLESS268435456神祝 — god bless add by bala
AFF.INTERNAL_INJURY536870912內傷
性別 SEX
Lua 常數數值(.are 用)說明
SEX.MALE1
SEX.FEMALE2
SEX.NEUTRAL0中性
程式觸發類型 PROGTYPE
Lua 常數數值(.are 用)說明
PROGTYPE.IN_FILE0外部檔案(勿用)
PROGTYPE.ACT1看到動作訊息時
PROGTYPE.SPEECH2聽到說話時
PROGTYPE.RAND4隨機(argument=機率)
PROGTYPE.FIGHT8戰鬥中每回合(argument=機率)
PROGTYPE.DEATH16死亡時
PROGTYPE.HITPRCNT32血量低於百分比時
PROGTYPE.ENTRY64自己走進房間時
PROGTYPE.GREET128玩家進房(怪看得到才觸發)
PROGTYPE.ALL_GREET256玩家進房(必觸發)
PROGTYPE.GIVE512收到物品(argument=物品關鍵字或 all)
PROGTYPE.BRIBE1024收到錢(argument=金額)
PROGTYPE.DYING2048瀕死時
PROGTYPE.TALK4096被 talk(argument=關鍵字)
PROGTYPE.LEARN8192被 learn 時
PROGTYPE.LEAVE16384玩家離房(看得到才觸發)
PROGTYPE.ALL_LEAVE32768玩家離房(必觸發)
PROGTYPE.AFFECT65536狀態變化時
PROGTYPE.ACTION131072特定指令時
PROGTYPE.RESET262144區域重置時
PROGTYPE.SKILL524288技能施展時
PROGTYPE.KILLER1048576擊殺者
PROGTYPE.TIMETODIE2097152時限死亡
PROGTYPE.BIRTH4194304重生時
PROGTYPE.TICK8388608每個遊戲 tick
地形 SECTOR
Lua 常數數值(.are 用)說明
SECTOR.INSIDE0室內
SECTOR.CITY1城市
SECTOR.FIELD2平原
SECTOR.FOREST3森林
SECTOR.HILLS4丘陵
SECTOR.MOUNTAIN5山地
SECTOR.WATER_SWIM6可游泳水域
SECTOR.WATER_NOSWIM7需要船的水域
SECTOR.UNUSED8(未使用)
SECTOR.AIR9空中(需飛行)
SECTOR.DESERT10沙漠
SECTOR.PARADISE11天堂
SECTOR.HELL12地獄
SECTOR.VOID13虛空
SECTOR.MAX14(邊界值,勿使用)
房間旗標 ROOM
Lua 常數數值(.are 用)說明
ROOM.DARK1永遠黑暗
ROOM.NO_MOB4怪物不會走進來
ROOM.INDOORS8室內(不受天氣影響)
ROOM.GAME16遊戲房(賭場等)
ROOM.PRIVATE512私人房(限兩人)
ROOM.SAFE1024安全區(禁止戰鬥)
ROOM.SOLITARY2048單人房
ROOM.PET_SHOP4096寵物店
ROOM.NO_RECALL8192禁止 recall
ROOM.CORPSE_SHOP16384屍體商店
ROOM.NO_SUMMON_IN32768禁止被召喚進來
ROOM.NO_TELEPORT_IN65536禁止被傳送進來
ROOM.CAN_TRANSFER131072允許 transfer
ROOM.NO_QUIT262144禁止在此離線
ROOM.NO_SUMMON_OUT524288禁止從此被召喚走
ROOM.NO_SPELL1048576玩家在此無法施法(含自我 buff;物品觸發的法術不受限)。Lua 端沒有這個常數,請直接寫數值
ROOM.NO_ATTACK2097152玩家在此無法發動攻擊(已開打的戰鬥不受影響;巫師豁免)。Lua 端沒有這個常數,請直接寫數值
方向 DIR
Lua 常數數值(.are 用)說明
DIR.NORTH0
DIR.EAST1
DIR.SOUTH2
DIR.WEST3西
DIR.UP4
DIR.DOWN5
怪物特殊類別 CLASS
Lua 常數數值(.are 用)說明
CLASS.CONJURATION1召喚獸 — 召喚者
CLASS.STATUE2雕像 — 雕像
CLASS.TRANSPORT3交通工具 — 交通工具
CLASS.MERIT4戰功怪 — 有加戰功的 mob
CLASS.UNDEAD5不死系 — 不死族
重生類型 RESET
Lua 常數數值(.are 用)說明
RESET.MOBM怪物 → 房間
RESET.OBJO物品 → 房間
RESET.PUTP物品 → 容器
RESET.GIVEG物品 → 上一隻怪(拿著)
RESET.EQE物品 → 上一隻怪(穿上)
RESET.DOORD門重置
RESET.RANDR出口隨機化
物品類型 ITEMTYPE
Lua 常數數值(.are 用)說明
ITEMTYPE.LIGHT1光源(v2=持續時間)
ITEMTYPE.SCROLL2卷軸(v0=等級 v1-3=法術)
ITEMTYPE.WAND3魔杖
ITEMTYPE.STAFF4法杖
ITEMTYPE.WEAPON5武器(v1=最小傷害 v2=最大傷害 v3=攻擊型態)
ITEMTYPE.TREASURE8寶物
ITEMTYPE.ARMOR9防具(v0=護甲值)
ITEMTYPE.POTION10藥水
ITEMTYPE.FURNITURE12家具
ITEMTYPE.TRASH13垃圾
ITEMTYPE.CONTAINER15容器(v0=容量)
ITEMTYPE.DRINK_CON17飲料容器
ITEMTYPE.KEY18鑰匙
ITEMTYPE.FOOD19食物(v0=飽食度 v3≠0 表有毒)
ITEMTYPE.MONEY20
ITEMTYPE.BOAT22
ITEMTYPE.CORPSE_NPC23怪物屍體(系統用)
ITEMTYPE.CORPSE_PC24玩家屍體(系統用)
ITEMTYPE.FOUNTAIN25噴泉
ITEMTYPE.PILL26藥丸
ITEMTYPE.GUN27槍械 — add by Qing
ITEMTYPE.MISSILE28彈藥 — add by Qing
ITEMTYPE.MEDICINE29醫藥 — add by QING
ITEMTYPE.METAL30金屬材料 — add by Gen, 礦物
ITEMTYPE.MEDAL31勳章 — 勳章
ITEMTYPE.SUPERCONTAINER33超級容器 — 燒不壞的容器 add by Timon
物品特殊旗標 ITEM
Lua 常數數值(.are 用)說明
ITEM.GLOW1發光
ITEM.HUM2嗡嗡作響
ITEM.DARK4黑暗
ITEM.LOCK8
ITEM.EVIL16邪惡
ITEM.INVIS32隱形
ITEM.MAGIC64魔法
ITEM.NODROP128詛咒:不能丟棄
ITEM.BLESS256祝福
ITEM.ANTI_GOOD512善良陣營不能用
ITEM.ANTI_EVIL1024邪惡陣營不能用
ITEM.ANTI_NEUTRAL2048中立陣營不能用
ITEM.NOREMOVE4096詛咒:不能脫下
ITEM.ANYLEVEL8192無等級限制
ITEM.NOSAVE16384離線不保存
ITEM.ANTI_MALE32768男性不能用
ITEM.ANTI_IT65536中性不能用
ITEM.ANTI_FEMALE131072女性不能用
ITEM.CLANSYMBOL262144幫派信物——站方專用,builder 請勿使用: 設了它之後重量行的第三個數字會被當成幫派編號,Lua 格式還必須多一個 clan 欄位, 漏掉會讓整個區域載入失敗
ITEM.NOLOCATE524288不能被 locate
ITEM.INVENTORY1048576商店無限供貨 — 24 bit
ITEM.NOSTEAL2097152不能被偷 — OBJ CAN'T BE STEAL
物品穿戴旗標 WEAR
Lua 常數數值(.are 用)說明
WEAR.TAKE1可撿取(幾乎都要加)
WEAR.FINGER2戒指
WEAR.NECK4頸部
WEAR.BODY8身體
WEAR.HEAD16
WEAR.LEGS32
WEAR.FEET64
WEAR.HANDS128
WEAR.ARMS256手臂
WEAR.SHIELD512盾牌
WEAR.ABOUT1024披風
WEAR.WAIST2048
WEAR.WRIST4096手腕
WEAR.WIELD8192武器(持用)
WEAR.HOLD16384手持
WEAR.BREAST32768胸口
WEAR.TRANSPORT65536坐騎
武器攻擊型態 DMGTYPE(武器 v3)
Lua 常數數值(.are 用)說明
DMGTYPE.HIT0毆擊 — add by Qing
DMGTYPE.SLICE1削 — add by Qing
DMGTYPE.STAB2刺 — add by Qing
DMGTYPE.SLASH3砍 — add by Qing
DMGTYPE.WHIP4鞭 — add by Qing
DMGTYPE.CLAW5抓 — add by Qing
DMGTYPE.BLAST6轟 — add by Qing
DMGTYPE.POUND7搥 — add by Qing
DMGTYPE.CRUSH8壓碎 — add by Qing
DMGTYPE.GREP9擒抱 — add by Qing
DMGTYPE.BITE10咬 — add by Qing
DMGTYPE.PIERCE11穿刺 — add by Qing
DMGTYPE.HIDDEN12暗器 — add by Gen, 暗器
出口/門旗標 EXFLAG
Lua 常數數值(.are 用)說明
EXFLAG.ISDOOR1有門
EXFLAG.CLOSED2關著
EXFLAG.LOCKED4鎖著
EXFLAG.PICKPROOF32撬不開
EXFLAG.NO_PASSDOOR16穿門法術無效
裝備加成效果 APPLY
Lua 常數數值(.are 用)說明
APPLY.NONE0
APPLY.STR1力量
APPLY.DEX2速度
APPLY.INT3智力
APPLY.WIS4睿智
APPLY.CON5體格
APPLY.SEX6性別
APPLY.CLASS7職業
APPLY.LEVEL8等級
APPLY.AGE9年齡
APPLY.HEIGHT10身高
APPLY.WEIGHT11體重
APPLY.MANA12精神力
APPLY.HIT13生命力
APPLY.MOVE14移動力
APPLY.GOLD15金錢
APPLY.EXP16經驗
APPLY.DC17防禦(AC)
APPLY.HITROLL18命中
APPLY.DAMROLL19傷害
APPLY.SAVING_PARA20對麻痺豁免
APPLY.SAVING_ROD21對法杖豁免
APPLY.SAVING_PETRI22對石化豁免
APPLY.SAVING_BREATH23對吐息豁免
APPLY.SAVING_SPELL24對法術豁免
APPLY.AC25防禦
APPLY.POWER26內力
APPLY.SKILL27技能加成
APPLY.SPELL_POWER28法術威力
APPLY.CARRY29負重
物品特殊功能 OSPEC(進階)
Lua 常數數值(.are 用)說明
OSPEC.TALK0
OSPEC.SPELL1
OSPEC.GOBACK_CHAR2
OSPEC.GOBACK_ROOM3
OSPEC.GOBACK_OBJ4
OSPEC.LOAD_OBJ5
OSPEC.BECOME_OBJ6
OSPEC.LOAD_MOB7
OSPEC.BECOME_MOB8
OSPEC.AFFECT9
OSPEC.REMOVE_AFFECT10
OSPEC.TRANSFER11
OSPEC.MOVE_CHAR12
OSPEC.CHANGE_DATA13
OSPEC.CHARGE14
OSPEC.QSET15
物品觸發時機 CALLED(進階)
Lua 常數數值(.are 用)說明
CALLED.ATTACK1
CALLED.WEAR2
CALLED.REMOVE3
CALLED.UPDATE4
CALLED.GET5
CALLED.DROP6
CALLED.EAT7
CALLED.DEFENSE8
位置 POS(.are 怪物位置欄)
名稱數值說明
POS_DEAD0死亡
POS_MORTAL1瀕死
POS_INCAP2失能
POS_STUNNED3昏迷
POS_SLEEPING4睡眠
POS_RESTING5休息
POS_FIGHTING6戰鬥中
POS_STANDING7站立

注意:.are 檔中的怪物位置欄慣例填 8 8(沿用 Diku 檔案格式的站立值), 遊戲載入時會自行對應;照現有區域檔的寫法即可。

裝備位置代碼(.are 的 E reset 第 4 欄)
名稱數值部位
WEAR_LIGHT0光源
WEAR_FINGER_L / WEAR_FINGER_R1 / 2左/右戒指
WEAR_NECK_1 / WEAR_NECK_23 / 4頸部 ×2
WEAR_BODY5身體
WEAR_HEAD6
WEAR_LEGS7
WEAR_FEET8
WEAR_HANDS9
WEAR_ARMS10手臂
WEAR_SHIELD11盾牌
WEAR_ABOUT12披風
WEAR_WAIST13
WEAR_WRIST_L / WEAR_WRIST_R14 / 15左/右手腕
WEAR_WIELD16武器
WEAR_HOLD17手持
WEAR_BREAST18胸口
WEAR_TRANSPORT19坐騎
特殊行為 spec 函式(#SPECIALS 用,完整清單)
名稱行為
spec_breath_any隨機吐息攻擊
spec_breath_acid / fire / frost / gas / lightning酸/火/冰/毒氣/閃電吐息
spec_cast_adept幫低等玩家施放輔助法術(新手區用)
spec_cast_cleric戰鬥中施放牧師系法術
spec_cast_judge戰鬥中施放法官系法術
spec_cast_mage戰鬥中施放法師系法術
spec_cast_undead戰鬥中施放不死系法術
spec_executioner處刑者:攻擊有殺人犯/竊賊旗標的玩家
spec_fido吃地上的屍體
spec_guard警衛:攻擊罪犯並呼叫支援
spec_janitor清潔工:撿走地上垃圾
spec_mayor市長:定時巡城開關城門
spec_poison攻擊時有機率下毒
spec_thief小偷:偷玩家的錢
spec_clan_guard / spec_clan_statue幫派警衛/雕像(幫派區系統用)
本表由引擎的定義自動產生,數值與遊戲實際行為一致。 若發現表中沒有的旗標或代碼,以站方說明為準。

四度空間 Area Builder Kit 附件 · 內容依 driver 實際載入邏輯整理

更新記錄

回報問題時請附上版號(標題旁的灰色標籤)。教學與編輯器一起發布,版號相同。

v0.4

v0.3

v0.2

v0.1