2 คะแนน โดย GN⁺ 2026-03-08 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • โครงการโอเพนซอร์สที่เขียนเซิร์ฟเวอร์ Ultima Online ขึ้นใหม่ทั้งหมดด้วย .NET 10 และ C# โดยมุ่งเป้าไปที่ประสิทธิภาพสูงและการทำงานที่เสถียรบนพื้นฐานของ AOT (การคอมไพล์ล่วงหน้า)
  • มาพร้อม สถาปัตยกรรมแบบโมดูลาร์, การจัดการเกมลูปอย่างแม่นยำ และ เครื่องมือด้านแพ็กเก็ต พร้อมรองรับการโต้ตอบในเกมและการควบคุม AI ผ่านการสคริปต์ด้วย Lua
  • มีโครงสร้างพื้นฐานเซิร์ฟเวอร์แบบครบถ้วน รวมถึง ระบบเพอร์ซิสเทนซ์บน MessagePack-CSharp, เครือข่าย TCP, HTTP management endpoint และ Docker กับ monitoring stack
  • สามารถสร้างรูปแบบการเล่นที่ปรับแต่งได้ผ่านความสามารถในการขยายด้วยสคริปต์ เช่น คำสั่งบน Lua, NPC AI, เอฟเฟกต์ภาพ, ระบบ UI (Gump)
  • เปิดเผยเป็นโอเพนซอร์ส และถูกมองว่าเป็น เฟรมเวิร์กเซิร์ฟเวอร์ .NET สมัยใหม่ที่มีประโยชน์ต่อการพัฒนาเซิร์ฟเวอร์ MMO ประสิทธิภาพสูงและการศึกษาการฟื้นฟูเกมเลกาซี

ภาพรวมโครงการ

  • Moongate v2 คือ โครงการเซิร์ฟเวอร์ Ultima Online สมัยใหม่ ที่เขียนด้วย .NET 10 โดยใช้ โครงสร้างแบบโมดูลาร์ และ AOT compilation เพื่อให้ได้ทั้งประสิทธิภาพสูงและการบำรุงรักษาที่ดี
  • ออกแบบด้วยโครงสร้างที่มี การสร้างนิยามแพ็กเก็ตอัตโนมัติ, เกมลูปแบบกำหนดแน่นอน และ test coverage
  • สร้างขึ้นใหม่โดยได้รับแรงบันดาลใจจากเซิร์ฟเวอร์เดิมอย่าง ModernUO, RunUO และ ServUO โดยไม่คัดลอกโค้ดของโครงการเหล่านั้น

เป้าหมายหลัก

  • สร้างฐานเซิร์ฟเวอร์ที่ดูแลรักษาได้ โดยเน้น ความถูกต้องและความเร็วในการทำซ้ำพัฒนา
  • ทำให้ ขอบเขตระหว่าง networking กับ game loop ชัดเจน และรับประกันความปลอดภัยของเธรด
  • ใช้ การทำโมเดลแพ็กเก็ตแบบอิงชนิดข้อมูล และ แนวทางการลงทะเบียนด้วย source generation
  • คงไว้ซึ่ง โครงสร้างที่เป็นมิตรกับ AOT พร้อมรับประกันประสิทธิภาพของการพัฒนาในเครื่องท้องถิ่น

สถานะการพัฒนาปัจจุบัน

  • ฟีเจอร์หลักอย่าง TCP server, packet parsing, event bus, session management, HTTP management interface และ Lua runtime พัฒนาเสร็จแล้ว
  • มี การสร้าง Lua metadata อัตโนมัติ, console UI, เกมลูปแบบ timer-based, A pathfinding*, การควบคุมแสงและสภาพอากาศ และ ความสามารถในการส่งอีเมล
  • ใช้ โมดูลเพอร์ซิสเทนซ์บน MessagePack เพื่อบันทึกสถานะเกมเป็นไฟล์ snapshot และ journal
  • มี Docker image และ Prometheus/Grafana monitoring stack เพื่อให้นำไปดีพลอยในสภาพแวดล้อมใช้งานจริงได้ง่าย

ระบบสคริปต์และคำสั่ง

  • มี เอนจินสคริปต์ Lua (อิง MoonSharp) ในตัว ทำให้ควบคุม NPC AI, พฤติกรรมไอเท็ม, เอฟเฟกต์ภาพ และ UI (Gump) ได้
  • รองรับทั้ง ระบบลงทะเบียนคำสั่งด้วย C# และ การลงทะเบียนคำสั่งแบบไดนามิกด้วย Lua
  • ตัวอย่าง: .teleport, .add_item_backpack, .set_world_light เป็นต้น ซึ่งเป็นคำสั่ง GM ที่มีให้ใช้งาน
  • สามารถจัดการเหตุการณ์คลิกผ่านตาราง Lua ได้ด้วย การกระจาย ScriptId ของไอเท็ม

ประสิทธิภาพและเบนช์มาร์ก

  • ผลการวัดด้วย BenchmarkDotNet แสดงให้เห็นว่างานสำคัญอย่างการแยกวิเคราะห์แพ็กเก็ตและการซีเรียลไลซ์ ทำงานได้ในระดับ หลายสิบ นาโนวินาที
  • ในการเปรียบเทียบ AOT vs JIT งานบางประเภททำได้เร็วขึ้นสูงสุด 5~6 เท่า
  • มีการวัดประสิทธิภาพอย่างละเอียดของเส้นทางหลักในเกม เช่น SpatialWorldService และ ItemService

การดีพลอยและการรัน

  • ต้องใช้ .NET SDK 10.0.x
  • ขั้นตอนการรันพื้นฐาน:
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • สามารถควบคุมการตั้งค่ารายละเอียด เช่น HTTP port, game loop, อีเมล และสคริปต์ ได้ผ่าน การตั้งค่าด้วย environment variable (MOONGATE_*)
  • มีตัวอย่าง Docker Compose ให้ โดยพอร์ตเริ่มต้นคือ 2593 (เกม) และ 8088 (HTTP)

ไลเซนส์และการมีส่วนร่วม

  • เผยแพร่ภายใต้ ไลเซนส์ GPL-3.0
  • ยินดีรับ Pull Request ที่มีทั้ง code convention และการทดสอบ
  • เอกสารทางการ: https://moongate-community.github.io/moongatev2/

สรุปจุดเด่นทางเทคนิค

  • เฟรมเวิร์กเซิร์ฟเวอร์ MMO บน C# + .NET 10 + NativeAOT
  • รองรับ การรวม Lua script, MessagePack persistence และ Prometheus/Grafana monitoring
  • มี การดีพลอยด้วย Docker และสคริปต์อัตโนมัติ
  • โครงสร้าง ประสิทธิภาพสูง, แบบโมดูลาร์, เน้นการทดสอบ เหมาะกับการพัฒนาเซิร์ฟเวอร์สมัยใหม่

1 ความคิดเห็น

 
GN⁺ 2026-03-08
ความคิดเห็นจาก Hacker News
  • ในบรรดาเกมที่ฉันเคยเล่น ไม่มีเกมไหนที่มีผู้เล่นสาย “คนธรรมดา” มากเท่า UO(Ultima Online)
    ต่อให้ไม่ได้ของสวมใส่สุดแกร่งก็ยังเล่นสนุกได้ และผู้เล่นระดับท็อปก็เป็นที่รู้จักกันเหมือน คนดัง
    มันต่างจากโลกของเกมสมัยนี้โดยสิ้นเชิง ที่ทุกคนดูเหมือนซูเปอร์ฮีโร่กันหมด

    • เห็นด้วยมาก ใน UO มี เศรษฐกิจและชนชั้นทางสังคม จริงๆ
      ใช้เวลาเป็นเดือนๆ ไปกับการเป็นชาวประมงหรือช่างตัดเย็บก็ยังเป็นประสบการณ์ที่มีความหมายได้ และนักรบสุดแกร่งกับพ่อค้าธรรมดาก็สนุกกับเกมในโลกเดียวกันได้ในแบบของตัวเอง
      MMO ยุคนี้เหมือนสวนสนุกที่ทุกคนขึ้นเครื่องเล่นเดียวกันหมด แต่ UO เป็น โลกที่มีชีวิต ที่บทบาทถูกสร้างขึ้นจากการเลือกของผู้เล่น
    • เป้าหมายของฉันคือการเป็นช่างตีเหล็กในตำนาน การคราฟต์คือ endgame และอุปกรณ์กับเฟอร์นิเจอร์ทุกชิ้นก็มาจากฝีมือของใครสักคน
      เป้าหมายของเกมไม่ใช่การ “เอาชนะ” โลก แต่คือการ ใช้ชีวิตอยู่ในนั้น
      ไม่มีเควสต์ ไม่มีตัวร้าย มีทั้งความดี ความชั่ว และทุกสิ่งที่อยู่ระหว่างนั้น
      อยากให้มีสตูดิโอที่กลับมาสร้างตามปรัชญาแบบนี้อีกครั้ง คิดว่าเหตุผลที่ Minecraft ประสบความสำเร็จก็เพราะความเป็น sandbox แบบนี้
    • UO คือเกมออนไลน์ที่ดีที่สุดที่ฉันเคยสัมผัส เกมอื่นๆ ล้วนยืนอยู่ใต้เงาของมัน
      ฉันก็ชอบ EverQuest กับ WoW แต่ไม่มีเกมไหนให้ความรู้สึก อิสระและดิบสด ได้เท่านี้
      สำหรับฉัน The Realm ก็สมควรถูกนับเป็นหนึ่งใน MMO ที่ดีที่สุดเหมือนกัน
    • กลับรู้สึกว่ามันมี ความร่วมสมัย มากกว่าตอนนี้เสียอีก เหตุผลที่ฉันชอบ Stardew Valley กับ Animal Crossing ก็คงคล้ายๆ กัน
    • คงจะไล่ตาม ความสนุกอันบริสุทธิ์ ตอนที่เล่น UO ไปตลอดชีวิต ตอนนี้ยังอยากลาออกจากงานแล้วเล่นทั้งวันเลย
  • งานนี้น่าทึ่งจริงๆ พอเห็น กราฟผู้ร่วมพัฒนา แล้วก็ตกใจว่าทำคนเดียวจริงหรือ
    มันให้ความรู้สึกคล้ายโปรเจกต์ Infantry Online server emulator ที่เริ่มเมื่อ 16 ปีก่อน
    ฉันยังไปหา คอมมิตต้นฉบับบน SourceForge เจอด้วย ซึ่งโปรเจกต์นั้นมีนักพัฒนามากกว่า 10 คนช่วยกันดูแลมานานกว่า 15 ปี
    เลยสงสัยว่าคนคนเดียวทำทั้งหมดนี้ได้อย่างไร

    • ตอนเริ่มต้น ผมดึงโครงสร้างพื้นฐานมาจาก Moongate ตัวแรกและ Prima เพื่อขึ้นรากฐานให้เร็ว
      ระบบสคริปต์ Lua ผมเคยทำไว้แล้วใน Lilly.Engine และ Codex ก็ช่วยเรื่องการทดสอบกับการพัฒนาฟีเจอร์
      การ import ข้อมูลอ้างอิงตรรกะจาก ModernUO และไอเท็มก็ดึงมาจาก POL ผ่านสคริปต์
      พออินกับอะไรแล้ว ผมเป็นคนที่ ลงลึกแบบหมกมุ่น เลยทำได้
    • เว็บฟรอนต์เอนด์ทั้งหมด Codex เป็นคนทำด้วย React ผม เกลียดการพัฒนาฟรอนต์เอนด์
  • เป็นโปรเจกต์ที่เจ๋งมาก สมัยก่อนฉันเคยดูแล UOX3 ซึ่งเป็น UO emulator ที่เขียนด้วย C++
    ไม่ได้เป็นคนพัฒนาเอง แต่ดูแลชุมชนและรับผิดชอบการออกรีลีส อีกทั้งยังเคยเปิดเซิร์ฟเวอร์ส่วนตัวกับเพื่อนชาวแคนาดาด้วย
    โชคดีที่ Origin ไม่เอาเรื่องทางกฎหมาย

    • ตอนเรียนมัธยมฉันติด UO มากจนรู้สึกว่าต้องเลิก เลยขายแอคเคานต์แล้วหยุดเล่น
      จำได้ว่าเอาแอคเคานต์นั้นไปขายบน eBay ได้หลายพันดอลลาร์กับ MTG Mox Pearl
      ตอนนั้นฉันได้เรียน C++ ผ่าน UOX และเป็นครั้งแรกที่รู้สึกถึง พลังของการเขียนโปรแกรม
      ฉันทำม็อดที่สามารถวาง moongate เชื่อมต่อกันได้ไม่สิ้นสุด และประสบการณ์นั้นก็พาฉันเข้าสู่เส้นทางโปรแกรมเมอร์
      หลังจากนั้นก็เรียน Python ต่อจนกลายมาเป็นอาชีพทุกวันนี้ เป็นประสบการณ์ที่เปลี่ยนชีวิตจริงๆ
      (ลิงก์แนะนำตัวของฉัน)
    • ดีจังที่ได้ยินแบบนั้น! จริงๆ แล้ว UOX3 ก็เป็นหนึ่งในแรงบันดาลใจของ Moongate
      โครงสร้างเซิร์ฟเวอร์และแนวทางด้านสคริปต์ของมันน่าสนใจมาก จนมีอิทธิพลต่อโปรเจกต์นี้ด้วย
      โปรเจกต์แบบนี้เป็นส่วนสำคัญของประวัติศาสตร์ UO emulator
  • ทำให้ ความทรงจำย้อนกลับมา จริงๆ สมัยก่อนฉันเคยซื้อบ้านหลังเล็กใกล้ Trinsic แล้วเปิดร้านเบเกอรี
    สามารถจ้างพ่อค้า NPC ให้ขายของตอนที่ฉันไม่อยู่ได้ ส่วนเพื่อนก็อาศัยอยู่ในหอคอยที่ตกแต่งเอง
    WoW ใช้เวลาถึง 20 ปีกว่าจะมีระบบที่อยู่อาศัย แต่บ้านใน UO เป็น พื้นที่ที่มีชีวิตอยู่ในโลก จริงๆ

  • ฉันอ่านบทวิเคราะห์สถาปัตยกรรมของ Moongate มาแล้ว โครงสร้างที่ ทำ DI ด้วย Source Generator และแยกพฤติกรรมด้วย Lua โดยไม่ต้องคอมไพล์ C# ใหม่ น่าประทับใจมาก
    เห็นว่าระบบ AI ของ NPC ยังไม่มี เลยสงสัยว่าถ้าแทนที่จะใช้ FSM แบบดั้งเดิม จะลองเชื่อม ไมโครเซอร์วิสที่ขับเคลื่อนด้วย LLM เข้ากับ Lua ดูไหม
    มันจะทำให้ NPC มีบทสนทนาและความทรงจำที่สอดคล้องกับบริบท และสามารถทริกเกอร์เหตุการณ์จริงตามอินพุตของผู้เล่นได้
    ตอนนี้เลเยอร์แพ็กเก็ตกับสภาพแวดล้อม Lua ก็ดูพร้อมอยู่แล้ว การรวมเข้าด้วยกันก็น่าจะสะอาดดี อยากลองช่วย ออกแบบตรรกะ AI ร่วมกัน

    • เป็นไอเดียที่น่าสนใจมาก มันอาจพัฒนาไปเป็น ระบบที่บทสนทนากับ NPC เปลี่ยนแปลงโลกเองได้
      เช่น ถ้าถามเรื่องข่าวลือ ข่าวลือนั้นอาจถูกทำให้กลายเป็นเหตุการณ์จริงในเกม
    • สนใจครับ ทักมาทาง GitHub ได้เลย
  • เซิร์ฟเวอร์ MMO มักมีโครงสร้างซับซ้อนขึ้นเรื่อยๆ ตามเวลา แต่วิธีแบบ clean architecture ที่แยกเครือข่ายออกจาก game logic นั้นน่าประทับใจ
    โดยเฉพาะ sector-based delta sync ฉันสงสัยว่าตอนเข้าเขตที่คนหนาแน่น จะป้องกันแพ็กเก็ตถล่มได้อย่างไร
    แล้วการใช้ NativeAOT นี่เพราะเรื่องการ deploy อย่างเดียว หรือเพราะประสิทธิภาพด้วย

    • นั่นคือแรงจูงใจหลักเลย โค้ดเบส UO เก่าๆ มักเอาเครือข่าย การจัดเก็บ และตรรกะมาพันกัน เลยอยากลอง แนวทางใหม่บน .NET
      ตอนเข้า sector ระบบจะซิงก์ไอเท็มและ mobile จาก sector รอบข้าง แต่จะข้าม sector ที่มองเห็นอยู่แล้ว
      ไอเท็มที่ออกนอกระยะการมองเห็น ไคลเอนต์จะทิ้งไปเอง จึงจำเป็นต้องส่งใหม่เมื่อกลับเข้ามา
      การส่งแพ็กเก็ตถูกจัดการผ่านคิว ทำให้ game loop ไม่ถูกบล็อก
      ต่อไปมีแผนจะเพิ่ม การส่งตามลำดับความสำคัญและการกระจาย tick
      ส่วน NativeAOT ไม่ได้มีแค่เรื่อง deploy ง่ายขึ้น แต่แกนหลักคือ ประสิทธิภาพที่คาดการณ์ได้ ไม่มีความหน่วงจาก JIT และช่วยรักษาจังหวะ tick ให้สม่ำเสมอ
    • ดูเหมือนว่าการป้องกันแพ็กเก็ตถล่มโดยพื้นฐานจะพึ่งพา proximity loading
      ฉันเองก็เคยทดลองใช้ การ spawn แบบอิง frustum เพื่อลด network burst ในโปรเจกต์คล้ายๆ กัน เลยรู้สึกว่าน่าสนใจมาก
      โค้ดอ่านง่ายมาก จึงอ้างอิงได้เยอะเลย
  • บังเอิญว่า Lua engine ที่ Moongate ใช้อย่าง MoonSharp ช่วงนี้กลับมาคึกคักอีกครั้ง
    หลังจากผ่านไป 10 ปี ก็เพิ่งออก v3.0.0 เบตารีลีส
    ฉันไม่ใช่ผู้สร้างดั้งเดิม แต่มีส่วนร่วมในฐานะผู้ดูแล GitHub และ Tabletop Simulator ก็ใช้เอนจินนี้ด้วย

  • อยากลองเปิดเซิร์ฟเวอร์เองสักเครื่องจริงๆ เมื่อ 15 ปีก่อนฉันเคยเป็น ผู้ดูแล SphereServer แต่ทำสคริปต์กับข้อมูลโลกหายหมดแล้ว
    ถึงอย่างนั้นก็ยังอยากกลับไป สนุกกับ UO แบบคลาสสิก กับผู้คนอีกครั้ง

    • ไม่คิดเลยว่าจะได้เห็นคนพูดถึง SphereServer ที่นี่!
      ฉันเองก็เคยทำสคริปต์คัสตอมไว้เยอะมาก แต่ก็หายหมดเหมือนกัน
      SphereServer เป็นจุดเริ่มต้นที่ทำให้ฉันได้ เรียนรู้การเขียนสคริปต์ เป็นครั้งแรก
  • ฉันชอบโลโก้นี้มาก อยากรู้ว่ามี วิดีโอ YouTube ที่แสดงความคืบหน้าของโปรเจกต์ไหม

    • ขอบคุณมาก! โลโก้นี้เกิดขึ้นแบบบังเอิญ แต่ผมอยากให้มันมีกลิ่นอายของ Moongate ต้นฉบับ
      ตอนนี้ยังไม่มีวิดีโอ แต่ระบบล็อกอิน การสร้างตัวละคร การย้ายในโลก สคริปต์ไอเท็มด้วย Lua และ UI แอดมินที่ทำด้วย React ใช้งานได้แล้ว
      เร็วๆ นี้จะเพิ่ม วิดีโอเดโม สั้นๆ ลงใน README
  • ช่วงนี้ฉันเพิ่งดู วิดีโอซีรีส์ Ultima ของ Majuular บน YouTube แล้วประทับใจมาก
    เพราะอย่างนั้นเลยไปซื้อ Underworld กับ VII บน GOG รู้สึกเหมือนพลาดเกมระดับตำนานของยุค 90 ไป
    พี่ชายฉันเล่น UO หนักมาก และเพื่อนคนหนึ่งใช้ชื่อ SirDarkSpell เป็น griefer ชื่อกระฉ่อน
    ทั้งคู่คงดีใจมากถ้าได้เห็นโปรเจกต์นี้ สุดสัปดาห์นี้ฉันว่าจะจมอยู่กับ Stygian Abyss

    • Ultima Underworld เป็นเกมที่ยอดเยี่ยมมาก