Vesperis2 (N2Play Altyapısı) - Geliştirme Günlüğü

  • Konuyu açan Konuyu açan Sys
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 24
  • Gösterim Gösterim 816

Sys

MT Üye
MT Üye
Mesaj
248
Çözümler
4
Beğeni
388
Puan
784
Ticaret Puanı
0
Projeye 5 Ağustos 2026 saat 23.30 sularında başladım. Amacım, N2Play altyapısını modern Windows ortamında sorunsuz çalışabilir hâle getirmek ve temiz bir altyapı oluşturmaktı.

Geliştirme sürecinde öne çıkan ilk deneyimlerim

1. Derleme Ortamı ve Bağımlılıklar (VS2022 & CMake 4.4)

Projeyi Visual Studio 2022 x64 ve CMake 4.4 mimarisine uyarladım. Maalesef birçok hata aldım. :D Çok yordu.
DirectX 9 ve Hunter paket yöneticisi bağımlılıklarını güncelledim.
En çok zorlayan kısım, Hunter ve Boost derleme süreçleri oldu. Sadece Boost kütüphanesini sorunsuz derletebilmek için 2-3 saat uğraştım.
Aslında doğrudan vcpkg geçişi yapabilirdim ancak birçok SDK güncellendiği için koda çok fazla müdahale etmem gerekecekti. Süreci uzatmamak adına şimdilik Hunter ile devam ettim.

2. Kaynak Kod ve Veritabanı Düzeltmeleri

Hunter ve kütüphane derlemeleri bittikten sonra C++ kaynak kodlarına (src) geçtim.
MariaDB 12.3 tarafındaki SSL/TLS bağlantı uyumsuzluğunu AsyncSQL.cpp içerisinde çözerek veritabanı bağlantılarını stabil hâle getirdim.
Veritabanındaki eski oyuncuların verilerini temizleyip temiz bir tablo yapısı oluşturdum.

3. Otomasyon

Süreci ve günlük kullanımı kolaylaştırmak adına kur.bat, baslat.bat, durdur.bat, temizle.bat ve tek tıkla veritabanı kuran veritabani_kur.bat ve benzeri dosyaları hazırladım.
İstemci paketlerini (root, locale, ui, property, zone vb.) kapatıp oyuna sorunsuz giriş sağladım. (Zemin sorunu ve UTF-8 olayları biraz yıprattı, artık rahatım. :D)

Şu an projenin hem Debug hem de Release sürümleri 0 hata ile derleniyor ve oyuna sorunsuz girilebiliyor. İlerleyen süreçte tüm bağımlılıkları tek tek inceleyip yükselterek kademeli şekilde vcpkg sistemine geçmeyi planlıyorum. Çok fazla anlatıp kimseyi sıkmak istemiyorum. Bu aşamaya gelene kadar birçok düzenleme yaptım ama değdi.

Bir tane de görsel Bırakayım


86_163411.webp
 
hiç utanmadan şu filesin dandik guilisini mi kurdun? insanda biraz utanma olur furkanım :D
 
hiç utanmadan şu filesin dandik guilisini mi kurdun? insanda biraz utanma olur furkanım :D
Kanka dün biraz amelelikten kurtulayım diye senin konuya yazmıştım sonra baktım çok gereksiz düzenleme var dayanamadım geçtim komple N2Play'e :D Bu sefer de 3-4 kat daha fazla amelelik yaptım bittim Hasan'ım bittim şimdi sıra daha büyük kafa yedirecek düzenlemelerde :alsaa:
 
Kanka dün biraz amelelikten kurtulayım diye senin konuya yazmıştım sonra baktım çok gereksiz düzenleme var dayanamadım geçtim komple N2Play'e :D Bu sefer de 3-4 kat daha fazla amelelik yaptım bittim Hasan'ım bittim şimdi sıra daha büyük kafa yedirecek düzenlemelerde :alsaa:
hakediyosun kardeşim valla hakediyosun :D
 
Minik güncelleme geldi :ebebe:

İçerik:
Genişlet Daralt Kopyala
Boost::Asio Bağımlılığı Kaldırıldı Tüm sunucu bileşenleri (Game, DB, Auth, Master) ve istemci (Client) kod tabanı boost::asio kütüphanesinden arındırılarak modern, hafif Standalone Asio mimarisine taşındı.
vcpkg Altyapısına Geçiş: Hunter ve yerel bağımlılıklardan kurtulmak amacıyla buildtool/vcpkg.json manifest yapısı kuruldu, ilk adım olarak Asio paketi vcpkg üzerinden projeye bağlandı.
Modern C++ Standartları: Eski io_service yapıları C++17/20 standartlarına uygun io_context yapısına çekildi, zamanlayıcılar ve tampon yönetimi güncellendi.
Sunucu ve istemci hedeflerinin tamamı sıfır hatayla derlendi. Canlı oyun giriş ve bağlantı testlerinde hiçbir kopma veya çökme yaşanmadan tam kararlılık sağlandı.

Spring Camera Smoothing eklendi bir kaç kişide görmüştüm mantığını sevdim bende bir şeyler ekleyim bari deyip aç kapat olarak ekledim tüm dillere uyarladım :D




1786033709804.webp


1786033741414.webp
 
Başarılar hocam çok güzelmiş etc de baya güzel. Sprimg camera smoothing bir yerde paylaşıldı mı ya da bir filesın içinde var mı
 
Başarılar hocam çok güzelmiş etc de baya güzel. Sprimg camera smoothing bir yerde paylaşıldı mı ya da bir filesın içinde var mı
Teşekkürler sağ olun kamera muhabbetini paylaşanı görmedim kendim yazdım ana fonksiyon burası marty tabanlı test filesinde böyle kullanıyorum kendi dosyalarınza göre düzenlersiniz

Kod:
Genişlet Daralt Kopyala
#ifdef ENABLE_CAMERA_SPRING_SMOOTHING
        if (CPythonSystem::Instance().IsCameraSpring())
        {
            static Vector3 s_v3SmoothCenter = m_v3CenterPosition;
            static Vector3 s_v3Velocity = Vector3(0.0f, 0.0f, 0.0f);
            static bool    s_bFirstFrame = true;

            float fElapsedTime = DX::StepTimer::Instance().GetElapsedSeconds();
            if (fElapsedTime > 0.1f) fElapsedTime = 0.1f; // Cap delta time spike

            if (s_bFirstFrame)
            {
                s_v3SmoothCenter = m_v3CenterPosition;
                s_v3Velocity = Vector3(0.0f, 0.0f, 0.0f);
                s_bFirstFrame = false;
            }
            else
            {
                float fDx = m_v3CenterPosition.x - s_v3SmoothCenter.x;
                float fDy = m_v3CenterPosition.y - s_v3SmoothCenter.y;
                float fDz = m_v3CenterPosition.z - s_v3SmoothCenter.z;
                float fDistSq = fDx * fDx + fDy * fDy + fDz * fDz;

                if (fDistSq > 2250000.0f)
                {
                    s_v3SmoothCenter = m_v3CenterPosition;
                    s_v3Velocity = Vector3(0.0f, 0.0f, 0.0f);
                }
                else
                {
                    constexpr float fStiffnessXY = 28.0f; // Horizontal spring stiffness
                    constexpr float fStiffnessZ  = 48.0f; // Vertical spring stiffness (sharper for stairs)
                    constexpr float fDampingXY   = 0.85f; // Horizontal damping friction
                    constexpr float fDampingZ    = 0.88f; // Vertical damping friction

                    s_v3Velocity.x += fDx * fStiffnessXY * fElapsedTime;
                    s_v3Velocity.y += fDy * fStiffnessXY * fElapsedTime;
                    s_v3Velocity.z += fDz * fStiffnessZ  * fElapsedTime;

                    float fDampFactorXY = expf(-fDampingXY * 12.0f * fElapsedTime);
                    float fDampFactorZ  = expf(-fDampingZ  * 12.0f * fElapsedTime);
                    s_v3Velocity.x *= fDampFactorXY;
                    s_v3Velocity.y *= fDampFactorXY;
                    s_v3Velocity.z *= fDampFactorZ;

                    s_v3SmoothCenter.x += s_v3Velocity.x * fElapsedTime;
                    s_v3SmoothCenter.y += s_v3Velocity.y * fElapsedTime;
                    s_v3SmoothCenter.z += s_v3Velocity.z * fElapsedTime;
                }
            }

            m_pyGraphic.SetPositionCamera(
                s_v3SmoothCenter.x,
                s_v3SmoothCenter.y,
                s_v3SmoothCenter.z + pMainCamera->GetTargetHeight(),
                fDistance, fPitch, fRotation);
        }
        else
        {
            m_pyGraphic.SetPositionCamera(m_v3CenterPosition.x, m_v3CenterPosition.y, m_v3CenterPosition.z + pMainCamera->GetTargetHeight(), fDistance, fPitch, fRotation);
        }
#else
        m_pyGraphic.SetPositionCamera(m_v3CenterPosition.x, m_v3CenterPosition.y, m_v3CenterPosition.z + pMainCamera->GetTargetHeight(), fDistance, fPitch, fRotation);
#endif
 
Bir kaç ufak güncelleme yaptım (Şüpheli)

Oyun içi web tarayıcısı artık aktif

Commit:
Genişlet Daralt Kopyala
[*]CEF ve ilgili kütüphaneler projeden tamamen silindi
[*]Chromium Embedded Framework (CEF) yerine native WebView2 entegre edildi
[*]CWebView sınıfı için OnShow ve OnHide hookları eklendi pencere görünürlüğü (IsRendering) ile senkronize çalışacak şekilde düzeltildi ve dangling UI bug çözüldü
[*]WebManager içerisine IsValidView katmanı eklenerek olası dangling pointer kaynaklı crashlerin önüne geçildi
[*].gitignore dosyasından CEF dışlamaları silindi ve WebView2 önbellek klasörü ile logları eklendi

Hunter ile olan bağım artık tamamen koptu ekstra olarak cmakeleri de düzenledim :D her derlemede PC ağlamıyor :D build 10-15dk sürmüyor..

Uzunca bir süre kütüphaneleri güncellemekle meşgul oldum 2-3 yıllık bir dosya olduğu için aşırı derecede uyuz olduğum kısımlar vardı bir çok düzenleme ve hata düzeltmesi yaptım

CMake tarafında ve SDKların güncel sürümleriyle beraber gelen düzenlemeler oldu spdlog fmt vs diye uzayıp gidiyor

Perşembeden bugüne 70 tane commit olmuş

# Cython sisemini de yeniledim :D aç kapat çalışıyor aslan parçası..

Ekran görüntüsü 2026-08-09 180106.webp



1786287839863.webp
 
Son düzenleme:
Mini güncelleme :confused:

Fikir konusunda tekrar tıkanmaya başlamamla beraber dx11 dosyalarda ne var ne yok diye gezerken bunu dızlamak geldi aklıma :D


Render limiti:
Genişlet Daralt Kopyala
- PythonCharacterManager içindeki mesafe culling (frustum) hesaplaması kamera merceğinden (GetEye()) kamera hedefine (GetTarget()) kaydırıldı. Böylece kamerayı döndürdüğümüzde oluşan pırpır etme ve kaybolma sorunu çözüldü.

- Sadece Render değil, render edilmeyen objelerin Deform() (İskelet/Animasyon) hesaplamaları da durdurularak işlemci (FPS) optimizasyonu sağlandı (__CanRender kontrolü).

- ClientConfig'e ve Python (uiOptionWindow) arayüzüne karakter render limiti opsiyonu eklendi. Oyuncular Oyun Seçenekleri penceresinden bunu kapatıp açabilecek.

- Tüm diller (TR, EN, DE, HU, IT, PL, PT, RO) için UI çevirileri eklendi.




1786310826800.webp


Bir kaç şey daha ekledim kasmalar biraz daha azaldı :D mob çekmede 2k mob koşunca ağlıyordu client video çekmeye üşendim resim bırakayım

Ekran görüntüsü 2026-08-10 013017.webp
 
Son düzenleme:
Minik güncelleme geldi :ebebe:

İçerik:
Genişlet Daralt Kopyala
Boost::Asio Bağımlılığı Kaldırıldı Tüm sunucu bileşenleri (Game, DB, Auth, Master) ve istemci (Client) kod tabanı boost::asio kütüphanesinden arındırılarak modern, hafif Standalone Asio mimarisine taşındı.
vcpkg Altyapısına Geçiş: Hunter ve yerel bağımlılıklardan kurtulmak amacıyla buildtool/vcpkg.json manifest yapısı kuruldu, ilk adım olarak Asio paketi vcpkg üzerinden projeye bağlandı.
Modern C++ Standartları: Eski io_service yapıları C++17/20 standartlarına uygun io_context yapısına çekildi, zamanlayıcılar ve tampon yönetimi güncellendi.
Sunucu ve istemci hedeflerinin tamamı sıfır hatayla derlendi. Canlı oyun giriş ve bağlantı testlerinde hiçbir kopma veya çökme yaşanmadan tam kararlılık sağlandı.

Spring Camera Smoothing eklendi bir kaç kişide görmüştüm mantığını sevdim bende bir şeyler ekleyim bari deyip aç kapat olarak ekledim tüm dillere uyarladım :D





Buna fena ayar oluyorum sebebini bilmiyorum ama oynanışa çok kötü etkisi varmış gibi deneyimlemedim ama çok kötü geliyor.
Konuyu merakla takip ediyorum.
 
Buna fena ayar oluyorum sebebini bilmiyorum ama oynanışa çok kötü etkisi varmış gibi deneyimlemedim ama çok kötü geliyor.
Konuyu merakla takip ediyorum.
Bende ilk başta gıcık oluyordum şimdi açık olmazsa rahatsız hissediyorum :D

Biraz alıştıktan sonra oynarken daha fazla keyif alıyorsunuz.

Yorumunuz ve ilginiz için teşekkür ediyorum :kalp:
 
Konuya bir süre daha güncelleme veremeyeceğim galiba…

Auth kısmını refactor etmekle uğraşıyorum ve artık gerçekten kafayı yemek üzereyim. Her dokunduğum yerden başka bir şey çıkıyor, bitireyim derken daha da içinden çıkılmaz bir hâle geliyor. :confused:






fix(auth): hatali girislerde pending login bellek kilitlenmesi giderildi:
Genişlet Daralt Kopyala
- Giris basarisiz oldugunda (yanlis sifre, olmayan kullanici, engelli hesap) ErasePendingLogin ile hesap adi bellekten silindi.
- Isteyerek veya yanlislikla ust uste giris denemelerinde 'Bu hesap zaten bagli' (ALREADY) hatasina dusme sorunu kokten cozuldu.
- Yanlis kullanici adi ve yanlis sifre durumlari tektip WRONGPWD koduna baglanarak Account Enumeration acigi kapatildi.



C++23 bellek guvenligi, nullptr korumalari vs..:
Genişlet Daralt Kopyala
- Uninitialized stack memory leak engellendi (GdAuthRegisterQueryPacket ve GdAuthLoginQueryPacket sifir-ilklendirildi).
- SetPremiumTimes ve SendLoginPacket icerisindeki std::memcpy islemleri oncesine nullptr denetimleri eklendi.
- ClientState eski C-enum yapisindan C++23 enum class ClientState : uint8_t yapisina gecirildi.
- Salt okunur metin parametreleri std::string_view yapildi, [[nodiscard]] ve explicit eklendi.
- Server::ErasePendingLogin icindeki riskli assert(count == 1) kaldirilip guvenli silme yapildi.


detayli giris gunlukleri (account_log) ve istemci AuthSocket C++23 modernizasyonu:
Genişlet Daralt Kopyala
- log veritabanina account_log tablosu eklendi (id, account_id, login, hwid, status, time).
- db.exe sunucu katmanina HandleAuthLoginResult asenkron SQL loglama mekanizmasi entegre edildi.
- İstemci C++ AuthSocket.hpp ve AuthSocket.cpp siniflari std::string_view, [[nodiscard]] ve sifir-ilklendirilmeli paket yapilariyla C++23 standartlarina yukseltildi.



Biraz neler var yok ufacık gösteren görseller bırakayım

 
Granny2 SDK & 3D Animasyon Motoru Güncellemesi:
Genişlet Daralt Kopyala
Kalabalık pazar alanlarında ve yoğun savaş sahnelerinde yaşanan FPS düşüşlerini engellemek adına istemcinin 3D modelleme ve iskelet animasyon sistemi baştan sona modernize edildi.

Eski Kod Tabanı Temizliği: SDK içerisindeki eski konsol mimarilerine (PS2, PS3, Xbox vb.) ait kullanılmayan 7k + satırlık ölü kod temizlendi; yapı doğrudan x64 Windows ve C++23 standartlarına uyarlandı.
Özel Bellek Havuzu (Slab Allocator): Model ve animasyonların RAM/VFS üzerinden yüklenme hızını artırmak için 32B - 64KB arası 12 kademeli, 16-byte SIMD hizalamalı bir bellek havuzu entegre edildi. Standart heap tahsisleri ve bellek parçalanması önlendi.
Kemik Örnekleme & Önbellek İyileştirmeleri: Her karede kemik matrislerinin hesaplanması sırasında oluşan dinamik bellek ayırma yükü thread_local pose tamponuna taşındı. Dosya ve doku yolu çözümlemeleri std::string_view ile sıfır kopyaya (zero-copy) geçirildi.
AVX2 + FMA3 SIMD Donanım Hızlandırması: 64-bit Granny SDK'da skalar C döngülerine düşen tüm kemik ve matris dönüşümleri (BuildPositionOrientationWorldPoseOnly, ColumnMatrixMultiply vb.) AVX2 ve FMA3 komut setleriyle baştan yazıldı. Kemik rotasyonları ve matris çarpımları doğrudan işlemcinin vektör register'larında paralel olarak hesaplanır hale getirildi.
Modüler Yapı: Tüm optimizasyonlar geriye dönük uyumlu ve açılıp kapatılabilir makro mimarisiyle yapılandırıldı.
Sonuç işe yaradı mı evet baya baya yardı Yoğun karakter ve canavar içeren sahnelerde animasyon hesaplama maliyeti yaklaşık %30 - %40 oranında düşürüldü; kalabalık alanlardaki mikro takılmalar ve FPS kilitlenmesi giderildi. Aşağıda 2 adet video bıraktım



Eski hali



Güncel durum



DirectX 9 ve Granny tarafında işler göründüğü kadar basit ilerlemedi; açıkçası bu süreç birkaç günümü resmen heba etti. Granny2 SDK üzerindeki geliştirmeleri bitirdikten sonra asıl büyük sürpriz .gr2 model ve animasyon dosyalarında çıktı.

Piyasadaki birçok güncel model Granny 2.11.8 sürümüne ait yeni sıkıştırma (curve & mesh compression) algoritmalarıyla kaydedilmiş durumdaydı. Bizim kullandığımız 2.9.12 tabanında ise bu yeni sıkıştırma tipleri doğal olarak desteklenmiyordu. Bu format uyumsuzluğu yüzünden oyundaki modellerin açılmaması veya bozuk yüklenmesi riskini çözmek adına, projedeki tüm GR2 dosyalarını A'dan Z'ye elden geçirip tek tek dönüştürmek zorunda kaldım.

Bütün bu dönüşüm maraton entegrasyonu tamamlandıktan sonra hem dosya formatı uyumluluğu hem de animasyon akıcılığı açısından taş gibi bir yapı ortaya çıktı. Biraz daha iyileştirme yapabilirim ama konuya güncelleme vermek istediğim için şu anki halini yeterli gördüm ileride bir değişiklik olursa commit atarım :D ama biraz uzak kalmak istiyorum granny2'den :D
 
Ek Güncelleme

1786755720165.webp

Kod:
Genişlet Daralt Kopyala
- EterLib & PythonTextTail: Metin ve isimlik (TextTail) çizimlerini tek bir Draw Call altında toplayan Global Batching sistemi entegre edildi. Pazar alanı gibi sahnelerde binlerce bağımsız çizim çağrısı 1-2 Draw Call seviyesine indirgendi.

- InstanceBase: Animation LOD sistemi içindeki aktör başına artan sayaç hatası düzeltildi; render karesiyle senkronize çalışan merkezi frame counter'a bağlandı.

- PythonCharacterManager: Shadow Render Limit sistemi rastgele ID sırası yerine kameraya/oyuncuya en yakın modellere öncelik verecek şekilde mesafeye göre yeniden düzenlendi.

 
Ek Güncelleme


Kod:
Genişlet Daralt Kopyala
- EterLib & PythonTextTail: Metin ve isimlik (TextTail) çizimlerini tek bir Draw Call altında toplayan Global Batching sistemi entegre edildi. Pazar alanı gibi sahnelerde binlerce bağımsız çizim çağrısı 1-2 Draw Call seviyesine indirgendi.

- InstanceBase: Animation LOD sistemi içindeki aktör başına artan sayaç hatası düzeltildi; render karesiyle senkronize çalışan merkezi frame counter'a bağlandı.

- PythonCharacterManager: Shadow Render Limit sistemi rastgele ID sırası yerine kameraya/oyuncuya en yakın modellere öncelik verecek şekilde mesafeye göre yeniden düzenlendi.


Bizede versen şu optimizeyi 😂😂
 
Piyasadaki 20 yıllık, kapalı kaynak ve sürekli çöken antika Granny araçlarının yetersizliğinden dolayı DirectX 11 ile sıfırdan modern bir GR2 inceleme aracı geliştirdim.

Kısaca neler yapabiliyor:

DirectX 11 donanımsal gölgelendiriciler ile tel kafes, çift taraflı aydınlatma, kemik ağırlık haritası ve yüzey normalleri denetimi.
Oyundaki +9 parlama efektlerini ve özel auraları doğrudan karakterin eline veya zırhına bağlayıp canlı simüle etme.
MSM dosyalarını doğrudan okuyup zırh, saç, kask ve silahları tek seferde montajlayıp iskeletle senkronize oynatma.
Modelleri tek tıkla glTF 2.0 (glb) veya OBJ olarak Blender ve 3ds Max için dışa aktarma.
Çift kanal animasyon harmanlama ve akıllı kamera odaklama modları.
Testlerini yeni tamamladım, performansı ve stabilitesi gayet iyi durumda. Yakında tüm detayları, ekran görüntülerini ve indirme bağlantılarını paylaşacağım kapsamlı bir ana konu açacağım.


Videolu Spoiler :D @hasanmacit

 
Piyasadaki 20 yıllık, kapalı kaynak ve sürekli çöken antika Granny araçlarının yetersizliğinden dolayı DirectX 11 ile sıfırdan modern bir GR2 inceleme aracı geliştirdim.

Kısaca neler yapabiliyor:

DirectX 11 donanımsal gölgelendiriciler ile tel kafes, çift taraflı aydınlatma, kemik ağırlık haritası ve yüzey normalleri denetimi.
Oyundaki +9 parlama efektlerini ve özel auraları doğrudan karakterin eline veya zırhına bağlayıp canlı simüle etme.
MSM dosyalarını doğrudan okuyup zırh, saç, kask ve silahları tek seferde montajlayıp iskeletle senkronize oynatma.
Modelleri tek tıkla glTF 2.0 (glb) veya OBJ olarak Blender ve 3ds Max için dışa aktarma.
Çift kanal animasyon harmanlama ve akıllı kamera odaklama modları.
Testlerini yeni tamamladım, performansı ve stabilitesi gayet iyi durumda. Yakında tüm detayları, ekran görüntülerini ve indirme bağlantılarını paylaşacağım kapsamlı bir ana konu açacağım.


Videolu Spoiler :D @hasanmacit


@Kaptan Yosun seversin böyle boş uğraş şeyleri gel bak ilgini çeker :D
 
Geri
Üst