From a94c6550110b92dd233f4aa715e530fd592f4030 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Wed, 20 Jan 2021 19:22:08 -0600 Subject: [PATCH 01/42] PoC commit for setting up unit testing --- HeadlessWrapper.lua | 17 +++++------------ Test/Scenario/TestAttacks.lua | 25 +++++++++++++++++++++++++ Test/TestRunner.lua | 6 ++++++ 3 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 Test/Scenario/TestAttacks.lua create mode 100644 Test/TestRunner.lua diff --git a/HeadlessWrapper.lua b/HeadlessWrapper.lua index 2934fa66..d28ca522 100644 --- a/HeadlessWrapper.lua +++ b/HeadlessWrapper.lua @@ -6,7 +6,7 @@ -- Callbacks local callbackTable = { } local mainObject -local function runCallback(name, ...) +function runCallback(name, ...) if callbackTable[name] then return callbackTable[name](...) elseif mainObject and mainObject[name] then @@ -177,18 +177,18 @@ if mainObject.promptMsg then end -- The build module; once a build is loaded, you can find all the good stuff in here -local build = mainObject.main.modes["BUILD"] +build = mainObject.main.modes["BUILD"] -- Here's some helpful helper functions to help you get started -local function newBuild() +function newBuild() mainObject.main:SetMode("BUILD", false, "Help, I'm stuck in Path of Building!") runCallback("OnFrame") end -local function loadBuildFromXML(xmlText) +function loadBuildFromXML(xmlText) mainObject.main:SetMode("BUILD", false, "", xmlText) runCallback("OnFrame") end -local function loadBuildFromJSON(getItemsJSON, getPassiveSkillsJSON) +function loadBuildFromJSON(getItemsJSON, getPassiveSkillsJSON) mainObject.main:SetMode("BUILD", false, "") runCallback("OnFrame") local charData = build.importTab:ImportItemsAndSkills(getItemsJSON) @@ -196,10 +196,3 @@ local function loadBuildFromJSON(getItemsJSON, getPassiveSkillsJSON) -- You now have a build without a correct main skill selected, or any configuration options set -- Good luck! end - - --- Now you can mess around! - - --- Probably optional -runCallback("OnExit") diff --git a/Test/Scenario/TestAttacks.lua b/Test/Scenario/TestAttacks.lua new file mode 100644 index 00000000..62aa84f6 --- /dev/null +++ b/Test/Scenario/TestAttacks.lua @@ -0,0 +1,25 @@ +TestAttack = {} + +function TestAttack:setUp() + newBuild() +end + +function TestAttack:testCritChance() + lu.assertEquals(build.calcsTab.mainOutput.CritChance, 0) + build.itemsTab:CreateDisplayItemFromRaw("New Item\nMaraketh Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 71\nImplicits: 1\n{tags:speed}10% increased Movement Speed") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + lu.assertEquals(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) +end + +function TestAttack:testCritMulti() + lu.assertEquals(build.calcsTab.mainOutput.CritChance, 0) + build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + lu.assertEquals(build.calcsTab.mainOutput.CritMultiplier, 1.5 + .2) +end + +function TestAttack:tearDown() + -- newBuild() takes care of resetting everything in setUp() +end \ No newline at end of file diff --git a/Test/TestRunner.lua b/Test/TestRunner.lua new file mode 100644 index 00000000..1a30692a --- /dev/null +++ b/Test/TestRunner.lua @@ -0,0 +1,6 @@ +require("HeadlessWrapper") +lu = require('luaunit') + +LoadModule("Test/Scenario/TestAttacks") + +os.exit( lu.LuaUnit.run() ) \ No newline at end of file From 5b6dff829a799d136c0506659d1b83e05968cfb2 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Wed, 20 Jan 2021 23:13:25 -0600 Subject: [PATCH 02/42] Adding example of XML loading test --- Test/Scenario/TestBuilds.lua | 9 + Test/TestBuilds/3.13/OccVortex.lua | 1016 ++++++++++++++++++++++++++++ Test/TestRunner.lua | 1 + 3 files changed, 1026 insertions(+) create mode 100644 Test/Scenario/TestBuilds.lua create mode 100644 Test/TestBuilds/3.13/OccVortex.lua diff --git a/Test/Scenario/TestBuilds.lua b/Test/Scenario/TestBuilds.lua new file mode 100644 index 00000000..2a57a31d --- /dev/null +++ b/Test/Scenario/TestBuilds.lua @@ -0,0 +1,9 @@ +TestBuilds = {} + +function TestBuilds:testBuilds() + local testBuild = LoadModule("Test/TestBuilds/3.13/OccVortex") + loadBuildFromXML(testBuild.xml) + for key, value in pairs(testBuild.output) do + lu.assertEquals(build.calcsTab.mainOutput[key], value) + end +end \ No newline at end of file diff --git a/Test/TestBuilds/3.13/OccVortex.lua b/Test/TestBuilds/3.13/OccVortex.lua new file mode 100644 index 00000000..95d9fc47 --- /dev/null +++ b/Test/TestBuilds/3.13/OccVortex.lua @@ -0,0 +1,1016 @@ +return { + xml = [[ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://www.pathofexile.com/passive-skill-tree/AAAABAMBABzcEFiexAj0tzCvm7zq73x-WXaCwGaYrTrhj6Yi9LiT74hUR-_roS8TbR9BBLM9X1VLjDbjVrVISVGRB0J618-VLhQJvopFnX_Gl_QaOIKbBAekBQ18ug4RLTLRK5ph4jwFUrJd8lJTpldN44IQ6-6TJ0Srpr4igWpDogA1kvDVbAsG57c-TC0snDD4gsfwH9Wm0eR8g1ZIJohMs0mxaPKP-o48Bx6PGqcIl5XQ0FXGg9vyRY2Crv862KjqKPrbeg5IEQ86WFZKrJj-jxdU_goRlvnokFX5N2nYbRl88N-wmFNTUtAf2CRVrprgU9RFR58BJy9XyX6hyAxBh56hJpV6cNi9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rarity: RARE +Loath Sanctuary +Vaal Spirit Shield +Unique ID: fc24691eb70b5a54708e71b8142ebbbc86143ec938445222927b525295777c27 +Item Level: 83 +Quality: 0 +Sockets: B-B-B +LevelReq: 70 +Implicits: 1 +9% increased Spell Damage ++54 to Intelligence +30% increased Energy Shield ++87 to maximum Life ++1 to Level of all Cold Spell Skill Gems ++11% to all Elemental Resistances ++43% to Cold Resistance +Corrupted + + + Rarity: RARE +Apocalypse Noose +Citrine Amulet +Unique ID: f6eb3e5726a37508693267904e020215c25f9267e1fe4df45f2455e2220808c9 +Item Level: 83 +LevelReq: 59 +Implicits: 2 +{crafted}Allocates Prodigal Perfection ++16 to Strength and Dexterity ++43 to Strength ++44 to maximum Energy Shield ++9% to all Elemental Resistances ++11% to Fire Resistance +{crafted}+46 to maximum Life + + + Rarity: RARE +Maelstrom Cry +Imbued Wand +Unique ID: ced098a69068af80586640953702e39c51e8ab027e80b7b3a9097b446b93cc06 +Item Level: 71 +Quality: 0 +Sockets: B-B-B +LevelReq: 70 +Implicits: 1 +37% increased Spell Damage ++9% to Damage over Time Multiplier +Adds 8 to 12 Fire Damage to Spells +5% increased Cast Speed ++1 to Level of all Cold Spell Skill Gems ++6 Life gained on Kill +{crafted}+19% to Cold Damage over Time Multiplier + + + Rarity: RARE +Kraken Snare +Studded Belt +Unique ID: 2165cbcab4ec4a110e9cbec3c6d71e96767fdc39acf5849465e0623b95fb4032 +Item Level: 75 +LevelReq: 64 +Implicits: 1 +23% increased Stun Duration on Enemies ++317 to Armour ++46 to maximum Energy Shield ++92 to maximum Life ++29% to Chaos Resistance +{crafted}+14% to Lightning and Chaos Resistances + + + Rarity: RARE +Hate Band +Paua Ring +Unique ID: 46e05e600e119a447a18a720e9e49cf1132316c9125b7ad434971194b11d7182 +Item Level: 72 +LevelReq: 64 +Implicits: 1 ++29 to maximum Mana ++14 to all Attributes ++68 to Evasion Rating ++31 to maximum Energy Shield ++78 to maximum Life ++41% to Lightning Resistance +{crafted}+13% to Fire and Chaos Resistances + + + Rarity: RARE +Gloom Hold +Coral Ring +Unique ID: efc86ac7b5df717bfdbaea47dd45f77c40526efae46a3900b62c776bb4d6e160 +Item Level: 63 +LevelReq: 64 +Implicits: 1 ++30 to maximum Life ++7 to maximum Energy Shield ++78 to maximum Life +Regenerate 13.4 Life per second ++23 to maximum Mana ++23% to Cold Resistance +{crafted}+15% to Fire and Chaos Resistances + + + Rarity: RARE +Woe Caress +Fingerless Silk Gloves +Unique ID: 281a01ce242357b1e05cc57bfbee1cbb543a49f582b2aa4b4b432efcb4506270 +Item Level: 78 +Quality: 0 +Sockets: R-G-B-B +LevelReq: 70 +Implicits: 1 +16% increased Spell Damage +Adds 1 to 23 Lightning Damage to Attacks ++92 to maximum Life ++24% to Fire Resistance ++2 Life gained for each Enemy hit by your Attacks +{crafted}+15% to Fire and Chaos Resistances + + + Rarity: RARE +Invasion Road +Hydrascale Boots +Unique ID: 7fca9e5aeb030c8de363c489795235118fa08ffd60e0b0805509be8864893d09 +Item Level: 80 +Quality: 20 +Sockets: G-R-R-G +LevelReq: 70 +Implicits: 0 ++11 to Dexterity +47% increased Armour and Evasion ++88 to maximum Life ++27% to Chaos Resistance +30% increased Movement Speed +{crafted}+15% to Fire and Chaos Resistances + + + Rarity: RARE +Gale Ward +Quilted Jacket +Unique ID: dafc394c025c87f7df806c8c92c938c8125b923c3db138e39f82e8503e932a50 +Item Level: 61 +Quality: 20 +Sockets: G-B-G-B-B-B +LevelReq: 72 +Implicits: 0 +32% reduced Attribute Requirements ++124 to maximum Life ++58 to maximum Mana ++33% to Cold Resistance ++40% to Lightning Resistance +Reflects 10 Physical Damage to Melee Attackers + + + Rarity: UNIQUE +Heretic's Veil +Deicide Mask +Unique ID: 9441019ae9c688a0c2be333c1c14d036ee380552ff7b1aa9302da663729aa481 +Item Level: 70 +Quality: 20 +Sockets: R-B-G-B +LevelReq: 67 +Implicits: 1 +{crafted}24% increased Earthquake Area of Effect ++1 to Level of Socketed Curse Gems +Socketed Gems are Supported by Level 22 Blasphemy +Socketed Curse Gems have 12% reduced Mana Reservation +110% increased Evasion and Energy Shield ++44 to maximum Energy Shield + + + Rarity: MAGIC +Perpetual Quicksilver Flask of Staunching +Unique ID: eaed046cc0971c1090c2146e62ef5b9443b8cbab6b7adceaf0a5e6d5dea722c7 +Item Level: 3 +Quality: 0 +LevelReq: 6 +Implicits: 0 +31% increased Charge Recovery +Immunity to Bleeding during Flask effect +Removes Bleeding on use + + + Rarity: MAGIC +Chemist's Granite Flask of Heat +Unique ID: 9267e88908433221dd05de9fcc775d17d157db91cd8333aa36bca2cd2d7bdaa5 +Item Level: 54 +Quality: 20 +LevelReq: 27 +Implicits: 0 +21% reduced Charges used +Immunity to Freeze and Chill during Flask effect +Removes Freeze and Chill on use + + + Rarity: MAGIC +Perpetual Silver Flask of Curing +Unique ID: d5deeb09581ef0ce0d16f4a50014148dde90a9290c5de94d113bfcb3133f7293 +Item Level: 31 +Quality: 0 +LevelReq: 22 +Implicits: 0 +25% increased Charge Recovery +Immune to Poison during Flask Effect +Removes Poison on use + + + Rarity: MAGIC +Bubbling Eternal Life Flask of Acceleration +Unique ID: 2d887378e1162109008ca16d742df9828074f9901adfd8ccd69503c1aa36d391 +Item Level: 65 +Quality: 0 +LevelReq: 65 +Implicits: 0 +50% reduced Amount Recovered +135% increased Recovery rate +50% of Recovery applied Instantly +11% increased Attack Speed during Flask effect + + + Rarity: MAGIC +Enduring Divine Mana Flask of Warding +Unique ID: 02765758e562eb2fad64ec7f02e23d8a2d911bed4a7c72d38e17ec0cc8b20253 +Item Level: 73 +Quality: 20 +LevelReq: 60 +Implicits: 0 +30% reduced Amount Recovered +Immune to Curses during Flask effect +Removes Curses on use +30% reduced Duration +Flask Effect is not removed at Full Mana +Flask Effect does not Queue + + + Rarity: RARE +Cataclysm Stone +Cobalt Jewel +Unique ID: 949f96690b56595beceb512b5d9977d4fffd742690bc631defc0187caa6d8640 +Item Level: 72 +Implicits: 0 ++4% to Cold Damage over Time Multiplier +7% increased maximum Life +3% reduced Mana Cost of Skills + + + Rarity: RARE +Pandemonium Joy +Viridian Jewel +Unique ID: 8ff6536191b464f5299f5cb13f9dd5c072df47205015bd9970562bfbd2a6ec00 +Item Level: 71 +Implicits: 1 +1% of Damage taken Recouped as Mana ++3% to Cold Damage over Time Multiplier +6% increased maximum Life +13% increased Mana Regeneration Rate ++10% to all Elemental Resistances + + + Rarity: RARE +Honour Vessel +Cobalt Jewel +Unique ID: effce7692e503b9cb919ee1cc722ce729e5a4ef09b6c309c8722b736f9cc7b1a +Item Level: 68 +Implicits: 0 ++4% to Cold Damage over Time Multiplier +5% increased Cast Speed with Lightning Skills +5% increased maximum Life + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]], + output = { + Accuracy = 466, + ActionSpeedMod = 1, + AilmentWarcryEffect = 1, + AnyAegis = false, + AnyBypass = false, + AnyGuard = false, + AnyMindOverMatter = false, + AnyTakenReflect = 0, + AreaOfEffectMod = 1.16, + AreaOfEffectRadius = 21, + Armour = 4193, + ArmourOnBoots = 177, + AttackDodgeChance = 0, + AverageBlockChance = 12, + AverageDamage = 73773.92, + AverageHit = 73773.92, + AverageNotHitChance = 5.5, + AvoidChaosDamageChance = 0, + AvoidColdDamageChance = 0, + AvoidFireDamageChance = 0, + AvoidLightningDamageChance = 0, + AvoidPhysicalDamageChance = 0, + AvoidProjectilesChance = 0, + BleedAvoidChance = 100, + BleedChanceOnCrit = 0, + BleedChanceOnHit = 0, + BlindAvoidChance = 0, + BlitzCharges = 0, + BlitzChargesMax = 0, + BlockChance = 24, + BlockChanceMax = 75, + BlockDuration = 0.35, + BlockEffect = 100, + BonusCritDotMultiplier = 0, + BrittleChanceOnCrit = 0, + BrittleChanceOnHit = 0, + ChallengerCharges = 0, + ChallengerChargesMax = 0, + ChaosAegis = 0, + ChaosAverageDamageChance = 12, + ChaosChaosBaseTakenHitMult = 0.256, + ChaosCritAverage = 0, + ChaosDotEHP = 21025, + ChaosEnergyShieldBypass = 100, + ChaosGuardAbsorbRate = 0, + ChaosGuardEffectiveLife = 6728, + ChaosGuardEffectivePool = 0, + ChaosHitAverage = 0, + ChaosManaEffectiveLife = 6728, + ChaosMaxBase = 0, + ChaosMaximumHitTaken = 26281.25, + ChaosMeleeDamageChance = 24, + ChaosMinBase = 0, + ChaosMindOverMatter = 0, + ChaosNumberOfHits = 26.455026455026, + ChaosPoisonChance = 0, + ChaosProjectileDamageChance = 24, + ChaosResist = 68, + ChaosResistOver75 = 0, + ChaosResistOverCap = 0, + ChaosResistTotal = 68, + ChaosSpellDamageChance = 0, + ChaosSpellProjectileDamageChance = 0, + ChaosTakenDotMult = 0.32, + ChaosTakenHit = 0.8, + ChaosTakenHitMult = 0.256, + ChaosTakenReflect = 0.8, + ChaosTakenReflectMult = 0.256, + ChaosTotalEHP = 32619.047619048, + ChaosTotalPool = 6728, + ChillAvoidChance = 100, + ChillChance = 100, + ChillChanceOnCrit = 100, + ChillChanceOnHit = 100, + ChillDurationMod = 1.55, + ChillEffectMod = 100, + ChillEffectModDisplay = 100, + ChillSourceEffect = 20, + ColdAegis = 0, + ColdAverageDamageChance = 12, + ColdColdBaseTakenHitMult = 0.2, + ColdCritAverage = 73449.42, + ColdDotEHP = 33548, + ColdDotEffMult = 1.595, + ColdEnergyShieldBypass = 0, + ColdGuardAbsorbRate = 0, + ColdGuardEffectiveLife = 6728, + ColdGuardEffectivePool = 0, + ColdHitAverage = 73449.42, + ColdManaEffectiveLife = 6728, + ColdMaxBase = 1105, + ColdMaximumHitTaken = 41935, + ColdMeleeDamageChance = 24, + ColdMinBase = 737, + ColdMindOverMatter = 0, + ColdNumberOfHits = 42.087542087542, + ColdProjectileDamageChance = 24, + ColdResist = 75, + ColdResistOver75 = 0, + ColdResistOverCap = 44.418, + ColdResistTotal = 119.418, + ColdSpellDamageChance = 0, + ColdSpellProjectileDamageChance = 0, + ColdTakenDotMult = 0.25, + ColdTakenHit = 0.8, + ColdTakenHitMult = 0.2, + ColdTakenReflect = 0.8, + ColdTakenReflectMult = 0.2, + ColdTotalEHP = 51893.939393939, + ColdTotalPool = 8387, + CombinedAvg = 0, + CombinedDPS = 567004.71046343, + Cooldown = 0.96666666666667, + CrabBarriers = 0, + CrabBarriersMax = 0, + CritChance = 2.6, + CritEffect = 1, + CritExtraDamageReduction = 0, + CritIgniteDotMulti = 1.19, + CritMultiplier = 1, + CurrentShock = 0, + DamageReductionMax = 90, + Devotion = 0, + Dex = 135, + DoubleArmourChance = 0, + DoubleDamageChance = 0, + DoubleDamageChanceOnCrit = 0, + DoubleDamageEffect = 1, + Duration = 3.33, + DurationMod = 1.11, + EffectiveMovementSpeedMod = 1.89, + EnduranceCharges = 3, + EnduranceChargesMax = 3, + EnduranceChargesMin = 0, + EnemyCurseLimit = 2, + EnemyStunDuration = 0.4305, + EnemyStunThresholdMod = 1, + EnergyShield = 1659, + EnergyShieldLeech = 146.89884, + EnergyShieldLeechDuration = 4.4273309222423, + EnergyShieldLeechGainRate = 0, + EnergyShieldLeechInstanceRate = 33.18, + EnergyShieldLeechInstances = 0, + EnergyShieldLeechInstant = 0, + EnergyShieldLeechInstantRate = 0, + EnergyShieldLeechPerHit = 146.89884, + EnergyShieldLeechRate = 0, + EnergyShieldOnBlock = 0, + ["EnergyShieldOnBody Armour"] = 53, + EnergyShieldOnGloves = 43, + EnergyShieldOnHelmet = 205, + EnergyShieldOnHit = 0, + EnergyShieldOnHitRate = 0, + ["EnergyShieldOnWeapon 2"] = 69, + EnergyShieldRecharge = 365, + EnergyShieldRechargeAppliesToEnergyShield = true, + EnergyShieldRechargeDelay = 2, + EnergyShieldRecoveryRateMod = 1, + EnergyShieldRegen = 0, + EnergyShieldRegenPercent = 0, + EvadeChance = 11, + Evasion = 1971, + ["EvasionOnBody Armour"] = 265, + EvasionOnBoots = 177, + EvasionOnHelmet = 437, + ExertedAttackUptimeRatio = 0, + ExtraPoints = 2, + FireAegis = 0, + FireAverageDamageChance = 12, + FireCritAverage = 324.5, + FireDotEHP = 33548, + FireEnergyShieldBypass = 0, + FireFireBaseTakenHitMult = 0.2, + FireGuardAbsorbRate = 0, + FireGuardEffectiveLife = 6728, + FireGuardEffectivePool = 0, + FireHitAverage = 324.5, + FireManaEffectiveLife = 6728, + FireMaxBase = 12, + FireMaximumHitTaken = 41935, + FireMeleeDamageChance = 24, + FireMinBase = 8, + FireMindOverMatter = 0, + FireNumberOfHits = 42.087542087542, + FireProjectileDamageChance = 24, + FireResist = 75, + FireResistOver75 = 0, + FireResistOverCap = 23.418, + FireResistTotal = 98.418, + FireSpellDamageChance = 0, + FireSpellProjectileDamageChance = 0, + FireTakenDotMult = 0.25, + FireTakenHit = 0.8, + FireTakenHitMult = 0.2, + FireTakenReflect = 0.8, + FireTakenReflectMult = 0.2, + FireTotalEHP = 51893.939393939, + FireTotalPool = 8387, + FistOfWarAilmentEffect = 1, + FistOfWarCooldown = 0, + FistOfWarHitEffect = 1, + FreezeAvoidChance = 100, + FreezeChance = 61.04, + FreezeChanceOnCrit = 100, + FreezeChanceOnHit = 60, + FreezeDurationMod = 1.6, + FrenzyCharges = 0, + FrenzyChargesMax = 3, + FrenzyChargesMin = 0, + ["Gear:Armour"] = 177, + ["Gear:EnergyShield"] = 370, + ["Gear:Evasion"] = 879, + GhostShrouds = 0, + HitChance = 100, + IgniteAvoidChance = 10, + IgniteChance = 12.34, + IgniteChanceOnCrit = 100, + IgniteChanceOnHit = 10, + IgniteDPS = 79.1945, + IgniteDamage = 358.26083333333, + IgniteDotMulti = 1.19, + IgniteDuration = 4.5238095238095, + IgniteEffMult = 1.1, + IgniteFireMax = 145, + IgniteFireMin = 97, + ImpaleChance = 0, + InspirationCharges = 0, + InspirationChargesMax = 5, + Int = 430, + InteruptStunAvoidChance = 0, + KnockbackChance = 0, + KnockbackChanceOnCrit = 0, + KnockbackChanceOnHit = 0, + Life = 6728, + LifeLeech = 0, + LifeLeechDuration = 0, + LifeLeechGainRate = 0, + LifeLeechInstanceRate = 134.56, + LifeLeechInstances = 0, + LifeLeechInstant = 0, + LifeLeechInstantRate = 0, + LifeLeechPerHit = 0, + LifeLeechRate = 0, + LifeOnBlock = 0, + LifeOnHit = 0, + LifeOnHitRate = 0, + LifeRecoveryRateMod = 1, + LifeRegen = 329.616, + LifeRegenPercent = 4.9, + LifeReserved = 0, + LifeReservedPercent = 0, + LifeUnreserved = 6728, + LifeUnreservedPercent = 100, + LightRadiusMod = 1.1, + LightningAegis = 0, + LightningAverageDamageChance = 12, + LightningCritAverage = 0, + LightningDotEHP = 33548, + LightningEnergyShieldBypass = 0, + LightningGuardAbsorbRate = 0, + LightningGuardEffectiveLife = 6728, + LightningGuardEffectivePool = 0, + LightningHitAverage = 0, + LightningLightningBaseTakenHitMult = 0.2, + LightningManaEffectiveLife = 6728, + LightningMaxBase = 0, + LightningMaximumHitTaken = 41935, + LightningMeleeDamageChance = 24, + LightningMinBase = 0, + LightningMindOverMatter = 0, + LightningNumberOfHits = 42.087542087542, + LightningProjectileDamageChance = 24, + LightningResist = 75, + LightningResistOver75 = 0, + LightningResistOverCap = 25.418, + LightningResistTotal = 100.418, + LightningSpellDamageChance = 0, + LightningSpellProjectileDamageChance = 0, + LightningTakenDotMult = 0.25, + LightningTakenHit = 0.8, + LightningTakenHitMult = 0.2, + LightningTakenReflect = 0.8, + LightningTakenReflectMult = 0.2, + LightningTotalEHP = 51893.939393939, + LightningTotalPool = 8387, + LowestAttribute = 135, + LowestOfArmourAndEvasion = 1971, + Mana = 1391, + ManaCost = 72, + ManaLeech = 0, + ManaLeechDuration = 0, + ManaLeechGainRate = 0, + ManaLeechInstanceRate = 27.82, + ManaLeechInstances = 0, + ManaLeechInstant = 0, + ManaLeechInstantRate = 0, + ManaLeechPerHit = 0, + ManaLeechRate = 0, + ManaOnBlock = 0, + ManaOnHit = 0, + ManaOnHitRate = 0, + ManaRecoveryRateMod = 1, + ManaRegen = 89.6, + ManaRegenInc = 113, + ManaReserved = 1251, + ManaReservedPercent = 89.935298346513, + ManaUnreserved = 140, + ManaUnreservedPercent = 10.064701653487, + MaxEnergyShieldLeechInstance = 165.9, + MaxEnergyShieldLeechRate = 165.9, + MaxLifeLeechInstance = 672.8, + MaxLifeLeechRate = 1345.6, + MaxManaLeechInstance = 139.1, + MaxManaLeechRate = 278.2, + MaxOffensiveWarcryEffect = 1, + MaximumShock = 50, + MeleeEvadeChance = 11, + MeleeNotHitChance = 11, + MissingChaosResist = 7, + MissingColdResist = 0, + MissingFireResist = 0, + MissingLightningResist = 0, + MovementSpeedMod = 1.89, + OffensiveWarcryEffect = 1, + PhysicalAegis = 0, + PhysicalAverageDamageChance = 12, + PhysicalCritAverage = 0, + PhysicalDamageReduction = 39.418, + PhysicalDotEHP = 9799.9579350798, + PhysicalEnergyShieldBypass = 0, + PhysicalGuardAbsorbRate = 0, + PhysicalGuardEffectiveLife = 6728, + PhysicalGuardEffectivePool = 0, + PhysicalHitAverage = 0, + PhysicalManaEffectiveLife = 6728, + PhysicalMaxBase = 0, + PhysicalMaximumHitTaken = 17305.05760787, + PhysicalMeleeDamageChance = 24, + PhysicalMinBase = 0, + PhysicalMindOverMatter = 0, + PhysicalNumberOfHits = 18.037518037518, + PhysicalPhysicalBaseTakenHitMult = 0.484656, + PhysicalProjectileDamageChance = 24, + PhysicalResist = 14.418, + PhysicalResistWhenHit = 14.418, + PhysicalSpellDamageChance = 0, + PhysicalSpellProjectileDamageChance = 0, + PhysicalTakenDotMult = 0.85582, + PhysicalTakenHit = 0.8, + PhysicalTakenHitMult = 0.484656, + PhysicalTakenReflect = 0.8, + PhysicalTakenReflectMult = 0.484656, + PhysicalTotalEHP = 22240.25974026, + PhysicalTotalPool = 8387, + PoisonAvoidChance = 100, + PoisonChanceOnCrit = 0, + PoisonChanceOnHit = 0, + PowerCharges = 0, + PowerChargesMax = 3, + PowerChargesMin = 0, + PreEffectiveCritChance = 2.6, + ProjectileBlockChance = 24, + ProjectileEvadeChance = 11, + ProjectileNotHitChance = 11, + RallyingHitEffect = 1, + RemovableEnduranceCharges = 3, + RemovableFrenzyCharges = 0, + RemovablePowerCharges = 0, + ReqDex = 111, + ReqInt = 188, + ReqStr = 155, + RuthlessBlowChance = 0, + RuthlessBlowEffect = 1, + RuthlessBlowMaxCount = 0, + RuthlessBlowMultiplier = 1, + SapChanceOnCrit = 0, + SapChanceOnHit = 0, + ScaledDamageEffect = 1, + ScorchChanceOnCrit = 0, + ScorchChanceOnHit = 0, + SeismicHitEffect = 1, + ShieldBlockChance = 24, + ShockAvoidChance = 10, + ShockChance = 12.34, + ShockChanceOnCrit = 100, + ShockChanceOnHit = 10, + SiphoningCharges = 0, + SiphoningChargesMax = 0, + ["Spec:ArmourInc"] = 20, + ["Spec:EnergyShieldInc"] = 114, + ["Spec:EvasionInc"] = 25, + ["Spec:LifeInc"] = 201, + ["Spec:ManaInc"] = 43, + Speed = 0, + SpellBlockChance = 0, + SpellBlockChanceMax = 75, + SpellDodgeChance = 0, + SpellNotHitChance = 0, + SpellProjectileBlockChance = 0, + SpellProjectileNotHitChance = 0, + Str = 207, + StunAvoidChance = 0, + StunDuration = 0.35, + TheoreticalMaxOffensiveWarcryEffect = 1, + TheoreticalOffensiveWarcryEffect = 1, + Time = 0, + TotalAttr = 772, + TotalCharges = 3, + TotalDPS = 0, + TotalDot = 566925.51596343, + TotalDotDPS = 567004.71046343, + TotalDotInstance = 566925.51596343, + TotalMax = 88512.094, + TotalMin = 59035.746, + TripleDamageChance = 0, + TripleDamageChanceOnCrit = 0, + TripleDamageEffect = 1, + WarcryPower = 20, + WithBleedDPS = 0, + WithDotDPS = 566925.51596343, + WithIgniteDPS = 79.1945, + WithPoisonDPS = 0, + allMult = 1, + dontSplitEvade = true, + impaleStoredHitAvg = 0 + } +} \ No newline at end of file diff --git a/Test/TestRunner.lua b/Test/TestRunner.lua index 1a30692a..433191bd 100644 --- a/Test/TestRunner.lua +++ b/Test/TestRunner.lua @@ -2,5 +2,6 @@ require("HeadlessWrapper") lu = require('luaunit') LoadModule("Test/Scenario/TestAttacks") +LoadModule("Test/Scenario/TestBuilds") os.exit( lu.LuaUnit.run() ) \ No newline at end of file From d3dac40f0ce9723f7758b5ed472a8795ff70e80e Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Wed, 20 Jan 2021 23:41:52 -0600 Subject: [PATCH 03/42] GitHub Actions initial commit --- .github/workflows/test.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..9f6edb37 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,22 @@ +name: Run Tests +on: push +jobs: + run_tests: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install Lua/LuaJIT + uses: leafo/gh-actions-lua@v8.0.0 + with: + luaVersion: "luajit-2.0.5" + - name: Install LuaRocks + uses: leafo/gh-actions-luarocks@v4.0.0 + - name: Install luaunit + run: luarocks install luaunit + - name: Unzip for lua libs + run: unzip runtime-win32.zip + - name: Copy Lua libs + run: cp lua/*.lua ./ + - name: Run tests + run: luajit Test/TestRunner.lua From cf83de9a19af7b664a0821f9aede243a43ac0d35 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Thu, 21 Jan 2021 11:19:11 -0600 Subject: [PATCH 04/42] Adding example of XML loading test --- .github/workflows/test.yml | 14 ++++++++++---- Test/Scenario/TestAttacks.lua | 25 ------------------------- Test/Scenario/TestBuilds.lua | 9 --------- Test/System/TestAttacks.lua | 25 +++++++++++++++++++++++++ Test/System/TestBuilds.lua | 28 ++++++++++++++++++++++++++++ Test/TestRunner.lua | 14 +++++++++----- 6 files changed, 72 insertions(+), 43 deletions(-) delete mode 100644 Test/Scenario/TestAttacks.lua delete mode 100644 Test/Scenario/TestBuilds.lua create mode 100644 Test/System/TestAttacks.lua create mode 100644 Test/System/TestBuilds.lua diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9f6edb37..6afc83f0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,11 +12,17 @@ jobs: luaVersion: "luajit-2.0.5" - name: Install LuaRocks uses: leafo/gh-actions-luarocks@v4.0.0 - - name: Install luaunit - run: luarocks install luaunit + - name: Install busted + run: luarocks install busted + - name: Install cluacov + run: luarocks install cluacov + - name: Install coveralls integration + run: luarocks install luacov-coveralls - name: Unzip for lua libs run: unzip runtime-win32.zip - - name: Copy Lua libs + - name: Set LUA_PATH run: cp lua/*.lua ./ - name: Run tests - run: luajit Test/TestRunner.lua + run: busted -c Test/TestRunner.lua + - name: Report coverage + run: luacov-coveralls diff --git a/Test/Scenario/TestAttacks.lua b/Test/Scenario/TestAttacks.lua deleted file mode 100644 index 62aa84f6..00000000 --- a/Test/Scenario/TestAttacks.lua +++ /dev/null @@ -1,25 +0,0 @@ -TestAttack = {} - -function TestAttack:setUp() - newBuild() -end - -function TestAttack:testCritChance() - lu.assertEquals(build.calcsTab.mainOutput.CritChance, 0) - build.itemsTab:CreateDisplayItemFromRaw("New Item\nMaraketh Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 71\nImplicits: 1\n{tags:speed}10% increased Movement Speed") - build.itemsTab:AddDisplayItem() - runCallback("OnFrame") - lu.assertEquals(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) -end - -function TestAttack:testCritMulti() - lu.assertEquals(build.calcsTab.mainOutput.CritChance, 0) - build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") - build.itemsTab:AddDisplayItem() - runCallback("OnFrame") - lu.assertEquals(build.calcsTab.mainOutput.CritMultiplier, 1.5 + .2) -end - -function TestAttack:tearDown() - -- newBuild() takes care of resetting everything in setUp() -end \ No newline at end of file diff --git a/Test/Scenario/TestBuilds.lua b/Test/Scenario/TestBuilds.lua deleted file mode 100644 index 2a57a31d..00000000 --- a/Test/Scenario/TestBuilds.lua +++ /dev/null @@ -1,9 +0,0 @@ -TestBuilds = {} - -function TestBuilds:testBuilds() - local testBuild = LoadModule("Test/TestBuilds/3.13/OccVortex") - loadBuildFromXML(testBuild.xml) - for key, value in pairs(testBuild.output) do - lu.assertEquals(build.calcsTab.mainOutput[key], value) - end -end \ No newline at end of file diff --git a/Test/System/TestAttacks.lua b/Test/System/TestAttacks.lua new file mode 100644 index 00000000..ebfe0b56 --- /dev/null +++ b/Test/System/TestAttacks.lua @@ -0,0 +1,25 @@ +describe("TestAttacks", function() + before_each(function() + newBuild() + end) + + teardown(function() + -- newBuild() takes care of resetting everything in setup() + end) + + it("creates an item and has the correct crit chance", function() + assert.same(build.calcsTab.mainOutput.CritChance, 0) + build.itemsTab:CreateDisplayItemFromRaw("New Item\nMaraketh Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 71\nImplicits: 1\n{tags:speed}10% increased Movement Speed") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + assert.same(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) + end) + + it("creates an item and has the correct crit multi", function() + assert.same(1.5, build.calcsTab.mainOutput.CritMultiplier) + build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + assert.same(1.5 + .2, build.calcsTab.mainOutput.CritMultiplier) + end) +end) \ No newline at end of file diff --git a/Test/System/TestBuilds.lua b/Test/System/TestBuilds.lua new file mode 100644 index 00000000..3a392046 --- /dev/null +++ b/Test/System/TestBuilds.lua @@ -0,0 +1,28 @@ +function TestBuilds:fetchBuilds(path, buildList) + local buildList = buildList or {} + for file in lfs.dir(path) do + if file ~= "." and file ~= ".." then + local f = path..'/'..file + local attr = lfs.attributes (f) + assert (type(attr) == "table") + if attr.mode == "directory" then + TestBuilds:fetchBuilds(f, buildList) + else + table.insert(buildList, LoadModule(f)) + end + end + end + return buildList +end + +describe("test all test builds", function() + it("finds all test builds and compares their output", function() + local buildList = TestBuilds:fetchBuilds("Test/TestBuilds") + for _, testBuild in ipairs(buildList) do + loadBuildFromXML(testBuild.xml) + for key, value in pairs(testBuild.output) do + assert.same(build.calcsTab.mainOutput[key], value) + end + end + end) +end) \ No newline at end of file diff --git a/Test/TestRunner.lua b/Test/TestRunner.lua index 433191bd..6382d30d 100644 --- a/Test/TestRunner.lua +++ b/Test/TestRunner.lua @@ -1,7 +1,11 @@ require("HeadlessWrapper") -lu = require('luaunit') +lfs = require("lfs") +require 'busted.runner'() +describe("some", function() + it("does something", function() + assert.same(1,1) + end) +end) -LoadModule("Test/Scenario/TestAttacks") -LoadModule("Test/Scenario/TestBuilds") - -os.exit( lu.LuaUnit.run() ) \ No newline at end of file +LoadModule("Test/System/TestAttacks") +LoadModule("Test/System/TestBuilds") \ No newline at end of file From 57f1b51618bb30533dda9de92be40864859b6e27 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Thu, 21 Jan 2021 11:54:42 -0600 Subject: [PATCH 05/42] Adding example of XML loading test --- .github/workflows/test.yml | 4 +-- Test/System/TestBuilds.lua | 28 ---------------- Test/TestRunner.lua | 11 ------- .../System/TestAttacks_spec.lua | 8 ++--- spec/System/TestBuilds_spec.lua | 33 +++++++++++++++++++ {Test => spec}/TestBuilds/3.13/OccVortex.lua | 0 6 files changed, 39 insertions(+), 45 deletions(-) delete mode 100644 Test/System/TestBuilds.lua delete mode 100644 Test/TestRunner.lua rename Test/System/TestAttacks.lua => spec/System/TestAttacks_spec.lua (76%) create mode 100644 spec/System/TestBuilds_spec.lua rename {Test => spec}/TestBuilds/3.13/OccVortex.lua (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6afc83f0..b3df8d34 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,8 +21,8 @@ jobs: - name: Unzip for lua libs run: unzip runtime-win32.zip - name: Set LUA_PATH - run: cp lua/*.lua ./ + run: export LUA_PATH=./lua/?.lua - name: Run tests - run: busted -c Test/TestRunner.lua + run: busted -c --lua=/usr/bin/luajit --helper=HeadlessWrapper.lua . - name: Report coverage run: luacov-coveralls diff --git a/Test/System/TestBuilds.lua b/Test/System/TestBuilds.lua deleted file mode 100644 index 3a392046..00000000 --- a/Test/System/TestBuilds.lua +++ /dev/null @@ -1,28 +0,0 @@ -function TestBuilds:fetchBuilds(path, buildList) - local buildList = buildList or {} - for file in lfs.dir(path) do - if file ~= "." and file ~= ".." then - local f = path..'/'..file - local attr = lfs.attributes (f) - assert (type(attr) == "table") - if attr.mode == "directory" then - TestBuilds:fetchBuilds(f, buildList) - else - table.insert(buildList, LoadModule(f)) - end - end - end - return buildList -end - -describe("test all test builds", function() - it("finds all test builds and compares their output", function() - local buildList = TestBuilds:fetchBuilds("Test/TestBuilds") - for _, testBuild in ipairs(buildList) do - loadBuildFromXML(testBuild.xml) - for key, value in pairs(testBuild.output) do - assert.same(build.calcsTab.mainOutput[key], value) - end - end - end) -end) \ No newline at end of file diff --git a/Test/TestRunner.lua b/Test/TestRunner.lua deleted file mode 100644 index 6382d30d..00000000 --- a/Test/TestRunner.lua +++ /dev/null @@ -1,11 +0,0 @@ -require("HeadlessWrapper") -lfs = require("lfs") -require 'busted.runner'() -describe("some", function() - it("does something", function() - assert.same(1,1) - end) -end) - -LoadModule("Test/System/TestAttacks") -LoadModule("Test/System/TestBuilds") \ No newline at end of file diff --git a/Test/System/TestAttacks.lua b/spec/System/TestAttacks_spec.lua similarity index 76% rename from Test/System/TestAttacks.lua rename to spec/System/TestAttacks_spec.lua index ebfe0b56..a1ab5a3c 100644 --- a/Test/System/TestAttacks.lua +++ b/spec/System/TestAttacks_spec.lua @@ -8,18 +8,18 @@ describe("TestAttacks", function() end) it("creates an item and has the correct crit chance", function() - assert.same(build.calcsTab.mainOutput.CritChance, 0) + assert.are.equals(build.calcsTab.mainOutput.CritChance, 0) build.itemsTab:CreateDisplayItemFromRaw("New Item\nMaraketh Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 71\nImplicits: 1\n{tags:speed}10% increased Movement Speed") build.itemsTab:AddDisplayItem() runCallback("OnFrame") - assert.same(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) + assert.are.equals(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) end) it("creates an item and has the correct crit multi", function() - assert.same(1.5, build.calcsTab.mainOutput.CritMultiplier) + assert.are.equals(1.5, build.calcsTab.mainOutput.CritMultiplier) build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") build.itemsTab:AddDisplayItem() runCallback("OnFrame") - assert.same(1.5 + .2, build.calcsTab.mainOutput.CritMultiplier) + assert.are.equals(1.5 + .2, build.calcsTab.mainOutput.CritMultiplier) end) end) \ No newline at end of file diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua new file mode 100644 index 00000000..3970c323 --- /dev/null +++ b/spec/System/TestBuilds_spec.lua @@ -0,0 +1,33 @@ +local function fetchBuilds(path, buildList) + local buildList = buildList or {} + for file in lfs.dir(path) do + if file ~= "." and file ~= ".." then + local f = path..'/'..file + local attr = lfs.attributes (f) + assert (type(attr) == "table") + if attr.mode == "directory" then + fetchBuilds(f, buildList) + else + table.insert(buildList, LoadModule(f)) + end + end + end + return buildList +end + +describe("test all test builds", function() + + local buildList = fetchBuilds("spec/TestBuilds") + for _, testBuild in ipairs(buildList) do + loadBuildFromXML(testBuild.xml) + for key, value in pairs(testBuild.output) do + it("test key: " .. key, function() + if type(value) == 'number' then + value = round(value, 4) + build.calcsTab.mainOutput[key] = round(build.calcsTab.mainOutput[key], 4) + end + assert.are.equals(build.calcsTab.mainOutput[key], value) + end) + end + end +end) \ No newline at end of file diff --git a/Test/TestBuilds/3.13/OccVortex.lua b/spec/TestBuilds/3.13/OccVortex.lua similarity index 100% rename from Test/TestBuilds/3.13/OccVortex.lua rename to spec/TestBuilds/3.13/OccVortex.lua From ca324c047cac766a5c71304f74acfd8a66c7498d Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Thu, 21 Jan 2021 11:58:44 -0600 Subject: [PATCH 06/42] Updating LuaJIT location --- .github/workflows/test.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b3df8d34..c1cdeb50 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,5 +1,9 @@ name: Run Tests -on: push +on: + push: + branches: [ dev ] + pull_request: + branches: [ dev ] jobs: run_tests: runs-on: ubuntu-latest @@ -21,8 +25,8 @@ jobs: - name: Unzip for lua libs run: unzip runtime-win32.zip - name: Set LUA_PATH - run: export LUA_PATH=./lua/?.lua + run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests - run: busted -c --lua=/usr/bin/luajit --helper=HeadlessWrapper.lua . + run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . - name: Report coverage run: luacov-coveralls From 2734c3ac6675e471d2b86ca4779135f76268068d Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Thu, 21 Jan 2021 12:43:36 -0600 Subject: [PATCH 07/42] Removing coveralls for now --- .github/workflows/test.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c1cdeb50..b621b259 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,5 +28,3 @@ jobs: run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . - - name: Report coverage - run: luacov-coveralls From abff8e68f256f8d71ce6f1ce7a82e4571e79c667 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Tue, 26 Jan 2021 17:13:15 -0600 Subject: [PATCH 08/42] Using coveralls action --- .github/workflows/test.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b621b259..f476b2d4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,11 +20,13 @@ jobs: run: luarocks install busted - name: Install cluacov run: luarocks install cluacov - - name: Install coveralls integration - run: luarocks install luacov-coveralls - name: Unzip for lua libs run: unzip runtime-win32.zip - name: Set LUA_PATH run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . + - name: Coveralls GitHub Action + uses: coverallsapp/github-action@v1.1.2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} From cbc2126508b4e13eafa19c6403a0be55032f6cf1 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Tue, 26 Jan 2021 17:26:27 -0600 Subject: [PATCH 09/42] LuaCov vs. lcov --- .github/workflows/test.yml | 6 ++---- Export/spec.lua | 2 ++ HeadlessWrapper.lua | 2 +- Launch.lua | 5 +++++ 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f476b2d4..9e8e74b6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,5 @@ jobs: run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . - - name: Coveralls GitHub Action - uses: coverallsapp/github-action@v1.1.2 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Report coverage + run: luacov-coveralls --repo-token=${{ secrets.github_token }} diff --git a/Export/spec.lua b/Export/spec.lua index 3ef8a263..7f97c44f 100644 --- a/Export/spec.lua +++ b/Export/spec.lua @@ -1402,6 +1402,8 @@ return { width=50 } }, + ComponentWeapon={ + }, CooldownBypassTypes={ }, CooldownGroups={ diff --git a/HeadlessWrapper.lua b/HeadlessWrapper.lua index d28ca522..cc5c8285 100644 --- a/HeadlessWrapper.lua +++ b/HeadlessWrapper.lua @@ -143,7 +143,7 @@ function PCall(func, ...) end function ConPrintf(fmt, ...) -- Optional - --print(string.format(fmt, ...)) + print(string.format(fmt, ...)) end function ConPrintTable(tbl, noRecurse) end function ConExecute(cmd) end diff --git a/Launch.lua b/Launch.lua index 25bd5abc..aa04ec0c 100644 --- a/Launch.lua +++ b/Launch.lua @@ -13,6 +13,11 @@ launch = { } SetMainObject(launch) function launch:OnInit() +--[[package.cpath = package.cpath .. ';C:/Users/trevo/AppData/Roaming/JetBrains/PyCharmCE2020.3/plugins/intellij-emmylua/classes/debugger/emmy/windows/x86/?.dll' +--package.cpath= package.cpath .. ';C:/Users/trevo/Documents/GitHub/EmmyLuaDebugger/out/build/x86-Release/install/bin/?.dll' +local dbg = require('emmy_core') +dbg.tcpListen('localhost', 9966) +dbg.waitIDE()]] self.devMode = false self.installedMode = false self.versionNumber = "?" From 5a4223ed178ec8ed6e6e86a82438fba55a9f51f8 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Tue, 26 Jan 2021 17:31:39 -0600 Subject: [PATCH 10/42] Revert "Using coveralls action" This reverts commit c1a8f4adbfddb1a04e1b7e80a6cf103488f78753. --- .github/workflows/test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9e8e74b6..dea7793a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,6 +20,8 @@ jobs: run: luarocks install busted - name: Install cluacov run: luarocks install cluacov + - name: Install coveralls integration + run: luarocks install luacov-coveralls - name: Unzip for lua libs run: unzip runtime-win32.zip - name: Set LUA_PATH From 16b6802461decd7b2bbea97fa7bf90393583bfaf Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:41:43 +0100 Subject: [PATCH 11/42] refactor: remove debugger injection --- Launch.lua | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Launch.lua b/Launch.lua index aa04ec0c..25bd5abc 100644 --- a/Launch.lua +++ b/Launch.lua @@ -13,11 +13,6 @@ launch = { } SetMainObject(launch) function launch:OnInit() ---[[package.cpath = package.cpath .. ';C:/Users/trevo/AppData/Roaming/JetBrains/PyCharmCE2020.3/plugins/intellij-emmylua/classes/debugger/emmy/windows/x86/?.dll' ---package.cpath= package.cpath .. ';C:/Users/trevo/Documents/GitHub/EmmyLuaDebugger/out/build/x86-Release/install/bin/?.dll' -local dbg = require('emmy_core') -dbg.tcpListen('localhost', 9966) -dbg.waitIDE()]] self.devMode = false self.installedMode = false self.versionNumber = "?" From 5eae77b643f36248e6171d13a9cecfa434df7a5f Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:46:59 +0100 Subject: [PATCH 12/42] style: remove extra whitespace --- spec/System/TestBuilds_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index 3970c323..363b32c7 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -4,7 +4,7 @@ local function fetchBuilds(path, buildList) if file ~= "." and file ~= ".." then local f = path..'/'..file local attr = lfs.attributes (f) - assert (type(attr) == "table") + assert(type(attr) == "table") if attr.mode == "directory" then fetchBuilds(f, buildList) else From 741bbb5cf932af4c35e527c359f64ad6b1761faa Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:49:13 +0100 Subject: [PATCH 13/42] refactor: variable is already in local scope --- spec/System/TestBuilds_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index 363b32c7..1a6dbc50 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -1,5 +1,5 @@ local function fetchBuilds(path, buildList) - local buildList = buildList or {} + buildList = buildList or {} for file in lfs.dir(path) do if file ~= "." and file ~= ".." then local f = path..'/'..file From 801865af87c1a2cfc7b06496ecf1f6c9632a24e6 Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:49:46 +0100 Subject: [PATCH 14/42] style: inconsistent use of quotation marks --- spec/System/TestBuilds_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index 1a6dbc50..cc191db6 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -22,7 +22,7 @@ describe("test all test builds", function() loadBuildFromXML(testBuild.xml) for key, value in pairs(testBuild.output) do it("test key: " .. key, function() - if type(value) == 'number' then + if type(value) == "number" then value = round(value, 4) build.calcsTab.mainOutput[key] = round(build.calcsTab.mainOutput[key], 4) end From eb9b113db1e3b411dc653744e4364365469d2d2b Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:56:11 +0100 Subject: [PATCH 15/42] style: explicit number representation --- spec/System/TestAttacks_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestAttacks_spec.lua b/spec/System/TestAttacks_spec.lua index a1ab5a3c..7603c3eb 100644 --- a/spec/System/TestAttacks_spec.lua +++ b/spec/System/TestAttacks_spec.lua @@ -20,6 +20,6 @@ describe("TestAttacks", function() build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") build.itemsTab:AddDisplayItem() runCallback("OnFrame") - assert.are.equals(1.5 + .2, build.calcsTab.mainOutput.CritMultiplier) + assert.are.equals(1.5 + 0.2, build.calcsTab.mainOutput.CritMultiplier) end) end) \ No newline at end of file From 762ad549e307b26bbdbaba49e7c652bcfcb2bf04 Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:59:59 +0100 Subject: [PATCH 16/42] feat: add busted config file --- .busted | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .busted diff --git a/.busted b/.busted new file mode 100644 index 00000000..d16c464b --- /dev/null +++ b/.busted @@ -0,0 +1,12 @@ +return { + _all = { + coverage = true, + verbose = true, + }, + default = { + directory = "src", + lpath = "../runtime/lua/?.lua", + helper = "HeadlessWrapper.lua", + ROOT = { "../spec" }, + } +} From e660a6d5221da26cd98e3aacb5f70d0a8a47ce87 Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 02:07:46 +0100 Subject: [PATCH 17/42] refactor: update test runner --- .github/workflows/test.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dea7793a..5c15a04c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,11 +22,7 @@ jobs: run: luarocks install cluacov - name: Install coveralls integration run: luarocks install luacov-coveralls - - name: Unzip for lua libs - run: unzip runtime-win32.zip - - name: Set LUA_PATH - run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests - run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . + run: busted --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit . - name: Report coverage run: luacov-coveralls --repo-token=${{ secrets.github_token }} From 2ab7bc4af4042646ce2296d19700bdae155d33f0 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Wed, 20 Jan 2021 19:22:08 -0600 Subject: [PATCH 18/42] PoC commit for setting up unit testing --- Test/Scenario/TestAttacks.lua | 25 +++++++++++++++++++++++++ Test/TestRunner.lua | 6 ++++++ src/HeadlessWrapper.lua | 17 +++++------------ 3 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 Test/Scenario/TestAttacks.lua create mode 100644 Test/TestRunner.lua diff --git a/Test/Scenario/TestAttacks.lua b/Test/Scenario/TestAttacks.lua new file mode 100644 index 00000000..62aa84f6 --- /dev/null +++ b/Test/Scenario/TestAttacks.lua @@ -0,0 +1,25 @@ +TestAttack = {} + +function TestAttack:setUp() + newBuild() +end + +function TestAttack:testCritChance() + lu.assertEquals(build.calcsTab.mainOutput.CritChance, 0) + build.itemsTab:CreateDisplayItemFromRaw("New Item\nMaraketh Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 71\nImplicits: 1\n{tags:speed}10% increased Movement Speed") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + lu.assertEquals(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) +end + +function TestAttack:testCritMulti() + lu.assertEquals(build.calcsTab.mainOutput.CritChance, 0) + build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + lu.assertEquals(build.calcsTab.mainOutput.CritMultiplier, 1.5 + .2) +end + +function TestAttack:tearDown() + -- newBuild() takes care of resetting everything in setUp() +end \ No newline at end of file diff --git a/Test/TestRunner.lua b/Test/TestRunner.lua new file mode 100644 index 00000000..1a30692a --- /dev/null +++ b/Test/TestRunner.lua @@ -0,0 +1,6 @@ +require("HeadlessWrapper") +lu = require('luaunit') + +LoadModule("Test/Scenario/TestAttacks") + +os.exit( lu.LuaUnit.run() ) \ No newline at end of file diff --git a/src/HeadlessWrapper.lua b/src/HeadlessWrapper.lua index 2934fa66..d28ca522 100644 --- a/src/HeadlessWrapper.lua +++ b/src/HeadlessWrapper.lua @@ -6,7 +6,7 @@ -- Callbacks local callbackTable = { } local mainObject -local function runCallback(name, ...) +function runCallback(name, ...) if callbackTable[name] then return callbackTable[name](...) elseif mainObject and mainObject[name] then @@ -177,18 +177,18 @@ if mainObject.promptMsg then end -- The build module; once a build is loaded, you can find all the good stuff in here -local build = mainObject.main.modes["BUILD"] +build = mainObject.main.modes["BUILD"] -- Here's some helpful helper functions to help you get started -local function newBuild() +function newBuild() mainObject.main:SetMode("BUILD", false, "Help, I'm stuck in Path of Building!") runCallback("OnFrame") end -local function loadBuildFromXML(xmlText) +function loadBuildFromXML(xmlText) mainObject.main:SetMode("BUILD", false, "", xmlText) runCallback("OnFrame") end -local function loadBuildFromJSON(getItemsJSON, getPassiveSkillsJSON) +function loadBuildFromJSON(getItemsJSON, getPassiveSkillsJSON) mainObject.main:SetMode("BUILD", false, "") runCallback("OnFrame") local charData = build.importTab:ImportItemsAndSkills(getItemsJSON) @@ -196,10 +196,3 @@ local function loadBuildFromJSON(getItemsJSON, getPassiveSkillsJSON) -- You now have a build without a correct main skill selected, or any configuration options set -- Good luck! end - - --- Now you can mess around! - - --- Probably optional -runCallback("OnExit") From d09222e9b59c3f221ad26f5b4d4fa08a69626f0a Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Wed, 20 Jan 2021 23:13:25 -0600 Subject: [PATCH 19/42] Adding example of XML loading test --- Test/Scenario/TestBuilds.lua | 9 + Test/TestBuilds/3.13/OccVortex.lua | 1016 ++++++++++++++++++++++++++++ Test/TestRunner.lua | 1 + 3 files changed, 1026 insertions(+) create mode 100644 Test/Scenario/TestBuilds.lua create mode 100644 Test/TestBuilds/3.13/OccVortex.lua diff --git a/Test/Scenario/TestBuilds.lua b/Test/Scenario/TestBuilds.lua new file mode 100644 index 00000000..2a57a31d --- /dev/null +++ b/Test/Scenario/TestBuilds.lua @@ -0,0 +1,9 @@ +TestBuilds = {} + +function TestBuilds:testBuilds() + local testBuild = LoadModule("Test/TestBuilds/3.13/OccVortex") + loadBuildFromXML(testBuild.xml) + for key, value in pairs(testBuild.output) do + lu.assertEquals(build.calcsTab.mainOutput[key], value) + end +end \ No newline at end of file diff --git a/Test/TestBuilds/3.13/OccVortex.lua b/Test/TestBuilds/3.13/OccVortex.lua new file mode 100644 index 00000000..95d9fc47 --- /dev/null +++ b/Test/TestBuilds/3.13/OccVortex.lua @@ -0,0 +1,1016 @@ +return { + xml = [[ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://www.pathofexile.com/passive-skill-tree/AAAABAMBABzcEFiexAj0tzCvm7zq73x-WXaCwGaYrTrhj6Yi9LiT74hUR-_roS8TbR9BBLM9X1VLjDbjVrVISVGRB0J618-VLhQJvopFnX_Gl_QaOIKbBAekBQ18ug4RLTLRK5ph4jwFUrJd8lJTpldN44IQ6-6TJ0Srpr4igWpDogA1kvDVbAsG57c-TC0snDD4gsfwH9Wm0eR8g1ZIJohMs0mxaPKP-o48Bx6PGqcIl5XQ0FXGg9vyRY2Crv862KjqKPrbeg5IEQ86WFZKrJj-jxdU_goRlvnokFX5N2nYbRl88N-wmFNTUtAf2CRVrprgU9RFR58BJy9XyX6hyAxBh56hJpV6cNi9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Rarity: RARE +Loath Sanctuary +Vaal Spirit Shield +Unique ID: fc24691eb70b5a54708e71b8142ebbbc86143ec938445222927b525295777c27 +Item Level: 83 +Quality: 0 +Sockets: B-B-B +LevelReq: 70 +Implicits: 1 +9% increased Spell Damage ++54 to Intelligence +30% increased Energy Shield ++87 to maximum Life ++1 to Level of all Cold Spell Skill Gems ++11% to all Elemental Resistances ++43% to Cold Resistance +Corrupted + + + Rarity: RARE +Apocalypse Noose +Citrine Amulet +Unique ID: f6eb3e5726a37508693267904e020215c25f9267e1fe4df45f2455e2220808c9 +Item Level: 83 +LevelReq: 59 +Implicits: 2 +{crafted}Allocates Prodigal Perfection ++16 to Strength and Dexterity ++43 to Strength ++44 to maximum Energy Shield ++9% to all Elemental Resistances ++11% to Fire Resistance +{crafted}+46 to maximum Life + + + Rarity: RARE +Maelstrom Cry +Imbued Wand +Unique ID: ced098a69068af80586640953702e39c51e8ab027e80b7b3a9097b446b93cc06 +Item Level: 71 +Quality: 0 +Sockets: B-B-B +LevelReq: 70 +Implicits: 1 +37% increased Spell Damage ++9% to Damage over Time Multiplier +Adds 8 to 12 Fire Damage to Spells +5% increased Cast Speed ++1 to Level of all Cold Spell Skill Gems ++6 Life gained on Kill +{crafted}+19% to Cold Damage over Time Multiplier + + + Rarity: RARE +Kraken Snare +Studded Belt +Unique ID: 2165cbcab4ec4a110e9cbec3c6d71e96767fdc39acf5849465e0623b95fb4032 +Item Level: 75 +LevelReq: 64 +Implicits: 1 +23% increased Stun Duration on Enemies ++317 to Armour ++46 to maximum Energy Shield ++92 to maximum Life ++29% to Chaos Resistance +{crafted}+14% to Lightning and Chaos Resistances + + + Rarity: RARE +Hate Band +Paua Ring +Unique ID: 46e05e600e119a447a18a720e9e49cf1132316c9125b7ad434971194b11d7182 +Item Level: 72 +LevelReq: 64 +Implicits: 1 ++29 to maximum Mana ++14 to all Attributes ++68 to Evasion Rating ++31 to maximum Energy Shield ++78 to maximum Life ++41% to Lightning Resistance +{crafted}+13% to Fire and Chaos Resistances + + + Rarity: RARE +Gloom Hold +Coral Ring +Unique ID: efc86ac7b5df717bfdbaea47dd45f77c40526efae46a3900b62c776bb4d6e160 +Item Level: 63 +LevelReq: 64 +Implicits: 1 ++30 to maximum Life ++7 to maximum Energy Shield ++78 to maximum Life +Regenerate 13.4 Life per second ++23 to maximum Mana ++23% to Cold Resistance +{crafted}+15% to Fire and Chaos Resistances + + + Rarity: RARE +Woe Caress +Fingerless Silk Gloves +Unique ID: 281a01ce242357b1e05cc57bfbee1cbb543a49f582b2aa4b4b432efcb4506270 +Item Level: 78 +Quality: 0 +Sockets: R-G-B-B +LevelReq: 70 +Implicits: 1 +16% increased Spell Damage +Adds 1 to 23 Lightning Damage to Attacks ++92 to maximum Life ++24% to Fire Resistance ++2 Life gained for each Enemy hit by your Attacks +{crafted}+15% to Fire and Chaos Resistances + + + Rarity: RARE +Invasion Road +Hydrascale Boots +Unique ID: 7fca9e5aeb030c8de363c489795235118fa08ffd60e0b0805509be8864893d09 +Item Level: 80 +Quality: 20 +Sockets: G-R-R-G +LevelReq: 70 +Implicits: 0 ++11 to Dexterity +47% increased Armour and Evasion ++88 to maximum Life ++27% to Chaos Resistance +30% increased Movement Speed +{crafted}+15% to Fire and Chaos Resistances + + + Rarity: RARE +Gale Ward +Quilted Jacket +Unique ID: dafc394c025c87f7df806c8c92c938c8125b923c3db138e39f82e8503e932a50 +Item Level: 61 +Quality: 20 +Sockets: G-B-G-B-B-B +LevelReq: 72 +Implicits: 0 +32% reduced Attribute Requirements ++124 to maximum Life ++58 to maximum Mana ++33% to Cold Resistance ++40% to Lightning Resistance +Reflects 10 Physical Damage to Melee Attackers + + + Rarity: UNIQUE +Heretic's Veil +Deicide Mask +Unique ID: 9441019ae9c688a0c2be333c1c14d036ee380552ff7b1aa9302da663729aa481 +Item Level: 70 +Quality: 20 +Sockets: R-B-G-B +LevelReq: 67 +Implicits: 1 +{crafted}24% increased Earthquake Area of Effect ++1 to Level of Socketed Curse Gems +Socketed Gems are Supported by Level 22 Blasphemy +Socketed Curse Gems have 12% reduced Mana Reservation +110% increased Evasion and Energy Shield ++44 to maximum Energy Shield + + + Rarity: MAGIC +Perpetual Quicksilver Flask of Staunching +Unique ID: eaed046cc0971c1090c2146e62ef5b9443b8cbab6b7adceaf0a5e6d5dea722c7 +Item Level: 3 +Quality: 0 +LevelReq: 6 +Implicits: 0 +31% increased Charge Recovery +Immunity to Bleeding during Flask effect +Removes Bleeding on use + + + Rarity: MAGIC +Chemist's Granite Flask of Heat +Unique ID: 9267e88908433221dd05de9fcc775d17d157db91cd8333aa36bca2cd2d7bdaa5 +Item Level: 54 +Quality: 20 +LevelReq: 27 +Implicits: 0 +21% reduced Charges used +Immunity to Freeze and Chill during Flask effect +Removes Freeze and Chill on use + + + Rarity: MAGIC +Perpetual Silver Flask of Curing +Unique ID: d5deeb09581ef0ce0d16f4a50014148dde90a9290c5de94d113bfcb3133f7293 +Item Level: 31 +Quality: 0 +LevelReq: 22 +Implicits: 0 +25% increased Charge Recovery +Immune to Poison during Flask Effect +Removes Poison on use + + + Rarity: MAGIC +Bubbling Eternal Life Flask of Acceleration +Unique ID: 2d887378e1162109008ca16d742df9828074f9901adfd8ccd69503c1aa36d391 +Item Level: 65 +Quality: 0 +LevelReq: 65 +Implicits: 0 +50% reduced Amount Recovered +135% increased Recovery rate +50% of Recovery applied Instantly +11% increased Attack Speed during Flask effect + + + Rarity: MAGIC +Enduring Divine Mana Flask of Warding +Unique ID: 02765758e562eb2fad64ec7f02e23d8a2d911bed4a7c72d38e17ec0cc8b20253 +Item Level: 73 +Quality: 20 +LevelReq: 60 +Implicits: 0 +30% reduced Amount Recovered +Immune to Curses during Flask effect +Removes Curses on use +30% reduced Duration +Flask Effect is not removed at Full Mana +Flask Effect does not Queue + + + Rarity: RARE +Cataclysm Stone +Cobalt Jewel +Unique ID: 949f96690b56595beceb512b5d9977d4fffd742690bc631defc0187caa6d8640 +Item Level: 72 +Implicits: 0 ++4% to Cold Damage over Time Multiplier +7% increased maximum Life +3% reduced Mana Cost of Skills + + + Rarity: RARE +Pandemonium Joy +Viridian Jewel +Unique ID: 8ff6536191b464f5299f5cb13f9dd5c072df47205015bd9970562bfbd2a6ec00 +Item Level: 71 +Implicits: 1 +1% of Damage taken Recouped as Mana ++3% to Cold Damage over Time Multiplier +6% increased maximum Life +13% increased Mana Regeneration Rate ++10% to all Elemental Resistances + + + Rarity: RARE +Honour Vessel +Cobalt Jewel +Unique ID: effce7692e503b9cb919ee1cc722ce729e5a4ef09b6c309c8722b736f9cc7b1a +Item Level: 68 +Implicits: 0 ++4% to Cold Damage over Time Multiplier +5% increased Cast Speed with Lightning Skills +5% increased maximum Life + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]], + output = { + Accuracy = 466, + ActionSpeedMod = 1, + AilmentWarcryEffect = 1, + AnyAegis = false, + AnyBypass = false, + AnyGuard = false, + AnyMindOverMatter = false, + AnyTakenReflect = 0, + AreaOfEffectMod = 1.16, + AreaOfEffectRadius = 21, + Armour = 4193, + ArmourOnBoots = 177, + AttackDodgeChance = 0, + AverageBlockChance = 12, + AverageDamage = 73773.92, + AverageHit = 73773.92, + AverageNotHitChance = 5.5, + AvoidChaosDamageChance = 0, + AvoidColdDamageChance = 0, + AvoidFireDamageChance = 0, + AvoidLightningDamageChance = 0, + AvoidPhysicalDamageChance = 0, + AvoidProjectilesChance = 0, + BleedAvoidChance = 100, + BleedChanceOnCrit = 0, + BleedChanceOnHit = 0, + BlindAvoidChance = 0, + BlitzCharges = 0, + BlitzChargesMax = 0, + BlockChance = 24, + BlockChanceMax = 75, + BlockDuration = 0.35, + BlockEffect = 100, + BonusCritDotMultiplier = 0, + BrittleChanceOnCrit = 0, + BrittleChanceOnHit = 0, + ChallengerCharges = 0, + ChallengerChargesMax = 0, + ChaosAegis = 0, + ChaosAverageDamageChance = 12, + ChaosChaosBaseTakenHitMult = 0.256, + ChaosCritAverage = 0, + ChaosDotEHP = 21025, + ChaosEnergyShieldBypass = 100, + ChaosGuardAbsorbRate = 0, + ChaosGuardEffectiveLife = 6728, + ChaosGuardEffectivePool = 0, + ChaosHitAverage = 0, + ChaosManaEffectiveLife = 6728, + ChaosMaxBase = 0, + ChaosMaximumHitTaken = 26281.25, + ChaosMeleeDamageChance = 24, + ChaosMinBase = 0, + ChaosMindOverMatter = 0, + ChaosNumberOfHits = 26.455026455026, + ChaosPoisonChance = 0, + ChaosProjectileDamageChance = 24, + ChaosResist = 68, + ChaosResistOver75 = 0, + ChaosResistOverCap = 0, + ChaosResistTotal = 68, + ChaosSpellDamageChance = 0, + ChaosSpellProjectileDamageChance = 0, + ChaosTakenDotMult = 0.32, + ChaosTakenHit = 0.8, + ChaosTakenHitMult = 0.256, + ChaosTakenReflect = 0.8, + ChaosTakenReflectMult = 0.256, + ChaosTotalEHP = 32619.047619048, + ChaosTotalPool = 6728, + ChillAvoidChance = 100, + ChillChance = 100, + ChillChanceOnCrit = 100, + ChillChanceOnHit = 100, + ChillDurationMod = 1.55, + ChillEffectMod = 100, + ChillEffectModDisplay = 100, + ChillSourceEffect = 20, + ColdAegis = 0, + ColdAverageDamageChance = 12, + ColdColdBaseTakenHitMult = 0.2, + ColdCritAverage = 73449.42, + ColdDotEHP = 33548, + ColdDotEffMult = 1.595, + ColdEnergyShieldBypass = 0, + ColdGuardAbsorbRate = 0, + ColdGuardEffectiveLife = 6728, + ColdGuardEffectivePool = 0, + ColdHitAverage = 73449.42, + ColdManaEffectiveLife = 6728, + ColdMaxBase = 1105, + ColdMaximumHitTaken = 41935, + ColdMeleeDamageChance = 24, + ColdMinBase = 737, + ColdMindOverMatter = 0, + ColdNumberOfHits = 42.087542087542, + ColdProjectileDamageChance = 24, + ColdResist = 75, + ColdResistOver75 = 0, + ColdResistOverCap = 44.418, + ColdResistTotal = 119.418, + ColdSpellDamageChance = 0, + ColdSpellProjectileDamageChance = 0, + ColdTakenDotMult = 0.25, + ColdTakenHit = 0.8, + ColdTakenHitMult = 0.2, + ColdTakenReflect = 0.8, + ColdTakenReflectMult = 0.2, + ColdTotalEHP = 51893.939393939, + ColdTotalPool = 8387, + CombinedAvg = 0, + CombinedDPS = 567004.71046343, + Cooldown = 0.96666666666667, + CrabBarriers = 0, + CrabBarriersMax = 0, + CritChance = 2.6, + CritEffect = 1, + CritExtraDamageReduction = 0, + CritIgniteDotMulti = 1.19, + CritMultiplier = 1, + CurrentShock = 0, + DamageReductionMax = 90, + Devotion = 0, + Dex = 135, + DoubleArmourChance = 0, + DoubleDamageChance = 0, + DoubleDamageChanceOnCrit = 0, + DoubleDamageEffect = 1, + Duration = 3.33, + DurationMod = 1.11, + EffectiveMovementSpeedMod = 1.89, + EnduranceCharges = 3, + EnduranceChargesMax = 3, + EnduranceChargesMin = 0, + EnemyCurseLimit = 2, + EnemyStunDuration = 0.4305, + EnemyStunThresholdMod = 1, + EnergyShield = 1659, + EnergyShieldLeech = 146.89884, + EnergyShieldLeechDuration = 4.4273309222423, + EnergyShieldLeechGainRate = 0, + EnergyShieldLeechInstanceRate = 33.18, + EnergyShieldLeechInstances = 0, + EnergyShieldLeechInstant = 0, + EnergyShieldLeechInstantRate = 0, + EnergyShieldLeechPerHit = 146.89884, + EnergyShieldLeechRate = 0, + EnergyShieldOnBlock = 0, + ["EnergyShieldOnBody Armour"] = 53, + EnergyShieldOnGloves = 43, + EnergyShieldOnHelmet = 205, + EnergyShieldOnHit = 0, + EnergyShieldOnHitRate = 0, + ["EnergyShieldOnWeapon 2"] = 69, + EnergyShieldRecharge = 365, + EnergyShieldRechargeAppliesToEnergyShield = true, + EnergyShieldRechargeDelay = 2, + EnergyShieldRecoveryRateMod = 1, + EnergyShieldRegen = 0, + EnergyShieldRegenPercent = 0, + EvadeChance = 11, + Evasion = 1971, + ["EvasionOnBody Armour"] = 265, + EvasionOnBoots = 177, + EvasionOnHelmet = 437, + ExertedAttackUptimeRatio = 0, + ExtraPoints = 2, + FireAegis = 0, + FireAverageDamageChance = 12, + FireCritAverage = 324.5, + FireDotEHP = 33548, + FireEnergyShieldBypass = 0, + FireFireBaseTakenHitMult = 0.2, + FireGuardAbsorbRate = 0, + FireGuardEffectiveLife = 6728, + FireGuardEffectivePool = 0, + FireHitAverage = 324.5, + FireManaEffectiveLife = 6728, + FireMaxBase = 12, + FireMaximumHitTaken = 41935, + FireMeleeDamageChance = 24, + FireMinBase = 8, + FireMindOverMatter = 0, + FireNumberOfHits = 42.087542087542, + FireProjectileDamageChance = 24, + FireResist = 75, + FireResistOver75 = 0, + FireResistOverCap = 23.418, + FireResistTotal = 98.418, + FireSpellDamageChance = 0, + FireSpellProjectileDamageChance = 0, + FireTakenDotMult = 0.25, + FireTakenHit = 0.8, + FireTakenHitMult = 0.2, + FireTakenReflect = 0.8, + FireTakenReflectMult = 0.2, + FireTotalEHP = 51893.939393939, + FireTotalPool = 8387, + FistOfWarAilmentEffect = 1, + FistOfWarCooldown = 0, + FistOfWarHitEffect = 1, + FreezeAvoidChance = 100, + FreezeChance = 61.04, + FreezeChanceOnCrit = 100, + FreezeChanceOnHit = 60, + FreezeDurationMod = 1.6, + FrenzyCharges = 0, + FrenzyChargesMax = 3, + FrenzyChargesMin = 0, + ["Gear:Armour"] = 177, + ["Gear:EnergyShield"] = 370, + ["Gear:Evasion"] = 879, + GhostShrouds = 0, + HitChance = 100, + IgniteAvoidChance = 10, + IgniteChance = 12.34, + IgniteChanceOnCrit = 100, + IgniteChanceOnHit = 10, + IgniteDPS = 79.1945, + IgniteDamage = 358.26083333333, + IgniteDotMulti = 1.19, + IgniteDuration = 4.5238095238095, + IgniteEffMult = 1.1, + IgniteFireMax = 145, + IgniteFireMin = 97, + ImpaleChance = 0, + InspirationCharges = 0, + InspirationChargesMax = 5, + Int = 430, + InteruptStunAvoidChance = 0, + KnockbackChance = 0, + KnockbackChanceOnCrit = 0, + KnockbackChanceOnHit = 0, + Life = 6728, + LifeLeech = 0, + LifeLeechDuration = 0, + LifeLeechGainRate = 0, + LifeLeechInstanceRate = 134.56, + LifeLeechInstances = 0, + LifeLeechInstant = 0, + LifeLeechInstantRate = 0, + LifeLeechPerHit = 0, + LifeLeechRate = 0, + LifeOnBlock = 0, + LifeOnHit = 0, + LifeOnHitRate = 0, + LifeRecoveryRateMod = 1, + LifeRegen = 329.616, + LifeRegenPercent = 4.9, + LifeReserved = 0, + LifeReservedPercent = 0, + LifeUnreserved = 6728, + LifeUnreservedPercent = 100, + LightRadiusMod = 1.1, + LightningAegis = 0, + LightningAverageDamageChance = 12, + LightningCritAverage = 0, + LightningDotEHP = 33548, + LightningEnergyShieldBypass = 0, + LightningGuardAbsorbRate = 0, + LightningGuardEffectiveLife = 6728, + LightningGuardEffectivePool = 0, + LightningHitAverage = 0, + LightningLightningBaseTakenHitMult = 0.2, + LightningManaEffectiveLife = 6728, + LightningMaxBase = 0, + LightningMaximumHitTaken = 41935, + LightningMeleeDamageChance = 24, + LightningMinBase = 0, + LightningMindOverMatter = 0, + LightningNumberOfHits = 42.087542087542, + LightningProjectileDamageChance = 24, + LightningResist = 75, + LightningResistOver75 = 0, + LightningResistOverCap = 25.418, + LightningResistTotal = 100.418, + LightningSpellDamageChance = 0, + LightningSpellProjectileDamageChance = 0, + LightningTakenDotMult = 0.25, + LightningTakenHit = 0.8, + LightningTakenHitMult = 0.2, + LightningTakenReflect = 0.8, + LightningTakenReflectMult = 0.2, + LightningTotalEHP = 51893.939393939, + LightningTotalPool = 8387, + LowestAttribute = 135, + LowestOfArmourAndEvasion = 1971, + Mana = 1391, + ManaCost = 72, + ManaLeech = 0, + ManaLeechDuration = 0, + ManaLeechGainRate = 0, + ManaLeechInstanceRate = 27.82, + ManaLeechInstances = 0, + ManaLeechInstant = 0, + ManaLeechInstantRate = 0, + ManaLeechPerHit = 0, + ManaLeechRate = 0, + ManaOnBlock = 0, + ManaOnHit = 0, + ManaOnHitRate = 0, + ManaRecoveryRateMod = 1, + ManaRegen = 89.6, + ManaRegenInc = 113, + ManaReserved = 1251, + ManaReservedPercent = 89.935298346513, + ManaUnreserved = 140, + ManaUnreservedPercent = 10.064701653487, + MaxEnergyShieldLeechInstance = 165.9, + MaxEnergyShieldLeechRate = 165.9, + MaxLifeLeechInstance = 672.8, + MaxLifeLeechRate = 1345.6, + MaxManaLeechInstance = 139.1, + MaxManaLeechRate = 278.2, + MaxOffensiveWarcryEffect = 1, + MaximumShock = 50, + MeleeEvadeChance = 11, + MeleeNotHitChance = 11, + MissingChaosResist = 7, + MissingColdResist = 0, + MissingFireResist = 0, + MissingLightningResist = 0, + MovementSpeedMod = 1.89, + OffensiveWarcryEffect = 1, + PhysicalAegis = 0, + PhysicalAverageDamageChance = 12, + PhysicalCritAverage = 0, + PhysicalDamageReduction = 39.418, + PhysicalDotEHP = 9799.9579350798, + PhysicalEnergyShieldBypass = 0, + PhysicalGuardAbsorbRate = 0, + PhysicalGuardEffectiveLife = 6728, + PhysicalGuardEffectivePool = 0, + PhysicalHitAverage = 0, + PhysicalManaEffectiveLife = 6728, + PhysicalMaxBase = 0, + PhysicalMaximumHitTaken = 17305.05760787, + PhysicalMeleeDamageChance = 24, + PhysicalMinBase = 0, + PhysicalMindOverMatter = 0, + PhysicalNumberOfHits = 18.037518037518, + PhysicalPhysicalBaseTakenHitMult = 0.484656, + PhysicalProjectileDamageChance = 24, + PhysicalResist = 14.418, + PhysicalResistWhenHit = 14.418, + PhysicalSpellDamageChance = 0, + PhysicalSpellProjectileDamageChance = 0, + PhysicalTakenDotMult = 0.85582, + PhysicalTakenHit = 0.8, + PhysicalTakenHitMult = 0.484656, + PhysicalTakenReflect = 0.8, + PhysicalTakenReflectMult = 0.484656, + PhysicalTotalEHP = 22240.25974026, + PhysicalTotalPool = 8387, + PoisonAvoidChance = 100, + PoisonChanceOnCrit = 0, + PoisonChanceOnHit = 0, + PowerCharges = 0, + PowerChargesMax = 3, + PowerChargesMin = 0, + PreEffectiveCritChance = 2.6, + ProjectileBlockChance = 24, + ProjectileEvadeChance = 11, + ProjectileNotHitChance = 11, + RallyingHitEffect = 1, + RemovableEnduranceCharges = 3, + RemovableFrenzyCharges = 0, + RemovablePowerCharges = 0, + ReqDex = 111, + ReqInt = 188, + ReqStr = 155, + RuthlessBlowChance = 0, + RuthlessBlowEffect = 1, + RuthlessBlowMaxCount = 0, + RuthlessBlowMultiplier = 1, + SapChanceOnCrit = 0, + SapChanceOnHit = 0, + ScaledDamageEffect = 1, + ScorchChanceOnCrit = 0, + ScorchChanceOnHit = 0, + SeismicHitEffect = 1, + ShieldBlockChance = 24, + ShockAvoidChance = 10, + ShockChance = 12.34, + ShockChanceOnCrit = 100, + ShockChanceOnHit = 10, + SiphoningCharges = 0, + SiphoningChargesMax = 0, + ["Spec:ArmourInc"] = 20, + ["Spec:EnergyShieldInc"] = 114, + ["Spec:EvasionInc"] = 25, + ["Spec:LifeInc"] = 201, + ["Spec:ManaInc"] = 43, + Speed = 0, + SpellBlockChance = 0, + SpellBlockChanceMax = 75, + SpellDodgeChance = 0, + SpellNotHitChance = 0, + SpellProjectileBlockChance = 0, + SpellProjectileNotHitChance = 0, + Str = 207, + StunAvoidChance = 0, + StunDuration = 0.35, + TheoreticalMaxOffensiveWarcryEffect = 1, + TheoreticalOffensiveWarcryEffect = 1, + Time = 0, + TotalAttr = 772, + TotalCharges = 3, + TotalDPS = 0, + TotalDot = 566925.51596343, + TotalDotDPS = 567004.71046343, + TotalDotInstance = 566925.51596343, + TotalMax = 88512.094, + TotalMin = 59035.746, + TripleDamageChance = 0, + TripleDamageChanceOnCrit = 0, + TripleDamageEffect = 1, + WarcryPower = 20, + WithBleedDPS = 0, + WithDotDPS = 566925.51596343, + WithIgniteDPS = 79.1945, + WithPoisonDPS = 0, + allMult = 1, + dontSplitEvade = true, + impaleStoredHitAvg = 0 + } +} \ No newline at end of file diff --git a/Test/TestRunner.lua b/Test/TestRunner.lua index 1a30692a..433191bd 100644 --- a/Test/TestRunner.lua +++ b/Test/TestRunner.lua @@ -2,5 +2,6 @@ require("HeadlessWrapper") lu = require('luaunit') LoadModule("Test/Scenario/TestAttacks") +LoadModule("Test/Scenario/TestBuilds") os.exit( lu.LuaUnit.run() ) \ No newline at end of file From d997e3f517f9455f2f63daf786849d5a31b65b01 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Wed, 20 Jan 2021 23:41:52 -0600 Subject: [PATCH 20/42] GitHub Actions initial commit --- .github/workflows/test.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..9f6edb37 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,22 @@ +name: Run Tests +on: push +jobs: + run_tests: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Install Lua/LuaJIT + uses: leafo/gh-actions-lua@v8.0.0 + with: + luaVersion: "luajit-2.0.5" + - name: Install LuaRocks + uses: leafo/gh-actions-luarocks@v4.0.0 + - name: Install luaunit + run: luarocks install luaunit + - name: Unzip for lua libs + run: unzip runtime-win32.zip + - name: Copy Lua libs + run: cp lua/*.lua ./ + - name: Run tests + run: luajit Test/TestRunner.lua From 85b73ce84984e5207cb613383e9e6e1897af34d5 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Thu, 21 Jan 2021 11:19:11 -0600 Subject: [PATCH 21/42] Adding example of XML loading test --- .github/workflows/test.yml | 14 ++++++++++---- Test/Scenario/TestAttacks.lua | 25 ------------------------- Test/Scenario/TestBuilds.lua | 9 --------- Test/System/TestAttacks.lua | 25 +++++++++++++++++++++++++ Test/System/TestBuilds.lua | 28 ++++++++++++++++++++++++++++ Test/TestRunner.lua | 14 +++++++++----- 6 files changed, 72 insertions(+), 43 deletions(-) delete mode 100644 Test/Scenario/TestAttacks.lua delete mode 100644 Test/Scenario/TestBuilds.lua create mode 100644 Test/System/TestAttacks.lua create mode 100644 Test/System/TestBuilds.lua diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9f6edb37..6afc83f0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,11 +12,17 @@ jobs: luaVersion: "luajit-2.0.5" - name: Install LuaRocks uses: leafo/gh-actions-luarocks@v4.0.0 - - name: Install luaunit - run: luarocks install luaunit + - name: Install busted + run: luarocks install busted + - name: Install cluacov + run: luarocks install cluacov + - name: Install coveralls integration + run: luarocks install luacov-coveralls - name: Unzip for lua libs run: unzip runtime-win32.zip - - name: Copy Lua libs + - name: Set LUA_PATH run: cp lua/*.lua ./ - name: Run tests - run: luajit Test/TestRunner.lua + run: busted -c Test/TestRunner.lua + - name: Report coverage + run: luacov-coveralls diff --git a/Test/Scenario/TestAttacks.lua b/Test/Scenario/TestAttacks.lua deleted file mode 100644 index 62aa84f6..00000000 --- a/Test/Scenario/TestAttacks.lua +++ /dev/null @@ -1,25 +0,0 @@ -TestAttack = {} - -function TestAttack:setUp() - newBuild() -end - -function TestAttack:testCritChance() - lu.assertEquals(build.calcsTab.mainOutput.CritChance, 0) - build.itemsTab:CreateDisplayItemFromRaw("New Item\nMaraketh Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 71\nImplicits: 1\n{tags:speed}10% increased Movement Speed") - build.itemsTab:AddDisplayItem() - runCallback("OnFrame") - lu.assertEquals(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) -end - -function TestAttack:testCritMulti() - lu.assertEquals(build.calcsTab.mainOutput.CritChance, 0) - build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") - build.itemsTab:AddDisplayItem() - runCallback("OnFrame") - lu.assertEquals(build.calcsTab.mainOutput.CritMultiplier, 1.5 + .2) -end - -function TestAttack:tearDown() - -- newBuild() takes care of resetting everything in setUp() -end \ No newline at end of file diff --git a/Test/Scenario/TestBuilds.lua b/Test/Scenario/TestBuilds.lua deleted file mode 100644 index 2a57a31d..00000000 --- a/Test/Scenario/TestBuilds.lua +++ /dev/null @@ -1,9 +0,0 @@ -TestBuilds = {} - -function TestBuilds:testBuilds() - local testBuild = LoadModule("Test/TestBuilds/3.13/OccVortex") - loadBuildFromXML(testBuild.xml) - for key, value in pairs(testBuild.output) do - lu.assertEquals(build.calcsTab.mainOutput[key], value) - end -end \ No newline at end of file diff --git a/Test/System/TestAttacks.lua b/Test/System/TestAttacks.lua new file mode 100644 index 00000000..ebfe0b56 --- /dev/null +++ b/Test/System/TestAttacks.lua @@ -0,0 +1,25 @@ +describe("TestAttacks", function() + before_each(function() + newBuild() + end) + + teardown(function() + -- newBuild() takes care of resetting everything in setup() + end) + + it("creates an item and has the correct crit chance", function() + assert.same(build.calcsTab.mainOutput.CritChance, 0) + build.itemsTab:CreateDisplayItemFromRaw("New Item\nMaraketh Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 71\nImplicits: 1\n{tags:speed}10% increased Movement Speed") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + assert.same(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) + end) + + it("creates an item and has the correct crit multi", function() + assert.same(1.5, build.calcsTab.mainOutput.CritMultiplier) + build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + assert.same(1.5 + .2, build.calcsTab.mainOutput.CritMultiplier) + end) +end) \ No newline at end of file diff --git a/Test/System/TestBuilds.lua b/Test/System/TestBuilds.lua new file mode 100644 index 00000000..3a392046 --- /dev/null +++ b/Test/System/TestBuilds.lua @@ -0,0 +1,28 @@ +function TestBuilds:fetchBuilds(path, buildList) + local buildList = buildList or {} + for file in lfs.dir(path) do + if file ~= "." and file ~= ".." then + local f = path..'/'..file + local attr = lfs.attributes (f) + assert (type(attr) == "table") + if attr.mode == "directory" then + TestBuilds:fetchBuilds(f, buildList) + else + table.insert(buildList, LoadModule(f)) + end + end + end + return buildList +end + +describe("test all test builds", function() + it("finds all test builds and compares their output", function() + local buildList = TestBuilds:fetchBuilds("Test/TestBuilds") + for _, testBuild in ipairs(buildList) do + loadBuildFromXML(testBuild.xml) + for key, value in pairs(testBuild.output) do + assert.same(build.calcsTab.mainOutput[key], value) + end + end + end) +end) \ No newline at end of file diff --git a/Test/TestRunner.lua b/Test/TestRunner.lua index 433191bd..6382d30d 100644 --- a/Test/TestRunner.lua +++ b/Test/TestRunner.lua @@ -1,7 +1,11 @@ require("HeadlessWrapper") -lu = require('luaunit') +lfs = require("lfs") +require 'busted.runner'() +describe("some", function() + it("does something", function() + assert.same(1,1) + end) +end) -LoadModule("Test/Scenario/TestAttacks") -LoadModule("Test/Scenario/TestBuilds") - -os.exit( lu.LuaUnit.run() ) \ No newline at end of file +LoadModule("Test/System/TestAttacks") +LoadModule("Test/System/TestBuilds") \ No newline at end of file From e6369dc7e875cef7d171ad9b90944bace847cbec Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Thu, 21 Jan 2021 11:54:42 -0600 Subject: [PATCH 22/42] Adding example of XML loading test --- .github/workflows/test.yml | 4 +-- Test/System/TestBuilds.lua | 28 ---------------- Test/TestRunner.lua | 11 ------- .../System/TestAttacks_spec.lua | 8 ++--- spec/System/TestBuilds_spec.lua | 33 +++++++++++++++++++ {Test => spec}/TestBuilds/3.13/OccVortex.lua | 0 6 files changed, 39 insertions(+), 45 deletions(-) delete mode 100644 Test/System/TestBuilds.lua delete mode 100644 Test/TestRunner.lua rename Test/System/TestAttacks.lua => spec/System/TestAttacks_spec.lua (76%) create mode 100644 spec/System/TestBuilds_spec.lua rename {Test => spec}/TestBuilds/3.13/OccVortex.lua (100%) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6afc83f0..b3df8d34 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,8 +21,8 @@ jobs: - name: Unzip for lua libs run: unzip runtime-win32.zip - name: Set LUA_PATH - run: cp lua/*.lua ./ + run: export LUA_PATH=./lua/?.lua - name: Run tests - run: busted -c Test/TestRunner.lua + run: busted -c --lua=/usr/bin/luajit --helper=HeadlessWrapper.lua . - name: Report coverage run: luacov-coveralls diff --git a/Test/System/TestBuilds.lua b/Test/System/TestBuilds.lua deleted file mode 100644 index 3a392046..00000000 --- a/Test/System/TestBuilds.lua +++ /dev/null @@ -1,28 +0,0 @@ -function TestBuilds:fetchBuilds(path, buildList) - local buildList = buildList or {} - for file in lfs.dir(path) do - if file ~= "." and file ~= ".." then - local f = path..'/'..file - local attr = lfs.attributes (f) - assert (type(attr) == "table") - if attr.mode == "directory" then - TestBuilds:fetchBuilds(f, buildList) - else - table.insert(buildList, LoadModule(f)) - end - end - end - return buildList -end - -describe("test all test builds", function() - it("finds all test builds and compares their output", function() - local buildList = TestBuilds:fetchBuilds("Test/TestBuilds") - for _, testBuild in ipairs(buildList) do - loadBuildFromXML(testBuild.xml) - for key, value in pairs(testBuild.output) do - assert.same(build.calcsTab.mainOutput[key], value) - end - end - end) -end) \ No newline at end of file diff --git a/Test/TestRunner.lua b/Test/TestRunner.lua deleted file mode 100644 index 6382d30d..00000000 --- a/Test/TestRunner.lua +++ /dev/null @@ -1,11 +0,0 @@ -require("HeadlessWrapper") -lfs = require("lfs") -require 'busted.runner'() -describe("some", function() - it("does something", function() - assert.same(1,1) - end) -end) - -LoadModule("Test/System/TestAttacks") -LoadModule("Test/System/TestBuilds") \ No newline at end of file diff --git a/Test/System/TestAttacks.lua b/spec/System/TestAttacks_spec.lua similarity index 76% rename from Test/System/TestAttacks.lua rename to spec/System/TestAttacks_spec.lua index ebfe0b56..a1ab5a3c 100644 --- a/Test/System/TestAttacks.lua +++ b/spec/System/TestAttacks_spec.lua @@ -8,18 +8,18 @@ describe("TestAttacks", function() end) it("creates an item and has the correct crit chance", function() - assert.same(build.calcsTab.mainOutput.CritChance, 0) + assert.are.equals(build.calcsTab.mainOutput.CritChance, 0) build.itemsTab:CreateDisplayItemFromRaw("New Item\nMaraketh Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 71\nImplicits: 1\n{tags:speed}10% increased Movement Speed") build.itemsTab:AddDisplayItem() runCallback("OnFrame") - assert.same(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) + assert.are.equals(build.calcsTab.mainOutput.CritChance, 5.5 * build.calcsTab.mainOutput.HitChance / 100) end) it("creates an item and has the correct crit multi", function() - assert.same(1.5, build.calcsTab.mainOutput.CritMultiplier) + assert.are.equals(1.5, build.calcsTab.mainOutput.CritMultiplier) build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") build.itemsTab:AddDisplayItem() runCallback("OnFrame") - assert.same(1.5 + .2, build.calcsTab.mainOutput.CritMultiplier) + assert.are.equals(1.5 + .2, build.calcsTab.mainOutput.CritMultiplier) end) end) \ No newline at end of file diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua new file mode 100644 index 00000000..3970c323 --- /dev/null +++ b/spec/System/TestBuilds_spec.lua @@ -0,0 +1,33 @@ +local function fetchBuilds(path, buildList) + local buildList = buildList or {} + for file in lfs.dir(path) do + if file ~= "." and file ~= ".." then + local f = path..'/'..file + local attr = lfs.attributes (f) + assert (type(attr) == "table") + if attr.mode == "directory" then + fetchBuilds(f, buildList) + else + table.insert(buildList, LoadModule(f)) + end + end + end + return buildList +end + +describe("test all test builds", function() + + local buildList = fetchBuilds("spec/TestBuilds") + for _, testBuild in ipairs(buildList) do + loadBuildFromXML(testBuild.xml) + for key, value in pairs(testBuild.output) do + it("test key: " .. key, function() + if type(value) == 'number' then + value = round(value, 4) + build.calcsTab.mainOutput[key] = round(build.calcsTab.mainOutput[key], 4) + end + assert.are.equals(build.calcsTab.mainOutput[key], value) + end) + end + end +end) \ No newline at end of file diff --git a/Test/TestBuilds/3.13/OccVortex.lua b/spec/TestBuilds/3.13/OccVortex.lua similarity index 100% rename from Test/TestBuilds/3.13/OccVortex.lua rename to spec/TestBuilds/3.13/OccVortex.lua From 9ac85047710c8bd54ff941c0d2a49dd3d2961ed7 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Thu, 21 Jan 2021 11:58:44 -0600 Subject: [PATCH 23/42] Updating LuaJIT location --- .github/workflows/test.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b3df8d34..c1cdeb50 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,5 +1,9 @@ name: Run Tests -on: push +on: + push: + branches: [ dev ] + pull_request: + branches: [ dev ] jobs: run_tests: runs-on: ubuntu-latest @@ -21,8 +25,8 @@ jobs: - name: Unzip for lua libs run: unzip runtime-win32.zip - name: Set LUA_PATH - run: export LUA_PATH=./lua/?.lua + run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests - run: busted -c --lua=/usr/bin/luajit --helper=HeadlessWrapper.lua . + run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . - name: Report coverage run: luacov-coveralls From 08ded5e354949e64b38596210147fb3f4855eb1f Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Thu, 21 Jan 2021 12:43:36 -0600 Subject: [PATCH 24/42] Removing coveralls for now --- .github/workflows/test.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c1cdeb50..b621b259 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,5 +28,3 @@ jobs: run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . - - name: Report coverage - run: luacov-coveralls From 3617eb37aab34612048d1f306186521f496a4634 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Tue, 26 Jan 2021 17:13:15 -0600 Subject: [PATCH 25/42] Using coveralls action --- .github/workflows/test.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b621b259..f476b2d4 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,11 +20,13 @@ jobs: run: luarocks install busted - name: Install cluacov run: luarocks install cluacov - - name: Install coveralls integration - run: luarocks install luacov-coveralls - name: Unzip for lua libs run: unzip runtime-win32.zip - name: Set LUA_PATH run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . + - name: Coveralls GitHub Action + uses: coverallsapp/github-action@v1.1.2 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} From 19068ce86c5880eca1fe26ebc22199c544376651 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Tue, 26 Jan 2021 17:26:27 -0600 Subject: [PATCH 26/42] LuaCov vs. lcov --- .github/workflows/test.yml | 6 ++---- src/Export/spec.lua | 2 ++ src/HeadlessWrapper.lua | 2 +- src/Launch.lua | 5 +++++ 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f476b2d4..9e8e74b6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -26,7 +26,5 @@ jobs: run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . - - name: Coveralls GitHub Action - uses: coverallsapp/github-action@v1.1.2 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Report coverage + run: luacov-coveralls --repo-token=${{ secrets.github_token }} diff --git a/src/Export/spec.lua b/src/Export/spec.lua index c6bc7aae..d7767e79 100644 --- a/src/Export/spec.lua +++ b/src/Export/spec.lua @@ -1402,6 +1402,8 @@ return { width=50 } }, + ComponentWeapon={ + }, CooldownBypassTypes={ }, CooldownGroups={ diff --git a/src/HeadlessWrapper.lua b/src/HeadlessWrapper.lua index d28ca522..cc5c8285 100644 --- a/src/HeadlessWrapper.lua +++ b/src/HeadlessWrapper.lua @@ -143,7 +143,7 @@ function PCall(func, ...) end function ConPrintf(fmt, ...) -- Optional - --print(string.format(fmt, ...)) + print(string.format(fmt, ...)) end function ConPrintTable(tbl, noRecurse) end function ConExecute(cmd) end diff --git a/src/Launch.lua b/src/Launch.lua index 25bd5abc..aa04ec0c 100644 --- a/src/Launch.lua +++ b/src/Launch.lua @@ -13,6 +13,11 @@ launch = { } SetMainObject(launch) function launch:OnInit() +--[[package.cpath = package.cpath .. ';C:/Users/trevo/AppData/Roaming/JetBrains/PyCharmCE2020.3/plugins/intellij-emmylua/classes/debugger/emmy/windows/x86/?.dll' +--package.cpath= package.cpath .. ';C:/Users/trevo/Documents/GitHub/EmmyLuaDebugger/out/build/x86-Release/install/bin/?.dll' +local dbg = require('emmy_core') +dbg.tcpListen('localhost', 9966) +dbg.waitIDE()]] self.devMode = false self.installedMode = false self.versionNumber = "?" From 131902141d36b39adbaf2cfe7c87757cc8a9c5eb Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Tue, 26 Jan 2021 17:31:39 -0600 Subject: [PATCH 27/42] Revert "Using coveralls action" This reverts commit c1a8f4adbfddb1a04e1b7e80a6cf103488f78753. --- .github/workflows/test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9e8e74b6..dea7793a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -20,6 +20,8 @@ jobs: run: luarocks install busted - name: Install cluacov run: luarocks install cluacov + - name: Install coveralls integration + run: luarocks install luacov-coveralls - name: Unzip for lua libs run: unzip runtime-win32.zip - name: Set LUA_PATH From 2dc0053e083c70cb25f4f96f03698bc605039301 Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:41:43 +0100 Subject: [PATCH 28/42] refactor: remove debugger injection --- src/Launch.lua | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Launch.lua b/src/Launch.lua index aa04ec0c..25bd5abc 100644 --- a/src/Launch.lua +++ b/src/Launch.lua @@ -13,11 +13,6 @@ launch = { } SetMainObject(launch) function launch:OnInit() ---[[package.cpath = package.cpath .. ';C:/Users/trevo/AppData/Roaming/JetBrains/PyCharmCE2020.3/plugins/intellij-emmylua/classes/debugger/emmy/windows/x86/?.dll' ---package.cpath= package.cpath .. ';C:/Users/trevo/Documents/GitHub/EmmyLuaDebugger/out/build/x86-Release/install/bin/?.dll' -local dbg = require('emmy_core') -dbg.tcpListen('localhost', 9966) -dbg.waitIDE()]] self.devMode = false self.installedMode = false self.versionNumber = "?" From 575e24ad3ded02c34a969744b85b26f32096b7cb Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:46:59 +0100 Subject: [PATCH 29/42] style: remove extra whitespace --- spec/System/TestBuilds_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index 3970c323..363b32c7 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -4,7 +4,7 @@ local function fetchBuilds(path, buildList) if file ~= "." and file ~= ".." then local f = path..'/'..file local attr = lfs.attributes (f) - assert (type(attr) == "table") + assert(type(attr) == "table") if attr.mode == "directory" then fetchBuilds(f, buildList) else From 240757b107564c46590791dbb5f6fa017fdf57a2 Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:49:13 +0100 Subject: [PATCH 30/42] refactor: variable is already in local scope --- spec/System/TestBuilds_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index 363b32c7..1a6dbc50 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -1,5 +1,5 @@ local function fetchBuilds(path, buildList) - local buildList = buildList or {} + buildList = buildList or {} for file in lfs.dir(path) do if file ~= "." and file ~= ".." then local f = path..'/'..file From b84d0773e8be564a0d05db0f708fb872b29e6bbd Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:49:46 +0100 Subject: [PATCH 31/42] style: inconsistent use of quotation marks --- spec/System/TestBuilds_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index 1a6dbc50..cc191db6 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -22,7 +22,7 @@ describe("test all test builds", function() loadBuildFromXML(testBuild.xml) for key, value in pairs(testBuild.output) do it("test key: " .. key, function() - if type(value) == 'number' then + if type(value) == "number" then value = round(value, 4) build.calcsTab.mainOutput[key] = round(build.calcsTab.mainOutput[key], 4) end From 8b793652099d7d101e0e9ebbb25a6da7c40de7a1 Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:56:11 +0100 Subject: [PATCH 32/42] style: explicit number representation --- spec/System/TestAttacks_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestAttacks_spec.lua b/spec/System/TestAttacks_spec.lua index a1ab5a3c..7603c3eb 100644 --- a/spec/System/TestAttacks_spec.lua +++ b/spec/System/TestAttacks_spec.lua @@ -20,6 +20,6 @@ describe("TestAttacks", function() build.itemsTab:CreateDisplayItemFromRaw("New Item\nAssassin Bow\nCrafted: true\nPrefix: None\nPrefix: None\nPrefix: None\nSuffix: None\nSuffix: None\nSuffix: None\nQuality: 20\nSockets: G-G-G-G-G-G\nLevelReq: 62\nImplicits: 1\n{tags:damage,critical}{range:0.5}+(15-25)% to Global Critical Strike Multiplier") build.itemsTab:AddDisplayItem() runCallback("OnFrame") - assert.are.equals(1.5 + .2, build.calcsTab.mainOutput.CritMultiplier) + assert.are.equals(1.5 + 0.2, build.calcsTab.mainOutput.CritMultiplier) end) end) \ No newline at end of file From 0945685157136ca0043c7526d90b39490d685b6c Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 01:59:59 +0100 Subject: [PATCH 33/42] feat: add busted config file --- .busted | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .busted diff --git a/.busted b/.busted new file mode 100644 index 00000000..d16c464b --- /dev/null +++ b/.busted @@ -0,0 +1,12 @@ +return { + _all = { + coverage = true, + verbose = true, + }, + default = { + directory = "src", + lpath = "../runtime/lua/?.lua", + helper = "HeadlessWrapper.lua", + ROOT = { "../spec" }, + } +} From a021e3858e3d2414eeb8e2a85c0349f2cf773925 Mon Sep 17 00:00:00 2001 From: ppoelzl <33464174+ppoelzl@users.noreply.github.com> Date: Wed, 10 Mar 2021 02:07:46 +0100 Subject: [PATCH 34/42] refactor: update test runner --- .github/workflows/test.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dea7793a..5c15a04c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,11 +22,7 @@ jobs: run: luarocks install cluacov - name: Install coveralls integration run: luarocks install luacov-coveralls - - name: Unzip for lua libs - run: unzip runtime-win32.zip - - name: Set LUA_PATH - run: echo "LUA_PATH=$LUA_PATH;$GITHUB_WORKSPACE/lua/?.lua" >> $GITHUB_ENV - name: Run tests - run: busted -c --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit --helper=HeadlessWrapper.lua . + run: busted --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit . - name: Report coverage run: luacov-coveralls --repo-token=${{ secrets.github_token }} From a1ac321bb25e64e68eab73793480c6a074bb7b07 Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Mon, 15 Mar 2021 21:22:23 -0500 Subject: [PATCH 35/42] Updating path for project structure refactor --- spec/System/TestBuilds_spec.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index cc191db6..e685c1a0 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -17,7 +17,7 @@ end describe("test all test builds", function() - local buildList = fetchBuilds("spec/TestBuilds") + local buildList = fetchBuilds("../spec/TestBuilds") for _, testBuild in ipairs(buildList) do loadBuildFromXML(testBuild.xml) for key, value in pairs(testBuild.output) do @@ -30,4 +30,4 @@ describe("test all test builds", function() end) end end -end) \ No newline at end of file +end) From 4f1eb46465bd9bf6be87e2292b2bdf8603d42a9f Mon Sep 17 00:00:00 2001 From: Trevor Lund Date: Sun, 28 Mar 2021 01:11:10 -0500 Subject: [PATCH 36/42] Adding more builds for testing --- spec/TestBuilds/3.13/Dual Saviour.lua | 2 +- spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua | 2 +- spec/TestBuilds/3.13/Generals Perforate Zerker.lua | 2 +- spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/TestBuilds/3.13/Dual Saviour.lua b/spec/TestBuilds/3.13/Dual Saviour.lua index e4214501..fe11c27c 100644 --- a/spec/TestBuilds/3.13/Dual Saviour.lua +++ b/spec/TestBuilds/3.13/Dual Saviour.lua @@ -711,7 +711,7 @@ Triggers Level 20 Reflection when Equipped ]], - ouput = { ["CombinedAvg"] = 0, + output = { ["CombinedAvg"] = 0, ["FrenzyChargesMin"] = 0, ["WithIgniteDPS"] = 0, ["HitChance"] = 100, diff --git a/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua b/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua index 882515a3..a8881d88 100644 --- a/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua +++ b/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua @@ -1166,7 +1166,7 @@ Your Maximum Frenzy Charges is equal to your Maximum Power Charges ]], - ouput = { ["CombinedAvg"] = 372408.52275, + output = { ["CombinedAvg"] = 372408.52275, ["FrenzyChargesMin"] = 0, ["EnergyShieldOnGloves"] = 202, ["HitChance"] = 100, diff --git a/spec/TestBuilds/3.13/Generals Perforate Zerker.lua b/spec/TestBuilds/3.13/Generals Perforate Zerker.lua index 905b45e8..390caba1 100644 --- a/spec/TestBuilds/3.13/Generals Perforate Zerker.lua +++ b/spec/TestBuilds/3.13/Generals Perforate Zerker.lua @@ -1185,7 +1185,7 @@ Gain 50 Life when you Stun an Enemy ]], - ouput = { ["CombinedAvg"] = 0, + output = { ["CombinedAvg"] = 0, ["FrenzyChargesMin"] = 0, ["EnergyShieldOnGloves"] = 69, ["HitChance"] = 100, diff --git a/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua b/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua index 17013465..007bf942 100644 --- a/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua +++ b/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua @@ -1314,7 +1314,7 @@ Implicits: 0 ]], - ouput = { ["CombinedAvg"] = 104290.52274695, + output = { ["CombinedAvg"] = 104290.52274695, ["FrenzyChargesMin"] = 0, ["EnergyShieldOnGloves"] = 4, ["HitChance"] = 91, From 08a6cdc37aae78f1cd514882644f8f9428125281 Mon Sep 17 00:00:00 2001 From: Wires77 Date: Thu, 13 May 2021 00:34:16 -0500 Subject: [PATCH 37/42] Fixing broken test and workflow --- .github/workflows/test.yml | 2 +- spec/System/TestBuilds_spec.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5c15a04c..9f6624b7 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -23,6 +23,6 @@ jobs: - name: Install coveralls integration run: luarocks install luacov-coveralls - name: Run tests - run: busted --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit . + run: busted --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit - name: Report coverage run: luacov-coveralls --repo-token=${{ secrets.github_token }} diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index e685c1a0..033a381a 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -24,7 +24,7 @@ describe("test all test builds", function() it("test key: " .. key, function() if type(value) == "number" then value = round(value, 4) - build.calcsTab.mainOutput[key] = round(build.calcsTab.mainOutput[key], 4) + build.calcsTab.mainOutput[key] = round(build.calcsTab.mainOutput[key] or 0, 4) end assert.are.equals(build.calcsTab.mainOutput[key], value) end) From 755a1069970c34af394462801799e74eeadfb833 Mon Sep 17 00:00:00 2001 From: Wires77 Date: Thu, 13 May 2021 11:42:25 -0500 Subject: [PATCH 38/42] Improved logging, still need to update old test builds --- spec/System/TestBuilds_spec.lua | 14 +++++++------- spec/TestBuilds/3.13/Dual Saviour.lua | 12 ++++++------ spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua | 14 +++++++------- spec/TestBuilds/3.13/Generals Perforate Zerker.lua | 12 ++++++------ spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua | 12 ++++++------ 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index 033a381a..ffad1274 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -8,25 +8,25 @@ local function fetchBuilds(path, buildList) if attr.mode == "directory" then fetchBuilds(f, buildList) else - table.insert(buildList, LoadModule(f)) + buildList[file] = LoadModule(f) end end end return buildList end -describe("test all test builds", function() +describe("test all builds", function() local buildList = fetchBuilds("../spec/TestBuilds") - for _, testBuild in ipairs(buildList) do + for buildName, testBuild in pairs(buildList) do loadBuildFromXML(testBuild.xml) for key, value in pairs(testBuild.output) do - it("test key: " .. key, function() + it("on build: " .. buildName .. ", testing stat: " .. key, function() if type(value) == "number" then - value = round(value, 4) - build.calcsTab.mainOutput[key] = round(build.calcsTab.mainOutput[key] or 0, 4) + assert.are.same(round(value, 4), round(build.calcsTab.mainOutput[key] or 0, 4)) + else + assert.are.same(value, build.calcsTab.mainOutput[key]) end - assert.are.equals(build.calcsTab.mainOutput[key], value) end) end end diff --git a/spec/TestBuilds/3.13/Dual Saviour.lua b/spec/TestBuilds/3.13/Dual Saviour.lua index fe11c27c..03d31017 100644 --- a/spec/TestBuilds/3.13/Dual Saviour.lua +++ b/spec/TestBuilds/3.13/Dual Saviour.lua @@ -762,7 +762,7 @@ Triggers Level 20 Reflection when Equipped ["ScorchChanceOnHit"] = 0, ["PhysicalMinBase"] = 0, ["SpellProjectileBlockChance"] = 0, - ["AnyAegis"] = "false", + ["AnyAegis"] = false, ["Dex"] = 14, ["KnockbackChanceOnHit"] = 0, ["TheoreticalOffensiveWarcryEffect"] = 1, @@ -774,7 +774,7 @@ Triggers Level 20 Reflection when Equipped ["KnockbackChance"] = 0, ["FireProjectileDamageChance"] = 15, ["LightningSpellProjectileDamageChance"] = 0, - ["AnyGuard"] = "false", + ["AnyGuard"] = false, ["RemovablePowerCharges"] = 0, ["Gear:Armour"] = 0, ["EnergyShieldLeechGainRate"] = 0, @@ -1027,7 +1027,7 @@ Triggers Level 20 Reflection when Equipped ["LightningTakenReflect"] = 1, ["PhysicalAverageDamageChance"] = 7.5, ["ColdManaEffectiveLife"] = 92, - ["dontSplitEvade"] = "true", + ["dontSplitEvade"] = true, ["EnergyShieldLeech"] = 0, ["ChaosMinBase"] = 0, ["FireMindOverMatter"] = 0, @@ -1039,7 +1039,7 @@ Triggers Level 20 Reflection when Equipped ["ColdResistOver75"] = 0, ["LifeLeechInstanceRate"] = 1.84, ["PowerCharges"] = 0, - ["EnergyShieldRechargeAppliesToEnergyShield"] = "true", + ["EnergyShieldRechargeAppliesToEnergyShield"] = true, ["ColdAegis"] = 0, ["FireTakenHitMult"] = 1.6, ["ColdAverageDamageChance"] = 7.5, @@ -1072,7 +1072,7 @@ Triggers Level 20 Reflection when Equipped ["ColdGuardEffectiveLife"] = 92, ["ColdSpellDamageChance"] = 0, ["ColdResistTotal"] = -60, - ["AnyMindOverMatter"] = "false", + ["AnyMindOverMatter"] = false, ["LightningTakenDotMult"] = 1.6, ["TotalMin"] = 0, ["ChaosTakenReflect"] = 1, @@ -1096,7 +1096,7 @@ Triggers Level 20 Reflection when Equipped ["EnduranceChargesMin"] = 0, ["ColdTakenReflectMult"] = 1.6, ["ManaOnBlock"] = 0, - ["AnyBypass"] = "false", + ["AnyBypass"] = false, ["MaxManaLeechInstance"] = 4.7, ["MissingFireResist"] = 135, ["MeleeNotHitChance"] = 28, diff --git a/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua b/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua index a8881d88..2a92f39a 100644 --- a/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua +++ b/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua @@ -1232,7 +1232,7 @@ Your Maximum Frenzy Charges is equal to your Maximum Power Charges ["KnockbackChance"] = 0, ["FireProjectileDamageChance"] = 15, ["LightningSpellProjectileDamageChance"] = 0, - ["AnyGuard"] = "false", + ["AnyGuard"] = false, ["PhysicalTakenReflect"] = 1, ["ShieldBlockChance"] = 0, ["SpellBlockChance"] = 0, @@ -1380,7 +1380,7 @@ Your Maximum Frenzy Charges is equal to your Maximum Power Charges ["LifeLeechRate"] = 269.6, ["ColdDotEHP"] = 23948, ["Armour"] = 164, - ["PierceCountString"] = 0, + ["PierceCountString"] = "Cannot pierce", ["TotalDPS"] = 14671299.759824, ["AverageHit"] = 372408.52275, ["EnergyShieldOnHitRate"] = 0, @@ -1399,7 +1399,7 @@ Your Maximum Frenzy Charges is equal to your Maximum Power Charges ["LifeLeechDuration"] = 5, ["LifeLeechPerHit"] = 134.8, ["TotalMax"] = 74689.065, - ["AnyAegis"] = "false", + ["AnyAegis"] = false, ["PhysicalGuardAbsorbRate"] = 0, ["LifeRegen"] = 1.348, ["MaxLifeLeechInstance"] = 134.8, @@ -1505,7 +1505,7 @@ Your Maximum Frenzy Charges is equal to your Maximum Power Charges ["StunDuration"] = 0.35, ["PhysicalMeleeDamageChance"] = 15, ["FireAverageDamageChance"] = 7.5, - ["AnyMindOverMatter"] = "false", + ["AnyMindOverMatter"] = false, ["ColdResistTotal"] = 92, ["MaxManaLeechInstance"] = 94.6, ["EnergyShieldRecoveryRateMod"] = 1, @@ -1525,7 +1525,7 @@ Your Maximum Frenzy Charges is equal to your Maximum Power Charges ["DamageReductionMax"] = 90, ["LifeLeechInstanceRate"] = 26.96, ["ArmourOnBoots"] = 164, - ["EnergyShieldRechargeAppliesToEnergyShield"] = "true", + ["EnergyShieldRechargeAppliesToEnergyShield"] = true, ["ColdResistOver75"] = 0, ["PowerCharges"] = 6, ["ColdAverageDamageChance"] = 7.5, @@ -1574,7 +1574,7 @@ Your Maximum Frenzy Charges is equal to your Maximum Power Charges ["ChillAvoidChance"] = 100, ["ChaosTotalPool"] = 5987, ["Gear:Armour"] = 164, - ["dontSplitEvade"] = "true", + ["dontSplitEvade"] = true, ["LightningNumberOfHits"] = 30.475983156577, ["CritMultiplier"] = 6.1, ["ManaReserved"] = 880, @@ -1582,7 +1582,7 @@ Your Maximum Frenzy Charges is equal to your Maximum Power Charges ["EnduranceChargesMin"] = 0, ["EnergyShieldOnBoots"] = 75, ["PhysicalTakenHitMult"] = 0.99, - ["AnyBypass"] = "true", + ["AnyBypass"] = true, ["FireTakenReflectMult"] = 0.2, ["MissingFireResist"] = 0, ["MeleeNotHitChance"] = 26.0125, diff --git a/spec/TestBuilds/3.13/Generals Perforate Zerker.lua b/spec/TestBuilds/3.13/Generals Perforate Zerker.lua index 390caba1..c8eb5cc9 100644 --- a/spec/TestBuilds/3.13/Generals Perforate Zerker.lua +++ b/spec/TestBuilds/3.13/Generals Perforate Zerker.lua @@ -1250,7 +1250,7 @@ Gain 50 Life when you Stun an Enemy ["KnockbackChance"] = 0, ["FireProjectileDamageChance"] = 30, ["LightningSpellProjectileDamageChance"] = 0, - ["AnyGuard"] = "true", + ["AnyGuard"] = true, ["PhysicalTakenReflect"] = 0.85519152, ["WarcryCastTime"] = 0, ["Gear:Armour"] = 2378, @@ -1514,7 +1514,7 @@ Gain 50 Life when you Stun an Enemy ["StunDuration"] = 0.35, ["PhysicalMeleeDamageChance"] = 30, ["LifeRegen"] = 438.268, - ["AnyMindOverMatter"] = "false", + ["AnyMindOverMatter"] = false, ["ManaRegenInc"] = 0, ["EnergyShieldRecoveryRateMod"] = 1, ["ColdResistTotal"] = 84, @@ -1528,13 +1528,13 @@ Gain 50 Life when you Stun an Enemy ["FireMindOverMatter"] = 0, ["FireGuardEffectivePool"] = 0, ["ChaosHitAverage"] = 0, - ["dontSplitEvade"] = "true", + ["dontSplitEvade"] = true, ["EnduranceChargesMin"] = 0, ["PhysicalGuardEffectivePool"] = 0, ["ManaRecoveryRateMod"] = 1, ["LifeLeechInstanceRate"] = 128.986, ["GhostShrouds"] = 0, - ["EnergyShieldRechargeAppliesToEnergyShield"] = "true", + ["EnergyShieldRechargeAppliesToEnergyShield"] = true, ["ArmourOnBoots"] = 126, ["ArmourOnBody Armour"] = 711, ["ColdAverageDamageChance"] = 15, @@ -1545,7 +1545,7 @@ Gain 50 Life when you Stun an Enemy ["LightningTotalEHP"] = 68520.248300325, ["ChaosProjectileDamageChance"] = 30, ["ManaLeechDuration"] = 0, - ["AnyAegis"] = "false", + ["AnyAegis"] = false, ["TotalAttr"] = 742, ["DoubleArmourChance"] = 0, ["FireTakenReflect"] = 0.67716, @@ -1591,7 +1591,7 @@ Gain 50 Life when you Stun an Enemy ["ChaosGuardEffectivePool"] = 0, ["ColdGuardAbsorb"] = 4686.4, ["LightningSpellDamageChance"] = 0, - ["AnyBypass"] = "false", + ["AnyBypass"] = false, ["PhysicalTakenHitMult"] = 0.1881421344, ["MissingFireResist"] = 0, ["MeleeNotHitChance"] = 1, diff --git a/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua b/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua index 007bf942..563b9721 100644 --- a/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua +++ b/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua @@ -1479,7 +1479,7 @@ Implicits: 0 ["Str"] = 124, ["FireProjectileDamageChance"] = 0, ["LightningSpellProjectileDamageChance"] = 10, - ["AnyGuard"] = "false", + ["AnyGuard"] = false, ["PhysicalTakenReflect"] = 0.518, ["Gear:Armour"] = 218, ["EnergyShieldLeechGainRate"] = 0.3, @@ -1697,7 +1697,7 @@ Implicits: 0 ["StunDuration"] = 0.35, ["PhysicalMeleeDamageChance"] = 0, ["ShieldBlockChance"] = 0, - ["AnyMindOverMatter"] = "false", + ["AnyMindOverMatter"] = false, ["ColdResistTotal"] = 77, ["LightningSpellDamageChance"] = 10, ["EnergyShield"] = 3, @@ -1716,14 +1716,14 @@ Implicits: 0 ["EvadeChance"] = 76.5, ["LifeLeechInstanceRate"] = 90.66, ["ArmourOnBoots"] = 218, - ["EnergyShieldRechargeAppliesToEnergyShield"] = "true", + ["EnergyShieldRechargeAppliesToEnergyShield"] = true, ["BlitzCharges"] = 0, ["SiphoningChargesMax"] = 0, ["ColdAverageDamageChance"] = 0, ["PhysicalEnergyShieldBypass"] = 0, ["ChaosTakenHitMult"] = 0.80465, ["PoisonAvoidChance"] = 0, - ["AnyAegis"] = "false", + ["AnyAegis"] = false, ["LightningTotalEHP"] = 171697.12793734, ["ChaosSpellDamageChance"] = 0, ["ManaLeechDuration"] = 0, @@ -1764,14 +1764,14 @@ Implicits: 0 ["ChillAvoidChance"] = 0, ["LightningTotalPool"] = 4536, ["RemovablePowerCharges"] = 0, - ["dontSplitEvade"] = "true", + ["dontSplitEvade"] = true, ["LightningNumberOfHits"] = 139.25152306353, ["CritMultiplier"] = 1.5, ["ManaReserved"] = 598, ["ChaosResistTotal"] = -21, ["PhysicalTakenHitMult"] = 0.47138, ["FireTakenReflectMult"] = 0.12432, - ["AnyBypass"] = "false", + ["AnyBypass"] = false, ["MaxManaLeechInstance"] = 74.1, ["MissingFireResist"] = 0, ["MeleeNotHitChance"] = 94.125, From 55eeb3ae8e9f7d936f99e227ef90afad2282e8e2 Mon Sep 17 00:00:00 2001 From: Wires77 Date: Thu, 13 May 2021 14:15:37 -0500 Subject: [PATCH 39/42] Removing failing builds, will re-add in a future commit --- spec/TestBuilds/3.13/Dual Saviour.lua | 1109 ---------- .../3.13/Dual Wield Cospris CoC.lua | 1595 --------------- .../3.13/Generals Perforate Zerker.lua | 1604 --------------- .../3.13/Mirage Archer Toxic Rain.lua | 1784 ----------------- spec/TestBuilds/3.13/OccVortex.lua | 1016 ---------- 5 files changed, 7108 deletions(-) delete mode 100644 spec/TestBuilds/3.13/Dual Saviour.lua delete mode 100644 spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua delete mode 100644 spec/TestBuilds/3.13/Generals Perforate Zerker.lua delete mode 100644 spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua delete mode 100644 spec/TestBuilds/3.13/OccVortex.lua diff --git a/spec/TestBuilds/3.13/Dual Saviour.lua b/spec/TestBuilds/3.13/Dual Saviour.lua deleted file mode 100644 index 03d31017..00000000 --- a/spec/TestBuilds/3.13/Dual Saviour.lua +++ /dev/null @@ -1,1109 +0,0 @@ -return { - xml = [[ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - 8% increased maximum Life - Regenerate 1% of Life per second - - - 3% increased maximum Life - - - Gain 1 Endurance Charge every second if you've been Hit Recently - - - 24% increased Evasion Rating and Armour - 8% increased maximum Life - 10% chance to Intimidate Enemies for 4 seconds on Hit - - - 2% increased Cast Speed - - - 4% increased maximum Mana - - - 4% increased Skill Effect Duration - - - +1% to maximum Fire Resistance - +20% to Fire Resistance - - - 3% increased maximum Energy Shield - - - +10% to Cold Resistance - - - 5% increased Area of Effect - - - 2% increased maximum Life - - - Minions deal 80% increased Damage - - - 15% increased effect of Non-Curse Auras from your Skills - - - 12% increased Fire Damage - - - 1% Chance to Block Spell Damage - - - 5% increased maximum Energy Shield - - - 10% increased maximum Life - Regenerate 1.1% of Life per second - - - +11% to Fire Resistance - - - 3% increased effect of Non-Curse Auras from your Skills - - - 3% increased Effect of your Curses - - - 9% increased Evasion Rating - - - 5% increased Skill Effect Duration - - - 10% increased Area Damage - - - 12% increased Mana Regeneration Rate - - - 10% increased Attack Damage - - - +8% to Chaos Resistance - - - +9% to Critical Strike Multiplier - - - 2% chance to deal Double Damage - 25% increased Physical Damage - - - 3% increased maximum Life - - - 3% increased Movement Speed - - - 3% increased Cast Speed - 11% increased Projectile Damage - 5% chance to Shock - 6% chance to Ignite - - - 12% increased Spell Damage - - - 1% chance to Dodge Attack Hits - - - 7% increased Projectile Speed - - - 3% increased Attack Speed - - - 5% increased Effect of your Curses - - - 7% increased Physical Damage - - - 7% increased Armour - - - +12% to Lightning Resistance - - - 2% increased maximum Life - - - 10% increased Fire Damage - - - 11% increased Area Damage - - - +10% to Fire Resistance - - - 7% increased Area Damage - - - 7% increased Fire Damage - 6% increased maxmium Mana - +11% to Lightning Resistance - - - +8% to Critical Strike Multiplier - - - 10% increased Critical Strike Chance - - - 3% increased maximum Life - - - 7% increased Spell Damage - - - 20% increased Area of Effect of Aura Skills - 15% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - +9% to Critical Strike Multiplier - - - 1% chance to Dodge Spell Hits - - - +10% to Fire Resistance - - - +8% to Critical Strike Multiplier - - - 8% increased Armour - - - 5% increased maximum Energy Shield - - - 3% increased maximum Life - - - 28% increased Cold Damage - 10% of Physical Damage Converted to Cold Damage - - - 7% increased maximum Life - 0.4% of Attack Damage Leeched as Life - - - 12% increased Area Damage - - - 7% increased Spell Damage - - - +8% to Critical Strike Multiplier - - - +14% to Fire Resistance - - - 8% increased Chaos Damage - - - 12% increased Physical Damage - - - 10% increased Lightning Damage - - - 3% increased maximum Life - - - 5% increased Area of Effect - - - 6% increased Area of Effect - - - 10% chance to gain a Frenzy Charge on Hit - - - 8% increased maximum Life - Regenerate 0.7% of Life per second - - - 9% increased Evasion Rating - - - +13% to Fire Resistance - - - +11% to Fire Resistance - - - 11% increased Fire Damage - - - 10% increased Projectile Speed - - - 7% increased Projectile Damage - - - 20% increased Area of Effect of Aura Skills - 15% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - 3% increased Movement Speed - - - Minions deal 12% increased Damage - - - 2% increased maximum Life - - - +13% to Lightning Resistance - - - +6% to Chaos Resistance - - - +12% to Lightning Resistance - - - +12% to Fire Resistance - - - +12% to Cold Resistance - - - 10% increased Damage over Time - - - 10% increased Chaos Damage - - - 30% increased Chaos Damage - 25% chance to inflict Withered for 2 seconds on Hit - - - 27% increased Spell Damage - 43% increased Critical Strike Chance for Spells - - - +9% to Critical Strike Multiplier - - - 3% increased effect of Non-Curse Auras from your Skills - - - 12% increased Chaos Damage - - - 3% increased Movement Speed - - - 3% increased Movement Speed - - - 1% Chance to Block Spell Damage - - - 7% increased Spell Damage - - - 33% increased Fire Damage - Damage Penetrates 2% Fire Resistance - - - 9% increased Chaos Damage - - - 9% increased Fire Damage - - - 4% chance to Freeze - - - 1% Chance to Block Spell Damage - - - +9% to Critical Strike Multiplier - - - 5% increased maximum Energy Shield - - - 1% chance to Dodge Spell Hits - - - +7% to Chaos Resistance - - - 2% increased maximum Life - - - +1% to maximum Chaos Resistance - +17% to Chaos Resistance - - - 2% increased maximum Life - - - +8% to Chaos Resistance - - - 34% increased Fire Damage - Damage Penetrates 3% Fire Resistance - - - +12% to Fire Resistance - - - +12% to Cold Resistance - - - 8% increased Attack Damage - - - 4% increased maximum Life - - - 4% increased maximum Mana - - - 12% increased Chaos Damage - - - 12% increased Evasion Rating - - - - https://www.pathofexile.com/passive-skill-tree/AAAABAECAHZ_hMR-4J5X5FF7jA== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rarity: UNIQUE -The Saviour -Legion Sword -Quality: 20 -Sockets: R-R-R -LevelReq: 62 -Implicits: 1 -40% increased Global Accuracy Rating -Triggers Level 20 Reflection when Equipped -{range:0.5}(40-50)% increased Physical Damage -{range:0.5}Adds (16-22) to (40-45) Physical Damage -{range:0.5}(8-12)% increased Attack Speed -{range:0.5}(8-12)% increased Critical Strike Chance - - - - - - - Rarity: UNIQUE -Actum -Butcher Axe -League: Heist -Quality: 20 -LevelReq: 63 -Implicits: 0 -Has no Sockets -{range:0.5}(200-250)% increased Physical Damage -You have no Intelligence -{range:0.5}Critical Strike Chance is (20-30)% for Hits with this Weapon - - - - Rarity: UNIQUE -The Saviour -Legion Sword -Quality: 20 -Sockets: R-R-R -LevelReq: 62 -Implicits: 1 -40% increased Global Accuracy Rating -Triggers Level 20 Reflection when Equipped -{range:1}(40-50)% increased Physical Damage -{range:0.5}Adds (16-22) to (40-45) Physical Damage -{range:0.5}(8-12)% increased Attack Speed -{range:0.5}(8-12)% increased Critical Strike Chance - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]], - output = { ["CombinedAvg"] = 0, - ["FrenzyChargesMin"] = 0, - ["WithIgniteDPS"] = 0, - ["HitChance"] = 100, - ["LightningDotEHP"] = 57.5, - ["CrabBarriersMax"] = 0, - ["ShockAvoidChance"] = 0, - ["AvoidColdDamageChance"] = 0, - ["AnyTakenReflect"] = 0, - ["InspirationCharges"] = 0, - ["FireEnergyShieldBypass"] = 0, - ["KnockbackChanceOnCrit"] = 0, - ["ReqInt"] = 0, - ["ProjectileNotHitChance"] = 28, - ["ColdMinBase"] = 0, - ["MaxManaLeechRate"] = 9.4, - ["PhysicalTakenReflectMult"] = 1, - ["LightningLightningBaseTakenHitMult"] = 1.6, - ["ManaOnHit"] = 0, - ["PhysicalProjectileDamageChance"] = 15, - ["ManaCost"] = 0, - ["DoubleDamageChance"] = 0, - ["EnergyShieldLeechInstantRate"] = 0, - ["FireMeleeDamageChance"] = 15, - ["PhysicalGuardEffectiveLife"] = 92, - ["PhysicalAegis"] = 0, - ["EnergyShieldRegen"] = 0, - ["LightningAegis"] = 0, - ["SiphoningCharges"] = 0, - ["RuthlessBlowEffect"] = 1, - ["PhysicalTakenHitMult"] = 1, - ["ChaosDotEHP"] = 57.5, - ["ReqStr"] = 122, - ["LightningGuardAbsorbRate"] = 0, - ["MissingLightningResist"] = 135, - ["AverageBlockChance"] = 7.5, - ["LightningGuardEffectivePool"] = 0, - ["BonusCritDotMultiplier"] = 0, - ["MaxEnergyShieldLeechRate"] = 0, - ["EnergyShieldLeechInstanceRate"] = 0, - ["PhysicalNumberOfHits"] = 16.341923318668, - ["ChaosTakenHit"] = 1, - ["FireFireBaseTakenHitMult"] = 1.6, - ["CurrentShock"] = 0, - ["PhysicalResist"] = 0, - ["ColdSpellProjectileDamageChance"] = 0, - ["FireResistOver75"] = 0, - ["ColdResist"] = -60, - ["ScorchChanceOnHit"] = 0, - ["PhysicalMinBase"] = 0, - ["SpellProjectileBlockChance"] = 0, - ["AnyAegis"] = false, - ["Dex"] = 14, - ["KnockbackChanceOnHit"] = 0, - ["TheoreticalOffensiveWarcryEffect"] = 1, - ["IgniteChanceOnHit"] = 0, - ["PowerChargesMax"] = 3, - ["Spec:ArmourInc"] = 0, - ["PhysicalDamageReduction"] = 0, - ["Str"] = 52, - ["KnockbackChance"] = 0, - ["FireProjectileDamageChance"] = 15, - ["LightningSpellProjectileDamageChance"] = 0, - ["AnyGuard"] = false, - ["RemovablePowerCharges"] = 0, - ["Gear:Armour"] = 0, - ["EnergyShieldLeechGainRate"] = 0, - ["SpellBlockChance"] = 0, - ["PhysicalMindOverMatter"] = 0, - ["LightningManaEffectiveLife"] = 92, - ["ManaLeechInstances"] = 0, - ["LightningResistOver75"] = 0, - ["ColdTakenReflect"] = 1, - ["SpellBlockChanceMax"] = 75, - ["ChaosEnergyShieldBypass"] = 100, - ["impaleStoredHitAvg"] = 0, - ["ManaOnHitRate"] = 0, - ["ChaosMeleeDamageChance"] = 15, - ["EnergyShieldRechargeDelay"] = 2, - ["ChallengerCharges"] = 0, - ["Int"] = 14, - ["ColdEnergyShieldBypass"] = 0, - ["FireResistTotal"] = -60, - ["FreezeAvoidChance"] = 0, - ["ChaosTakenHitMult"] = 1.6, - ["BleedChanceOnHit"] = 0, - ["AttackDodgeChance"] = 0, - ["ReqDex"] = 155, - ["ColdTakenHit"] = 1, - ["LightningProjectileDamageChance"] = 15, - ["PhysicalHitAverage"] = 0, - ["DoubleDamageChanceOnCrit"] = 0, - ["ChaosMindOverMatter"] = 0, - ["EffectiveMovementSpeedMod"] = 1, - ["PoisonAvoidChance"] = 0, - ["LightningResistTotal"] = -60, - ["FireMinBase"] = 0, - ["LightningMinBase"] = 0, - ["InteruptStunAvoidChance"] = 0, - ["RuthlessBlowMaxCount"] = 0, - ["AverageDamage"] = 0, - ["ColdTakenHitMult"] = 1.6, - ["PowerChargesMin"] = 0, - ["Devotion"] = 0, - ["MissingColdResist"] = 135, - ["ChaosGuardAbsorbRate"] = 0, - ["FireSpellDamageChance"] = 0, - ["ColdGuardAbsorbRate"] = 0, - ["DoubleArmourChance"] = 0, - ["FireDotEHP"] = 57.5, - ["RemovableFrenzyCharges"] = 0, - ["ChaosAegis"] = 0, - ["PhysicalTotalPool"] = 92, - ["FreezeChanceOnCrit"] = 0, - ["BlockDuration"] = 0.35, - ["ManaLeechPerHit"] = 0, - ["MissingChaosResist"] = 135, - ["FireTakenHit"] = 1, - ["BleedAvoidChance"] = 0, - ["AverageNotHitChance"] = 14, - ["EnergyShieldOnBlock"] = 0, - ["StunAvoidChance"] = 0, - ["EvadeChance"] = 28, - ["Life"] = 92, - ["DurationMod"] = 1, - ["EnduranceCharges"] = 0, - ["ColdTakenDotMult"] = 1.6, - ["ChaosAverageDamageChance"] = 7.5, - ["ChaosMaximumHitTaken"] = 57.5, - ["SapChanceOnHit"] = 0, - ["PhysicalTotalEHP"] = 122.56442489001, - ["WithPoisonDPS"] = 0, - ["Spec:EvasionInc"] = 0, - ["ColdMindOverMatter"] = 0, - ["FireAverageDamageChance"] = 7.5, - ["Spec:ManaInc"] = 0, - ["MaximumShock"] = 50, - ["Spec:LifeInc"] = 0, - ["EnergyShieldLeechInstant"] = 0, - ["SpellProjectileNotHitChance"] = 0, - ["LifeRegenPercent"] = 0, - ["LightningResist"] = -60, - ["PhysicalSpellProjectileDamageChance"] = 0, - ["LifeLeechGainRate"] = 0, - ["SpellNotHitChance"] = 0, - ["LifeReservedPercent"] = 0, - ["PhysicalMaximumHitTaken"] = 92, - ["ExtraPoints"] = 2, - ["ManaUnreservedPercent"] = 100, - ["ProjectileEvadeChance"] = 28, - ["TotalDotDPS"] = 0, - ["FireMaxBase"] = 0, - ["LightningCritAverage"] = 0, - ["FireCritAverage"] = 0, - ["MaxEnergyShieldLeechInstance"] = 0, - ["Spec:EnergyShieldInc"] = 0, - ["PhysicalSpellDamageChance"] = 0, - ["EnergyShieldLeechInstances"] = 0, - ["AvoidPhysicalDamageChance"] = 0, - ["CombinedDPS"] = 0, - ["TotalDot"] = 0, - ["AilmentWarcryEffect"] = 1, - ["EnemyStunDuration"] = 0.35, - ["ChaosResistOver75"] = 0, - ["EnergyShieldRecharge"] = 0, - ["LightningResistOverCap"] = 0, - ["EnemyStunThresholdMod"] = 1, - ["ImpaleChance"] = 0, - ["BrittleChanceOnHit"] = 0, - ["TotalDotInstance"] = 0, - ["LightningSpellDamageChance"] = 0, - ["FreezeChanceOnHit"] = 0, - ["ShockChanceOnHit"] = 0, - ["LightningTakenReflectMult"] = 1.6, - ["AvoidChaosDamageChance"] = 0, - ["PhysicalTakenHit"] = 1, - ["PoisonChanceOnHit"] = 0, - ["SapChanceOnCrit"] = 0, - ["ExertedAttackUptimeRatio"] = 0, - ["FireResist"] = -60, - ["ChillChanceOnCrit"] = 0, - ["ColdDotEHP"] = 57.5, - ["ShockChanceOnCrit"] = 0, - ["IgniteChanceOnCrit"] = 0, - ["PoisonChanceOnCrit"] = 0, - ["BleedChanceOnCrit"] = 0, - ["ManaLeechGainRate"] = 0, - ["ManaLeechRate"] = 0, - ["ManaLeechInstanceRate"] = 0.94, - ["EnergyShieldLeechPerHit"] = 0, - ["EnergyShieldLeechRate"] = 0, - ["InspirationChargesMax"] = 5, - ["ChaosResist"] = -60, - ["AverageHit"] = 0, - ["LifeLeechRate"] = 0, - ["ColdResistOverCap"] = 0, - ["ManaUnreserved"] = 47, - ["EnergyShield"] = 0, - ["Accuracy"] = 86.4, - ["TotalDPS"] = 0, - ["LifeLeechPerHit"] = 0, - ["EnergyShieldOnHitRate"] = 0, - ["LifeOnHitRate"] = 0, - ["PhysicalGuardAbsorbRate"] = 0, - ["LifeRegen"] = 0, - ["MaxLifeLeechInstance"] = 9.2, - ["EnergyShieldOnHit"] = 0, - ["ColdMeleeDamageChance"] = 15, - ["LifeOnHit"] = 0, - ["ManaLeechInstantRate"] = 0, - ["TripleDamageChance"] = 0, - ["LifeUnreservedPercent"] = 100, - ["ScorchChanceOnCrit"] = 0, - ["OffensiveWarcryEffect"] = 1, - ["EnergyShieldLeechDuration"] = 0, - ["LifeLeechInstantRate"] = 0, - ["LifeLeechDuration"] = 0, - ["LifeLeechInstances"] = 0, - ["BlockChanceMax"] = 75, - ["RuthlessBlowChance"] = 0, - ["LightRadiusMod"] = 1, - ["TotalMax"] = 0, - ["CrabBarriers"] = 0, - ["ManaRegen"] = 0.8, - ["ChaosChaosBaseTakenHitMult"] = 1.6, - ["DamageReductionMax"] = 90, - ["FireHitAverage"] = 0, - ["ColdHitAverage"] = 0, - ["CritEffect"] = 1, - ["ChaosCritAverage"] = 0, - ["WithBleedDPS"] = 0, - ["PhysicalTakenDotMult"] = 1, - ["AvoidLightningDamageChance"] = 0, - ["PhysicalCritAverage"] = 0, - ["ColdColdBaseTakenHitMult"] = 1.6, - ["LightningGuardEffectiveLife"] = 92, - ["AvoidFireDamageChance"] = 0, - ["ChaosSpellProjectileDamageChance"] = 0, - ["ChaosProjectileDamageChance"] = 15, - ["FrenzyCharges"] = 0, - ["TotalCharges"] = 0, - ["ChaosTakenReflectMult"] = 1.6, - ["ManaLeech"] = 0, - ["LifeReserved"] = 0, - ["ShieldBlockChance"] = 0, - ["LifeLeechInstant"] = 0, - ["FireSpellProjectileDamageChance"] = 0, - ["LifeLeech"] = 0, - ["ChaosMaxBase"] = 0, - ["GhostShrouds"] = 0, - ["ColdMaxBase"] = 0, - ["EnemyCurseLimit"] = 1, - ["LightningMaxBase"] = 0, - ["LightningEnergyShieldBypass"] = 0, - ["PhysicalMaxBase"] = 0, - ["DoubleDamageEffect"] = 1, - ["ColdTotalPool"] = 92, - ["LightningMindOverMatter"] = 0, - ["TripleDamageEffect"] = 1, - ["TripleDamageChanceOnCrit"] = 0, - ["ScaledDamageEffect"] = 1, - ["LightningHitAverage"] = 0, - ["FireTakenReflect"] = 1, - ["PreEffectiveCritChance"] = 0, - ["CritChance"] = 0, - ["PhysicalResistWhenHit"] = 0, - ["FistOfWarCooldown"] = 0, - ["RuthlessBlowMultiplier"] = 1, - ["FistOfWarAilmentEffect"] = 1, - ["BlitzChargesMax"] = 0, - ["FistOfWarHitEffect"] = 1, - ["LightningAverageDamageChance"] = 7.5, - ["BrittleChanceOnCrit"] = 0, - ["ChillChanceOnHit"] = 0, - ["RallyingHitEffect"] = 1, - ["ChaosGuardEffectiveLife"] = 92, - ["SeismicHitEffect"] = 1, - ["MovementSpeedMod"] = 1, - ["FireTotalPool"] = 92, - ["ColdProjectileDamageChance"] = 15, - ["TheoreticalMaxOffensiveWarcryEffect"] = 1, - ["MaxOffensiveWarcryEffect"] = 1, - ["LowestAttribute"] = 14, - ["EnduranceChargesMax"] = 3, - ["ActionSpeedMod"] = 1, - ["Speed"] = 0, - ["MeleeEvadeChance"] = 28, - ["Time"] = 0, - ["ProjectileBlockChance"] = 15, - ["FireTotalEHP"] = 75.424261470773, - ["RemovableEnduranceCharges"] = 0, - ["Duration"] = 10, - ["ChaosTotalEHP"] = 75.424261470773, - ["ChaosGuardEffectivePool"] = 0, - ["ChaosNumberOfHits"] = 10.056568196103, - ["FireNumberOfHits"] = 10.056568196103, - ["ColdTotalEHP"] = 75.424261470773, - ["ColdNumberOfHits"] = 10.056568196103, - ["Gear:EnergyShield"] = 0, - ["FireResistOverCap"] = 0, - ["ChallengerChargesMax"] = 0, - ["ManaReservedPercent"] = 0, - ["ColdCritAverage"] = 0, - ["SpellDodgeChance"] = 0, - ["LightningTakenHitMult"] = 1.6, - ["StunDuration"] = 0.35, - ["PhysicalMeleeDamageChance"] = 15, - ["LowestOfArmourAndEvasion"] = 0, - ["ColdMaximumHitTaken"] = 57.5, - ["ManaRegenInc"] = 0, - ["EnergyShieldRecoveryRateMod"] = 1, - ["ChaosResistTotal"] = -60, - ["BlockEffect"] = 100, - ["LightningTakenReflect"] = 1, - ["PhysicalAverageDamageChance"] = 7.5, - ["ColdManaEffectiveLife"] = 92, - ["dontSplitEvade"] = true, - ["EnergyShieldLeech"] = 0, - ["ChaosMinBase"] = 0, - ["FireMindOverMatter"] = 0, - ["ManaRecoveryRateMod"] = 1, - ["ChaosHitAverage"] = 0, - ["FireGuardEffectivePool"] = 0, - ["FrenzyChargesMax"] = 3, - ["LightningTotalPool"] = 92, - ["ColdResistOver75"] = 0, - ["LifeLeechInstanceRate"] = 1.84, - ["PowerCharges"] = 0, - ["EnergyShieldRechargeAppliesToEnergyShield"] = true, - ["ColdAegis"] = 0, - ["FireTakenHitMult"] = 1.6, - ["ColdAverageDamageChance"] = 7.5, - ["FireManaEffectiveLife"] = 92, - ["LifeOnBlock"] = 0, - ["PhysicalEnergyShieldBypass"] = 0, - ["TotalAttr"] = 80, - ["LightningTotalEHP"] = 75.424261470773, - ["ChaosSpellDamageChance"] = 0, - ["ManaLeechDuration"] = 0, - ["Armour"] = 0, - ["LifeUnreserved"] = 92, - ["LightningMeleeDamageChance"] = 15, - ["EnergyShieldRegenPercent"] = nan, - ["SiphoningChargesMax"] = 0, - ["BlockChance"] = 15, - ["FireGuardAbsorbRate"] = 0, - ["ChaosPoisonChance"] = 0, - ["ChaosManaEffectiveLife"] = 92, - ["ChillAvoidChance"] = 0, - ["IgniteAvoidChance"] = 0, - ["CritExtraDamageReduction"] = 0, - ["FireAegis"] = 0, - ["FireTakenReflectMult"] = 1.6, - ["Evasion"] = 58, - ["Gear:Evasion"] = 0, - ["Mana"] = 47, - ["FireGuardEffectiveLife"] = 92, - ["AvoidProjectilesChance"] = 0, - ["ColdGuardEffectiveLife"] = 92, - ["ColdSpellDamageChance"] = 0, - ["ColdResistTotal"] = -60, - ["AnyMindOverMatter"] = false, - ["LightningTakenDotMult"] = 1.6, - ["TotalMin"] = 0, - ["ChaosTakenReflect"] = 1, - ["BlitzCharges"] = 0, - ["ColdGuardEffectivePool"] = 0, - ["WarcryPower"] = 0, - ["PhysicalPhysicalBaseTakenHitMult"] = 1, - ["PhysicalGuardEffectivePool"] = 0, - ["ChaosResistOverCap"] = 0, - ["BlindAvoidChance"] = 0, - ["FireMaximumHitTaken"] = 57.5, - ["ChaosTotalPool"] = 92, - ["LightningMaximumHitTaken"] = 57.5, - ["PhysicalTakenReflect"] = 1, - ["MaxLifeLeechRate"] = 18.4, - ["LifeRecoveryRateMod"] = 1, - ["LightningNumberOfHits"] = 10.056568196103, - ["CritMultiplier"] = 1.5, - ["ManaReserved"] = 0, - ["ChaosTakenDotMult"] = 1.6, - ["EnduranceChargesMin"] = 0, - ["ColdTakenReflectMult"] = 1.6, - ["ManaOnBlock"] = 0, - ["AnyBypass"] = false, - ["MaxManaLeechInstance"] = 4.7, - ["MissingFireResist"] = 135, - ["MeleeNotHitChance"] = 28, - ["ManaLeechInstant"] = 0, - ["PhysicalManaEffectiveLife"] = 92, - ["PhysicalDotEHP"] = 92, - ["FireTakenDotMult"] = 1.6, - ["LightningTakenHit"] = 1, -} -} \ No newline at end of file diff --git a/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua b/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua deleted file mode 100644 index 2a92f39a..00000000 --- a/spec/TestBuilds/3.13/Dual Wield Cospris CoC.lua +++ /dev/null @@ -1,1595 +0,0 @@ -return { - xml = [[ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8% increased maximum Life - Regenerate 1% of Life per second - - - 3% increased maximum Life - - - Gain 1 Endurance Charge every second if you've been Hit Recently - - - 24% increased Evasion Rating and Armour - 8% increased maximum Life - 10% chance to Intimidate Enemies for 4 seconds on Hit - - - 2% increased Cast Speed - - - 4% increased maximum Mana - - - 4% increased Skill Effect Duration - - - +1% to maximum Fire Resistance - +20% to Fire Resistance - - - 3% increased maximum Energy Shield - - - +10% to Cold Resistance - - - 5% increased Area of Effect - - - 2% increased maximum Life - - - Minions deal 80% increased Damage - - - 15% increased effect of Non-Curse Auras from your Skills - - - 12% increased Fire Damage - - - 1% Chance to Block Spell Damage - - - 5% increased maximum Energy Shield - - - 10% increased maximum Life - Regenerate 1.1% of Life per second - - - +11% to Fire Resistance - - - 3% increased effect of Non-Curse Auras from your Skills - - - 3% increased Effect of your Curses - - - 9% increased Evasion Rating - - - 5% increased Skill Effect Duration - - - 10% increased Area Damage - - - 12% increased Mana Regeneration Rate - - - 10% increased Attack Damage - - - +8% to Chaos Resistance - - - +9% to Critical Strike Multiplier - - - 2% chance to deal Double Damage - 25% increased Physical Damage - - - 3% increased maximum Life - - - 3% increased Movement Speed - - - 3% increased Cast Speed - 11% increased Projectile Damage - 5% chance to Shock - 6% chance to Ignite - - - 12% increased Spell Damage - - - 1% chance to Dodge Attack Hits - - - 7% increased Projectile Speed - - - 3% increased Attack Speed - - - 5% increased Effect of your Curses - - - 7% increased Physical Damage - - - 7% increased Armour - - - +12% to Lightning Resistance - - - 2% increased maximum Life - - - 10% increased Fire Damage - - - 11% increased Area Damage - - - +10% to Fire Resistance - - - 7% increased Area Damage - - - 7% increased Fire Damage - 6% increased maxmium Mana - +11% to Lightning Resistance - - - +8% to Critical Strike Multiplier - - - 10% increased Critical Strike Chance - - - 3% increased maximum Life - - - 7% increased Spell Damage - - - 20% increased Area of Effect of Aura Skills - 15% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - +9% to Critical Strike Multiplier - - - 1% chance to Dodge Spell Hits - - - +10% to Fire Resistance - - - +8% to Critical Strike Multiplier - - - 8% increased Armour - - - 5% increased maximum Energy Shield - - - 3% increased maximum Life - - - 28% increased Cold Damage - 10% of Physical Damage Converted to Cold Damage - - - 7% increased maximum Life - 0.4% of Attack Damage Leeched as Life - - - 12% increased Area Damage - - - 7% increased Spell Damage - - - +8% to Critical Strike Multiplier - - - +14% to Fire Resistance - - - 8% increased Chaos Damage - - - 12% increased Physical Damage - - - 10% increased Lightning Damage - - - 3% increased maximum Life - - - 5% increased Area of Effect - - - 6% increased Area of Effect - - - 10% chance to gain a Frenzy Charge on Hit - - - 8% increased maximum Life - Regenerate 0.7% of Life per second - - - 9% increased Evasion Rating - - - +13% to Fire Resistance - - - +11% to Fire Resistance - - - 11% increased Fire Damage - - - 10% increased Projectile Speed - - - 7% increased Projectile Damage - - - 20% increased Area of Effect of Aura Skills - 15% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - 3% increased Movement Speed - - - Minions deal 12% increased Damage - - - 2% increased maximum Life - - - +13% to Lightning Resistance - - - +6% to Chaos Resistance - - - +12% to Lightning Resistance - - - +12% to Fire Resistance - - - +12% to Cold Resistance - - - 10% increased Damage over Time - - - 10% increased Chaos Damage - - - 30% increased Chaos Damage - 25% chance to inflict Withered for 2 seconds on Hit - - - 27% increased Spell Damage - 43% increased Critical Strike Chance for Spells - - - +9% to Critical Strike Multiplier - - - 3% increased effect of Non-Curse Auras from your Skills - - - 12% increased Chaos Damage - - - 3% increased Movement Speed - - - 3% increased Movement Speed - - - 1% Chance to Block Spell Damage - - - 7% increased Spell Damage - - - 33% increased Fire Damage - Damage Penetrates 2% Fire Resistance - - - 9% increased Chaos Damage - - - 9% increased Fire Damage - - - 4% chance to Freeze - - - 1% Chance to Block Spell Damage - - - +9% to Critical Strike Multiplier - - - 5% increased maximum Energy Shield - - - 1% chance to Dodge Spell Hits - - - +7% to Chaos Resistance - - - 2% increased maximum Life - - - +1% to maximum Chaos Resistance - +17% to Chaos Resistance - - - 2% increased maximum Life - - - +8% to Chaos Resistance - - - 34% increased Fire Damage - Damage Penetrates 3% Fire Resistance - - - +12% to Fire Resistance - - - +12% to Cold Resistance - - - 8% increased Attack Damage - - - 4% increased maximum Life - - - 4% increased maximum Mana - - - 12% increased Chaos Damage - - - 12% increased Evasion Rating - - - - https://www.pathofexile.com/passive-skill-tree/AAAABAIBAJuh_EcN0VH7FyYxRaKj99fjhKcre9eMC1ha74iExS9vLU3v66EvH0GMNtteQjrK0wkH1890EH_GMe8NfFgH5-pQMHBSM3IS8WNDG8hd8jsN7LDB8xEPkydwu80WJMDQrSKBxKIWvxhqMlgfx8HFbWwfGCZFD8RMLVBCQdCv64nTuXxJsbQMUimsmM_dbRkUsLjKppmbtVyKXGtrkPGKfbA2PTt8vooki9kTKwpdjjlS-TPDbY9GeoSYU_k3hEgPqy9y7BiXBioLJC3DOlM1VeAZiuq6H0yCHtdK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rarity: UNIQUE -Watcher's Eye -Prismatic Jewel -Unique ID: 40f9711d5bd7ad2bcbddaf71c705607aef0eecd3dcadaafec6c0192f79b82863 -Item Level: 86 -Limited to: 1 -Implicits: 0 -5% increased maximum Energy Shield -4% increased maximum Life -4% increased maximum Mana -+1.71% to Critical Strike Chance while affected by Hatred -Effects of Consecrated Ground you create while affected by Zealotry Linger for 2 seconds -Damage Penetrates 15% Cold Resistance while affected by Hatred - - - Rarity: RARE -Dusk Glimmer -Large Cluster Jewel -Unique ID: 2d3cbcc8d8386a5eb230ea8596ae126ec82707dd70839f76f8cf275157a657e1 -Item Level: 82 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 8 Passive Skills -{crafted}2 Added Passive Skills are Jewel Sockets -{crafted}Added Small Passive Skills grant: 12% increased Cold Damage -Added Small Passive Skills also grant: 5% increased Mana Regeneration Rate -1 Added Passive Skill is Blanketed Snow -1 Added Passive Skill is Prismatic Heart -1 Added Passive Skill is Widespread Destruction - - - Rarity: RARE -Kraken Joy -Cobalt Jewel -Unique ID: fd16398b69819790167994dc77e3b69f977be69130d8026b3b02c7239b4a4446 -Item Level: 83 -Implicits: 1 -5% increased Elemental Damage -+11% to Global Critical Strike Multiplier -+14% to Critical Strike Multiplier for Spells -+17% to Critical Strike Multiplier with Cold Skills -8% increased maximum Energy Shield - - - Rarity: UNIQUE -Energy From Within -Cobalt Jewel -Unique ID: 70e1ed44f66615911c6fe0dd1e7c13ef9af4cb1057416a9f2c97e06af979d564 -Item Level: 84 -LevelReq: 26 -Radius: Large -Implicits: 1 -Corrupted Blood cannot be inflicted on you -6% increased maximum Energy Shield -Increases and Reductions to Life in Radius are Transformed to apply to Energy Shield -Corrupted - - - Rarity: RARE -Chimeric Breath -Cobalt Jewel -Unique ID: 674c7bf1100affed697857e93f5d0b79ac6d1aabeb0ecc9181ae76f25a2ea58e -Item Level: 85 -Implicits: 0 -+11% to Global Critical Strike Multiplier -+13% to Critical Strike Multiplier for Spells -+18% to Critical Strike Multiplier with Cold Skills -8% increased maximum Energy Shield - - - Rarity: UNIQUE -Thread of Hope -Crimson Jewel -Unique ID: 4a1fe5b365677ccfdefe80eeaae4d200458f9f71f1ed528cd3f8d9ebdcf151f8 -Item Level: 86 -Radius: Variable -Implicits: 1 -Damage Penetrates 1% Elemental Resistances -Only affects Passives in Large Ring -Passives in Radius can be Allocated without being connected to your tree --11% to all Elemental Resistances -Corrupted - - - Rarity: RARE -Hypnotic Glisten -Medium Cluster Jewel -Unique ID: 18ddae58580b5458b52a8e07b972f43592bfd4e9bf5b10c928dd50c67bbfd06f -Item Level: 83 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 4 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: 15% increased Critical Strike Chance -Added Small Passive Skills also grant: +3% to Lightning Resistance -Added Small Passive Skills also grant: +5 to Strength -1 Added Passive Skill is Pressure Points -1 Added Passive Skill is Quick Getaway - - - Rarity: RARE -Chimeric Spark -Large Cluster Jewel -Unique ID: db1f34511e33c0f8a512380923f2f10bfc2b0a590d83755525c2bbcc7af88bf6 -Item Level: 83 -LevelReq: 54 -Implicits: 4 -{crafted}Adds 8 Passive Skills -{crafted}2 Added Passive Skills are Jewel Sockets -{crafted}Added Small Passive Skills grant: 12% increased Cold Damage -3% increased Area of Effect of Aura Skills -Added Small Passive Skills also grant: +3 to Dexterity -1 Added Passive Skill is Blanketed Snow -1 Added Passive Skill is Prismatic Heart -1 Added Passive Skill is Widespread Destruction - - - Rarity: RARE -Eagle Hope -Medium Cluster Jewel -Unique ID: 44b55f1694ba9a9bb7c6719105c00f47cc1af341df11e0f936188e2c0969d182 -Item Level: 81 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 5 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: 15% increased Critical Strike Chance -Added Small Passive Skills also grant: +5% to Cold Resistance -Added Small Passive Skills also grant: +5 to Intelligence -1 Added Passive Skill is Pressure Points -1 Added Passive Skill is Quick Getaway - - - Rarity: RARE -Oblivion Sliver -Cobalt Jewel -Unique ID: 64a1323507e4508e9f9009a31cd5edd6f6ea9bd445309f2d28f2efeb7b7bba0f -Item Level: 83 -Implicits: 0 -{fractured}8% increased maximum Energy Shield -+12% to Global Critical Strike Multiplier -+13% to Critical Strike Multiplier for Spells -+18% to Critical Strike Multiplier with Cold Skills - - - Rarity: RARE -Brood Ornament -Cobalt Jewel -Unique ID: 562947158c410aa04616602d94434f3162856e8e125c61ceacc5794d81662ae3 -Item Level: 78 -Implicits: 0 -+12% to Global Critical Strike Multiplier -+15% to Critical Strike Multiplier for Spells -+18% to Critical Strike Multiplier with Cold Skills -8% increased maximum Energy Shield - - - Rarity: RARE -Dusk Cut -Medium Cluster Jewel -Unique ID: e8b79cf8b11b6cab2c9a44d1d57cab5175b61d7d01f5a5556d6f09e6df1f1723 -Item Level: 81 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 4 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: 3% increased Effect of your Curses -Added Small Passive Skills also grant: +5% to Cold Resistance -Added Small Passive Skills also grant: Regenerate 0.1% of Life per Second -1 Added Passive Skill is Evil Eye -1 Added Passive Skill is Wish for Death - - - Rarity: RARE -Eagle Hope -Cobalt Jewel -Unique ID: 0409c46e4c9b270990ec666b8b75e985d3983093e7c296ef40a9e7bf9688cf9b -Item Level: 72 -Implicits: 0 -{fractured}+12% to Global Critical Strike Multiplier -+13% to Critical Strike Multiplier for Spells -+18% to Critical Strike Multiplier with Cold Skills -8% increased maximum Energy Shield - - - Rarity: RARE -Dread Knuckle -Moonstone Ring -Unique ID: 346d82b5f01400d23caf59978fbb87a3f3e2adff0e20e32c86409f065bcef5b2 -Shaper Item -Elder Item -Item Level: 83 -LevelReq: 64 -Implicits: 1 -+30 to maximum Energy Shield -Trigger Level 12 Assassin's Mark when you Hit a Rare or Unique Enemy -Adds 20 to 41 Cold Damage to Spells and Attacks -+19% to Global Critical Strike Multiplier -+56 to maximum Energy Shield -6% chance to Freeze -Adds 12 to 30 Cold Damage against Chilled or Frozen Enemies -{crafted}16% increased Cold Damage - - - Rarity: RARE -Behemoth Spur -Two-Toned Boots (Armour/Energy Shield) -Unique ID: 8037cba8056b90a2bd2c9982010207a08e4a236ada4bbb7ec19da5a085687098 -Hunter Item -Redeemer Item -Item Level: 86 -Quality: 30 -Sockets: G-G-B-B -LevelReq: 70 -Implicits: 2 -{crafted}80% chance to Avoid being Stunned if you've Killed Recently -+12% to Fire and Lightning Resistances -+42 to Strength -9% increased Strength -35% increased Movement Speed -19% chance to gain Elusive on Critical Strike -9% increased Elusive Effect -18% increased Effect of Tailwind on you -You have Tailwind if you have dealt a Critical Strike Recently -{crafted}+34 to maximum Energy Shield - - - Rarity: RARE -Honour Veil -Hubris Circlet -Unique ID: 93f4283be9c8db994476a3a5bfd9ef60fdf32fcc255f191c622cc1b21a2a666e -Warlord Item -Redeemer Item -Item Level: 86 -Quality: 30 -Sockets: G-G-B G -LevelReq: 69 -Implicits: 1 -{crafted}Zealotry has 15% reduced Mana Reservation -+20% to Global Critical Strike Multiplier -96% increased Energy Shield -22% increased Elemental Damage -7% reduced Mana Reserved -Damage Penetrates 3% of Enemy Elemental Resistances -Nearby Enemies have -9% to Cold Resistance -{crafted}+45 to maximum Energy Shield - - - Rarity: UNIQUE -Cospri's Malice -Jewelled Foil -Unique ID: 0a331d6968381dd99594f5cd6132943b1b1e5e39020397605501603949191678 -Item Level: 75 -Quality: 20 -Sockets: B-B-B -LevelReq: 68 -Implicits: 3 -{crafted}Quality does not increase Physical Damage -{crafted}Grants 1% increased Elemental Damage per 2% Quality -Skills fire an additional Projectile -Trigger a Socketed Cold Spell on Melee Critical Strike -+257 Intelligence Requirement -No Physical Damage -Adds 94 to 167 Cold Damage -Adds 57 to 101 Cold Damage to Spells -9% increased Attack Speed -60% increased Critical Strike Chance against Chilled Enemies -Corrupted - - - Rarity: RARE -Kraken Shackle -Crystal Belt -Unique ID: 1fdf3bc5ec92991c311859456844a857333f206c599831e057caee7d05bf2ac0 -Shaper Item -Crusader Item -Item Level: 86 -LevelReq: 79 -Implicits: 1 -+96 to maximum Energy Shield -+61 to maximum Energy Shield -16% increased maximum Energy Shield -+48% to Fire Resistance -+43% to Lightning Resistance -36% increased Energy Shield from Body Armour -28% increased Spell Damage during any Flask Effect -20% increased Cooldown Recovery - - - Rarity: RARE -Mind Spiral -Topaz Ring -Unique ID: b6dd3b4d9bcb60886aa7c2c1faf5e3da9fa1b5f4f18ad40ecd673c529ccfeab0 -Crusader Item -Item Level: 85 -LevelReq: 67 -Implicits: 1 -+36% to Lightning Resistance -25% increased Spell Damage -+45 to maximum Energy Shield -13% increased maximum Energy Shield -+19% to all Elemental Resistances -+57% to Fire Resistance -+56% to Cold Resistance - - - Rarity: MAGIC -Alchemist's Quicksilver Flask of Adrenaline -Unique ID: df4a300d384a39f893e08838bbb21f77d2e0308232f32a2be7056171752ecbda -Item Level: 42 -Quality: 20 -LevelReq: 16 -Implicits: 0 -30% increased Movement Speed during Flask effect -25% increased effect -33% reduced Duration - - - Rarity: UNIQUE -Atziri's Promise -Amethyst Flask -Unique ID: 82a02cd5ae91c45af9d472f20355e22c148033f4156a9db34d04524441df9cbd -Item Level: 85 -Quality: 0 -LevelReq: 68 -Implicits: 0 -2% of Chaos Damage Leeched as Life during Flask effect -Gain 20% of Physical Damage as Extra Chaos Damage during effect -Gain 15% of Elemental Damage as Extra Chaos Damage during effect - - - Rarity: MAGIC -Enduring Eternal Mana Flask of Heat -Unique ID: c8691aa616346249cdae9722f0b78f2a70c8c1b1441be40c73b0780ef713b484 -Item Level: 72 -Quality: 26 -LevelReq: 65 -Implicits: 0 -30% reduced Amount Recovered -Immunity to Freeze and Chill during Flask effect -Removes Freeze and Chill on use -30% reduced Duration -Flask Effect is not removed at Full Mana -Flask Effect does not Queue - - - Rarity: UNIQUE -Dying Sun -Ruby Flask -Unique ID: 2c27fad04da58e0c7faf96884765635ab45ec396bf6ac92ff8b8f94bfeb2b9b8 -Item Level: 80 -Quality: 0 -LevelReq: 68 -Implicits: 0 -8% reduced Charges used -Skills fire 2 additional Projectiles during Flask Effect -25% increased Area of Effect during Flask Effect - - - Rarity: UNIQUE -Shavronne's Wrappings -Occultist's Vestment -Unique ID: c5663fe63ec58fca7c88c5988623dd3bdceb89c9e8ac624d8227fc9f47d39f67 -Item Level: 70 -Quality: 20 -Sockets: G-G-G-B-B-B -LevelReq: 62 -Implicits: 2 -+1 to Level of Socketed Gems -+2 to Level of Socketed Projectile Gems -134% increased Energy Shield -10% faster start of Energy Shield Recharge -+36% to Lightning Resistance -Reflects 1 to 250 Lightning Damage to Melee Attackers -Chaos Damage does not bypass Energy Shield -Corrupted - - - Rarity: UNIQUE -Cospri's Malice -Jewelled Foil -Unique ID: e022814fd14bf965ffb1abf8305e539c1ab40ab59c4add1ae8927f3a83af8480 -Item Level: 83 -Quality: 0 -Sockets: B-G-B -LevelReq: 68 -Implicits: 1 -Skills fire an additional Projectile -Trigger a Socketed Cold Spell on Melee Critical Strike -+257 Intelligence Requirement -No Physical Damage -Adds 91 to 161 Cold Damage -Adds 55 to 106 Cold Damage to Spells -14% increased Attack Speed -60% increased Critical Strike Chance against Chilled Enemies -Corrupted - - - Rarity: RARE -Agony Touch -Fingerless Silk Gloves -Unique ID: 38caeb692e3b3996b6162db7fc10810a0bf205ad18ce3c413eaabffa986c2440 -Hunter Item -Item Level: 85 -Quality: 28 -Sockets: W-W-W-B -LevelReq: 70 -Implicits: 2 -{crafted}Trigger Commandment of Frost on Kill -16% increased Spell Damage -+588 to Accuracy Rating -+47 to maximum Energy Shield -96% increased Energy Shield -+48% to Cold Resistance -Unnerve Enemies for 4 seconds on Hit -50% increased Damage with Hits against Chilled Enemies -{crafted}12% increased Attack Speed - - - Rarity: UNIQUE -Bottled Faith -Sulphur Flask -Unique ID: 8a2882da1154eaefb6594f530acd5234a62b9093ba09702355432766c2f2e045 -Item Level: 85 -Quality: 20 -LevelReq: 35 -Implicits: 1 -Creates Consecrated Ground on Use -45% increased Duration -Consecrated Ground created by this Flask has Tripled Radius -+2% to Critical Strike Chance against Enemies on Consecrated Ground during Effect -Consecrated Ground created during Effect applies 10% increased Damage taken to Enemies - - - Rarity: UNIQUE -Badge of the Brotherhood -Turquoise Amulet -Unique ID: e6b2caa3bf151e3cbbaffce1c93329c2252d608bb683c24b70cb3be8e7d0e887 -Item Level: 85 -LevelReq: 60 -Implicits: 2 -{crafted}Allocates Overcharge -+24 to Dexterity and Intelligence -Your Maximum Frenzy Charges is equal to your Maximum Power Charges -9% increased Cooldown Recovery Rate of Travel Skills per Frenzy Charge -10% increased Effect of Elusive on you per Power Charge -25% chance to lose a Frenzy Charge when you use a Travel Skill -22% chance to lose a Power Charge when you gain Elusive - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]], - output = { ["CombinedAvg"] = 372408.52275, - ["FrenzyChargesMin"] = 0, - ["EnergyShieldOnGloves"] = 202, - ["HitChance"] = 100, - ["LightningDotEHP"] = 24945.833333333, - ["CrabBarriersMax"] = 0, - ["SiphoningChargesMax"] = 0, - ["AvoidColdDamageChance"] = 0, - ["PierceCount"] = 0, - ["AnyTakenReflect"] = 0, - ["InspirationCharges"] = 0, - ["FireEnergyShieldBypass"] = 0, - ["KnockbackChanceOnCrit"] = 0, - ["ReqInt"] = 257, - ["ProjectileNotHitChance"] = 26.0125, - ["ColdMinBase"] = 669.2, - ["MaxManaLeechRate"] = 189.2, - ["PhysicalTakenReflectMult"] = 0.99, - ["LightningLightningBaseTakenHitMult"] = 0.24, - ["ManaOnHit"] = 0, - ["PhysicalProjectileDamageChance"] = 15, - ["ManaCost"] = 45, - ["DoubleDamageChance"] = 10, - ["EnergyShieldLeechInstantRate"] = 0, - ["FireMeleeDamageChance"] = 15, - ["PhysicalGuardEffectiveLife"] = 256, - ["PhysicalAegis"] = 0, - ["EnergyShieldRegen"] = 0, - ["LightningAegis"] = 0, - ["SiphoningCharges"] = 0, - ["RuthlessBlowEffect"] = 1, - ["Cooldown"] = 0.13333333333333, - ["PhysicalTakenDotMult"] = 1, - ["ChaosDotEHP"] = 4789.6, - ["ReqStr"] = 114, - ["LightningGuardAbsorbRate"] = 0, - ["MissingLightningResist"] = 0, - ["AverageBlockChance"] = 7.5, - ["LightningGuardEffectivePool"] = 0, - ["EnergyShieldOnBody Armour"] = 330, - ["MaxEnergyShieldLeechRate"] = 286.55, - ["EnergyShieldLeechInstanceRate"] = 114.62, - ["PhysicalNumberOfHits"] = 7.2561864658517, - ["ChaosTakenHit"] = 1, - ["FireFireBaseTakenHitMult"] = 0.2, - ["CurrentShock"] = 0, - ["PhysicalResist"] = 0, - ["ColdSpellProjectileDamageChance"] = 0, - ["FireResistOver75"] = 0, - ["ColdResist"] = 75, - ["ScorchChanceOnHit"] = 0, - ["PhysicalMinBase"] = 0, - ["SpellProjectileBlockChance"] = 0, - ["ColdTakenReflectMult"] = 0.25, - ["Dex"] = 247, - ["KnockbackChanceOnHit"] = 0, - ["TheoreticalOffensiveWarcryEffect"] = 1, - ["IgniteChanceOnHit"] = 0, - ["PowerChargesMax"] = 6, - ["ElusiveEffectMod"] = 169, - ["Spec:ArmourInc"] = 0, - ["PhysicalDamageReduction"] = 1, - ["Str"] = 116, - ["KnockbackChance"] = 0, - ["FireProjectileDamageChance"] = 15, - ["LightningSpellProjectileDamageChance"] = 0, - ["AnyGuard"] = false, - ["PhysicalTakenReflect"] = 1, - ["ShieldBlockChance"] = 0, - ["SpellBlockChance"] = 0, - ["PhysicalMindOverMatter"] = 0, - ["LightningManaEffectiveLife"] = 256, - ["ManaLeechInstances"] = 0, - ["LightningResistOver75"] = 1, - ["ColdTakenReflect"] = 1, - ["SpellBlockChanceMax"] = 75, - ["ChaosEnergyShieldBypass"] = 0, - ["impaleStoredHitAvg"] = 0, - ["ManaOnHitRate"] = 0, - ["ChaosMeleeDamageChance"] = 15, - ["EnergyShieldRechargeDelay"] = 1.8181818181818, - ["ChallengerCharges"] = 0, - ["Int"] = 381, - ["ColdEnergyShieldBypass"] = 0, - ["FireResistTotal"] = 145, - ["FreezeAvoidChance"] = 100, - ["ChaosTakenHitMult"] = 1.25, - ["BleedChanceOnHit"] = 0, - ["AttackDodgeChance"] = 25, - ["ReqDex"] = 212, - ["ColdTakenHit"] = 1, - ["LightningProjectileDamageChance"] = 15, - ["PhysicalHitAverage"] = 0, - ["ChillChance"] = 100, - ["DoubleDamageChanceOnCrit"] = 10, - ["ChaosMindOverMatter"] = 0, - ["EffectiveMovementSpeedMod"] = 3.9131, - ["LifeOnBlock"] = 0, - ["LightningResistTotal"] = 98, - ["FireMinBase"] = 0, - ["LightningMinBase"] = 0, - ["Spec:EnergyShieldInc"] = 125, - ["Spec:EvasionInc"] = 148, - ["Spec:ManaInc"] = 8, - ["InteruptStunAvoidChance"] = 25, - ["RuthlessBlowMaxCount"] = 0, - ["Spec:LifeInc"] = 0, - ["AverageDamage"] = 372408.52275, - ["ColdTakenHitMult"] = 0.25, - ["PowerChargesMin"] = 1, - ["Devotion"] = 0, - ["MissingColdResist"] = 0, - ["ChaosGuardAbsorbRate"] = 0, - ["ExtraPoints"] = 2, - ["TotalDotDPS"] = 0, - ["FireSpellDamageChance"] = 0, - ["ChaosMaxBase"] = 0, - ["WithIgniteDPS"] = 372408.52275, - ["WithPoisonDPS"] = 372408.52275, - ["CombinedDPS"] = 372408.52275, - ["ColdGuardAbsorbRate"] = 0, - ["TotalDot"] = 0, - ["DoubleArmourChance"] = 0, - ["IgniteFireMax"] = 0, - ["FireDotEHP"] = 29935, - ["RemovableFrenzyCharges"] = 6, - ["MaxLifeLeechRate"] = 269.6, - ["ChaosAegis"] = 0, - ["EnemyStunDuration"] = 0.35, - ["EnemyStunThresholdMod"] = 1, - ["FreezeDurationMod"] = 1.08, - ["PhysicalTotalPool"] = 5987, - ["FreezeChanceOnCrit"] = 100, - ["BlockDuration"] = 0.35, - ["ManaLeechPerHit"] = 0, - ["FreezeChance"] = 100, - ["MissingChaosResist"] = 100, - ["ChaosTakenDotMult"] = 1.25, - ["ChillEffectModDisplay"] = 0, - ["FireTakenHit"] = 0.8, - ["ChillEffectMod"] = 1, - ["BleedAvoidChance"] = 0, - ["AverageNotHitChance"] = 25.50625, - ["ShockChance"] = 100, - ["EnergyShieldOnBlock"] = 0, - ["IgniteChance"] = 100, - ["StunAvoidChance"] = 90, - ["CritIgniteDotMulti"] = 1.5, - ["ColdResistOverCap"] = 17, - ["Life"] = 1348, - ["DurationMod"] = 1, - ["FireResistOverCap"] = 70, - ["EnduranceCharges"] = 0, - ["ChainRemaining"] = 0, - ["IgniteFireMin"] = 0, - ["ColdTakenDotMult"] = 0.25, - ["ChaosAverageDamageChance"] = 7.5, - ["ImpaleChance"] = 0, - ["BrittleChanceOnHit"] = 0, - ["ChaosMaximumHitTaken"] = 4789.6, - ["SapChanceOnHit"] = 0, - ["PhysicalTotalEHP"] = 8946.8779123952, - ["ProjectileSpeedMod"] = 1.86, - ["FreezeChanceOnHit"] = 0, - ["ColdMindOverMatter"] = 0, - ["PhysicalGuardEffectivePool"] = 0, - ["ShockChanceOnHit"] = 0, - ["MaximumShock"] = 50, - ["CrabBarriers"] = 0, - ["EnergyShieldLeechInstant"] = 0, - ["SpellProjectileNotHitChance"] = 25, - ["LifeRegenPercent"] = 0.1, - ["LightningResist"] = 76, - ["PhysicalSpellProjectileDamageChance"] = 0, - ["PoisonChanceOnHit"] = 0, - ["SpellNotHitChance"] = 25, - ["LightningMeleeDamageChance"] = 15, - ["PhysicalMaximumHitTaken"] = 6047.4747474747, - ["SapChanceOnCrit"] = 0, - ["WarcryPower"] = 20, - ["ProjectileEvadeChance"] = 1.35, - ["Speed"] = 3.5814285714286, - ["FireMaxBase"] = 0, - ["LightningCritAverage"] = 0, - ["ColdHitAverage"] = 56901.24, - ["MaxEnergyShieldLeechInstance"] = 573.1, - ["HexDoomLimit"] = 30, - ["PhysicalSpellDamageChance"] = 0, - ["EnergyShieldLeechInstances"] = 196.97857142857, - ["AvoidPhysicalDamageChance"] = 0, - ["ChillChanceOnCrit"] = 100, - ["ProjectileCount"] = 11, - ["ShockChanceOnCrit"] = 100, - ["IgniteChanceOnCrit"] = 100, - ["ChaosResistOver75"] = 0, - ["EnergyShieldRecharge"] = 1960, - ["LightningResistOverCap"] = 22, - ["PoisonChanceOnCrit"] = 0, - ["BleedChanceOnCrit"] = 0, - ["EnergyShieldOnHelmet"] = 273, - ["TotalDotInstance"] = 0, - ["ManaReservedPercent"] = 93.023255813953, - ["FistOfWarAilmentEffect"] = 1, - ["LifeLeechGainPerHit"] = 134.8, - ["LightningTakenReflectMult"] = 0.24, - ["AvoidChaosDamageChance"] = 0, - ["ManaLeechRate"] = 0, - ["ManaLeechInstanceRate"] = 18.92, - ["EnergyShieldLeechPerHit"] = 573.1, - ["EnergyShieldLeechRate"] = 286.55, - ["LifeLeechInstances"] = 196.97857142857, - ["LifeLeechRate"] = 269.6, - ["ColdDotEHP"] = 23948, - ["Armour"] = 164, - ["PierceCountString"] = "Cannot pierce", - ["TotalDPS"] = 14671299.759824, - ["AverageHit"] = 372408.52275, - ["EnergyShieldOnHitRate"] = 0, - ["LifeOnHitRate"] = 0, - ["EnergyShieldOnHit"] = 0, - ["LifeOnHit"] = 0, - ["ManaLeechInstantRate"] = 0, - ["InspirationChargesMax"] = 5, - ["ChaosResist"] = -25, - ["CritExtraDamageReduction"] = 0, - ["EnergyShieldLeechDuration"] = 5, - ["LifeLeechInstantRate"] = 0, - ["ManaUnreserved"] = 66, - ["EnergyShield"] = 5731, - ["Accuracy"] = 3849.21, - ["LifeLeechDuration"] = 5, - ["LifeLeechPerHit"] = 134.8, - ["TotalMax"] = 74689.065, - ["AnyAegis"] = false, - ["PhysicalGuardAbsorbRate"] = 0, - ["LifeRegen"] = 1.348, - ["MaxLifeLeechInstance"] = 134.8, - ["RemovablePowerCharges"] = 5, - ["ColdMeleeDamageChance"] = 15, - ["ActiveGolemLimit"] = 1, - ["FireHitAverage"] = 0, - ["TripleDamageChance"] = 0, - ["LifeUnreservedPercent"] = 18.991097922849, - ["ScorchChanceOnCrit"] = 0, - ["OffensiveWarcryEffect"] = 1, - ["FistOfWarHitEffect"] = 1, - ["ChaosCritAverage"] = 25310.95875, - ["FireCritAverage"] = 0, - ["IgniteDotMulti"] = 1, - ["BlockChanceMax"] = 75, - ["RuthlessBlowChance"] = 0, - ["LightRadiusMod"] = 1, - ["PhysicalCritAverage"] = 0, - ["ManaUnreservedPercent"] = 6.9767441860465, - ["ManaRegen"] = 39.6, - ["ChaosChaosBaseTakenHitMult"] = 1.25, - ["LightningSpellDamageChance"] = 0, - ["ManaLeech"] = 0, - ["BlockEffect"] = 100, - ["LifeLeechInstant"] = 0, - ["LifeLeech"] = 134.8, - ["WithBleedDPS"] = 372408.52275, - ["ChaosResistTotal"] = -25, - ["AvoidLightningDamageChance"] = 0, - ["ColdMaxBase"] = 1054.2, - ["ColdColdBaseTakenHitMult"] = 0.25, - ["LightningGuardEffectiveLife"] = 256, - ["AvoidFireDamageChance"] = 0, - ["ChaosSpellProjectileDamageChance"] = 0, - ["LightningMaxBase"] = 0, - ["FrenzyCharges"] = 6, - ["TotalCharges"] = 12, - ["ChaosTakenReflectMult"] = 1.25, - ["PhysicalMaxBase"] = 0, - ["LifeReserved"] = 1092, - ["DoubleDamageEffect"] = 1.1, - ["TripleDamageEffect"] = 1, - ["FireSpellProjectileDamageChance"] = 0, - ["TripleDamageChanceOnCrit"] = 0, - ["ScaledDamageEffect"] = 1.1, - ["BonusCritDotMultiplier"] = 0, - ["CritEffect"] = 6.1, - ["EnemyCurseLimit"] = 2, - ["FireTakenReflect"] = 0.8, - ["LightningEnergyShieldBypass"] = 0, - ["PreEffectiveCritChance"] = 100, - ["CritChance"] = 100, - ["ColdTotalPool"] = 5987, - ["LightningMindOverMatter"] = 0, - ["FistOfWarCooldown"] = 0, - ["RuthlessBlowMultiplier"] = 1, - ["EnergyShieldLeechGainPerHit"] = 573.1, - ["LightningHitAverage"] = 0, - ["ExertedAttackUptimeRatio"] = 0, - ["AilmentWarcryEffect"] = 1, - ["RallyingHitEffect"] = 1, - ["PhysicalResistWhenHit"] = 0, - ["SeismicHitEffect"] = 1, - ["TheoreticalMaxOffensiveWarcryEffect"] = 1, - ["MaxOffensiveWarcryEffect"] = 1, - ["BlitzChargesMax"] = 0, - ["Time"] = 0.2792181890706, - ["LightningAverageDamageChance"] = 7.5, - ["BrittleChanceOnCrit"] = 0, - ["ChillChanceOnHit"] = 0, - ["PiercedCount"] = 0, - ["ChaosGuardEffectiveLife"] = 256, - ["ForkCountString"] = "0", - ["MovementSpeedMod"] = 3.59, - ["FireTotalPool"] = 5987, - ["ColdProjectileDamageChance"] = 15, - ["Chain"] = 0, - ["ChainMaxString"] = 0, - ["LowestAttribute"] = 116, - ["EnduranceChargesMax"] = 3, - ["ActionSpeedMod"] = 1.09, - ["ChainMax"] = 0, - ["MeleeEvadeChance"] = 1.35, - ["ChaosTotalEHP"] = 7157.5023299161, - ["ProjectileBlockChance"] = 15, - ["FireTotalEHP"] = 44734.389561976, - ["RemovableEnduranceCharges"] = 0, - ["ChaosNumberOfHits"] = 5.8049491726814, - ["FireNumberOfHits"] = 36.280932329259, - ["ChaosGuardEffectivePool"] = 0, - ["ColdTotalEHP"] = 35787.511649581, - ["ColdNumberOfHits"] = 29.024745863407, - ["PhysicalEnergyShieldBypass"] = 0, - ["PhysicalDotEHP"] = 5987, - ["Gear:EnergyShield"] = 880, - ["LightningTotalPool"] = 5987, - ["ColdMaximumHitTaken"] = 23948, - ["LightningMaximumHitTaken"] = 24945.833333333, - ["ColdCritAverage"] = 347097.564, - ["ChallengerChargesMax"] = 0, - ["LightningTakenHitMult"] = 0.24, - ["StunDuration"] = 0.35, - ["PhysicalMeleeDamageChance"] = 15, - ["FireAverageDamageChance"] = 7.5, - ["AnyMindOverMatter"] = false, - ["ColdResistTotal"] = 92, - ["MaxManaLeechInstance"] = 94.6, - ["EnergyShieldRecoveryRateMod"] = 1, - ["LifeRecoveryRateMod"] = 1, - ["LightningTakenReflect"] = 1, - ["PhysicalAverageDamageChance"] = 7.5, - ["LowestOfArmourAndEvasion"] = 164, - ["ManaOnBlock"] = 0, - ["EnergyShieldLeech"] = 573.1, - ["ChaosMinBase"] = 0, - ["FireMindOverMatter"] = 0, - ["EvadeChance"] = 1.35, - ["ChaosHitAverage"] = 4149.3375, - ["GhostShrouds"] = 0, - ["LifeUnreserved"] = 256, - ["ManaRecoveryRateMod"] = 1, - ["DamageReductionMax"] = 90, - ["LifeLeechInstanceRate"] = 26.96, - ["ArmourOnBoots"] = 164, - ["EnergyShieldRechargeAppliesToEnergyShield"] = true, - ["ColdResistOver75"] = 0, - ["PowerCharges"] = 6, - ["ColdAverageDamageChance"] = 7.5, - ["ColdAegis"] = 0, - ["FireTakenHitMult"] = 0.2, - ["FireGuardEffectiveLife"] = 256, - ["ColdManaEffectiveLife"] = 256, - ["LightningTotalEHP"] = 37576.88723206, - ["ChaosSpellDamageChance"] = 0, - ["ManaLeechDuration"] = 0, - ["FireResist"] = 75, - ["SpellDodgeChance"] = 25, - ["EnergyShieldRegenPercent"] = 0, - ["PhysicalTakenHit"] = 1, - ["allMult"] = 1.1, - ["BlockChance"] = 15, - ["FireGuardAbsorbRate"] = 0, - ["ChaosPoisonChance"] = 0, - ["ChaosManaEffectiveLife"] = 256, - ["ShockAvoidChance"] = 0, - ["TotalAttr"] = 744, - ["PoisonAvoidChance"] = 0, - ["FireAegis"] = 0, - ["IgniteAvoidChance"] = 0, - ["Evasion"] = 1048, - ["Gear:Evasion"] = 0, - ["Mana"] = 946, - ["FireGuardEffectivePool"] = 0, - ["AvoidProjectilesChance"] = 0, - ["ColdGuardEffectiveLife"] = 256, - ["ColdSpellDamageChance"] = 0, - ["ManaRegenInc"] = 78, - ["FireManaEffectiveLife"] = 256, - ["LightningTakenDotMult"] = 0.24, - ["TotalMin"] = 47412.09, - ["ChaosTakenReflect"] = 1, - ["BlitzCharges"] = 0, - ["ColdGuardEffectivePool"] = 0, - ["LifeReservedPercent"] = 81.008902077151, - ["PhysicalPhysicalBaseTakenHitMult"] = 0.99, - ["ManaLeechGainPerHit"] = 0, - ["ChaosResistOverCap"] = 0, - ["BlindAvoidChance"] = 0, - ["FireMaximumHitTaken"] = 29935, - ["FrenzyChargesMax"] = 6, - ["ChillAvoidChance"] = 100, - ["ChaosTotalPool"] = 5987, - ["Gear:Armour"] = 164, - ["dontSplitEvade"] = true, - ["LightningNumberOfHits"] = 30.475983156577, - ["CritMultiplier"] = 6.1, - ["ManaReserved"] = 880, - ["ChillDurationMod"] = 1, - ["EnduranceChargesMin"] = 0, - ["EnergyShieldOnBoots"] = 75, - ["PhysicalTakenHitMult"] = 0.99, - ["AnyBypass"] = true, - ["FireTakenReflectMult"] = 0.2, - ["MissingFireResist"] = 0, - ["MeleeNotHitChance"] = 26.0125, - ["ManaLeechInstant"] = 0, - ["PhysicalManaEffectiveLife"] = 256, - ["ChaosProjectileDamageChance"] = 15, - ["FireTakenDotMult"] = 0.2, - ["LightningTakenHit"] = 1, -} -} \ No newline at end of file diff --git a/spec/TestBuilds/3.13/Generals Perforate Zerker.lua b/spec/TestBuilds/3.13/Generals Perforate Zerker.lua deleted file mode 100644 index c8eb5cc9..00000000 --- a/spec/TestBuilds/3.13/Generals Perforate Zerker.lua +++ /dev/null @@ -1,1604 +0,0 @@ -return { - xml = [[ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8% increased maximum Life - Regenerate 1% of Life per second - - - 3% increased maximum Life - - - Gain 1 Endurance Charge every second if you've been Hit Recently - - - 24% increased Evasion Rating and Armour - 8% increased maximum Life - 10% chance to Intimidate Enemies for 4 seconds on Hit - - - 2% increased Cast Speed - - - 4% increased maximum Mana - - - 4% increased Skill Effect Duration - - - +1% to maximum Fire Resistance - +20% to Fire Resistance - - - 3% increased maximum Energy Shield - - - +10% to Cold Resistance - - - 5% increased Area of Effect - - - 2% increased maximum Life - - - Minions deal 80% increased Damage - - - 15% increased effect of Non-Curse Auras from your Skills - - - 12% increased Fire Damage - - - 1% Chance to Block Spell Damage - - - 5% increased maximum Energy Shield - - - 10% increased maximum Life - Regenerate 1.1% of Life per second - - - +11% to Fire Resistance - - - 3% increased effect of Non-Curse Auras from your Skills - - - 3% increased Effect of your Curses - - - 9% increased Evasion Rating - - - 5% increased Skill Effect Duration - - - 10% increased Area Damage - - - 12% increased Mana Regeneration Rate - - - 10% increased Attack Damage - - - +8% to Chaos Resistance - - - +9% to Critical Strike Multiplier - - - 2% chance to deal Double Damage - 25% increased Physical Damage - - - 3% increased maximum Life - - - 3% increased Movement Speed - - - 3% increased Cast Speed - 11% increased Projectile Damage - 5% chance to Shock - 6% chance to Ignite - - - 12% increased Spell Damage - - - 1% chance to Dodge Attack Hits - - - 7% increased Projectile Speed - - - 3% increased Attack Speed - - - 5% increased Effect of your Curses - - - 7% increased Physical Damage - - - 7% increased Armour - - - +12% to Lightning Resistance - - - 2% increased maximum Life - - - 10% increased Fire Damage - - - 11% increased Area Damage - - - +10% to Fire Resistance - - - 7% increased Area Damage - - - 7% increased Fire Damage - 6% increased maxmium Mana - +11% to Lightning Resistance - - - +8% to Critical Strike Multiplier - - - 10% increased Critical Strike Chance - - - 3% increased maximum Life - - - 7% increased Spell Damage - - - 20% increased Area of Effect of Aura Skills - 15% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - +9% to Critical Strike Multiplier - - - 1% chance to Dodge Spell Hits - - - +10% to Fire Resistance - - - +8% to Critical Strike Multiplier - - - 8% increased Armour - - - 5% increased maximum Energy Shield - - - 3% increased maximum Life - - - 28% increased Cold Damage - 10% of Physical Damage Converted to Cold Damage - - - 7% increased maximum Life - 0.4% of Attack Damage Leeched as Life - - - 12% increased Area Damage - - - 7% increased Spell Damage - - - +8% to Critical Strike Multiplier - - - +14% to Fire Resistance - - - 8% increased Chaos Damage - - - 12% increased Physical Damage - - - 10% increased Lightning Damage - - - 3% increased maximum Life - - - 5% increased Area of Effect - - - 6% increased Area of Effect - - - 10% chance to gain a Frenzy Charge on Hit - - - 8% increased maximum Life - Regenerate 0.7% of Life per second - - - 9% increased Evasion Rating - - - +13% to Fire Resistance - - - +11% to Fire Resistance - - - 11% increased Fire Damage - - - 10% increased Projectile Speed - - - 7% increased Projectile Damage - - - 20% increased Area of Effect of Aura Skills - 15% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - 3% increased Movement Speed - - - Minions deal 12% increased Damage - - - 2% increased maximum Life - - - +13% to Lightning Resistance - - - +6% to Chaos Resistance - - - +12% to Lightning Resistance - - - +12% to Fire Resistance - - - +12% to Cold Resistance - - - 10% increased Damage over Time - - - 10% increased Chaos Damage - - - 30% increased Chaos Damage - 25% chance to inflict Withered for 2 seconds on Hit - - - 27% increased Spell Damage - 43% increased Critical Strike Chance for Spells - - - +9% to Critical Strike Multiplier - - - 3% increased effect of Non-Curse Auras from your Skills - - - 12% increased Chaos Damage - - - 3% increased Movement Speed - - - 3% increased Movement Speed - - - 1% Chance to Block Spell Damage - - - 7% increased Spell Damage - - - 33% increased Fire Damage - Damage Penetrates 2% Fire Resistance - - - 9% increased Chaos Damage - - - 9% increased Fire Damage - - - 4% chance to Freeze - - - 1% Chance to Block Spell Damage - - - +9% to Critical Strike Multiplier - - - 5% increased maximum Energy Shield - - - 1% chance to Dodge Spell Hits - - - +7% to Chaos Resistance - - - 2% increased maximum Life - - - +1% to maximum Chaos Resistance - +17% to Chaos Resistance - - - 2% increased maximum Life - - - +8% to Chaos Resistance - - - 34% increased Fire Damage - Damage Penetrates 3% Fire Resistance - - - +12% to Fire Resistance - - - +12% to Cold Resistance - - - 8% increased Attack Damage - - - 4% increased maximum Life - - - 4% increased maximum Mana - - - 12% increased Chaos Damage - - - 12% increased Evasion Rating - - - - https://www.pathofexile.com/passive-skill-tree/AAAABAECAGMXNrF5aJJ9wBplTRuqYYruevcytfI__DWS15Z9-wixw2h34z38hmCYb3oZKSS_uIIH4e_z3RbpjM9fP12wxVMpYu8OrIkUIDqRMfvYvaluUEcYkUnVdqwOPH_jFHG-pyQ34ohhUkd-uUJYY702hNmFj5MPCburOfNv6hjPfsbYWjK8nzbocqncjLW3wQTcMmhl-OtIeIjt5c9vO4Mu135oWORRAdzoZuxxeA34uQDg8OL6GOoQ9kiYVzpS2XzBB5cI0uOJ2CGQBTxYr9wj - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rarity: RARE -Entropy Shard -Crimson Jewel -Unique ID: 2149ce085ecc736f25f330a8bd01e9e791dfeaa15fd6a1c63dd5750ba4b0c1a7 -Item Level: 81 -Implicits: 0 -{fractured}20% increased Damage with Bleeding -+12% to Global Critical Strike Multiplier -+17% to Critical Strike Multiplier with One Handed Melee Weapons -7% increased maximum Life - - - Rarity: RARE -Glyph Star -Medium Cluster Jewel -Unique ID: 3f02b527d0acd77296a6cfe70494383e62a10b63beb78bf956fbc2c64ad59608 -Item Level: 82 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 5 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: Exerted Attacks deal 20% increased Damage -Added Small Passive Skills also grant: +4% to Chaos Resistance -1 Added Passive Skill is Provocateur -1 Added Passive Skill is Warning Call - - - Rarity: RARE -Empyrean Hope -Medium Cluster Jewel -Unique ID: bf2fd407fedc650f2ed506f54e54303796afe501fa6dc63db75dec9ad0c1800a -Item Level: 83 -LevelReq: 40 -Implicits: 3 -{crafted}Adds 4 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: Exerted Attacks deal 20% increased Damage -Added Small Passive Skills also grant: +3% to Chaos Resistance -Added Small Passive Skills also grant: +2% to Elemental Resistance -1 Added Passive Skill is Lead By Example -1 Added Passive Skill is Provocateur - - - Rarity: RARE -Gale Shine -Crimson Jewel -Unique ID: 7705319d1a0bf63bfd2dfeeec0e107ef8d95f4fe17fbdf68815b0887d0f1afa3 -Item Level: 70 -Implicits: 0 -{fractured}7% increased maximum Life -17% increased Critical Strike Chance with Lightning Skills -+10% to Global Critical Strike Multiplier -+14% to Melee Critical Strike Multiplier - - - Rarity: RARE -Bramble Essence -Large Cluster Jewel -Unique ID: b5ac208d3d11677ea481f3453e35f1a646cabb7b4bbc6a1482a08485db042a54 -Item Level: 69 -LevelReq: 40 -Implicits: 3 -{crafted}Adds 8 Passive Skills -{crafted}2 Added Passive Skills are Jewel Sockets -{crafted}Added Small Passive Skills grant: 12% increased Attack Damage while holding a Shield -Added Small Passive Skills also grant: 1% increased Attack Speed -1 Added Passive Skill is Advance Guard -1 Added Passive Skill is Precise Retaliation -1 Added Passive Skill is Smite the Weak - - - Rarity: RARE -Sol Spark -Medium Cluster Jewel -Unique ID: 0030143e8dd7199ec1c7af0c49effa14f0e3a2eb2d4f0fc21c77349c4b5bdaae -Item Level: 84 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 5 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: Exerted Attacks deal 20% increased Damage -Added Small Passive Skills also grant: +3 to All Attributes -1 Added Passive Skill is Provocateur -1 Added Passive Skill is Warning Call - - - Rarity: RARE -Pandemonium Glimmer -Medium Cluster Jewel -Unique ID: 432e757fa6482f31931266f5945c76490b4552399020dd6c8d62ae7d02c1395d -Item Level: 86 -LevelReq: 67 -Implicits: 4 -{crafted}Adds 5 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: Exerted Attacks deal 20% increased Damage -Overwhelm 2% Physical Damage Reduction -Added Small Passive Skills also grant: +7% to Fire Resistance -Added Small Passive Skills also grant: +2% to Lightning Resistance -1 Added Passive Skill is Haunting Shout -1 Added Passive Skill is Mob Mentality -Corrupted - - - Rarity: RARE -Bramble Ruin -Crimson Jewel -Unique ID: 2c413cb15fea655daef5d269d16ff1612f8c8326b8f94ca4c2267a3e7075e061 -Item Level: 85 -Implicits: 0 -+9% to Global Critical Strike Multiplier -+17% to Critical Strike Multiplier with One Handed Melee Weapons -7% increased maximum Life -+2 Life gained for each Enemy hit by your Attacks -Corrupted - - - Rarity: UNIQUE -Kitava's Teachings -Small Cluster Jewel -Unique ID: a9bf71a613bb826a7ba43214a9e47f736cc3fc479f9e794613b989564cbfa904 -Item Level: 73 -Implicits: 0 -Adds Disciple of Kitava -Corrupted - - - Rarity: RARE -Soul Cut -Large Cluster Jewel -Unique ID: 1b14022854ccc2851284554949c173bb9bbd62d49a54a412ff5434fce251791e -Item Level: 81 -LevelReq: 40 -Implicits: 3 -{crafted}Adds 8 Passive Skills -{crafted}2 Added Passive Skills are Jewel Sockets -{crafted}Added Small Passive Skills grant: 12% increased Physical Damage -Added Small Passive Skills also grant: +3 to Intelligence -1 Added Passive Skill is Furious Assault -1 Added Passive Skill is Iron Breaker -1 Added Passive Skill is Master the Fundamentals - - - Rarity: RARE -Eagle Sliver -Crimson Jewel -Unique ID: da54797312d94ef912f62704722457c84950ca7edf09e7edb7469c9dbce9c4f5 -Item Level: 82 -Implicits: 0 -+11% to Global Critical Strike Multiplier -+16% to Critical Strike Multiplier with One Handed Melee Weapons -6% increased maximum Life -10% increased Projectile Damage -Corrupted - - - Rarity: UNIQUE -Watcher's Eye -Prismatic Jewel -Unique ID: c9b89954dc9242248ee84b5f9a0f74f15a7c67f0356d34395c0d493777364873 -Item Level: 85 -Limited to: 1 -Implicits: 0 -6% increased maximum Energy Shield -6% increased maximum Life -5% increased maximum Mana -+28% to Critical Strike Multiplier while affected by Precision -48% increased Attack Physical Damage while using Pride - - - Rarity: UNIQUE -Hands of the High Templar -Crusader Gloves -Unique ID: 8d357b3a859e0454882e0c4130e6c66da5eb6d37727c8472e648f78229aa03ce -Item Level: 85 -Quality: 20 -Sockets: W-R-W-W -LevelReq: 66 -Implicits: 2 -Curse Enemies with Vulnerability on Hit, with 44% increased Effect -Attacks have +0.77% to Critical Strike Chance -Can be modified while Corrupted -Can have up to 5 Implicit Modifiers while Item has this Modifier -167% increased Armour and Energy Shield -12% increased maximum Life -+24% to Fire and Lightning Resistances -Corrupted - - - Rarity: UNIQUE -Paradoxica -Vaal Rapier -Unique ID: a0b72090b5d6e5d80eaaf47a3092626b8e949f8138e249770315e66c2ce0c5ff -Item Level: 83 -Quality: 48 -Sockets: G-G-R -LevelReq: 66 -Implicits: 1 -+25% to Global Critical Strike Multiplier -Attacks with this Weapon deal Double Damage -{crafted}91% increased Physical Damage -{crafted}16% increased Attack Speed -{crafted}+18% to Quality -{crafted}16% chance to Poison on Hit -Corrupted - - - Rarity: RARE -Beast Clasp -Turquoise Amulet -Unique ID: f998c984e54a12e9f21671ef9a1cafa725784a16aa20d3f2834e4bb59f23df6d -Item Level: 84 -LevelReq: 60 -Implicits: 2 -{crafted}Allocates Swift Skewering -+24 to Dexterity and Intelligence -+49 to Dexterity -Adds 14 to 27 Physical Damage to Attacks -20% increased Cold Damage -+15% to all Elemental Resistances - - - Rarity: RARE -Oblivion Cloak -Astral Plate -Unique ID: 883c8517cf572067e0aa54197388deee74333e3da0a387df83c235f661e76965 -Elder Item -Item Level: 100 -Quality: 30 -Sockets: W-W-W-W-W-W -LevelReq: 62 -Implicits: 4 -{crafted}Quality does not increase Defences -{crafted}Grants +1 to Maximum Life per 2% Quality -+12% to all Elemental Resistances -Item sells for much more to vendors -+122 to maximum Life -12% increased maximum Life -Regenerate 1.7 Life per second -+48% to Cold Resistance -Attacks have +1.17% to Critical Strike Chance -{crafted}32% chance to Avoid Elemental Ailments -{crafted}26% chance to Avoid being Stunned - - - Rarity: UNIQUE -Redblade Banner -Painted Tower Shield -Unique ID: 869845669596b94a3d02b23c6e91d262f890c61ae96bfffa08beea9660a8e6a8 -Item Level: 71 -Quality: 0 -Sockets: W W W -LevelReq: 35 -Implicits: 1 -+30 to maximum Life -93% increased Armour -+59 to maximum Life -20% increased Taunt Duration -+5% Chance to Block -50% increased Warcry Cooldown Recovery Rate -Warcries have infinite Power - - - Rarity: UNIQUE -Lion's Roar -Granite Flask -Unique ID: 192c8cbcb476f757313701cfb598049d64b65b8c731e3bd99c539baac4b0e2d9 -Item Level: 82 -Quality: 0 -LevelReq: 27 -Implicits: 0 -Adds Knockback to Melee Attacks during Flask effect -Knocks Back Enemies in an Area when you use a Flask -75% chance to cause Enemies to Flee on use -22% more Melee Physical Damage during effect - - - Rarity: RARE -Loath Road -Two-Toned Boots (Armour/Evasion) -Unique ID: 149ab64c5a5f2882a191f4fd9963b88abef84b6656080893b283a3e63a473a2d -Elder Item -Item Level: 84 -Quality: 0 -Sockets: W-B-G-G -LevelReq: 70 -Implicits: 1 -+12% to Fire and Cold Resistances -Socketed Gems are Supported by Level 20 Fortify -+42% to Fire Resistance -+41% to Lightning Resistance -30% increased Movement Speed -{crafted}+20% to Fire and Cold Resistances - - - Rarity: UNIQUE -Abyssus -Ezomyte Burgonet -Unique ID: e05ccf5cb05dfbd3510eb415159af2681966b957111be021358644f9e11f47a5 -Item Level: 73 -Quality: 20 -Sockets: R-R-R-G -LevelReq: 60 -Implicits: 1 -{crafted}General's Cry has +1 to maximum number of Mirage Warriors -+22 to all Attributes -Adds 40 to 60 Physical Damage to Attacks -+121% to Melee Critical Strike Multiplier -104% increased Armour -41% increased Physical Damage taken - - - Rarity: UNIQUE -Bottled Faith -Sulphur Flask -Unique ID: ac3558845a56bbdfe037f880e69281c9da896ffc00fb12f04d43d8716fc72411 -Item Level: 85 -Quality: 0 -LevelReq: 35 -Implicits: 1 -Creates Consecrated Ground on Use -44% increased Duration -Consecrated Ground created by this Flask has Tripled Radius -+1.79% to Critical Strike Chance against Enemies on Consecrated Ground during Effect -Consecrated Ground created during Effect applies 9% increased Damage taken to Enemies - - - Rarity: UNIQUE -The Hidden Blade -Ambusher -Unique ID: 94a61656ba3ff818d3932de4bd7806c643deb923aab04c5f574db2e94029d8a0 -Item Level: 84 -Quality: 0 -Sockets: G G G -LevelReq: 60 -Implicits: 1 -30% increased Global Critical Strike Chance -Trigger Level 20 Unseen Strike every 0.5 seconds while Phasing -+23 to Dexterity -233% increased Physical Damage -30% reduced Attack Speed while Phasing - - - Rarity: MAGIC -Ample Quicksilver Flask of Adrenaline -Unique ID: dca8161f5a90229f17e7d0500a7eadce6e4d6126c514cdb57268a5b4d2c042ee -Item Level: 42 -Quality: 0 -LevelReq: 4 -Implicits: 0 -+17 to Maximum Charges -29% increased Movement Speed during Flask effect - - - Rarity: MAGIC -Seething Divine Life Flask of Staunching -Unique ID: 65cf591c50c747bef1be3071e2b6feb16e25d6a5df698ab2830e715db7b63206 -Item Level: 70 -Quality: 0 -LevelReq: 60 -Implicits: 0 -66% reduced Amount Recovered -Instant Recovery -Immunity to Bleeding during Flask effect -Removes Bleeding on use - - - Rarity: MAGIC -Chemist's Diamond Flask of Heat -Unique ID: c7b914cd20712cc93b4e7207121bb41af113e9209e79e64edde5e790680de175 -Item Level: 54 -Quality: 0 -LevelReq: 27 -Implicits: 0 -22% reduced Charges used -Immunity to Freeze and Chill during Flask effect -Removes Freeze and Chill on use - - - Rarity: RARE -Blight Whorl -Steel Ring -Unique ID: 1bbf6988bc5ea8cdc04543f88d91a0f746aba548a0f7186ea939f394fb746827 -Item Level: 84 -LevelReq: 80 -Implicits: 2 -{crafted}Your Scout Towers have 25% increased Range -Adds 4 to 16 Physical Damage to Attacks -Adds 12 to 19 Physical Damage to Attacks -+78 to maximum Life -+9% to all Elemental Resistances -+39% to Lightning Resistance -{crafted}Channelling Skills have -3 to Total Mana Cost - - - Rarity: RARE -Blight Eye -Steel Ring -Unique ID: 241c4afd9fdad62137cb31f2a968c69f1e65fddaf619dd20bb9b31176e41b105 -Item Level: 83 -LevelReq: 80 -Implicits: 2 -{crafted}Your Scout Towers have 25% increased Range -Adds 4 to 16 Physical Damage to Attacks -+55 to Strength -+52 to Dexterity -Adds 6 to 14 Physical Damage to Attacks -+71 to maximum Life -11% increased Rarity of Items found -{crafted}+11% to all Elemental Resistances - - - Rarity: UNIQUE -The Iron Mass -Gladius -Unique ID: 44466a17300e5702c7e132e812b42e8df006493e9ce35c9368acf7f5f1a72558 -Item Level: 84 -Quality: 0 -Sockets: R -LevelReq: 60 -Implicits: 1 -40% increased Global Accuracy Rating -149% increased Physical Damage -14% increased Attack Speed -Unholy Might -22% chance to inflict Withered for 2 seconds on Hit with this Weapon -Summoned Skeleton Warriors wield a copy of this Weapon while in your Main Hand -Summoned Skeleton Warriors deal Triple Damage with this -Weapon if you've Hit with this Weapon Recently - - - Rarity: UNIQUE -Ryslatha's Coil -Studded Belt -Unique ID: 82cfd5fc6f9913353df16ff29264b0aefbb13c50b2684602ce663de625ea8929 -Item Level: 71 -LevelReq: 32 -Implicits: 1 -27% increased Stun Duration on Enemies -+30 to Strength -48% more Maximum Physical Attack Damage -36% less Minimum Physical Attack Damage -Adds 1 to 20 Physical Damage to Attacks -+83 to maximum Life -Gain 50 Life when you Stun an Enemy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]], - output = { ["CombinedAvg"] = 0, - ["FrenzyChargesMin"] = 0, - ["EnergyShieldOnGloves"] = 69, - ["HitChance"] = 100, - ["LightningDotEHP"] = 43696.520763187, - ["CrabBarriersMax"] = 0, - ["SiphoningChargesMax"] = 0, - ["ActiveTotemLimit"] = 1, - ["AvoidColdDamageChance"] = 0, - ["AnyTakenReflect"] = 0, - ["InspirationCharges"] = 0, - ["FireEnergyShieldBypass"] = 0, - ["KnockbackChanceOnCrit"] = 0, - ["ReqInt"] = 96, - ["ProjectileNotHitChance"] = 1, - ["ColdMinBase"] = 0, - ["MaxManaLeechRate"] = 134.4, - ["PhysicalTakenReflectMult"] = 0.1881421344, - ["LightningLightningBaseTakenHitMult"] = 0.16929, - ["ManaOnHit"] = 0, - ["PhysicalProjectileDamageChance"] = 30, - ["ManaCost"] = 20, - ["DoubleDamageChance"] = 0, - ["EnergyShieldLeechInstantRate"] = 0, - ["FireMeleeDamageChance"] = 30, - ["PhysicalGuardEffectiveLife"] = 9647.4, - ["PhysicalAegis"] = 0, - ["EnergyShieldRegen"] = 0, - ["LightningAegis"] = 0, - ["SiphoningCharges"] = 0, - ["RuthlessBlowEffect"] = 1, - ["Cooldown"] = 1.9, - ["PhysicalTakenDotMult"] = 1.076328, - ["ChaosDotEHP"] = 7076.8689069343, - ["ReqStr"] = 180, - ["LightningGuardAbsorbRate"] = 75, - ["MissingLightningResist"] = 0, - ["MaxManaLeechInstance"] = 67.2, - ["LightningGuardEffectivePool"] = 0, - ["BonusCritDotMultiplier"] = 0, - ["MaxEnergyShieldLeechRate"] = 8.6, - ["EnergyShieldLeechInstanceRate"] = 1.72, - ["PhysicalNumberOfHits"] = 49.660065031038, - ["ChaosTakenHit"] = 0.67716, - ["FireFireBaseTakenHitMult"] = 0.1625184, - ["CurrentShock"] = 0, - ["PhysicalResist"] = 12, - ["ColdSpellProjectileDamageChance"] = 0, - ["FireResistOver75"] = 1, - ["ColdResist"] = 75, - ["ScorchChanceOnHit"] = 0, - ["PhysicalMinBase"] = 0, - ["SpellProjectileBlockChance"] = 0, - ["ColdTakenReflectMult"] = 0.16929, - ["Dex"] = 224, - ["KnockbackChanceOnHit"] = 0, - ["TheoreticalOffensiveWarcryEffect"] = 1, - ["IgniteChanceOnHit"] = 0, - ["PowerChargesMax"] = 3, - ["FireGuardAbsorb"] = 4686.4, - ["PhysicalDamageReduction"] = 78, - ["Str"] = 422, - ["KnockbackChance"] = 0, - ["FireProjectileDamageChance"] = 30, - ["LightningSpellProjectileDamageChance"] = 0, - ["AnyGuard"] = true, - ["PhysicalTakenReflect"] = 0.85519152, - ["WarcryCastTime"] = 0, - ["Gear:Armour"] = 2378, - ["EnergyShieldLeechGainRate"] = 0, - ["SpellBlockChance"] = 0, - ["PhysicalMindOverMatter"] = 0, - ["LightningManaEffectiveLife"] = 9647.4, - ["ArmourOnGloves"] = 347, - ["LightningResistOver75"] = 0, - ["ColdTakenReflect"] = 0.67716, - ["SpellBlockChanceMax"] = 75, - ["ChaosEnergyShieldBypass"] = 100, - ["impaleStoredHitAvg"] = 0, - ["ManaOnHitRate"] = 0, - ["ChaosMeleeDamageChance"] = 30, - ["EnergyShieldRechargeDelay"] = 2, - ["ChallengerCharges"] = 0, - ["Int"] = 96, - ["ColdEnergyShieldBypass"] = 0, - ["FireResistTotal"] = 117, - ["FreezeAvoidChance"] = 100, - ["ChaosTakenHitMult"] = 1.0360548, - ["BleedChanceOnHit"] = 0, - ["AttackDodgeChance"] = 0, - ["ReqDex"] = 212, - ["ColdTakenHit"] = 0.67716, - ["LightningProjectileDamageChance"] = 30, - ["PhysicalHitAverage"] = 0, - ["DoubleDamageChanceOnCrit"] = 0, - ["ChaosMindOverMatter"] = 0, - ["EffectiveMovementSpeedMod"] = 2.1294, - ["LifeOnBlock"] = 0, - ["LightningResistTotal"] = 110, - ["FireMinBase"] = 0, - ["LightningMinBase"] = 0, - ["InteruptStunAvoidChance"] = 0, - ["RuthlessBlowMaxCount"] = 0, - ["AverageDamage"] = 0, - ["ColdTakenHitMult"] = 0.16929, - ["PowerCharges"] = 3, - ["Devotion"] = 0, - ["MissingColdResist"] = 0, - ["ChaosGuardAbsorbRate"] = 75, - ["FireSpellDamageChance"] = 0, - ["ColdGuardAbsorbRate"] = 75, - ["Spec:EnergyShieldInc"] = 0, - ["LifeUnreserved"] = 4961, - ["LightningGuardAbsorb"] = 4686.4, - ["FireResist"] = 76, - ["RemovableFrenzyCharges"] = 3, - ["Spec:EvasionInc"] = 24, - ["ChaosAegis"] = 0, - ["Spec:ArmourInc"] = 114, - ["Spec:ManaInc"] = 0, - ["Spec:LifeInc"] = 107, - ["PhysicalTotalPool"] = 9733.4, - ["FreezeChanceOnCrit"] = 0, - ["BlockDuration"] = 0.35, - ["ManaLeechPerHit"] = 0, - ["ExtraPoints"] = 2, - ["MissingChaosResist"] = 128, - ["TotalDotDPS"] = 0, - ["TotemsSummoned"] = 1, - ["FireTakenHit"] = 0.67716, - ["BlockEffect"] = 100, - ["BleedAvoidChance"] = 100, - ["AverageNotHitChance"] = 0.5, - ["WithIgniteDPS"] = 0, - ["EnergyShieldOnBlock"] = 0, - ["WithPoisonDPS"] = 0, - ["StunAvoidChance"] = 26, - ["CombinedDPS"] = 0, - ["DamageReductionMax"] = 90, - ["Life"] = 4961, - ["DurationMod"] = 1.15, - ["TotalDot"] = 0, - ["EnduranceCharges"] = 3, - ["ManaLeechGainRate"] = 0, - ["EnemyStunDuration"] = 0.4445, - ["ColdTakenDotMult"] = 0.22275, - ["ChaosAverageDamageChance"] = 15, - ["EnemyStunThresholdMod"] = 1, - ["ImpaleChance"] = 0, - ["ChaosMaximumHitTaken"] = 9311.6696143872, - ["SapChanceOnHit"] = 0, - ["PhysicalTotalEHP"] = 61230.860183269, - ["BrittleChanceOnHit"] = 0, - ["AreaOfEffectRadius"] = 68, - ["ColdMindOverMatter"] = 0, - ["FireAverageDamageChance"] = 15, - ["FreezeChanceOnHit"] = 0, - ["ChallengerChargesMax"] = 0, - ["ShockChanceOnHit"] = 0, - ["EnergyShieldLeechInstant"] = 0, - ["SpellProjectileNotHitChance"] = 0, - ["LifeRegenPercent"] = 8.8, - ["LightningResist"] = 75, - ["PhysicalSpellProjectileDamageChance"] = 0, - ["LifeLeechGainRate"] = 0, - ["SpellNotHitChance"] = 0, - ["LifeReservedPercent"] = 0, - ["PhysicalMaximumHitTaken"] = 51734.291369876, - ["CrabBarriers"] = 0, - ["ManaUnreservedPercent"] = 12.5, - ["ProjectileEvadeChance"] = 1, - ["PoisonChanceOnHit"] = 0, - ["FireMaxBase"] = 0, - ["LightningCritAverage"] = 0, - ["SapChanceOnCrit"] = 0, - ["MaxEnergyShieldLeechInstance"] = 8.6, - ["HexDoomLimit"] = 30, - ["PhysicalSpellDamageChance"] = 0, - ["EnergyShieldLeechInstances"] = 0, - ["AvoidPhysicalDamageChance"] = 0, - ["Duration"] = 5.75, - ["ColdHitAverage"] = 0, - ["ChillChanceOnCrit"] = 0, - ["ShockChanceOnCrit"] = 0, - ["ChaosResistTotal"] = -53, - ["EnergyShieldRecharge"] = 17, - ["LightningResistOverCap"] = 35, - ["IgniteChanceOnCrit"] = 0, - ["PoisonChanceOnCrit"] = 0, - ["BleedChanceOnCrit"] = 0, - ["TotalDotInstance"] = 0, - ["ManaReservedPercent"] = 87.5, - ["ManaLeechRate"] = 0, - ["ManaLeechInstanceRate"] = 13.44, - ["LightningTakenReflectMult"] = 0.16929, - ["AvoidChaosDamageChance"] = 0, - ["EnergyShieldLeechPerHit"] = 0, - ["EnergyShieldLeechRate"] = 0, - ["LifeLeechInstances"] = 0, - ["ArmourOnWeapon 2"] = 419, - ["LifeLeechRate"] = 0, - ["EvadeChance"] = 1, - ["ColdDotEHP"] = 43696.520763187, - ["TotalDPS"] = 0, - ["AverageHit"] = 0, - ["EnergyShieldOnHitRate"] = 0, - ["PhysicalGuardAbsorb"] = 4686.4, - ["LifeOnHitRate"] = 0, - ["EnergyShieldOnHit"] = 0, - ["LifeOnHit"] = 0, - ["ManaLeechInstantRate"] = 0, - ["IgniteAvoidChance"] = 32, - ["InspirationChargesMax"] = 5, - ["ChaosResist"] = -53, - ["ManaLeechInstances"] = 0, - ["EnergyShieldLeechDuration"] = 0, - ["LifeLeechInstantRate"] = 0, - ["ManaUnreserved"] = 84, - ["EnergyShield"] = 86, - ["Accuracy"] = 2784.6, - ["LifeLeechDuration"] = 0, - ["LifeLeechPerHit"] = 0, - ["TotalMax"] = 0, - ["FireTakenHitMult"] = 0.1625184, - ["PhysicalGuardAbsorbRate"] = 75, - ["FireTakenReflectMult"] = 0.1625184, - ["MaxLifeLeechInstance"] = 496.1, - ["AverageBlockChance"] = 15, - ["ColdMeleeDamageChance"] = 30, - ["ActiveGolemLimit"] = 1, - ["FireHitAverage"] = 0, - ["TripleDamageChance"] = 0, - ["LifeUnreservedPercent"] = 100, - ["ScorchChanceOnCrit"] = 0, - ["OffensiveWarcryEffect"] = 1, - ["ExertedAttackUptimeRatio"] = 0, - ["ChaosCritAverage"] = 0, - ["FireCritAverage"] = 0, - ["EvasionOnBoots"] = 126, - ["BlockChanceMax"] = 75, - ["RuthlessBlowChance"] = 0, - ["LightRadiusMod"] = 1, - ["PhysicalCritAverage"] = 0, - ["MaxLifeLeechRate"] = 992.2, - ["ManaRegen"] = 11.8, - ["ChaosChaosBaseTakenHitMult"] = 1.0360548, - ["ManaLeech"] = 0, - ["ManaOnBlock"] = 0, - ["LifeLeechInstant"] = 0, - ["LifeLeech"] = 0, - ["ChaosMaxBase"] = 0, - ["WithBleedDPS"] = 0, - ["ColdMaxBase"] = 0, - ["AvoidLightningDamageChance"] = 0, - ["LightningMaxBase"] = 0, - ["ColdColdBaseTakenHitMult"] = 0.16929, - ["LightningGuardEffectiveLife"] = 9647.4, - ["AvoidFireDamageChance"] = 0, - ["ChaosSpellProjectileDamageChance"] = 0, - ["PhysicalMaxBase"] = 0, - ["FrenzyCharges"] = 3, - ["TotalCharges"] = 9, - ["ChaosTakenReflectMult"] = 1.0360548, - ["DoubleDamageEffect"] = 1, - ["LifeReserved"] = 0, - ["AreaOfEffectMod"] = 1.3, - ["TripleDamageEffect"] = 1, - ["FireSpellProjectileDamageChance"] = 0, - ["TripleDamageChanceOnCrit"] = 0, - ["ScaledDamageEffect"] = 1, - ["CritEffect"] = 1.4865693724932, - ["ArmourOnHelmet"] = 775, - ["EnemyCurseLimit"] = 1, - ["PreEffectiveCritChance"] = 11.2054, - ["LightningEnergyShieldBypass"] = 0, - ["CritChance"] = 21.1551901084, - ["FistOfWarCooldown"] = 0, - ["ColdTotalPool"] = 9733.4, - ["LightningMindOverMatter"] = 0, - ["RuthlessBlowMultiplier"] = 1, - ["FistOfWarAilmentEffect"] = 1, - ["FistOfWarHitEffect"] = 1, - ["LightningHitAverage"] = 0, - ["AilmentWarcryEffect"] = 1, - ["RallyingHitEffect"] = 1, - ["SeismicHitEffect"] = 1, - ["PhysicalResistWhenHit"] = 12, - ["TheoreticalMaxOffensiveWarcryEffect"] = 1, - ["MaxOffensiveWarcryEffect"] = 1, - ["Time"] = 0.57142857142857, - ["BlitzChargesMax"] = 0, - ["Speed"] = 1.75, - ["LightningAverageDamageChance"] = 15, - ["BrittleChanceOnCrit"] = 0, - ["ChillChanceOnHit"] = 0, - ["ChaosTotalEHP"] = 11663.020987289, - ["ChaosGuardEffectiveLife"] = 9647.4, - ["ChaosNumberOfHits"] = 9.4590600059119, - ["MovementSpeedMod"] = 2.1294, - ["FireTotalPool"] = 9733.4, - ["ColdProjectileDamageChance"] = 30, - ["ChaosResistOver75"] = 0, - ["FireNumberOfHits"] = 57.93674253621, - ["LowestAttribute"] = 96, - ["EnduranceChargesMax"] = 3, - ["ActionSpeedMod"] = 1, - ["ColdTotalEHP"] = 68520.248300325, - ["MeleeEvadeChance"] = 1, - ["ColdNumberOfHits"] = 55.571977534732, - ["ProjectileBlockChance"] = 30, - ["FireTotalEHP"] = 71436.003547147, - ["RemovableEnduranceCharges"] = 3, - ["LightningTotalPool"] = 9733.4, - ["FireManaEffectiveLife"] = 9647.4, - ["ColdResistOver75"] = 0, - ["ColdMaximumHitTaken"] = 57495.422056826, - ["LightningMaximumHitTaken"] = 57495.422056826, - ["FireDotEHP"] = 45517.20912832, - ["PhysicalDotEHP"] = 9043.1541314544, - ["Gear:EnergyShield"] = 69, - ["ChaosSpellDamageChance"] = 0, - ["FireResistOverCap"] = 41, - ["MaximumShock"] = 50, - ["ColdCritAverage"] = 0, - ["MaximumRage"] = 50, - ["LightningTakenHitMult"] = 0.16929, - ["StunDuration"] = 0.35, - ["PhysicalMeleeDamageChance"] = 30, - ["LifeRegen"] = 438.268, - ["AnyMindOverMatter"] = false, - ["ManaRegenInc"] = 0, - ["EnergyShieldRecoveryRateMod"] = 1, - ["ColdResistTotal"] = 84, - ["LowestOfArmourAndEvasion"] = 774, - ["LightningTakenReflect"] = 0.67716, - ["PhysicalAverageDamageChance"] = 15, - ["SpellDodgeChance"] = 0, - ["ShieldBlockChance"] = 30, - ["EnergyShieldLeech"] = 0, - ["ChaosMinBase"] = 0, - ["FireMindOverMatter"] = 0, - ["FireGuardEffectivePool"] = 0, - ["ChaosHitAverage"] = 0, - ["dontSplitEvade"] = true, - ["EnduranceChargesMin"] = 0, - ["PhysicalGuardEffectivePool"] = 0, - ["ManaRecoveryRateMod"] = 1, - ["LifeLeechInstanceRate"] = 128.986, - ["GhostShrouds"] = 0, - ["EnergyShieldRechargeAppliesToEnergyShield"] = true, - ["ArmourOnBoots"] = 126, - ["ArmourOnBody Armour"] = 711, - ["ColdAverageDamageChance"] = 15, - ["BlitzCharges"] = 0, - ["ColdResistOverCap"] = 9, - ["ChaosTakenDotMult"] = 1.36323, - ["CritExtraDamageReduction"] = 0, - ["LightningTotalEHP"] = 68520.248300325, - ["ChaosProjectileDamageChance"] = 30, - ["ManaLeechDuration"] = 0, - ["AnyAegis"] = false, - ["TotalAttr"] = 742, - ["DoubleArmourChance"] = 0, - ["FireTakenReflect"] = 0.67716, - ["EnergyShieldRegenPercent"] = 0, - ["BlockChance"] = 30, - ["FireGuardAbsorbRate"] = 75, - ["ChaosPoisonChance"] = 0, - ["ChaosManaEffectiveLife"] = 9647.4, - ["PhysicalTakenHit"] = 0.85519152, - ["PowerChargesMin"] = 0, - ["ColdManaEffectiveLife"] = 9647.4, - ["FireAegis"] = 0, - ["ShockAvoidChance"] = 32, - ["Evasion"] = 774, - ["Gear:Evasion"] = 126, - ["Mana"] = 672, - ["PoisonAvoidChance"] = 0, - ["AvoidProjectilesChance"] = 0, - ["ColdGuardEffectiveLife"] = 9647.4, - ["ColdSpellDamageChance"] = 0, - ["Armour"] = 23432, - ["PhysicalEnergyShieldBypass"] = 0, - ["WarcryPower"] = 50, - ["TotalMin"] = 0, - ["ChaosTakenReflect"] = 0.67716, - ["ColdAegis"] = 0, - ["ColdGuardEffectivePool"] = 0, - ["ChaosGuardAbsorb"] = 4686.4, - ["PhysicalPhysicalBaseTakenHitMult"] = 0.1881421344, - ["LightningTakenDotMult"] = 0.22275, - ["ChaosResistOverCap"] = 0, - ["BlindAvoidChance"] = 0, - ["FireMaximumHitTaken"] = 59891.064642527, - ["FrenzyChargesMax"] = 3, - ["ChillAvoidChance"] = 100, - ["FireGuardEffectiveLife"] = 9647.4, - ["RemovablePowerCharges"] = 3, - ["LifeRecoveryRateMod"] = 1, - ["LightningNumberOfHits"] = 55.571977534732, - ["CritMultiplier"] = 3.3, - ["ManaReserved"] = 588, - ["ChaosTotalPool"] = 9647.4, - ["ChaosGuardEffectivePool"] = 0, - ["ColdGuardAbsorb"] = 4686.4, - ["LightningSpellDamageChance"] = 0, - ["AnyBypass"] = false, - ["PhysicalTakenHitMult"] = 0.1881421344, - ["MissingFireResist"] = 0, - ["MeleeNotHitChance"] = 1, - ["ManaLeechInstant"] = 0, - ["PhysicalManaEffectiveLife"] = 9647.4, - ["LightningMeleeDamageChance"] = 30, - ["FireTakenDotMult"] = 0.21384, - ["LightningTakenHit"] = 0.67716, -} -} \ No newline at end of file diff --git a/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua b/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua deleted file mode 100644 index 563b9721..00000000 --- a/spec/TestBuilds/3.13/Mirage Archer Toxic Rain.lua +++ /dev/null @@ -1,1784 +0,0 @@ -return { - xml = [[ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https://www.pathofexile.com/passive-skill-tree/AAAABAYCACpNotl1nvmktzCJ4I19tNEWvzfUoJ81kqOj_o9irH1bbIw64SaVBuc6QsLsSsibtYTFjb9cQIMJ51TIFGqM9W9NkhQJzxUOSInTUUfaO4w2h8u1SCP28NU51ElRkUfDOhNt3ahRTHaClS65Ao_6MHEwfAce2L2dqm_yz93xitQjJP2kBVVLJohuqpMf5li18j8nsNg2PWHifyski3BSEZZLeDOjD6vtP3DUrEdJE6IudvdvnhvIykoFtTH6tMVfsKZXTeM8tsgMUELyRf4Kp5uAsw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https://www.pathofexile.com/passive-skill-tree/AAAABAICABzcfTWdYxR1CPRbr1VL2cYzh7XytNEqTfnoakOiAMEzPyegnzWSX5inCErIfVuv626qMpQqC9QjwGYdvnfX51QmlVNSWW23PjwFLJy4k5u1A-5FRxmKUlNNEonTUUd3B-98QYcfQQSzPV8YPNi9b_LPMh9MfwJh4rzqOdSa4HyDXwR_K5ykwzqCx70npuARLYcTMHxFnZYyl_SXdJeV6NaXBm0Z8bMi6shbwOOdrlFMFbj-CufqA3Uy0Q-rS1cki3BSkzr5M1-wjDZW-pUFrEdM_5hTdvdvniT9MfrKSgW1CGdd8p_fIXYo-k4qyAzDeY2_6-4Wvw== - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 8% increased maximum Life - Regenerate 1% of Life per second - - - 3% increased maximum Life - - - Gain 1 Endurance Charge every second if you've been Hit Recently - - - 24% increased Evasion Rating and Armour - 8% increased maximum Life - 10% chance to Intimidate Enemies for 4 seconds on Hit - - - 2% increased Cast Speed - - - 4% increased maximum Mana - - - 4% increased Skill Effect Duration - - - +1% to maximum Fire Resistance - +20% to Fire Resistance - - - 3% increased maximum Energy Shield - - - +10% to Cold Resistance - - - 5% increased Area of Effect - - - 2% increased maximum Life - - - Minions deal 80% increased Damage - - - 15% increased effect of Non-Curse Auras from your Skills - - - 12% increased Fire Damage - - - 1% Chance to Block Spell Damage - - - 5% increased maximum Energy Shield - - - 10% increased maximum Life - Regenerate 1.1% of Life per second - - - +11% to Fire Resistance - - - 3% increased effect of Non-Curse Auras from your Skills - - - 3% increased Effect of your Curses - - - 9% increased Evasion Rating - - - 5% increased Skill Effect Duration - - - 10% increased Area Damage - - - 12% increased Mana Regeneration Rate - - - 10% increased Attack Damage - - - +8% to Chaos Resistance - - - +9% to Critical Strike Multiplier - - - 2% chance to deal Double Damage - 25% increased Physical Damage - - - 3% increased maximum Life - - - 3% increased Movement Speed - - - 3% increased Cast Speed - 11% increased Projectile Damage - 5% chance to Shock - 6% chance to Ignite - - - 12% increased Spell Damage - - - 1% chance to Dodge Attack Hits - - - 7% increased Projectile Speed - - - 3% increased Attack Speed - - - 5% increased Effect of your Curses - - - 7% increased Physical Damage - - - 7% increased Armour - - - +12% to Lightning Resistance - - - 2% increased maximum Life - - - 10% increased Fire Damage - - - 11% increased Area Damage - - - +10% to Fire Resistance - - - 7% increased Area Damage - - - 7% increased Fire Damage - 6% increased maxmium Mana - +11% to Lightning Resistance - - - +8% to Critical Strike Multiplier - - - 10% increased Critical Strike Chance - - - 3% increased maximum Life - - - 7% increased Spell Damage - - - 20% increased Area of Effect of Aura Skills - 15% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - +9% to Critical Strike Multiplier - - - 1% chance to Dodge Spell Hits - - - +10% to Fire Resistance - - - +8% to Critical Strike Multiplier - - - 8% increased Armour - - - 5% increased maximum Energy Shield - - - 3% increased maximum Life - - - 28% increased Cold Damage - 10% of Physical Damage Converted to Cold Damage - - - 7% increased maximum Life - 0.4% of Attack Damage Leeched as Life - - - 12% increased Area Damage - - - 7% increased Spell Damage - - - +8% to Critical Strike Multiplier - - - +14% to Fire Resistance - - - 8% increased Chaos Damage - - - 12% increased Physical Damage - - - 10% increased Lightning Damage - - - 3% increased maximum Life - - - 5% increased Area of Effect - - - 6% increased Area of Effect - - - 10% chance to gain a Frenzy Charge on Hit - - - 8% increased maximum Life - Regenerate 0.7% of Life per second - - - 9% increased Evasion Rating - - - +13% to Fire Resistance - - - +11% to Fire Resistance - - - 11% increased Fire Damage - - - 10% increased Projectile Speed - - - 7% increased Projectile Damage - - - 20% increased Area of Effect of Aura Skills - 15% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - 4% increased effect of Non-Curse Auras from your Skills - - - 3% increased Movement Speed - - - Minions deal 12% increased Damage - - - 2% increased maximum Life - - - +13% to Lightning Resistance - - - +6% to Chaos Resistance - - - +12% to Lightning Resistance - - - +12% to Fire Resistance - - - +12% to Cold Resistance - - - 10% increased Damage over Time - - - 10% increased Chaos Damage - - - 30% increased Chaos Damage - 25% chance to inflict Withered for 2 seconds on Hit - - - 27% increased Spell Damage - 43% increased Critical Strike Chance for Spells - - - +9% to Critical Strike Multiplier - - - 3% increased effect of Non-Curse Auras from your Skills - - - 12% increased Chaos Damage - - - 3% increased Movement Speed - - - 3% increased Movement Speed - - - 1% Chance to Block Spell Damage - - - 7% increased Spell Damage - - - 33% increased Fire Damage - Damage Penetrates 2% Fire Resistance - - - 9% increased Chaos Damage - - - 9% increased Fire Damage - - - 4% chance to Freeze - - - 1% Chance to Block Spell Damage - - - +9% to Critical Strike Multiplier - - - 5% increased maximum Energy Shield - - - 1% chance to Dodge Spell Hits - - - +7% to Chaos Resistance - - - 2% increased maximum Life - - - +1% to maximum Chaos Resistance - +17% to Chaos Resistance - - - 2% increased maximum Life - - - +8% to Chaos Resistance - - - 34% increased Fire Damage - Damage Penetrates 3% Fire Resistance - - - +12% to Fire Resistance - - - +12% to Cold Resistance - - - 8% increased Attack Damage - - - 4% increased maximum Life - - - 4% increased maximum Mana - - - 12% increased Chaos Damage - - - 12% increased Evasion Rating - - - - https://www.pathofexile.com/passive-skill-tree/AAAABAICACpN_EdBh7cwVeC00fnoLOnPXl-YdoJhEAbBcaE64aOKWFodvgPuWNwTbR9BDkhRR7VII_bsGAOiFAldaOjWCC4mOn_Gg9npvRHdWybowTNy037KqV3ypldN4_JFJT9W-oazjX3veha_SAQ1kv6PAF4IiW6qwcVtbAs4f_ua8SZFtz4M7UrIgsePT02S7g7YvSaIzzK1CBUgWURSKf4Km402PVltGv618hGWH0zUI-2DGGobyDlSMHyYUxmOPyfndJwCBbXWVBVDWAcajY2_yAwA7lqBM4eVBfaj - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rarity: UNIQUE -Witchfire Brew -Stibnite Flask -Unique ID: 5686991f93a2a58594a876df7586ebe70272c3d755fbac7cf825f7ddc9b022d1 -Item Level: 78 -Quality: 0 -LevelReq: 48 -Implicits: 1 -Creates a Smoke Cloud on Use -50% increased Charges used -39% increased Damage Over Time during Flask Effect -Grants Level 21 Despair Curse Aura during Flask Effect - - - Rarity: NORMAL -Unset Ring -Elder Item -Sockets: G -LevelReq: 24 -Implicits: 1 -Has 1 Socket -Curse Enemies with Socketed Hex Curse Gem on Hit -+107% to Chaos Damage over Time Multiplier -40% increased Skill Effect Duration - - - Rarity: RARE -New Item -Thicket Bow -Shaper Item -Crafted: true -Prefix: {range:1}ChanceToGainFrenzyChargeOnKillUberShaper2_ -Prefix: {range:0.5}LocalIncreaseSocketedGemLevel1 -Prefix: {range:1}LocalIncreaseSocketedBowGemLevel2 -Suffix: {range:1}GlobalDamageOverTimeMultiplier2h3___ -Suffix: {range:0.5}MaximumFrenzyChargeUber1 -Suffix: {range:1}LocalIncreasedAttackSpeedRangedDoubleDamageUber2 -Quality: 20 -Sockets: G-G-G-G-G-G -LevelReq: 67 -Implicits: 2 -{range:1}(3-5)% increased Attack Speed -Socketed Gems are Supported by Level 10 Onslaught -+1 to Level of Socketed Gems -+2 to Level of Socketed Bow Gems -+35% to Damage over Time Multiplier -12% increased Attack Speed -+1 to Maximum Frenzy Charges -10% chance to gain a Frenzy Charge on Kill -6% chance to deal Double Damage -Corrupted - - - - Rarity: RARE -New Item -Sharktooth Arrow Quiver -Elder Item -Crafted: true -Prefix: {range:1}IncreasedLife9 -Prefix: {range:1}AreaOfEffectUber3_ -Prefix: {range:1}DelveShieldPhysicalDamageReductionRating1 -Suffix: {range:1}GlobalDamageOverTimeMultiplier1h3 -Suffix: {range:1}IncreasedAttackSpeed3 -Suffix: {range:1}FrenzyChargeOnHittingRareOrUniqueUber1 -Quality: 0 -LevelReq: 65 -Implicits: 1 -{tags:resource,life,attack}{range:1}+(3-4) Life gained for each Enemy hit by your Attacks -+18% to Damage over Time Multiplier -13% increased Attack Speed -+99 to maximum Life -15% increased Area of Effect -5% additional Physical Damage Reduction -5% chance to gain a Frenzy Charge when you Hit a Rare or Unique Enemy - - - - Rarity: RARE -New Item -Large Cluster Jewel -Crafted: true -Prefix: {range:0.5}AfflictionNotableWickedPall_ -Prefix: {range:0.5}AfflictionNotableMiseryEverlasting -Suffix: {range:0.5}AfflictionNotableUnholyGrace_ -Suffix: None -Cluster Jewel Skill: affliction_chaos_damage -Cluster Jewel Node Count: 8 -Quality: 0 -LevelReq: 40 -Implicits: 3 -{crafted}Adds 8 Passive Skills -{crafted}2 Added Passive Skills are Jewel Sockets -{crafted}Added Small Passive Skills grant: 12% increased Chaos Damage -1 Added Passive Skill is Misery Everlasting -1 Added Passive Skill is Unholy Grace -1 Added Passive Skill is Wicked Pall - - - Rarity: RARE -New Item -Medium Cluster Jewel -Crafted: true -Prefix: {range:0.5}AfflictionNotableBrushwithDeath -Prefix: {range:0.5}AfflictionNotableExposureTherapy_ -Suffix: None -Suffix: None -Cluster Jewel Skill: affliction_damage_over_time_multiplier -Cluster Jewel Node Count: 4 -Quality: 0 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 4 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: +4% to Damage over Time Multiplier -1 Added Passive Skill is Brush with Death -1 Added Passive Skill is Exposure Therapy - - - Rarity: RARE -New Item -Large Cluster Jewel -Crafted: true -Prefix: {range:0.5}AfflictionNotableWickedPall_ -Prefix: {range:0.5}AfflictionNotableMiseryEverlasting -Suffix: {range:0.5}AfflictionNotableUnspeakableGifts -Suffix: None -Cluster Jewel Skill: affliction_chaos_damage -Cluster Jewel Node Count: 8 -Quality: 0 -LevelReq: 60 -Implicits: 3 -{crafted}Adds 8 Passive Skills -{crafted}2 Added Passive Skills are Jewel Sockets -{crafted}Added Small Passive Skills grant: 12% increased Chaos Damage -1 Added Passive Skill is Misery Everlasting -1 Added Passive Skill is Unspeakable Gifts -1 Added Passive Skill is Wicked Pall - - - Rarity: RARE -New Item -Small Cluster Jewel -Crafted: true -Prefix: {range:0.5}AfflictionNotableBrushwithDeath -Prefix: None -Suffix: None -Suffix: None -Cluster Jewel Skill: affliction_maximum_life -Cluster Jewel Node Count: 2 -Quality: 0 -LevelReq: 54 -Implicits: 2 -{crafted}Adds 2 Passive Skills -{crafted}Added Small Passive Skills grant: 4% increased maximum Life -1 Added Passive Skill is Brush with Death - - - Rarity: UNIQUE -Ondar's Clasp -Wrapped Mitts -Variant: Pre 1.1.0 -Variant: Current -Selected Variant: 2 -Wrapped Mitts -Quality: 20 -Sockets: G-G-G-G -LevelReq: 5 -Implicits: 1 -{range:1}(8-10)% increased Attack Speed -{variant:1}20% increased Attack Speed when on Full Life -{variant:2}30% increased Attack Speed when on Full Life -Adds 1 to 13 Lightning Damage to Attacks -{range:0.5}+(50-80) to Accuracy Rating -{variant:1}{range:0.5}(10-15)% increased Movement Speed when on Low Life -{variant:2}20% increased Movement Speed when on Low Life -Corrupted - - - - - - Rarity: RARE -New Item -Amethyst Ring -Elder Item -Crafted: true -Prefix: {range:1}IncreasedLife7 -Prefix: {range:0.5}DelveRingChaosLeech1 -Prefix: {range:0.5}DelveRingPhysicalLeech1 -Suffix: {range:1}CurseOnHitPoachersMarkNewUber2__ -Suffix: {range:1}IncreasedAttackSpeed1 -Suffix: {range:1}AllResistances5 -Quality: 0 -LevelReq: 64 -Implicits: 1 -{tags:chaos,resistance}{range:1}+(9-13)% to Chaos Resistance -Trigger Level 12 Poacher's Mark when you Hit a Rare or Unique Enemy -7% increased Attack Speed -+79 to maximum Life -+16% to all Elemental Resistances -0.2% of Physical Damage Leeched as Life -0.2% of Chaos Damage Leeched as Life - - - - Rarity: UNIQUE -Windscream -Reinforced Greaves -Variant: Pre 2.6.0 -Variant: Current -Selected Variant: 2 -Reinforced Greaves -Quality: 20 -Sockets: R-R-R-R -LevelReq: 33 -Implicits: 2 -{crafted}16% increased Attack and Cast Speed if you've Killed Recently -{range:1}(6-10)% chance to Dodge Spell Hits while moving -{range:1}(50-80)% increased Armour -{range:1}+(10-15)% to all Elemental Resistances -{variant:1}10% increased Movement Speed -{variant:2}15% increased Movement Speed -{variant:1}10% increased Elemental Damage -{variant:2}{range:1}(10-20)% increased Elemental Damage -Enemies can have 1 additional Curse -Corrupted - - - - - - - Rarity: UNIQUE -Ungil's Harmony -Turquoise Amulet -Variant: Pre 3.11.0 -Variant: Current -Selected Variant: 2 -Turquoise Amulet -LevelReq: 23 -Implicits: 1 -{range:1}(8-10)% increased Attack Speed -{variant:1}100% increased Global Critical Strike Chance -{variant:2}{range:1}(250-350)% increased Global Critical Strike Chance -{tags:life}{range:1}+(30-50) to maximum Life -{tags:mana}{range:1}+(30-50) to maximum Mana -40% increased Stun and Block Recovery -Your Critical Strikes do not deal extra Damage -Corrupted - - - - - - - Rarity: MAGIC -Alchemist's Sulphur Flask of Acceleration -Crafted: true -Prefix: {range:0.5}FlaskEffectReducedDuration1 -Suffix: {range:1}FlaskBuffAttackSpeedWhileHealing1 -Quality: 20 -LevelReq: 35 -Implicits: 1 -{tags:flask}Creates Consecrated Ground on Use -12% increased Attack Speed during Flask effect -25% increased effect -33% reduced Duration - - - Rarity: RARE -New Item -Lion Pelt -Hunter Item -Crafted: true -Prefix: {range:1}IncreasedLife9 -Prefix: {range:1}LocalBaseEvasionRatingAndLife3 -Prefix: {range:1}LocalIncreasedEvasionRatingPercent7 -Suffix: {range:1}EnemyChaosResistanceAuraInfluence1_ -Suffix: {range:1}LightningResist8 -Suffix: {range:1}ColdResist8 -CatalystQuality: 20 -Quality: 20 -Sockets: G-G-G-G -LevelReq: 70 -Implicits: 3 -{crafted}Toxic Rain deals 40% increased Damage -{range:1}(4-6)% increased maximum Life -{range:1}Regenerate (1.6-2)% of Life per second -+95 to Evasion Rating -100% increased Evasion Rating -+132 to maximum Life -+48% to Cold Resistance -+48% to Lightning Resistance --9% to Chaos Resistance -Nearby Enemies have -9% to Chaos Resistance -Corrupted - - - - - Rarity: RARE -New Item -Zodiac Leather -Crafted: true -Prefix: {range:1}LocalBaseEvasionRatingAndLife4 -Prefix: {range:1}IncreasedLife12 -Prefix: {range:1}LocalIncreasedEvasionRatingPercent8 -Suffix: {range:1}LightningResist8 -Suffix: {range:1}FireResist8 -Suffix: {range:1}ColdResist8 -Quality: 20 -Sockets: G-G-G-G-G-G -LevelReq: 68 -Implicits: 2 -+1% to all maximum Resistances -{range:1}(40-50)% increased Damage -+120 to Evasion Rating -110% increased Evasion Rating -+167 to maximum Life -+48% to Fire Resistance -+48% to Cold Resistance -+48% to Lightning Resistance -Corrupted - - - - Rarity: RARE -New Item -Micro-Distillery Belt -Crafted: true -Prefix: {range:1}DelveJewelryChaosDamage1 -Prefix: {range:1}IncreasedLife9 -Prefix: {range:1}IncreasedPhysicalDamageReductionRating8_ -Suffix: {range:1}FireResist8 -Suffix: {range:1}ChaosResist6 -Suffix: {range:1}Strength10 -Quality: 0 -LevelReq: 68 -Implicits: 2 -Flasks applied to you have 20% increased Effect -Can't use Flask in Fifth Slot -+60 to Strength -30% increased Chaos Damage -+540 to Armour -+99 to maximum Life -+48% to Fire Resistance -+35% to Chaos Resistance - - - Rarity: RARE -New Item -Lapis Amulet -Elder Item -Crafted: true -Prefix: {range:1}DelveJewelryChaosDamage1 -Prefix: {range:1}AreaOfEffectUber3_ -Prefix: {range:1}IncreasedLife8 -Suffix: {range:1}ChaosNonAilmentDamageOverTimeMultiplierUber2 -Suffix: {range:1}IncreasedAttackSpeedAmuletUber1 -Suffix: {range:1}IncreasedAccuracyNew5_ -Quality: 0 -LevelReq: 65 -Implicits: 3 -{crafted}Allocates Corruption -{range:1}(8-10)% increased Attack Speed -{range:1}Malevolence has (15-20)% increased Aura Effect -+16% to Chaos Damage over Time Multiplier -30% increased Chaos Damage -13% increased Attack Speed -+480 to Accuracy Rating -+89 to maximum Life -15% increased Area of Effect -Corrupted - - - - - Rarity: MAGIC -Alchemist's Quartz Flask of Grounding -Crafted: true -Prefix: {range:0.5}FlaskEffectReducedDuration1 -Suffix: {range:0.5}FlaskRemovesShock1 -Quality: 20 -LevelReq: 27 -Implicits: 0 -Immunity to Shock during Flask effect -Removes Shock on use -25% increased effect -33% reduced Duration - - - Rarity: UNIQUE -The Writhing Jar -Hallowed Hybrid Flask -Quality: 20 -LevelReq: 60 -Implicits: 0 -{range:0.5}(75-65)% reduced Amount Recovered -Instant Recovery -2 Enemy Writhing Worms escape the Flask when used -{range:0.5}(20-10)% reduced Charges used - - - - - Rarity: RARE -New Item -Medium Cluster Jewel -Crafted: true -Prefix: {range:0.5}AfflictionNotableBrushwithDeath -Prefix: {range:0.5}AfflictionNotableExposureTherapy_ -Suffix: None -Suffix: None -Cluster Jewel Skill: affliction_chaos_damage_over_time_multiplier -Cluster Jewel Node Count: 6 -Quality: 0 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 6 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: +4% to Chaos Damage over Time Multiplier -1 Added Passive Skill is Brush with Death -1 Added Passive Skill is Exposure Therapy - - - Rarity: RARE -New Item -Medium Cluster Jewel -Crafted: true -Prefix: {range:0.5}AfflictionNotableBrushwithDeath -Prefix: {range:0.5}AfflictionNotableExposureTherapy_ -Suffix: None -Suffix: None -Cluster Jewel Skill: affliction_chaos_damage_over_time_multiplier -Cluster Jewel Node Count: 5 -Quality: 0 -LevelReq: 54 -Implicits: 3 -{crafted}Adds 5 Passive Skills -{crafted}1 Added Passive Skill is a Jewel Socket -{crafted}Added Small Passive Skills grant: +4% to Chaos Damage over Time Multiplier -1 Added Passive Skill is Brush with Death -1 Added Passive Skill is Exposure Therapy - - - Rarity: RARE -New Item -Cobalt Jewel -Crafted: true -Prefix: {range:1}PercentIncreasedLifeJewel -Prefix: {range:1}ChaosDamageJewel -Suffix: {range:1}DamageOverTimeJewel -Suffix: {range:1}JewelChaosNonAilmentDamageOverTimeMultiplier2 -Quality: 0 -LevelReq: 0 -Implicits: 0 -12% increased Damage over Time -+4% to Chaos Damage over Time Multiplier -13% increased Chaos Damage -7% increased maximum Life - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]], - output = { ["CombinedAvg"] = 104290.52274695, - ["FrenzyChargesMin"] = 0, - ["EnergyShieldOnGloves"] = 4, - ["HitChance"] = 91, - ["LightningDotEHP"] = 38406.827880512, - ["CrabBarriersMax"] = 0, - ["ShockAvoidChance"] = 100, - ["ActiveTotemLimit"] = 1, - ["AvoidColdDamageChance"] = 0, - ["PierceCount"] = 0, - ["AnyTakenReflect"] = 0, - ["InspirationCharges"] = 0, - ["FireEnergyShieldBypass"] = 0, - ["ReqInt"] = 103, - ["ProjectileNotHitChance"] = 94.125, - ["EvasionOnGloves"] = 13, - ["MaxManaLeechRate"] = 148.2, - ["PhysicalTakenReflectMult"] = 0.47138, - ["LightningLightningBaseTakenHitMult"] = 0.12432, - ["ManaOnHit"] = 33, - ["PhysicalProjectileDamageChance"] = 0, - ["ManaCost"] = 43, - ["EnergyShieldLeechInstantRate"] = 0, - ["FireMeleeDamageChance"] = 0, - ["PhysicalGuardEffectiveLife"] = 4533, - ["PhysicalAegis"] = 0, - ["EnergyShieldRegen"] = 0, - ["LightningAegis"] = 0, - ["SiphoningCharges"] = 0, - ["PhysicalTakenDotMult"] = 0.467495, - ["MainHand"] = { - ["LifeOnHit"] = 68, - ["LifeLeechInstances"] = 2.2834328989392, - ["HitChance"] = 91, - ["BrittleChanceOnCrit"] = 0, - ["ChillChanceOnHit"] = 100, - ["RuthlessBlowMultiplier"] = 1, - ["TripleDamageEffect"] = 1, - ["CritChance"] = 9.1, - ["FireMaxBase"] = 0, - ["LightningCritAverage"] = 40.1475, - ["BleedChanceOnCrit"] = 0, - ["ManaLeechInstantRate"] = 0, - ["ManaOnHitRate"] = 922.809888, - ["LifeLeechDuration"] = 0.081656348338775, - ["EnemyStunDuration"] = 0.35, - ["PreEffectiveCritChance"] = 10, - ["ShockChanceOnCrit"] = 100, - ["FireHitAverage"] = 0, - ["ColdMinBase"] = 0, - ["IgniteChance"] = 9.1, - ["IgniteChanceOnCrit"] = 100, - ["ColdCritAverage"] = 0, - ["ManaOnHit"] = 33, - ["AverageHit"] = 3729.4650776967, - ["DoubleDamageChance"] = 6, - ["EnergyShieldLeechInstantRate"] = 0, - ["CritEffect"] = 1.0455, - ["DoubleDamageChanceOnCrit"] = 0, - ["EnergyShieldLeech"] = 0.3, - ["ChaosMinBase"] = 13.12, - ["ShockChanceOnHit"] = 0, - ["ChaosHitAverage"] = 3281.33388, - ["ChaosCritAverage"] = 4922.00082, - ["EnemyStunThresholdMod"] = 1, - ["RuthlessBlowEffect"] = 1, - ["LightningMinBase"] = 0.82, - ["Accuracy"] = 1786.47, - ["ManaLeech"] = 0, - ["SapChanceOnCrit"] = 0, - ["ChillChance"] = 100, - ["RuthlessBlowMaxCount"] = 0, - ["ShockEffectModDisplay"] = 0, - ["AverageDamage"] = 3393.813220704, - ["Speed"] = 6.14592, - ["FistOfWarAilmentEffect"] = 1, - ["LifeOnHitRate"] = 1901.547648, - ["ShockDurationMod"] = 1, - ["BonusCritDotMultiplier"] = 0, - ["TripleDamageChance"] = 0, - ["ShockChance"] = 9.1, - ["DoubleDamageEffect"] = 1.06, - ["BrittleChanceOnHit"] = 0, - ["IgniteFireMin"] = 0, - ["allMult"] = 1.06, - ["ImpaleChance"] = 0, - ["PhysicalHitAverage"] = 255.24701948396, - ["LifeLeech"] = 7.4029645403934, - ["RuthlessBlowChance"] = 0, - ["IgniteFireMax"] = 0, - ["ScorchChanceOnHit"] = 0, - ["KnockbackChanceOnHit"] = 0, - ["FireCritAverage"] = 0, - ["FreezeChanceOnHit"] = 0, - ["ShockEffectMod"] = 1, - ["ChaosPoisonChance"] = 0, - ["PoisonChanceOnHit"] = 0, - ["BleedChanceOnHit"] = 0, - ["FreezeChanceOnCrit"] = 100, - ["PhysicalMaxBase"] = 106.1, - ["KnockbackChanceOnCrit"] = 0, - ["PhysicalCritAverage"] = 426.68305434902, - ["FreezeChance"] = 9.1, - ["ScorchChanceOnCrit"] = 0, - ["TotalMin"] = 2356.1509391565, - ["TotalDPS"] = 104290.52274695, - ["ChillChanceOnCrit"] = 100, - ["EnergyShieldLeechInstances"] = 139.81968, - ["Time"] = 0.16270956992606, - ["EnergyShieldOnHitRate"] = 0, - ["IgniteChanceOnHit"] = 0, - ["ScaledDamageEffect"] = 1.06, - ["ManaLeechInstances"] = 0, - ["LightningMaxBase"] = 10.66, - ["ChaosMaxBase"] = 16.4, - ["EnergyShieldLeechDuration"] = 5, - ["FireMinBase"] = 0, - ["PhysicalMinBase"] = 48.484, - ["TripleDamageChanceOnCrit"] = 0, - ["ColdMaxBase"] = 0, - ["CritMultiplier"] = 1.5, - ["EnergyShieldOnHit"] = 0, - ["EnergyShieldLeechInstant"] = 0, - ["KnockbackChance"] = 0, - ["ManaLeechInstant"] = 0, - ["impaleStoredHitAvg"] = 545.692452, - ["SapChanceOnHit"] = 0, - ["ColdHitAverage"] = 0, - ["LifeLeechInstantRate"] = 0, - ["LifeLeechInstant"] = 0, - ["LightningHitAverage"] = 26.765, - ["PoisonChanceOnCrit"] = 0, - ["FistOfWarHitEffect"] = 1, - ["TotalMax"] = 4770.5408598114, - ["ManaLeechDuration"] = 0, - -}, - ["ChaosDotEHP"] = 5946.4777646596, - ["ReqStr"] = 114, - ["LightningGuardAbsorbRate"] = 0, - ["MissingLightningResist"] = 0, - ["AverageBlockChance"] = 0, - ["LightningGuardEffectivePool"] = 0, - ["MaxEnergyShieldLeechRate"] = 0.3, - ["EnergyShieldLeechInstanceRate"] = 0.06, - ["PhysicalNumberOfHits"] = 33.420365535248, - ["ChaosTakenHit"] = 0.665, - ["FireFireBaseTakenHitMult"] = 0.12432, - ["CurrentShock"] = 0, - ["PhysicalResist"] = 5, - ["ColdSpellProjectileDamageChance"] = 0, - ["FireResistOver75"] = 1, - ["ShockEffectMod"] = 1, - ["ColdResist"] = 76, - ["SpellProjectileBlockChance"] = 0, - ["ColdTakenReflectMult"] = 0.12432, - ["Dex"] = 262, - ["TheoreticalOffensiveWarcryEffect"] = 1, - ["PowerChargesMax"] = 3, - ["Spec:ArmourInc"] = 24, - ["PhysicalDamageReduction"] = 9, - ["WithDotDPS"] = 22450418.026155, - ["Str"] = 124, - ["FireProjectileDamageChance"] = 0, - ["LightningSpellProjectileDamageChance"] = 10, - ["AnyGuard"] = false, - ["PhysicalTakenReflect"] = 0.518, - ["Gear:Armour"] = 218, - ["EnergyShieldLeechGainRate"] = 0.3, - ["SpellBlockChance"] = 0, - ["PhysicalMindOverMatter"] = 0, - ["LightningManaEffectiveLife"] = 4533, - ["ManaLeechInstances"] = 0, - ["LightningResistOver75"] = 1, - ["ColdTakenReflect"] = 0.518, - ["SpellBlockChanceMax"] = 75, - ["ChaosEnergyShieldBypass"] = 100, - ["ManaOnHitRate"] = 922.809888, - ["ChaosMeleeDamageChance"] = 0, - ["EnergyShieldRechargeDelay"] = 2, - ["ChaosDotEffMult"] = 1.5842, - ["ChallengerCharges"] = 0, - ["Int"] = 104, - ["ColdEnergyShieldBypass"] = 0, - ["FireResistTotal"] = 77, - ["FreezeAvoidChance"] = 0, - ["ChaosTakenDotMult"] = 0.7623, - ["AttackDodgeChance"] = 75, - ["ReqDex"] = 197, - ["ColdTakenHit"] = 0.518, - ["LightningProjectileDamageChance"] = 10, - ["ChaosMindOverMatter"] = 0, - ["Armour"] = 470, - ["LifeOnBlock"] = 0, - ["LightningResistTotal"] = 77, - ["InteruptStunAvoidChance"] = 0, - ["AverageDamage"] = 3393.813220704, - ["ColdTakenHitMult"] = 0.12432, - ["PowerChargesMin"] = 0, - ["Devotion"] = 0, - ["MissingColdResist"] = 0, - ["ChaosGuardAbsorbRate"] = 0, - ["FireSpellDamageChance"] = 0, - ["ColdGuardAbsorbRate"] = 0, - ["DoubleArmourChance"] = 0, - ["FireDotEHP"] = 38406.827880512, - ["RemovableFrenzyCharges"] = 4, - ["ChaosAegis"] = 0, - ["PhysicalTotalPool"] = 4536, - ["BlockDuration"] = 0.35, - ["ManaLeechPerHit"] = 0, - ["MissingChaosResist"] = 97, - ["TotemsSummoned"] = 1, - ["FireTakenHit"] = 0.518, - ["BleedAvoidChance"] = 0, - ["AverageNotHitChance"] = 76.0625, - ["EnergyShieldOnBlock"] = 0, - ["StunAvoidChance"] = 0, - ["ColdResistOverCap"] = 1, - ["Life"] = 4533, - ["DurationMod"] = 3.14, - ["EnduranceCharges"] = 0, - ["ChainRemaining"] = 0, - ["ColdTakenDotMult"] = 0.118104, - ["ChaosAverageDamageChance"] = 0, - ["ChaosMaximumHitTaken"] = 5633.5052507301, - ["PhysicalTotalEHP"] = 41207.310704961, - ["ColdMindOverMatter"] = 0, - ["FireAverageDamageChance"] = 0, - ["ChallengerChargesMax"] = 0, - ["EnergyShieldLeechInstant"] = 0, - ["SpellProjectileNotHitChance"] = 58, - ["LifeRegenPercent"] = 10.4, - ["LightningResist"] = 76, - ["PhysicalSpellProjectileDamageChance"] = 0, - ["LifeLeechGainRate"] = 2108.5636746178, - ["SpellNotHitChance"] = 58, - ["LifeReservedPercent"] = 0, - ["PhysicalMaximumHitTaken"] = 9622.8096228096, - ["ManaUnreservedPercent"] = 19.298245614035, - ["ProjectileEvadeChance"] = 76.5, - ["MaxEnergyShieldLeechInstance"] = 0.3, - ["HexDoomLimit"] = 30, - ["PhysicalSpellDamageChance"] = 0, - ["EnergyShieldLeechInstances"] = 139.81968, - ["AvoidPhysicalDamageChance"] = 0, - ["ProjectileCount"] = 5, - ["ChaosResistOver75"] = 0, - ["EnergyShieldRecharge"] = 1, - ["LightningResistOverCap"] = 1, - ["Spec:EnergyShieldInc"] = 0, - ["Spec:EvasionInc"] = 157, - ["TotalDotInstance"] = 231587.82137532, - ["ManaReservedPercent"] = 80.701754385965, - ["Spec:ManaInc"] = 8, - ["Spec:LifeInc"] = 86, - ["LightningTakenReflectMult"] = 0.12432, - ["AvoidChaosDamageChance"] = 0, - ["ExtraPoints"] = 2, - ["TotalDotDPS"] = 22346127.503408, - ["ManaLeechInstantRate"] = 0, - ["WithIgniteDPS"] = 104290.52274695, - ["ProjectileSpeedMod"] = 1.4, - ["CombinedDPS"] = 22450418.026155, - ["ColdDotEHP"] = 38406.827880512, - ["TotalDot"] = 22346127.503408, - ["PierceCountString"] = "Cannot pierce", - ["ImpaleChance"] = 0, - ["EnergyShieldLeechDuration"] = 5, - ["ChainMaxString"] = 0, - ["InspirationChargesMax"] = 5, - ["ChaosResist"] = -21, - ["FreezeChance"] = 9.1, - ["EffectiveMovementSpeedMod"] = 2.316, - ["ShockChance"] = 9.1, - ["ManaUnreserved"] = 143, - ["ColdManaEffectiveLife"] = 4533, - ["FireTakenReflect"] = 0.518, - ["LifeLeechPerHit"] = 7.4029645403934, - ["IgniteChance"] = 9.1, - ["LifeRecoveryRateMod"] = 1, - ["PhysicalGuardAbsorbRate"] = 0, - ["LifeRegen"] = 471.432, - ["MaxLifeLeechInstance"] = 453.3, - ["LifeOnHitRate"] = 1901.547648, - ["ColdMeleeDamageChance"] = 0, - ["ActiveGolemLimit"] = 1, - ["LightningTakenDotMult"] = 0.118104, - ["LifeUnreservedPercent"] = 100, - ["CritIgniteDotMulti"] = 3.09, - ["OffensiveWarcryEffect"] = 1, - ["ManaLeechInstanceRate"] = 14.82, - ["ManaLeechGainRate"] = 922.809888, - ["ManaLeechRate"] = 0, - ["IgniteDotMulti"] = 2.59, - ["BlockChanceMax"] = 75, - ["EnergyShieldLeechPerHit"] = 0.3, - ["LightRadiusMod"] = 1, - ["EnergyShieldLeechRate"] = 0.3, - ["LifeLeechRate"] = 207.01602661783, - ["ManaRegen"] = 65.6, - ["ChaosChaosBaseTakenHitMult"] = 0.80465, - ["GhostShrouds"] = 0, - ["EnergyShieldOnHitRate"] = 0, - ["EnergyShieldOnHit"] = 0, - ["LifeOnHit"] = 68, - ["WithBleedDPS"] = 104290.52274695, - ["LightningMeleeDamageChance"] = 10, - ["AvoidLightningDamageChance"] = 10, - ["TotalAttr"] = 490, - ["ColdColdBaseTakenHitMult"] = 0.12432, - ["LightningGuardEffectiveLife"] = 4533, - ["AvoidFireDamageChance"] = 0, - ["ChaosSpellProjectileDamageChance"] = 0, - ["FrenzyCharges"] = 4, - ["TotalCharges"] = 4, - ["ChaosTakenReflectMult"] = 0.80465, - ["LifeLeechInstantRate"] = 0, - ["LifeReserved"] = 0, - ["AreaOfEffectMod"] = 1.5, - ["LifeLeechInstant"] = 0, - ["FireSpellProjectileDamageChance"] = 0, - ["LifeLeechInstances"] = 2.2834328989392, - ["LifeLeechDuration"] = 0.081656348338775, - ["TotalDPS"] = 104290.52274695, - ["PhysicalDotEHP"] = 9702.7775698136, - ["EnemyCurseLimit"] = 3, - ["CritChance"] = 9.1, - ["LightningEnergyShieldBypass"] = 0, - ["PreEffectiveCritChance"] = 10, - ["FistOfWarCooldown"] = 0, - ["ColdTotalPool"] = 4536, - ["LightningMindOverMatter"] = 0, - ["ExertedAttackUptimeRatio"] = 0, - ["AilmentWarcryEffect"] = 1, - ["RallyingHitEffect"] = 1, - ["SeismicHitEffect"] = 1, - ["TheoreticalMaxOffensiveWarcryEffect"] = 1, - ["MaxOffensiveWarcryEffect"] = 1, - ["Time"] = 0.16270956992606, - ["PhysicalResistWhenHit"] = 5, - ["Speed"] = 6.14592, - ["OffHand"] = { - -}, - ["BlitzChargesMax"] = 0, - ["Duration"] = 3.14, - ["LightningAverageDamageChance"] = 10, - ["AreaOfEffectRadius"] = 21, - ["WithPoisonDPS"] = 104290.52274695, - ["ForkCountString"] = "0", - ["ChaosGuardEffectiveLife"] = 4533, - ["Chain"] = 0, - ["MovementSpeedMod"] = 1.93, - ["FireTotalPool"] = 4536, - ["ColdProjectileDamageChance"] = 0, - ["ChainMax"] = 0, - ["LowestAttribute"] = 104, - ["EnduranceChargesMax"] = 3, - ["ActionSpeedMod"] = 1.2, - ["ChaosTotalEHP"] = 25754.569190601, - ["MeleeEvadeChance"] = 76.5, - ["ChaosNumberOfHits"] = 20.88772845953, - ["ProjectileBlockChance"] = 0, - ["FireTotalEHP"] = 154527.4151436, - ["RemovableEnduranceCharges"] = 0, - ["FireNumberOfHits"] = 125.32637075718, - ["ColdTotalEHP"] = 154527.4151436, - ["ChaosGuardEffectivePool"] = 0, - ["ColdNumberOfHits"] = 125.32637075718, - ["IgniteAvoidChance"] = 0, - ["ChaosTotalPool"] = 4533, - ["FrenzyChargesMax"] = 4, - ["Gear:EnergyShield"] = 4, - ["ColdMaximumHitTaken"] = 36486.486486486, - ["EvasionOnHelmet"] = 1045, - ["LightningMaximumHitTaken"] = 36486.486486486, - ["FireResistOverCap"] = 1, - ["MaximumShock"] = 50, - ["LightningTakenHitMult"] = 0.12432, - ["StunDuration"] = 0.35, - ["PhysicalMeleeDamageChance"] = 0, - ["ShieldBlockChance"] = 0, - ["AnyMindOverMatter"] = false, - ["ColdResistTotal"] = 77, - ["LightningSpellDamageChance"] = 10, - ["EnergyShield"] = 3, - ["EnergyShieldRecoveryRateMod"] = 1, - ["LightningTakenReflect"] = 0.518, - ["PhysicalAverageDamageChance"] = 0, - ["SpellDodgeChance"] = 58, - ["LowestOfArmourAndEvasion"] = 470, - ["ManaOnBlock"] = 0, - ["BlockEffect"] = 100, - ["FireMindOverMatter"] = 0, - ["FireGuardEffectiveLife"] = 4533, - ["EnduranceChargesMin"] = 0, - ["FireGuardEffectivePool"] = 0, - ["ManaRecoveryRateMod"] = 1, - ["EvadeChance"] = 76.5, - ["LifeLeechInstanceRate"] = 90.66, - ["ArmourOnBoots"] = 218, - ["EnergyShieldRechargeAppliesToEnergyShield"] = true, - ["BlitzCharges"] = 0, - ["SiphoningChargesMax"] = 0, - ["ColdAverageDamageChance"] = 0, - ["PhysicalEnergyShieldBypass"] = 0, - ["ChaosTakenHitMult"] = 0.80465, - ["PoisonAvoidChance"] = 0, - ["AnyAegis"] = false, - ["LightningTotalEHP"] = 171697.12793734, - ["ChaosSpellDamageChance"] = 0, - ["ManaLeechDuration"] = 0, - ["FireResist"] = 76, - ["CrabBarriers"] = 0, - ["LifeUnreserved"] = 4533, - ["MaxLifeLeechRate"] = 906.6, - ["EnergyShieldRegenPercent"] = 0, - ["BlockChance"] = 0, - ["FireGuardAbsorbRate"] = 0, - ["DamageReductionMax"] = 90, - ["ChaosManaEffectiveLife"] = 4533, - ["PhysicalTakenHit"] = 0.518, - ["PowerCharges"] = 0, - ["EvasionOnBody Armour"] = 2240, - ["FireAegis"] = 0, - ["PhysicalGuardEffectivePool"] = 0, - ["Evasion"] = 16521, - ["Gear:Evasion"] = 3298, - ["Mana"] = 741, - ["CritExtraDamageReduction"] = 0, - ["AvoidProjectilesChance"] = 0, - ["ColdGuardEffectiveLife"] = 4533, - ["ColdSpellDamageChance"] = 0, - ["ShockDurationMod"] = 1, - ["FireTakenHitMult"] = 0.12432, - ["ColdAegis"] = 0, - ["ManaRegenInc"] = 60, - ["ChaosTakenReflect"] = 0.665, - ["ColdGuardEffectivePool"] = 0, - ["FireManaEffectiveLife"] = 4533, - ["PhysicalPhysicalBaseTakenHitMult"] = 0.47138, - ["ColdResistOver75"] = 1, - ["ChaosResistOverCap"] = 0, - ["BlindAvoidChance"] = 0, - ["FireMaximumHitTaken"] = 36486.486486486, - ["WarcryPower"] = 20, - ["ChillAvoidChance"] = 0, - ["LightningTotalPool"] = 4536, - ["RemovablePowerCharges"] = 0, - ["dontSplitEvade"] = true, - ["LightningNumberOfHits"] = 139.25152306353, - ["CritMultiplier"] = 1.5, - ["ManaReserved"] = 598, - ["ChaosResistTotal"] = -21, - ["PhysicalTakenHitMult"] = 0.47138, - ["FireTakenReflectMult"] = 0.12432, - ["AnyBypass"] = false, - ["MaxManaLeechInstance"] = 74.1, - ["MissingFireResist"] = 0, - ["MeleeNotHitChance"] = 94.125, - ["ManaLeechInstant"] = 0, - ["PhysicalManaEffectiveLife"] = 4533, - ["ChaosProjectileDamageChance"] = 0, - ["FireTakenDotMult"] = 0.118104, - ["LightningTakenHit"] = 0.518, -} -} \ No newline at end of file diff --git a/spec/TestBuilds/3.13/OccVortex.lua b/spec/TestBuilds/3.13/OccVortex.lua deleted file mode 100644 index 95d9fc47..00000000 --- a/spec/TestBuilds/3.13/OccVortex.lua +++ /dev/null @@ -1,1016 +0,0 @@ -return { - xml = [[ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https://www.pathofexile.com/passive-skill-tree/AAAABAMBABzcEFiexAj0tzCvm7zq73x-WXaCwGaYrTrhj6Yi9LiT74hUR-_roS8TbR9BBLM9X1VLjDbjVrVISVGRB0J618-VLhQJvopFnX_Gl_QaOIKbBAekBQ18ug4RLTLRK5ph4jwFUrJd8lJTpldN44IQ6-6TJ0Srpr4igWpDogA1kvDVbAsG57c-TC0snDD4gsfwH9Wm0eR8g1ZIJohMs0mxaPKP-o48Bx6PGqcIl5XQ0FXGg9vyRY2Crv862KjqKPrbeg5IEQ86WFZKrJj-jxdU_goRlvnokFX5N2nYbRl88N-wmFNTUtAf2CRVrprgU9RFR58BJy9XyX6hyAxBh56hJpV6cNi9 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Rarity: RARE -Loath Sanctuary -Vaal Spirit Shield -Unique ID: fc24691eb70b5a54708e71b8142ebbbc86143ec938445222927b525295777c27 -Item Level: 83 -Quality: 0 -Sockets: B-B-B -LevelReq: 70 -Implicits: 1 -9% increased Spell Damage -+54 to Intelligence -30% increased Energy Shield -+87 to maximum Life -+1 to Level of all Cold Spell Skill Gems -+11% to all Elemental Resistances -+43% to Cold Resistance -Corrupted - - - Rarity: RARE -Apocalypse Noose -Citrine Amulet -Unique ID: f6eb3e5726a37508693267904e020215c25f9267e1fe4df45f2455e2220808c9 -Item Level: 83 -LevelReq: 59 -Implicits: 2 -{crafted}Allocates Prodigal Perfection -+16 to Strength and Dexterity -+43 to Strength -+44 to maximum Energy Shield -+9% to all Elemental Resistances -+11% to Fire Resistance -{crafted}+46 to maximum Life - - - Rarity: RARE -Maelstrom Cry -Imbued Wand -Unique ID: ced098a69068af80586640953702e39c51e8ab027e80b7b3a9097b446b93cc06 -Item Level: 71 -Quality: 0 -Sockets: B-B-B -LevelReq: 70 -Implicits: 1 -37% increased Spell Damage -+9% to Damage over Time Multiplier -Adds 8 to 12 Fire Damage to Spells -5% increased Cast Speed -+1 to Level of all Cold Spell Skill Gems -+6 Life gained on Kill -{crafted}+19% to Cold Damage over Time Multiplier - - - Rarity: RARE -Kraken Snare -Studded Belt -Unique ID: 2165cbcab4ec4a110e9cbec3c6d71e96767fdc39acf5849465e0623b95fb4032 -Item Level: 75 -LevelReq: 64 -Implicits: 1 -23% increased Stun Duration on Enemies -+317 to Armour -+46 to maximum Energy Shield -+92 to maximum Life -+29% to Chaos Resistance -{crafted}+14% to Lightning and Chaos Resistances - - - Rarity: RARE -Hate Band -Paua Ring -Unique ID: 46e05e600e119a447a18a720e9e49cf1132316c9125b7ad434971194b11d7182 -Item Level: 72 -LevelReq: 64 -Implicits: 1 -+29 to maximum Mana -+14 to all Attributes -+68 to Evasion Rating -+31 to maximum Energy Shield -+78 to maximum Life -+41% to Lightning Resistance -{crafted}+13% to Fire and Chaos Resistances - - - Rarity: RARE -Gloom Hold -Coral Ring -Unique ID: efc86ac7b5df717bfdbaea47dd45f77c40526efae46a3900b62c776bb4d6e160 -Item Level: 63 -LevelReq: 64 -Implicits: 1 -+30 to maximum Life -+7 to maximum Energy Shield -+78 to maximum Life -Regenerate 13.4 Life per second -+23 to maximum Mana -+23% to Cold Resistance -{crafted}+15% to Fire and Chaos Resistances - - - Rarity: RARE -Woe Caress -Fingerless Silk Gloves -Unique ID: 281a01ce242357b1e05cc57bfbee1cbb543a49f582b2aa4b4b432efcb4506270 -Item Level: 78 -Quality: 0 -Sockets: R-G-B-B -LevelReq: 70 -Implicits: 1 -16% increased Spell Damage -Adds 1 to 23 Lightning Damage to Attacks -+92 to maximum Life -+24% to Fire Resistance -+2 Life gained for each Enemy hit by your Attacks -{crafted}+15% to Fire and Chaos Resistances - - - Rarity: RARE -Invasion Road -Hydrascale Boots -Unique ID: 7fca9e5aeb030c8de363c489795235118fa08ffd60e0b0805509be8864893d09 -Item Level: 80 -Quality: 20 -Sockets: G-R-R-G -LevelReq: 70 -Implicits: 0 -+11 to Dexterity -47% increased Armour and Evasion -+88 to maximum Life -+27% to Chaos Resistance -30% increased Movement Speed -{crafted}+15% to Fire and Chaos Resistances - - - Rarity: RARE -Gale Ward -Quilted Jacket -Unique ID: dafc394c025c87f7df806c8c92c938c8125b923c3db138e39f82e8503e932a50 -Item Level: 61 -Quality: 20 -Sockets: G-B-G-B-B-B -LevelReq: 72 -Implicits: 0 -32% reduced Attribute Requirements -+124 to maximum Life -+58 to maximum Mana -+33% to Cold Resistance -+40% to Lightning Resistance -Reflects 10 Physical Damage to Melee Attackers - - - Rarity: UNIQUE -Heretic's Veil -Deicide Mask -Unique ID: 9441019ae9c688a0c2be333c1c14d036ee380552ff7b1aa9302da663729aa481 -Item Level: 70 -Quality: 20 -Sockets: R-B-G-B -LevelReq: 67 -Implicits: 1 -{crafted}24% increased Earthquake Area of Effect -+1 to Level of Socketed Curse Gems -Socketed Gems are Supported by Level 22 Blasphemy -Socketed Curse Gems have 12% reduced Mana Reservation -110% increased Evasion and Energy Shield -+44 to maximum Energy Shield - - - Rarity: MAGIC -Perpetual Quicksilver Flask of Staunching -Unique ID: eaed046cc0971c1090c2146e62ef5b9443b8cbab6b7adceaf0a5e6d5dea722c7 -Item Level: 3 -Quality: 0 -LevelReq: 6 -Implicits: 0 -31% increased Charge Recovery -Immunity to Bleeding during Flask effect -Removes Bleeding on use - - - Rarity: MAGIC -Chemist's Granite Flask of Heat -Unique ID: 9267e88908433221dd05de9fcc775d17d157db91cd8333aa36bca2cd2d7bdaa5 -Item Level: 54 -Quality: 20 -LevelReq: 27 -Implicits: 0 -21% reduced Charges used -Immunity to Freeze and Chill during Flask effect -Removes Freeze and Chill on use - - - Rarity: MAGIC -Perpetual Silver Flask of Curing -Unique ID: d5deeb09581ef0ce0d16f4a50014148dde90a9290c5de94d113bfcb3133f7293 -Item Level: 31 -Quality: 0 -LevelReq: 22 -Implicits: 0 -25% increased Charge Recovery -Immune to Poison during Flask Effect -Removes Poison on use - - - Rarity: MAGIC -Bubbling Eternal Life Flask of Acceleration -Unique ID: 2d887378e1162109008ca16d742df9828074f9901adfd8ccd69503c1aa36d391 -Item Level: 65 -Quality: 0 -LevelReq: 65 -Implicits: 0 -50% reduced Amount Recovered -135% increased Recovery rate -50% of Recovery applied Instantly -11% increased Attack Speed during Flask effect - - - Rarity: MAGIC -Enduring Divine Mana Flask of Warding -Unique ID: 02765758e562eb2fad64ec7f02e23d8a2d911bed4a7c72d38e17ec0cc8b20253 -Item Level: 73 -Quality: 20 -LevelReq: 60 -Implicits: 0 -30% reduced Amount Recovered -Immune to Curses during Flask effect -Removes Curses on use -30% reduced Duration -Flask Effect is not removed at Full Mana -Flask Effect does not Queue - - - Rarity: RARE -Cataclysm Stone -Cobalt Jewel -Unique ID: 949f96690b56595beceb512b5d9977d4fffd742690bc631defc0187caa6d8640 -Item Level: 72 -Implicits: 0 -+4% to Cold Damage over Time Multiplier -7% increased maximum Life -3% reduced Mana Cost of Skills - - - Rarity: RARE -Pandemonium Joy -Viridian Jewel -Unique ID: 8ff6536191b464f5299f5cb13f9dd5c072df47205015bd9970562bfbd2a6ec00 -Item Level: 71 -Implicits: 1 -1% of Damage taken Recouped as Mana -+3% to Cold Damage over Time Multiplier -6% increased maximum Life -13% increased Mana Regeneration Rate -+10% to all Elemental Resistances - - - Rarity: RARE -Honour Vessel -Cobalt Jewel -Unique ID: effce7692e503b9cb919ee1cc722ce729e5a4ef09b6c309c8722b736f9cc7b1a -Item Level: 68 -Implicits: 0 -+4% to Cold Damage over Time Multiplier -5% increased Cast Speed with Lightning Skills -5% increased maximum Life - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -]], - output = { - Accuracy = 466, - ActionSpeedMod = 1, - AilmentWarcryEffect = 1, - AnyAegis = false, - AnyBypass = false, - AnyGuard = false, - AnyMindOverMatter = false, - AnyTakenReflect = 0, - AreaOfEffectMod = 1.16, - AreaOfEffectRadius = 21, - Armour = 4193, - ArmourOnBoots = 177, - AttackDodgeChance = 0, - AverageBlockChance = 12, - AverageDamage = 73773.92, - AverageHit = 73773.92, - AverageNotHitChance = 5.5, - AvoidChaosDamageChance = 0, - AvoidColdDamageChance = 0, - AvoidFireDamageChance = 0, - AvoidLightningDamageChance = 0, - AvoidPhysicalDamageChance = 0, - AvoidProjectilesChance = 0, - BleedAvoidChance = 100, - BleedChanceOnCrit = 0, - BleedChanceOnHit = 0, - BlindAvoidChance = 0, - BlitzCharges = 0, - BlitzChargesMax = 0, - BlockChance = 24, - BlockChanceMax = 75, - BlockDuration = 0.35, - BlockEffect = 100, - BonusCritDotMultiplier = 0, - BrittleChanceOnCrit = 0, - BrittleChanceOnHit = 0, - ChallengerCharges = 0, - ChallengerChargesMax = 0, - ChaosAegis = 0, - ChaosAverageDamageChance = 12, - ChaosChaosBaseTakenHitMult = 0.256, - ChaosCritAverage = 0, - ChaosDotEHP = 21025, - ChaosEnergyShieldBypass = 100, - ChaosGuardAbsorbRate = 0, - ChaosGuardEffectiveLife = 6728, - ChaosGuardEffectivePool = 0, - ChaosHitAverage = 0, - ChaosManaEffectiveLife = 6728, - ChaosMaxBase = 0, - ChaosMaximumHitTaken = 26281.25, - ChaosMeleeDamageChance = 24, - ChaosMinBase = 0, - ChaosMindOverMatter = 0, - ChaosNumberOfHits = 26.455026455026, - ChaosPoisonChance = 0, - ChaosProjectileDamageChance = 24, - ChaosResist = 68, - ChaosResistOver75 = 0, - ChaosResistOverCap = 0, - ChaosResistTotal = 68, - ChaosSpellDamageChance = 0, - ChaosSpellProjectileDamageChance = 0, - ChaosTakenDotMult = 0.32, - ChaosTakenHit = 0.8, - ChaosTakenHitMult = 0.256, - ChaosTakenReflect = 0.8, - ChaosTakenReflectMult = 0.256, - ChaosTotalEHP = 32619.047619048, - ChaosTotalPool = 6728, - ChillAvoidChance = 100, - ChillChance = 100, - ChillChanceOnCrit = 100, - ChillChanceOnHit = 100, - ChillDurationMod = 1.55, - ChillEffectMod = 100, - ChillEffectModDisplay = 100, - ChillSourceEffect = 20, - ColdAegis = 0, - ColdAverageDamageChance = 12, - ColdColdBaseTakenHitMult = 0.2, - ColdCritAverage = 73449.42, - ColdDotEHP = 33548, - ColdDotEffMult = 1.595, - ColdEnergyShieldBypass = 0, - ColdGuardAbsorbRate = 0, - ColdGuardEffectiveLife = 6728, - ColdGuardEffectivePool = 0, - ColdHitAverage = 73449.42, - ColdManaEffectiveLife = 6728, - ColdMaxBase = 1105, - ColdMaximumHitTaken = 41935, - ColdMeleeDamageChance = 24, - ColdMinBase = 737, - ColdMindOverMatter = 0, - ColdNumberOfHits = 42.087542087542, - ColdProjectileDamageChance = 24, - ColdResist = 75, - ColdResistOver75 = 0, - ColdResistOverCap = 44.418, - ColdResistTotal = 119.418, - ColdSpellDamageChance = 0, - ColdSpellProjectileDamageChance = 0, - ColdTakenDotMult = 0.25, - ColdTakenHit = 0.8, - ColdTakenHitMult = 0.2, - ColdTakenReflect = 0.8, - ColdTakenReflectMult = 0.2, - ColdTotalEHP = 51893.939393939, - ColdTotalPool = 8387, - CombinedAvg = 0, - CombinedDPS = 567004.71046343, - Cooldown = 0.96666666666667, - CrabBarriers = 0, - CrabBarriersMax = 0, - CritChance = 2.6, - CritEffect = 1, - CritExtraDamageReduction = 0, - CritIgniteDotMulti = 1.19, - CritMultiplier = 1, - CurrentShock = 0, - DamageReductionMax = 90, - Devotion = 0, - Dex = 135, - DoubleArmourChance = 0, - DoubleDamageChance = 0, - DoubleDamageChanceOnCrit = 0, - DoubleDamageEffect = 1, - Duration = 3.33, - DurationMod = 1.11, - EffectiveMovementSpeedMod = 1.89, - EnduranceCharges = 3, - EnduranceChargesMax = 3, - EnduranceChargesMin = 0, - EnemyCurseLimit = 2, - EnemyStunDuration = 0.4305, - EnemyStunThresholdMod = 1, - EnergyShield = 1659, - EnergyShieldLeech = 146.89884, - EnergyShieldLeechDuration = 4.4273309222423, - EnergyShieldLeechGainRate = 0, - EnergyShieldLeechInstanceRate = 33.18, - EnergyShieldLeechInstances = 0, - EnergyShieldLeechInstant = 0, - EnergyShieldLeechInstantRate = 0, - EnergyShieldLeechPerHit = 146.89884, - EnergyShieldLeechRate = 0, - EnergyShieldOnBlock = 0, - ["EnergyShieldOnBody Armour"] = 53, - EnergyShieldOnGloves = 43, - EnergyShieldOnHelmet = 205, - EnergyShieldOnHit = 0, - EnergyShieldOnHitRate = 0, - ["EnergyShieldOnWeapon 2"] = 69, - EnergyShieldRecharge = 365, - EnergyShieldRechargeAppliesToEnergyShield = true, - EnergyShieldRechargeDelay = 2, - EnergyShieldRecoveryRateMod = 1, - EnergyShieldRegen = 0, - EnergyShieldRegenPercent = 0, - EvadeChance = 11, - Evasion = 1971, - ["EvasionOnBody Armour"] = 265, - EvasionOnBoots = 177, - EvasionOnHelmet = 437, - ExertedAttackUptimeRatio = 0, - ExtraPoints = 2, - FireAegis = 0, - FireAverageDamageChance = 12, - FireCritAverage = 324.5, - FireDotEHP = 33548, - FireEnergyShieldBypass = 0, - FireFireBaseTakenHitMult = 0.2, - FireGuardAbsorbRate = 0, - FireGuardEffectiveLife = 6728, - FireGuardEffectivePool = 0, - FireHitAverage = 324.5, - FireManaEffectiveLife = 6728, - FireMaxBase = 12, - FireMaximumHitTaken = 41935, - FireMeleeDamageChance = 24, - FireMinBase = 8, - FireMindOverMatter = 0, - FireNumberOfHits = 42.087542087542, - FireProjectileDamageChance = 24, - FireResist = 75, - FireResistOver75 = 0, - FireResistOverCap = 23.418, - FireResistTotal = 98.418, - FireSpellDamageChance = 0, - FireSpellProjectileDamageChance = 0, - FireTakenDotMult = 0.25, - FireTakenHit = 0.8, - FireTakenHitMult = 0.2, - FireTakenReflect = 0.8, - FireTakenReflectMult = 0.2, - FireTotalEHP = 51893.939393939, - FireTotalPool = 8387, - FistOfWarAilmentEffect = 1, - FistOfWarCooldown = 0, - FistOfWarHitEffect = 1, - FreezeAvoidChance = 100, - FreezeChance = 61.04, - FreezeChanceOnCrit = 100, - FreezeChanceOnHit = 60, - FreezeDurationMod = 1.6, - FrenzyCharges = 0, - FrenzyChargesMax = 3, - FrenzyChargesMin = 0, - ["Gear:Armour"] = 177, - ["Gear:EnergyShield"] = 370, - ["Gear:Evasion"] = 879, - GhostShrouds = 0, - HitChance = 100, - IgniteAvoidChance = 10, - IgniteChance = 12.34, - IgniteChanceOnCrit = 100, - IgniteChanceOnHit = 10, - IgniteDPS = 79.1945, - IgniteDamage = 358.26083333333, - IgniteDotMulti = 1.19, - IgniteDuration = 4.5238095238095, - IgniteEffMult = 1.1, - IgniteFireMax = 145, - IgniteFireMin = 97, - ImpaleChance = 0, - InspirationCharges = 0, - InspirationChargesMax = 5, - Int = 430, - InteruptStunAvoidChance = 0, - KnockbackChance = 0, - KnockbackChanceOnCrit = 0, - KnockbackChanceOnHit = 0, - Life = 6728, - LifeLeech = 0, - LifeLeechDuration = 0, - LifeLeechGainRate = 0, - LifeLeechInstanceRate = 134.56, - LifeLeechInstances = 0, - LifeLeechInstant = 0, - LifeLeechInstantRate = 0, - LifeLeechPerHit = 0, - LifeLeechRate = 0, - LifeOnBlock = 0, - LifeOnHit = 0, - LifeOnHitRate = 0, - LifeRecoveryRateMod = 1, - LifeRegen = 329.616, - LifeRegenPercent = 4.9, - LifeReserved = 0, - LifeReservedPercent = 0, - LifeUnreserved = 6728, - LifeUnreservedPercent = 100, - LightRadiusMod = 1.1, - LightningAegis = 0, - LightningAverageDamageChance = 12, - LightningCritAverage = 0, - LightningDotEHP = 33548, - LightningEnergyShieldBypass = 0, - LightningGuardAbsorbRate = 0, - LightningGuardEffectiveLife = 6728, - LightningGuardEffectivePool = 0, - LightningHitAverage = 0, - LightningLightningBaseTakenHitMult = 0.2, - LightningManaEffectiveLife = 6728, - LightningMaxBase = 0, - LightningMaximumHitTaken = 41935, - LightningMeleeDamageChance = 24, - LightningMinBase = 0, - LightningMindOverMatter = 0, - LightningNumberOfHits = 42.087542087542, - LightningProjectileDamageChance = 24, - LightningResist = 75, - LightningResistOver75 = 0, - LightningResistOverCap = 25.418, - LightningResistTotal = 100.418, - LightningSpellDamageChance = 0, - LightningSpellProjectileDamageChance = 0, - LightningTakenDotMult = 0.25, - LightningTakenHit = 0.8, - LightningTakenHitMult = 0.2, - LightningTakenReflect = 0.8, - LightningTakenReflectMult = 0.2, - LightningTotalEHP = 51893.939393939, - LightningTotalPool = 8387, - LowestAttribute = 135, - LowestOfArmourAndEvasion = 1971, - Mana = 1391, - ManaCost = 72, - ManaLeech = 0, - ManaLeechDuration = 0, - ManaLeechGainRate = 0, - ManaLeechInstanceRate = 27.82, - ManaLeechInstances = 0, - ManaLeechInstant = 0, - ManaLeechInstantRate = 0, - ManaLeechPerHit = 0, - ManaLeechRate = 0, - ManaOnBlock = 0, - ManaOnHit = 0, - ManaOnHitRate = 0, - ManaRecoveryRateMod = 1, - ManaRegen = 89.6, - ManaRegenInc = 113, - ManaReserved = 1251, - ManaReservedPercent = 89.935298346513, - ManaUnreserved = 140, - ManaUnreservedPercent = 10.064701653487, - MaxEnergyShieldLeechInstance = 165.9, - MaxEnergyShieldLeechRate = 165.9, - MaxLifeLeechInstance = 672.8, - MaxLifeLeechRate = 1345.6, - MaxManaLeechInstance = 139.1, - MaxManaLeechRate = 278.2, - MaxOffensiveWarcryEffect = 1, - MaximumShock = 50, - MeleeEvadeChance = 11, - MeleeNotHitChance = 11, - MissingChaosResist = 7, - MissingColdResist = 0, - MissingFireResist = 0, - MissingLightningResist = 0, - MovementSpeedMod = 1.89, - OffensiveWarcryEffect = 1, - PhysicalAegis = 0, - PhysicalAverageDamageChance = 12, - PhysicalCritAverage = 0, - PhysicalDamageReduction = 39.418, - PhysicalDotEHP = 9799.9579350798, - PhysicalEnergyShieldBypass = 0, - PhysicalGuardAbsorbRate = 0, - PhysicalGuardEffectiveLife = 6728, - PhysicalGuardEffectivePool = 0, - PhysicalHitAverage = 0, - PhysicalManaEffectiveLife = 6728, - PhysicalMaxBase = 0, - PhysicalMaximumHitTaken = 17305.05760787, - PhysicalMeleeDamageChance = 24, - PhysicalMinBase = 0, - PhysicalMindOverMatter = 0, - PhysicalNumberOfHits = 18.037518037518, - PhysicalPhysicalBaseTakenHitMult = 0.484656, - PhysicalProjectileDamageChance = 24, - PhysicalResist = 14.418, - PhysicalResistWhenHit = 14.418, - PhysicalSpellDamageChance = 0, - PhysicalSpellProjectileDamageChance = 0, - PhysicalTakenDotMult = 0.85582, - PhysicalTakenHit = 0.8, - PhysicalTakenHitMult = 0.484656, - PhysicalTakenReflect = 0.8, - PhysicalTakenReflectMult = 0.484656, - PhysicalTotalEHP = 22240.25974026, - PhysicalTotalPool = 8387, - PoisonAvoidChance = 100, - PoisonChanceOnCrit = 0, - PoisonChanceOnHit = 0, - PowerCharges = 0, - PowerChargesMax = 3, - PowerChargesMin = 0, - PreEffectiveCritChance = 2.6, - ProjectileBlockChance = 24, - ProjectileEvadeChance = 11, - ProjectileNotHitChance = 11, - RallyingHitEffect = 1, - RemovableEnduranceCharges = 3, - RemovableFrenzyCharges = 0, - RemovablePowerCharges = 0, - ReqDex = 111, - ReqInt = 188, - ReqStr = 155, - RuthlessBlowChance = 0, - RuthlessBlowEffect = 1, - RuthlessBlowMaxCount = 0, - RuthlessBlowMultiplier = 1, - SapChanceOnCrit = 0, - SapChanceOnHit = 0, - ScaledDamageEffect = 1, - ScorchChanceOnCrit = 0, - ScorchChanceOnHit = 0, - SeismicHitEffect = 1, - ShieldBlockChance = 24, - ShockAvoidChance = 10, - ShockChance = 12.34, - ShockChanceOnCrit = 100, - ShockChanceOnHit = 10, - SiphoningCharges = 0, - SiphoningChargesMax = 0, - ["Spec:ArmourInc"] = 20, - ["Spec:EnergyShieldInc"] = 114, - ["Spec:EvasionInc"] = 25, - ["Spec:LifeInc"] = 201, - ["Spec:ManaInc"] = 43, - Speed = 0, - SpellBlockChance = 0, - SpellBlockChanceMax = 75, - SpellDodgeChance = 0, - SpellNotHitChance = 0, - SpellProjectileBlockChance = 0, - SpellProjectileNotHitChance = 0, - Str = 207, - StunAvoidChance = 0, - StunDuration = 0.35, - TheoreticalMaxOffensiveWarcryEffect = 1, - TheoreticalOffensiveWarcryEffect = 1, - Time = 0, - TotalAttr = 772, - TotalCharges = 3, - TotalDPS = 0, - TotalDot = 566925.51596343, - TotalDotDPS = 567004.71046343, - TotalDotInstance = 566925.51596343, - TotalMax = 88512.094, - TotalMin = 59035.746, - TripleDamageChance = 0, - TripleDamageChanceOnCrit = 0, - TripleDamageEffect = 1, - WarcryPower = 20, - WithBleedDPS = 0, - WithDotDPS = 566925.51596343, - WithIgniteDPS = 79.1945, - WithPoisonDPS = 0, - allMult = 1, - dontSplitEvade = true, - impaleStoredHitAvg = 0 - } -} \ No newline at end of file From ad65091d694ecdc4aef28c937ae33c6cc57d54d3 Mon Sep 17 00:00:00 2001 From: Wires77 Date: Thu, 13 May 2021 14:22:59 -0500 Subject: [PATCH 40/42] Adding a placeholder file so the CI process can find the TestBuilds folder even when it's empty --- spec/TestBuilds/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 spec/TestBuilds/.gitignore diff --git a/spec/TestBuilds/.gitignore b/spec/TestBuilds/.gitignore new file mode 100644 index 00000000..87c309b7 --- /dev/null +++ b/spec/TestBuilds/.gitignore @@ -0,0 +1 @@ +# This file is to keep an empty TestBuilds folder around when the CI process uses it to find test builds if there aren't any to find \ No newline at end of file From 4f33e7955224bc5baae214bacbdaba7b2d1dd250 Mon Sep 17 00:00:00 2001 From: Wires77 Date: Thu, 13 May 2021 14:26:18 -0500 Subject: [PATCH 41/42] Adding logic to ignore non-lua files --- spec/System/TestBuilds_spec.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/System/TestBuilds_spec.lua b/spec/System/TestBuilds_spec.lua index ffad1274..dc206912 100644 --- a/spec/System/TestBuilds_spec.lua +++ b/spec/System/TestBuilds_spec.lua @@ -7,7 +7,7 @@ local function fetchBuilds(path, buildList) assert(type(attr) == "table") if attr.mode == "directory" then fetchBuilds(f, buildList) - else + elseif file:match("^.+(%..+)$") == ".lua" then buildList[file] = LoadModule(f) end end From 4a8854e0d7e9418034c51528151120675bf15a56 Mon Sep 17 00:00:00 2001 From: Wires77 Date: Thu, 13 May 2021 14:35:36 -0500 Subject: [PATCH 42/42] Updating directory for luacov-coveralls (--root param didn't work) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 9f6624b7..cef78f9a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,4 +25,4 @@ jobs: - name: Run tests run: busted --lua=/home/runner/work/PathOfBuilding/PathOfBuilding/.lua/bin/luajit - name: Report coverage - run: luacov-coveralls --repo-token=${{ secrets.github_token }} + run: cd src; luacov-coveralls --repo-token=${{ secrets.github_token }}