View Single Post
  #2  
Old 11-07-2019, 10:31 PM
Kingly_Krab
Administrator
 
Join Date: May 2013
Location: United States
Posts: 1,589
Default

Seems to be that damage has an additional modifier from what I can see.
Code:
if (npc->GetMinDMG() == 0 && npc->GetMaxDMG() == 0) {
    int min_dmg = scale_data.min_dmg;
    if (RuleB(Combat, UseNPCDamageClassLevelMods)) {
        int32 class_level_damage_mod = GetClassLevelDamageMod(npc->GetLevel(), npc->GetClass());
        min_dmg = (min_dmg * class_level_damage_mod) / 220;

        LogNPCScaling("ClassLevelDamageMod::min_dmg base: [{}] calc: [{}]", scale_data.min_dmg, min_dmg);
    }

    npc->ModifyNPCStat("min_hit", std::to_string(min_dmg).c_str());
}
if (npc->GetMaxDMG() == 0) {
    int max_dmg = scale_data.max_dmg;
    if (RuleB(Combat, UseNPCDamageClassLevelMods)) {
        int32 class_level_damage_mod = GetClassLevelDamageMod(npc->GetLevel(), npc->GetClass());
        max_dmg = (scale_data.max_dmg * class_level_damage_mod) / 220;

        LogNPCScaling("ClassLevelDamageMod::max_dmg base: [{}] calc: [{}]", scale_data.max_dmg, max_dmg);
    }

    npc->ModifyNPCStat("max_hit", std::to_string(max_dmg).c_str());
 }

Code:
uint32 NpcScaleManager::GetClassLevelDamageMod(uint32 level, uint32 npc_class)
{
    uint32 multiplier = 0;

    switch (npc_class) {
        case WARRIOR: {
            if (level < 20) {
                multiplier = 220;
            }
            else if (level < 30) {
                multiplier = 230;
            }
            else if (level < 40) {
                multiplier = 250;
            }
            else if (level < 53) {
                multiplier = 270;
            }
            else if (level < 57) {
                multiplier = 280;
            }
            else if (level < 60) {
                multiplier = 290;
            }
            else if (level < 70) {
                multiplier = 300;
            }
            else {
                multiplier = 311;
            }
            break;
        }
        case DRUID:
        case CLERIC:
        case SHAMAN: {
            if (level < 70) {
                multiplier = 150;
            }
            else {
                multiplier = 157;
            }
            break;
        }
        case BERSERKER:
        case PALADIN:
        case SHADOWKNIGHT: {
            if (level < 35) {
                multiplier = 210;
            }
            else if (level < 45) {
                multiplier = 220;
            }
            else if (level < 51) {
                multiplier = 230;
            }
            else if (level < 56) {
                multiplier = 240;
            }
            else if (level < 60) {
                multiplier = 250;
            }
            else if (level < 68) {
                multiplier = 260;
            }
            else {
                multiplier = 270;
            }
            break;
        }
        case MONK:
        case BARD:
        case ROGUE:
        case BEASTLORD: {
            if (level < 51) {
                multiplier = 180;
            }
            else if (level < 58) {
                multiplier = 190;
            }
            else if (level < 70) {
                multiplier = 200;
            }
            else {
                multiplier = 210;
            }
            break;
        }
        case RANGER: {
            if (level < 58) {
                multiplier = 200;
            }
            else if (level < 70) {
                multiplier = 210;
            }
            else {
                multiplier = 220;
            }
            break;
        }
        case MAGICIAN:
        case WIZARD:
        case NECROMANCER:
        case ENCHANTER: {
            if (level < 70) {
                multiplier = 120;
            }
            else {
                multiplier = 127;
            }
            break;
        }
        default: {
            if (level < 35) {
                multiplier = 210;
            }
            else if (level < 45) {
                multiplier = 220;
            }
            else if (level < 51) {
                multiplier = 230;
            }
            else if (level < 56) {
                multiplier = 240;
            }
            else if (level < 60) {
                multiplier = 250;
            }
            else {
                multiplier = 260;
            }
            break;
        }
    }

    return multiplier;
}
Reply With Quote