Parry Hasting Addon

Warning: Theorycraft inside.

Moderators: Fridmarr, Worldie, Aergis, theckhd

Re: Parry Hasting Addon

Postby Tbdsamman » Thu Jan 28, 2010 12:07 am

I have copied over the code to make the addon use the Ace3 library now and make a debug mode option so you won't get spammed anymore in combat. It also has a proper warning mechanism to alert you when a boss receives parry hasting.

It should be a lot easier to try this out and give me your feedback. If you find a bug, please screenshot it send it my way (with debug mode on preferably).

http://wow.curseforge.com/addons/parry-hasting/
Tbdsamman
 
Posts: 10
Joined: Fri Jan 15, 2010 8:38 am

Re: Parry Hasting Addon

Postby Eyes » Thu Jan 28, 2010 1:29 pm

Downloaded this today to use in raid tonight. Appreciate you writing this up, as a player that switches gear almost every fight I like to know when more expertise then my norm would be beneficial.
Eyes of Laughing Skull
User avatar
Eyes
 
Posts: 5
Joined: Thu Jan 28, 2010 12:54 pm

Re: Parry Hasting Addon

Postby Cliffton » Mon Feb 01, 2010 11:51 am

This is neat. I've been working on a script to parse a combat log and make an attack speed plot to help identify parry hasting bosses.

I will try out this mod and compare with my log parsing script. The script is done but I am still testing and don't want to leap to conclusions yet, suffice it to say that the first edition says that Saurfang does not parry-haste in ICC10.
Cliffton
 
Posts: 17
Joined: Thu Jan 21, 2010 12:19 pm

Re: Parry Hasting Addon

Postby Cliffton » Mon Feb 01, 2010 5:47 pm

The tool I wrote makes graphs.

The script parses a combat log for times of parries and boss autoattacks. The time between autoattacks is plotted, and those autoattacks immediately preceded by a parry are colored red for easy identifcation. The idea is that if a boss parry hastes and there's enough data points, the red dots should look like they are mostly below the blue dots.

Sometimes, if there's enough data, the parry hastes stick out like sore thumbs, as in Icehowl's plot.
Icehowl.png
Icehowl Attack Speed Plot
Icehowl.png (20.06 KiB) Viewed 2522 times


The more data there is, the more confidence one can have in saying that a boss does not parry haste if the sore thumbs are not seen, as in Saurfang's plot.
Deathbringer Saurfang.png
Deathbringer Saurfang Attack Speed Plot
Deathbringer Saurfang.png (25.53 KiB) Viewed 2522 times


The attached .rar archive contains plots and related logfile entries for the following ICC10 bosses. My conclusion on which bosses parry haste is:
Yes (parry haste enabled):
Lady Deathwhisper seems to. I dug into the log data identified by two suspicious red dots, and they are certainly characteristic of a parry haste.

No (parry haste probably not enabled):
High Overlord Saurfang
Deathbringer Saurfang
Prince Valanar (there is a low red dot but it's probably a thunderclap effect wearing off)
Prince Taldaram
Professor Putricide
Rotface
Festergut
Blood-Queen Lana'thel

Maybe:
Lord Marrowgar data is too sparse to say either way, and maybe I need to include Saber Lash to get a better handle on him.

This is the .m-file I created. No one has verified it is correct yet, so some verification of correctness from somebody is probably warranted.
Code: Select all
% Parry-haste Plotter
% Plots combat log data in a way suitable for detecting whether or not a mob has parry haste enabled
% .m-file written for use with Octave, compatibility with Matlab is likely
% Author: Cliffton-Feathermoon

% Clear out data from previous sessions
clear all
close all

function [day,mSecs]=ParseTime(logLine)
[day,rem]=strtok(logLine," ");
[hour,rem]=strtok(rem," :");
[minute,rem]=strtok(rem,":");
[second,rem]=strtok(rem,":.");
[mSecs,rem]=strtok(rem,". ");

mSecs=str2num(mSecs);
mSecs=mSecs+1000*str2num(second);
mSecs=mSecs+60*1000*str2num(minute);
mSecs=mSecs+60*60*1000*str2num(hour);
end

function ParryGibAnalysis( boss, spells, file )
% Constants
UNABLE_TO_OPEN_FILE = "Error: Unable to open file.";
UNABLE_TO_CLOSE_FILE = "Error closing file.";

% Harvest useful data from logfile
parryData=[];
swingData=[];
if( (fh=fopen(file,'r')) )
  while( 0 < (nextLine=fgetl(fh)) )
   if( (strfind(nextLine,boss)) ) % Determine if this line is relevant to boss fight
    if( (regexp(nextLine,["(.*,){5}.",boss,".*PARRY$"])) ) % Determine if this event is a boss parry
     parryData = [parryData; nextLine]; % Contains all events that might cause the boss to parry haste
    elseif( (regexp(nextLine,["(.* .*  )(SWING|SPELL)_(DAMAGE|MISSED),.*,.",boss])) )%need to parse SPELL_DAMAGE, SWING_DAMAGE, and _MISSED
     if( (regexp(nextLine,["^([^,]*,){2}.",boss])) )
      if( (regexp(nextLine,[".*SPELL_(DAMAGE|MISSED).*"])) )
       for( i=(1:length(spells)) )
        if( strfind(nextLine,spells(i){1}) )
         swingData = [swingData; nextLine];
        end
       end
      else
        swingData = [swingData; nextLine];
      end
     end
    end
   end
  end

  % Close logfile
  if( fclose(fh) )
   fwrite( stderr, UNABLE_TO_CLOSE_FILE );
  end

  % Get times from data
  [prevDay,swingTimes]=ParseTime(swingData(1,:));
  for( i=(2:size(swingData,1)) )
   [day,time]=ParseTime(swingData(i,:));
   if(strmatch(day,prevDay))
    swingTimes(i)=time;
   else % Assume 1-day rollover
    swingTimes(i)=time+24*60*60*1000;
   end
   prevDay=day;
  end
 
  [prevDay,parryTimes]=ParseTime(parryData(1,:));
  for( i=(2:size(parryData,1)) )
   [day,time]=ParseTime(parryData(i,:));
   if(strmatch(day,prevDay))
    parryTimes(i)=time;
   else % Assume 1-day rollover
    parryTimes(i)=time+24*60*60*1000;
   end
   prevDay=day;
  end
 
  % Create delta vector
  dSwings=swingTimes(2:length(swingTimes))-swingTimes(1:(length(swingTimes)-1));
 
  % Count parries immediately preceding each swing
  parryCount=zeros(1,length(dSwings));
  j=1; % parryIndex
  for( i=1:length(dSwings) )
   if( j<(length(parryTimes)+1) ) % If there are parries left that haven't been examined
    while( parryTimes(j) < swingTimes(i+1) )
     parryCount(i)=parryCount(i)+1;
     j=j+1;
     if( j>length(parryTimes) ) % If all parries have been examined
      break;
     end
    end
   end
  end
 
  % Compute moving average attack speed
  % Cap severe outliers since moving average is being used as a visual aid
  %temp = dSwings;
  %temp( find(temp>2*mean(temp)) )=2*mean(temp);
  %temp = conv(temp,ones(1,5)/5);
  %movingAverage = temp( 3:(length(temp)-2) );
  % Removed because it's generally not helpful
 
  zPI = find(0==parryCount); % indices of dSwings preceded by zero parries
  oPI = find(1==parryCount); % one parry
  tPI = find(1<parryCount); % two or more parries
  x = 1:length(dSwings);
   
  %plot(x(zPI),dSwings(zPI),'*',"markersize",2,x(oPI),dSwings(oPI),'*r',"markersize",2,x(tPI),dSwings(tPI),'*r',"markersize",3,x,movingAverage);
  plot(x(zPI),dSwings(zPI),'*',"markersize",2,x(oPI),dSwings(oPI),'*r',"markersize",2,x(tPI),dSwings(tPI),'*r',"markersize",3);
  axis([0,length(dSwings),0,3*median(dSwings)]);
%  legend("No parries","One parry","Two or more parries","5-sample average");
  legend("No parries","One parry","Two or more parries");
  title(["Parry Effect on ",boss,"'s Attack Speed"]);
  xlabel("Sample Number");
  ylabel("Time between attacks (ms)");
 
  print([boss,".png"]);
 
  % Write relevant log data for evidence
  if( (fp=fopen( [boss,"_parryData.log"], 'w' )) )
   fdisp( fp, parryData );
   if( fclose( fp ) )
    fwrite( stderr, UNABLE_TO_CLOSE_FILE );
   end
  else
   fwrite( stderr, UNABLE_TO_OPEN_FILE );
  end
 
  if( (fp=fopen( [boss,"_swingData.log"], 'w' )) )
   fdisp( fp, swingData );
   if( fclose( fp ) )
    fwrite( stderr, UNABLE_TO_CLOSE_FILE );
   end
  else
   fwrite( stderr, UNABLE_TO_OPEN_FILE );
  end
 
else
  fwrite( stderr, UNABLE_TO_OPEN_FILE );
end
end

% Script begins here
% Input data
%file="VermouthJan23.txt"; % Combat Log Filename
file="Dec19.txt";
% Names of bosses to analyze
%bossList=[{"Lord Marrowgar"},...
% {"Lady Deathwhisper"},...
% {"High Overlord Saurfang"},...
% {"Deathbringer Saurfang"},...
% {"Rotface"},...
% {"Festergut"},...
% {"Professor Putricide"},...
% {"Prince Taldaram"},...
% {"Prince Valanar"},...
% {"Blood-Queen Lana'thel"}];
%bossList=[{"Gormok the Impaler"},...
% {"Dreadscale"},...
% {"Acidmaw"},...
% {"Lord Jaraxxus"},...
% {"Fjola Lightbane"},...
% {"Eydis Darkbane"},...
% {"Anub'arak"}];
bossList={"Icehowl"};
spells=[]; % Name of boss abilities suspected to coincide with autoattacks (untested)

for( i=1:size(bossList,2) )
fdisp( stdout, ["Now Processing: ", bossList(i){1}] );
fflush( stdout );
ParryGibAnalysis( bossList(i){1}, spells, file );
end
Attachments
ICC10.rar
ICC10 plots (up to Blood-Queen)
(224.9 KiB) Downloaded 88 times
Cliffton
 
Posts: 17
Joined: Thu Jan 21, 2010 12:19 pm

Re: Parry Hasting Addon

Postby theckhd » Fri Feb 05, 2010 9:34 am

That code doesn't work properly in later versions of MATLAB. Somewhere around 7.0, they nerfed nested functions - they still work within function m-files, but not scripts. There's probably a good reason, but not being a computer scientist, I don't know what it is. It's a horrible annoyance for us amateurs though.

In any event, I've re-worked it into two files, a script file that serves as a launcher, and a function file that does all the dirty work. I also fixed a lot of errors MATLAB complained about (apparently calling cell arrays works differently in Octave).

Unfortunately, I don't have any combat logs at work. However, I have lots at home, so I'll run this on some of mine to troubleshoot it and see if my parses agree. I can also go back and check the Ulduar, and Naxx bosses when I get around to it.


Here's the final code I came up with - MATLAB doesn't complain about errors, but I haven't run it on an actual log to test it yet.

Script file:
Code: Select all
clear all
close all

%% File Name
file='Dec19.txt';

%% Names of bosses to analyze

% %ICC
bossList=[{'Lord Marrowgar'},...
{'Lady Deathwhisper'},...
{'High Overlord Saurfang'},...
{'Deathbringer Saurfang'},...
{'Rotface'},...
{'Festergut'},...
{'Professor Putricide'},...
{'Prince Taldaram'},...
{'Prince Valanar'},...
{'Blood-Queen Lana''thel'},...
{'Sindragosa'},...
];

% %ToC
%bossList=[{'Gormok the Impaler'},...
% {'Dreadscale'},...
% {'Acidmaw'},...
% {'Icehowl'},...
% {'Lord Jaraxxus'},...
% {'Fjola Lightbane'},...
% {'Eydis Darkbane'},...
% {'Anub''arak'}];

% bossList={'Icehowl'};


ph_analyze(file,bossList);


Function:
Code: Select all
function ph_analyze(file, bossList)
% Parry-haste Plotter
% Plots combat log data in a way suitable for detecting whether or not a mob has parry haste enabled
% .m-file written for use with Octave, compatibility with Matlab is likely
% Author: Cliffton-Feathermoon
% modified by Theck-Blackrock to work in MATLAB R2008a

for k=1:size(bossList,2)
    fdisp( stdout, ['Now Processing: ', bossList{k}] );
    fflush( stdout );
    ParryGibAnalysis( bossList{k}, spells, file );
end





    function [day,mSecs]=ParseTime(logLine)
        [day,rem]=strtok(logLine,' ');
        [hour,rem]=strtok(rem,' :');
        [minute,rem]=strtok(rem,':');
        [second,rem]=strtok(rem,':.');
        [mSecs,rem]=strtok(rem,'. ');

        mSecs=str2num(mSecs);
        mSecs=mSecs+1000*str2num(second);
        mSecs=mSecs+60*1000*str2num(minute);
        mSecs=mSecs+60*60*1000*str2num(hour);
    end

    function ParryGibAnalysis( boss, spells, file )
        % Constants
        UNABLE_TO_OPEN_FILE = 'Error: Unable to open file.';
        UNABLE_TO_CLOSE_FILE = 'Error closing file.';

        % Harvest useful data from logfile
        parryData=[];
        swingData=[];
        fh=fopen(file,'r');
        if fh~=-1
            nextLine=1; %just to initiate
            while( 0 < nextLine )
                nextLine=fgetl(fh);
                if( (strfind(nextLine,boss)) ) % Determine if this line is relevant to boss fight
                    if( (regexp(nextLine,['(.*,){5}.',boss,'.*PARRY$'])) ) % Determine if this event is a boss parry
                        parryData = [parryData; nextLine]; % Contains all events that might cause the boss to parry haste
                    elseif( (regexp(nextLine,['(.* .*  )(SWING|SPELL)_(DAMAGE|MISSED),.*,.',boss])) )%need to parse SPELL_DAMAGE, SWING_DAMAGE, and _MISSED
                        if( (regexp(nextLine,['^([^,]*,){2}.',boss])) )
                            if( (regexp(nextLine,'.*SPELL_(DAMAGE|MISSED).*')) )
                                for i=(1:length(spells))
                                    if( strfind(nextLine,spells{i}) )
                                        swingData = [swingData; nextLine];
                                    end
                                end
                            else
                                swingData = [swingData; nextLine];
                            end
                        end
                    end
                end
            end

            % Close logfile
            if( fclose(fh) )
                fwrite( stderr, UNABLE_TO_CLOSE_FILE );
            end

            % Get times from data
            [prevDay,swingTimes]=ParseTime(swingData(1,:));
            for i=(2:size(swingData,1))
                [day,time]=ParseTime(swingData(i,:));
                if(strmatch(day,prevDay))
                    swingTimes(i)=time;
                else % Assume 1-day rollover
                    swingTimes(i)=time+24*60*60*1000;
                end
                prevDay=day;
            end

            [prevDay,parryTimes]=ParseTime(parryData(1,:));
            for i=(2:size(parryData,1))
                [day,time]=ParseTime(parryData(i,:));
                if(strmatch(day,prevDay))
                    parryTimes(i)=time;
                else % Assume 1-day rollover
                    parryTimes(i)=time+24*60*60*1000;
                end
                prevDay=day;
            end

            % Create delta vector
            dSwings=swingTimes(2:length(swingTimes))-swingTimes(1:(length(swingTimes)-1));

            % Count parries immediately preceding each swing
            parryCount=zeros(1,length(dSwings));
            j=1; % parryIndex
            for i=1:length(dSwings)
                if( j<(length(parryTimes)+1) ) % If there are parries left that haven't been examined
                    while( parryTimes(j) < swingTimes(i+1) )
                        parryCount(i)=parryCount(i)+1;
                        j=j+1;
                        if( j>length(parryTimes) ) % If all parries have been examined
                            break;
                        end
                    end
                end
            end

            % Compute moving average attack speed
            % Cap severe outliers since moving average is being used as a visual aid
            %temp = dSwings;
            %temp( find(temp>2*mean(temp)) )=2*mean(temp);
            %temp = conv(temp,ones(1,5)/5);
            %movingAverage = temp( 3:(length(temp)-2) );
            % Removed because it's generally not helpful

            zPI = find(0==parryCount); % indices of dSwings preceded by zero parries
            oPI = find(1==parryCount); % one parry
            tPI = find(1<parryCount); % two or more parries
            x = 1:length(dSwings);

            %plot(x(zPI),dSwings(zPI),'*','markersize',2,x(oPI),dSwings(oPI),'*r','markersize',2,x(tPI),dSwings(tPI),'*r','markersize',3,x,movingAverage);
            plot(x(zPI),dSwings(zPI),'*','markersize',2,x(oPI),dSwings(oPI),'*r','markersize',2,x(tPI),dSwings(tPI),'*r','markersize',3);
            axis([0,length(dSwings),0,3*median(dSwings)]);
            %  legend('No parries','One parry','Two or more parries','5-sample average');
            legend('No parries','One parry','Two or more parries');
            title(['Parry Effect on ',boss,'''s Attack Speed']);
            xlabel('Sample Number');
            ylabel('Time between attacks (ms)');

            print([boss,'.png']);

            % Write relevant log data for evidence
            if( (fp==fopen( [boss,'_parryData.log'], 'w' )) )
                fdisp( fp, parryData );
                if( fclose( fp ) )
                    fwrite( stderr, UNABLE_TO_CLOSE_FILE );
                end
            else
                fwrite( stderr, UNABLE_TO_OPEN_FILE );
            end

            if( (fp==fopen( [boss,'_swingData.log'], 'w' )) )
                fdisp( fp, swingData );
                if( fclose( fp ) )
                    fwrite( stderr, UNABLE_TO_CLOSE_FILE );
                end
            else
                fwrite( stderr, UNABLE_TO_OPEN_FILE );
            end

        else
            fwrite( stderr, UNABLE_TO_OPEN_FILE );
        end
    end
end
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
User avatar
theckhd
Moderator
 
Posts: 7953
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby elgguns » Sat Feb 06, 2010 1:51 pm

Cliffton wrote:Maybe:
Lord Marrowgar data is too sparse to say either way, and maybe I need to include Saber Lash to get a better handle on him.


Last time I looked, Marrowgar gets in about 4-6 melee hits before he starts saberlash spamming without any melee until the next cycle (after he comes out of bonestorm). I'm assuming they put those single target physical attacks in to give the tanks time to position him before he cleaves everyone to death. At a glance, it looks like the normal melee attacks only account for roughly 25% of his attacks.

Code: Select all
[19:25:11.729] Lord Marrowgar hits Elgguns 12624 (A: 3561)
[19:25:12.930] Lord Marrowgar hits Elgguns 17137
[19:25:14.630] Lord Marrowgar hits Elgguns 14459 (A: 1745)
[19:25:15.801] Lord Marrowgar hits Elgguns Absorb (17270)
[19:25:17.097] Lord Marrowgar hits Elgguns 12148 (A: 3037, B: 1786)
[19:25:18.175] Lord Marrowgar hits Elgguns 13509 (A: 972, B: 1786)
[19:25:19.429] Lord Marrowgar casts Saber Lash
[19:25:20.621] Lord Marrowgar casts Saber Lash
[19:25:21.840] Lord Marrowgar casts Saber Lash
[19:25:23.083] Lord Marrowgar casts Saber Lash
[19:25:24.533] Lord Marrowgar casts Saber Lash
[19:25:29.844] Lord Marrowgar casts Saber Lash
...etc


I also saw a parry during the saber lashing but it didn't look like parry haste was enabled for it, which makes sense since it looks like a spell.

Code: Select all
Time in braces is the time between attacks

[19:22:50.722] {1.0640} Lord Marrowgar casts Saber Lash
[19:22:51.314] Elgguns hits Lord Marrowgar Parry
[19:22:51.916] {1.1940} Lord Marrowgar casts Saber Lash
[19:22:53.130] {1.2140} Lord Marrowgar casts Saber Lash
[19:22:54.398] {1.2680} Lord Marrowgar casts Saber Lash
elgguns
 
Posts: 2
Joined: Thu Nov 19, 2009 8:07 pm

Re: Parry Hasting Addon

Postby Obor » Sun Feb 07, 2010 3:29 pm

Ardent Defender http://wow.curse.com/downloads/wow-addo ... ender.aspx has the ability to notify you when someone causes a parry on the mob you are tanking as well as a lot of other stuff btw but it doesn't collect the detailed data that you are getting

Ardent Defender will:

* - Announces when Ardent Defender proc's and saves your life, as well as flashing your screen and shaking it to alert you to the averted death.
* - Detects and tells you when someone causes a parry on an NPC you are tanking. Also tells you if you cause a parry on an NPC someone else is tanking.
* - Announces bubblewall usage (when it activates and when it fades)
* - Announce if your taunt fails (and why) or if your Avenger Shield misses.
* - Tracks combat stats such as damage received, damage blocked, damage absorbed.
* - Makes use of LibDataBroker if you have it, to display combat stats and Ardent Defender info.. see screenshots to see what I mean.
* - Tracks & Whispers on usage: Hand of Protection, Sacrifice, Salvation,
Freedom. also Divine Sacrifice, Divine Intervention and Lay On Hands.
* - (Disabled by default) Can annoy you with red screen slashing if Righteous Fury is not active AND you are currently wearing defense gear.
* - Will not announce or track any of the above while in a Battleground, but will work normally while in an Arena.
* - The LDB object displays combat statistics such as how much damage you have absorbed, blocked and received, how many times (since reload)
Ardent Defender has saved your life, as well as how much Ardent Defender will heal you upon proc, how much damage Divine Sacrifice absorbs, and more..


I've been quite surprised at how often people cause parries on the mob I'm tanking :?
Obor
 
Posts: 21
Joined: Sat Jan 23, 2010 5:51 pm

Re: Parry Hasting Addon

Postby Hammerjudge » Mon Feb 08, 2010 3:17 pm

Lovely data analysiseration!

I am extremely interested to know if anyone can corroborate that basically all the bosses he tested cannot parry-haste (this is Clifton's result), except Deathwhisper.

No tests for Lich King :) fair enough.
Last edited by Hammerjudge on Mon Feb 08, 2010 3:26 pm, edited 1 time in total.
Hammerjudge
Maintankadonor
 
Posts: 143
Joined: Mon Oct 01, 2007 8:36 pm

Re: Parry Hasting Addon

Postby Chicken » Mon Feb 08, 2010 3:25 pm

elgguns wrote:
Cliffton wrote:Maybe:
Lord Marrowgar data is too sparse to say either way, and maybe I need to include Saber Lash to get a better handle on him.


Last time I looked, Marrowgar gets in about 4-6 melee hits before he starts saberlash spamming without any melee until the next cycle (after he comes out of bonestorm). I'm assuming they put those single target physical attacks in to give the tanks time to position him before he cleaves everyone to death. At a glance, it looks like the normal melee attacks only account for roughly 25% of his attacks.

...

I also saw a parry during the saber lashing but it didn't look like parry haste was enabled for it, which makes sense since it looks like a spell.

...
Marrowgar's Saber Lash is an "on next melee attack", unlike TBC's saber lashes which were instant attacks in addition to the bosses melee swings. It probably does count as a normal melee attack for all purposes, which makes the conclusion that Marrowgar doesn't parry haste.
Image
User avatar
Chicken
 
Posts: 1597
Joined: Fri Jun 26, 2009 2:19 pm

Re: Parry Hasting Addon

Postby theckhd » Mon Feb 08, 2010 6:42 pm

Hammerjudge wrote:Lovely data analysiseration!

I am extremely interested to know if anyone can corroborate that basically all the bosses he tested cannot parry-haste (this is Clifton's result), except Deathwhisper.

No tests for Lich King :) fair enough.

I'm in the process of doing so. Sadly, the MATLAB code took more work than I thought, and it runs awfully slowly. However, I have parses from all of the 10-man bosses, so I should be able to confirm all of his results given a few days.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
User avatar
theckhd
Moderator
 
Posts: 7953
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby steadypal » Mon Feb 08, 2010 8:28 pm

so is this making it so expertise is back to purely threat stat and not the 80% of dodge thing like was stated...
steadypal
 
Posts: 1206
Joined: Sat Mar 15, 2008 12:28 pm

Re: Parry Hasting Addon

Postby theckhd » Tue Feb 09, 2010 8:37 am

steadypal wrote:so is this making it so expertise is back to purely threat stat and not the 80% of dodge thing like was stated...

If Deathwhisper really is the only boss that can parry in ICC, then I'd say yes.

I should have some results for most bosses later today. Boy this regular expression check is slow.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
User avatar
theckhd
Moderator
 
Posts: 7953
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby Tbdsamman » Tue Feb 09, 2010 9:46 am

Sorry for the lack of updates but I've been fighting a stomach flu for the past bit.

I've been working on a logging mechanism so I can record the detection of parry hasting but from what I remember of using it in ICC, the only bosses without parry hasting were Festergut and Rotface.

Chicken wrote:
elgguns wrote:
Cliffton wrote:Maybe:
Lord Marrowgar data is too sparse to say either way, and maybe I need to include Saber Lash to get a better handle on him.


Last time I looked, Marrowgar gets in about 4-6 melee hits before he starts saberlash spamming without any melee until the next cycle (after he comes out of bonestorm). I'm assuming they put those single target physical attacks in to give the tanks time to position him before he cleaves everyone to death. At a glance, it looks like the normal melee attacks only account for roughly 25% of his attacks.

...

I also saw a parry during the saber lashing but it didn't look like parry haste was enabled for it, which makes sense since it looks like a spell.

...
Marrowgar's Saber Lash is an "on next melee attack", unlike TBC's saber lashes which were instant attacks in addition to the bosses melee swings. It probably does count as a normal melee attack for all purposes, which makes the conclusion that Marrowgar doesn't parry haste.

His provided snippet doesn't prove Marrowgar doesn't parry haste (my addon has in fact detected him parry hasting). For parry hasting to occur, the boss must parry you within 40% of it's swing, otherwise the bonus of 40% would push it lower than the 20% minimum for hasting. The provided parry was after the 40% window.
Tbdsamman
 
Posts: 10
Joined: Fri Jan 15, 2010 8:38 am

Re: Parry Hasting Addon

Postby Cliffton » Tue Feb 09, 2010 5:51 pm

theckhd wrote:
steadypal wrote:so is this making it so expertise is back to purely threat stat and not the 80% of dodge thing like was stated...

If Deathwhisper really is the only boss that can parry in ICC, then I'd say yes.

I should have some results for most bosses later today. Boy this regular expression check is slow.

My original algorithm took about 5-10 minutes to run on a 10-man ICC combat log. If you find the revised Matlab compatible code taking longer, you might want to sever the combat log into single-boss sections. It may have to do with the way Matlab interprets code on the fly.
Cliffton
 
Posts: 17
Joined: Thu Jan 21, 2010 12:19 pm

Re: Parry Hasting Addon

Postby theckhd » Tue Feb 09, 2010 6:27 pm

Cliffton wrote:My original algorithm took about 5-10 minutes to run on a 10-man ICC combat log. If you find the revised Matlab compatible code taking longer, you might want to sever the combat log into single-boss sections. It may have to do with the way Matlab interprets code on the fly.

It was taking considerably longer. The regexp() call was the culprit for most of it, swapping it out for strfind() calls cut the run time down considerably.

I have to check a few parses to make sure the results are making sense though - I want to make sure the changes I made to the code didn't screw anything up. My only test parse so far with the latest version of the code was Jaraxxus, and it was giving me some very strange results.

<edit> Aha, I think I found it. I was erroneously including SPELL_PERIODIC_MISSED, which I think was causing the extra clutter that was screwing up my graphs.

I'm going to review the code some more this evening (can't log on anyway). I should have graphs for you by tomorrow. From the looks of it though, Sindragosa parry-hastes and Lich King doesn't.
"Theck, Bringer of Numbers and Pounding Headaches," courtesy of Grehn|Skipjack.
MATLAB 5.x, Simcraft 6.x, Call to Arms 6.0, Talent Spec & Glyph Guide 5.x, Blog: Sacred Duty
User avatar
theckhd
Moderator
 
Posts: 7953
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

PreviousNext

Return to Advanced Theorycraft and Calculations

Who is online

Users browsing this forum: No registered users and 1 guest

Who is online

In total there is 1 user online :: 0 registered, 0 hidden and 1 guest (based on users active over the past 5 minutes)
Most users ever online was 380 on Tue Oct 14, 2008 6:28 pm

Users browsing this forum: No registered users and 1 guest