Progression Monks, we have work to do.

Discussion in 'Melee' started by falendar, Dec 22, 2015.

  1. falendar Lorekeeper

    Ok so prathun is still busy with a lot of stuff but he hasn't forgotten about us. In the mean time he has provided some of the code that is used in hth calculations. I am hoping someone can understand this before I try and figure it out myself so lets get to work. :)

    if (AttackerIsMelee && AttackerLevel > 50 || AttackerIsMonk)
    {
    maxextra = 220;
    chance = 45;
    minusfactor = 100;
    if ((AttackerLevel > 50)&&(AttackerLevel <= 55))
    {
    maxextra = 245;
    chance = 35;
    minusfactor = 80;
    }
    else if ((AttackerLevel > 55)&&(AttackerLevel < 60))
    {
    maxextra = 265;
    chance = 28;
    minusfactor = 70;
    if (AttackerIsMonk)
    {
    maxextra = 285;
    chance = 23;
    minusfactor = 65;
    }
    }
    else if ((AttackerLevel >= 60) && (AttackerLevel < 63))
    {
    maxextra = 285;
    chance = 23;
    minusfactor = 65;
    if (AttackerIsMonk)
    {
    maxextra = 290;
    chance = 21;
    minusfactor = 60;
    }
    }
    else if ((AttackerLevel >= 63) && (AttackerLevel < 65))
    {
    maxextra = 290;
    chance = 21;
    minusfactor = 60;
    if (AttackerIsMonk)
    {
    maxextra = 295;
    chance = 19;
    minusfactor = 55;
    }
    }
    else if((AttackerLevel >= 65) && (AttackerLevel < 67))
    {
    maxextra = 295;
    chance = 19;
    minusfactor = 55;
    if (AttackerIsMonk)
    {
    maxextra = 300;
    chance = 17;
    minusfactor = 50;
    }
    }
    else if((AttackerLevel >= 67) && (AttackerLevel < 70))
    {
    maxextra = 300;
    chance = 19;
    minusfactor = 55;
    if (AttackerIsMonk)
    {
    maxextra = 310;
    chance = 17;
    minusfactor = 50;
    }
    }
    else if(AttackerLevel >= 70 && (AttackerLevel < 72))
    {
    maxextra = 305;
    chance = 19;
    minusfactor = 55;
    if (AttackerIsMonk)
    {
    maxextra = 320;
    chance = 17;
    minusfactor = 50;
    }
    }
    else if(AttackerLevel >= 72 && (AttackerLevel < 75))
    {
    maxextra = 310;
    chance = 17;
    minusfactor = 50;
    if (AttackerIsMonk)
    {
    maxextra = 325;
    chance = 15;
    minusfactor = 45;
    }
    }
    else if(AttackerLevel >= 75 && (AttackerLevel < 77))
    {
    maxextra = 315;
    chance = 17;
    minusfactor = 50;
    if (AttackerIsMonk)
    {
    maxextra = 330;
    chance = 15;
    minusfactor = 45;
    }
    }
    else if(AttackerLevel >= 77 && (AttackerLevel < 80))
    {
    maxextra = 325;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 335;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 80 && (AttackerLevel < 82))
    {
    maxextra = 335;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 345;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 82 && (AttackerLevel < 85))
    {
    maxextra = 345;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 355;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 85 && AttackerLevel < 87)
    {
    maxextra = 355;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 365;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 87 && AttackerLevel < 90)
    {
    maxextra = 365;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 375;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 90 && AttackerLevel < 92)
    {
    maxextra = 375;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 385;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 92 && AttackerLevel < 95)
    {
    maxextra = 380;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 390;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 95 && AttackerLevel < 97)
    {
    maxextra = 385;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 395;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 97 && AttackerLevel < 100)
    {
    maxextra = 390;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 400;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 100 && AttackerLevel < 102)
    {
    maxextra = 395;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 405;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 102 && AttackerLevel < 105)
    {
    maxextra = 400;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 410;
    chance = 15;
    minusfactor = 40;
    }
    }
    else if(AttackerLevel >= 105)
    {
    maxextra = 405;
    chance = 17;
    minusfactor = 45;
    if (AttackerIsMonk)
    {
    maxextra = 415;
    chance = 15;
    minusfactor = 40;
    }
    }
    }
    else
    {
    maxextra = 210;
    chance = 49;
    minusfactor = 105;
    }

    int basebonus=attack-minusfactor;
    int percent;
    int dmg_d=damage_done;
    int extrapercent;
    basebonus = basebonus / 2;
    if (basebonus < 10)
    {
    basebonus = 10;
    }
    extrapercent = roll0(basebonus);
    percent = 100+extrapercent;
    if (percent > maxextra)
    {
    percent = maxextra;
    }
    dmg_d = (damage_done * percent) / 100;
    if ((AttackerIsMelee || AttackerIsMonk) && AttackerLevel > 54)
    {
    dmg_d++;
    }
    damage_done = (int)dmg_d;
    return(damage_done);
  2. Lonye Augur

    Please reformat that into [ code ] all of that monk math right here [ / code ] but without spaces. Please.
    Xianzu_Monk_Tunare likes this.
  3. falendar Lorekeeper

    This is what he provided exactly how he provided it. didn't want to mess up anything so posted it as I received it.
  4. mackal Augur

    Monk confirmed not melee :p
  5. Riou EQResource

    Just special rules for Monks so their mods are stronger then rest of melee :p Damage bonus mods used to be bigger difference too :\
  6. mackal Augur

    Yeah I know. I want to see the code the dev cut out :(
  7. Speedyz New Member

    Here try this for readability:

    Code:
    if (AttackerIsMelee && AttackerLevel > 50 || AttackerIsMonk)
    {
        maxextra    = 220;
        chance      = 45;
        minusfactor = 100;
       
        if ((AttackerLevel > 50)&&(AttackerLevel <= 55))
        {
            maxextra    = 245;
            chance      = 35;
            minusfactor = 80;
        }
        else if ((AttackerLevel > 55)&&(AttackerLevel < 60))
        {
            maxextra    = 265;
            chance      = 28;
            minusfactor = 70;
           
            if (AttackerIsMonk)
            {
                maxextra    = 285;
                chance      = 23;
                minusfactor = 65;
            }
        }
     
        else if ((AttackerLevel >= 60) && (AttackerLevel < 63))
        {
            maxextra    = 285;
            chance      = 23;
            minusfactor = 65;
       
            if (AttackerIsMonk)
            {
                maxextra    = 290;
                chance      = 21;
                minusfactor = 60;
            }
        }
       
        else if ((AttackerLevel >= 63) && (AttackerLevel < 65))
        {
            maxextra    = 290;
            chance      = 21;
            minusfactor = 60;
           
            if (AttackerIsMonk)
            {
                maxextra    = 295;
                chance      = 19;
                minusfactor = 55;
            }
        }
       
        else if((AttackerLevel >= 65) && (AttackerLevel < 67))
        {
            maxextra    = 295;
            chance      = 19;
            minusfactor = 55;
           
            if (AttackerIsMonk)
            {
                maxextra    = 300;
                chance      = 17;
                minusfactor = 50;
            }
        }
       
        else if((AttackerLevel >= 67) && (AttackerLevel < 70))
        {
            maxextra    = 300;
            chance      = 19;
            minusfactor = 55;
           
            if (AttackerIsMonk)
            {
                maxextra    = 310;
                chance      = 17;
                minusfactor = 50;
            }
        }
     
        else if(AttackerLevel >= 70 && (AttackerLevel < 72))
        {
            maxextra    = 305;
            chance      = 19;
            minusfactor = 55;
           
            if (AttackerIsMonk)
            {
                maxextra    = 320;
                chance      = 17;
                minusfactor = 50;
            }
        }
       
        else if(AttackerLevel >= 72 && (AttackerLevel < 75))
        {
            maxextra    = 310;
            chance      = 17;
            minusfactor = 50;
           
            if (AttackerIsMonk)
            {
                maxextra    = 325;
                chance      = 15;
                minusfactor = 45;
            }
        }
       
        else if(AttackerLevel >= 75 && (AttackerLevel < 77))
        {
            maxextra    = 315;
            chance      = 17;
            minusfactor = 50;
           
            if (AttackerIsMonk)
            {
                maxextra    = 330;
                chance      = 15;
                minusfactor = 45;
            }
        }
        else if(AttackerLevel >= 77 && (AttackerLevel < 80))
        {
            maxextra    = 325;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 335;
                chance      = 15;
                minusfactor = 40;
            }
        }
        else if(AttackerLevel >= 80 && (AttackerLevel < 82))
        {
            maxextra    = 335;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 345;
                chance      = 15;
                minusfactor = 40;
            }
        }
       
        else if(AttackerLevel >= 82 && (AttackerLevel < 85))
        {
            maxextra    = 345;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 355;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 85 && AttackerLevel < 87)
        {
            maxextra    = 355;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 365;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 87 && AttackerLevel < 90)
        {
            maxextra    = 365;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 375;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 90 && AttackerLevel < 92)
        {
            maxextra    = 375;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 385;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 92 && AttackerLevel < 95)
        {
            maxextra    = 380;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 390;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 95 && AttackerLevel < 97)
        {
            maxextra    = 385;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 395;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 97 && AttackerLevel < 100)
        {
            maxextra    = 390;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 400;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 100 && AttackerLevel < 102)
        {
            maxextra    = 395;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 405;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 102 && AttackerLevel < 105)
        {
            maxextra    = 400;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 410;
                chance      = 15;
                minusfactor = 40;
            }
        }
     
        else if(AttackerLevel >= 105)
        {
            maxextra    = 405;
            chance      = 17;
            minusfactor = 45;
           
            if (AttackerIsMonk)
            {
                maxextra    = 415;
                chance      = 15;
                minusfactor = 40;
            }
        }
    }
    else
    {
        maxextra    = 210;
        chance      = 49;
        minusfactor = 105;
    }
       
    int basebonus=attack-minusfactor;
    int percent;
    int dmg_d=damage_done;
    int extrapercent;
    basebonus = basebonus / 2;
     
    if (basebonus < 10)
    {
        basebonus = 10;
    }
     
    extrapercent = roll0(basebonus);
    percent = 100+extrapercent;
     
    if (percent > maxextra)
    {
        percent = maxextra;
    }
     
    dmg_d = (damage_done * percent) / 100;
     
    if ((AttackerIsMelee || AttackerIsMonk) && AttackerLevel > 54)
    {
        dmg_d++;
    }
     
    damage_done = (int)dmg_d;
    return(damage_done); 
  8. mackal Augur

    Making sense of this:

    This is the part of player damage that is referred to as PC_DAM, damage table, or melee table. Specifically the maxextra. minusfactor makes it harder to roll higher. It is subtracted from attack (calc isn't shown) which I assume is the portion of your attack that is rolled against the "AC sum" or mitigation AC. The ol' "damage interval 20" stuff. If it is, it's based on skill, str or dex (for archery/throwing), and atk from items/spells. damage_done (not shown :( ) is equal to random(1 to 20) * weapon_damage / 10. Which isn't really random, based on your stats and the NPC's stats (this is the mitigation rolls).

    I would love to see the stuff not shown! I also noticed chance isn't used :(
  9. falendar Lorekeeper

    i'll see if he can throw some more code, specifically toward the actual dmg/dly
  10. Thash Zoner

    These are known values.

    My question is, does the damage bonus seen on equipped weapons apply to open fist attacks? Does it scale to 38/39 delay? Or do the tables above justify the lack thereof? Thanks for any clarification.
  11. mackal Augur

    These tables apply to every melee damage.

    EDIT: So not really.

    There are a few things missing from this snippet. I believe if "attack" mentioned in here has to be greater than 115 for this to apply. Chance I believe is also a chance not to apply it, which appears to be missing from this snippet as well.
  12. Brogett Augur

    This will be the base melee hit maths. Nothing really new here, but it's good to see confirmation. On top of that the various single-hit skills (like massive strike, thunderfoot, etc) that have skill_attack listed in them will be plugging into this with a fixed damage_done. Normal weapon hits will be DI roll (1 to 20) * weapon_damage / 2.

    Code:
    my $hit = $db_dex + ceil(int($roll20*$wdam*$skill_mult/10+0.5)*$pcdam);
    Backstab, and probably kick and similar skills also uses a skill bonus multiplier. Itr'll be 2+(bs_skill/50.0), fractional.

    The real interesting thing that has never been worked out before (although we know the shapes and where the asymptotes are) is the AC vs Attack equation. Ie how the DI roll actually works.

    Edit: actually there is something knew in that code, to me at least. I'd always assumed the PCDAM roll was simple between 100 and <something large>, capped at the PCDAM_MAX value. Eg random between 0 and 500, add 100, and then cap to maxextra. What the code here shows is that the <something_large> for the roll is (attack-minusfactor)./2, so more attack not only changes the DI roll but also the PCDAM roll too. Its probably a very minimal change though given it's not uncommon for a good third of hits to be at max value.

    Keep meleeing people & a happy new year...
    Brogett (retired).
  13. mackal Augur

    h2h damage (this is the same as weapon damage) for monks greater than 46 with epic equipped skill is 280 unless your actual skill is higher than 280
    Code:
     skill / 15 + 3
    For delay, same thing with epic applies for skill value and iksar will be 1 for iksar and 0 for non. It also appears iksar will be 0 if an iksar has their monk epic. (this should be milliseconds?)
    Code:
    100 * (iksar - skill / 21 + 38)
  14. Xianzu_Monk_Tunare Augur

    Since I have apparently missed something, what was the point in him giving this info to us? Is there something that they are going to do to further change hth? Because as it is the Damage portion is working as intended. It was the delay side that was not matching the information we were given years ago when they revamped bare HtH dmg to be based off of skill vs level.