Mudlet 客戶端與自動地圖
Mudlet 是免費的專業 MUD 客戶端,Windows、macOS、Linux 都能用。 搭配我們的自動地圖套件,走過的房間會自己畫進地圖,之後點兩下就能自動走過去。
到 mudlet.org 下載安裝(免費、開放原始碼)。
打開後按左上角的「連接 / Connect」,選「新建 / New」,填入:
| 設定名稱 | Fantatopia(隨你取) |
|---|---|
| 主機位址 | mud.kangatnewyork.com |
| 埠號 | 4000 |
| 資料編碼 | UTF-8 |
編碼一定要選 UTF-8,選錯會整片亂碼。若已經連上才發現亂碼,在遊戲裡輸入 encoding 也可以改。
Mudlet 預設的字型是 Bitstream Vera Sans Mono,這個字型一個中文字都沒有。
中文還是顯示得出來,但那是系統臨時拿別的字型湊的,所以看起來會比英數字細、粗細不一致、久看很累。
到「設定 / Settings → 顯示設定 / Display」把字型換成有中文的等寬字型,中文會立刻變清楚:
- Windows:微軟正黑體(Microsoft JhengHei)或 新細明體
- macOS:蘋方(PingFang TC)
- 三個系統通用、效果最好:Sarasa Mono TC 更紗黑體(免費)
同一頁的「設置『模糊』寬度字符的寬度」請保持勾選,這是讓中文與數字在表格裡對齊用的。
下載自動地圖套件 FantatopiaMapper.mpackage(v1.1,約 22 KB)
- 下載上面的檔案
- Mudlet 上方工具列 → Packages → Install from file
- 選剛剛下載的
FantatopiaMapper.mpackage - 進遊戲走個幾步,地圖就會開始自己長出來
(Packages → 選 generic_mapper → Remove)
兩套地圖會互相搶著畫,同一間房會被畫成兩格。移除之後在遊戲裡輸入
fmap reset 重建即可。裝好後套件也會自己偵測並提醒你。
| 動作 | 結果 |
|---|---|
| 在地圖上點兩下某間房 | 角色自動走過去 |
fgo 當鋪 | 走到名字符合的房間 |
fmap | 看目前認識了幾間房 |
fmap stop | 中斷自動走路 |
fmap reset | 清空地圖重新畫 |
看不到地圖面板的話,工具列上的「地圖 / Map」按鈕可以叫出來。
- 自動走路只能走你已經走過的房間。沒去過的地方要先自己走一次—— 地圖是你自己的足跡,不是攻略。
- 沒走過的方向會顯示成一小截短線,提醒你「這邊還有路沒探」。
- 房間的位置是預先算好的,所以不會像一般自動地圖那樣互相疊在一起、 需要你手動拖開。
- 這個套件只讀取伺服器本來就會送給客戶端的房間資料, 不會替你跑任何指令,也不會碰你的帳號。
- 網頁版玩家不需要安裝——網頁版本來就有房間圖與方位面板。
伺服器除了看得見的文字,還會另外送一份結構化資料給客戶端,走的是
GMCP 這個標準協定。上面那個自動地圖套件讀的就是其中的 Room.Info。
你也可以自己讀這些資料,做出血條、目標視窗、背包面板之類的東西——
比用觸發器去解析文字穩定得多,我們改文案不會把你的腳本弄壞。
Mudlet 預設就會協商 GMCP,通常什麼都不用設定。 (設定 → 一般設定裡有「啟用 GMCP」的選項,預設是開的。)
目前送出的封包
| 封包 | 內容 | 什麼時候送 |
|---|---|---|
Room.Info |
房間編號、名稱、所屬區域、出口方向與各出口通往的房間(含鄰房名稱);另有一個跨重建不變的房間索引,適合當自己資料表的鍵。副本房間另附 instance / instance_name / depth / depth_total(見下方說明) |
每次進入新房間、登入時 |
Room.Exits |
目前房間的出口方向陣列 | 同上,另外房內有人進出時也會重送 |
Room.Entities |
房裡的 NPC、玩家、物品,各附名稱與可執行的動作 | 進房、look、房內有人/物進出時 |
Char.Vitals |
氣血、內力、法力、精神、體力(各含上限) | 任何一項有變動就送(伺服器每秒偵測一次) |
Char.Stats |
十項基礎屬性、武學心得、身家、十一個裝備欄位,以及門派/地位/正邪/名聲/年紀/體況 | 登入、換裝備時 |
Char.Skills |
已學的基礎技能與武學,各含等級、境界、是否已運起 | 登入、學藝/升級/運起武學時 |
Char.Inventory |
身上的物品(同款會堆疊計數),含稀有度、裝備欄位、消耗品效果 | 登入、物品進出行囊、換裝備時 |
Char.Missions |
目前進行中的任務與其進度文字 | 登入、移動、查任務時 |
Char.Combat 新 |
是否在戰鬥中、打的是誰、誰在打你、目標血量、出手間隔(詳見下一段) | 開打與收兵當下立刻送;其餘變動每秒偵測一次 |
Npc.Dialogue |
NPC 對你說的話(說話者、內容) | NPC 跟你講話時 |
Emote.List |
全部表情動作的清單 | 登入時送一次(內容固定不變) |
Core.Chat |
全服頻道的發言與表情 | 有人在頻道說話時 |
這些封包只送你自己的資料,看不到別人的私密資訊。
裡頭的 ref(形如 #12345)指的是「這一隻/這一件」的當下編號,
NPC 重生後會換一個;要做長期對照表請用 key 或 proto_key。
副本房間(Room.Info 的四個額外欄位)
副本(冰雪祭壇、裂地龍穴這類)的房間是每一趟隨機生成、走完就刪的,
所以沒有「跨場次不變」的房間索引——room_id 一律是空字串。
能穩定辨識的是這幾項:
area / zone | 副本種類代號(如 frost_altar),跨場次固定——用這個判斷「我在哪一種副本」 |
subarea | 本房性質:entrance 前廳/combat 戰鬥房/trap 機關房/boss 關底 |
instance | 本趟副本的實例編號。非空字串就代表這是臨時房間 |
instance_name | 副本中文名(如「冰雪祭壇」) |
depth / depth_total | 本趟第幾間 / 共幾間,例如 6 / 10 |
instance 非空請直接略過這間房。副本房走完就刪除,畫進地圖只會讓你每跑一趟就永久多出十幾間再也回不去的鬼房間。 官方地圖套件 v1.1 起已自動略過(進出副本時會提示一行), 舊版請重新下載安裝。
一般地圖房間的這四欄固定是 "" / "" / 0 / 0,
所以你可以無條件讀取、不必判斷欄位存不存在。
Char.Combat 的欄位
active | 是否處於戰鬥中。你有鎖定目標、或有人正在打你,都算 |
attacking | 你自己有沒有鎖定目標。active 為真而這項為假,代表你正在單方面挨打 |
mode | "fight" 點到為止/"kill" 生死相搏/"duel" 切磋;非戰鬥時為空字串 |
busy | 施展招式之後的僵直,這一回合不會揮擊 |
queued | 已排入下一回合的動作 {kind, windup};沒有則為 null |
interval | 你目前的出手間隔(秒),會吃輕功與凍緩等修正 |
target | 鎖定的目標,沒有則為 null |
attackers | 正在攻擊你的對象陣列,被圍毆時會超過一個 |
target 與 attackers 裡每一個對象長這樣:
{
"name": "冰甲妖兵(Iceguard)", 完整顯示名(含稱號/門派前綴)
"name_zh": "冰甲妖兵", 乾淨中文名
"key": "iceguard",
"proto_key": "iceguard", 跨重生恆定,做對照表用這個
"ref": "#606262", 精確指向這一隻
"is_player": false,
"hp": 120,
"hp_max": 300,
"hp_percent": 40
}
血量不是額外開放的情報——戰鬥訊息每一擊本來就會印「(某某 剩 120/300)」,
這裡只是把同一份數字整理成好讀的格式。戰鬥外不會有 target,
所以沒辦法拿來偷看路人的血量。
Mudlet 這樣接
-- 新增一個 Script,把下面貼進去
function onCombatUpdate()
local c = gmcp.Char.Combat
if not c.active then return end
if c.target then
local t = c.target
cecho(string.format("<yellow>[戰鬥] %s %d/%d (%d%%)\n",
t.name_zh, t.hp, t.hp_max, t.hp_percent))
end
if not c.attacking then
cecho("<red>[警告] 你正在挨打,卻沒有還手目標!\n")
end
end
registerAnonymousEventHandler("gmcp.Char.Combat", "onCombatUpdate")
其他封包同理,事件名稱就是 gmcp. 加上封包名,例如
gmcp.Char.Vitals、gmcp.Room.Info。
想要新的欄位、或覺得哪裡不好用,歡迎到留言/回報開一單。
- 走了半天地圖還是空的
- 輸入
fmap看「本次連線收到 Room.Info」是不是 0。 是 0 的話代表套件沒收到房間資料,請到留言/回報告訴我們。 - 同一間房被畫成兩格
- 幾乎都是 generic_mapper 還裝著。移除它,再
fmap reset。 - 點兩下沒反應
- 先確認那間房你真的走過。沒走過的房間之間沒有路徑可算,自然走不過去。
- 中文變成方框或問號
- 編碼不是 UTF-8,或字型沒有中文。回頭看第二、三節。