查看: 20|回覆: 0

[一般] RO 私服入門|模擬器、客戶端與資料庫的關係

[複製鏈接]
發表於 2026-10-27 16:34:26 |台湾台北| 顯示全部樓層 |閱讀模式

馬上註冊,結交更多好友,享用更多功能,讓你輕鬆玩轉社區。

您需要 登入 纔可以下載或查看,沒有賬號?立即註冊

×
RO 私服入門|模擬器、客戶端與資料庫的關係
POPLAB RO 私服研究社|基礎觀念篇





閱讀對象:第一次接觸 RO 伺服器架設的新手。
閱讀目標:了解 rAthena、RO 客戶端、MariaDB 各自負責什麼,以及玩家從登入到進入遊戲的過程。

系列文章:
‧第一篇:本篇(基礎觀念)
‧第二篇:RO 私服資料庫完整圖文教學(第 0~8 章)
‧第三篇:rAthena 伺服器架設教學|從原始碼到啟動(第 9~13 章)

提醒:本文只介紹技術架構,不提供未經授權的遊戲資產。架設與分享時請遵守相關授權及法律。




一、RO 私服是什麼?

RO 私服一般是指由非官方營運者架設的《仙境傳說》遊戲伺服器。
技術研究常使用 rAthena 這類開源的伺服器模擬器,重現登入、角色、地圖、NPC 與遊戲規則等功能。

注意:rAthena 是開源軟體,但這不代表你取得了 RO 客戶端、圖像、音效或商標的使用與散布授權。




二、三個核心元件

元件代表軟體負責什麼
模擬器(伺服器)rAthena遊戲規則:登入驗證、角色與地圖狀態、戰鬥計算、NPC 腳本
客戶端RO 遊戲程式畫面呈現:地圖、角色、動畫、音效、操作介面
資料庫MariaDB長期保存:帳號、角色、物品、倉庫、公會、日誌


  1. 玩家操作 → RO 客戶端 ⇄ rAthena 伺服器 ⇄ MariaDB
  2.                               ↑
  3.                      NPC 腳本/設定檔/YAML 資料
複製代碼

重要觀念:
‧客戶端負責「看起來怎樣」,伺服器負責「實際是怎樣」,資料庫負責「記下來」。
‧畫面顯示正常,不代表伺服器的資料正確。例如道具說明寫攻擊 +10,實際加多少是由伺服器決定。
‧HeidiSQL 是管理資料庫的工具,不是資料庫本身。關掉 HeidiSQL 不影響伺服器運作。




三、rAthena 的三個伺服器

伺服器負責預設連接埠
Login Server(登入)帳號驗證、登入流程TCP 6900
Char Server(角色)角色列表、建立與選擇角色TCP 6121
Map Server(地圖)地圖、移動、NPC、戰鬥等大部分遊戲內容TCP 5121


三個伺服器都啟動成功,不代表玩家一定能連線。還要確認它們彼此有連上、資料庫設定正確,以及客戶端的連線設定。




四、玩家從登入到進入遊戲的流程

  1. 啟動客戶端(讀取 clientinfo.xml 的 IP 與連接埠)
  2.     ↓
  3. Login Server:驗證帳號密碼
  4.     ↓
  5. Char Server:顯示角色列表,玩家選擇角色
  6.     ↓
  7. Map Server:載入角色所在地圖,開始遊戲
  8.     ⇅
  9. 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 以同一組帳號密碼測試連線,再檢查設定檔:
  1. conf/import/inter_conf.txt(自訂設定,建議改這裡)
  2. conf/inter_athena.conf(原始設定檔)
複製代碼

確認 IP、連接埠、帳號、密碼、資料庫名稱是否正確,修改後重新啟動伺服器。
詳細設定請看資料庫教學第 6 章。

3. 可以登入,卻沒有角色列表
確認角色伺服器已啟動,而且視窗顯示已連上登入伺服器。
如果連不上,最常見的原因是伺服器帳號(s1/p1)在三個地方設定不一致,請看資料庫教學第 7 章。

4. 可以選角色,卻進不了地圖
確認地圖伺服器已啟動,再檢查設定檔:
  1. conf/import/map_conf.txt(自訂設定,建議改這裡)
  2. conf/map_athena.conf(原始設定檔)
複製代碼

核對 map_ip、map_port 是否是玩家連得到的位址,並確認客戶端版本和伺服器的封包版本(PACKETVER)相符。

5. 遊戲文字亂碼
先確認是哪一種文字出問題。顯示英文或韓文不一定是亂碼,也可能只是還沒中文化。

出問題的文字資料在哪一邊
物品名稱、技能名稱、介面文字客戶端
NPC 對話、選單伺服器(NPC 腳本)
角色名稱資料庫+傳輸
魔物名稱伺服器(mob_db、刷怪腳本)


(一)物品名稱、技能名稱
常見現象:顯示英文、韓文、亂碼,或出現 Unknown Item。
檢查位置:客戶端的 data 資料夾、System 資料夾、*.grf。依客戶端版本,常見的相關檔案有:
  1. System/itemInfo.lub(較新的客戶端)
  2. data/idnum2itemdisplaynametable.txt(較舊的客戶端)
  3. data/idnum2itemdesctable.txt(較舊的客戶端)
  4. data/luafiles514/lua files/skillinfoz/skillinfolist.lub
  5. 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 設定。


(四)魔物名稱
魔物名稱由伺服器傳給客戶端,資料來源有兩個:
  • 魔物資料庫:
    1. db/re/mob_db.yml(復興後)
    2. db/pre-re/mob_db.yml(復興前)
    3. db/import/mob_db.yml(自訂資料)
    複製代碼

    每隻魔物有 Name 和 JapaneseName 兩個名稱欄位。
  • 刷怪腳本:npc/ 資料夾裡的 monster 指令,可以直接寫名稱,也可以寫 --en-- 或 --ja-- 代表使用資料庫的名稱。


實際顯示哪一個名稱,由 conf/battle/monster.conf 的 override_mob_names 決定:
  1. override_mob_names: 0   // 依刷怪腳本的寫法(--en-- 用 Name,--ja-- 用 JapaneseName)
  2. override_mob_names: 1   // 一律使用 Name
  3. override_mob_names: 2   // 一律使用 JapaneseName
複製代碼

各版本的說明可能略有不同,請以你的 monster.conf 檔案內的註解為準。這個設定建議寫在 conf/import/battle_conf.txt。

提醒:不要為了中文化修改 AegisName。AegisName 是內部識別名稱,腳本和其他資料會用它來找魔物,改了會造成錯誤。要中文化請改 Name 或 JapaneseName。

(五)遊戲介面文字
常見現象:按鈕、選單、系統訊息出現韓文、亂碼或方框。
檢查位置:客戶端的語系資料、GRF 與 data 資料夾的讀取順序、字型,以及 clientinfo.xml 的 langtype 設定。

  1. <langtype>數字</langtype>
  2. 0=韓國,1=美國,2=日本,3=中國,4=台灣,5=泰國
複製代碼

注意:langtype 的正確數值要看客戶端的中文化方式,不是單純看客戶端來源。
例如本系列使用的是經過繁體中文化的 kRO 客戶端,設定為 4。
如果客戶端目前已經能正常顯示,不建議隨意修改。詳細說明請看架設教學 12-3。




了解這些觀念後,就可以開始動手架設了!
下一篇:RO 私服資料庫完整圖文教學

有問題歡迎在下方回覆,或到 POPLAB Discord 或到
RO私服疑問區 詢問!

主席
回覆

使用道具 舉報

在本版發帖返回頂部