- Discord
- pvpers.gg
Metin2 Rastgele Item Seviyesi Düşürme Sistemi
mob_drop_item tablosunda her eşyanın tüm refinement seviyeleri (+0, +1 … +9) için ayrı ayrı kayıt oluşturmak yerine, daha pratik bir yöntem uygulanabilir. Bu düzenleme sayesinde, her eşya dropliste yalnızca bir kez tanımlanır ve eşya oluşturulurken seviye rastgele olarak belirlenir. Bu örnekte seviye aralığı +0 ile +4 arasında rastgele atanmakta.
Kod içerisindeki mantık, düşen eşyanın seviyesi +5’in altındaysa yeni bir seviye oluşturacak şekilde yapılandırılmıştır. Yorum satırları üzerinden sistem, farklı ihtiyaçlara uygun şekilde kolayca özelleştirilebilir.
commonDefines.h:
#define ENABLE_DROP_ITEM_RANDOM_LEVEL //Öğe düşerken rastgele seviye (+0 – +4) özelliğini etkinleştirir
item.h:
//Bul:
bool IsEquipable() const;
//Hemen altına ekle:
#ifdef ENABLE_DROP_ITEM_RANDOM_LEVEL
bool IsEquipment() const;
LPITEM GetRandomLevelItem();
#endif
char_battle.cpp:
//Tüm değişiklikler "Reward" fonksiyonunda
//Bul:
item = s_vec_item[0];
//Hemen altına ekle:
#ifdef ENABLE_DROP_ITEM_RANDOM_LEVEL
item = item->GetRandomLevelItem();
#endif
//Bul (2 kez):
item = s_vec_item[iItemIdx--];
//Hemen altına ekle:
#ifdef ENABLE_DROP_ITEM_RANDOM_LEVEL
item = item->GetRandomLevelItem();
#endif
Bu şekilde, droplar sırasında +0 ile +4 arasında rastgele bir seviye atanır; +5 ve üzerindeki eşyalar ise olduğu gibi kalır. Yorum satırları, farklı seviye aralıkları ya da koşullar tanımlamak için kolayca düzenlenebilir.
Notlar
- Rastgele refinement seviyesi atanması yalnızca +0 ile +4 aralığında çalışacak şekilde yapılandırılmıştır. Farklı bir aralık isteniyorsa, ilgili satırlarda düzenleme yapılması yeterlidir.
- Aynı itemin farklı + seviyeleri için ayrı ayrı satır eklemeye gerek kalmaz; droplar sadeleşir, tablo yönetimi kolaylaşır.
- srand ve rand() kullanımı sayesinde her çağrıda zaman temelli bir rastgelelik sağlanır.
- Kod örneği içinde yer alan yorumlar üzerinden sistem, farklı ihtiyaçlara göre kolayca özelleştirilebilir.
- Sistemin çalışabilmesi için
ENABLE_DROP_ITEM_RANDOM_LEVEL
makrosunun tanımlanmış olması gereklidir.