[C++]İTEM SİLME SİSTEMİNDE İSTEDİĞİNİZ İTEMİN SİLİNMEMESİ

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Merhaba item sil sistemi kullanan arkadaşlar biliyorlar ki kitli itemi silme sorunu vardı ve bunun fixini paylaştı soru cevapda bir konu gördüm ve yapmak isteyen arkadaşlar için var olan sisteme ekleyerek size sunmak istedim.Sistem amacı kodu belirlenen nesnenin silinmesini engelleme atıyorum pet, ben pet üzerinden örnek vereceğim.

Öncelikle char_item.cpp açılır;

Kod:
if (item->GetType() == ITEM_WEAPON || item->GetType() == ITEM_ARMOR || item->GetType() == ITEM_BELT

Bu kodu arattıktan sonra item_proto.txt açın silinmesini istemediğiniz itemin kodunu aratın atıyorum ben 53001 adlı petin silinmemesini ayarlayacağım bunu düzeltebilirsiniz tabii.

kodun en başındaki tanımlamayı alın petinki ITEM_QUEST


bu ITEM_QUEST'i kopyalıyoruz ve yukarıda verdiğim ITEM_WEAPON kısmına ekliyoruz şu şekilde;



Sonra bu kodu aratıyoruz; (ITEM_QUEST'i tanımladığımız yerin hemen üstünde ki)
Kod:
if (true == item->isLocked())         return false;

Ve altına bu kodu ekliyoruz;
Kod:
if (item->GetVnum() == 53001) //engellediğiniz nesnenin kodunu yazın         return false;

Ve son olarak game'yi build ediyoruz işlem tamam oyun içi uyarı vermez ama itemi silemezsiniz.
Bahsettiğim in paylaştığı fix;


Not: Locale_string'e eklemeyi unutmayın :D
Kanıt;

25bhvn.gif


Diğer alternatif;



Metin2 Özel Sunucularında [C++] ile Item Silme Sisteminin Kontrolü

Metin2 özel sunucu geliştirme sürecinde karşılaşılan yaygın problemlerden birisi, özel itemlerin veya belirli itemlerin silinmemesi için sistemsel müdahaleler yapmaktır. Özellikle PvP sunucularında özel ekipmanlar, koleksiyon itemleri ya da sınırlı sürüm ödüller gibi değerli eşyaların silinmemesi büyük önem taşır. Bu yazıda, [C++] tabanlı bir sunucu üzerinde item silme sisteminin nasıl özelleştirileceğini ve belirli itemlerin silinmemesini sağlayacak yapıyı adım adım inceleyeceğiz.

Item Silme Sistemi Nedir?
Metin2 sistemlerinde oyuncuların envanterinde yer alan itemler, belli durumlarda silinir. Örneğin, itemin süresi dolmuşsa, envanter doluysa ya da belli bir işlem sırasında sistemsel olarak silinmesi isteniyorsa bu işlem yapılır. Bu silme işlemleri genellikle game_src içindeki fonksiyonlar tarafından yönetilir. Ancak bazı itemlerin kalıcı olması veya silinmemesi istenebilir. İşte bu noktada, geliştiricilerin özel kontroller yapması gerekir.

Neden Bazı Itemlerin Silinmemesi Gerekebilir?
Özel sunucularda bazı itemler, oyuncuların prestijini temsil eder. Bu itemler genellikle:
- Turnuva ödülleri
- Sınırlı süreli etkinlik ödülleri
- PvP zaferleriyle elde edilen koleksiyon itemleri
- VIP üyelik ödülleri
olabilir. Bu tür itemlerin silinmemesi, hem oyuncu sadakatini artırır hem de sunucu markasının oluşmasında kritik rol oynar.

Silme Sistemini Özelleştirmek
Silme işlemini özelleştirmek için, game_src içindeki item_remove fonksiyonuna müdahale etmek gerekir. Bu fonksiyon, bir itemin silinip silinmeyeceğini kontrol eder. Biz bu fonksiyonu genişleterek belirli item ID’lerinin silinmesini engelleyebiliriz.

Öncelikle, item silme fonksiyonunun bulunduğu dosyayı bulmalıyız. Genellikle bu fonksiyon char_item.cpp veya benzeri bir dosyada yer alır. Silme işlemi yapılırken, item ID’sine göre kontrol yapmamız gerekir. Aşağıdaki gibi bir kontrol bloğu eklemek yeterlidir:

if (item->GetVnum() == 70001 || item->GetVnum() == 70002)
{
return false; // Silme işlemine izin verme
}

Not: Buradaki 70001 ve 70002 örnek item ID’leridir. Gerçek ID’leri kendi sunucunuza göre değiştirmeniz gerekir. Bu ID’ler genellikle item_proto tablosunda tanımlıdır.

Python Tarafında UI ile Entegrasyon (Opsiyonel)
Oyuncuya, bir itemin silinmeyeceğini belirtmek için UI tarafında da görsel bir gösterim yapılabilir. UIScript dosyalarında, özel itemlerin etiketlerine 'Silinebilir Değil' gibi bir uyarı eklenebilir. Bu, oyuncunun yanlışlıkla bu itemleri atmasını engeller.

Sunucu Performansına Etkisi
Bu tip özel kontroller, performans üzerinde minimum düzeyde bir etkiye sahiptir. Ancak çok sayıda item ID’si eklenirse, bu kontrollerin hash map veya unordered_set gibi veri yapılarında tutulması önerilir. Bu sayede arama maliyeti O(1) seviyesine düşer.

Sonuç
Metin2 özel sunucularında item silme sistemini özelleştirmek, hem oyuncu deneyimini artırır hem de sunucunuzun farklılaşmasını sağlar. [C++] tabanlı yapılar üzerinden yapılan bu tür geliştirmeler, sunucu güvenliğini ve kontrolleri daha da güçlendirir. Metin2Lobby olarak, tüm geliştiricilere kaynak kodlama konusunda destek vermeye devam ediyoruz.


Controlling Item Deletion System with [C++] in Metin2 Private Servers

One of the common issues encountered during the development of Metin2 private servers is ensuring that certain special items are not deleted. Especially on PvP servers, it's important to preserve valuable equipment, collection items, or limited edition rewards. In this article, we'll examine step by step how to customize the item deletion system on a [C++] based server and ensure certain items are not deleted.

What is the Item Deletion System?
In Metin2 systems, items in a player's inventory can be deleted under specific circumstances. For example, if an item has expired, the inventory is full, or the system requires deletion during a process. These deletion processes are usually handled by functions within game_src. However, some items may need to remain permanent or protected from deletion. This is where developers must implement custom checks.

Why Should Some Items Not Be Deleted?
Some items on private servers represent a player's prestige. These items are often:
- Tournament rewards
- Limited event rewards
- Collection items obtained through PvP victories
- VIP membership rewards
Ensuring these items are not deleted increases player loyalty and plays a crucial role in building the server's brand.

Customizing the Deletion System
To customize the deletion process, you must modify the item_remove function within game_src. This function controls whether an item should be deleted. We can extend this function to prevent deletion of specific item IDs.

First, locate the file containing the deletion function. Usually found in char_item.cpp or a similar file. When performing the deletion check, we need to verify the item ID. Adding a control block like below is sufficient:

if (item->GetVnum() == 70001 || item->GetVnum() == 70002)
{
return false; // Do not allow deletion
}

Note: Here, 70001 and 70002 are example item IDs. You must replace them with your actual IDs according to your server. These IDs are typically defined in the item_proto table.

Integration with UI via Python (Optional)
To indicate to players that an item cannot be deleted, visual indicators can be added on the UI side. In UIScript files, labels such as 'Non-deletable' can be added to special items, preventing players from accidentally discarding them.

Performance Impact on Server
Such custom checks have a minimal performance impact. However, if many item IDs are added, it is recommended to store these checks in data structures like hash map or unordered_set. This reduces lookup cost to O(1).

Conclusion
Customizing the item deletion system in Metin2 private servers enhances the player experience and helps differentiate your server. Improvements made through [C++] based structures further strengthen server security and controls. At Metin2Lobby, we continue to support all developers in source code development.
 

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

Benzer konular

Geri
Üst Alt