Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
konudaki arkadaşın verdiği adımları izleyince 3 envanterli game'lerde bi değişiklik olmuyor. Forumda rastladığım üzere bu konudan müzdarip arkadaslara rastladım.game/src/ [/FONT]input_main.cpp açılır
aratılır
Kod:
[COLOR=#333333]} else if(p->pos >= 90){[/COLOR]
değiştirilir
Kod:
[COLOR=#333333]} else if(p->pos >= 135){[/COLOR]
Verdiğim kodlar 3. envanterdeki + basma sorunun çözümüdür.
C++ ile Metin2'de 3 Envanter Sistemi ve Basma Hatası Düzeltme
Metin2 özel sunucularında gelişmiş envanter sistemleri, oyuncu deneyimini artırmak açısından kritik öneme sahiptir. Bu yazıda C++ tabanlı Metin2 kaynak kodlarında nasıl 3 envanter sistemi kurulacağını ve bu sistemle ilgili ortaya çıkabilen 'basma' hatasının nasıl düzeltileceğini detaylıca inceleyeceğiz.
3 Envanter Sistemi Nedir?
Orijinal Metin2 oyununda oyuncuların sadece bir adet envanteri vardır. Ancak özel sunucularda geliştirilen 3 envanter sistemi sayesinde, oyuncuların farklı envanterler arasında geçiş yapabilmesi sağlanır. Bu sayede örneğin birinci envanter PvP için, ikinci envanter PvE için, üçüncü envanter ise özel eşyalar için kullanılabilir.
Sistem Nasıl Çalışır?
Bu sistemde game_core üzerinde yapılan değişikliklerle her karakterin 3 farklı envanter slotuna sahip olması sağlanır. Bu slotlar sırasıyla 0, 1 ve 2 numaralarıyla ifade edilir. Oyuncu hangi envanteri kullanıyorsa, o envanterdeki eşyalar aktif olarak kullanılır. Oyuncu envanter değiştirme tuşuna bastığında, client_src[/COORD] üzerinden bir sinyal gönderilir ve sunucu tarafından bu envanter geçişi yapılır.
C++ Kodlama Tarafı[/COORD]
Öncelikle game server programming kapsamında, oyuncu karakteri için yeni bir veri alanı tanımlamalıyız. Bu alan, hangi envanterin aktif olduğunu belirtmek için kullanılır:
Kod:
BYTE bCurrentInventory; // 0, 1 veya 2
Ardından, eşya kullanımında ve taşıma işlemlerinde bu değeri kontrol eden fonksiyonları güncellememiz gerekir. Örneğin bir item kullanıldığında hangi envanterden alındığına göre farklı işlemler yapılabilir.
Basma Sorunu Nedir?
3 envanter sistemi kurulduğunda, bazı durumlarda oyuncu eşya taşırken ya da envanter geçişi yaparken 'basma' hatası oluşabiliyor. Bu hata, eşyanın birden fazla envanterde aynı anda görünmesine veya eşya kaybına neden olabilir.
Fix Nasıl Uygulanır?[/COORD]
Bu sorunun temel nedeni, envanter geçişi sırasında DB Core'da eşya verilerinin senkronize edilmemesidir. Çözüm için envanter geçişi yapıldığında, mevcut envanter verilerinin güvenli bir şekilde DB'ye yazılması sağlanmalıdır. Ayrıca, eşya taşınması sırasında geçici envanter kontrolü eklenmelidir:
Kod:
if (IsItemInActiveInventory(itemID, bCurrentInventory)) { return true; }
Güvenlik ve Performans[/COORD]
Sistemi entegre ederken performans kaybı yaşamamak adına, envanter geçişlerinin minimum seviyede DB işlemi gerektirecek şekilde tasarlanması gerekir. Ayrıca, güvenlik açısından tüm envanter geçişlerinde kullanıcı kimliği kontrolü yapılmalıdır.
Sonuç
3 envanter sistemi, Metin2 özel sunucularında büyük avantaj sağlar. Ancak doğru uygulanmadığında basma gibi ciddi sorunlara neden olabilir. Bu rehber sayesinde C++ tabanlı source edit işlemlerini güvenli şekilde gerçekleştirebilirsiniz. Daha fazla sistem ve kaynak kodu için Metin2Lobby sitesini takip etmeyi unutmayın.
3 Inventory System and Pressing Fix with C++ in Metin2
Advanced inventory systems in Metin2 private servers are crucial for enhancing player experience. In this article, we will examine in detail how to implement a 3-inventory system on C++-based Metin2 source code and how to fix the 'pressing' bug associated with this system.
What is the 3-Inventory System?
In the original Metin2 game, players only have one inventory. However, in private servers, the 3-inventory system allows players to switch between different inventories. This way, for example, the first inventory can be used for PvP, the second for PvE, and the third for special items.
How Does the System Work?
In this system, modifications made on the game_core allow each character to have 3 different inventory slots. These slots are labeled as 0, 1, and 2. Depending on which inventory the player uses, the items in that inventory become active. When the player presses the inventory switch key, a signal is sent via client_src, and the server handles the transition.
C++ Coding Side
Firstly, within game server programming, we must define a new data field for the player character. This field indicates which inventory is currently active:
Kod:
BYTE bCurrentInventory; // 0, 1, or 2
Then, functions handling item usage and movement must be updated to check this value. For instance, depending on which inventory an item is taken from during use, different actions can be performed.
What is the Pressing Issue?
After implementing the 3-inventory system, sometimes a 'pressing' error occurs when the player moves items or switches inventories. This error can cause the same item to appear in multiple inventories simultaneously or lead to item loss.
How is the Fix Applied?
The root cause of this issue is the failure to synchronize item data in the DB Core during inventory transitions. To resolve this, when switching inventories, current inventory data must be safely written to the database. Additionally, temporary inventory checks should be added during item movement:
Kod:
if (IsItemInActiveInventory(itemID, bCurrentInventory)) { return true; }
Security and Performance
To avoid performance loss when integrating the system, inventory transitions should be designed to require minimal database operations. Also, user identity checks must be performed on all inventory transitions for security purposes.
Conclusion
The 3-inventory system provides great advantages in Metin2 private servers. However, if not implemented correctly, it can lead to serious issues like pressing bugs. With this guide, you can securely perform C++-based source edits. Do not forget to follow Metin2Lobby for more systems and source codes.
