本篇文章更新時間:2026/03/07
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
內容目錄
Moongate v2:為什麼今天還有人重寫一個 Ultima Online 伺服器?
編輯前言:Moongate v2 是一個以 .NET 10、NativeAOT、模組化架構打造的全新 UO 私服框架。不是 RunUO 或 ModernUO 的分支,而是重新思考「現代 MMORPG Server 應該長什麼樣子」。作為一個長期關注遊戲伺服器開發的讀者,我覺得這份技術文件值得整理分享。
原文連結:GitHub - moongate-community/moongatev2
核心觀點 (Key Takeaways)
- 這不是任何現有 UO Server 的 Fork,而是重寫:作者強調 Moongate v2 是從零開始,以現代語言和架構打造的新伺服器核心。
- 以 NativeAOT 與 Source Generator 為基礎,追求高效、可預測與無反射的 Runtime。
- 採用 sector/chunk 世界載入模式,而非傳統 range-scan,提高效能與記憶體可控性。
深入解析
Moongate v2 想做的事情非常明確:在保留 Ultima Online 經典玩法精神之下,用 2026 年的技術重新打造 MMORPG Server。文章內容非常長,但核心架構其實可以整理成幾個重點。
一、從零打造的伺服器架構
官方明確表示:
Moongate is not a clone of ModernUO, RunUO, ServUO…
這點非常重要。Moongate v2 不是「相容版」,而是重新設計整個伺服器生命周期:連線、封包、遊戲 Loop、事件系統、資料持久化、Lua 腳本、UI,全部重新整理。
最引人注目的設計包括:
- 封包格式全部以強型別定義 + Source Generator 自動註冊
- Game Loop 採用 timestamp-based scheduling,而非固定 tick
- 嚴格分離 inbound packet 與 outbound event
- 所有動態邏輯盡可能搬到編譯期(適合 NativeAOT)
這些做法在 .NET 世界非常罕見,也讓框架更接近現代遊戲伺服器的作法。
二、Sector-based 世界載入:向 Minecraft 學習的 UO Server
Moongate 不使用傳統 UO Server 依賴的「range scan」邏輯,而是採用 sector/chunk-based 世界切割。
優點包括:
- 可預測的記憶體成長
- 更好的 Cache locality
- 更容易水平擴張
作者甚至直接提到:
This model is intentionally closer to chunk-streaming systems (Minecraft-style)
這對大型地圖、高併發伺服器會是顯著優勢。
三、MessagePack + Snapshot/Journal 的可靠持久化機制
Moongate v2 的資料存取不是資料庫,而是:
- snapshot.bin(世界快照)
- journal.bin(操作日誌)
並以 MessagePack source-generated 契約序列化,目的很明確:
- AOT 相容
- 高效能、低 GC 壓力
- 可在 crash 後完整重播 journal
其中還提到一次實際踩雷:MemoryPack 在 NativeAOT 下發生 segmentation fault,所以整個改用 MessagePack-CSharp。
這些細節顯示作者在意的不只是「功能」、還包括「在 AOT 情境下的穩定性」。
四、Lua 腳本與擴充性:外層系統全面模組化
Moongate v2 採用 MoonSharp,但做了很多額外工作:
- Script module registration 使用 Source Generator
- 自動產生 .luarc metadata 改善編輯器體驗
- NPC AI、command system、gump UI 全部 Lua 化
其中 NPC AI 的 coroutine-based brain_loop 設計,與傳統 UO script 大不同,更接近現代遊戲 AI loop。
筆者心得與啟發
坦白說,看完整份文件,我最深的感受是:「這不是一個懷舊私服,而是一個把 UO 作為範例的現代遊戲伺服器框架」。
我覺得這篇文件之所以值得一讀,原因不只是它教你怎麼架設一個 UO 私服,而是它展示了:
- 如何在 2026 年的 .NET 下打造一個大型遊戲伺服器
- 如何善用 Source Generators 把動態邏輯搬到編譯期
- 如何用 chunk 化策略重寫地圖載入流程
- 如何在 AOT 與 JIT 間做性能比較與調整
對任何對遊戲伺服器架構、AOT、生產級 C# 開發有興趣的人來說,Moongate v2 都是一個非常值得研究的專案。
我個人最有感的是 sector/chunk 世界載入策略。傳統 UO Server 在高併發下常因 range scan 造成效能瓶頸,而 Moongate 的設計更接近 Minecraft/NWN2/Ark 等現代遊戲,一次就解決了二十年前的根本問題。
如果你本身是:
- 遊戲伺服器開發者
- ModernUO/RunUO 玩家或 GM
- 對 C# NativeAOT 與高效能程式設計有興趣的人
那 Moongate v2 絕對值得深入研究——不只是為了玩 UO,而是為了理解一套現代化遊戲 Server Core 的設計哲學。
