Moongate v2:一個從零打造的現代 Ultima Online 伺服器框架

本篇文章更新時間: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 的設計哲學。


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon