Soru gm için drop level limiti kaldırma

  • Konuyu açan Konuyu açan enes turan
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 5
  • Gösterim Gösterim 105
Herhangi bir konuda danışmak istediğiniz soru varsa bu öneki seçebilirsiniz.

enes turan

Premium Üye
Premium Üye
Yardımsever Üye
Usta Üye
Mesaj
1.072
Çözümler
78
Beğeni
1.292
Puan
1.339
Ticaret Puanı
0
merhabalar mob metin vs düşen dropları daha basit kontrol etmek için böyle bişey yapılabilirmi?

gm karakter ile mob arasında level farkını kaldırıp her level de her mobdan drop almasını sağlayabilirmiyiz?

level_limit kısmını biraz kurcaladım fakat bişey cıkaramadım.
 
Çözüm
item_manager.cpp:
Genişlet Daralt Kopyala
//bul

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

//değiştir

    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());
    }

kullanmak isteyen olursa bu biraz daha işe yarar gibi :D
item_manager.cpp:
Genişlet Daralt Kopyala
bool ITEM_MANAGER::GetDropPct(LPCHARACTER pkChr, LPCHARACTER pkKiller, OUT int& iDeltaPercent, OUT int& iRandRange)

içinde

Kod:
Genişlet Daralt Kopyala
     if (NULL == pkChr || NULL == pkKiller)
        return false;

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

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

bul


Kod:
Genişlet Daralt Kopyala
     if (NULL == pkChr || NULL == pkKiller)
        return false;

    iDeltaPercent = 100;

değiş olcak mı emin değilim ama :D
 
item_manager.cpp:
Genişlet Daralt Kopyala
//bul

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

//değiştir

    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());
    }

kullanmak isteyen olursa bu biraz daha işe yarar gibi :D
 
Çözüm
şöyle de bir şey buldum

eyer mob_drop_item.txt örnek vermek gerekirse


Kod:
Genişlet Daralt Kopyala
Group    Lusifer
{
    Level_limit    75
    Mob    1093
    Type    limit
    1    50082    1    100
    2    80020    1    5
    3    71052    1    25
    4    71032    1    25
    5    71084    50    100
    6    30319    1    400
}

burada leve_limit 75 var ama analamadığım şekilde denedim ama düşmedi şöyle bir şey yaptım

bu level_limiti yoksayan ama bu seferde tüm dropları 400 olmasada 400 gibi gören bir düzenle saçma ama anlamadım pek

Kod:
Genişlet Daralt Kopyala
if ( it->second->GetLevelLimit() <= (DWORD)iLevel )

Kod:
Genişlet Daralt Kopyala
// Level Item Group
{
    itertype(m_map_pkLevelItemGroup) it;
    it = m_map_pkLevelItemGroup.find(pkChr->GetRaceNum());

    if ( it != m_map_pkLevelItemGroup.end() )
    {
        // ↓ LevelLimit kontrolü kaldırıldı ↓
        __typeof(it->second->GetVector()) v = it->second->GetVector();

        for ( DWORD i=0; i < v.size(); i++ )
        {
            DWORD dwVnum = v[i].dwVNum;
            item = CreateItem(dwVnum, v[i].iCount, 0, true);
            if ( item ) vec_item.push_back(item);
        }
    }
}

değiş 2.adet olması gerekiyor bu Level_limit 75 yok sayıyır ve hepsini 400 son olarak görüyor biraz değişk :D
 
martysama Level_limit için bir düzenleme yapmış src üzerinden mob_drop_item.txt dosyasında kullanmamış Level_limit i :) onun için bende bir sorun yok.

eğer level_limit olan varsa tanımlı olan mobda işe yaramayacaktır :)
 
item_manager.cpp:
Genişlet Daralt Kopyala
// Arat

bool ITEM_MANAGER::CreateDropItem(LPCHARACTER pkChr, LPCHARACTER pkKiller, std::vector<LPITEM> & vec_item)
{

// Altına Ekle

int iLevel = pkKiller->GetLevel();

int iDeltaPercent, iRandRange;


// Arat
if (!GetDropPct(pkChr, pkKiller, iDeltaPercent, iRandRange))
        return false;

// Değiştir

// GM'ler için her seviyeden mobdan drop alınmasına izin ver
if (pkKiller->IsGM())
{
    iDeltaPercent = 100;
    iRandRange = 100;
}
else
{
    if (!GetDropPct(pkChr, pkKiller, iDeltaPercent, iRandRange))
        return false;
}

Burada Yaptığımız işlem, yeni değişkenler tanımladık. Bu değişkenlere dropları %100 alabilmek için 100 değerini atadık ve mt2 nin kendi fonksiyonları içerisindeki kontrolü gm kontrolüne ekledik. Test edebilirsin istediğini karşiliycaktır.
 
Geri
Üst