打包發布與使用教學

本篇定位

這是 Phase 8「整合測試與發布」的第 2 篇。 開發和測試完成後,如何把登入器打包成玩家能直接使用的版本?這篇說明 Release 編譯設定、打包內容、安裝步驟,以及給玩家的使用說明。

完成本篇後,你已掌握登入器的完整開發到發布流程。想更深入了解 MapleStory 引擎的內部型別系統(ZAllocEx、ZXString、TSecType 等),請繼續閱讀 Phase 9:MapleStory 內部型別系統(進階選讀)。


一、Release 編譯設定

1.1 切換到 Release x86 設定

Visual Studio 頂部工具列:

[Debug ▼] → Release
[x64   ▼] → x86

為什麼必須是 x86?

MapleStory v83 是 32 位元程式,只能載入 32 位元 DLL。如果誤用 x64 編譯,遊戲會報錯「不是有效的 Win32 應用程式」並拒絕載入。

1.2 Release 和 Debug 的關鍵差異

設定Debug 模式Release 模式
最佳化關閉(/Od)最高(/O2)
除錯資訊完整 .pdb 檔無(或精簡)
斷言(assert)啟用停用
DLL 大小較大較小
執行速度
載入進遊戲可能有問題(CRT 版本差異)正常

確認 Runtime Library 設定

在 Project Properties → C/C++ → Code Generation → Runtime Library:

  • Multi-threaded (/MT)(靜態連結 CRT)
  • 不要選 Multi-threaded DLL (/MD)

靜態連結確保玩家的電腦不需要額外安裝 Visual C++ Redistributable,DLL 完全自給自足。

1.3 額外最佳化建議

Project Properties → C/C++ → Optimization:
  Optimization: Maximize Speed (/O2)
  Inline Function Expansion: Only __inline (/Ob1)

Project Properties → Linker → General:
  Enable Incremental Linking: No (/INCREMENTAL:NO)

二、打包內容

測試通過後,準備發布包,只需要以下幾個檔案:

MapleEzorsia-v2_vX.X.zip
├── dinput8.dll          ← 編譯好的登入器(Release x86)
├── dinput8.ini          ← 預設設定檔(IP 填私服地址)
└── README.txt           ← 安裝說明(見下節)

不包含的東西

  • MapleStory.exe:由玩家自行取得(版權問題)
  • .pdb 偵錯符號檔:不包含(避免暴露原始碼資訊)
  • WZ 資源檔案:如有自訂 WZ,另外打包或說明下載連結

三、README.txt 範本

MapleEzorsia-v2 登入器 v2.x
================================
適用版本:GMS v83.1(EXE MD5: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX)

【安裝步驟】
1. 確認你有 GMS v83 的 MapleStory.exe
2. 把 dinput8.dll 和 dinput8.ini 放進遊戲資料夾
   (和 MapleStory.exe 同一個資料夾)
3. 用文字編輯器(記事本)打開 dinput8.ini
   修改 ServerIP 為私服伺服器的 IP 位址
4. 直接雙擊 MapleStory.exe 啟動遊戲(不需要啟動器)

【設定說明】
  ServerIP   = 伺服器 IP(向私服管理員取得)
  Port       = 8484(通常不需要修改)
  Width      = 1280(視窗寬度,建議和螢幕解析度相同或更小)
  Height     = 720 (視窗高度)
  Windowed   = true(true = 視窗模式,false = 全螢幕)

【常見問題】
Q: 點擊 MapleStory.exe 後沒有反應?
A: 確認 dinput8.dll 和 MapleStory.exe 在同一個資料夾。

Q: 遊戲視窗太小或太大?
A: 修改 dinput8.ini 的 Width 和 Height,存檔後重新啟動遊戲。

Q: 連不上伺服器?
A: 確認 ServerIP 填寫正確,且私服伺服器正在運行中。

四、安裝流程圖(給玩家看的)

玩家的遊戲資料夾
├── MapleStory.exe       ← 玩家已有
├── *.wz                 ← 玩家已有
│
│   ↓ 解壓縮登入器發布包
│
├── dinput8.dll          ← 新增
└── dinput8.ini          ← 新增,然後修改 ServerIP
         │
         ↓ 雙擊 MapleStory.exe

登入器自動啟動,連接私服

五、版本管理與更新策略

版本號規則

建議遵循語意化版本(Semantic Versioning):

v2.1.3
  │ │ └── Patch:修復 bug(不改功能)
  │ └──── Minor:新增功能(向下相容)
  └────── Major:破壞性變更(例如支援新的 EXE 版本)

更新時需要重新逆向的情境

變更需要重新逆向?
私服更換 IP不需要(只改 ini)
解析度 bug 修正不需要(改程式碼邏輯,地址不變)
私服升級 EXE 版本需要(所有地址可能改變)
新增功能(支援新解析度)不需要,除非新功能依賴新地址

版本鎖定

在 DLL 啟動時,驗證 EXE 的 MD5 或版本號,如果不符就顯示錯誤並退出:

// 確認 EXE 版本正確(避免玩家用錯誤版本的 EXE)
if (!VerifyGameVersion()) {
    MessageBoxA(NULL,
        "Incompatible MapleStory.exe version.\n"
        "Please use GMS v83.1 (MD5: XXXX...)",
        "Version Mismatch", MB_ICONERROR);
    ExitProcess(1);
}

六、整套課程回顧

到這裡,你已經學完了 MapleEzorsia-v2 登入器的完整核心技術:

Phase 1  基礎概念        → DLL 劫持、Proxy DLL、開發環境
Phase 2  專案結構        → dllmain.cpp、dinput8.cpp Proxy 載入器
Phase 3  記憶體操作      → 指標、Memory.cpp、地址表、型別定義
Phase 4  Hook 技術       → Inline Hook、Detours、Code Cave
Phase 5  Client.cpp      → 解析度修改(三層次)、UI 座標換算
Phase 6  進階功能        → 函式替換、自訂記憶體分配器、初始化流程
Phase 7  設定與資源      → INI 解析器、WZ 資源系統 Hook
Phase 8  測試與發布      → 除錯工具、Release 編譯、打包發布
─────────────────────────────────────────(進階選讀)
Phase 9  引擎型別系統    → ZAllocEx、ZXString、ZRef、TSecType 等內部型別

Phase 9 是選修還是必修?

Phase 8 結束後你已能完整使用與修改登入器。Phase 9 是給「想深入理解 MapleStory 引擎內部,或準備撰寫進階 Hook(直接操作遊戲物件)」的學習者設計的進階內容,可按需選讀。


延伸學習路線

如果想繼續深入,建議的方向:

| 方向 | 推薦資源 | | ------------------- | --------------------------------------------------------------------------- | ------------------------------ | | 逆向工程 | IDA Pro 教學、x64dbg 教學、「逆向工程核心原理」書籍 | | Windows 記憶體模型 | Windows Internals(Russinovich 著) | | DirectX / Direct3D | DirectX SDK 文件、「Introduction to 3D Game Programming with DirectX 9.0c」 | | MapleStory 引擎深度 | RageZone.com 的 v83 開發論壇 | | 本章課程地圖 | MapleEzorsia-v2 課程入門導覽 |


延伸閱讀