[ProtPaladin] ShoR Update

Topics: Rawr.ProtPaladin
Aug 21, 2009 at 3:23 AM

Need someone to insert this snippet into the AbilityModel.cs, but before you do, please confirm I can type if statements as I did (where'd then go?) and that a power function exists via ^.  I've never coded in C#, but I pulled this ShoR from TheckHD's Matlab TPS Analysis - http://sites.google.com/site/theckhd/mfiles/ability_recalc.m?attredirects=0 - and inserted it into the code as I think it should look.

It's not exactly clear what ShieldOfRighteousnessBlockValue and JudgementBlockValue are unless those are set from T8 Set bonus and Libram proc, respectively, then I have to ask where Stats.HolyShieldBlockValue went.  *shrug*  Regardless, as long as all of that combined is a final block value, this is the code you want. 

 

case Ability.ShieldOfRighteousness:
                   
  if (Stats.BlockValue + Stats.ShieldOfRighteousnessBlockValue + 1f / 3f * Stats.JudgementBlockValue) + 520f) < 2400f
    {baseDamage = (Stats.BlockValue + Stats.ShieldOfRighteousnessBlockValue + 1f / 3f * Stats.JudgementBlockValue) + 520f;}
  elseif (Stats.BlockValue + Stats.ShieldOfRighteousnessBlockValue + 1f / 3f * Stats.JudgementBlockValue) + 520f) < 3160f
    {baseDamage = 2400 + (Stats.BlockValue + Stats.ShieldOfRighteousnessBlockValue + 1f / 3f * Stats.JudgementBlockValue) + 520f - 2400f)*.95 - 6.25f*10f^(-4f)*((Stats.BlockValue + Stats.ShieldOfRighteousnessBlockValue + 1f / 3f * Stats.JudgementBlockValue) + 520f - 2400)^2f;}
  else
    {baseDamage = 2761f;}
  DamageMultiplier *= (1f + Stats.BonusHolyDamageMultiplier);
  critMultiplier = 2.0f;
  break;

Aug 21, 2009 at 5:02 PM

Does that code include the cap on damage that's involved at high levels of Block Value?  That way it won't show an item as having a lot more threat if the person is capped?

Aug 21, 2009 at 5:31 PM

Yes

Aug 24, 2009 at 10:29 PM

Is anyone able to confirm if this has been added to the Prot Paladin module for the next build?

Developer
Sep 3, 2009 at 6:26 PM
Edited Sep 3, 2009 at 6:30 PM

I can confirm that this has not been added yet.  So can you: Go to http://rawr.codeplex.com/SourceControl/ListDownloadableCommits.aspx, click "Browse" on the right side, and navigate to AbilityModel.cs.

Stats.ShieldOfRighteousnessBlockValue is the T8 4-piece bonus, Libram of the Sacred Shield, or Venture Co. Libram of Protection.  I have some concern about this stat because according to the code, the T8 4-piece bonus does not appear to stack with any libram, while discussions around the web seem to indicate that they do stack.

Stats.JudgementBlockValue covers Libram of Obstruction and Tome of the Lightbringer.

Holy Shield block value only applied to the Tier 5 set, which is obsolete in WotLK.  Holy Shield itself does not provide block value, it is a separate damaging ability modeled elsewhere.

According to the file you linked, the +520 is coming from the Shield of Righteousness ability itself, it's not involved in the calculation of diminishing returns.

Also, according to http://www.worldofwarcraft.com/patchnotes/#3.2.0, the values 2400 and 2761 are actually supposed to be 30 times and 34.5 times the character level respectively.  However, 34.5 * 80 = 2760.  2761 is what you get from the formula, baseDamage = 30 * Character.Level + (0.95f * (blockValue - 2400)) - (0.000625f * (float)Math.Pow(blockValue - 2400, 2)) + 520; when you plug in a blockValue of 3160.  After doing some poking around on World of Logs, I am seeing people hitting for 2761 + 520 = 3281.

With that said, I would also guess that the 3160 value is 39.5 times the character level.  I have not been able to confirm this, but will use this anyway.

Cleaning up the pseudo-code and adjusting for these values gives the following, which I have not tested in any way, shape, or form:

case Ability.ShieldOfRighteousness:
    float blockValue = Stats.BlockValue
+ Stats.ShieldOfRighteousnessBlockValue
+ 1f / 3f * Stats.JudgementBlockValue;
if (blockValue < 30 * Character.Level) {
baseDamage = blockValue + 520;
} else if (blockValue < 39.5 * Character.Level) {
  baseDamage = 30 * Character.Level
+ (0.95f * (blockValue - 30 * Character.Level))
- (0.000625f * (float)Math.Pow(blockValue - 30 * Character.Level, 2))
+ 520;
} else {
baseDamage = 30 * Character.Level
+ (0.95f * 9.5f * Character.Level)
- (0.000625f * (float)Math.Pow(9.5 * Character.Level, 2))
+ 520;
}
DamageMultiplier *= (1f + Stats.BonusHolyDamageMultiplier);
critMultiplier = 1.0f;
break;

 

                case Ability.ShieldOfRighteousness:
                    float blockValue = Stats.BlockValue + Stats.ShieldOfRighteousnessBlockValue + 1f / 3f * Stats.JudgementBlockValue;
                    if (blockValue < 30 * Character.Level) {
                        baseDamage = blockValue + 520;
                    } else if (blockValue < 39.5 * Character.Level) {
                        baseDamage = 30 * Character.Level + (0.95f * (blockValue - 2400)) - (0.000625f * (float)Math.Pow(blockValue - 2400, 2)) + 520;
                    } else {
                        baseDamage = 34.5f * Character.Level + 520;
                    }
                    DamageMultiplier *= (1f + Stats.BonusHolyDamageMultiplier);
                    critMultiplier = 1.0f;

                    break

 

 

 

Developer
Sep 3, 2009 at 10:19 PM

I spoke with solieu via email about the mulitplication on Stats.JudgementBlockValue.  Apparently, that's a pre-3.2 model that accomodated the fact that in a 969 rotation the libram would not be up the entire time.

In patch 3.2 it is up the entire time, so I believe we should drop the 1/3 out of the equation.

I'm going to test this some and see how it works.

Developer
Sep 4, 2009 at 3:21 PM

I'll have a quick chat with Solieu on MSN as to if he thinks he'll have time to get this in. I have some code in ProtWarr that can basically be copied over since the formula is the same, so if he doesn't I can try to get it in for him. :)

Developer
Sep 4, 2009 at 3:31 PM

I uploaded patch 3754 to address this yesterday.

Developer
Sep 4, 2009 at 5:56 PM

3754 & 3769 applied

Developer
Sep 4, 2009 at 7:04 PM

Thank you! :)