2 điểm bởi GN⁺ 2026-03-08 | 1 bình luận | Chia sẻ qua WhatsApp
  • Dự án mã nguồn mở tái triển khai hoàn toàn mới máy chủ Ultima Online bằng .NET 10 và C#, hướng tới hiệu năng cao và vận hành ổn định dựa trên AOT (biên dịch trước)
  • kiến trúc mô-đun, xử lý vòng lặp game chính xáccông cụ packet, đồng thời hỗ trợ tương tác trong game và điều khiển AI thông qua Lua scripting
  • Cung cấp hạ tầng máy chủ hoàn chỉnh gồm hệ thống persistence dựa trên MessagePack-CSharp, mạng TCP, HTTP management endpoint, Docker và monitoring stack
  • Có thể hiện thực gameplay tùy biến thông qua các tính năng mở rộng scripting như lệnh dựa trên Lua, NPC AI, hiệu ứng hình ảnh, hệ thống UI (Gump)
  • Được phát hành dưới dạng mã nguồn mở và được đánh giá là framework máy chủ .NET hiện đại hữu ích cho phát triển máy chủ MMO hiệu năng cao và nghiên cứu phục dựng game legacy

Tổng quan dự án

  • Moongate v2 là dự án máy chủ Ultima Online hiện đại được viết bằng .NET 10, bảo đảm hiệu năng cao và khả năng bảo trì nhờ cấu trúc mô-đunAOT compilation
  • Được thiết kế với cấu trúc có tự động sinh định nghĩa packet, vòng lặp game quyết định được, và test coverage
  • Không sao chép mã từ các máy chủ hiện có như ModernUO, RunUO, ServUO mà được xây dựng mới dựa trên cảm hứng từ chúng

Mục tiêu chính

  • Xây dựng nền tảng máy chủ dễ bảo trì, tập trung vào độ chính xác và tốc độ lặp lại phát triển
  • Làm rõ ranh giới giữa networking và game loop đồng thời bảo đảm thread safety
  • Áp dụng mô hình hóa packet theo kiểu dữ liệucơ chế đăng ký bằng source generation
  • Duy trì cấu trúc thân thiện với AOT nhưng vẫn bảo đảm hiệu quả phát triển cục bộ

Trạng thái phát triển hiện tại

  • Đã hoàn thiện các chức năng cốt lõi như TCP server, phân tích packet, event bus, quản lý session, giao diện quản trị HTTP, Lua runtime
  • Bao gồm tự động sinh metadata Lua, console UI, vòng lặp game dựa trên timer, tìm đường A*, điều khiển ánh sáng và thời tiết, chức năng gửi email
  • Lưu trạng thái game bằng snapshot và file journal thông qua mô-đun persistence dựa trên MessagePack
  • Cung cấp Docker imagePrometheus/Grafana monitoring stack, giúp triển khai vào môi trường vận hành dễ dàng

Hệ thống lệnh và scripting

  • Tích hợp sẵn Lua scripting engine (dựa trên MoonSharp) để điều khiển NPC AI, hành vi item, hiệu ứng hình ảnh, UI (Gump) v.v.
  • Hỗ trợ song song hệ thống đăng ký lệnh C#đăng ký lệnh động bằng Lua
  • Ví dụ: cung cấp các lệnh GM như .teleport, .add_item_backpack, .set_world_light
  • Có thể xử lý sự kiện click dựa trên bảng Lua thông qua item ScriptId dispatch

Hiệu năng và benchmark

  • Theo kết quả đo hiệu năng bằng BenchmarkDotNet, các tác vụ chính như phân tích và tuần tự hóa packet được xử lý ở mức vài chục nano giây
  • Trong so sánh AOT vs JIT, một số tác vụ cho thấy tốc độ cải thiện tối đa 5~6 lần
  • Hiệu quả xử lý ở các đường đi cốt lõi của game như SpatialWorldServiceItemService đã được đo đạc chi tiết

Triển khai và chạy

  • Cần .NET SDK 10.0.x
  • Quy trình chạy cơ bản:
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • Có thể điều khiển các thiết lập chi tiết như cổng HTTP, game loop, email, scripting thông qua cấu hình dựa trên biến môi trường (MOONGATE_*)
  • Có cung cấp ví dụ Docker Compose, cổng mặc định là 2593 (game) và 8088 (HTTP)

Giấy phép và đóng góp

Tóm tắt đặc điểm kỹ thuật

  • Framework máy chủ MMO dựa trên C# + .NET 10 + NativeAOT
  • Hỗ trợ tích hợp Lua script, MessagePack persistence, Prometheus/Grafana monitoring
  • Bao gồm triển khai Docker và script tự động hóa
  • Cấu trúc phù hợp cho phát triển máy chủ hiện đại với thiết kế hiệu năng cao, mô-đun, lấy test làm trung tâm

1 bình luận

 
GN⁺ 2026-03-08
Ý kiến trên Hacker News
  • Trong số những game tôi từng chơi, chưa có game nào có những người chơi “thường dân” đúng nghĩa như UO (Ultima Online)
    Ngay cả những người không có được trang bị mạnh vẫn có thể chơi vui vẻ, còn các người chơi top đầu thì nổi tiếng như người nổi tiếng vậy
    Nó hoàn toàn khác với thế giới game ngày nay, nơi ai cũng trông như một siêu anh hùng

    • Quá đồng ý. UO thực sự có nền kinh tế và tầng lớp xã hội
      Dù dành vài tháng làm ngư dân hay thợ may, bạn vẫn có thể có một trải nghiệm ý nghĩa, và chiến binh hùng mạnh lẫn thương nhân bình thường đều tìm thấy niềm vui riêng trong cùng một thế giới
      MMO ngày nay giống như công viên chủ đề nơi ai cũng lên cùng một trò chơi, còn UO là một thế giới sống nơi vai trò được tạo ra từ lựa chọn của người chơi
    • Mục tiêu của tôi là trở thành một thợ rèn huyền thoại. Chế tạo chính là endgame, và mọi món trang bị lẫn đồ nội thất đều do ai đó làm ra
      Mục đích của game không phải là “đánh bại” thế giới, mà là sống trong đó
      Không có quest, không có phản diện, chỉ có cái thiện, cái ác, và mọi thứ ở giữa
      Tôi mong sẽ có một studio tái hiện lại triết lý này. Tôi nghĩ Minecraft thành công cũng vì tính sandbox như vậy
    • UO là game online hay nhất mà tôi từng trải nghiệm. Những game khác chỉ đứng trong cái bóng của nó
      Tôi cũng thích EverQuest và WoW, nhưng chúng không có được cảm giác tự do và thô ráp đến vậy
      Cá nhân tôi cũng muốn đề cử The Realm là một ứng viên MMO xuất sắc nhất
    • Thậm chí tôi còn thấy nó có cảm giác hiện đại hơn bây giờ. Có lẽ đó cũng là lý do tôi thích Stardew Valley và Animal Crossing
    • Có lẽ tôi sẽ theo đuổi mãi niềm vui thuần khiết khi chơi UO ngày ấy. Ngay bây giờ tôi cũng muốn nghỉ việc để chơi cả ngày
  • Đây thật sự là một công trình đáng kinh ngạc. Nhìn biểu đồ đóng góp tôi rất bất ngờ nếu đúng là một người làm hết
    Nó gợi cảm giác giống dự án trình giả lập server Infantry Online từ 16 năm trước
    Tôi còn tìm cả commit gốc trên SourceForge, và đó là dự án được hơn 10 lập trình viên duy trì suốt hơn 15 năm
    Tôi rất tò mò làm sao một mình có thể làm ra nhiều thứ đến vậy

    • Tôi đã lấy hạ tầng từ lần thử đầu tiên là MoongatePrima để nhanh chóng dựng nền tảng
      Phần scripting Lua tôi từng triển khai trong Lilly.Engine, còn Codex giúp tôi test và hiện thực tính năng
      Phần import dữ liệu thì tham khảo logic của ModernUO, còn item được nhập bằng script từ POL
      Chắc là vì một khi đã lao vào thì tôi có xu hướng đào sâu tới mức ám ảnh
    • Toàn bộ frontend web đều do Codex phát triển bằng React. Tôi ghét làm frontend
  • Dự án này thật sự rất tuyệt. Trước đây tôi từng bảo trì trình giả lập UO UOX3 viết bằng C++
    Tôi không trực tiếp phát triển nó mà phụ trách quản lý cộng đồng và phát hành, và từng vận hành server riêng với một người bạn Canada
    May mà Origin không gây rắc rối pháp lý

    • Hồi học cấp ba tôi chơi UO đến mức thấy mình bị nghiện nên đã bán tài khoản để dứt ra
      Tôi nhớ đã bán tài khoản đó trên eBay với vài nghìn đô và một MTG Mox Pearl
      Lúc đó tôi học C++ qua UOX và lần đầu tiên cảm nhận được sức mạnh của lập trình
      Với mod tôi tự làm, tôi có thể đặt những moongate nối với nhau vô hạn, và chính trải nghiệm đó đã dẫn tôi đến con đường lập trình
      Sau này tôi học Python và từ đó đi đến sự nghiệp hiện tại. Thật sự là một trải nghiệm thay đổi cuộc đời
      (liên kết giới thiệu của tôi)
    • Nghe vui quá! Thật ra UOX3 là một trong những nguồn cảm hứng cho Moongate
      Cấu trúc server và cách tiếp cận scripting của nó rất thú vị, và đã ảnh hưởng đến dự án hiện tại
      Những dự án như vậy chiếm một phần rất lớn trong lịch sử các trình giả lập UO
  • Đúng là gợi lại cả một trời ký ức. Ngày xưa tôi từng mua một ngôi nhà nhỏ gần Trinsic và mở tiệm bánh
    Tôi có thể thuê merchant NPC để bán đồ khi mình vắng mặt, còn bạn tôi thì trang trí một tòa tháp để ở
    WoW mất 20 năm mới đưa hệ thống nhà ở vào, nhưng nhà trong UO là một không gian sống nằm ngay trong thế giới

  • Tôi đã đọc bài phân tích kiến trúc của Moongate, và rất ấn tượng với cấu trúc triển khai DI bằng Source Generator rồi tách hành vi bằng Lua mà không cần biên dịch lại C#
    Nghe nói phần AI NPC còn thiếu, nên tôi tự hỏi liệu có thể nối một microservice dựa trên LLM vào Lua thay cho FSM truyền thống không
    Khi đó NPC có thể có hội thoại theo ngữ cảnh và ký ức, đồng thời kích hoạt các sự kiện thực sự dựa trên input của người chơi
    Vì đã có sẵn tầng packet và môi trường Lua khá tốt, nên việc tích hợp có vẻ cũng sẽ gọn gàng. Tôi muốn cùng bàn về thiết kế logic AI

    • Ý tưởng này thật sự rất thú vị. Hội thoại NPC thậm chí có thể phát triển thành một hệ thống làm thay đổi chính thế giới
      Ví dụ khi hỏi về tin đồn, chính tin đồn đó lại được sinh ra thành một sự kiện thực sự trong game
    • Tôi quan tâm đấy. Hãy liên hệ qua GitHub nhé
  • Server MMO theo thời gian rất dễ trở nên phức tạp, nên cách tiếp cận kiến trúc sạch tách network và logic game khiến tôi ấn tượng
    Tôi đặc biệt tò mò với delta sync dựa trên sector: làm sao để tránh bùng nổ packet khi đi vào khu vực đông người
    Tôi cũng muốn biết lý do dùng NativeAOT là chỉ để đơn giản hóa triển khai hay còn vì hiệu năng

    • Đó đúng là động cơ chính. Các codebase UO cũ thường đan xen network, lưu trữ và logic, nên tôi muốn thử một cách tiếp cận mới dựa trên .NET
      Khi đi vào một sector, hệ thống sẽ đồng bộ item và mobile ở các sector lân cận, nhưng loại trừ những sector đã nhìn thấy rồi
      Các item ra khỏi phạm vi nhìn sẽ bị client loại bỏ, nên cần gửi lại khi quay lại phạm vi đó
      Việc gửi packet được xử lý qua queue để game loop không bị chặn
      Sau này tôi dự định thêm truyền theo mức ưu tiên và phân tán theo tick
      NativeAOT không chỉ để đơn giản hóa triển khai, mà điểm quan trọng là hiệu năng có thể dự đoán được. Không có độ trễ do JIT, nên có thể giữ nhịp tick ổn định
    • Có vẻ việc ngăn bùng nổ packet về cơ bản vẫn dựa vào proximity loading
      Tôi cũng đang thử nghiệm spawning dựa trên frustum trong một dự án tương tự để giảm network burst, nên thấy rất thú vị
      Code khá dễ đọc nên rất đáng để tham khảo
  • Tình cờ là engine Lua MoonSharp mà Moongate dùng gần đây cũng hoạt động sôi nổi trở lại
    Sau 10 năm họ đã phát hành bản beta v3.0.0
    Tôi không phải tác giả gốc, nhưng đang tham gia với vai trò maintainer trên GitHub, và Tabletop Simulator cũng dùng engine này

  • Tôi rất muốn mở thử một server. 15 năm trước tôi từng là admin SphereServer, nhưng đã làm mất toàn bộ script và dữ liệu thế giới
    Dù vậy tôi vẫn muốn lại được thưởng thức UO cổ điển với mọi người theo cách ngày xưa

    • Không ngờ lại thấy nhắc đến SphereServer ở đây!
      Ngày xưa tôi cũng viết khá nhiều script tùy chỉnh rồi làm mất hết
      Chính SphereServer là thứ đầu tiên khiến tôi học scripting
  • Tôi rất thích logo này. Không biết có video YouTube nào cho thấy tiến độ hiện tại không

    • Cảm ơn! Logo được tạo ra khá tình cờ, nhưng tôi muốn nó mang được cảm giác Moongate của bản gốc
      Hiện chưa có video, nhưng lúc này đã chạy được đăng nhập, tạo nhân vật, di chuyển trong thế giới, scripting item bằng Lua và UI quản trị dựa trên React
      Tôi dự định sớm thêm một video demo ngắn vào README
  • Gần đây tôi rất ấn tượng sau khi xem loạt video Ultima của Majuular trên YouTube
    Nhờ vậy tôi đã mua Underworld và VII trên GOG. Có cảm giác như mình đã bỏ lỡ những kiệt tác của thập niên 90
    Anh trai tôi từng chơi UO rất nhiều, còn bạn tôi dưới cái tên SirDarkSpell là một griefer khét tiếng
    Cả hai người họ chắc sẽ rất vui nếu thấy dự án này. Cuối tuần này tôi định chìm đắm trong Stygian Abyss

    • Ultima Underworld là một game tuyệt vời