Antrum- Geliştirme Günlüğü

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

Sys

MT Üye
MT Üye
Mesaj
164
Çözümler
4
Beğeni
229
Puan
734
Ticaret Puanı
0
Selam mmotutkunları 👋


Uzun zaman sonra Metin2’ye geri döndüm… Evet, hâlâ pes etmedim! 😅
dönüşüm pek iç açıcı olmadı, çünkü eski dosyalarım tarih olmuş. Sağ olsun m2 diskim, beni sıfırdan başlatma keyfini yaşattı. Şimdi yeniden bir altyapı kurma sürecindeyim; yalnız bu iş “koşarak” değil, “emekleyerek” ilerliyor çünkü vaktim sınırlı. O yüzden güncellemeler de salyangoz hızında gelecek. Şimdiden sabırlı olan kazansın diyelim. 🐌


Altyapı olarak Martysama 5.8 P23 tercih ettim. “Mainline Novaline’den sıfırdan başlayım” diyordum ama sonra zaman yönetimime baktım ve dedim ki:


“Yok ya, hayat kısa, Martysama candır.”

Bazı arkadaşların sıkça karşılaştığı paket hataları nedeniyle şöyle uyarılar geliyor:
“Sıfırdan altyapı kurmazsan, ileride paket hatalarıyla boğuşursun!” falan filan... 😄
Ben de diyorum ki: “Alırsam alırım, zaten hayatın kendisi başlı başına bir hata simülasyonu.” 😎
Kaldı ki bu proje tamamen bana özel, dışarıya servislik değil; dert etmiyorum.
Hata mı çıkar? Çıksın, çözeriz; problem değil. 😄

Peki, projedeki amacım ne?

Hiçbir fikrim yok. 😁
Hedefim var mı? Yok.
Planım var mı? O da yok.
Kısacası: “Ne çıkarsa bahtıma! Keyfime” modundayım.
Bugün canım kostüm eklemek ister, yarın bir event oluştrumak isterim, öbür gün de belki sadece boş boş map gezerim.
Hayat gibi; bol sürprizli, biraz rastgele ama kesinlikle keyifli. Uzun zaman sonrasında çok özlemişim.


🔧 **Kullandığım Altyapı:** Martysama P23

💻 **Server Tarafı**
• Derleyici: Clang (C++20)
• Python Sürümü: Python 3
• Veritabanı: MariaDB
• SQL Engine: InnoDB

🖥️ **Client Tarafı**
• IDE: Visual Studio 2022 (C++20)
• Python Sürümü: Python 2.7
• Grafik: DirectX 8 [Ufak ufak DirectX 9 Güncelliyorum 200 ifdef'e sahip olduk 😁 ]

📦 **Pack Sistemi**
• Pack Encryption: FileSystem
• Şifreleme: AES, Twofish, RC5 (CryptoPP üzerinden)
• Sıkıştırma Yöntemleri: lz4, lzo, zlib

⚠️ **Not:**
Muhtemelen CryptoPP'yi kaldıracağım ve onun yerine **libsodium** kullanacağım… ama hâlâ karar aşamasındayım. Rework etmeye de pek vakitim yok 😁


using namespace std; Kalan kısımları kaldırıldı

Düzenlendi:
Genişlet Daralt Kopyala
std::string
std::pair
std::make_pair
std::vector
Boost kütüphanesi Client taraflı kaldırıldı std:: Kullanıyorum

Packlar pack.json üzerinden okunuyor
1748160766477.webp





Panama
HybridCrypt
__MOVIE_MODE__
SPHERELIB_STRICT
ENABLE_CHEQUE_SYSTEM
DISABLE_CHEQUE_DROP
ENABLE_WON_EXCHANGE_WINDOW
CheckLatestFiles
PythonExceptionSender
ENABLE_MILES_CHECK
ENABLE_DAEMONPROTECTION
__THEMIDA__
NOT: Aklımda olanlar Bunlar Eklemeler yapılacak :D


/*--------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/********************************************************** [Antrum Defines] **********************************************************/
#define ENABLE_RENEWAL_NOTICE // [Dracarys] Notice Penceresi
#define ENABLE_CHAT_LEFT_SIDE // Chat Barını Sol Kısıma Taşıma Modulu
#define ENABLE_CLEAR_CHAT_SYSTEM // Chat temizleme Modulu
#define ENABLE_CHAT_STOP // Chat Durdurma Modulu
#define ENABLE_EMOJI_SYSTEM // Emoji Sistemi
#define GAMEMASTER_OUTLINE_COLOR // Admin İsmine Özel Renk Modulu
#define ENABLE_SHOW_VNUM // Admin Vnum Görüntüleme Modulu
#define ENABLE_WINDOW_BOUNDARY_CHECK 1 // Pencere Dışına çıkmayı Engelleme Modulu
#define ENABLE_STATUS_UP_REWORK // Hızlı Statü Rework
#define SYSERR_REWORK // Syserr tarih saat olarak detaylandırıldı
#define ENABLE_MONSTER_SPECULAR // Specular
#define ENABLE_WALL_FOR_GM // Yetkilililer Engellerin içinden geçmesi için kontrol Modulu
/********************************************************** [DIRECTX9 Defines] **********************************************************/
#define DIRECTX_VERSION 0
#if DIRECTX_VERSION // Directx 8-9 Versiyonları geçişi Aktif pasif Modulu
#define DIRECTX_EXTERN // Directx 8-9 extern
#define DIRECTX9 // Directx 9
#endif

/********************************************************** [Fix Defines] ***********************************************************/
#define SPECIAL_HORSE_MOTION_FPS // Hasar Sınırı yükseltilince okçu hasar verememe düzeltmesi
#define ENABLE_CONNECT_FIX // Connect Fix
#define ENABLE_WHITE_TEXTURE_FIX // Beyaz doku sorununu düzeltir

/********************************************************** [Antrum Defines] **********************************************************/




/********************************************************** [Antrum Defines] **********************************************************/
#define ENABLE_STATUS_UP_REWORK // Hızlı Statü Rework
#define __REGEN_REWORK__ // Regen.txt mobs rework


/********************************************************** [Antrum Defines] **********************************************************/
 
Son düzenleme:
Görseller Eklemeyi unutmuşuz 😁

1748165739689.webp


1748165807987.webp



specular_table.txt tarafından yönetiliyor
Metal efekti vermek istediğiniz mob için mob vnum ve specular değeri atıyorsunuz
örnek
Mobvnm ve değer
xxxx 0.05

1748165895907.webp
 
ahmetttt düşme gardaşım düşmee
 
Adaş Bence 3 lü düşelim 🤣
Düşün düşün, ne zamandır konusunu açan yoktu. Açan konularında zaten güncellemesi gelmiyodu İyi olmuş 😂😂
Ellerine sağlık bu arada, ayrıca mobların yanında vnum yazmasıda güzel detay olmuş. Başarılar dilerim.

Bu pack açıp kapatma olayı çok güzel olmuş. Git deki repoda olan packmakerliteımı kullanıyosunuz. Farklı mı geliştirdiniz.
 
Düşün düşün, ne zamandır konusunu açan yoktu. Açan konularında zaten güncellemesi gelmiyodu İyi olmuş 😂😂
Ellerine sağlık bu arada, ayrıca mobların yanında vnum yazmasıda güzel detay olmuş. Başarılar dilerim.

Bu pack açıp kapatma olayı çok güzel olmuş. Git deki repoda olan packmakerliteımı kullanıyosunuz. Farklı mı geliştirdiniz.
Teşekkür ederim.

Yok ya, RAM yetmediğinden öylesine hazırlamıştım diye hatırlıyorum malum laptop 🤷‍♂️ Eter pack ve içeriğindeki bağlı kodlar dahil ne var ne yok hepsi komple uçtu gitti yeniden oluşturuldu korayın vfs ve nayah2 pak sistemi tarzında bir Sistemine geçiş sağladım Yakında biraz daha düzenleyip şöyle ağız tadıyla detaylı bir sunum hazırlarım... umarım 😅
 
Teşekkür ederim.

Yok ya, RAM yetmediğinden öylesine hazırlamıştım diye hatırlıyorum malum laptop 🤷‍♂️ Eter pack ve içeriğindeki bağlı kodlar dahil ne var ne yok hepsi komple uçtu gitti yeniden oluşturuldu korayın vfs ve nayah2 pak sistemi tarzında bir Sistemine geçiş sağladım Yakında biraz daha düzenleyip şöyle ağız tadıyla detaylı bir sunum hazırlarım... umarım 😅
Merak ettim. Sana zahmet hazırlarsan çok güzel olur.
 
Yaz beni de oraya ama biraz farklı biliyorsun Furkanım, Antrum ismi de tanıdık geldi ama bakalım :D
Hüsomm ayıpsın her zaman yazılısın.
Şuanlık yine yokum şehir dışına çıktım
İsimi Ant-rom olarak düşündüm de antrum daha mantıklı geldi işçiliği karınca misali işliyeceğim espirisi ile çıkmıştım yola 😄😄
 
Mini Güncelleme 🔧


DirectX9 aktif hale getirildi!
Artık 8-9 arasında geçiş yapabiliyorum — Görsellik isteyen oraya, nostalji seven buraya mantığına çevireceğim [Umarım..]. 😄


Mob Vnum sistemi ise... nasıl desem... biraz göz zevkime ihanet ediyordu. 🙈


  • Vnum'u turuncu yaptım
  • Vnum ID’sini ise gri yaptım
    Böylece hem ayrım kolaylaştı hem de estetik bir hava kattı. Gözlerim kanamasın artık. 😄😄😄


Eklenilen Sistemler:
Genişlet Daralt Kopyala
#define ENABLE_TAB_NEXT_TARGET           // Tab tuşu ile sıradaki hedefi seç
#define ENABLE_NEW_GAMEOPTION         // Dracarys’a özel yeni oyun seçenekleri


📹 Görsel yoktu, dedim ki video daha iyi olur
Şuanki halinin Kısa ve öz bir videosu — merak edenler için 👇

 
Fps limiti ile oynamaya karar verdim ve kafam Allak bullak oldu büyük ihtimalle vazgeçeceğim
benzer işlemi uygulayacak arkadaşlar varsa örnek steptimer.h

StepTimer.h:
Genişlet Daralt Kopyala
#pragma once

#include <windows.h>
#include <cmath>

class StepTimer32
{
public:
    StepTimer32()
        : m_elapsedTicks(0),
        m_totalTicks(0),
        m_leftOverTicks(0),
        m_frameCount(0),
        m_framesPerSecond(0),
        m_framesThisSecond(0),
        m_qpcSecondCounter(0),
        m_isFixedTimeStep(false),
        m_targetElapsedTicks(TicksPerSecond / 60)
    {
        if (!QueryPerformanceFrequency(&m_qpcFrequency) || !QueryPerformanceCounter(&m_qpcLastTime))
        {
            // Timer desteklenmiyorsa fallback yapabilirsin
            MessageBoxA(nullptr, "QueryPerformanceCounter desteklenmiyor!", "Zamanlayıcı Hatası", MB_ICONERROR);
            exit(-1);
        }

        m_qpcMaxDelta = m_qpcFrequency.LowPart / 10; // 1/10 saniye
    }

    // Zaman birimleri
    static const DWORD TicksPerSecond = 10000000;
    static const DWORD TicksPerMillisecond = 10000;

    static double TicksToSeconds(DWORD ticks) { return static_cast<double>(ticks) / TicksPerSecond; }
    static DWORD SecondsToTicks(double seconds) { return static_cast<DWORD>(seconds * TicksPerSecond); }

    // Timer kontrolü
    void ResetElapsedTime()
    {
        QueryPerformanceCounter(&m_qpcLastTime);
        m_leftOverTicks = 0;
        m_framesPerSecond = 0;
        m_framesThisSecond = 0;
        m_qpcSecondCounter = 0;
    }

    void SetFixedTimeStep(bool fixed) { m_isFixedTimeStep = fixed; }
    void SetTargetElapsedTicks(DWORD ticks) { m_targetElapsedTicks = ticks; }

    // FPS bilgileri
    DWORD GetFrameCount() const { return m_frameCount; }
    DWORD GetFramesPerSecond() const { return m_framesPerSecond; }

    // Geçen süre
    DWORD GetElapsedTicks() const { return m_elapsedTicks; }
    double GetElapsedSeconds() const { return TicksToSeconds(m_elapsedTicks); }

    // Ana güncelleme fonksiyonu
    void Tick(void (*UpdateCallback)())
    {
        LARGE_INTEGER currentTime;
        QueryPerformanceCounter(&currentTime);

        DWORD delta = currentTime.LowPart - m_qpcLastTime.LowPart;
        m_qpcLastTime = currentTime;

        if (delta > m_qpcMaxDelta)
            delta = m_qpcMaxDelta;

        // QPC'yi kendi zaman formatımıza çevir
        delta = static_cast<DWORD>(
            (static_cast<double>(delta) * TicksPerSecond) / static_cast<double>(m_qpcFrequency.LowPart));

        DWORD lastFrameCount = m_frameCount;

        if (m_isFixedTimeStep)
        {
            if (abs((int)(delta - m_targetElapsedTicks)) < TicksPerSecond / 4000)
            {
                delta = m_targetElapsedTicks;
            }

            m_leftOverTicks += delta;

            while (m_leftOverTicks >= m_targetElapsedTicks)
            {
                m_elapsedTicks = m_targetElapsedTicks;
                m_totalTicks += m_targetElapsedTicks;
                m_leftOverTicks -= m_targetElapsedTicks;
                m_frameCount++;

                UpdateCallback();
            }
        }
        else
        {
            m_elapsedTicks = delta;
            m_totalTicks += delta;
            m_leftOverTicks = 0;
            m_frameCount++;

            UpdateCallback();
        }

        // FPS ölçümü
        if (m_frameCount != lastFrameCount)
        {
            m_framesThisSecond++;
        }

        m_qpcSecondCounter += delta;

        if (m_qpcSecondCounter >= TicksPerSecond)
        {
            m_framesPerSecond = m_framesThisSecond;
            m_framesThisSecond = 0;
            m_qpcSecondCounter %= TicksPerSecond;
        }
    }

private:
    LARGE_INTEGER m_qpcFrequency;
    LARGE_INTEGER m_qpcLastTime;

    DWORD m_qpcMaxDelta;

    DWORD m_elapsedTicks;
    DWORD m_totalTicks;
    DWORD m_leftOverTicks;

    DWORD m_frameCount;
    DWORD m_framesPerSecond;
    DWORD m_framesThisSecond;
    DWORD m_qpcSecondCounter;

    bool m_isFixedTimeStep;
    DWORD m_targetElapsedTicks;
};

1748278015402.webp
 
Fps limiti ile oynamaya karar verdim ve kafam Allak bullak oldu büyük ihtimalle vazgeçeceğim
benzer işlemi uygulayacak arkadaşlar varsa örnek steptimer.h

StepTimer.h:
Genişlet Daralt Kopyala
#pragma once

#include <windows.h>
#include <cmath>

class StepTimer32
{
public:
    StepTimer32()
        : m_elapsedTicks(0),
        m_totalTicks(0),
        m_leftOverTicks(0),
        m_frameCount(0),
        m_framesPerSecond(0),
        m_framesThisSecond(0),
        m_qpcSecondCounter(0),
        m_isFixedTimeStep(false),
        m_targetElapsedTicks(TicksPerSecond / 60)
    {
        if (!QueryPerformanceFrequency(&m_qpcFrequency) || !QueryPerformanceCounter(&m_qpcLastTime))
        {
            // Timer desteklenmiyorsa fallback yapabilirsin
            MessageBoxA(nullptr, "QueryPerformanceCounter desteklenmiyor!", "Zamanlayıcı Hatası", MB_ICONERROR);
            exit(-1);
        }

        m_qpcMaxDelta = m_qpcFrequency.LowPart / 10; // 1/10 saniye
    }

    // Zaman birimleri
    static const DWORD TicksPerSecond = 10000000;
    static const DWORD TicksPerMillisecond = 10000;

    static double TicksToSeconds(DWORD ticks) { return static_cast<double>(ticks) / TicksPerSecond; }
    static DWORD SecondsToTicks(double seconds) { return static_cast<DWORD>(seconds * TicksPerSecond); }

    // Timer kontrolü
    void ResetElapsedTime()
    {
        QueryPerformanceCounter(&m_qpcLastTime);
        m_leftOverTicks = 0;
        m_framesPerSecond = 0;
        m_framesThisSecond = 0;
        m_qpcSecondCounter = 0;
    }

    void SetFixedTimeStep(bool fixed) { m_isFixedTimeStep = fixed; }
    void SetTargetElapsedTicks(DWORD ticks) { m_targetElapsedTicks = ticks; }

    // FPS bilgileri
    DWORD GetFrameCount() const { return m_frameCount; }
    DWORD GetFramesPerSecond() const { return m_framesPerSecond; }

    // Geçen süre
    DWORD GetElapsedTicks() const { return m_elapsedTicks; }
    double GetElapsedSeconds() const { return TicksToSeconds(m_elapsedTicks); }

    // Ana güncelleme fonksiyonu
    void Tick(void (*UpdateCallback)())
    {
        LARGE_INTEGER currentTime;
        QueryPerformanceCounter(&currentTime);

        DWORD delta = currentTime.LowPart - m_qpcLastTime.LowPart;
        m_qpcLastTime = currentTime;

        if (delta > m_qpcMaxDelta)
            delta = m_qpcMaxDelta;

        // QPC'yi kendi zaman formatımıza çevir
        delta = static_cast<DWORD>(
            (static_cast<double>(delta) * TicksPerSecond) / static_cast<double>(m_qpcFrequency.LowPart));

        DWORD lastFrameCount = m_frameCount;

        if (m_isFixedTimeStep)
        {
            if (abs((int)(delta - m_targetElapsedTicks)) < TicksPerSecond / 4000)
            {
                delta = m_targetElapsedTicks;
            }

            m_leftOverTicks += delta;

            while (m_leftOverTicks >= m_targetElapsedTicks)
            {
                m_elapsedTicks = m_targetElapsedTicks;
                m_totalTicks += m_targetElapsedTicks;
                m_leftOverTicks -= m_targetElapsedTicks;
                m_frameCount++;

                UpdateCallback();
            }
        }
        else
        {
            m_elapsedTicks = delta;
            m_totalTicks += delta;
            m_leftOverTicks = 0;
            m_frameCount++;

            UpdateCallback();
        }

        // FPS ölçümü
        if (m_frameCount != lastFrameCount)
        {
            m_framesThisSecond++;
        }

        m_qpcSecondCounter += delta;

        if (m_qpcSecondCounter >= TicksPerSecond)
        {
            m_framesPerSecond = m_framesThisSecond;
            m_framesThisSecond = 0;
            m_qpcSecondCounter %= TicksPerSecond;
        }
    }

private:
    LARGE_INTEGER m_qpcFrequency;
    LARGE_INTEGER m_qpcLastTime;

    DWORD m_qpcMaxDelta;

    DWORD m_elapsedTicks;
    DWORD m_totalTicks;
    DWORD m_leftOverTicks;

    DWORD m_frameCount;
    DWORD m_framesPerSecond;
    DWORD m_framesThisSecond;
    DWORD m_qpcSecondCounter;

    bool m_isFixedTimeStep;
    DWORD m_targetElapsedTicks;
};

23642 eklentisini görüntüle
video atsaydın fotodan ne anlicaz
 
Uzun bir süre bu altyapıya güncelleme gelmeyecek, Metin2’den biraz uzak kalacağım bu süreçte. :D

Şu aralar kafayı GMP ile bozmuş durumdayım. GMP, büyük sayılarla uğraşan kişiler için harika bir kütüphane matematiksel işlemlerde süper güçler gösteren bir kütüphane. Performansı falan o kadar iyi ki, insan Bu işler böyle mi yapılırmış? diye düşünüyor.

Farklı bir projeye dalınca Metin2 biraz geriye alındı. Ama merak etme Antrum geri döndüğümde yine beraberiz, o zamana kadar GMP ile kafamı bozmayayım da ne yapayım! :D
Linkleri görebilmek için giriş yap veya kayıt ol.
:aman:
 
Geri
Üst