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 12
  • Gösterim Gösterim 500

Sys

MT Üye
MT Üye
Mesaj
242
Çözümler
4
Beğeni
377
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

 
Geri
Üst