Çok eskilerden kullandığım bir eklentidir sistem bana ait değil fakat definelerini değiştirmiştim 
/item {item id} {item sayısı} {karakter adı} şeklinde item gönderebilirsiniz.
Oyuncunun deposuna iletilecektir item.
/item {item id} {item sayısı} {karakter adı} şeklinde item gönderebilirsiniz.
Oyuncunun deposuna iletilecektir item.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
Murat K - Çevrimdışı Oyuncuya Item Verme Sistemi [C++] Metin2 Lobby
Metin2 özel sunucularında geliştirme yaparken bazı durumlarda oyuncuların çevrimdışı olduğu sırada onlara item vermek isteyebilirsiniz. Bu işlem genellikle admin komutları veya özel event sistemleriyle yapılır. Ancak bu yazıda Murat K adlı geliştiricinin önerdiği yöntem üzerinden örnek bir çevrimdışı item verme sistemini C++ dilinde nasıl uygulayacağımızı inceleyeceğiz.
Çevrimdışı Oyuncuya Item Verme Nedir?
Bu sistem sayesinde, oyuncu online değilken bile belirli itemler doğrudan envanterine veya depolarına aktarılabilir. Özellikle ödül verme, ceza uygulama veya özel event ödülleri için oldukça kullanışlıdır.
Sistem Nasıl Çalışır?
Öncelikle, oyuncunun karakter bilgileri veritabanından çekilir. Eğer oyuncu offline ise, doğrudan item ekleme işlemi veritabanı üzerinden gerçekleştirilir. Bu işlem genellikle SQL sorgularıyla yönetilir.
Kodlama Aşaması
Aşağıda basitleştirilmiş bir C++ fonksiyonu örneği verilmiştir:
Kod:
void OfflineGiveItem(const char* player_name, int item_vnum, int count) {[BR][/BR][BR][/BR] // Oyuncu ID'sini çek[BR][/BR] DWORD pid = GetPlayerIDByName(player_name);[BR][/BR] if (!pid) {[BR][/BR] sys_log(0, 'OfflineGiveItem: Player not found!');[BR][/BR] return;[BR][/BR] }[BR][/BR][BR][/BR] // SQL ile item ekle[BR][/BR] char query[512];[BR][/BR] snprintf(query, sizeof(query),[BR][/BR] 'INSERT INTO item (owner_id, vnum, count) VALUES (%u, %d, %d)',[BR][/BR] pid, item_vnum, count);[BR][/BR][BR][/BR] DBManager::instance().DirectQuery(query);[BR][/BR][BR][/BR] sys_log(0, 'OfflineGiveItem: Item %d added to %s', item_vnum, player_name);[BR][/BR]}
Veritabanı Yapısı
Item tablosunun doğru yapılandırıldığından emin olun. owner_id, vnum, count gibi alanlar eksiksiz olmalıdır. Aksi takdirde sistem hata verebilir.
Sistemin Güvenliği
Bu tür sistemlerde mutlaka yetkilendirme kontrolleri yapılmalıdır. Sadece admin kullanıcılar bu işlemi gerçekleştirebilmelidir. Aksi halde sunucuda büyük dengesizliklere yol açabilir.
Ekstra Özellikler
Bu sisteme loglama, item türü kontrolü, max slot limiti gibi ekstra özellikler eklenebilir. Bu sayede hem güvenli hem de esnek bir sistem oluşturulabilir.
Sonuç
Murat K'nın önerdiği bu sistem sayesinde Metin2 özel sunucularında çevrimdışı oyunculara kolayca item verilebilir. Bu tür gelişmiş sistemler Metin2 Lobby kullanıcıları tarafından sıkça tercih edilmektedir.
Kaynaklar
Metin2 Lobby - Metin2 Sunucu Geliştirme
Murat K - Giving Items to Offline Players [C++] Metin2 Lobby
When developing custom Metin2 servers, you may sometimes need to give items to players while they are offline. This process is usually handled through admin commands or special event systems. However, in this article, we will examine how to implement an offline item-giving system in C++, based on a method suggested by developer Murat K.
What Is Offline Item Giving?
This system allows certain items to be directly transferred into a player’s inventory or storage even while they are offline. It is especially useful for giving rewards, applying penalties, or distributing special event prizes.
How Does The System Work?
First, the player’s character information is retrieved from the database. If the player is offline, the item addition process is performed directly via the database using SQL queries.
Coding Phase
Below is a simplified C++ function example:
Kod:
void OfflineGiveItem(const char* player_name, int item_vnum, int count) {[BR][/BR][BR][/BR] // Fetch player ID[BR][/BR] DWORD pid = GetPlayerIDByName(player_name);[BR][/BR] if (!pid) {[BR][/BR] sys_log(0, 'OfflineGiveItem: Player not found!');[BR][/BR] return;[BR][/BR] }[BR][/BR][BR][/BR] // Add item via SQL[BR][/BR] char query[512];[BR][/BR] snprintf(query, sizeof(query),[BR][/BR] 'INSERT INTO item (owner_id, vnum, count) VALUES (%u, %d, %d)',[BR][/BR] pid, item_vnum, count);[BR][/BR][BR][/BR] DBManager::instance().DirectQuery(query);[BR][/BR][BR][/BR] sys_log(0, 'OfflineGiveItem: Item %d added to %s', item_vnum, player_name);[BR][/BR]}
Database Structure
Ensure that the item table is properly configured with fields such as owner_id, vnum, and count. Otherwise, the system may produce errors.
System Security
Authorization checks must be implemented in such systems. Only admin users should be able to perform these operations, otherwise, it could cause major imbalances in the server.
Additional Features
Extra features like logging, item type checking, maximum slot limits, etc., can be added to the system. This makes it both secure and flexible.
Conclusion
Thanks to the system suggested by Murat K, items can easily be given to offline players on custom Metin2 servers. Such advanced systems are frequently preferred by Metin2 Lobby users.
Resources
Metin2 Lobby - Metin2 Server Development
