2 puan yazan GN⁺ 2026-03-08 | 1 yorum | WhatsApp'ta paylaş
  • Ultima Online sunucusunu .NET 10 ve C# ile tamamen baştan uygulayan açık kaynak proje; AOT (ön derleme) temelli olarak yüksek performans ve kararlı çalışmayı hedefliyor
  • Modüler mimari, doğru oyun döngüsü işleme ve paket araçları sunuyor; Lua betikleme ile oyun içi etkileşimleri ve yapay zeka kontrolünü destekliyor
  • MessagePack-CSharp tabanlı kalıcılık sistemi, TCP ağ iletişimi, HTTP yönetim uç noktaları, Docker ve izleme yığını dahil tam bir sunucu altyapısı sağlıyor
  • Lua tabanlı komutlar, NPC yapay zekası, görsel efektler, UI (Gump) sistemi gibi betik genişletme özellikleriyle özelleştirilebilir oynanış oluşturulabiliyor
  • Açık kaynak olarak yayımlanmış durumda ve yüksek performanslı MMO sunucu geliştirme ile eski oyunları yeniden canlandırma araştırmaları için yararlı modern bir .NET sunucu çerçevesi olarak değerlendiriliyor

Proje özeti

  • Moongate v2, .NET 10 ile yazılmış modern bir Ultima Online sunucu projesi olup modüler yapı ve AOT derleme sayesinde yüksek performans ve bakım kolaylığı sağlıyor
  • Paket tanımı otomatik üretimi, deterministik oyun döngüsü ve test kapsamı içeren bir yapı ile tasarlanmış
  • ModernUO, RunUO, ServUO gibi mevcut sunucuların kodunu kopyalamadan, onlardan ilham alarak sıfırdan inşa edilmiş

Temel hedefler

  • Doğruluk ve yineleme hızı odağında sürdürülebilir bir sunucu temeli kurmak
  • Ağ iletişimi ile oyun döngüsü sınırlarını netleştirmek ve iş parçacığı güvenliğini sağlamak
  • Tür tabanlı paket modelleme ve source generation kayıt yaklaşımı uygulamak
  • AOT dostu yapıyı korurken yerel geliştirme verimliliğini de güvence altına almak

Mevcut geliştirme durumu

  • TCP sunucusu, paket ayrıştırma, olay veri yolu, oturum yönetimi, HTTP yönetim arayüzü, Lua runtime gibi çekirdek özellikler tamamlanmış durumda
  • Lua metadata otomatik üretimi, konsol arayüzü, zamanlayıcı tabanlı oyun döngüsü, A yol bulma*, ışık ve hava durumu kontrolü, e-posta gönderme işlevi içeriyor
  • MessagePack tabanlı kalıcılık modülü ile oyun durumu snapshot ve journal dosyalarına kaydediliyor
  • Docker imajları ve Prometheus/Grafana izleme yığını sunarak üretim ortamına dağıtımı kolaylaştırıyor

Betikleme ve komut sistemi

  • Lua betik motoru (MoonSharp tabanlı) gömülü olarak geliyor; NPC yapay zekası, eşya davranışları, görsel efektler ve UI (Gump) kontrol edilebiliyor
  • C# komut kayıt sistemi ile Lua dinamik komut kaydı birlikte destekleniyor
  • Örnek: .teleport, .add_item_backpack, .set_world_light gibi GM komutları sunuluyor
  • Eşya ScriptId dispatch üzerinden Lua tablo tabanlı tıklama olayları işlenebiliyor

Performans ve benchmark

  • BenchmarkDotNet ile yapılan ölçümlerde, temel paket ayrıştırma ve serileştirme işlemleri onlarca nanosaniye düzeyinde tamamlanıyor
  • AOT ve JIT karşılaştırmasında bazı işlemler en fazla 5-6 kat hız artışı gösteriyor
  • SpatialWorldService ve ItemService gibi oyunun kritik yollarındaki işlem verimliliği ayrıntılı biçimde ölçülmüş

Dağıtım ve çalıştırma

  • .NET SDK 10.0.x gerekli
  • Temel çalıştırma adımları:
    dotnet restore
    dotnet build
    dotnet run --project src/Moongate.Server
    
  • Ortam değişkeni tabanlı yapılandırma (MOONGATE_*) ile HTTP portu, oyun döngüsü, e-posta, betikleme gibi ayrıntılar kontrol edilebiliyor
  • Docker Compose örneği sağlanıyor; varsayılan portlar 2593 (oyun) ve 8088 (HTTP)

Lisans ve katkı

Teknik özelliklerin özeti

  • C# + .NET 10 + NativeAOT tabanlı MMO sunucu çerçevesi
  • Lua betik entegrasyonu, MessagePack kalıcılığı, Prometheus/Grafana izleme desteği
  • Docker dağıtımı ve otomasyon betikleri içeriyor
  • Yüksek performanslı, modüler, test odaklı tasarım ile modern sunucu geliştirmeye uygun bir yapı

1 yorum

 
GN⁺ 2026-03-08
Hacker News yorumları
  • Oynadığım oyunlar arasında UO(Ultima Online) kadar “sıradan” oyuncunun var olabildiği başka bir oyun olmadı
    Güçlü ekipman elde edemeyenler bile keyifle oynayabiliyordu ve en üst düzey oyuncular adeta ünlü gibi tanınıyordu
    Herkesin süper kahraman gibi göründüğü bugünün oyun dünyasından tamamen farklıydı

    • Buna gerçekten katılıyorum. UO'da gerçek bir ekonomi ve toplumsal sınıf yapısı vardı
      Aylarca balıkçı ya da terzi olarak zaman geçirmek bile anlamlı bir deneyim sunuyordu; güçlü savaşçılarla sıradan tüccarlar aynı dünyada kendi eğlencelerini bulabiliyordu
      Günümüz MMO'ları herkesin aynı lunapark trenine bindiği tema parkları gibi, ama UO oyuncu seçimleriyle rollerin şekillendiği canlı bir dünyaydı
    • Hedefim efsanevi bir demirci olmaktı. Üretim başlı başına endgame'di ve tüm ekipmanlarla mobilyalar birilerinin elinden çıkıyordu
      Oyunun amacı dünyayı “yenmek” değil, onun içinde yaşamaktı
      Ne görevler vardı ne de kötü adamlar; iyilik, kötülük ve ikisinin arasındaki her şey vardı
      Umarım bir gün bu felsefeyi yeniden hayata geçiren bir stüdyo çıkar. Minecraft'ın başarısının sebebinin de bu sandbox yapısı olduğunu düşünüyorum
    • UO, deneyimlediğim en iyi online oyundu. Diğerleri onun gölgesinde kalıyor
      EverQuest ve WoW'u da seviyordum ama aynı düzeyde özgür ve ham bir his vermiyorlardı
      Kişisel olarak The Realm'i de en iyi MMO adaylarından biri sayarım
    • Hatta bana kalırsa bugünkünden daha modern bir hissiyatı vardı. Stardew Valley ve Animal Crossing'i sevmemin sebebi de benzer
    • UO oynarken hissettiğim o saf keyfin peşinden hayatım boyunca gidecekmişim gibi geliyor. Şimdi bile işi bırakıp bütün gün oynamak istiyorum
  • Gerçekten müthiş bir çalışma. Katkı grafiğine bakınca bunu gerçekten tek başına yapmış olmasına şaşırdım
    16 yıl önce başlamış Infantry Online sunucu emülatörü projesine benzer bir his veriyor
    SourceForge'daki orijinal commit'leri de buldum; o proje 10'dan fazla geliştiricinin 15 yılı aşkın süre boyunca sürdürdüğü bir çalışmaydı
    Bunu tek başına nasıl bu kadar ileri götürebildiğini merak ediyorum

    • İlk denemeler olan Moongate ve Prima'dan altyapıyı alıp tabanı hızlıca kurdum
      Lua scripting'i Lilly.Engine içinde daha önce uygulamıştım, Codex de testlerde ve özellik geliştirmede yardımcı oldu
      Veri içe aktarmada ModernUO'nun mantığını referans aldım, item'ları da POL'den script ile aldım
      Bir şeye odaklandığımda takıntı seviyesinde derine inen bir yapım olduğu için mümkün oldu
    • Web frontend'in tamamını Codex React ile geliştirdi. Ben frontend geliştirmeden hoşlanmıyorum
  • Gerçekten harika bir proje. Zamanında C++ tabanlı UO emülatörü UOX3'ün bakımını yapmıştım
    Doğrudan geliştirmemiş olsam da topluluk yönetimi ve release işlerinden sorumluydum; Kanadalı bir arkadaşımla özel bir sunucu da işletiyorduk
    Neyse ki Origin bunu hukuki bir mesele haline getirmedi

    • Lisede UO oynarken bağımlılık yaptığını fark edip hesabımı satmış ve bırakmıştım
      O hesabı eBay'de birkaç bin dolar ve bir MTG Mox Pearl karşılığında sattığımı hatırlıyorum
      O dönemde UOX sayesinde C++ öğrenirken ilk kez programlamanın gücünü hissettim
      Kendi yaptığım mod ile sonsuza kadar birbirine bağlanan moongate'ler yerleştirebiliyordum ve bu deneyim beni programlama yoluna soktu
      Sonrasında Python öğrendim ve bugünkü kariyerime kadar uzandı. Gerçekten hayatımı değiştiren bir deneyimdi
      (hakkımda sayfası)
    • Bunu duymak güzel! Aslında UOX3, Moongate'in ilham kaynaklarından biriydi
      Sunucu yapısı ve scripting yaklaşımı ilgimi çekmişti; bugünkü projeyi de etkiledi
      Bu tür projeler UO emülatör tarihinin büyük bir parçasını oluşturuyor
  • Gerçekten nostalji seli yaşattı. Eskiden Trinsic yakınlarında küçük bir ev alıp fırın işletiyordum
    Ben yokken de satış yapabilsin diye NPC tüccar tutabiliyordum, arkadaşım ise bir kuleyi dekore edip orada yaşıyordu
    WoW'un konut sistemini getirmesi 20 yıl sürdü ama UO'daki evler dünyanın içinde yaşayan mekanlardı

  • Moongate mimarisini analiz eden yazıyı okudum; DI'nin Source Generator ile uygulanması ve davranışların C# yeniden derlemesine gerek kalmadan Lua ile ayrıştırılması çok etkileyiciydi
    NPC AI'nin henüz eksik olduğu söylenmiş; geleneksel FSM yerine Lua'ya bağlı LLM tabanlı bir mikroservis nasıl olur diye düşündüm
    Bu sayede NPC'ler bağlamı olan konuşmalar ve hafıza kazanabilir, oyuncu girdisine göre gerçek event'leri tetikleyebilir
    Paket katmanı ve Lua ortamı zaten iyi kurulmuş görünüyor, bu yüzden entegrasyon da temiz olabilir. Birlikte yapay zeka mantığı tasarımı üzerinde çalışmak isterim

    • Gerçekten ilginç bir fikir. NPC konuşmaları belki de dünyanın kendisini değiştiren bir sisteme dönüşebilir
      Mesela bir söylenti sorulduğunda o söylenti gerçekten oyun içi bir olaya dönüşebilir
    • İlgimi çekti. GitHub üzerinden ulaş lütfen
  • MMO sunucularında zamanla yapı çok kolay karmaşıklaşabiliyor; ağ ile oyun mantığını ayıran clean architecture yaklaşımı etkileyici
    Özellikle sector tabanlı delta sync tarafında, kalabalık bölgelere girildiğinde paket patlamasını nasıl önlediğini merak ediyorum
    NativeAOT kullanma sebebinin sadece dağıtım kolaylığı mı yoksa performans mı olduğunu da öğrenmek isterim

    • Ana motivasyon tam olarak buydu. Eski UO kod tabanlarında ağ, depolama ve mantık birbirine dolaşmış durumda; ben de .NET tabanlı yeni bir yaklaşım denemek istedim
      Bir sector'e girildiğinde çevredeki sector'lerdeki item ve mobile'lar senkronize ediliyor ama zaten görünmekte olan sector'ler hariç tutuluyor
      Görüş alanının dışına çıkan item'ları istemci attığı için yeniden gönderilmeleri gerekiyor
      Paket gönderimi kuyruk üzerinden işlendiğinden oyun döngüsü tıkanmıyor
      İleride önceliklendirilmiş gönderim ve tick dağıtımı eklemeyi planlıyorum
      NativeAOT yalnızca dağıtımı kolaylaştırmak için değil; asıl mesele öngörülebilir performans. JIT gecikmesi olmuyor ve tutarlı tick zamanlaması korunabiliyor
    • Paket patlamasını önleme işi temelde proximity loading'e dayanıyor gibi görünüyor
      Ben de benzer bir projede ağ patlamalarını azaltmak için frustum tabanlı spawning denemeleri yapıyorum, o yüzden ilgimi çekti
      Kodun okunması kolay, bu açıdan çok faydalı bir referans oluyor
  • Tesadüf bu ya, Moongate'in kullandığı Lua motoru MoonSharp yakın zamanda yeniden aktif hale geldi
    10 yıl aradan sonra v3.0.0 beta sürümünü yayımladılar
    Ben orijinal geliştirici değilim ama GitHub bakımcıları arasında yer alıyorum; Tabletop Simulator da bu motoru kullanıyor

  • Kesinlikle bir sunucu açmayı denemek istiyorum. 15 yıl önce bir SphereServer yöneticisiydim ama tüm script'leri ve dünya verilerini kaybettim
    Yine de insanlarla eski usul klasik UO keyfini yeniden yaşamak istiyorum

    • SphereServer'dan burada bahsedildiğini göreceğim aklıma gelmezdi!
      Ben de zamanında bir sürü özel script yazmıştım ama hepsi kayboldu
      SphereServer, scripting öğrenmeye başlamamın vesilesi olmuştu
  • Logoyu gerçekten çok beğendim. Acaba ilerlemeyi gösteren bir YouTube videosu var mı diye merak ediyorum

    • Teşekkürler! Logo biraz tesadüfen ortaya çıktı ama orijinal oyundaki Moongate hissini taşımak istedim
      Henüz video yok ama şu anda login, karakter oluşturma, dünya içinde hareket, Lua item scripting'i ve React tabanlı yönetim arayüzü çalışıyor
      Yakında README'ye kısa bir demo videosu eklemeyi planlıyorum
  • Yakın zamanda YouTube'da Majuular'ın Ultima serisi videolarını izleyip çok etkilendim
    Onların etkisiyle GOG'dan Underworld ve VII'yi satın aldım. 90'ların bu başyapıtlarını kaçırmışım gibi hissediyorum
    Ağabeyim UO'yu çok oynardı, bir arkadaşım da SirDarkSpell adıyla ünlü bir grief oyuncusuydu
    İkisi de bu projeyi görünce çok sevinecektir diye düşünüyorum. Bu hafta sonu Stygian Abyss'e dalmayı planlıyorum

    • Ultima Underworld harika bir oyun