Hallo,
ich versuche seit paar Tagen herauszufinden wie die Berechnung des Mob_drop_item Liste funktioniert.
Ich bin auf folgende Funktion gestoßen, aber kann mir nichts zusammenbilden.
Deswegen Frage ich euch (Paar von euch die mehr Erfahrung in C haben und die Methode erklären können wie die Brechung funktioniert.
Code
- 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 (!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->GetPremiumRemainSeconds(PREMIUM_ITEM) > 0 ||
- pkKiller->IsEquipUniqueGroup(UNIQUE_GROUP_DOUBLE_ITEM))
- iDeltaPercent += iDeltaPercent;
- if (pkKiller->GetPoint(POINT_PC_BANG_DROP_BONUS) > 0)
- {
- if (pkKiller->IsPCBang() == true)
- iDeltaPercent += iDeltaPercent * pkKiller->GetPoint(POINT_PC_BANG_DROP_BONUS)/100;
- }
- iRandRange = 4000000;
- iRandRange = iRandRange * 100 /
- (100 +
- CPrivManager::instance().GetPriv(pkKiller, PRIV_ITEM_DROP) +
- pkKiller->IsEquipUniqueItem(UNIQUE_ITEM_DOUBLE_ITEM)?100:0);
- if (distribution_test_server) iRandRange /= 3;
- return true;
- }