Parry Hasting Addon

Warning: Theorycraft inside.

Moderators: Fridmarr, Worldie, Aergis, theckhd

Re: Parry Hasting Addon

Postby theckhd » Wed Feb 10, 2010 11:17 am

OK, I have some results. First of all, here's the current version of the code: ph_analyzer2.m

I've done a lot of commenting to make it readable, and it now runs reasonably quickly (under a minute per boss, even for large logs) in Matlab 2009a. I still want to do some things with it both to help debug the code and to help us investigate how certain attacks interact with parry mechanics, but for now the most important stuff works.

Here's a rundown based on three logs, one from Ony+ToC25, and two from ICC10. The logs can be downloaded here (15 MB): WCL_archive1.rar.
They correspond to the following WoL raids:

ToC25+Ony: Expired
ICC10: Marrowgar-DBS, Sindragosa
ICC10: Sindragosa, Plague, Crimson Halls, LK attempts
ICC10: Marrowgar-DBS, Plague, Crimson Halls (alt run)

The last two raids were in the same combat log, which explains a few weird features in the plots (I'll make note of them when we get there). The first wing bosses and Sindragosa data come from the first main run. LK data comes from the second main run, and Plague/Crimson Halls data comes from both runs.

Note: The saveas() function is doing something weird to the plots. I'm going back and manually re-saving the plots to make them all look as pretty as the second Onyxia one.
<edit>: Plots fixed.

Boss-by-boss breakdown:
Lord Marrowgar
PH off. See below.
Image
This one looks crazy, but it's actually pretty consistent. Browsing the log, it seems that the two hits from an individual Saber Lash can register at vastly different times. For example, here are the first 10 unparried events (blue dots):
Code: Select all
2/3 22:08:58.809  SWING_DAMAGE,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x0300000000183351,"Theck",0x511,9661,0,1,0,0,0,nil,nil,nil                             
2/3 22:09:00.044  SWING_MISSED,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                 
2/3 22:09:01.223  SWING_DAMAGE,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x0300000000183351,"Theck",0x511,6698,0,1,0,0,1470,nil,nil,nil                         
2/3 22:09:03.318  SWING_DAMAGE,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x0300000000183351,"Theck",0x511,8799,0,1,0,0,0,nil,nil,nil                             
2/3 22:09:04.488  SWING_DAMAGE,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x0300000000183351,"Theck",0x511,8782,0,1,0,0,0,nil,nil,nil                             
2/3 22:09:05.754  SPELL_MISSED,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x03000000038A3438,"Spektrum",0x512,69055,"Saber Lash",0x1,DODGE                       
2/3 22:09:06.112  SPELL_DAMAGE,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x0300000000183351,"Theck",0x511,69055,"Saber Lash",0x1,8799,0,1,0,0,0,nil,nil,nil     
2/3 22:09:08.123  SPELL_MISSED,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x0300000000183351,"Theck",0x511,69055,"Saber Lash",0x1,MISS                           
2/3 22:09:08.475  SPELL_DAMAGE,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x03000000038A3438,"Spektrum",0x512,69055,"Saber Lash",0x1,6417,0,1,0,0,2026,nil,nil,nil
2/3 22:09:09.667  SPELL_DAMAGE,0xF130008F04004E60,"Lord Marrowgar",0x10a48,0x0300000000183351,"Theck",0x511,69055,"Saber Lash",0x1,8783,0,1,0,0,0,nil,nil,nil     

It may be tricky to read with word wrap, but the point is that all of the entries at ~400 or ~800 ms correspond to cases where the same Saber Lash hit the two of us at slightly different times. It seems to happen mostly when one player avoids the Saber Lash and the other takes the damage, which is strange.

This is one thing I want to fix about the current code (i.e. only register the first in a series of cleave entries), but it will take some time to get the implementation right. if you ignore the Saber Lash effects, we get a very consistent swing timer of around 1.2s (1.0 pre-slow).



Lady Deathwhisper
PH on. Not much data here, but there seem to be at least a few examples of parry-haste
Image

Deathbringer Saurfang
PH off. Excellent data set since he melees a lot.
Image

Festergut
PH off. We already knew they'd turn PH off for this one, and the data confirms it. There are two kills in here.
Image

Rotface
Another good data set showing that parry-hasting is turned off. There should be one kill, then two wipes and another kill in this log.
Image

Putricide
PH off. No question about it. This is actually three attempts: one kill (main run), followed by a wipe in phase 2 (abom failure on alt run), followed by another kill (alt run).
Image

Prince Valanar
PH off. Lots of clear examples. Also a nice display of JotJ dropping off. Again, 2 kills.
Image

Prince Taldaram
PH off. Two kills.
Image

Blood-Queen Lana'thel
PH off. One kill, and then a few wipes (alt run)
Image

Sindragosa
PH on. This is 3 wipes.
Image
This second plot is 4 more wipes and a kill
Image

There's a lot going on in these two plots, but the first one should be enough to convince us that she parry-hastes. A lot of the extra junk is due to the Frost Breaths and Cleaves, I need to work on that portion to improve the handling of those events.

Lich King
PH off. This is 6 different wipes.
Image


The ToC bosses are all single-attempt kills.

Gormok
PH off. Nothing surprising here, we know it's disabled on him.
Image

Dreadscale
PH on. There are a few examples in the log that demonstrate it clearly.
Image

Acidmaw
PH ??. We really don't have enough data for acidmaw, he spends most of his time spewing acid. Parryhaste is probably not a serious concern on him either way.
Image

Icehowl
PH on. Icehowl does parry-haste, and we have a number of examples to choose from.
Image

Jaraxxus
PH off. The one parry that looks like a haste (event 64) is actually a melee that was followed by a Fel Lightning cast, as are all of the other events below the baseline. Fel Lightning seems to have a shorter cast time than 2.4 seconds, so these events show up as "faster than usual" swings. The one exception is event 59 (no parry), which is a sequence of melee attacks - presumably the druid tank let Demo Roar fall off momentarily.
Image

Eydis Darkbane
PH off. The Twin Spike section is pretty neat (at least, I assume that's what the dip is)
Image

Fjola Lightbane
PH off.
Image

Anub'arak
PH off.
Image


Onyxia
PH on? Again, this plot is really noisy due to Flame Breaths, Cleaves, and Bellowing Roars.
Image

Just to check, I put circles on all the Cleaves and diamonds on all of the Flame Breaths:
Image
There doesn't seem to be a particular pattern here. It'll take a little more digging to figure out what's going on with the dragon bosses.


I'll be posting a new "comprehensive list" post later on today or tomorrow.
"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: 7985
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby Tbdsamman » Wed Feb 10, 2010 4:46 pm

While refining the method for calculating the parry haste bonus I came to a conclusion that double parry hasting cannot occur in practice. And in theory the only time double parry hasting can occur is with both parries at the exact beginning of the swing timer.

While my only understanding of parry hasting comes from Formulas:Parry - WoWWiki, the only way to receive two 40% bonuses is to have them at the beginning so that the remaining swing timer is 20%.
Code: Select all
A   100% (full swing timer remaning)
B  - 40%
C  = 60% (normal parry haste)
D  - 40%
E  = 20% (fastest you can swing)

If A is less than 100%, E will be less than 20% and the bonus of D will not be applied.

If anyone knows the parry hasting mechanics more, I could value your input.
Tbdsamman
 
Posts: 10
Joined: Fri Jan 15, 2010 8:38 am

Re: Parry Hasting Addon

Postby Cliffton » Wed Feb 10, 2010 6:37 pm

I do not have the data to say how parry hasting really works, but I had heard it worked differently than wowwiki suggested.

If your swing speed is x, I had heard that if your swing timer is anywhere between 1 and 0.6x, then the first parry would reduce the swing timer to 0.6x. If the swing timer was between 0.2 and 0.6x, then a parry would reduce the swing timer to 0.2x.

If parry haste works the way I had described (and I have read on some websites that it works this way), then a double parry haste is a distinct possibility in practice.
Cliffton
 
Posts: 17
Joined: Thu Jan 21, 2010 12:19 pm

Re: Parry Hasting Addon

Postby theckhd » Wed Feb 10, 2010 6:53 pm

Not quite. There was extensive research done over at EJ.

Basically, every parry removes up to 40% off of the swing timer, but cannot reduce it below 20%. It's not a binary operation though. If you're at 45% left and parry, it will remove 25%, dropping you to 20% left on your swing timer. You can see it pretty clearly in the first plot of this post.

So in Tbdsamman's example of two simultaneous parries, if you start A at 95, it looks like this:

Code: Select all
A    95%
B   -40%
C =  55%
D   -40%
E    20% (lower limit)


Basically for any starting value A between 61 and 100, the second parry would do at least something.
"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: 7985
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby Cliffton » Wed Feb 10, 2010 8:19 pm

Theck, there is a problem with the code that you have posted. The parryData array in your version includes the events when the boss attacks a player and the player parries.

This is going to muddy up the plots. They will show many more boss parries than are really happening (i.e. make too many red dots). This would provide false testimony that parry hasting is disabled.

The parser should distinguish between boss parries and player parries while populating the parryData array to fix this.

You've also got a large number of swingTimes that are unusually high, this is a symptom of the same problem. The "Boss attacks player" parries are being counted in the parryData bucket instead of the swingData bucket where they belong.

For Octave compatibility, I suggest changing where you use the Boolean expression of
Code: Select all
[strfind(x);strfind(y);strfind(z)]

to
Code: Select all
[strfind(x),strfind(y),strfind(z)]

Matlab (your version anyways) will apparently let you concatenate null rows with non-null rows if strfind returns the [] array, however, Octave will not. Octave will let you concatenate null columns with non-null columns though.

There is also an index problem that Octave does not like in
Code: Select all
            if( (strfind(nextLine,boss)) ) %Determine if this line is relevant to boss fight

On the final pass through your loop "%% New while loop - faster
while( 0 < nextLine )", nextLine is an integer and not a string. Matlab I suppose will permit strfind to run on an integer (automatic conversion or some such) but Octave will not.

EDIT: On a side note, in Octave, the code seems to run equally fast with or without regexp's in there. I suspect that Matlab does not use a radically different implementation of regexp, so I'm suspicious that there may exist is another root cause of the execution time difference.
Last edited by Cliffton on Wed Feb 10, 2010 8:31 pm, edited 1 time in total.
Cliffton
 
Posts: 17
Joined: Thu Jan 21, 2010 12:19 pm

Re: Parry Hasting Addon

Postby theckhd » Wed Feb 10, 2010 8:27 pm

Cliffton wrote:Theck, there is a problem with the code that you have posted. The parryData array in your version includes the events when the boss attacks a player and the player parries.

This is going to muddy up the plots. They will show many more boss parries than are really happening (i.e. make too many red dots). This would provide false testimony that parry hasting is disabled.

The parser should distinguish between boss parries and player parries while populating the parryData array to fix this.

You've also got a large number of swingTimes that are unusually high, this is a symptom of the same problem. The "Boss attacks player" parries are being counted in the parryData bucket instead of the swingData bucket where they belong.

Ah, ok. That explains a lot actually. Figuring out what was causing the extra long-time parry values was on my list of things to do when I find some more time.

Cliffton wrote:For Octave compatibility, I suggest changing where you use the Boolean expression of
Code: Select all
[strfind(x);strfind(y);strfind(z)]

to
Code: Select all
[strfind(x),strfind(y),strfind(z)]

Matlab (your version anyways) will apparently let you concatenate null rows with non-null rows if strfind returns the [] array, however, Octave will not. Octave will let you concatenate null columns with non-null columns though.

There is also an index problem that Octave does not like in
Code: Select all
            if( (strfind(nextLine,boss)) ) %Determine if this line is relevant to boss fight

On the final pass through your loop, nextLine is an integer and not a string. Matlab I suppose will permit strfind to run on an integer (automatic conversion or some such) but Octave will not.

OK, I'll go back and fix that. MATLAB doesn't like "strfind() || strfind() || strfind()", but it did allow me to build them into an array and check it that way.

I can add another conditional in there (nextline~=-1) to solve the strfind() problem.
"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: 7985
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby Cliffton » Wed Feb 10, 2010 8:36 pm

theckhd wrote:OK, I'll go back and fix that. MATLAB doesn't like "strfind() || strfind() || strfind()", but it did allow me to build them into an array and check it that way.

Not even if you enclose the expression in parens? "(strfind(x) || strfind(y) || strfind(z))"?
Cliffton
 
Posts: 17
Joined: Thu Jan 21, 2010 12:19 pm

Re: Parry Hasting Addon

Postby theckhd » Wed Feb 10, 2010 8:56 pm

Cliffton wrote:
theckhd wrote:OK, I'll go back and fix that. MATLAB doesn't like "strfind() || strfind() || strfind()", but it did allow me to build them into an array and check it that way.

Not even if you enclose the expression in parens? "(strfind(x) || strfind(y) || strfind(z))"?

I think I tried that, but I honestly can't remember. That's one of the drawbacks of doing any coding before coffee has kicked in. I'll double check it tomorrow.
"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: 7985
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby Chicken » Thu Feb 11, 2010 5:35 am

You also accidentally used the image for your first Onyxia plot for Anub'arak.
Image
User avatar
Chicken
 
Posts: 1597
Joined: Fri Jun 26, 2009 2:19 pm

Re: Parry Hasting Addon

Postby theckhd » Thu Feb 11, 2010 6:18 am

Chicken wrote:You also accidentally used the image for your first Onyxia plot for Anub'arak.

Oops. Looks like I manually saved over the Anub'arak one when fixing the images.

I'll fix that as I re-run the parses today (going to fix the bugs that Cliff found).
"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: 7985
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby theckhd » Thu Feb 11, 2010 9:49 am

Just as an update - I've made a lot of changes to the code, and fixed a lot of problems (for one thing, it was completely ignoring player parries as well, which was causing a lot of the high-delay noise). I've also added some debugging features, as well as a crude cleave detection algorithm. And I think I've managed to cover all of the Octave compatibility problems (also, I checked, and ((strfind(str1,str2)) && (strfind(str1,str3))) doesn't work if either strfind returns a []).

First of all, here's the code: ph_analyzer3.m
Code: Select all
clear all
close all

%% File Name
fpath='M:\George\oddassortedstuff\logs\'
file=[fpath 'WCL-2009-12-02.txt'];  %Ony + TOC25
% file=[fpath 'WCL-2010-02-04.txt'];  %ICC10 Marrow-DBS and Sindra
% file=[fpath 'WCL-2010-02-08.txt'];  %ICC10 Plague, Blood, Sindra-LK

% Constants
UNABLE_TO_OPEN_FILE = 'Error: Unable to open file.';
UNABLE_TO_CLOSE_FILE = 'Error closing file.';

%% Names of bosses to analyze

bossList=[
% %ICC
%     {'Lord Marrowgar'},
%     {'Lady Deathwhisper'},
%     {'High Overlord Saurfang'},
%     {'Deathbringer Saurfang'},
%     {'Rotface'},
%     {'Festergut'},
%     {'Professor Putricide'},
%     {'Prince Taldaram'},
%     {'Prince Valanar'},
%     {'Blood-Queen Lana''thel'},
%     {'Sindragosa'},
%     {'The Lich King'},
% %ToC
%     {'Gormok the Impaler'},
%     {'Dreadscale'},
%     {'Acidmaw'},
%     {'Icehowl'},
%     {'Lord Jaraxxus'},
%     {'Fjola Lightbane'},
%     {'Eydis Darkbane'},
%     {'Anub''arak'},
    {'Onyxia'}
    ]


% Name of boss abilities suspected to coincide with autoattacks (untested)
spells=[
    {'Fel Lightning'},   %Jaraxxus
    {'Fel Fireball'},   %Jaraxxus
    {'Legion Flame'},   %Jaraxxus
    {'Incinerate Flesh'},   %Jaraxxus
    {'Infernal Eruption'},   %Jaraxxus
    {'Nether Portal'},   %Jaraxxus
    {'Saber Lash'},      %marrowgar
    {'Frost Breath'},    %sindragosa
    {'Freezing Slash'},    %Anub'arak
    {'Bellowing Roar'},   %ony
    {'Cleave'},           %ony
    {'Flame Breath'},     %ony
    {'Wing Buffet'}     %ony
%    {'Tail Sweep'}     %ony
    ];

%TODO: implement checking for this
cleaves=[
    {'Saber Lash'},      %marrowgar
    {'Cleave'},          %ony
    {'Flame Breath'},     %ony
    {'Bellowing Roar'},   %ony
    {'Fel Lightning'},   %Jaraxxus
%    {'Tail Sweep'}     %ony
    ];


pause(1)
%% Find file length
%this takes a while, probably 20% of the runtime for a single boss.  Would
%love to speed this up eventually.
fh=fopen(file,'r');

nLines = 1;
% while (fgets(fh) ~= -1),
%   nLines = nLines+1;
% end
fclose(fh);

nLines
clear chunksize

% a=waitbar(0/size(bossList,2));
% b=waitbar(0/nLines,'Scanning File');
%%
for k=1:size(bossList,1)
%     waitbar(0/size(bossList,1),a,['Now Processing: ', bossList{k}] )
    boss=bossList{k}
    lineno = 1;
    % Harvest useful data from logfile
    parryData=[];
    swingData=[];
    fh=fopen(file,'r');
   
    if fh~=-1
        prevLine=' ';
        nextLine=fgetl(fh);
        curLine=0;
        cleaveFlag=0;


   
   
tic
%% New while loop - faster
        while( 0 < nextLine )
%             nextLine=fgetl(fh);
            curLine=curLine+1;
            if nextLine==-1
                break
            end
%             waitbar(curLine/nLines,b);   %this is way too slow
            if( (strfind(nextLine,boss)) ) %Determine if this line is relevant to boss fight
               
            %can uncomment this section if doing onyxia - don't forget to
            %comment an end if doing so
            %('onyxian whelp' and 'onyxian warder' cause problems)               
            %shouldn't cause problems for normal bosses, but it's an extra
            %step that can be omitted for speed
            if( [strfind(nextLine,'Whelp'), strfind(nextLine,'Warder'), strfind(nextLine,'Lair Guard')] )  %Determine if this line is relevant to boss fight
                %do nothing
            else
           
                %regexp() is very slow, and we were using it to check for
                %strings in well-defined locations.  Instead, we'll just
                %check the last 5 characters, since 'PARRY' is always the
                %last argument recorded               
                if strfind(nextLine,'PARRY')
                    if( (regexp(nextLine,['(.*,){5}.',boss])) )
                        parryData = char(parryData, nextLine); % Contains all events that might cause the boss to parry haste
                    end
                end
                %need to parse SPELL_DAMAGE, SWING_DAMAGE, and _MISSED
                if [strfind(nextLine,'SPELL_DAMAGE'), strfind(nextLine,'SWING_DAMAGE'), strfind(nextLine,'SPELL_MISSED'), strfind(nextLine,'SWING_MISSED'),strfind(nextLine,'SPELL_INTERRUPT'),strfind(nextLine,'SPELL_CAST_SUCCESS')]
                    %if we have one of these, check to make sure that it's
                    %a boss attack - this means 'boss' should be the 3rd
                    %argument, so there should be exactly 2 commas before
                    %the boss name.  That's what this regexp does - there's
                    %really no better way to do it here, but by only using
                    %regexp when absolutely necessary, we cut run time by a
                    %lot.
                    if( (regexp(nextLine,['^([^,]*,){2}.',boss])) )
                       
                        %again, regexp is slow, so we'll use STRFIND to
                        %check these cases.  This section is cases we want
                        %to keep
                        if [strfind(nextLine,'SPELL_DAMAGE'),strfind(nextLine,'SPELL_MISSED'),strfind(nextLine,'SPELL_INTERRUPT'),strfind(nextLine,'SPELL_CAST_SUCCESS')]
%                             %if it's a cleave, and the previous line was
%                             the same cleave, ignore it
                            cleaveFlag=0;
                            for i=(1:length(cleaves))
                                if strfind(prevLine,cleaves{i})
                                    if (strfind(nextLine,cleaves{i}))
                                        %ignore this line, it's the same
                                        %attack as the previous line
                                        cleaveFlag=1;
                                        prevLine=nextLine;
                                    end
                                end
                            end
                            %if it's one of the spells in our list of
                            %"interrupts melee speed" attacks, record it
                            if cleaveFlag==0
                                for i=(1:length(spells))
                                    if( strfind(nextLine,spells{i}) )
                                        swingData = char(swingData, nextLine);
                                        prevLine=nextLine;
                                    end
                                end
                            end
                        %otherwise, it's a melee swing
                        else
                            swingData = char(swingData, nextLine);
                            prevLine=nextLine;
                        end %close spell_damage & Spell_Missed
                    end %close regexp call
                end %close parry check
            end %close ony fix section
            end %close boss check
            lineno=lineno+1;
            if mod(lineno,100000)==0
                [boss ', Line # ' int2str(lineno) ' of ' int2str(nLines) ', ' num2str(lineno/nLines*100,'%2.1f') '%']
            end
            nextLine=fgetl(fh);
        end
  toc     
       
        %%fix for bug in first line of swing and parry data
        temp=swingData;
        clear swingData
        swingData=temp(2:size(temp,1),:);
        temp=parryData;
        clear parryData
        parryData=temp(2:size(temp,1),:);
       
       
%% Continue analysis
        % Close logfile
        if( fclose(fh) )
            error(UNABLE_TO_CLOSE_FILE );
        end

        % Get times from data
        [prevDay,swingTimes]=ParseTime(swingData(1,:));
        for i=(min([2 size(swingData,1)]):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=(min([2 size(parryData,1)]):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

        %Identify specials that cause outliers
        h=[];
        s=[];
        for m=1:size(swingData,1)
            for n=1:size(spells,1)
                if strfind(swingData(m,:),spells{n})
                    h=[h,m];
                    if [strfind(swingData(m,:),'SPELL_CAST_SUCCESS'),strfind(nextLine,'SPELL_INTERRUPT'),strfind(nextLine,'SPELL_MISSED'),strfind(nextLine,'SPELL_DAMAGE')]
                        s=[s,m];
                    end
                end
            end
        end
        s2=nonzeros(s.*(s<size(dSwings,2)));
        % 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);
       
        temp=findstr(swingData(2,:),' ');
        sdlog=[int2str([1:size(swingData,1)]') repmat(' ',size(swingData,1),1) swingData(:,temp(1):size(swingData,2))];

        %plot(x(zPI),dSwings(zPI),'*','markersize',2,x(oPI),dSwings(oPI),'*r','markersize',2,x(tPI),dSwings(tPI),'*r','markersize',3,x,movingAverage);
        figure;
        plot(x(zPI),dSwings(zPI),'.',x(oPI),dSwings(oPI),'.r',x(tPI),dSwings(tPI),'dr');
        hold on
        plot(x(nonzeros(h-1)),dSwings(nonzeros(h-1)),'ok',x(s2),dSwings(s2),'sk')
        hold off
        xlim([0,length(dSwings)])
        ylim([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','Att. followed by Specials','Spell Casts or Interrupts');
        title(['Parry Effect on ',boss,'''s Attack Speed']);
        xlabel('Sample Number');
        ylabel('Time between attacks (ms)');

        saveas(gcf,boss,'png')


        save([boss,'_parryData'],'zPI','oPI','tPI','x','dSwings','parryData','swingData','boss')

    else
        error(UNABLE_TO_OPEN_FILE );
    end
end
   


It now looks for SPELL_CAST_SUCCESS and SPELL_INTERRUPT events, which picks up a few things we weren't getting before. The cleave detection is only crude insofar as it checks the current line against the last relevant line to see if it's the same spell. This will cause problems if the boss chain-casts a spell (like Marrowgar's Saber Lash), since there's no timing check in there. I need a better implementation for it, but I've run out of time to do anything with this today (have to get some actual work done).

In any event, here's how it looks for Jaraxxus, after adding all of his relevant spell casts:
Image

As you can see, there are a lot of spell casts here, but the important part is that all of the melee attacks that appear to be parry-hastes are attacks that are followed by a spell cast (like Fel Lightning, which is an instant). It also seems to cover the exceptionally long ones, with one exception (I'll have to go back and check that event later).

Similarly, here's the Anub'arak one (updated in the previous post as well):
Image


However, Onyxia still looks terrible:
Image

I'm covering the spells you see in the code above, but there are still scenarios where we get a melee swing at 1.6 or so seconds that is surrounded only by other melee swings and no other events of relevance as far as I can tell. I think there's something I'm missing, but I can't quite pinpoint it yet. Her Tail Sweep attack isn't being parsed, but it looks even worse when I include that (it seems that's not tied to any other ability or the GCD). It's also not clear how Flame Breath and Cleave work. There are several instances of Flame Breath followed by Cleave giving a shorter-than-usual delay, but I haven't exhaustively checked each Cleave yet to see if it's always the case.

One thing I'd like to do yet is to make the plots a little clearer by showing melee swings separately from spells, possibly even identifying each particular spell. That would make it easier to see trends, and would clear up the clutter of the melee line.
"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: 7985
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby theckhd » Thu Feb 11, 2010 10:18 am

Debugging out loud here. This is all of the Onyxia swingData with the tail sweep lines uncommented and event numbers added to the beginning - this should contain every offensive ability she has (you may want to copy/paste into notepad to fix the formatting). The abilities are:
Tail Sweep - instant
Flame Breath - 2s cast
Cleave - next melee
Wing Buffet - 0.5s cast

Code: Select all
  1  21:05:14.960  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,19668,0,1,0,2614,0,nil,nil,nil                           
  2  21:05:16.979  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
  3  21:05:18.949  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
  4  21:05:20.585  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
  5  21:05:22.620  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
  6  21:05:25.092  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
  7  21:05:27.877  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,13910,0,4,6042,0,5581,nil,nil,nil
  8  21:05:29.449  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
  9  21:05:30.202  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
10  21:05:32.606  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
11  21:05:33.823  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,69293,"Wing Buffet",0x1,24435,0,1,0,0,0,nil,nil,nil       
12  21:05:36.042  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
13  21:05:38.459  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
14  21:05:40.811  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,8511,0,1,0,2779,5923,nil,nil,nil                         
15  21:05:43.056  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,14724,0,1,0,2779,3657,nil,nil,nil                         
16  21:05:44.560  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
17  21:05:46.722  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,21072,0,4,2903,0,0,nil,nil,nil   
18  21:05:47.112  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
19  21:05:48.582  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,17882,0,1,0,2779,0,nil,nil,nil                           
20  21:05:50.958  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x03000000040AA7FD,"Albil",0x514,68868,"Cleave",0x1                                 
21  21:05:52.328  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
22  21:05:54.669  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
23  21:05:56.613  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
24  21:05:58.424  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,69293,"Wing Buffet",0x1,19281,0,1,0,0,3868,nil,nil,nil   
25  21:06:01.546  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,RESIST,0                         
26  21:06:03.965  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
27  21:06:04.740  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
28  21:06:06.347  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,11916,0,1,0,2779,0,nil,nil,nil                           
29  21:06:08.751  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
30  21:06:11.129  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,14623,0,1,0,2779,0,nil,nil,nil                           
31  21:06:13.607  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
32  21:06:15.698  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,20356,0,4,6310,0,0,nil,nil,nil   
33  21:06:17.174  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
34  21:06:19.501  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,11948,0,1,0,0,3327,nil,nil,nil                           
35  21:06:20.794  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
36  21:06:22.037  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
37  21:06:24.305  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
38  21:06:26.925  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,69293,"Wing Buffet",0x1,16852,0,1,0,0,5581,nil,nil,nil   
39  21:06:28.955  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
40  21:06:32.573  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,15576,0,4,6070,0,4005,nil,nil,nil
41  21:06:33.476  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18073,0,1,0,2779,0,nil,nil,nil                           
42  21:06:35.961  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
43  21:06:37.254  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
44  21:06:38.346  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
45  21:06:40.829  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
46  21:06:43.087  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
47  21:06:45.389  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,69293,"Wing Buffet",0x1,16973,0,1,0,0,8750,nil,nil,nil   
48  21:06:46.472  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
49  21:06:48.901  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
50  21:06:50.885  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,14027,0,1,0,2779,0,nil,nil,nil                           
51  21:06:52.889  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,RESIST,0                         
52  21:06:53.306  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
53  21:06:55.302  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
54  21:06:57.697  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,9279,0,1,0,2779,3327,nil,nil,nil                         
55  21:07:00.094  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
56  21:07:01.533  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,11557,0,1,0,2779,3116,nil,nil,nil                         
57  21:10:20.824  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
58  21:10:22.847  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
59  21:10:24.021  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
60  21:10:25.248  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
61  21:10:26.351  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,19004,0,1,0,2652,3116,nil,nil,nil                         
62  21:10:28.554  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000002B276D8,"Marotan",0x514,50972,28329,1,0,0,0,nil,nil,nil                         
63  21:10:31.606  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,18809,0,4,5656,0,0,nil,nil,nil   
64  21:10:33.717  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
65  21:10:35.145  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
66  21:10:37.543  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
67  21:10:40.297  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18431,"Bellowing Roar",0x1,IMMUNE                         
68  21:10:41.306  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
69  21:10:42.657  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,MISS                                                     
70  21:10:45.035  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
71  21:10:48.178  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,19684,0,4,3075,0,3327,nil,nil,nil
72  21:10:50.520  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
73  21:10:52.939  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
74  21:10:55.326  SWING_MISSED,0xF1300027C8000990,"Onyxia",0xa48,0x0300000000183351,"Theck",0x511,MISS                                                       
75  21:10:55.326  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0xa48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                               
76  21:10:57.745  SWING_MISSED,0xF1300027C8000990,"Onyxia",0xa48,0x0300000000183351,"Theck",0x511,PARRY                                                       
77  21:10:59.600  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0xa48,0x0300000000183351,"Theck",0x511,15203,0,1,0,0,3116,nil,nil,nil                             
78  21:11:03.340  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x03000000025F48E6,"Manedo",0x514,18431,"Bellowing Roar",0x1,IMMUNE                       
79  21:11:05.452  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,16966,0,1,0,0,2291,nil,nil,nil                           
80  21:11:09.867  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,17719,0,4,6265,0,3116,nil,nil,nil
81  21:11:10.596  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
82  21:11:11.979  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
83  21:11:14.313  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
84  21:11:16.695  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,16286,0,1,0,0,0,nil,nil,nil                               
85  21:11:19.051  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,17826,0,1,0,0,2612,nil,nil,nil                           
86  21:11:21.579  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
87  21:11:23.965  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
88  21:11:28.002  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x03000000001C8454,"Eilthror",0x514,18431,"Bellowing Roar",0x1,MISS                       
89  21:11:30.337  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,16111,0,1,0,0,0,nil,nil,nil                               
90  21:11:32.811  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,19889,0,4,3094,0,3263,nil,nil,nil
91  21:11:35.067  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
92  21:11:36.664  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18773,0,1,0,2652,0,nil,nil,nil                           
93  21:11:38.979  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
94  21:11:41.375  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
95  21:11:42.779  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,5456,0,1,0,2652,5923,nil,nil,nil                         
96  21:11:44.318  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
97  21:11:46.756  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,10031,0,1,0,2652,4005,nil,nil,nil                         
98  21:11:48.338  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
99  21:11:48.395  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
100  21:11:49.925  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,12639,0,1,0,2652,0,nil,nil,nil                           
101  21:11:52.360  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
102  21:11:56.069  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x03000000038A3438,"Spektrum",0x514,18431,"Bellowing Roar",0x1,IMMUNE                     
103  21:12:00.477  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,14960,0,4,9427,0,3327,nil,nil,nil
104  21:12:00.735  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
105  21:12:01.804  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
106  21:12:04.201  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
107  21:12:06.767  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
108  21:12:08.046  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,13992,0,1,0,0,3327,nil,nil,nil                           
109  21:12:10.508  SWING_MISSED,0xF1300027C8000990,"Onyxia",0xa48,0x0300000000183351,"Theck",0x511,DODGE                                                       
110  21:12:12.997  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0xa48,0x0300000000183351,"Theck",0x511,15704,0,1,0,0,3327,nil,nil,nil                             
111  21:12:15.289  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
112  21:12:17.707  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,17550,0,1,0,2652,0,nil,nil,nil                           
113  21:12:20.145  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
114  21:12:22.481  SWING_MISSED,0xF1300027C8000990,"Onyxia",0xa48,0x0300000000183351,"Theck",0x511,MISS                                                       
115  21:12:25.009  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,12260,0,1,0,2652,5923,nil,nil,nil                         
116  21:12:26.706  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
117  21:12:31.014  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000002C420BC,"Vívien",0x514,18431,"Bellowing Roar",0x1,MISS                         
118  21:12:33.449  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
119  21:12:34.634  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
120  21:12:35.804  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,MISS                                                     
121  21:12:38.206  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
122  21:12:40.595  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,21078,0,4,0,0,3794,nil,nil,nil   
123  21:12:42.906  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
124  21:12:45.304  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
125  21:12:45.710  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
126  21:12:46.935  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
127  21:12:49.365  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18450,0,1,0,2652,0,nil,nil,nil                           
128  21:12:50.691  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,11698,0,1,0,2652,3116,nil,nil,nil                         
129  21:12:53.510  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x03000000001B0AA3,"Slowstrider",0x514,18431,"Bellowing Roar",0x1,IMMUNE                   
130  21:12:55.917  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,15217,0,1,0,0,0,nil,nil,nil                               
131  21:12:59.079  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,18562,0,4,5933,0,1170,nil,nil,nil
132  21:13:00.578  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,16361,0,1,0,2652,0,nil,nil,nil                           
133  21:13:00.578  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
134  21:13:02.603  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
135  21:13:04.176  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
136  21:13:05.372  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
137  21:13:06.988  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
138  21:13:09.235  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,13659,0,1,0,2652,5923,nil,nil,nil                         
139  21:13:11.825  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
140  21:13:13.123  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
141  21:13:14.633  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
142  21:13:20.248  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
143  21:13:20.371  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,16680,0,1,0,0,3657,nil,nil,nil                           
144  21:13:22.981  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18479,0,1,0,2652,0,nil,nil,nil                           
145  21:13:25.341  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
146  21:13:26.676  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
147  21:13:29.082  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,12713,0,1,0,0,3657,nil,nil,nil                           
148  21:13:31.080  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,RESIST,0                         
149  21:13:32.806  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18593,0,1,0,0,0,nil,nil,nil                               
150  21:13:35.256  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,12932,0,1,0,2652,4546,nil,nil,nil                         
151  21:13:39.383  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18431,"Bellowing Roar",0x1,IMMUNE                         
152  21:13:41.849  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
153  21:13:44.054  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
154  21:13:45.527  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,14109,0,1,0,2652,3327,nil,nil,nil                         
155  21:13:47.642  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
156  21:13:48.363  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
157  21:13:49.696  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
158  21:13:51.690  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,17915,0,1,0,2652,0,nil,nil,nil                           
159  21:13:53.151  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
160  21:13:55.210  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,11890,0,4,6293,0,9039,nil,nil,nil
161  21:13:56.768  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
162  21:13:58.394  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
163  21:14:01.777  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x03000000025F48E6,"Manedo",0x514,18431,"Bellowing Roar",0x1,IMMUNE                       
164  21:14:03.218  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18049,0,1,0,0,0,nil,nil,nil                               
165  21:14:05.591  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,9262,0,1,0,2652,3116,nil,nil,nil                         
166  21:14:07.862  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
167  21:14:11.247  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,RESIST,0                         
168  21:14:12.965  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,MISS                                                     
169  21:14:14.459  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
170  21:14:14.459  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
171  21:14:15.798  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
172  21:14:17.274  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,19579,0,1,0,2652,0,nil,nil,nil                           
173  21:14:20.578  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000191FB3,"Kmacrox",0x512,18431,"Bellowing Roar",0x1,MISS                         
174  21:14:22.961  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,12030,0,1,0,0,3327,nil,nil,nil                           
175  21:14:25.434  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
176  21:14:27.719  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,20254,0,4,3151,0,3327,nil,nil,nil
177  21:14:28.087  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
178  21:14:29.123  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
179  21:14:30.001  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18383,0,1,0,2652,0,nil,nil,nil                           
180  21:14:32.509  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
181  21:14:34.219  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,15775,0,1,0,0,0,nil,nil,nil                               
182  21:14:38.283  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000001415234,"Warrow",0x514,18431,"Bellowing Roar",0x1,MISS                         
183  21:14:40.542  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
184  21:14:40.705  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,12112,0,1,0,0,4005,nil,nil,nil                           
185  21:14:43.114  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18843,0,1,0,2652,0,nil,nil,nil                           
186  21:14:44.537  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
187  21:14:46.611  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,14957,0,4,9316,0,3116,nil,nil,nil
188  21:14:48.151  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18237,0,1,0,2652,0,nil,nil,nil                           
189  21:14:50.581  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
190  21:14:54.364  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x03000000038A3438,"Spektrum",0x514,18431,"Bellowing Roar",0x1,IMMUNE                     
191  21:14:56.806  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,14261,0,1,0,0,3327,nil,nil,nil                           
192  21:14:57.902  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
193  21:14:59.122  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
194  21:15:01.510  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
195  21:15:02.941  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,MISS                                                     
196  21:15:05.471  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,10132,0,1,0,0,6754,nil,nil,nil                           
197  21:15:07.873  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,3802,0,1,0,2652,9039,nil,nil,nil                         
198  21:15:10.297  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
199  21:15:14.865  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18431,"Bellowing Roar",0x1,IMMUNE                         
200  21:15:17.241  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,20414,0,4,6139,0,0,nil,nil,nil   
201  21:15:17.545  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
202  21:15:19.511  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,15818,0,1,0,0,3116,nil,nil,nil                           
203  21:15:21.963  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
204  21:15:24.350  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
205  21:15:25.911  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
206  21:15:29.682  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,18431,"Bellowing Roar",0x1,MISS                           
207  21:15:31.964  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,RESIST,0                         
208  21:15:34.350  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,10997,0,1,0,0,3116,nil,nil,nil                           
209  21:15:36.772  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
210  21:15:38.387  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
211  21:15:39.982  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,12824,0,1,0,2652,0,nil,nil,nil                           
212  21:15:41.304  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,14310,0,1,0,2652,0,nil,nil,nil                           
213  21:15:44.000  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
214  21:15:46.407  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,16281,0,4,6181,0,3657,nil,nil,nil
215  21:15:48.793  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
216  21:15:51.210  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,11854,0,1,0,2652,4546,nil,nil,nil                         
217  21:15:53.728  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x03000000001B0AA3,"Slowstrider",0x514,18431,"Bellowing Roar",0x1,IMMUNE                   
218  21:15:56.164  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,MISS                                                     
219  21:15:58.760  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
220  21:16:00.957  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
221  21:16:03.363  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY                                                     
222  21:16:06.984  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,14351,0,4,6285,0,5923,nil,nil,nil
223  21:16:08.310  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
224  21:16:12.489  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,21667,0,1,0,0,0,nil,nil,nil                               
225  21:16:14.888  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,MISS                                                     
226  21:16:16.421  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
227  21:16:18.742  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
228  21:16:21.322  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
229  21:16:24.130  SPELL_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,RESIST,0                         
230  21:16:26.545  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 
231  21:16:28.947  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                                     
232  21:16:31.365  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,13997,0,1,0,2652,0,nil,nil,nil                           
233  21:16:33.789  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68868,"Cleave",0x1                                 


Image

Event 98 is a spell cast of Tail Sweep, which comes 0.06 seconds before a melee:
Code: Select all
97  21:11:46.756  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,10031,0,1,0,2652,4005,nil,nil,nil                         
98  21:11:48.338  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
99  21:11:48.395  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,DODGE                                             

However, the previous melee (event 97) comes 1.6 seconds before the next one (event 99).

Similarly, here's one where we have melee+flame breath+tail sweep+melee:
Code: Select all
79  21:11:05.452  SWING_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,16966,0,1,0,0,2291,nil,nil,nil
80  21:11:09.867  SPELL_DAMAGE,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,68970,"Flame Breath",0x4,17719,0,4,6265,0,3116,nil,nil,nil
81  21:11:10.596  SPELL_CAST_SUCCESS,0xF1300027C8000990,"Onyxia",0x10a48,0x0000000000000000,nil,0x80000000,69286,"Tail Sweep",0x1                             
82  21:11:11.979  SWING_MISSED,0xF1300027C8000990,"Onyxia",0x10a48,0x0300000000183351,"Theck",0x511,PARRY   

There's a 4.5ish-second wait between the first melee and Flame Breath, which makes sense for a 2.4 speed swing followed by a 2-second cast. The Tail Sweep follows 0.73 seconds later, and the next attack is 1.38 seconds after that.

So it seems like Tail Sweep doesn't reset the swing timer, and can be used whenever she likes
"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: 7985
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby Cliffton » Thu Feb 11, 2010 10:25 am

Most spells aren't (theoretically) impacted by parry hastes, so they aren't a whole lot of benefit to look at and may just make it more difficult to see what's going on in the plots. Cleaves/"on next attack" type abilities are more interesting, as these would occur at the same time as a parry-hasted attack. If these can be solidly detected then that will help us find parry-hastes. Even if they are excluded however, a sufficient amount of autoattack data is all that is truly needed to determine a yea/nay on parry haste enabled/disabled. For this reason, it seems that the most reliable approach to detecting parry hastes to me is to just focus on getting autoattack parry haste detection working flawlessly first (and test it extensively), then add in cleaves and/or spells for a smaller number of bosses.

There will always be some minor variance in boss attack time (a few ms here and there), those are caused by issues like server latency, tank moving, paladin healer accidental taunts, dual wielding bosses, etc. Severe outliers in the data should just be discarded and ignored, because they are things like Bonestorm between autoattacks which really don't help us find parry-hastes. The algorithm discards these outliers by setting the Y-axis limits such that they are simply hidden from view. For abilities like Saber Lash that hit multiple players concurrently, it seems the best way to deal with these and many other cleave attacks is to simply discard data from the swingData array after is it populated.
Code: Select all
totally pseudo: if swingData(i) < 0.02 seconds, then swingData(i)=[]
Last edited by Cliffton on Thu Feb 11, 2010 10:31 am, edited 1 time in total.
Cliffton
 
Posts: 17
Joined: Thu Jan 21, 2010 12:19 pm

Re: Parry Hasting Addon

Postby theckhd » Thu Feb 11, 2010 10:31 am

In case it helps, here's a .txt file for the Ony swingData log with the Tail Sweeps removed:
ony_sData.txt
"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: 7985
Joined: Thu Jul 31, 2008 3:06 pm
Location: Harrisburg, PA

Re: Parry Hasting Addon

Postby steadypal » Thu Feb 11, 2010 2:29 pm

so cap out hit,,, soft cap, expertise, then, dont worry about other stats, just get upgrades amirite,,, not anywhere near the old 80% of expertise is the same effect as dodge...
steadypal
 
Posts: 1206
Joined: Sat Mar 15, 2008 12:28 pm

PreviousNext

Return to Advanced Theorycraft and Calculations

Who is online

Users browsing this forum: Bing [Bot], Yelena and 1 guest

Who is online

In total there are 3 users online :: 2 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: Bing [Bot], Yelena and 1 guest