View Single Post

MGNMTTRN's Avatar


MGNMTTRN
03.08.2014 , 07:40 PM | #7
All right, I spoke to Dipstik about what he might find useful and incorporated most of that into this script. KBN never responded concerning his Perl script so I'm not gonna worry about his workflow. I had considered making a completely new thread to post these scripts, but then I'd be inviting people to post their own combat logs for me to parse and that's more trouble than I want to invite on myself.

If KBN doesn't post his own breakdown, when NIM comes I will post 16man NIM DTPS parses built off of this script. 8man NIM DTPS parses may follow within a week or two. PVP parses may follow a while after 2.7.

(Quote this post to get .m code with some semblance of tabbing preserved)

Example of how to invoke (note you must have MATLAB to run this code. It's ~$100 on Amazon):
Code:
EDU>> format bank
EDU>> cd C:\Users\John\Desktop\Storage\SWTOR\matlab
EDU>> filelist = dir(pwd);
EDU>> parser_handler(filelist(4).name, [0.4445 0.19 0.2375], 'Alara')
To run the parser_handler.m script, call
Code:
parser_handler('Name of file to parse, as string', [kinetic_DR internal_DR procced_defense_chance], 'Player name as string if you wish to ignore player's attacks')
Note that the parser pauses after it reports the results of each combat. Hit the <Enter> key to permit it to progress to parsing the next combat.

Code for parser.m was updated a bit, the full code is now:
Spoiler


Code for a parser_handler.m script has been written:
Spoiler


And it now gives output of this style:

Code:
Beginning parsing at 1327 with event [19:47:09.797] [@Alar'a] [@Alar'a] [] [Event {836045448945472}: EnterCombat {836045448945489}] ()
Ending parsing at 2497 with event [19:50:06.015] [@Alar'a] [@Alar'a] [] [Event {836045448945472}: ExitCombat {836045448945490}] ()
Attacks: 
	NefraWhoBarstheWay->Alara:Twin Attack
		141 samples, 444496 total damage, 3152.45 average damage including avoidance events
		0.32 raw shield occurrence, 0.54 shield chance as proportion of nondefended attacks, 0.54 effective absorb as estimated by (1-mean(shielded))/mean(unmitigated)
		0.41 total avoid chance, estimated predefense miss chance 0.17 = count(avoided) / count(attacks) - (given defense chance)
		Damage type melee kinetic, premitigation 1064809.74 = count(attacks)*mean(unmitigated damage), estimated total prearmor damage: 1916849.21 = (premitigation damage) / (1 - type damage reduction)
		Mitigation coefficient 0.23, estimated by (observed total damage)/(prearmor estimated damage)
	NefraWhoBarstheWay->Alara:Voice of the Masters (Any)
		13 samples, 23228 total damage, 1786.77 average damage including avoidance events
		0.00 raw shield occurrence, 0.00 shield chance as proportion of nondefended attacks, NaN effective absorb as estimated by (1-mean(shielded))/mean(unmitigated)
		0.08 total avoid chance, estimated predefense miss chance 0.00 = count(avoided) / count(attacks) - (given defense chance)
		Damage type force internal, premitigation 25163.67 = count(attacks)*mean(unmitigated damage), estimated total prearmor damage: 31066.26 = (premitigation damage) / (1 - type damage reduction)
		Mitigation coefficient 0.75, estimated by (observed total damage)/(prearmor estimated damage)
Participants: 
	Alara
	NefraWhoBarstheWay
Total duration 177 seconds
Damage profile:
	1916849.21 total damage/10829.66 PMDTPS of type {ranged kinetic} at 0.17 base miss chance
	0.17 mean dodge rate for melee kinetic damage when weighted by premitigation damage magnitude
	NaN mean dodge rate for melee internal damage when weighted by premitigation damage magnitude
	0.00 total damage/0.00 PMDTPS of type {force kinetic}
	31066.26 total damage/175.52 PMDTPS of type {force internal}
	0.24 mean mitigation coefficient when weighted by damage weights, counting base miss chance as mitigation
	11005.17 total PMDTPS
Finished displaying data for fight #5
Breakdowns:
  • sometimes NaN values originate when very few samples of an attack are available and they were all shielded, e.g. 1 hit from Strike in the log and it was shielded. I tried to prevent NaN values from spreading downstream and it seems okay, but if you see 1 attack with a NaN value that's probably what's happening
  • reporting ranged internal damage seemed silly but I threw it in just to be consistent
  • doesn't handle player cooldowns or debuffs and never will. Actual DTPS values and mean mitigation coefficient values will almost always be higher than reported, for this reason.
  • As reported in issue 1, the parser is agnostic toward player's absorb%. This causes trouble when all instances of an attack are shielded; since abs ~ (1-mean(shielded))/mean(unmitigated) some values will appear as NaN if there are no unmitigated values to pull. I could have extended the script to take player abs but frankly it's not common enough to be a serious issue
  • melee attacks must have a raw dodge/miss rate exceeding a threshold, default 0.15. This means 1) if you have n melee attack whose dodge rate is less than 0.15, it'll be misclassified as Force 2) if you have a force attack which you consistently resist, it'll be misclassified as melee. I'm not interested in parsing through all your dodges/misses/parries/resists/deflects and determining what is really going on there
  • does a poor job of understanding things like in combat stealth. Combat is defined as the first instance of 'EnterCombat' event to any of the following events: <'ExitCombat', 'EnterCombat', 'Revive', 'Death'>
  • doesn't support innate boss fight recognition
  • doesn't yet support multilog parsing. The easiest way to get that set up would be to write another script that defines EnterCombat events as being the first instance in time that an EnterCombat event is encountered, EndCombat as the last instance of its occurrence, and then concatenates together the logs over time