UNPKG

crushyourfoes

Version:

A LotRO combat log parser

206 lines (160 loc) 5.88 kB
var test = require('tap').test; var fs = require('fs'); var cyf = require('../lib/CRUSHYOURFOES.js'); var player = "Luringdad"; var opponent = "ALL"; var lines = fs.readFileSync("../dontcommitmebro/Combat_20140607_1.txt").toString().split("\n"); var myDPS = cyf.GetTotalDPS(player, opponent, lines); // watch out, these parameters are transposed var myEvades = cyf.ParseEvades(opponent, player, lines); var myBlocks = cyf.ParseBlocks(opponent, player, lines); var myParries = cyf.ParseParries(opponent, player, lines); var myResists = cyf.ParseResists(opponent, player, lines); // then flip back var myAttacks = cyf.NumberOfAttacks(player, opponent, lines); var myPartialAttacks = cyf.PartialAttacks(player, lines); var bigHitOut = cyf.FindBiggestHit(player, opponent, lines); var myCrits = cyf.FindCrits(player, opponent, lines); var myDevCrits = cyf.FindDevCrits(player, opponent, lines); var theirDPS = cyf.GetTotalDPS(opponent, player, lines); // watch out, these parameters are transposed var theirEvades = cyf.ParseEvades(player, opponent, lines); var theirBlocks = cyf.ParseBlocks(player, opponent, lines); var theirParries = cyf.ParseParries(player, opponent, lines); var theirResists = cyf.ParseResists(player, opponent, lines); // then flip back var theirAttacks = cyf.NumberOfAttacks(opponent, player, lines); var theirPartialAttacks = cyf.PartialAttacks(opponent, lines); var bigHitIn = cyf.FindBiggestHit(opponent, player, lines); var theirCrits = cyf.FindCrits(opponent, player, lines); var theirDevCrits = cyf.FindDevCrits(opponent, player, lines); var myTotalAvoidances = myEvades + myBlocks + myParries; var theirTotalAvoidances = theirEvades + theirBlocks + theirParries; var mySuccessfulAttacks = myAttacks - theirEvades - theirBlocks - theirParries - theirResists; var theirSuccessfulAttacks = theirAttacks - myEvades - myBlocks - myParries - myResists; // avoids div by zero var myDPA = (myAttacks > 0 && myDPS > 0) ? cyf.DamagePerAttack(myAttacks, myDPS) : 0; var myDPATaken = (theirAttacks > 0 && theirDPS > 0) ? cyf.DamagePerAttack(theirAttacks, theirDPS) : 0; var theirAvoidResist = (mySuccessfulAttacks > 0) ? 100 - cyf.CalculatePercentage(myAttacks, mySuccessfulAttacks) : 0; var myAvoidResist = (theirSuccessfulAttacks > 0) ? 100 - cyf.CalculatePercentage(theirAttacks, theirSuccessfulAttacks) : 0; var myCritPct = (mySuccessfulAttacks > 0 && myCrits > 0) ? cyf.CalculatePercentage(mySuccessfulAttacks, myCrits) : 0; var theirCritPct = (theirSuccessfulAttacks > 0 && theirCrits > 0) ? cyf.CalculatePercentage(theirSuccessfulAttacks, theirCrits) : 0; var myDevCritPct = (mySuccessfulAttacks > 0 && myDevCrits > 0) ? cyf.CalculatePercentage(mySuccessfulAttacks, myDevCrits) : 0; var theirDevCritPct = (theirSuccessfulAttacks > 0 && theirDevCrits > 0) ? cyf.CalculatePercentage(theirSuccessfulAttacks, theirDevCrits) : 0; var myDPATaken = (theirAttacks > 0 && theirDPS > 0) ? cyf.DamagePerAttack(theirAttacks, theirDPS) : 0; var theirAvoidResist = (mySuccessfulAttacks > 0) ? 100 - cyf.CalculatePercentage(myAttacks, mySuccessfulAttacks) : 0; var myAvoidResist = (theirSuccessfulAttacks > 0) ? 100 - cyf.CalculatePercentage(theirAttacks, theirSuccessfulAttacks) : 0; var myCritPct = (mySuccessfulAttacks > 0 && myCrits > 0) ? cyf.CalculatePercentage(mySuccessfulAttacks, myCrits) : 0; var theirCritPct = (theirSuccessfulAttacks > 0 && theirCrits > 0) ? cyf.CalculatePercentage(theirSuccessfulAttacks, theirCrits) : 0; var myDevCritPct = (mySuccessfulAttacks > 0 && myDevCrits > 0) ? cyf.CalculatePercentage(mySuccessfulAttacks, myDevCrits) : 0; var theirDevCritPct = (theirSuccessfulAttacks > 0 && theirDevCrits > 0) ? cyf.CalculatePercentage(theirSuccessfulAttacks, theirDevCrits) : 0; var myBiggestHitOut = bigHitOut[0]; var myBiggestHitIn = bigHitIn[0]; var bigCombatLogOut = bigHitOut[1]; var bigCombatLogIn = bigHitIn[1]; var myKBs = cyf.MyKillingBlows(lines); var myKills = cyf.WhoDied(lines); test("MyDPS", function(t) { t.equal(myDPS, 732221) t.end() }); test("TheirDPS", function(t) { t.equal(theirDPS, 115012) t.end() }); test("myDPA", function(t) { t.equal(myDPA, 152) t.end(); }); test("theirDPA", function(t) { t.equal(myDPATaken, 127) t.end(); }); test("myBiggestHitOut", function(t) { t.equal(myBiggestHitOut, 1345) t.end(); }); test("myBiggestHitIn", function(t) { t.equal(myBiggestHitIn, 2953) t.end(); }); test("myAttacks", function(t) { t.equal(myAttacks, 4807) t.end(); }); test("theirAttacks", function(t) { t.equal(theirAttacks, 905) t.end(); }); test("mySuccessfulAttacks", function(t) { t.equal(mySuccessfulAttacks, 4720) t.end(); }); test("theirSuccessfulAttacks", function(t) { t.equal(theirSuccessfulAttacks, 720) t.end(); }); //FIXME: toString() lolwut? test("myAvoidResist.toFixed(2)", function(t) { t.equal(myAvoidResist.toFixed(2), "20.44") t.end() }); test("theirAvoidResist.toFixed(2)", function(t) { t.equal(theirAvoidResist.toFixed(2), "1.81") t.end() }); test("myCritPct.toFixed(2)", function(t) { t.equal(myCritPct.toFixed(2), "20.83") t.end() }); test("theirCritPct.toFixed(2)", function(t) { t.equal(theirCritPct.toFixed(2), "14.17") t.end() }); test("myDevCritPct.toFixed(2)", function(t) { t.equal(myDevCritPct.toFixed(2), "5.74") t.end() }); test("theirDevCritPct.toFixed(2)", function(t) { t.equal(theirDevCritPct.toFixed(2), "3.61") t.end() }); test("bigCombatLogIn", function(t) { t.equal(bigCombatLogIn, "Commander Târsh scored a hit with Bellow of Wrath on Luringdad for 2,953 Shadow damage to Morale.") t.end() }); test("bigCombatLogOut", function(t) { t.equal(bigCombatLogOut, "Luringdad scored a devastating hit with Exposed Throat on the Moria Orc-warrior for 1,345 Common damage to Morale.") t.end() }); //TODO add kill list