- 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)
- Có kiến trúc mô-đun, xử lý vòng lặp game chính xác và cô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ô-đun và AOT 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ệu và cơ 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 image và Prometheus/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# và đă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ư SpatialWorldService và ItemService đã được đo đạc chi tiết
Triển khai và chạy
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
Ý 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
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 đí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
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
Đâ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
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
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ý
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)
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
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
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
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
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
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
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