首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Mangos WoW 服務端編譯部署全流程實錄(二):從源碼到可運行服務器

     編輯:關於C語言

Mangos編譯

項目背景

Mangos 是開源《魔獸世界》服務端模擬器(支持 TBC 2.4.3 版本),採用 C++ 開發,基於 ACE 網絡庫,數據庫用 MySQL。本文記錄從源碼編譯到可運行服務器的完整實踐路徑。

先決條件

  • IDE:Visual Studio 2003 / 2005(對應 sln 版本)
  • 數據庫:MySQL 4.1.22+(推薦 5.0+)
  • 管理工具:Navicat for MySQL
  • 源碼:Mangos 核心 + ScriptDev2 腳本庫(放入 src/bindings/ScriptDev2)

編譯階段

  1. 打開對應 VS 版本的 mangos.sln
  2. 配置 Release 模式(Debug 體積大、速度慢)
  3. 建置解決方案(~450 萬行代碼,預留 30-60 分鐘)
  4. 編譯 ScriptDev2 子項目

成功產物位於 src/bin/release/:

libeay32.dll
dbghelp.dll
libeaysql.dll
mangosd.exe        # 世界服務進程
MaNGOSScript.dll   # 腳本模塊
realmd.exe         # 登錄/認證服務進程

配置階段

  1. 創建運行目錄(如 D:\WoWServer\),複製上述 6 文件至此
  2. 複製配置模板並重命名:
    • src/mangosd/mangosd.conf.dist.in → mangosd.conf
    • src/realmd/realmd.conf.dist.in → realmd.conf
  3. 編輯 mangosd.conf 關鍵項:
    LoginDatabaseInfo = "127.0.0.1;3306;root;password;realmd"
    WorldDatabaseInfo = "127.0.0.1;3306;root;password;mangos"
    DataDir = "./"          # 資源文件目錄(maps、dbc、vmaps)
    
  4. 編輯 realmd.conf 同樣設置 LoginDatabaseInfo

數據庫初始化

  1. MySQL 中創建四庫:mangos、realmd、characters、scriptdev2
  2. 導入核心 SQL(按順序):
    • sql/mangos.sql
    • sql/realmd.sql
    • sql/characters.sql
  3. 導入 ScriptDev2 SQL:src/bindings/ScriptDev2/sql/ 下所有文件

客戶端資源提取(關鍵且耗時)

服務端需客戶端地圖、DBC 數據文件進行碰撞檢測、路徑尋找、屬性查詢。

工具準備

  • ad.exe(地圖提取器,又名 mapextractor)
  • mpq.exe + zlib.dll(MPQ 解包工具)

提取地圖

  1. 將 ad.exe 放入客戶端根目錄(World of Warcraft/)
  2. 創建 maps/ 空目錄
  3. 運行 ad.exe,自動提取地圖至 maps/(~1.06 GB)
  4. 台服客戶端需將 Data/enTW 改名 enGB,並重命名 locale-enTW.MPQ 等 3 文件的 TW→GB

提取 DBC

  1. 將 mpq.exe、zlib.dll 放入客戶端 Data/zhTW/(或對應語言目錄)
  2. CMD 進入該目錄,執行:mpq e locale-zhTW.MPQ *.dbc
  3. 生成目錄 Extract/locale-zhTW/DBC/,重命名為 dbc/

部署資源

將 maps/、dbc/ 複製至服務端運行目錄(DataDir="./" 指向處)。

啟動與驗證

  1. 雙擊運行 realmd.exe(認證服務)
  2. 雙擊運行 mangosd.exe(世界服務),等待提示 Mangosd ready...
  3. 客戶端配置 realmlist.wtf:set realmlist 127.0.0.1
  4. 啟動遊戲,賬號 ADMINISTRATOR,密碼同賬號,登入測試

一鍵啟動腳本

@echo off
rd cache /s /q
echo set realmlist 127.0.0.1 > realmlist.wtf
start wow.exe -opengl -windowed
exit

保存為 start.bat 放入客戶端目錄,雙擊即玩。

常見坑點總結

現象排查方向
編譯報缺少 ace/ 頭文件ACE 未正確安裝或環境變量 ACE_ROOT 未設置
啟動報 maps not foundDataDir 配置錯誤或 maps 目錄未複製到位
進遊戲卡在傳送中/斷線realmd/mangosd 數據庫連接失敗、防火牆阻擋 3724/8085 端口
NPC/任務/法術不工作ScriptDev2 SQL 未導入或版本不匹配核心
中文亂碼數據庫/表/連接字符集統一 UTF8;conf 設置 DefaultLocale=8

結語

Mangos 編譯部署是系統集成、網絡編程、數據庫管理、逆向工程綜合實戰。完成部署不僅擁有私有艾澤拉斯,更深度理解 MMORPG 服務端架構:認證集群、世界分線、網格管理、AI 腳本、數據持久化。建議進一步閱讀核心源碼 src/game/、src/database/、src/network/,探索分布式擴展、熱更腳本、反外掛機制等高階主題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved