馬上註冊,結交更多好友,享用更多功能,讓你輕鬆玩轉社區。
您需要 登入 纔可以下載或查看,沒有賬號?立即註冊
×
RO 私服入門|模擬器、客戶端與資料庫的關係
POPLAB RO 私服研究社|基礎觀念篇
閱讀對象:第一次接觸 RO 伺服器架設的新手。
閱讀目標:了解 rAthena、RO 客戶端、MariaDB 各自負責什麼,以及玩家從登入到進入遊戲的過程。
系列文章:
‧第一篇:本篇(基礎觀念)
‧第二篇:RO 私服資料庫完整圖文教學(第 0~8 章)
‧第三篇:rAthena 伺服器架設教學|從原始碼到啟動(第 9~13 章)
提醒:本文只介紹技術架構,不提供未經授權的遊戲資產。架設與分享時請遵守相關授權及法律。
一、RO 私服是什麼?
RO 私服一般是指由非官方營運者架設的《仙境傳說》遊戲伺服器。
技術研究常使用 rAthena 這類開源的伺服器模擬器,重現登入、角色、地圖、NPC 與遊戲規則等功能。
注意:rAthena 是開源軟體,但這不代表你取得了 RO 客戶端、圖像、音效或商標的使用與散布授權。
二、三個核心元件
| 元件 | 代表軟體 | 負責什麼 | | 模擬器(伺服器) | rAthena | 遊戲規則:登入驗證、角色與地圖狀態、戰鬥計算、NPC 腳本 | | 客戶端 | RO 遊戲程式 | 畫面呈現:地圖、角色、動畫、音效、操作介面 | | 資料庫 | MariaDB | 長期保存:帳號、角色、物品、倉庫、公會、日誌 |
- 玩家操作 → RO 客戶端 ⇄ rAthena 伺服器 ⇄ MariaDB
- ↑
- NPC 腳本/設定檔/YAML 資料
複製代碼
重要觀念:
‧客戶端負責「看起來怎樣」,伺服器負責「實際是怎樣」,資料庫負責「記下來」。
‧畫面顯示正常,不代表伺服器的資料正確。例如道具說明寫攻擊 +10,實際加多少是由伺服器決定。
‧HeidiSQL 是管理資料庫的工具,不是資料庫本身。關掉 HeidiSQL 不影響伺服器運作。
三、rAthena 的三個伺服器
| 伺服器 | 負責 | 預設連接埠 | | Login Server(登入) | 帳號驗證、登入流程 | TCP 6900 | | Char Server(角色) | 角色列表、建立與選擇角色 | TCP 6121 | | Map Server(地圖) | 地圖、移動、NPC、戰鬥等大部分遊戲內容 | TCP 5121 |
三個伺服器都啟動成功,不代表玩家一定能連線。還要確認它們彼此有連上、資料庫設定正確,以及客戶端的連線設定。
四、玩家從登入到進入遊戲的流程
- 啟動客戶端(讀取 clientinfo.xml 的 IP 與連接埠)
- ↓
- Login Server:驗證帳號密碼
- ↓
- Char Server:顯示角色列表,玩家選擇角色
- ↓
- Map Server:載入角色所在地圖,開始遊戲
- ⇅
- MariaDB:在適當時機保存角色進度、背包等資料
複製代碼
- 客戶端依 clientinfo.xml 的設定,連到登入伺服器。
- 登入伺服器驗證帳號,成功後告訴客戶端角色伺服器的位址。
- 角色伺服器讀取角色資料,玩家選擇角色。
- 角色伺服器告訴客戶端地圖伺服器的位址,客戶端再連過去。
- 地圖伺服器載入地圖與角色狀態,玩家開始操作。
這個流程可以幫你判斷問題卡在哪裡:
‧卡在輸入帳號密碼 → 登入伺服器的問題
‧登入後沒有角色列表 → 角色伺服器的問題
‧選完角色進不了地圖 → 地圖伺服器的問題
詳細排查方式請看第九章。
五、資料庫保存哪些資料?
| 類型 | 內容 | 常見資料表 | | 帳號 | 帳號、密碼、權限群組 | login | | 角色 | 名稱、等級、能力值、位置 | char | | 道具 | 背包、倉庫、購物車 | inventory、storage、cart_inventory | | 社群 | 公會、隊伍 | guild、party | | 日誌 | 依設定記錄交易、掉落、指令等 | (在 ragnaroklog 資料庫) |
提醒:不要在伺服器運作中直接修改資料庫的帳號、角色或道具資料。請先關閉伺服器並備份,最好先在測試環境試過。
六、客戶端與伺服器分工的例子
例一:角色名稱亂碼
可能和客戶端字型、編碼,或伺服器與資料庫之間的連線編碼有關,不一定是資料庫壞掉。
例二:NPC 對話正常,但領不到物品
對話顯示正常,不代表腳本的條件判斷成功。請檢查 NPC 腳本,以及地圖伺服器視窗的錯誤訊息。
例三:客戶端能開,卻無法登入
可能是登入伺服器沒啟動、IP 或連接埠錯誤、封包版本不符,或資料庫驗證失敗。
例四:道具說明和實際效果不一樣
道具說明在客戶端,實際效果在伺服器的 item_db,兩邊是分開的資料。要修正哪一邊,看你以哪一邊為準。
七、NPC 腳本、YAML 與 SQL 的差異
| 類型 | 用途 | 位置 | | NPC 腳本 | NPC 對話、選單、條件、事件等遊戲邏輯 | npc/ 資料夾(.txt) | | YAML | 靜態遊戲資料,例如物品、魔物、技能 | db/ 資料夾(.yml) | | SQL | 建立和維護資料庫的資料表與資料 | sql-files/ 資料夾(.sql) |
注意:
‧YAML 檔案不能直接當成 SQL 匯入。
‧rAthena 預設從 YAML 讀取物品、魔物資料,一般不需要匯入 item_db、mob_db 的 SQL 檔。
‧自己新增或修改的資料,建議放在 db/import/ 資料夾,避免官方更新時被覆蓋。
八、IP 與連接埠的基本概念
| 位址 | 意思 | 誰連得到 | | 127.0.0.1 | 這台電腦自己 | 只有本機 | | 192.168.x.x 等 | 區域網路 IP | 同一個網路(同一台路由器)的裝置 | | 公網 IP | 對外的網路位址 | 外部玩家(還要設定防火牆與路由器) |
單機測試:客戶端和伺服器在同一台電腦,用 127.0.0.1 就能連線,不需要修改防火牆或路由器。
對外開放:需要設定對外 IP、防火牆、連接埠轉發,並確認沒有 CGNAT 限制。詳細步驟請看架設教學第 11 章。
不要對外開放 MariaDB 的 3306 連接埠。
九、常見問題快速判斷
1. MariaDB 無法啟動
按 Win + R,輸入 services.msc,確認 MariaDB 服務是否為「執行中」。
無法啟動時,檢查 3306 連接埠是否被其他程式占用,並查看 MariaDB 的錯誤日誌。
2. 登入伺服器連不上資料庫
先用 HeidiSQL 以同一組帳號密碼測試連線,再檢查設定檔:
- conf/import/inter_conf.txt(自訂設定,建議改這裡)
- conf/inter_athena.conf(原始設定檔)
複製代碼
確認 IP、連接埠、帳號、密碼、資料庫名稱是否正確,修改後重新啟動伺服器。
詳細設定請看資料庫教學第 6 章。
3. 可以登入,卻沒有角色列表
確認角色伺服器已啟動,而且視窗顯示已連上登入伺服器。
如果連不上,最常見的原因是伺服器帳號(s1/p1)在三個地方設定不一致,請看資料庫教學第 7 章。
4. 可以選角色,卻進不了地圖
確認地圖伺服器已啟動,再檢查設定檔:
- conf/import/map_conf.txt(自訂設定,建議改這裡)
- conf/map_athena.conf(原始設定檔)
複製代碼
核對 map_ip、map_port 是否是玩家連得到的位址,並確認客戶端版本和伺服器的封包版本(PACKETVER)相符。
5. 遊戲文字亂碼
先確認是哪一種文字出問題。顯示英文或韓文不一定是亂碼,也可能只是還沒中文化。
| 出問題的文字 | 資料在哪一邊 | | 物品名稱、技能名稱、介面文字 | 客戶端 | | NPC 對話、選單 | 伺服器(NPC 腳本) | | 角色名稱 | 資料庫+傳輸 | | 魔物名稱 | 伺服器(mob_db、刷怪腳本) |
(一)物品名稱、技能名稱
常見現象:顯示英文、韓文、亂碼,或出現 Unknown Item。
檢查位置:客戶端的 data 資料夾、System 資料夾、*.grf。依客戶端版本,常見的相關檔案有:
- System/itemInfo.lub(較新的客戶端)
- data/idnum2itemdisplaynametable.txt(較舊的客戶端)
- data/idnum2itemdesctable.txt(較舊的客戶端)
- data/luafiles514/lua files/skillinfoz/skillinfolist.lub
- data/luafiles514/lua files/skillinfoz/skilldescript.lub
複製代碼
確認物品或技能 ID 有沒有對應的文字、客戶端實際讀到的是哪個檔案,以及文字編碼是否正確。
(二)NPC 對話
常見現象:NPC 名稱正常,但對話或選單出現亂碼。
檢查位置:伺服器的 npc/ 資料夾裡的 .txt 腳本。
使用 VS Code 或 Notepad++ 確認腳本的編碼,要和客戶端使用的編碼一致(繁體中文客戶端通常是 Big5)。檢查 mes、menu、select 等指令的文字,修正後重新啟動地圖伺服器。
提醒:文字如果已經損壞,直接另存成 Big5 或 UTF-8 不一定能還原。修改前請先備份原始檔案。
(三)角色名稱
先用 HeidiSQL 查看 ragnarok 資料庫 → char 資料表 → name 欄位:
- 資料庫裡正常、遊戲裡亂碼:優先檢查伺服器傳輸與客戶端的文字處理。
- 資料庫裡就是亂碼:檢查資料寫入時的連線編碼,也就是 inter_conf.txt 的 default_codepage 設定。
(四)魔物名稱
魔物名稱由伺服器傳給客戶端,資料來源有兩個:
- 魔物資料庫:
- db/re/mob_db.yml(復興後)
- db/pre-re/mob_db.yml(復興前)
- db/import/mob_db.yml(自訂資料)
複製代碼
每隻魔物有 Name 和 JapaneseName 兩個名稱欄位。 - 刷怪腳本:npc/ 資料夾裡的 monster 指令,可以直接寫名稱,也可以寫 --en-- 或 --ja-- 代表使用資料庫的名稱。
實際顯示哪一個名稱,由 conf/battle/monster.conf 的 override_mob_names 決定:
- override_mob_names: 0 // 依刷怪腳本的寫法(--en-- 用 Name,--ja-- 用 JapaneseName)
- override_mob_names: 1 // 一律使用 Name
- override_mob_names: 2 // 一律使用 JapaneseName
複製代碼
各版本的說明可能略有不同,請以你的 monster.conf 檔案內的註解為準。這個設定建議寫在 conf/import/battle_conf.txt。
提醒:不要為了中文化修改 AegisName。AegisName 是內部識別名稱,腳本和其他資料會用它來找魔物,改了會造成錯誤。要中文化請改 Name 或 JapaneseName。
(五)遊戲介面文字
常見現象:按鈕、選單、系統訊息出現韓文、亂碼或方框。
檢查位置:客戶端的語系資料、GRF 與 data 資料夾的讀取順序、字型,以及 clientinfo.xml 的 langtype 設定。
- <langtype>數字</langtype>
- 0=韓國,1=美國,2=日本,3=中國,4=台灣,5=泰國
複製代碼
注意:langtype 的正確數值要看客戶端的中文化方式,不是單純看客戶端來源。
例如本系列使用的是經過繁體中文化的 kRO 客戶端,設定為 4。
如果客戶端目前已經能正常顯示,不建議隨意修改。詳細說明請看架設教學 12-3。
|