[C++]Lua Mysql Fonksiyonları

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhabalar,
Source kullananlar için lua scriptlerinde kullanabilecekleri birkaç mysql fonksiyonu eklemeyi göstericem.

İçerik;
mysql.query
mysql.direct_query
mysql.update
mysql.real_escape_string
mysql.get_table_postfix


Anlatım:
../game/src dizinine aşağıdaki questlua_mysql.cpp dosyasını atın
Freebsd kullanıyorsanız Makefile dosyasındaki CPPFILE kısmına Visual studio kullanıyorsanız da game solution a ekleyin

queslua.cpp açın;
Kod:
RegisterDragonSoulFunctionTable();
aratın
Kod:
RegisterMysqlFunctionTable();
altına ekleyin

questlua.h açın;
Kod:
extern void RegisterDragonSoulFunctionTable();
aratın
Kod:
extern void RegisterMysqlFunctionTable();
altına ekleyin

ve derleyip kullanabilirsiniz


Kullanım:
mysql.real_escape_string(string)
mysql.query(string)
mysql.update(string)
mysql.get_table_postfix() -> return lua string
mysql.direct_query(string)



İndir:

Alternatif:

Virustotal:



C++ Lua MySQL Fonksiyonları Nedir?
Metin2 özel sunucu geliştirme süreçlerinde, sunucu tarafında veritabanı işlemleri oldukça önemlidir. Özellikle oyuncu verileri, envanter, seviye, para gibi bilgilerin güvenli ve hızlı bir şekilde saklanması gerekir. Bu noktada C++, Lua ve MySQL arasındaki entegrasyon büyük rol oynar. Bu yazıda, C++ tabanlı bir Metin2 sunucusunda Lua üzerinden MySQL veritabanı işlemlerini yöneten fonksiyonlara odaklanacağız.

Lua ile C++ Entegrasyonu
Metin2 özel sunucularında, sunucu mantığı genellikle C++ ile yazılırken, scriptler Lua dilinde geliştirilir. Lua, C/C++ ile kolayca entegre edilebilen hafif bir betik dilidir. C++ tarafında tanımlanan fonksiyonlar, Lua ortamına aktarılıp orada kullanılabilir. Bu sayede, örneğin bir oyuncu seviyesini artırmak veya envanterden bir eşya silmek gibi işlemler Lua scriptleri ile kontrol edilebilir.

MySQL Bağlantısı Nasıl Kurulur?
MySQL bağlantısı genellikle C++ tarafında oluşturulur. MySQL kütüphaneleri kullanılarak bir bağlantı nesnesi türetilir. Bu nesne, Lua tarafına register edilerek scriptlerde kullanılabilir hale getirilir. Örneğin:

Kod:
[B]lua_pushcfunction(lua_state, mysql_query_lua);[/B]


Yukarıdaki satır, Lua ortamında 'mysql_query_lua' adlı bir fonksiyonu kullanıma sunar. Bu fonksiyon C++ içinde tanımlanmış bir MySQL sorgusu çalıştırma metodudur.

Sık Kullanılan C++ Lua MySQL Fonksiyonları
Aşağıda, Metin2 özel sunucularında yaygın olarak kullanılan bazı MySQL fonksiyonlarının Lua üzerinden kullanımına dair örnekler yer almaktadır:

- db_query(sql): Veritabanında bir sorgu çalıştırır.
- db_fetch(): Sorgudan gelen verileri çeker.
- db_insert_id(): Son INSERT işleminin ID değerini döndürür.
- db_affected_rows(): Etkilenen satır sayısını döndürür.

Örnek kullanım Lua içinde şu şekildedir:

Kod:
local result = db_query('SELECT name, level FROM player WHERE id=' .. player_id)[BR][/BR]local row = db_fetch(result)[BR][/BR]if row then[BR][/BR]    print(row.name .. ' seviyesi: ' .. row.level)[BR][/BR]end


Güvenlik Açıklarına Karşı Önlemler
SQL injection gibi güvenlik açıklarını önlemek için, sorgular hazırlanmış ifadeler (prepared statements) kullanılarak çalıştırılmalıdır. C++ tarafında bu tür işlemler için MySQL'in 'mysql_stmt_init', 'mysql_stmt_prepare', 'mysql_stmt_execute' gibi fonksiyonları tercih edilmelidir. Lua tarafında bu işlemler daha güvenli bir şekilde sarmalanarak kullanıcının doğrudan SQL kodu yazmasını engellemek gerekir.

Metin2 Geliştirme Sürecinde Bu Fonksiyonların Yeri
Metin2 özel sunucularında, oyun içi etkinlikler, PvP sistemleri, guild savaşları gibi dinamik yapılar için veritabanı işlemlerine ihtiyaç duyulur. Örneğin bir PvP skoru güncellemesi veya bir oyuncunun son giriş zamanı gibi bilgiler, C++LuaMySQL fonksiyonları ile kolayca yönetilebilir. Bu sayede hem performans artar hem de geliştirme süreci daha esnek hale gelir.


What are C++ Lua MySQL Functions?
In the process of developing Metin2 private servers, database operations on the server side are extremely important. Player data such as inventory, level, money, etc., need to be stored securely and quickly. At this point, the integration between C++, Lua, and MySQL plays a major role. In this article, we will focus on functions that manage MySQL database operations via Lua within a C++ based Metin2 server.

Integration of Lua with C++
In Metin2 private servers, the server logic is usually written in C++, while scripts are developed in the Lua language. Lua is a lightweight scripting language that can easily integrate with C/C++. Functions defined in C++ can be exported to the Lua environment and used there. For example, increasing a player’s level or removing an item from their inventory can be controlled through Lua scripts.

How is MySQL Connection Established?
MySQL connection is typically established in the C++ side. A connection object is created using MySQL libraries and registered for use in the Lua environment. For example:

Kod:
[B]lua_pushcfunction(lua_state, mysql_query_lua);[/B]


The above line makes a function named 'mysql_query_lua' available in the Lua environment. This function is a method defined in C++ that executes a MySQL query.

Commonly Used C++ Lua MySQL Functions
Below are examples of some commonly used MySQL functions in Metin2 private servers via Lua:

- db_query(sql): Executes a query in the database.
- db_fetch(): Fetches data returned by the query.
- db_insert_id(): Returns the ID of the last INSERT operation.
- db_affected_rows(): Returns the number of affected rows.

An example usage in Lua is as follows:

Kod:
local result = db_query('SELECT name, level FROM player WHERE id=' .. player_id)[BR][/BR]local row = db_fetch(result)[BR][/BR]if row then[BR][/BR]    print(row.name .. ' level: ' .. row.level)[BR][/BR]end


Precautions Against Security Vulnerabilities
To prevent security vulnerabilities like SQL injection, queries should be executed using prepared statements. On the C++ side, MySQL functions such as 'mysql_stmt_init', 'mysql_stmt_prepare', and 'mysql_stmt_execute' should be preferred. On the Lua side, these operations must be wrapped more securely to prevent users from writing raw SQL code directly.

The Role of These Functions in Metin2 Development
In Metin2 private servers, dynamic structures like in-game events, PvP systems, and guild wars require database operations. For example, updating PvP scores or recording a player's last login time can be easily managed using C++LuaMySQL functions. This increases performance and makes the development process more flexible.
 

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

Benzer konular

Geri
Üst Alt