Metin2 Kaynak Kodlarında Database Source İçinde #ifdef Tanımlarını Aktif Etme

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 107

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Metin2 kaynak kodlarında, database klasörü içindeki .cpp dosyalarına yeni bir sistem için (#ifdef) makroları eklediğinizde, bu tanımların derleyici tarafından algılanmadığını ve sistemin çalışmadığını fark etmişsinizdir

Bunun sebebi ..database klasörünün derleme ayarlarının ana tanımlamaların yapıldığı common/service.h gibi dosyaları varsayılan olarak görmemesidir.

Bu sorunu çözmek için iki yöntem mevcut:

1. Yöntem, her dosyaya manuel eklemedir

database klasöründe (#ifdef) kullandığınız her bir .cpp dosyasının en üstüne aşağıdaki kodu ekleyeyin

Kod:
#include "../../common/service.h"

Ancak bu yöntem , çok sayıda dosyayı değiştirmeniz gerektiği için hem zahmetlidir

2. Yöntem , makefile'ı düzenlemektir

Bu sorunu kökünden çözmenin en doğru yoludur , database klasörünün Makefile dosyasını düzenlemektir.

259652_a8ac297abcf4998bf66b622f5b1e9e85.png


database klasörü içindeki Makefile dosyasını açın.
INCDIR ile başlayan satırı bulun ,bu satır ,derleyicinin hangi klasörleri kontrol edeceğini belirtir.
Bu satırın sonuna -I../../common parametresini ekleyin.

Örnek

Eğer satır eski haliyle şuna benziyorsa:

Kod:
INCDIR = -I../../../Extern/include

Yeni hali şu şekilde olur

Kod:
INCDIR = -I../../../Extern/include -I../../common

Bu tek seferlik değişiklik sayesinde, derleyici artık common klasöründeki tüm tanımları görecek ve database klasöründeki (#ifdef) makrolarınız sorunsuz bir şekilde çalışacaktır.
Metin2 Kaynak Kodlarında Database Source İçinde #ifdef Tanımlarını Aktif Etme

Metin2 Private Server Geliştirme sürecinde, özellikle C++ kaynak kod üzerinde çalışırken, bazı durumlarda belirli fonksiyonları veya kod bloklarını derleme esnasında aktif ya da pasif tutmak gerekir. Bu işlem genellikle #ifdef preprocessor direktifleri ile yapılır. Bu yapılar sayesinde geliştiriciler, farklı sunucu tipleri veya özel modlar için özelleştirilmiş kod parçaları çalıştırabilirler. Özellikle Database Source içinde tanımlanan bu direktifler, veritabanı bağlantısı, kullanıcı doğrulama ve oyun içi işlemler gibi kritik alanlarda büyük önem taşır.

#ifdef Nedir?
#ifdef, C/C++ dilinde kullanılan bir önişlemci direktifidir. Bu direktif, belirtilen bir tanımın var olup olmadığını kontrol eder. Eğer tanımlanmışsa, içerideki kod derlenir. Eğer tanımlanmamışsa, kod atlanır. Örneğin:

#ifdef DEBUG_MODE
// Debug modunda çalışacak kod
#endif

Bu yapı sayesinde, Metin2 server src üzerinde debug modu aktif edilip edilmeyeceği kararlaştırılabilir.

Database Source İçinde #ifdef Kullanımı
Metin2 sunucularında database modülü, genellikle game server ve auth server arasında veri alışverişinden sorumludur. Burada #ifdef tanımlarını kullanmak, belirli SQL sorgularının, tabloların veya veritabanı bağlantı ayarlarının sadece belirli derlemelerde aktif olmasına olanak tanır. Örneğin:

#ifdef CUSTOM_LOGIN_SYSTEM
// Özel giriş sistemi için SQL sorgusu
#else
// Standart giriş sistemi
#endif

Bu yapı, Metin2 pvp sistem geliştiricileri için çok değerlidir çünkü özel giriş, karakter silme veya özel item drop mekanizması gibi sistemler için ayrı kod blokları yazılabilir.

Tanımları Aktif Etme Yöntemleri
1. Kaynak Kodda Tanımlama:
Kaynak kodun başında #define CUSTOM_LOGIN_SYSTEM şeklinde bir satır eklenirse, bu tanım aktif olur ve ilgili kod bloğu derlenir.

2. Proje Ayarlarından Tanımlama:
Visual Studio veya başka IDE’ler üzerinden proje ayarlarına girilerek Preprocessor Definitions kısmına CUSTOM_LOGIN_SYSTEM gibi tanımlar eklenebilir. Bu sayede kodda değişiklik yapmadan aynı sonuç elde edilir.

3. Makefile veya CMake Kullanımı:
Linux tabanlı derlemelerde Makefile veya CMakeLists.txt dosyalarında -DCUSTOM_LOGIN_SYSTEM gibi parametreler kullanarak derleme sırasında aktif edilebilir.

Metin2 Development süreçlerinde bu tür tanımlar, hem kodun okunabilirliğini artırır hem de sürüm yönetimi açısından kolaylık sağlar. Game Core ve DB Core gibi temel bileşenlerde bu yapılar sıkça kullanılır.

Örnek Senaryo
Bir Metin2 geliştiricisi, PvP sunucusunda özel bir oylama sistemi kurmak istiyor. Bu sistem için veritabanında yeni tablolar oluşturulmuş ve giriş sırasında kontrol edilmesi gereken özel sorgular yazılmış. #ifdef kullanarak bu kod bloğu sadece test sunucusunda aktif edilir:

#ifdef TESTING_SERVER
ExecuteQuery('SELECT vote_count FROM player_votes WHERE pid = ?');
#endif

Bu sayede canlı sunucuda bu sorgu çalışmazken, test ortamında çalışır.

Sonuç
Metin2 kaynak kodları üzerinde çalışırken #ifdef tanımlarını kullanmak, çok yönlü ve esnek sistemler geliştirmek için güçlü bir yöntemdir. Özellikle Database Source içinde bu yapılarla yapılan tanımlar, sunucu performansını optimize ederken aynı zamanda kodun bakımını kolaylaştırır. Metin2Dev süreçlerinde bu teknikleri doğru kullanmak, profesyonel düzeyde server programming yapmanın temel adımlarındandır.


Activating #ifdef Definitions in Database Source Within Metin2 Source Code

Metin2 Private Server Development process, especially when working on C++ source code, sometimes requires certain functions or code blocks to be active or inactive during compilation. This process is typically done with #ifdef preprocessor directives. Thanks to these structures, developers can run customized code pieces for different server types or special mods. In particular, these directives defined inside Database Source are critical for areas such as database connection, user validation, and in-game operations.

What is #ifdef?
#ifdef is a preprocessor directive used in the C/C++ language. This directive checks whether a specified definition exists. If it is defined, the code inside is compiled. If not defined, the code is skipped. For example:

#ifdef DEBUG_MODE
// Code that runs in debug mode
#endif

Thanks to this structure, in Metin2 server src, it can be decided whether the debug mode will be activated.

Using #ifdef in Database Source[/BR]In Metin2 servers, the database module is generally responsible for data exchange between the game server and auth server. Using #ifdef definitions here allows certain SQL queries, tables, or database connection settings to be active only in specific builds. For example:

#ifdef CUSTOM_LOGIN_SYSTEM
// SQL query for custom login system
#else
// Standard login system
#endif

This structure is very valuable for Metin2 pvp system developers because separate code blocks can be written for special login, character deletion, or custom item drop mechanisms.

Methods to Activate Definitions
1. Defining in Source Code:
If a line like #define CUSTOM_LOGIN_SYSTEM is added at the beginning of the source code, this definition becomes active and the related code block is compiled.

2. Defining via Project Settings:
Through Visual Studio or other IDEs, by entering project settings and adding CUSTOM_LOGIN_SYSTEM into the Preprocessor Definitions section, the same result can be achieved without changing the code.

3. Using Makefile or CMake:
In Linux-based builds, parameters like -DCUSTOM_LOGIN_SYSTEM can be used in Makefile or CMakeLists.txt files to activate during compilation.

In Metin2 Development processes, such definitions increase code readability and facilitate version management. These structures are frequently used in fundamental components like Game Core and DB Core.

Example Scenario
A Metin2 developer wants to set up a custom voting system on their PvP server. New tables have been created in the database for this system, and special queries have been written to check during login. Using #ifdef, this code block is activated only on the test server:

#ifdef TESTING_SERVER
ExecuteQuery('SELECT vote_count FROM player_votes WHERE pid = ?');
#endif

Thus, while this query does not run on the live server, it runs in the test environment.

Conclusion
While working on Metin2 source codes, using #ifdef definitions is a powerful method for developing versatile and flexible systems. Especially the definitions made within Database Source with these structures optimize server performance while facilitating code maintenance. Correctly using these techniques in Metin2Dev processes is one of the fundamental steps of professional server programming.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt