- 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.
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:
//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;
}