Selamlar öncelikle bugün mysql ile bağlantı kurmayı göstereceğim. Aynı zamanda nasıl kullanacağınızı göstereceğim
Makefile dosyamızı açalım ve boost kütüphanesini bulalım kodlarda ve üstüne şu vereceğim kodu ekleyelim
db.cpp açılır ;
Dahil edileceklere eklenir
#include "database.hpp"
#include <mysql_driver.h>
#include <mysql_connection.h>
Kodunuza eklenecekler
Yukarıdaki kodda bağlantı yaptırdık eğer bilgiler doğruysa test bağlantısının başarılı olduğu mesajını bize döndürecektir şayet eğer yanlışsa ozamanda bağlantı başarısız diyecektir.
Eğer bir kodu eklemek istersenizde nasıl yapacağınızı göstereceğim (Örnek olarak böyledir)
Makefile dosyamızı açalım ve boost kütüphanesini bulalım kodlarda ve üstüne şu vereceğim kodu ekleyelim
Kod:
INCDIR += -I../../../Server/mysqldriver/
db.cpp açılır ;
Dahil edileceklere eklenir
#include "database.hpp"
#include <mysql_driver.h>
#include <mysql_connection.h>
Kodunuza eklenecekler
Kod:
MYSQL* conn; conn = mysql_init(0); conn = mysql_real_connect(conn, "192.168.1.102", "root", "12345", "db", 0, NULL, 0); if (conn) { cout << "Test baglanti basarili"; }else{ cout << "Test baglanti basarisiz"; }
Yukarıdaki kodda bağlantı yaptırdık eğer bilgiler doğruysa test bağlantısının başarılı olduğu mesajını bize döndürecektir şayet eğer yanlışsa ozamanda bağlantı başarısız diyecektir.
Eğer bir kodu eklemek istersenizde nasıl yapacağınızı göstereceğim (Örnek olarak böyledir)
Kod:
stringstream ss; // stringstream'i kullanmamız için projemizde #include <sstream> dahil edilmiş olmalıdır. stringstream ss; string kullaniciadi, kullanicisifresi; ss << "INSERT INTO account(login, password) VALUES ('"+kullaniciadi+"', '"+kullanicisifresi+"')";
bu şekilde örnek olarak nasıl bir veriyi insert edersiniz onu gösterdim umarım yararlı olabilmişimdir
Bu işlemleri yapmadan önce altta vereceğim dosyayı gereken konuma (game sourceye atmanızdır)
Niye bukadar beklettin diye soracak olursanızda başta vermedim diye iyi bir okuyucu musunuz diye böyle birşey yaptım. Çünkü bir çok kişi okumadan direkt olarak uygulamaya geçiyor.
Buyrun dosyalar ;
[TABLE=full][TR][TD]
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
[/TR]
[/TABLE]İyi forumlar dilerim.
Metin2 Sunucularında İşlemlerde MySQL Kullanımı
Metin2 özel sunucularında geliştirme yaparken, veritabanı işlemleri kritik bir rol oynar. Özellikle oyuncu verileri, envanter, hesap bilgileri gibi dinamik içeriklerin yönetimi için MySQL gibi güçlü veritabanları kullanılır. Bu yazıda, Metin2 özel sunucularında işlemlerde MySQL kullanımını detaylı olarak ele alacağız.
MySQL Nedir ve Neden Kullanılır?
MySQL, açık kaynaklı ilişkisel veritabanı yönetim sistemidir. Güvenilir, hızlı ve kolay entegrasyon sağladığı için Metin2 geliştiricileri tarafından tercih edilir. Authserver ve gameserver gibi temel sistemlerde oyuncu kimlik doğrulama, karakter verileri, envanter içerikleri gibi önemli bilgiler bu veritabanında saklanır.
Metin2 Veritabanı Yapısı
Metin2 özel sunucularında genellikle iki farklı veritabanı kullanılır:
- Account Database (auth): Oyuncu giriş bilgileri, şifreler, hesap durumu gibi bilgiler burada tutulur.
- Game Database (game): Karakter adı, seviye, envanter, eşya verileri gibi oyun içi bilgiler buradadır.
MySQL ile Veri Sorgulama
C++ veya Python tabanlı sistemlerde MySQL bağlantısı genellikle socket üzerinden sağlanır. Örneğin, bir oyuncunun envanterini çekmek için aşağıdaki gibi bir sorgu kullanılabilir:
SELECT * FROM player WHERE name='oyuncuadi';
Bu sorgu, 'player' tablosundan belirtilen kullanıcıya ait tüm verileri çeker. Bu veriler oyun sunucusuna aktarılır ve oyuncunun envanteri ekrana basılır.
Python ve C++ ile MySQL Entegrasyonu
Python tarafında MySQL bağlantısı için PyMySQL veya mysql-connector-python gibi modüller kullanılır. C++ tarafında ise MySQL C API veya MySQL++ gibi kütüphaneler tercih edilir. Bu kütüphaneler sayesinde oyun sunucusu ile veritabanı arasında gerçek zamanlı veri alışverişi sağlanır.
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='password', database='game')
cursor = conn.cursor()
cursor.execute('SELECT name, level FROM player WHERE account_id = %s', (account_id))
result = cursor.fetchall()
SQL Injection ve Güvenlik Önlemleri
SQL injection saldırıları, özellikle kullanıcıdan gelen verilerle yapılan sorgularda büyük risk teşkil eder. Parametreli sorgular kullanarak bu tür saldırılar önlenebilir. Örneğin:
cursor.execute('SELECT * FROM player WHERE name = %s', (player_name,))
Yukarıdaki örnek, doğrudan string birleştirme yerine parametreli sorgu kullandığı için daha güvenlidir.
Veritabanı Performansı ve Optimizasyon
Metin2 sunucularında binlerce oyuncunun aynı anda veri çekebilmesi için veritabanı sorgularının optimize edilmesi gerekir. Bu bağlamda indeksleme, JOIN kullanımı ve sorgu cache gibi teknikler önemlidir. Özellikle envanter veya karakter verisi gibi sıklıkla erişilen alanlara indeks konması performansı ciddi şekilde artırır.
Sonuç
Metin2 özel sunucularında veritabanı yönetimi, oyunun kararlılığı ve performansı açısından kritik öneme sahiptir. MySQL, güçlü sorgulama yetenekleri ve kolay entegrasyonu sayesinde bu yapıda vazgeçilmezdir. Geliştiricilerin, SQL bilgisiyle beraber güvenlik ve optimizasyon konularında da bilgi sahibi olması gerekir.
Using MySQL in Operations on Metin2 Servers
In Metin2 private server development, database operations play a critical role. Dynamic content such as player data, inventory, and account information are managed using powerful databases like MySQL. In this article, we will examine the use of MySQL in operations on Metin2 private servers in detail.
What is MySQL and Why is it Used?
MySQL is an open-source relational database management system. It is preferred by Metin2 developers due to its reliability, speed, and ease of integration. Important information such as player authentication, character data, and inventory items are stored in these databases within core systems like authserver and gameserver.
Metin2 Database Structure
In Metin2 private servers, two different databases are generally used:
- Account Database (auth): Stores login credentials, passwords, and account status for players.
- Game Database (game): Contains in-game data such as character names, levels, inventory, and item details.
Querying Data with MySQL
In systems based on C++ or Python, MySQL connections are typically established via sockets. For example, to retrieve a player's inventory, a query like the following can be used:
SELECT * FROM player WHERE name='playername';
This query fetches all data related to the specified user from the 'player' table. This data is then sent to the game server and displayed to the player.
MySQL Integration with Python and C++
On the Python side, modules like PyMySQL or mysql-connector-python are used for MySQL connections. On the C++ side, libraries such as MySQL C API or MySQL++ are preferred. These libraries allow real-time data exchange between the game server and the database.
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='password', database='game')
cursor = conn.cursor()
cursor.execute('SELECT name, level FROM player WHERE account_id = %s', (account_id))
result = cursor.fetchall()
SQL Injection and Security Measures
SQL injection attacks pose significant risks, especially in queries involving user-provided input. Such attacks can be prevented by using parameterized queries. For example:
cursor.execute('SELECT * FROM player WHERE name = %s', (player_name,))
The above example uses a parameterized query instead of direct string concatenation, making it more secure.
Database Performance and Optimization
In Metin2 servers where thousands of players may access data simultaneously, optimizing database queries is essential. Techniques such as indexing, JOIN usage, and query caching are important. Indexing frequently accessed areas like inventory or character data significantly improves performance.
Conclusion
Database management in Metin2 private servers is critically important for game stability and performance. MySQL is indispensable in this structure due to its strong querying capabilities and easy integration. Developers must also have knowledge about security and optimization alongside SQL expertise.
