GetDropPct Düzenlemesi

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 3
  • Gösterim Gösterim 163

enes turan

Premium Üye
Premium Üye
Yardımsever Üye
Usta Üye
Mesaj
1.072
Çözümler
78
Beğeni
1.277
Puan
1.339
Ticaret Puanı
0
Merhabalar basit ama kullanışlı bir düzenleme olduğunu düşünüyorum.

Ne işe yarar ?

Bildiğiniz üzere oyunda moblardan, metinlerden vs vs. drop alabilmek için 15 level farkı olayı var ve filesi düzenlerken bu durum baya bi yoruyor.
mob_drop_itemden level_limit üzerinden ayarlanabiliyor fakat test ederken ve drop ayarlarken zaman kaybı.
yaptığım düzenleme ile 'GM' karakterinin level sınırını kaldırıyoruz ve her levelde şansa göre drop alabiliyor.

!!NOT: %100 drop almaz mob_drop_item.txt dosyasındaki şans faktörüne göre drop atar.​

item_manager.cpp:
Genişlet Daralt Kopyala
//bul
bool ITEM_MANAGER::GetDropPct
{
...
...
}
// kod bloğunu değiştir
#define DISABLE_DROPPCT // #only test server x3 droppct disable
bool ITEM_MANAGER::GetDropPct(LPCHARACTER pkChr, LPCHARACTER pkKiller, OUT int& iDeltaPercent, OUT int& iRandRange)
{
     if (NULL == pkChr || NULL == pkKiller)
        return false;

    int iLevel = pkKiller->GetLevel();
    iDeltaPercent = 100;

    if (pkKiller->IsGM())
    {
        iDeltaPercent = 100;
    }
    else if (!pkChr->IsStone() && pkChr->GetMobRank() >= MOB_RANK_BOSS)
    {
        iDeltaPercent = PERCENT_LVDELTA_BOSS(pkKiller->GetLevel(), pkChr->GetLevel());
    }
    else
    {
        iDeltaPercent = PERCENT_LVDELTA(pkKiller->GetLevel(), pkChr->GetLevel());
    }

    BYTE bRank = pkChr->GetMobRank();

    if (1 == number(1, 50000))
        iDeltaPercent += 1000;
    else if (1 == number(1, 10000))
        iDeltaPercent += 500;

    sys_log(3, "CreateDropItem for level: %d rank: %u pct: %d", iLevel, bRank, iDeltaPercent);
    iDeltaPercent = iDeltaPercent * CHARACTER_MANAGER::instance().GetMobItemRate(pkKiller) / 100;

    //if (pkKiller->GetPoint(POINT_MALL_ITEMBONUS) > 0)
    //iDeltaPercent += iDeltaPercent * pkKiller->GetPoint(POINT_MALL_ITEMBONUS) / 100;
    // ADD_PREMIUM
    if (pkKiller->GetPremiumRemainSeconds(PREMIUM_ITEM) > 0 ||
            pkKiller->IsEquipUniqueGroup(UNIQUE_GROUP_DOUBLE_ITEM))
        iDeltaPercent += iDeltaPercent;
    // END_OF_ADD_PREMIUM

    iRandRange = 4000000;
    iRandRange = iRandRange * 100 /
        (100 +
         CPrivManager::instance().GetPriv(pkKiller, PRIV_ITEM_DROP) +
         (pkKiller->IsEquipUniqueItem(UNIQUE_ITEM_DOUBLE_ITEM)?40:0));

#ifndef DISABLE_DROPPCT
    if (distribution_test_server) iRandRange /= 3;
#endif

    return true;
}
 
bence gm yerine oyuncuya açmak daha mantıklı geldi bana
Örnegin 120 lwl karakter 5 lwl metinden mobdan drop alabilir saçma bence. Kodun amacı drop ayarlamalarını yaparken kolaylık olsun diye sadece. Normal oyuncuya yaparsan piyasa kalmaz 😁
 
Geri
Üst