diff --git a/CHANGELOG.md b/CHANGELOG.md index b6a97dc3b4..163036297e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,69 @@ # Changelog +## [v2.49.0](https://github.com/PathOfBuildingCommunity/PathOfBuilding/tree/v2.49.0) (2024/11/18) + +[Full Changelog](https://github.com/PathOfBuildingCommunity/PathOfBuilding/compare/v2.48.2...v2.49.0) + + + +## What's Changed +### New to Path of Building +- Fix character import for accounts with discriminators [\#8361](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8361) ([Regisle](https://github.com/Regisle)) +- Change default Boss Config from None to Pinnacle [\#8271](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8271) ([Regisle](https://github.com/Regisle)) +- Default to last added Tattoo in Tattoo popup [\#8215](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8215) ([LocalIdentity](https://github.com/LocalIdentity)) +- Add support for Debuffs granted by Glorious Madness [\#8275](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8275) ([LocalIdentity](https://github.com/LocalIdentity)) +- Add support for Storm Secret self damage calculation [\#8274](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8274) ([LocalIdentity](https://github.com/LocalIdentity)) +- Add Wretched Defiler Spectre [\#8242](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8242) ([machenme](https://github.com/machenme)) +- Add support for modifying affix limits [\#8258](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8258) ([Regisle](https://github.com/Regisle)) +- Add support for Items Implicits Cannot Be Changed [\#8243](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8243) ([Regisle](https://github.com/Regisle)) +- Add Support for many Runecraft Enchants [\#8217](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8217), [\#8222](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8222), [\#8240](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8240) ([LocalIdentity](https://github.com/LocalIdentity), [Regisle](https://github.com/Regisle), [Paliak](https://github.com/Paliak)) +- Add Ctrl+Alt+c error popup [\#8287](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8287) ([Nightblade](https://github.com/Nightblade)) +- Update rare templates [\#8229](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8229) ([Regisle](https://github.com/Regisle)) +- Add name of item causing requirements warning to warning message [\#8335](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8335) ([Paliak](https://github.com/Paliak)) +- Update Affliction Spectre Buffs with 3.25 Changes [\#8279](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8279) ([LocalIdentity](https://github.com/LocalIdentity)) +### Fixed Crashes +- Fix invalid skill IDs in party tab source [\#8211](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8211) ([Regisle](https://github.com/Regisle)) +- Fix Trade Query Stat Weight Crash [\#8278](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8278) ([Regisle](https://github.com/Regisle)) +- Fix Party Tab Crash with thresholds [\#8314](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8314) ([Regisle](https://github.com/Regisle)) +- Fix special characters in set name causing crash [\#8353](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8353) ([Paliak](https://github.com/Paliak)) +### User Interface +- Show Curse limit on calcs tab [\#8263](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8263) ([Regisle](https://github.com/Regisle)) +- Add "Ignore Mirrored Items" checkbox to trade query options [\#8184](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8184) ([n1tr0xs](https://github.com/n1tr0xs)) +- Hide recovery information on Mana Flasks if recovery is 0 [\#8239](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8239) ([Paliak](https://github.com/Paliak)) +- Allow zero enemy armour in config and fix negative enemy damage [\#8305](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8305) ([Regisle](https://github.com/Regisle)) +- Fix Warden import colour [\#8362](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8362) ([Regisle](https://github.com/Regisle)) +### Fixed Calculations +- Mana cost raw not being set to 0 when using lifetap [\#8233](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8233) ([Paliak](https://github.com/Paliak)) +- Fix Frost Blades of Katabasis DoT not scaling with Tinctures and Multistrike [\#8281](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8281) ([LocalIdentity](https://github.com/LocalIdentity)) +- Fix 3.1 xp multiplier calc for levels 95-99 [\#8283](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8283) ([OriginalThing](https://github.com/OriginalThing)) +- Shock and scorch fixes [\#8272](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8272) ([Regisle](https://github.com/Regisle)) +- Improve EHP overkill approximation, especially for MoM [\#7568](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/7568) ([0xjc](https://github.com/0xjc)) +- Hollow Palm Technique proper Dual Wielding [\#8307](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8307) ([Regisle](https://github.com/Regisle)) +- Fixed Off hand detection regarding Necromantic Aegis [\#8331](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8331) ([Jonathan-Dang](https://github.com/Jonathan-Dang)) +- Fix Herald of Ash overkill damage incorrectly scaling with global damage increases [\#8330](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8330) ([Jonathan-Dang](https://github.com/Jonathan-Dang)) +### Fixed Behaviours +- Fix Blasphemy Auras triggering Mana cost warning [\#8324](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8324) ([Paliak](https://github.com/Paliak)) +- Fix Eldritch Implicit Mod Replacement [\#8265](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8265) ([Regisle](https://github.com/Regisle)) +- Fix Bloodscent not making Rage eligible [\#8237](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8237) ([n1tr0xs](https://github.com/n1tr0xs)) +- Fix "# of Warcries used recently" configuration option unavailable [\#8218](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8218) ([n1tr0xs](https://github.com/n1tr0xs)) +- Fix The Taming affecting Elemental ground DoTs [\#8286](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8286) ([LocalIdentity](https://github.com/LocalIdentity)) +- Fix Dual Strike of Ambidexterity and Cleave of Rage [\#8304](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8304) ([Regisle](https://github.com/Regisle)) +- Fix Ghost Reaver and Brutal Fervour Interaction [\#8290](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8290) ([Regisle](https://github.com/Regisle)) +- Fix abyss socket items with no selectable Socket count (e.g. Wraithlord) [\#8317](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8317) ([Regisle](https://github.com/Regisle)) +- Default "Enemy Damage Type" to "Average" when changing Boss skills [\#8318](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8318) ([ConnorThelin](https://github.com/ConnorThelin)) +- Vengeful Cry Improvements [\#8303](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8303) ([Regisle](https://github.com/Regisle)) +- Fix Kalandra's Touch skipping mods [\#8323](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8323) ([Paliak](https://github.com/Paliak)) +- Fix Rupture sometimes applying multiple times [\#8320](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8320) ([majochem](https://github.com/majochem)) +### Accuracy Improvements +- Make Runesmith enchants an enchant instead of a craft [\#8223](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8223) ([Regisle](https://github.com/Regisle)) +- Fix Cooldown breakdown showing overrides for other skills (e.g. Flicker) [\#8306](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8306) ([Regisle](https://github.com/Regisle)) +- Remove non-existant stat from Cadigan's Crown [\#8294](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8294) ([deathbeam](https://github.com/deathbeam)) +- Fix numerous fullDPS tooltip issues [\#8247](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8247) ([Paliak](https://github.com/Paliak)) +### Other changes +- Fix Dual Wielding Mastery "Elusive on block" not enabling Elusive config [\#8277](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8277) ([Regisle](https://github.com/Regisle)) +- Fix Party Tab Warcries clearing links instead of Warcries [\#8313](https://github.com/PathOfBuildingCommunity/PathOfBuilding/pull/8313) ([Regisle](https://github.com/Regisle)) + + ## [v2.48.2](https://github.com/PathOfBuildingCommunity/PathOfBuilding/tree/v2.48.2) (2024/08/17) [Full Changelog](https://github.com/PathOfBuildingCommunity/PathOfBuilding/compare/v2.48.1...v2.48.2) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 21f4573b79..c646c78748 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,7 +48,7 @@ Feature requests are always welcome. Note that not all requests will receive an ### When submitting a pull request: * **Pull requests must be created against the `dev` branch**, as all changes to the code are staged there before merging to `master`. * Make sure that the changes have been thoroughly tested! -* Make sure not to commit `./src/Data/ModCache.lua`. This is a very large, automatically generated file that is updated in the repository for releases only. +* If you're updating mod parsing logic, make sure to reload PoB with `Ctrl` + `F5` to regenerate `./src/Data/ModCache.lua`. This is a very large, automatically generated file that can be used to verify your changes didn't affect any other mods inadvertently. * There are many more files in the `./src/Data` directory that are automatically generated. This is indicated by the header `-- This file is automatically generated, do not edit!`. To change these, instead change the scripts in the `./src/Export` directory and rerun the exporter. For your PR, please include all relevant changes to both the scripts and data files. diff --git a/changelog.txt b/changelog.txt index bf2852b4bc..31b0d0915f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,67 @@ +VERSION[2.49.0][2024/11/18] + +--- New to Path of Building --- +* Fix character import for accounts with discriminators (Regisle) +* Change default Boss Config from None to Pinnacle (Regisle) +* Default to last added Tattoo in Tattoo popup (LocalIdentity) +* Add support for Debuffs granted by Glorious Madness (LocalIdentity) +* Add support for Storm Secret self damage calculation (LocalIdentity) +* Add Wretched Defiler Spectre (machenme) +* Add support for modifying affix limits (Regisle) +* Add support for Items Implicits Cannot Be Changed (Regisle) +* Add Support for many Runecraft Enchants by (dLocalIdentity, Regisle, Paliak) +* Add Ctrl+Alt+c error popup (Nightblade) +* Update rare templates (Regisle) +* Add name of item causing requirements warning to warning message (Paliak) +* Update Affliction Spectre Buffs with 3.25 Changes (LocalIdentity) + +--- Fixed Crashes --- +* Fix invalid skill IDs in party tab source (Regisle) +* Fix Trade Query Stat Weight Crash (Regisle) +* Fix Party Tab Crash with thresholds (Regisle) +* Fix special characters in set name causing crash (Paliak) + +--- User Interface --- +* Show Curse limit on calcs tab (Regisle) +* Add "Ignore Mirrored Items" checkbox to trade query options (n1tr0xs) +* Hide recovery information on Mana Flasks if recovery is 0 (Paliak) +* Allow zero enemy armour in config and fix negative enemy damage (Regisle) +* Fix Warden import colour (Regisle) + +--- Fixed Calculations --- +* Mana cost raw not being set to 0 when using lifetap (Paliak) +* Fix Frost Blades of Katabasis DoT not scaling with Tinctures and Multistrike (LocalIdentity) +* Fix 3.1 xp multiplier calc for levels 95-99 (OriginalThing) +* Shock and scorch fixes (Regisle) +* Improve EHP overkill approximation, especially for MoM (0xjc) +* Hollow Palm Technique proper Dual Wielding (Regisle) +* Fixed Off hand detection regarding Necromantic Aegis (Jonathan-Dang) +* Fix Herald of Ash overkill damage incorrectly scaling with global damage increases (Jonathan-Dang) + +--- Fixed Behaviours --- +* Fix Blasphemy Auras triggering Mana cost warning (Paliak) +* Fix Eldritch Implicit Mod Replacement (Regisle) +* Fix Bloodscent not making Rage eligible (n1tr0xs) +* Fix "# of Warcries used recently" configuration option unavailable (n1tr0xs) +* Fix The Taming affecting Elemental ground DoTs (LocalIdentity) +* Fix Dual Strike of Ambidexterity and Cleave of Rage (Regisle) +* Fix Ghost Reaver and Brutal Fervour Interaction (Regisle) +* Fix abyss socket items with no selectable Socket count (e.g. Wraithlord) (Regisle) +* Default "Enemy Damage Type" to "Average" when changing Boss skills (ConnorThelin) +* Vengeful Cry Improvements (Regisle) +* Fix Kalandra's Touch skipping mods (Paliak) +* Fix Rupture sometimes applying multiple times (majochem) + +--- Accuracy Improvements --- +* Make Runesmith enchants an enchant instead of a craft (Regisle) +* Fix Cooldown breakdown showing overrides for other skills (e.g. Flicker) (Regisle) +* Remove non-existant stat from Cadigan's Crown (deathbeam) +* Fix numerous fullDPS tooltip issues (Paliak) + +--- Other changes --- +* Fix Dual Wielding Mastery "Elusive on block" not enabling Elusive config (Regisle) +* Fix Party Tab Warcries clearing links instead of Warcries (Regisle) + VERSION[2.48.2][2024/08/17] --- Fixed Crashes --- diff --git a/manifest.xml b/manifest.xml index a9583628f5..cf15ee51c0 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,6 +1,6 @@ - + diff --git a/spec/System/TestDefence_spec.lua b/spec/System/TestDefence_spec.lua index db44dd7016..07c7f208f7 100644 --- a/spec/System/TestDefence_spec.lua +++ b/spec/System/TestDefence_spec.lua @@ -9,6 +9,10 @@ describe("TestDefence", function() -- boring part it("no armour max hits", function() + build.configTab.input.enemyIsBoss = "None" + build.configTab:BuildModList() + runCallback("OnFrame") + assert.are.equals(60, build.calcsTab.calcsOutput.PhysicalMaximumHitTaken) assert.are.equals(38, build.calcsTab.calcsOutput.FireMaximumHitTaken) assert.are.equals(38, build.calcsTab.calcsOutput.ColdMaximumHitTaken) @@ -19,6 +23,7 @@ describe("TestDefence", function() +200 to all resistances\n\z 200% additional Physical Damage Reduction\n\z " + build.configTab:BuildModList() runCallback("OnFrame") assert.are.equals(600, build.calcsTab.calcsOutput.PhysicalMaximumHitTaken) @@ -168,6 +173,7 @@ describe("TestDefence", function() When Hit during effect, 50% of Life loss from Damage taken occurs over 4 seconds instead\n\z " -- 50% progenesis should just simply double the life pool build.configTab.input.conditionUsingFlask = true + build.configTab.input.enemyIsBoss = "None" build.configTab:BuildModList() runCallback("OnFrame") assert.are.equals(600, build.calcsTab.calcsOutput.PhysicalMaximumHitTaken) @@ -186,7 +192,6 @@ describe("TestDefence", function() 100% less intelligence\n\z +60 to maximum energy shield\n\z " -- progenesis should not interact with pools other than life. - build.configTab.input.conditionUsingFlask = true build.configTab:BuildModList() runCallback("OnFrame") assert.are.equals(900, build.calcsTab.calcsOutput.PhysicalMaximumHitTaken) @@ -257,7 +262,6 @@ describe("TestDefence", function() 100% less intelligence\n\z +60 to maximum energy shield\n\z " -- wonkier numbers to test the pool reduction function - build.configTab.input.conditionUsingFlask = true build.configTab:BuildModList() runCallback("OnFrame") assert.are.equals(1300, build.calcsTab.calcsOutput.PhysicalMaximumHitTaken) @@ -323,6 +327,7 @@ describe("TestDefence", function() +940 to maximum life\n\z +10000 to armour\n\z " -- hit of 2000 on 10000 armour results in 50% DR which reduces the damage to 1000 - total HP + build.configTab.input.enemyIsBoss = "None" build.configTab:BuildModList() runCallback("OnFrame") assert.are.equals(1000, takenHitFromTypeMaxHit("Physical")) @@ -603,6 +608,7 @@ describe("TestDefence", function() end) it("energy shield bypass tests #pet", function() + build.configTab.input.enemyIsBoss = "None" -- Mastery build.configTab.input.customMods = [[ +40 to maximum life @@ -611,6 +617,7 @@ describe("TestDefence", function() You have no intelligence +60% to all resistances ]] + build.configTab:BuildModList() runCallback("OnFrame") assert.are.equals(300, build.calcsTab.calcsOutput.FireMaximumHitTaken) diff --git a/spec/System/TestSkills_spec.lua b/spec/System/TestSkills_spec.lua index 960156c626..0e67ddc80d 100644 --- a/spec/System/TestSkills_spec.lua +++ b/spec/System/TestSkills_spec.lua @@ -86,8 +86,17 @@ describe("TestAttacks", function() srcInstance.skillStageCount = 8 build.modFlag = true build.buildFlag = true + build.configTab.input.enemyIsBoss = "None" + build.configTab:BuildModList() runCallback("OnFrame") - + -- Manual stages + assert.True(build.calcsTab.mainEnv.enemyDB:Sum("BASE", nil, "FireResist") < 0) + + srcInstance.skillPart = 2 + build.modFlag = true + build.buildFlag = true + runCallback("OnFrame") + -- Automatic maximum sustainable stages assert.True(build.calcsTab.mainEnv.enemyDB:Sum("BASE", nil, "FireResist") < 0) end) diff --git a/spec/System/TestTriggers_spec.lua b/spec/System/TestTriggers_spec.lua index c04b05e93d..649fd67ff2 100644 --- a/spec/System/TestTriggers_spec.lua +++ b/spec/System/TestTriggers_spec.lua @@ -1339,4 +1339,24 @@ describe("TestTriggers", function() assert.True(build.calcsTab.mainOutput.SkillTriggerRate ~= nil) end) + + it("Trigger settlers enchant", function() + build.itemsTab:CreateDisplayItemFromRaw([[Physical 1H Axe + Runic Hatchet + Quality: 0 + Sockets: R-R-R + LevelReq: 71 + Implicits: 0 + Trigger a Socketed Fire Spell on Hit, with a 0.25 second Cooldown]]) + build.itemsTab:AddDisplayItem() + runCallback("OnFrame") + + build.skillsTab:PasteSocketGroup("Slot: Weapon 1\nFireball 20/0 Default 1\n") + runCallback("OnFrame") + + build.skillsTab:PasteSocketGroup("Smite 20/0 Default 1\n") + runCallback("OnFrame") + + assert.True(build.calcsTab.mainOutput.SkillTriggerRate ~= nil) + end) end) diff --git a/src/Classes/BuildListControl.lua b/src/Classes/BuildListControl.lua index 699abc5d51..c1bec7f923 100644 --- a/src/Classes/BuildListControl.lua +++ b/src/Classes/BuildListControl.lua @@ -6,15 +6,15 @@ local ipairs = ipairs local s_format = string.format -local BuildListClass = newClass("BuildListControl", "ListControl", function(self, anchor, x, y, width, height, listMode) - self.ListControl(anchor, x, y, width, height, 20, "VERTICAL", false, listMode.list) +local BuildListClass = newClass("BuildListControl", "ListControl", function(self, anchor, rect, listMode) + self.ListControl(anchor, rect, 20, "VERTICAL", false, listMode.list) self.listMode = listMode self.colList = { { width = function() return self:GetProperty("width") - 172 end }, { }, } self.showRowSeparators = true - self.controls.path = new("PathControl", {"BOTTOM",self,"TOP"}, 0, -2, width, 24, main.buildPath, listMode.subPath, function(subPath) + self.controls.path = new("PathControl", {"BOTTOM",self,"TOP"}, {0, -2, self.width, 24}, main.buildPath, listMode.subPath, function(subPath) listMode.subPath = subPath listMode:BuildList() self.selIndex = nil @@ -74,8 +74,8 @@ end function BuildListClass:RenameBuild(build, copyOnName) local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter the new name for this "..(build.folderName and "folder:" or "build:")) - controls.edit = new("EditControl", nil, 0, 40, 350, 20, build.folderName or build.buildName, nil, "\\/:%*%?\"<>|%c", 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter the new name for this "..(build.folderName and "folder:" or "build:")) + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, build.folderName or build.buildName, nil, "\\/:%*%?\"<>|%c", 100, function(buf) controls.save.enabled = false if build.folderName then if buf:match("%S") then @@ -97,7 +97,7 @@ function BuildListClass:RenameBuild(build, copyOnName) end end end) - controls.save = new("ButtonControl", nil, -45, 70, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, 70, 80, 20}, "Save", function() local newBuildName = controls.edit.buf if build.folderName then if copyOnName then @@ -132,7 +132,7 @@ function BuildListClass:RenameBuild(build, copyOnName) self.listMode:SelectControl(self) end) controls.save.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() main:ClosePopup() self.listMode:SelectControl(self) end) diff --git a/src/Classes/ButtonControl.lua b/src/Classes/ButtonControl.lua index 63f73b1183..a37c6fc658 100644 --- a/src/Classes/ButtonControl.lua +++ b/src/Classes/ButtonControl.lua @@ -3,8 +3,8 @@ -- Class: Button Control -- Basic button control. -- -local ButtonClass = newClass("ButtonControl", "Control", "TooltipHost", function(self, anchor, x, y, width, height, label, onClick, onHover, forceTooltip) - self.Control(anchor, x, y, width, height) +local ButtonClass = newClass("ButtonControl", "Control", "TooltipHost", function(self, anchor, rect, label, onClick, onHover, forceTooltip) + self.Control(anchor, rect) self.TooltipHost() self.label = label self.onClick = onClick diff --git a/src/Classes/CalcBreakdownControl.lua b/src/Classes/CalcBreakdownControl.lua index d335fdb8bc..2596fd75ae 100644 --- a/src/Classes/CalcBreakdownControl.lua +++ b/src/Classes/CalcBreakdownControl.lua @@ -24,7 +24,7 @@ local CalcBreakdownClass = newClass("CalcBreakdownControl", "Control", "ControlH self.rangeGuide:Load("Assets/range_guide.png") self.uiOverlay = NewImageHandle() self.uiOverlay:Load("Assets/game_ui_small.png") - self.controls.scrollBar = new("ScrollBarControl", {"RIGHT",self,"RIGHT"}, -2, 0, 18, 0, 80, "VERTICAL", true) + self.controls.scrollBar = new("ScrollBarControl", {"RIGHT",self,"RIGHT"}, {-2, 0, 18, 0}, 80, "VERTICAL", true) end) function CalcBreakdownClass:IsMouseOver() diff --git a/src/Classes/CalcSectionControl.lua b/src/Classes/CalcSectionControl.lua index e8611adf2f..bee372e91f 100644 --- a/src/Classes/CalcSectionControl.lua +++ b/src/Classes/CalcSectionControl.lua @@ -6,7 +6,7 @@ local t_insert = table.insert local CalcSectionClass = newClass("CalcSectionControl", "Control", "ControlHost", function(self, calcsTab, width, id, group, colour, subSection, updateFunc) - self.Control(calcsTab, 0, 0, width, 0) + self.Control(calcsTab, {0, 0, width, 0}) self.ControlHost() self.calcsTab = calcsTab self.id = id @@ -33,7 +33,7 @@ local CalcSectionClass = newClass("CalcSectionControl", "Control", "ControlHost" end end subSec.collapsed = subSec.defaultCollapsed - self.controls["toggle"..i] = new("ButtonControl", {"TOPRIGHT",self,"TOPRIGHT"}, -3, -13 + (16 * i), 16, 16, function() + self.controls["toggle"..i] = new("ButtonControl", {"TOPRIGHT",self,"TOPRIGHT"}, {-3, -13 + (16 * i), 16, 16}, function() return subSec.collapsed and "+" or "-" end, function() subSec.collapsed = not subSec.collapsed diff --git a/src/Classes/CalcsTab.lua b/src/Classes/CalcsTab.lua index 651c7dd7f5..281c8178cd 100644 --- a/src/Classes/CalcsTab.lua +++ b/src/Classes/CalcsTab.lua @@ -32,13 +32,13 @@ local CalcsTabClass = newClass("CalcsTab", "UndoHandler", "ControlHost", "Contro self.colWidth = 230 self.sectionList = { } - self.controls.search = new("EditControl", {"TOPLEFT",self,"TOPLEFT"}, 4, 5, 260, 20, "", "Search", "%c", 100, nil, nil, nil, true) + self.controls.search = new("EditControl", {"TOPLEFT",self,"TOPLEFT"}, {4, 5, 260, 20}, "", "Search", "%c", 100, nil, nil, nil, true) t_insert(self.controls, self.controls.search) -- Special section for skill/mode selection self:NewSection(3, "SkillSelect", 1, colorCodes.NORMAL, {{ defaultCollapsed = false, label = "View Skill Details", data = { { label = "Socket Group", { controlName = "mainSocketGroup", - control = new("DropDownControl", nil, 0, 0, 300, 16, nil, function(index, value) + control = new("DropDownControl", nil, {0, 0, 300, 16}, nil, function(index, value) self.input.skill_number = index self:AddUndoState() self.build.buildFlag = true @@ -52,14 +52,14 @@ local CalcsTabClass = newClass("CalcsTab", "UndoHandler", "ControlHost", "Contro } }, }, { label = "Active Skill", { controlName = "mainSkill", - control = new("DropDownControl", nil, 0, 0, 300, 16, nil, function(index, value) + control = new("DropDownControl", nil, {0, 0, 300, 16}, nil, function(index, value) local mainSocketGroup = self.build.skillsTab.socketGroupList[self.input.skill_number] mainSocketGroup.mainActiveSkillCalcs = index self.build.buildFlag = true end) }, }, { label = "Skill Part", playerFlag = "multiPart", { controlName = "mainSkillPart", - control = new("DropDownControl", nil, 0, 0, 250, 16, nil, function(index, value) + control = new("DropDownControl", nil, {0, 0, 250, 16}, nil, function(index, value) local mainSocketGroup = self.build.skillsTab.socketGroupList[self.input.skill_number] local srcInstance = mainSocketGroup.displaySkillListCalcs[mainSocketGroup.mainActiveSkillCalcs].activeEffect.srcInstance srcInstance.skillPartCalcs = index @@ -67,7 +67,7 @@ local CalcsTabClass = newClass("CalcsTab", "UndoHandler", "ControlHost", "Contro self.build.buildFlag = true end) }, },{ label = "Skill Stages", playerFlag = "multiStage", { controlName = "mainSkillStageCount", - control = new("EditControl", nil, 0, 0, 52, 16, nil, nil, "%D", nil, function(buf) + control = new("EditControl", nil, {0, 0, 52, 16}, nil, nil, "%D", nil, function(buf) local mainSocketGroup = self.build.skillsTab.socketGroupList[self.input.skill_number] local srcInstance = mainSocketGroup.displaySkillListCalcs[mainSocketGroup.mainActiveSkillCalcs].activeEffect.srcInstance srcInstance.skillStageCountCalcs = tonumber(buf) @@ -76,7 +76,7 @@ local CalcsTabClass = newClass("CalcsTab", "UndoHandler", "ControlHost", "Contro end) }, }, { label = "Active Mines", playerFlag = "mine", { controlName = "mainSkillMineCount", - control = new("EditControl", nil, 0, 0, 52, 16, nil, nil, "%D", nil, function(buf) + control = new("EditControl", nil, {0, 0, 52, 16}, nil, nil, "%D", nil, function(buf) local mainSocketGroup = self.build.skillsTab.socketGroupList[self.input.skill_number] local srcInstance = mainSocketGroup.displaySkillListCalcs[mainSocketGroup.mainActiveSkillCalcs].activeEffect.srcInstance srcInstance.skillMineCountCalcs = tonumber(buf) @@ -85,13 +85,13 @@ local CalcsTabClass = newClass("CalcsTab", "UndoHandler", "ControlHost", "Contro end) }, }, { label = "Show Minion Stats", flag = "haveMinion", { controlName = "showMinion", - control = new("CheckBoxControl", nil, 0, 0, 18, nil, function(state) + control = new("CheckBoxControl", nil, {0, 0, 18}, nil, function(state) self.input.showMinion = state self:AddUndoState() end, "Show stats for the minion instead of the player.") }, }, { label = "Minion", flag = "minion", { controlName = "mainSkillMinion", - control = new("DropDownControl", nil, 0, 0, 160, 16, nil, function(index, value) + control = new("DropDownControl", nil, {0, 0, 160, 16}, nil, function(index, value) local mainSocketGroup = self.build.skillsTab.socketGroupList[self.input.skill_number] local srcInstance = mainSocketGroup.displaySkillListCalcs[mainSocketGroup.mainActiveSkillCalcs].activeEffect.srcInstance if value.itemSetId then @@ -104,12 +104,12 @@ local CalcsTabClass = newClass("CalcsTab", "UndoHandler", "ControlHost", "Contro end) } }, { label = "Spectre Library", flag = "spectre", { controlName = "mainSkillMinionLibrary", - control = new("ButtonControl", nil, 0, 0, 100, 16, "Manage Spectres...", function() + control = new("ButtonControl", nil, {0, 0, 100, 16}, "Manage Spectres...", function() self.build:OpenSpectreLibrary() end) } }, { label = "Minion Skill", flag = "haveMinion", { controlName = "mainSkillMinionSkill", - control = new("DropDownControl", nil, 0, 0, 200, 16, nil, function(index, value) + control = new("DropDownControl", nil, {0, 0, 200, 16}, nil, function(index, value) local mainSocketGroup = self.build.skillsTab.socketGroupList[self.input.skill_number] local srcInstance = mainSocketGroup.displaySkillListCalcs[mainSocketGroup.mainActiveSkillCalcs].activeEffect.srcInstance srcInstance.skillMinionSkillCalcs = index @@ -119,7 +119,7 @@ local CalcsTabClass = newClass("CalcsTab", "UndoHandler", "ControlHost", "Contro } }, { label = "Calculation Mode", { controlName = "mode", - control = new("DropDownControl", nil, 0, 0, 100, 16, buffModeDropList, function(index, value) + control = new("DropDownControl", nil, {0, 0, 100, 16}, buffModeDropList, function(index, value) self.input.misc_buffMode = value.buffMode self:AddUndoState() self.build.buildFlag = true @@ -149,7 +149,7 @@ Effective DPS: Curses and enemy properties (such as resistances and status condi self.controls.breakdown = new("CalcBreakdownControl", self) - self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, 0, 0, 18, 0, 50, "VERTICAL", true) + self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, {0, 0, 18, 0}, 50, "VERTICAL", true) self.powerBuilderInitialized = nil end) @@ -474,7 +474,7 @@ end -- Estimate the offensive and defensive power of all unallocated nodes function CalcsTabClass:PowerBuilder() --local timer_start = GetTime() - GlobalCache.useFullDPS = self.powerStat and self.powerStat.stat == "FullDPS" or false + local useFullDPS = self.powerStat and self.powerStat.stat == "FullDPS" local calcFunc, calcBase = self:GetMiscCalculator() local cache = { } local distanceMap = { } @@ -514,7 +514,7 @@ function CalcsTabClass:PowerBuilder() for nodeId, node in pairs(nodes) do if not node.alloc and node.modKey ~= "" and not self.mainEnv.grantedPassives[nodeId] then if not cache[node.modKey] then - cache[node.modKey] = calcFunc({ addNodes = { [node] = true } }, { requirementsItems = true, requirementsGems = true, skills = true }) + cache[node.modKey] = calcFunc({ addNodes = { [node] = true } }, useFullDPS) end local output = cache[node.modKey] if self.powerStat and self.powerStat.stat and not self.powerStat.ignoreForNodes then @@ -527,7 +527,7 @@ function CalcsTabClass:PowerBuilder() pathNodes[node] = true end if node.pathDist > 1 then - node.power.pathPower = self:CalculatePowerStat(self.powerStat, calcFunc({ addNodes = pathNodes }, { requirementsItems = true, requirementsGems = true, skills = true }), calcBase) + node.power.pathPower = self:CalculatePowerStat(self.powerStat, calcFunc({ addNodes = pathNodes }, useFullDPS), calcBase) end end elseif not self.powerStat or not self.powerStat.ignoreForNodes then @@ -542,7 +542,7 @@ function CalcsTabClass:PowerBuilder() end elseif node.alloc and node.modKey ~= "" and not self.mainEnv.grantedPassives[nodeId] then if not cache[node.modKey.."_remove"] then - cache[node.modKey.."_remove"] = calcFunc({ removeNodes = { [node] = true } }, { requirementsItems = true, requirementsGems = true, skills = true }) + cache[node.modKey.."_remove"] = calcFunc({ removeNodes = { [node] = true } }, useFullDPS) end local output = cache[node.modKey.."_remove"] if self.powerStat and self.powerStat.stat and not self.powerStat.ignoreForNodes then @@ -554,7 +554,7 @@ function CalcsTabClass:PowerBuilder() pathNodes[node] = true end if #node.depends > 1 then - node.power.pathPower = self:CalculatePowerStat(self.powerStat, calcFunc({ removeNodes = pathNodes }, { requirementsItems = true, requirementsGems = true, skills = true }), calcBase) + node.power.pathPower = self:CalculatePowerStat(self.powerStat, calcFunc({ removeNodes = pathNodes }, useFullDPS), calcBase) end end end @@ -575,7 +575,7 @@ function CalcsTabClass:PowerBuilder() wipeTable(node.power) if not node.alloc and node.modKey ~= "" and not self.mainEnv.grantedPassives[nodeId] then if not cache[node.modKey] then - cache[node.modKey] = calcFunc({ addNodes = { [node] = true } }, { requirementsItems = true, requirementsGems = true, skills = true }) + cache[node.modKey] = calcFunc({ addNodes = { [node] = true } }, useFullDPS) end local output = cache[node.modKey] if self.powerStat and self.powerStat.stat and not self.powerStat.ignoreForNodes then diff --git a/src/Classes/CheckBoxControl.lua b/src/Classes/CheckBoxControl.lua index 6829818886..16a83030f9 100644 --- a/src/Classes/CheckBoxControl.lua +++ b/src/Classes/CheckBoxControl.lua @@ -3,11 +3,12 @@ -- Class: Check Box Control -- Basic check box control. -- -local CheckBoxClass = newClass("CheckBoxControl", "Control", "TooltipHost", function(self, anchor, x, y, size, label, changeFunc, tooltipText, initialState) - self.Control(anchor, x, y, size, size) +local CheckBoxClass = newClass("CheckBoxControl", "Control", "TooltipHost", function(self, anchor, rect, label, changeFunc, tooltipText, initialState) + rect[4] = rect[3] or 0 + self.Control(anchor, rect) self.TooltipHost(tooltipText) self.label = label - self.labelWidth = DrawStringWidth(size - 4, "VAR", label or "") + 5 + self.labelWidth = DrawStringWidth(self.width - 4, "VAR", label or "") + 5 self.changeFunc = changeFunc self.state = initialState end) diff --git a/src/Classes/ConfigSetListControl.lua b/src/Classes/ConfigSetListControl.lua index 9a7f50f34b..b4c50e36db 100644 --- a/src/Classes/ConfigSetListControl.lua +++ b/src/Classes/ConfigSetListControl.lua @@ -7,10 +7,10 @@ local t_insert = table.insert local t_remove = table.remove local m_max = math.max -local ConfigSetListClass = newClass("ConfigSetListControl", "ListControl", function(self, anchor, x, y, width, height, configTab) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", true, configTab.configSetOrderList) +local ConfigSetListClass = newClass("ConfigSetListControl", "ListControl", function(self, anchor, rect, configTab) + self.ListControl(anchor, rect, 16, "VERTICAL", true, configTab.configSetOrderList) self.configTab = configTab - self.controls.copy = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, 2, -4, 60, 18, "Copy", function() + self.controls.copy = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, {2, -4, 60, 18}, "Copy", function() local configSet = configTab.configSets[self.selValue] local newConfigSet = copyTable(configSet) newConfigSet.id = 1 @@ -23,30 +23,30 @@ local ConfigSetListClass = newClass("ConfigSetListControl", "ListControl", funct self.controls.copy.enabled = function() return self.selValue ~= nil end - self.controls.delete = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, 4, 0, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, {4, 0, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() return self.selValue ~= nil and #self.list > 1 end - self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, -2, -4, 60, 18, "Rename", function() + self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, {-2, -4, 60, 18}, "Rename", function() self:RenameSet(configTab.configSets[self.selValue]) end) self.controls.rename.enabled = function() return self.selValue ~= nil end - self.controls.new = new("ButtonControl", {"RIGHT",self.controls.rename,"LEFT"}, -4, 0, 60, 18, "New", function() + self.controls.new = new("ButtonControl", {"RIGHT",self.controls.rename,"LEFT"}, {-4, 0, 60, 18}, "New", function() self:RenameSet(configTab:NewConfigSet(), true) end) end) function ConfigSetListClass:RenameSet(configSet, addOnName) local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter name for this config set:") - controls.edit = new("EditControl", nil, 0, 40, 350, 20, configSet.title, nil, nil, 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter name for this config set:") + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, configSet.title, nil, nil, 100, function(buf) controls.save.enabled = buf:match("%S") end) - controls.save = new("ButtonControl", nil, -45, 70, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, 70, 80, 20}, "Save", function() configSet.title = controls.edit.buf self.configTab.modFlag = true if addOnName then @@ -59,7 +59,7 @@ function ConfigSetListClass:RenameSet(configSet, addOnName) main:ClosePopup() end) controls.save.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() if addOnName then self.configTab.configSets[configSet.id] = nil end diff --git a/src/Classes/ConfigTab.lua b/src/Classes/ConfigTab.lua index 619de6d4c5..28de4d9598 100644 --- a/src/Classes/ConfigTab.lua +++ b/src/Classes/ConfigTab.lua @@ -35,10 +35,10 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont self.toggleConfigs = false - self.controls.sectionAnchor = new("LabelControl", { "TOPLEFT", self, "TOPLEFT" }, 0, 20, 0, 0, "") + self.controls.sectionAnchor = new("LabelControl", { "TOPLEFT", self, "TOPLEFT" }, { 0, 20, 0, 0 }, "") -- Set selector - self.controls.setSelect = new("DropDownControl", { "TOPLEFT", self.controls.sectionAnchor, "TOPLEFT" }, 76, -12, 210, 20, nil, function(index, value) + self.controls.setSelect = new("DropDownControl", { "TOPLEFT", self.controls.sectionAnchor, "TOPLEFT" }, { 76, -12, 210, 20 }, nil, function(index, value) self:SetActiveConfigSet(self.configSetOrderList[index]) self:AddUndoState() end) @@ -46,15 +46,15 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont self.controls.setSelect.enabled = function() return #self.configSetOrderList > 1 end - self.controls.setLabel = new("LabelControl", { "RIGHT", self.controls.setSelect, "LEFT" }, -2, 0, 0, 16, "^7Config set:") - self.controls.setManage = new("ButtonControl", { "LEFT", self.controls.setSelect, "RIGHT" }, 4, 0, 90, 20, "Manage...", function() + self.controls.setLabel = new("LabelControl", { "RIGHT", self.controls.setSelect, "LEFT" }, { -2, 0, 0, 16 }, "^7Config set:") + self.controls.setManage = new("ButtonControl", { "LEFT", self.controls.setSelect, "RIGHT" }, { 4, 0, 90, 20 }, "Manage...", function() self:OpenConfigSetManagePopup() end) - self.controls.search = new("EditControl", { "TOPLEFT", self.controls.sectionAnchor, "TOPLEFT" }, 8, 15, 360, 20, "", "Search", "%c", 100, function() + self.controls.search = new("EditControl", { "TOPLEFT", self.controls.sectionAnchor, "TOPLEFT" }, { 8, 15, 360, 20 }, "", "Search", "%c", 100, function() self:UpdateControls() end, nil, nil, true) - self.controls.toggleConfigs = new("ButtonControl", { "LEFT", self.controls.search, "RIGHT" }, 10, 0, 200, 20, function() + self.controls.toggleConfigs = new("ButtonControl", { "LEFT", self.controls.search, "RIGHT" }, { 10, 0, 200, 20 }, function() -- dynamic text return self.toggleConfigs and "Hide Ineligible Configurations" or "Show All Configurations" end, function() @@ -144,7 +144,7 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont local lastSection for _, varData in ipairs(varList) do if varData.section then - lastSection = new("SectionControl", {"TOPLEFT",self.controls.search,"BOTTOMLEFT"}, 0, 0, 360, 0, varData.section) + lastSection = new("SectionControl", {"TOPLEFT",self.controls.search,"BOTTOMLEFT"}, {0, 0, 360, 0}, varData.section) lastSection.varControlList = { } lastSection.col = varData.col lastSection.height = function(self) @@ -161,14 +161,14 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont else local control if varData.type == "check" then - control = new("CheckBoxControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 234, 0, 18, varData.label, function(state) + control = new("CheckBoxControl", {"TOPLEFT",lastSection,"TOPLEFT"}, {234, 0, 18}, varData.label, function(state) self.configSets[self.activeConfigSetId].input[varData.var] = state self:AddUndoState() self:BuildModList() self.build.buildFlag = true end) elseif varData.type == "count" or varData.type == "integer" or varData.type == "countAllowZero" or varData.type == "float" then - control = new("EditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 234, 0, 90, 18, "", nil, (varData.type == "integer" and "^%-%d") or (varData.type == "float" and "^%d.") or "%D", 7, function(buf, placeholder) + control = new("EditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, {234, 0, 90, 18}, "", nil, (varData.type == "integer" and "^%-%d") or (varData.type == "float" and "^%d.") or "%D", 7, function(buf, placeholder) if placeholder then self.configSets[self.activeConfigSetId].placeholder[varData.var] = tonumber(buf) else @@ -179,14 +179,14 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont self.build.buildFlag = true end) elseif varData.type == "list" then - control = new("DropDownControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 234, 0, 118, 16, varData.list, function(index, value) + control = new("DropDownControl", {"TOPLEFT",lastSection,"TOPLEFT"}, {234, 0, 118, 16}, varData.list, function(index, value) self.configSets[self.activeConfigSetId].input[varData.var] = value.val self:AddUndoState() self:BuildModList() self.build.buildFlag = true end) elseif varData.type == "text" and not varData.resizable then - control = new("EditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 8, 0, 344, 118, "", nil, "^%C\t\n", nil, function(buf, placeholder) + control = new("EditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, {8, 0, 344, 118}, "", nil, "^%C\t\n", nil, function(buf, placeholder) if placeholder then self.configSets[self.activeConfigSetId].placeholder[varData.var] = tostring(buf) else @@ -197,7 +197,7 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont self.build.buildFlag = true end, 16) elseif varData.type == "text" and varData.resizable then - control = new("ResizableEditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 8, 0, nil, 344, nil, nil, 118, 118 + 16 * 40, "", nil, "^%C\t\n", nil, function(buf, placeholder) + control = new("ResizableEditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, {8, 0, 344, 118, nil, nil, nil, 118 + 16 * 40}, "", nil, "^%C\t\n", nil, function(buf, placeholder) if placeholder then self.configSets[self.activeConfigSetId].placeholder[varData.var] = tostring(buf) else @@ -208,7 +208,7 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont self.build.buildFlag = true end, 16) else - control = new("Control", {"TOPLEFT",lastSection,"TOPLEFT"}, 234, 0, 16, 16) + control = new("Control", {"TOPLEFT",lastSection,"TOPLEFT"}, {234, 0, 16, 16}) end if varData.inactiveText then @@ -520,7 +520,7 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont end local labelControl = control if varData.label and varData.type ~= "check" then - labelControl = new("LabelControl", {"RIGHT",control,"LEFT"}, -4, 0, 0, DrawStringWidth(14, "VAR", varData.label) > 228 and 12 or 14, "^7"..varData.label) + labelControl = new("LabelControl", {"RIGHT",control,"LEFT"}, {-4, 0, 0, DrawStringWidth(14, "VAR", varData.label) > 228 and 12 or 14}, "^7"..varData.label) t_insert(self.controls, labelControl) end if varData.var then @@ -608,7 +608,7 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont t_insert(lastSection.varControlList, control) end end - self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, 0, 0, 18, 0, 50, "VERTICAL", true) + self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, {0, 0, 18, 0}, 50, "VERTICAL", true) end) function ConfigTabClass:Load(xml, fileName) @@ -935,8 +935,8 @@ end function ConfigTabClass:OpenConfigSetManagePopup() main:OpenPopup(370, 290, "Manage Config Sets", { - new("ConfigSetListControl", nil, 0, 50, 350, 200, self), - new("ButtonControl", nil, 0, 260, 90, 20, "Done", function() + new("ConfigSetListControl", nil, {0, 50, 350, 200}, self), + new("ButtonControl", nil, {0, 260, 90, 20}, "Done", function() main:ClosePopup() end), }) diff --git a/src/Classes/Control.lua b/src/Classes/Control.lua index 914d065171..110eb6884e 100644 --- a/src/Classes/Control.lua +++ b/src/Classes/Control.lua @@ -18,11 +18,23 @@ local anchorPos = { ["CENTER"] = { 0.5, 0.5 }, } -local ControlClass = newClass("Control", function(self, anchor, x, y, width, height) - self.x = x or 0 - self.y = y or 0 - self.width = width or 0 - self.height = height or 0 +--[[ +local rect = { + x, + y, + width, + height, + } + + could possibly have + minWidth, + minHeight, + for containers +--]] + +local ControlClass = newClass("Control", function(self, anchor, rect) + self.rectStart = rect or {0, 0, 0, 0} + self.x, self.y, self.width, self.height = unpack(self.rectStart) self.shown = true self.enabled = true self.anchor = { } diff --git a/src/Classes/DraggerControl.lua b/src/Classes/DraggerControl.lua index cba2489bb0..de331cbb04 100644 --- a/src/Classes/DraggerControl.lua +++ b/src/Classes/DraggerControl.lua @@ -3,8 +3,8 @@ -- Class: Dragger Button Control -- Dragger button control. -- -local DraggerClass = newClass("DraggerControl", "Control", "TooltipHost", function(self, anchor, x, y, width, height, label, onKeyDown, onKeyUp, onRightClick, onHover, forceTooltip) - self.Control(anchor, x, y, width, height) +local DraggerClass = newClass("DraggerControl", "Control", "TooltipHost", function(self, anchor, rect, label, onKeyDown, onKeyUp, onRightClick, onHover, forceTooltip) + self.Control(anchor, rect) self.TooltipHost() self.label = label self.onKeyDown = onKeyDown diff --git a/src/Classes/DropDownControl.lua b/src/Classes/DropDownControl.lua index 27a9648209..3a4bb6e26a 100644 --- a/src/Classes/DropDownControl.lua +++ b/src/Classes/DropDownControl.lua @@ -8,8 +8,8 @@ local m_min = math.min local m_max = math.max local m_floor = math.floor -local DropDownClass = newClass("DropDownControl", "Control", "ControlHost", "TooltipHost", "SearchHost", function(self, anchor, x, y, width, height, list, selFunc, tooltipText) - self.Control(anchor, x, y, width, height) +local DropDownClass = newClass("DropDownControl", "Control", "ControlHost", "TooltipHost", "SearchHost", function(self, anchor, rect, list, selFunc, tooltipText) + self.Control(anchor, rect) self.ControlHost() self.TooltipHost(tooltipText) self.SearchHost( @@ -30,7 +30,7 @@ local DropDownClass = newClass("DropDownControl", "Control", "ControlHost", "Too return StripEscapes(listVal) end ) - self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, -1, 0, 18, 0, (height - 4) * 4) + self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, {-1, 0, 18, 0}, (self.height - 4) * 4) self.controls.scrollBar.height = function() return self.dropHeight + 2 end diff --git a/src/Classes/EditControl.lua b/src/Classes/EditControl.lua index 17abfce044..63eedfa1eb 100644 --- a/src/Classes/EditControl.lua +++ b/src/Classes/EditControl.lua @@ -35,9 +35,9 @@ local function newlineCount(str) end end -local EditClass = newClass("EditControl", "ControlHost", "Control", "UndoHandler", "TooltipHost", function(self, anchor, x, y, width, height, init, prompt, filter, limit, changeFunc, lineHeight, allowZoom, clearable) +local EditClass = newClass("EditControl", "ControlHost", "Control", "UndoHandler", "TooltipHost", function(self, anchor, rect, init, prompt, filter, limit, changeFunc, lineHeight, allowZoom, clearable) self.ControlHost() - self.Control(anchor, x, y, width, height) + self.Control(anchor, rect) self.UndoHandler() self.TooltipHost() self:SetText(init or "") @@ -63,24 +63,24 @@ local EditClass = newClass("EditControl", "ControlHost", "Control", "UndoHandler if self.filter == "%D" or self.filter == "^%-%d" then -- Add +/- buttons for integer number edits self.isNumeric = true - self.controls.buttonDown = new("ButtonControl", {"RIGHT",self,"RIGHT"}, -2, 0, buttonSize, buttonSize, "-", function() + self.controls.buttonDown = new("ButtonControl", {"RIGHT",self,"RIGHT"}, {-2, 0, buttonSize, buttonSize}, "-", function() self:OnKeyUp("DOWN") end) - self.controls.buttonUp = new("ButtonControl", {"RIGHT",self.controls.buttonDown,"LEFT"}, -1, 0, buttonSize, buttonSize, "+", function() + self.controls.buttonUp = new("ButtonControl", {"RIGHT",self.controls.buttonDown,"LEFT"}, {-1, 0, buttonSize, buttonSize}, "+", function() self:OnKeyUp("UP") end) elseif clearable then - self.controls.buttonClear = new("ButtonControl", {"RIGHT",self,"RIGHT"}, -2, 0, buttonSize, buttonSize, "x", function() + self.controls.buttonClear = new("ButtonControl", {"RIGHT",self,"RIGHT"}, {-2, 0, buttonSize, buttonSize}, "x", function() self:SetText("", true) end) self.controls.buttonClear.shown = function() return #self.buf > 0 and self:IsMouseInBounds() end end - self.controls.scrollBarH = new("ScrollBarControl", {"BOTTOMLEFT",self,"BOTTOMLEFT"}, 1, -1, 0, 14, 60, "HORIZONTAL", true) + self.controls.scrollBarH = new("ScrollBarControl", {"BOTTOMLEFT",self,"BOTTOMLEFT"}, {1, -1, 0, 14}, 60, "HORIZONTAL", true) self.controls.scrollBarH.width = function() local width, height = self:GetSize() return width - (self.controls.scrollBarV.enabled and 16 or 2) end - self.controls.scrollBarV = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, -1, 1, 14, 0, (lineHeight or 0) * 3, "VERTICAL", true) + self.controls.scrollBarV = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, {-1, 1, 14, 0}, (lineHeight or 0) * 3, "VERTICAL", true) self.controls.scrollBarV.height = function() local width, height = self:GetSize() return height - (self.controls.scrollBarH.enabled and 16 or 2) diff --git a/src/Classes/ExtBuildListControl.lua b/src/Classes/ExtBuildListControl.lua index a8b635036d..fb6070ba69 100644 --- a/src/Classes/ExtBuildListControl.lua +++ b/src/Classes/ExtBuildListControl.lua @@ -11,8 +11,8 @@ local m_min = math.min local dkjson = require "dkjson" local ExtBuildListControlClass = newClass("ExtBuildListControl", "ControlHost", "Control", - function(self, anchor, x, y, width, height, providers) - self.Control(anchor, x, y, width, height) + function(self, anchor, rect, providers) + self.Control(anchor, rect) self.ControlHost() self:SelectControl() @@ -39,7 +39,7 @@ function ExtBuildListControlClass:Init(providerName) wipeTable(self.controls) wipeTable(self.tabs) - self.controls.sort = new("DropDownControl", { "TOP", self, "TOP" }, 0, -20, self.providerMaxLength, 20, + self.controls.sort = new("DropDownControl", { "TOP", self, "TOP" }, { 0, -20, self.providerMaxLength, 20 }, self.buildProvidersList, function(index, value) self:Init(value) end) @@ -72,7 +72,7 @@ function ExtBuildListControlClass:Init(providerName) if lastControl then anchor = { "LEFT", lastControl, "RIGHT" } end - local button = new("ButtonControl", anchor, 0, lastControl and 0 or -20, stringWidth + 10, 20, title, function() + local button = new("ButtonControl", anchor, { 0, lastControl and 0 or -20, stringWidth + 10, 20 }, title, function() if self.activeListProvider:GetActiveList() == title then return end @@ -105,7 +105,7 @@ function ExtBuildListControlClass:Init(providerName) return (self.width() - self.controls.sort.width()) / 2 end - self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, -1, 0, self.scroll and 16 or 0, 0, + self.controls.scrollBarV = new("ScrollBarControl", { "RIGHT", self, "RIGHT" }, { -1, 0, self.scroll and 16 or 0, 0 }, 80, "VERTICAL") { -- y = function() -- return (self.scrollH and -8 or 0) @@ -120,7 +120,7 @@ function ExtBuildListControlClass:Init(providerName) end if self.activeListProvider:GetPageUrl() then - self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, 0, 1, self.width, 20, "See All", + self.controls.all = new("ButtonControl", { "BOTTOM", self, "BOTTOM" }, { 0, 1, self.width, 20 }, "See All", function() local url = self.activeListProvider:GetPageUrl() if url then @@ -407,14 +407,14 @@ function ExtBuildListControlClass:Draw(viewPort, noTooltip) local relativeHeight = currentHeight + 10 - self.controls.scrollBarV.offset if relativeHeight > y and relativeHeight < self.height() + y - 10 then if build.buildLink then - local importButton = new("ButtonControl", nil, x, currentHeight - self.controls.scrollBarV.offset, 45, 20, "Import", function() + local importButton = new("ButtonControl", nil, { x, currentHeight - self.controls.scrollBarV.offset, 45, 20 }, "Import", function() self:importBuild(build) end) t_insert(self.controls, importButton) end if build.previewLink then - local previewButton = new("ButtonControl", nil, x + 50, currentHeight - self.controls.scrollBarV.offset, 60, 20, "Preview", function() + local previewButton = new("ButtonControl", nil, { x + 50, currentHeight - self.controls.scrollBarV.offset, 60, 20 }, "Preview", function() OpenURL(build.previewLink) end) t_insert(self.controls, previewButton) diff --git a/src/Classes/FolderListControl.lua b/src/Classes/FolderListControl.lua index 461beb49b0..ae4cf5e620 100644 --- a/src/Classes/FolderListControl.lua +++ b/src/Classes/FolderListControl.lua @@ -6,10 +6,10 @@ local ipairs = ipairs local t_insert = table.insert -local FolderListClass = newClass("FolderListControl", "ListControl", function(self, anchor, x, y, width, height, subPath, onChange) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", false, { }) +local FolderListClass = newClass("FolderListControl", "ListControl", function(self, anchor, rect, subPath, onChange) + self.ListControl(anchor, rect, 16, "VERTICAL", false, { }) self.subPath = subPath or "" - self.controls.path = new("PathControl", {"BOTTOM",self,"TOP"}, 0, -2, width, 24, main.buildPath, self.subPath, function(subPath) + self.controls.path = new("PathControl", {"BOTTOM",self,"TOP"}, {0, -2, self.width, 24}, main.buildPath, self.subPath, function(subPath) self.subPath = subPath self:BuildList() self.selIndex = nil diff --git a/src/Classes/GemSelectControl.lua b/src/Classes/GemSelectControl.lua index f492ff2bdd..b5965a2ca3 100644 --- a/src/Classes/GemSelectControl.lua +++ b/src/Classes/GemSelectControl.lua @@ -19,15 +19,15 @@ local altQualMap = { ["Alternate3"] = "Phantasmal ", } -local GemSelectClass = newClass("GemSelectControl", "EditControl", function(self, anchor, x, y, width, height, skillsTab, index, changeFunc, forceTooltip) - self.EditControl(anchor, x, y, width, height, nil, nil, "^ %a':-") - self.controls.scrollBar = new("ScrollBarControl", { "TOPRIGHT", self, "TOPRIGHT" }, -1, 0, 18, 0, (height - 4) * 4) +local GemSelectClass = newClass("GemSelectControl", "EditControl", function(self, anchor, rect, skillsTab, index, changeFunc, forceTooltip) + self.EditControl(anchor, rect, nil, nil, "^ %a':-") + self.controls.scrollBar = new("ScrollBarControl", { "TOPRIGHT", self, "TOPRIGHT" }, {-1, 0, 18, 0}, (self.height - 4) * 4) self.controls.scrollBar.y = function() local width, height = self:GetSize() return height + 1 end self.controls.scrollBar.height = function() - return (height - 4) * m_min(#self.list, 15) + 2 + return (self.height - 4) * m_min(#self.list, 15) + 2 end self.controls.scrollBar.shown = function() return self.dropped and self.controls.scrollBar.enabled @@ -58,7 +58,7 @@ local GemSelectClass = newClass("GemSelectControl", "EditControl", function(self } end) -function GemSelectClass:CalcOutputWithThisGem(calcFunc, gemData, qualityId) +function GemSelectClass:CalcOutputWithThisGem(calcFunc, gemData, qualityId, useFullDPS) local gemList = self.skillsTab.displayGroup.gemList local oldGem if gemList[self.index] then @@ -89,7 +89,7 @@ function GemSelectClass:CalcOutputWithThisGem(calcFunc, gemData, qualityId) -- Add hovered gem to tooltip self:AddGemTooltip(gemInstance) -- Calculate the impact of using this gem - local output = calcFunc({ }, { allocNodes = true, requirementsItems = true }) + local output = calcFunc(nil, useFullDPS) -- Put the original gem back into the list if oldGem then gemInstance.gemData = oldGem.gemData @@ -325,7 +325,7 @@ function GemSelectClass:UpdateSortCache() end local dpsField = self.skillsTab.sortGemsByDPSField - GlobalCache.useFullDPS = dpsField == "FullDPS" + local useFullDPS = dpsField == "FullDPS" local calcFunc, calcBase = self.skillsTab.build.calcsTab:GetMiscCalculator(self.build) -- Check for nil because some fields may not be populated, default to 0 local baseDPS = (dpsField == "FullDPS" and calcBase[dpsField] ~= nil and calcBase[dpsField]) or (calcBase.Minion and calcBase.Minion.CombinedDPS) or (calcBase[dpsField] ~= nil and calcBase[dpsField]) or 0 @@ -334,7 +334,7 @@ function GemSelectClass:UpdateSortCache() sortCache.dps[gemId] = baseDPS -- Ignore gems that don't support the active skill if sortCache.canSupport[gemId] or gemData.grantedEffect.hasGlobalEffect then - local output = self:CalcOutputWithThisGem(calcFunc, gemData, self:GetQualityType(gemId)) + local output = self:CalcOutputWithThisGem(calcFunc, gemData, self:GetQualityType(gemId), useFullDPS) -- Check for nil because some fields may not be populated, default to 0 sortCache.dps[gemId] = (dpsField == "FullDPS" and output[dpsField] ~= nil and output[dpsField]) or (output.Minion and output.Minion.CombinedDPS) or (output[dpsField] ~= nil and output[dpsField]) or 0 end @@ -477,7 +477,7 @@ function GemSelectClass:Draw(viewPort, noTooltip) local calcFunc, calcBase = self.skillsTab.build.calcsTab:GetMiscCalculator(self.build) if calcFunc then self.tooltip:Clear() - local output, gemInstance = self:CalcOutputWithThisGem(calcFunc, self.gems[self.list[self.hoverSel]], self:GetQualityType(self.list[self.hoverSel])) + local output, gemInstance = self:CalcOutputWithThisGem(calcFunc, self.gems[self.list[self.hoverSel]], self:GetQualityType(self.list[self.hoverSel]), self.skillsTab.sortGemsByDPSField == "FullDPS") self.tooltip:AddSeparator(10) self.skillsTab.build:AddStatComparesToTooltip(self.tooltip, calcBase, output, "^7Selecting this gem will give you:") self.tooltip:Draw(x, y + height + 2 + (self.hoverSel - 1) * (height - 4) - scrollBar.offset, width, height - 4, viewPort) diff --git a/src/Classes/ImportTab.lua b/src/Classes/ImportTab.lua index a3197bcd99..63e9a9181b 100644 --- a/src/Classes/ImportTab.lua +++ b/src/Classes/ImportTab.lua @@ -27,19 +27,19 @@ local ImportTabClass = newClass("ImportTab", "ControlHost", "Control", function( self.charImportMode = "GETACCOUNTNAME" self.charImportStatus = "Idle" - self.controls.sectionCharImport = new("SectionControl", {"TOPLEFT",self,"TOPLEFT"}, 10, 18, 650, 250, "Character Import") - self.controls.charImportStatusLabel = new("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, 6, 14, 200, 16, function() + self.controls.sectionCharImport = new("SectionControl", {"TOPLEFT",self,"TOPLEFT"}, {10, 18, 650, 250}, "Character Import") + self.controls.charImportStatusLabel = new("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, {6, 14, 200, 16}, function() return "^7Character import status: "..self.charImportStatus end) -- Stage: input account name - self.controls.accountNameHeader = new("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, 6, 40, 200, 16, "^7To start importing a character, enter the character's account name:") + self.controls.accountNameHeader = new("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, {6, 40, 200, 16}, "^7To start importing a character, enter the character's account name:") self.controls.accountNameHeader.shown = function() return self.charImportMode == "GETACCOUNTNAME" end - self.controls.accountRealm = new("DropDownControl", {"TOPLEFT",self.controls.accountNameHeader,"BOTTOMLEFT"}, 0, 4, 60, 20, realmList ) + self.controls.accountRealm = new("DropDownControl", {"TOPLEFT",self.controls.accountNameHeader,"BOTTOMLEFT"}, {0, 4, 60, 20}, realmList ) self.controls.accountRealm:SelByValue( main.lastRealm or "PC", "id" ) - self.controls.accountName = new("EditControl", {"LEFT",self.controls.accountRealm,"RIGHT"}, 8, 0, 200, 20, main.lastAccountName or "", nil, "%c", nil, nil, nil, nil, true) + self.controls.accountName = new("EditControl", {"LEFT",self.controls.accountRealm,"RIGHT"}, {8, 0, 200, 20}, main.lastAccountName or "", nil, "%c", nil, nil, nil, nil, true) self.controls.accountName.pasteFilter = function(text) return text:gsub("[\128-\255]",function(c) return codePointToUTF8(c:byte(1)):gsub(".",function(c) @@ -58,7 +58,7 @@ local ImportTabClass = newClass("ImportTab", "ControlHost", "Control", function( return a:lower() < b:lower() end) end -- don't load the list many times - self.controls.accountNameGo = new("ButtonControl", {"LEFT",self.controls.accountName,"RIGHT"}, 8, 0, 60, 20, "Start", function() + self.controls.accountNameGo = new("ButtonControl", {"LEFT",self.controls.accountName,"RIGHT"}, {8, 0, 60, 20}, "Start", function() self.controls.sessionInput.buf = "" self:DownloadCharacterList() end) @@ -66,13 +66,13 @@ local ImportTabClass = newClass("ImportTab", "ControlHost", "Control", function( return self.controls.accountName.buf:match("%S") end - self.controls.accountHistory = new("DropDownControl", {"LEFT",self.controls.accountNameGo,"RIGHT"}, 8, 0, 200, 20, historyList, function() + self.controls.accountHistory = new("DropDownControl", {"LEFT",self.controls.accountNameGo,"RIGHT"}, {8, 0, 200, 20}, historyList, function() self.controls.accountName.buf = self.controls.accountHistory.list[self.controls.accountHistory.selIndex] end) self.controls.accountHistory:SelByValue(main.lastAccountName) self.controls.accountHistory:CheckDroppedWidth(true) - self.controls.removeAccount = new("ButtonControl", {"LEFT",self.controls.accountHistory,"RIGHT"}, 8, 0, 20, 20, "X", function() + self.controls.removeAccount = new("ButtonControl", {"LEFT",self.controls.accountHistory,"RIGHT"}, {8, 0, 20, 20}, "X", function() local accountName = self.controls.accountHistory.list[self.controls.accountHistory.selIndex] if (accountName ~= nil) then t_remove(self.controls.accountHistory.list, self.controls.accountHistory.selIndex) @@ -86,13 +86,13 @@ local ImportTabClass = newClass("ImportTab", "ControlHost", "Control", function( tooltip:AddLine(16, "^7Removes account from the dropdown list") end - self.controls.accountNameUnicode = new("LabelControl", {"TOPLEFT",self.controls.accountRealm,"BOTTOMLEFT"}, 0, 16, 0, 14, "^7Note: if the account name contains non-ASCII characters then it must be URL encoded first.") - self.controls.accountNameURLEncoder = new("ButtonControl", {"TOPLEFT",self.controls.accountNameUnicode,"BOTTOMLEFT"}, 0, 4, 170, 18, "^x4040FFhttps://www.urlencoder.org/", function() + self.controls.accountNameUnicode = new("LabelControl", {"TOPLEFT",self.controls.accountRealm,"BOTTOMLEFT"}, {0, 16, 0, 14}, "^7Note: if the account name contains non-ASCII characters then it must be URL encoded first.") + self.controls.accountNameURLEncoder = new("ButtonControl", {"TOPLEFT",self.controls.accountNameUnicode,"BOTTOMLEFT"}, {0, 4, 170, 18}, "^x4040FFhttps://www.urlencoder.org/", function() OpenURL("https://www.urlencoder.org/") end) -- Stage: input POESESSID - self.controls.sessionHeader = new("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, 6, 40, 200, 14) + self.controls.sessionHeader = new("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, {6, 40, 200, 14}) self.controls.sessionHeader.label = function() return [[ ^7The list of characters on ']]..self.controls.accountName.buf..[[' couldn't be retrieved. This may be because: @@ -107,19 +107,19 @@ You can get this from your web browser's cookies while logged into the Path of E self.controls.sessionHeader.shown = function() return self.charImportMode == "GETSESSIONID" end - self.controls.sessionRetry = new("ButtonControl", {"TOPLEFT",self.controls.sessionHeader,"TOPLEFT"}, 0, 108, 60, 20, "Retry", function() + self.controls.sessionRetry = new("ButtonControl", {"TOPLEFT",self.controls.sessionHeader,"TOPLEFT"}, {0, 108, 60, 20}, "Retry", function() self:DownloadCharacterList() end) - self.controls.sessionCancel = new("ButtonControl", {"LEFT",self.controls.sessionRetry,"RIGHT"}, 8, 0, 60, 20, "Cancel", function() + self.controls.sessionCancel = new("ButtonControl", {"LEFT",self.controls.sessionRetry,"RIGHT"}, {8, 0, 60, 20}, "Cancel", function() self.charImportMode = "GETACCOUNTNAME" self.charImportStatus = "Idle" end) - self.controls.sessionPrivacySettings = new("ButtonControl", {"LEFT",self.controls.sessionCancel,"RIGHT"}, 8, 0, 120, 20, "Privacy Settings", function() + self.controls.sessionPrivacySettings = new("ButtonControl", {"LEFT",self.controls.sessionCancel,"RIGHT"}, {8, 0, 120, 20}, "Privacy Settings", function() OpenURL('https://www.pathofexile.com/my-account/privacy') end) - self.controls.sessionInput = new("EditControl", {"TOPLEFT",self.controls.sessionRetry,"BOTTOMLEFT"}, 0, 8, 350, 20, "", "POESESSID", "%X", 32) + self.controls.sessionInput = new("EditControl", {"TOPLEFT",self.controls.sessionRetry,"BOTTOMLEFT"}, {0, 8, 350, 20}, "", "POESESSID", "%X", 32) self.controls.sessionInput:SetProtected(true) - self.controls.sessionGo = new("ButtonControl", {"LEFT",self.controls.sessionInput,"RIGHT"}, 8, 0, 60, 20, "Go", function() + self.controls.sessionGo = new("ButtonControl", {"LEFT",self.controls.sessionInput,"RIGHT"}, {8, 0, 60, 20}, "Go", function() self:DownloadCharacterList() end) self.controls.sessionGo.enabled = function() @@ -127,20 +127,20 @@ You can get this from your web browser's cookies while logged into the Path of E end -- Stage: select character and import data - self.controls.charSelectHeader = new("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, 6, 40, 200, 16, "^7Choose character to import data from:") + self.controls.charSelectHeader = new("LabelControl", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, {6, 40, 200, 16}, "^7Choose character to import data from:") self.controls.charSelectHeader.shown = function() return self.charImportMode == "SELECTCHAR" or self.charImportMode == "IMPORTING" end - self.controls.charSelectLeagueLabel = new("LabelControl", {"TOPLEFT",self.controls.charSelectHeader,"BOTTOMLEFT"}, 0, 6, 0, 14, "^7League:") - self.controls.charSelectLeague = new("DropDownControl", {"LEFT",self.controls.charSelectLeagueLabel,"RIGHT"}, 4, 0, 150, 18, nil, function(index, value) + self.controls.charSelectLeagueLabel = new("LabelControl", {"TOPLEFT",self.controls.charSelectHeader,"BOTTOMLEFT"}, {0, 6, 0, 14}, "^7League:") + self.controls.charSelectLeague = new("DropDownControl", {"LEFT",self.controls.charSelectLeagueLabel,"RIGHT"}, {4, 0, 150, 18}, nil, function(index, value) self:BuildCharacterList(value.league) end) - self.controls.charSelect = new("DropDownControl", {"TOPLEFT",self.controls.charSelectHeader,"BOTTOMLEFT"}, 0, 24, 400, 18) + self.controls.charSelect = new("DropDownControl", {"TOPLEFT",self.controls.charSelectHeader,"BOTTOMLEFT"}, {0, 24, 400, 18}) self.controls.charSelect.enabled = function() return self.charImportMode == "SELECTCHAR" end - self.controls.charImportHeader = new("LabelControl", {"TOPLEFT",self.controls.charSelect,"BOTTOMLEFT"}, 0, 16, 200, 16, "Import:") - self.controls.charImportTree = new("ButtonControl", {"LEFT",self.controls.charImportHeader, "RIGHT"}, 8, 0, 170, 20, "Passive Tree and Jewels", function() + self.controls.charImportHeader = new("LabelControl", {"TOPLEFT",self.controls.charSelect,"BOTTOMLEFT"}, {0, 16, 200, 16}, "Import:") + self.controls.charImportTree = new("ButtonControl", {"LEFT",self.controls.charImportHeader, "RIGHT"}, {8, 0, 170, 20}, "Passive Tree and Jewels", function() if self.build.spec:CountAllocNodes() > 0 then main:OpenConfirmPopup("Character Import", "Importing the passive tree will overwrite your current tree.", "Import", function() self:DownloadPassiveTree() @@ -152,38 +152,38 @@ You can get this from your web browser's cookies while logged into the Path of E self.controls.charImportTree.enabled = function() return self.charImportMode == "SELECTCHAR" end - self.controls.charImportTreeClearJewels = new("CheckBoxControl", {"LEFT",self.controls.charImportTree,"RIGHT"}, 90, 0, 18, "Delete jewels:", nil, "Delete all existing jewels when importing.", true) - self.controls.charImportItems = new("ButtonControl", {"LEFT",self.controls.charImportTree, "LEFT"}, 0, 36, 110, 20, "Items and Skills", function() + self.controls.charImportTreeClearJewels = new("CheckBoxControl", {"LEFT",self.controls.charImportTree,"RIGHT"}, {90, 0, 18}, "Delete jewels:", nil, "Delete all existing jewels when importing.", true) + self.controls.charImportItems = new("ButtonControl", {"LEFT",self.controls.charImportTree, "LEFT"}, {0, 36, 110, 20}, "Items and Skills", function() self:DownloadItems() end) self.controls.charImportItems.enabled = function() return self.charImportMode == "SELECTCHAR" end - self.controls.charImportItemsClearSkills = new("CheckBoxControl", {"LEFT",self.controls.charImportItems,"RIGHT"}, 85, 0, 18, "Delete skills:", nil, "Delete all existing skills when importing.", true) - self.controls.charImportItemsClearItems = new("CheckBoxControl", {"LEFT",self.controls.charImportItems,"RIGHT"}, 220, 0, 18, "Delete equipment:", nil, "Delete all equipped items when importing.", true) - self.controls.charImportItemsIgnoreWeaponSwap = new("CheckBoxControl", {"LEFT",self.controls.charImportItems,"RIGHT"}, 380, 0, 18, "Ignore weapon swap:", nil, "Ignore items and skills in weapon swap.", false) - self.controls.charBanditNote = new("LabelControl", {"TOPLEFT",self.controls.charImportHeader,"BOTTOMLEFT"}, 0, 50, 200, 14, "^7Tip: After you finish importing a character, make sure you update the bandit choice,\nas it cannot be imported.") + self.controls.charImportItemsClearSkills = new("CheckBoxControl", {"LEFT",self.controls.charImportItems,"RIGHT"}, {85, 0, 18}, "Delete skills:", nil, "Delete all existing skills when importing.", true) + self.controls.charImportItemsClearItems = new("CheckBoxControl", {"LEFT",self.controls.charImportItems,"RIGHT"}, {220, 0, 18}, "Delete equipment:", nil, "Delete all equipped items when importing.", true) + self.controls.charImportItemsIgnoreWeaponSwap = new("CheckBoxControl", {"LEFT",self.controls.charImportItems,"RIGHT"}, {380, 0, 18}, "Ignore weapon swap:", nil, "Ignore items and skills in weapon swap.", false) + self.controls.charBanditNote = new("LabelControl", {"TOPLEFT",self.controls.charImportHeader,"BOTTOMLEFT"}, {0, 50, 200, 14}, "^7Tip: After you finish importing a character, make sure you update the bandit choice,\nas it cannot be imported.") - self.controls.charClose = new("ButtonControl", {"TOPLEFT",self.controls.charImportHeader,"BOTTOMLEFT"}, 0, 90, 60, 20, "Close", function() + self.controls.charClose = new("ButtonControl", {"TOPLEFT",self.controls.charImportHeader,"BOTTOMLEFT"}, {0, 90, 60, 20}, "Close", function() self.charImportMode = "GETACCOUNTNAME" self.charImportStatus = "Idle" end) -- Build import/export - self.controls.sectionBuild = new("SectionControl", {"TOPLEFT",self.controls.sectionCharImport,"BOTTOMLEFT"}, 0, 18, 650, 182, "Build Sharing") - self.controls.generateCodeLabel = new("LabelControl", {"TOPLEFT",self.controls.sectionBuild,"TOPLEFT"}, 6, 14, 0, 16, "^7Generate a code to share this build with other Path of Building users:") - self.controls.generateCode = new("ButtonControl", {"LEFT",self.controls.generateCodeLabel,"RIGHT"}, 4, 0, 80, 20, "Generate", function() + self.controls.sectionBuild = new("SectionControl", {"TOPLEFT",self.controls.sectionCharImport,"BOTTOMLEFT"}, {0, 18, 650, 182}, "Build Sharing") + self.controls.generateCodeLabel = new("LabelControl", {"TOPLEFT",self.controls.sectionBuild,"TOPLEFT"}, {6, 14, 0, 16}, "^7Generate a code to share this build with other Path of Building users:") + self.controls.generateCode = new("ButtonControl", {"LEFT",self.controls.generateCodeLabel,"RIGHT"}, {4, 0, 80, 20}, "Generate", function() self.controls.generateCodeOut:SetText(common.base64.encode(Deflate(self.build:SaveDB("code"))):gsub("+","-"):gsub("/","_")) end) - self.controls.enablePartyExportBuffs = new("CheckBoxControl", {"LEFT",self.controls.generateCode,"RIGHT"}, 100, 0, 18, "Export Support", function(state) + self.controls.enablePartyExportBuffs = new("CheckBoxControl", {"LEFT",self.controls.generateCode,"RIGHT"}, {100, 0, 18}, "Export Support", function(state) self.build.partyTab.enableExportBuffs = state self.build.buildFlag = true end, "This is for party play, to export support character, it enables the exporting of auras, curses and modifiers to the enemy", false) - self.controls.generateCodeOut = new("EditControl", {"TOPLEFT",self.controls.generateCodeLabel,"BOTTOMLEFT"}, 0, 8, 250, 20, "", "Code", "%Z") + self.controls.generateCodeOut = new("EditControl", {"TOPLEFT",self.controls.generateCodeLabel,"BOTTOMLEFT"}, {0, 8, 250, 20}, "", "Code", "%Z") self.controls.generateCodeOut.enabled = function() return #self.controls.generateCodeOut.buf > 0 end - self.controls.generateCodeCopy = new("ButtonControl", {"LEFT",self.controls.generateCodeOut,"RIGHT"}, 8, 0, 60, 20, "Copy", function() + self.controls.generateCodeCopy = new("ButtonControl", {"LEFT",self.controls.generateCodeOut,"RIGHT"}, {8, 0, 60, 20}, "Copy", function() Copy(self.controls.generateCodeOut.buf) self.controls.generateCodeOut:SetText("") end) @@ -203,12 +203,12 @@ You can get this from your web browser's cookies while logged into the Path of E end local exportWebsitesList = getExportSitesFromImportList() - self.controls.exportFrom = new("DropDownControl", { "LEFT", self.controls.generateCodeCopy,"RIGHT"}, 8, 0, 120, 20, exportWebsitesList, function(_, selectedWebsite) + self.controls.exportFrom = new("DropDownControl", { "LEFT", self.controls.generateCodeCopy,"RIGHT"}, {8, 0, 120, 20}, exportWebsitesList, function(_, selectedWebsite) main.lastExportWebsite = selectedWebsite.id self.exportWebsiteSelected = selectedWebsite.id end) self.controls.exportFrom:SelByValue(self.exportWebsiteSelected or main.lastExportWebsite or "Pastebin", "id") - self.controls.generateCodeByLink = new("ButtonControl", { "LEFT", self.controls.exportFrom, "RIGHT"}, 8, 0, 100, 20, "Share", function() + self.controls.generateCodeByLink = new("ButtonControl", { "LEFT", self.controls.exportFrom, "RIGHT"}, {8, 0, 100, 20}, "Share", function() local exportWebsite = exportWebsitesList[self.controls.exportFrom.selIndex] local response = buildSites.UploadBuild(self.controls.generateCodeOut.buf, exportWebsite) if response then @@ -240,8 +240,8 @@ You can get this from your web browser's cookies while logged into the Path of E end return #self.controls.generateCodeOut.buf > 0 end - self.controls.generateCodeNote = new("LabelControl", {"TOPLEFT",self.controls.generateCodeOut,"BOTTOMLEFT"}, 0, 4, 0, 14, "^7Note: this code can be very long; you can use 'Share' to shrink it.") - self.controls.importCodeHeader = new("LabelControl", {"TOPLEFT",self.controls.generateCodeNote,"BOTTOMLEFT"}, 0, 26, 0, 16, "^7To import a build, enter URL or code here:") + self.controls.generateCodeNote = new("LabelControl", {"TOPLEFT",self.controls.generateCodeOut,"BOTTOMLEFT"}, {0, 4, 0, 14}, "^7Note: this code can be very long; you can use 'Share' to shrink it.") + self.controls.importCodeHeader = new("LabelControl", {"TOPLEFT",self.controls.generateCodeNote,"BOTTOMLEFT"}, {0, 26, 0, 16}, "^7To import a build, enter URL or code here:") local importCodeHandle = function (buf) self.importCodeSite = nil @@ -307,21 +307,21 @@ You can get this from your web browser's cookies while logged into the Path of E end end - self.controls.importCodeIn = new("EditControl", {"TOPLEFT",self.controls.importCodeHeader,"BOTTOMLEFT"}, 0, 4, 328, 20, "", nil, nil, nil, importCodeHandle, nil, nil, true) + self.controls.importCodeIn = new("EditControl", {"TOPLEFT",self.controls.importCodeHeader,"BOTTOMLEFT"}, {0, 4, 328, 20}, "", nil, nil, nil, importCodeHandle, nil, nil, true) self.controls.importCodeIn.enterFunc = function() if self.importCodeValid then self.controls.importCodeGo.onClick() end end - self.controls.importCodeState = new("LabelControl", {"LEFT",self.controls.importCodeIn,"RIGHT"}, 8, 0, 0, 16) + self.controls.importCodeState = new("LabelControl", {"LEFT",self.controls.importCodeIn,"RIGHT"}, {8, 0, 0, 16}) self.controls.importCodeState.label = function() return self.importCodeDetail or "" end - self.controls.importCodeMode = new("DropDownControl", {"TOPLEFT",self.controls.importCodeIn,"BOTTOMLEFT"}, 0, 4, 160, 20, { "Import to this build", "Import to a new build" }) + self.controls.importCodeMode = new("DropDownControl", {"TOPLEFT",self.controls.importCodeIn,"BOTTOMLEFT"}, {0, 4, 160, 20}, { "Import to this build", "Import to a new build" }) self.controls.importCodeMode.enabled = function() return self.build.dbFileName and self.importCodeValid end - self.controls.importCodeGo = new("ButtonControl", {"LEFT",self.controls.importCodeMode,"RIGHT"}, 8, 0, 160, 20, "Import", function() + self.controls.importCodeGo = new("ButtonControl", {"LEFT",self.controls.importCodeMode,"RIGHT"}, {8, 0, 160, 20}, "Import", function() if self.importCodeSite and not self.importCodeXML then self.importCodeFetching = true local selectedWebsite = buildSites.websiteList[self.importCodeSite] @@ -411,7 +411,7 @@ function ImportTabClass:DownloadCharacterList() accountName = self.controls.accountName.buf:gsub("^[%s?]+", ""):gsub("[%s?]+$", ""):gsub("%s", "+") end local sessionID = #self.controls.sessionInput.buf == 32 and self.controls.sessionInput.buf or (main.gameAccounts[accountName] and main.gameAccounts[accountName].sessionID) - launch:DownloadPage(realm.hostName.."character-window/get-characters?accountName="..accountName.."&realm="..realm.realmCode, function(response, errMsg) + launch:DownloadPage(realm.hostName.."character-window/get-characters?accountName="..accountName:gsub("-", "%%23"):gsub("#", "%%23").."&realm="..realm.realmCode, function(response, errMsg) if errMsg == "Response code: 401" then self.charImportStatus = colorCodes.NEGATIVE.."Sign-in is required." self.charImportMode = "GETSESSIONID" @@ -443,7 +443,7 @@ function ImportTabClass:DownloadCharacterList() end -- GGG's character API has an issue where for /get-characters the account name is not case-sensitive, but for /get-passive-skills and /get-items it is. -- This workaround grabs the profile page and extracts the correct account name from one of the URLs. - launch:DownloadPage(realm.hostName..realm.profileURL..accountName, function(response, errMsg) + launch:DownloadPage(realm.hostName..realm.profileURL..accountName:gsub("#", "%%23"), function(response, errMsg) if errMsg then self.charImportStatus = colorCodes.NEGATIVE.."Error retrieving character list, try again ("..errMsg:gsub("\n"," ")..")" self.charImportMode = "GETACCOUNTNAME" @@ -455,6 +455,7 @@ function ImportTabClass:DownloadCharacterList() self.charImportMode = "GETSESSIONID" return end + realAccountName = realAccountName:gsub("-", "#") self.controls.accountName:SetText(realAccountName) accountName = realAccountName self.charImportStatus = "Character list successfully retrieved." @@ -516,7 +517,7 @@ function ImportTabClass:BuildCharacterList(league) classColor = colorCodes["SHADOW"] elseif (charClass == "Gladiator" or charClass == "Slayer" or charClass == "Champion") then classColor = colorCodes["DUELIST"] - elseif (charClass == "Raider" or charClass == "Pathfinder" or charClass == "Deadeye") then + elseif (charClass == "Raider" or charClass == "Pathfinder" or charClass == "Deadeye" or charClass == "Warden") then classColor = colorCodes["RANGER"] elseif (charClass == "Juggernaut" or charClass == "Berserker" or charClass == "Chieftain") then classColor = colorCodes["MARAUDER"] @@ -558,11 +559,11 @@ function ImportTabClass:SaveAccountHistory() if not historyList[self.controls.accountName.buf] then t_insert(historyList, self.controls.accountName.buf) historyList[self.controls.accountName.buf] = true - self.controls.accountHistory:SelByValue(self.controls.accountName.buf) table.sort(historyList, function(a,b) return a:lower() < b:lower() end) self.controls.accountHistory:CheckDroppedWidth(true) + self.controls.accountHistory:SelByValue(self.controls.accountName.buf) end end @@ -574,7 +575,7 @@ function ImportTabClass:DownloadPassiveTree() local sessionID = #self.controls.sessionInput.buf == 32 and self.controls.sessionInput.buf or (main.gameAccounts[accountName] and main.gameAccounts[accountName].sessionID) local charSelect = self.controls.charSelect local charData = charSelect.list[charSelect.selIndex].char - launch:DownloadPage(realm.hostName.."character-window/get-passive-skills?accountName="..accountName.."&character="..charData.name.."&realm="..realm.realmCode, function(response, errMsg) + launch:DownloadPage(realm.hostName.."character-window/get-passive-skills?accountName="..accountName:gsub("#", "%%23").."&character="..charData.name.."&realm="..realm.realmCode, function(response, errMsg) self.charImportMode = "SELECTCHAR" if errMsg then self.charImportStatus = colorCodes.NEGATIVE.."Error importing character data, try again ("..errMsg:gsub("\n"," ")..")" @@ -596,7 +597,7 @@ function ImportTabClass:DownloadItems() local sessionID = #self.controls.sessionInput.buf == 32 and self.controls.sessionInput.buf or (main.gameAccounts[accountName] and main.gameAccounts[accountName].sessionID) local charSelect = self.controls.charSelect local charData = charSelect.list[charSelect.selIndex].char - launch:DownloadPage(realm.hostName.."character-window/get-items?accountName="..accountName.."&character="..charData.name.."&realm="..realm.realmCode, function(response, errMsg) + launch:DownloadPage(realm.hostName.."character-window/get-items?accountName="..accountName:gsub("#", "%%23").."&character="..charData.name.."&realm="..realm.realmCode, function(response, errMsg) self.charImportMode = "SELECTCHAR" if errMsg then self.charImportStatus = colorCodes.NEGATIVE.."Error importing character data, try again ("..errMsg:gsub("\n"," ")..")" diff --git a/src/Classes/Item.lua b/src/Classes/Item.lua index 7897b9cca0..fe89657e7a 100644 --- a/src/Classes/Item.lua +++ b/src/Classes/Item.lua @@ -298,7 +298,7 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) self.rawLines = { } -- Find non-blank lines and trim whitespace for line in raw:gmatch("%s*([^\n]*%S)") do - t_insert(self.rawLines, line) + t_insert(self.rawLines, line) end local mode = rarity and "GAME" or "WIKI" local l = 1 @@ -679,11 +679,10 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) self.affixes = (self.base.subType and data.itemMods[self.base.type..self.base.subType]) or data.itemMods[self.base.type] or data.itemMods.Item - if self.base.weapon then - self.enchantments = data.enchantments["Weapon"] - elseif self.base.flask then - self.enchantments = data.enchantments["Flask"] + if self.base.flask then if self.base.utility_flask then + self.enchantments = data.enchantments["UtilityFlask"] + else self.enchantments = data.enchantments["Flask"] end else @@ -739,7 +738,13 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) end local lineLower = line:lower() - if lineLower == "this item can be anointed by cassia" then + if lineLower == "implicit modifiers cannot be changed" then + self.implicitsCannotBeChanged = true + elseif lineLower:match(" prefix modifiers? allowed") then + self.prefixes.limit = (self.prefixes.limit or 0) + (tonumber(lineLower:match("%+(%d+) prefix modifiers? allowed")) or 0) - (tonumber(lineLower:match("%-(%d+) prefix modifiers? allowed")) or 0) + elseif lineLower:match(" suffix modifiers? allowed") then + self.suffixes.limit = (self.suffixes.limit or 0) + (tonumber(lineLower:match("%+(%d+) suffix modifiers? allowed")) or 0) - (tonumber(lineLower:match("%-(%d+) suffix modifiers? allowed")) or 0) + elseif lineLower == "this item can be anointed by cassia" then self.canBeAnointed = true elseif lineLower == "can have a second enchantment modifier" then self.canHaveTwoEnchants = true @@ -827,15 +832,26 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) if not self.affixes then self.crafted = false elseif self.rarity == "MAGIC" then - self.affixLimit = 2 + if self.prefixes.limit or self.suffixes.limit then + self.prefixes.limit = m_max(m_min((self.prefixes.limit or 0) + 1, 2), 0) + self.suffixes.limit = m_max(m_min((self.suffixes.limit or 0) + 1, 2), 0) + self.affixLimit = self.prefixes.limit + self.suffixes.limit + else + self.affixLimit = 2 + end elseif self.rarity == "RARE" then self.affixLimit = ((self.type == "Jewel" and not (self.base.subType == "Abyss" and self.corrupted)) and 4 or 6) + if self.prefixes.limit or self.suffixes.limit then + self.prefixes.limit = m_max(m_min((self.prefixes.limit or 0) + self.affixLimit / 2, self.affixLimit), 0) + self.suffixes.limit = m_max(m_min((self.suffixes.limit or 0) + self.affixLimit / 2, self.affixLimit), 0) + self.affixLimit = self.prefixes.limit + self.suffixes.limit + end else self.crafted = false end if self.crafted then for _, list in ipairs({self.prefixes,self.suffixes}) do - for i = 1, self.affixLimit/2 do + for i = 1, (list.limit or (self.affixLimit / 2)) do if not list[i] then list[i] = { modId = "None" } elseif list[i].modId ~= "None" and not self.affixes[list[i].modId] then @@ -930,6 +946,12 @@ function ItemClass:GetModSpawnWeight(mod, includeTags, excludeTags) break end end + for i, key in ipairs(mod.weightMultiplierKey or {}) do + if (self.base.tags[key] or (includeTags and includeTags[key]) or HasInfluenceTag(key)) and not (excludeTags and excludeTags[key]) then + weight = weight * mod.weightMultiplierVal[i] / 100 + break + end + end end return weight end @@ -1164,7 +1186,7 @@ function ItemClass:Craft() self.requirements.level = self.base.req.level local statOrder = { } for _, list in ipairs({self.prefixes,self.suffixes}) do - for i = 1, self.affixLimit / 2 do + for i = 1, (list.limit or (self.affixLimit / 2)) do local affix = list[i] if not affix then list[i] = { modId = "None" } @@ -1172,9 +1194,9 @@ function ItemClass:Craft() local mod = self.affixes[affix.modId] if mod then if mod.type == "Prefix" then - self.namePrefix = mod.affix .. " " + self.namePrefix = mod.affix .. " " .. self.namePrefix elseif mod.type == "Suffix" then - self.nameSuffix = " " .. mod.affix + self.nameSuffix = self.nameSuffix .. " " .. mod.affix end self.requirements.level = m_max(self.requirements.level or 0, m_floor(mod.level * 0.8)) local rangeScalar = getCatalystScalar(self.catalyst, mod.modTags, self.catalystQuality) @@ -1331,6 +1353,7 @@ function ItemClass:BuildModListForSlotNum(baseList, slotNum) weaponData.AttackRate = round(self.base.weapon.AttackRateBase * (1 + weaponData.AttackSpeedInc / 100), 2) weaponData.rangeBonus = calcLocal(modList, "WeaponRange", "BASE", 0) + 10 * calcLocal(modList, "WeaponRangeMetre", "BASE", 0) + m_floor(self.quality / 10 * calcLocal(modList, "AlternateQualityLocalWeaponRangePer10Quality", "BASE", 0)) weaponData.range = self.base.weapon.Range + weaponData.rangeBonus + local LocalIncEle = calcLocal(modList, "LocalElementalDamage", "INC", 0) for _, dmgType in pairs(dmgTypeList) do local min = (self.base.weapon[dmgType.."Min"] or 0) + calcLocal(modList, dmgType.."Min", "BASE", 0) local max = (self.base.weapon[dmgType.."Max"] or 0) + calcLocal(modList, dmgType.."Max", "BASE", 0) @@ -1342,6 +1365,10 @@ function ItemClass:BuildModListForSlotNum(baseList, slotNum) end min = round(min * (1 + physInc / 100) * (1 + qualityScalar / 100)) max = round(max * (1 + physInc / 100) * (1 + qualityScalar / 100)) + elseif dmgType ~= "Physical" and dmgType ~= "Chaos" then + local localInc = calcLocal(modList, "Local"..dmgType.."Damage", "INC", 0) + LocalIncEle + min = round(min * (1 + localInc / 100)) + max = round(max * (1 + localInc / 100)) end if min > 0 and max > 0 then weaponData[dmgType.."Min"] = min @@ -1677,11 +1704,11 @@ function ItemClass:BuildModList() if self.sockets then for i, socket in ipairs(self.sockets) do if socket.color ~= "A" then - t_insert(newSockets, socket) - group = socket.group if #newSockets >= self.selectableSocketCount then break end + t_insert(newSockets, socket) + group = socket.group end end end diff --git a/src/Classes/ItemDBControl.lua b/src/Classes/ItemDBControl.lua index e0a4a35282..53f049af12 100644 --- a/src/Classes/ItemDBControl.lua +++ b/src/Classes/ItemDBControl.lua @@ -10,8 +10,8 @@ local m_max = math.max local m_floor = math.floor -local ItemDBClass = newClass("ItemDBControl", "ListControl", function(self, anchor, x, y, width, height, itemsTab, db, dbType) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", false) +local ItemDBClass = newClass("ItemDBControl", "ListControl", function(self, anchor, rect, itemsTab, db, dbType) + self.ListControl(anchor, rect, 16, "VERTICAL", false) self.itemsTab = itemsTab self.db = db self.dbType = dbType @@ -28,31 +28,30 @@ local ItemDBClass = newClass("ItemDBControl", "ListControl", function(self, anch self.typeList = { "Any type", "Armour", "Jewellery", "One Handed Melee", "Two Handed Melee" } self.slotList = { "Any slot", "Weapon 1", "Weapon 2", "Helmet", "Body Armour", "Gloves", "Boots", "Amulet", "Ring", "Belt", "Jewel" } local baseY = dbType == "RARE" and -22 or -62 - self.controls.slot = new("DropDownControl", {"BOTTOMLEFT",self,"TOPLEFT"}, 0, baseY, 179, 18, self.slotList, function(index, value) + self.controls.slot = new("DropDownControl", {"BOTTOMLEFT",self,"TOPLEFT"}, {0, baseY, 179, 18}, self.slotList, function(index, value) self.listBuildFlag = true end) - self.controls.type = new("DropDownControl", {"LEFT",self.controls.slot,"RIGHT"}, 2, 0, 179, 18, self.typeList, function(index, value) + self.controls.type = new("DropDownControl", {"LEFT",self.controls.slot,"RIGHT"}, {2, 0, 179, 18}, self.typeList, function(index, value) self.listBuildFlag = true end) if dbType == "UNIQUE" then - self.controls.sort = new("DropDownControl", {"BOTTOMLEFT",self,"TOPLEFT"}, 0, baseY + 20, 179, 18, self.sortDropList, function(index, value) + self.controls.sort = new("DropDownControl", {"BOTTOMLEFT",self,"TOPLEFT"}, {0, baseY + 20, 179, 18}, self.sortDropList, function(index, value) self:SetSortMode(value.sortMode) - GlobalCache.useFullDPS = value.sortMode == "FullDPS" end) - self.controls.league = new("DropDownControl", {"LEFT",self.controls.sort,"RIGHT"}, 2, 0, 179, 18, self.leagueList, function(index, value) + self.controls.league = new("DropDownControl", {"LEFT",self.controls.sort,"RIGHT"}, {2, 0, 179, 18}, self.leagueList, function(index, value) self.listBuildFlag = true end) - self.controls.requirement = new("DropDownControl", {"LEFT",self.controls.sort,"BOTTOMLEFT"}, 0, 11, 179, 18, { "Any requirements", "Current level", "Current attributes", "Current useable" }, function(index, value) + self.controls.requirement = new("DropDownControl", {"LEFT",self.controls.sort,"BOTTOMLEFT"}, {0, 11, 179, 18}, { "Any requirements", "Current level", "Current attributes", "Current useable" }, function(index, value) self.listBuildFlag = true end) - self.controls.obtainable = new("DropDownControl", {"LEFT",self.controls.requirement,"RIGHT"}, 2, 0, 179, 18, { "Obtainable", "Any source", "Unobtainable", "Vendor Recipe", "Upgraded", "Boss Item", "Corruption"}, function(index, value) + self.controls.obtainable = new("DropDownControl", {"LEFT",self.controls.requirement,"RIGHT"}, {2, 0, 179, 18}, { "Obtainable", "Any source", "Unobtainable", "Vendor Recipe", "Upgraded", "Boss Item", "Corruption"}, function(index, value) self.listBuildFlag = true end) end - self.controls.search = new("EditControl", {"BOTTOMLEFT",self,"TOPLEFT"}, 0, -2, 258, 18, "", "Search", "%c", 100, function() + self.controls.search = new("EditControl", {"BOTTOMLEFT",self,"TOPLEFT"}, {0, -2, 258, 18}, "", "Search", "%c", 100, function() self.listBuildFlag = true end, nil, nil, true) - self.controls.searchMode = new("DropDownControl", {"LEFT",self.controls.search,"RIGHT"}, 2, 0, 100, 18, { "Anywhere", "Names", "Modifiers" }, function(index, value) + self.controls.searchMode = new("DropDownControl", {"LEFT",self.controls.search,"RIGHT"}, {2, 0, 100, 18}, { "Anywhere", "Names", "Modifiers" }, function(index, value) self.listBuildFlag = true end) self:BuildSortOrder() @@ -224,15 +223,14 @@ function ItemDBClass:ListBuilder() end if self.sortDetail and self.sortDetail.stat then -- stat-based + local useFullDPS = self.sortDetail.stat == "FullDPS" local start = GetTime() local calcFunc, calcBase = self.itemsTab.build.calcsTab:GetMiscCalculator(self.build) - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 for itemIndex, item in ipairs(list) do item.measuredPower = 0 for slotName, slot in pairs(self.itemsTab.slots) do if self.itemsTab:IsItemValidForSlot(item, slotName) and not slot.inactive and (not slot.weaponSet or slot.weaponSet == (self.itemsTab.activeItemSet.useSecondWeaponSet and 2 or 1)) then - local output = calcFunc(item.base.flask and { toggleFlask = item } or item.base.tincture and { toggleTincture = item } or { repSlotName = slotName, repItem = item }, { nodeAlloc = true, requirementsGems = true }) + local output = calcFunc(item.base.flask and { toggleFlask = item } or item.base.tincture and { toggleTincture = item } or { repSlotName = slotName, repItem = item }, useFullDPS) local measuredPower = output.Minion and output.Minion[self.sortMode] or output[self.sortMode] or 0 if self.sortDetail.transform then measuredPower = self.sortDetail.transform(measuredPower) @@ -247,7 +245,6 @@ function ItemDBClass:ListBuilder() start = now end end - GlobalCache.useFullDPS = storedGlobalCacheDPSView end table.sort(list, function(a, b) diff --git a/src/Classes/ItemListControl.lua b/src/Classes/ItemListControl.lua index f3bce38c19..53f9fde103 100644 --- a/src/Classes/ItemListControl.lua +++ b/src/Classes/ItemListControl.lua @@ -6,19 +6,19 @@ local pairs = pairs local t_insert = table.insert -local ItemListClass = newClass("ItemListControl", "ListControl", function(self, anchor, x, y, width, height, itemsTab, forceTooltip) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", true, itemsTab.itemOrderList, forceTooltip) +local ItemListClass = newClass("ItemListControl", "ListControl", function(self, anchor, rect, itemsTab, forceTooltip) + self.ListControl(anchor, rect, 16, "VERTICAL", true, itemsTab.itemOrderList, forceTooltip) self.itemsTab = itemsTab self.label = "^7All items:" self.defaultText = "^x7F7F7FThis is the list of items that have been added to this build.\nYou can add items to this list by dragging them from\none of the other lists, or by clicking 'Add to build' when\nviewing an item." self.dragTargetList = { } - self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, 0, -2, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, {0, -2, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() return self.selValue ~= nil end - self.controls.deleteAll = new("ButtonControl", {"RIGHT",self.controls.delete,"LEFT"}, -4, 0, 70, 18, "Delete All", function() + self.controls.deleteAll = new("ButtonControl", {"RIGHT",self.controls.delete,"LEFT"}, {-4, 0, 70, 18}, "Delete All", function() main:OpenConfirmPopup("Delete All", "Are you sure you want to delete all items in this build?", "Delete", function() for _, slot in pairs(itemsTab.slots) do slot:SetSelItemId(0) @@ -40,7 +40,7 @@ local ItemListClass = newClass("ItemListControl", "ListControl", function(self, self.controls.deleteAll.enabled = function() return #self.list > 0 end - self.controls.deleteUnused = new("ButtonControl", {"RIGHT",self.controls.deleteAll,"LEFT"}, -4, 0, 100, 18, "Delete Unused", function() + self.controls.deleteUnused = new("ButtonControl", {"RIGHT",self.controls.deleteAll,"LEFT"}, {-4, 0, 100, 18}, "Delete Unused", function() local delList = {} for _, itemId in pairs(self.list) do if not itemsTab:GetEquippedSlotForItem(itemsTab.items[itemId]) and not self:FindEquippedAbyssJewel(itemId, false) and not self:FindSocketedJewel(itemId, false) then @@ -62,7 +62,7 @@ local ItemListClass = newClass("ItemListControl", "ListControl", function(self, self.controls.deleteUnused.enabled = function() return #self.list > 0 end - self.controls.sort = new("ButtonControl", {"RIGHT",self.controls.deleteUnused,"LEFT"}, -4, 0, 60, 18, "Sort", function() + self.controls.sort = new("ButtonControl", {"RIGHT",self.controls.deleteUnused,"LEFT"}, {-4, 0, 60, 18}, "Sort", function() itemsTab:SortItemList() end) end) diff --git a/src/Classes/ItemSetListControl.lua b/src/Classes/ItemSetListControl.lua index 8c1aad1b8f..0292026aba 100644 --- a/src/Classes/ItemSetListControl.lua +++ b/src/Classes/ItemSetListControl.lua @@ -8,10 +8,10 @@ local t_remove = table.remove local m_max = math.max local s_format = string.format -local ItemSetListClass = newClass("ItemSetListControl", "ListControl", function(self, anchor, x, y, width, height, itemsTab) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", true, itemsTab.itemSetOrderList) +local ItemSetListClass = newClass("ItemSetListControl", "ListControl", function(self, anchor, rect, itemsTab) + self.ListControl(anchor, rect, 16, "VERTICAL", true, itemsTab.itemSetOrderList) self.itemsTab = itemsTab - self.controls.copy = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, 2, -4, 60, 18, "Copy", function() + self.controls.copy = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, {2, -4, 60, 18}, "Copy", function() local newSet = copyTable(itemsTab.itemSets[self.selValue]) newSet.id = 1 while itemsTab.itemSets[newSet.id] do @@ -23,19 +23,19 @@ local ItemSetListClass = newClass("ItemSetListControl", "ListControl", function( self.controls.copy.enabled = function() return self.selValue ~= nil end - self.controls.delete = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, 4, 0, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, {4, 0, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() return self.selValue ~= nil and #self.list > 1 end - self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, -2, -4, 60, 18, "Rename", function() + self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, {-2, -4, 60, 18}, "Rename", function() self:RenameSet(itemsTab.itemSets[self.selValue]) end) self.controls.rename.enabled = function() return self.selValue ~= nil end - self.controls.new = new("ButtonControl", {"RIGHT",self.controls.rename,"LEFT"}, -4, 0, 60, 18, "New", function() + self.controls.new = new("ButtonControl", {"RIGHT",self.controls.rename,"LEFT"}, {-4, 0, 60, 18}, "New", function() local newSet = itemsTab:NewItemSet() self:RenameSet(newSet, true) end) @@ -43,11 +43,11 @@ end) function ItemSetListClass:RenameSet(itemSet, addOnName) local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter name for this item set:") - controls.edit = new("EditControl", nil, 0, 40, 350, 20, itemSet.title, nil, nil, 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter name for this item set:") + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, itemSet.title, nil, nil, 100, function(buf) controls.save.enabled = buf:match("%S") end) - controls.save = new("ButtonControl", nil, -45, 70, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, 70, 80, 20}, "Save", function() itemSet.title = controls.edit.buf self.itemsTab.modFlag = true if addOnName then @@ -60,7 +60,7 @@ function ItemSetListClass:RenameSet(itemSet, addOnName) main:ClosePopup() end) controls.save.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() if addOnName then self.itemsTab.itemSets[itemSet.id] = nil end diff --git a/src/Classes/ItemSlotControl.lua b/src/Classes/ItemSlotControl.lua index 62e810f50b..596f09d207 100644 --- a/src/Classes/ItemSlotControl.lua +++ b/src/Classes/ItemSlotControl.lua @@ -8,7 +8,7 @@ local t_insert = table.insert local m_min = math.min local ItemSlotClass = newClass("ItemSlotControl", "DropDownControl", function(self, anchor, x, y, itemsTab, slotName, slotLabel, nodeId) - self.DropDownControl(anchor, x, y, 310, 20, { }, function(index, value) + self.DropDownControl(anchor, {x, y, 310, 20}, { }, function(index, value) if self.items[index] ~= self.selItemId then self:SetSelItemId(self.items[index]) itemsTab:PopulateSlots() @@ -29,7 +29,7 @@ local ItemSlotClass = newClass("ItemSlotControl", "DropDownControl", function(se self.slotName = slotName self.slotNum = tonumber(slotName:match("%d+$") or slotName:match("%d+")) if slotName:match("Flask") then - self.controls.activate = new("CheckBoxControl", {"RIGHT",self,"LEFT"}, -2, 0, 20, nil, function(state) + self.controls.activate = new("CheckBoxControl", {"RIGHT",self,"LEFT"}, {-2, 0, 20}, nil, function(state) self.active = state itemsTab.activeItemSet[self.slotName].active = state itemsTab:AddUndoState() diff --git a/src/Classes/ItemsTab.lua b/src/Classes/ItemsTab.lua index fdc24f5406..9e35f5dab0 100644 --- a/src/Classes/ItemsTab.lua +++ b/src/Classes/ItemsTab.lua @@ -65,7 +65,7 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro self.tradeQuery = new("TradeQuery", self) -- Set selector - self.controls.setSelect = new("DropDownControl", {"TOPLEFT",self,"TOPLEFT"}, 96, 8, 216, 20, nil, function(index, value) + self.controls.setSelect = new("DropDownControl", {"TOPLEFT",self,"TOPLEFT"}, {96, 8, 216, 20}, nil, function(index, value) self:SetActiveItemSet(self.itemSetOrderList[index]) self:AddUndoState() end) @@ -79,13 +79,13 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro self:AddItemSetTooltip(tooltip, self.itemSets[self.itemSetOrderList[index]]) end end - self.controls.setLabel = new("LabelControl", {"RIGHT",self.controls.setSelect,"LEFT"}, -2, 0, 0, 16, "^7Item set:") - self.controls.setManage = new("ButtonControl", {"LEFT",self.controls.setSelect,"RIGHT"}, 4, 0, 90, 20, "Manage...", function() + self.controls.setLabel = new("LabelControl", {"RIGHT",self.controls.setSelect,"LEFT"}, {-2, 0, 0, 16}, "^7Item set:") + self.controls.setManage = new("ButtonControl", {"LEFT",self.controls.setSelect,"RIGHT"}, {4, 0, 90, 20}, "Manage...", function() self:OpenItemSetManagePopup() end) -- Price Items - self.controls.priceDisplayItem = new("ButtonControl", {"TOPLEFT",self,"TOPLEFT"}, 96, 32, 310, 20, "Trade for these items", function() + self.controls.priceDisplayItem = new("ButtonControl", {"TOPLEFT",self,"TOPLEFT"}, {96, 32, 310, 20}, "Trade for these items", function() self.tradeQuery:PriceItem() end) self.controls.priceDisplayItem.tooltipFunc = function(tooltip) @@ -98,7 +98,7 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro self.slots = { } self.orderedSlots = { } self.slotOrder = { } - self.slotAnchor = new("Control", {"TOPLEFT",self,"TOPLEFT"}, 96, 76, 310, 0) + self.slotAnchor = new("Control", {"TOPLEFT",self,"TOPLEFT"}, {96, 76, 310, 0}) local prevSlot = self.slotAnchor local function addSlot(slot) prevSlot = slot @@ -151,7 +151,7 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro end -- Passive tree dropdown controls - self.controls.specSelect = new("DropDownControl", {"TOPLEFT",prevSlot,"BOTTOMLEFT"}, 0, 8, 216, 20, nil, function(index, value) + self.controls.specSelect = new("DropDownControl", {"TOPLEFT",prevSlot,"BOTTOMLEFT"}, {0, 8, 216, 20}, nil, function(index, value) if self.build.treeTab.specList[index] then self.build.modFlag = true self.build.treeTab:SetActiveSpec(index) @@ -161,10 +161,10 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro return #self.controls.specSelect.list > 1 end prevSlot = self.controls.specSelect - self.controls.specButton = new("ButtonControl", {"LEFT",prevSlot,"RIGHT"}, 4, 0, 90, 20, "Manage...", function() + self.controls.specButton = new("ButtonControl", {"LEFT",prevSlot,"RIGHT"}, {4, 0, 90, 20}, "Manage...", function() self.build.treeTab:OpenSpecManagePopup() end) - self.controls.specLabel = new("LabelControl", {"RIGHT",prevSlot,"LEFT"}, -2, 0, 0, 16, "^7Passive tree:") + self.controls.specLabel = new("LabelControl", {"RIGHT",prevSlot,"LEFT"}, {-2, 0, 0, 16}, "^7Passive tree:") self.sockets = { } local socketOrder = { } @@ -181,8 +181,8 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro self.sockets[node.id] = socketControl addSlot(socketControl) end - self.controls.slotHeader = new("LabelControl", {"BOTTOMLEFT",self.slotAnchor,"TOPLEFT"}, 0, -4, 0, 16, "^7Equipped items:") - self.controls.weaponSwap1 = new("ButtonControl", {"BOTTOMRIGHT",self.slotAnchor,"TOPRIGHT"}, -20, -2, 18, 18, "I", function() + self.controls.slotHeader = new("LabelControl", {"BOTTOMLEFT",self.slotAnchor,"TOPLEFT"}, {0, -4, 0, 16}, "^7Equipped items:") + self.controls.weaponSwap1 = new("ButtonControl", {"BOTTOMRIGHT",self.slotAnchor,"TOPRIGHT"}, {-20, -2, 18, 18}, "I", function() if self.activeItemSet.useSecondWeaponSet then self.activeItemSet.useSecondWeaponSet = false self:AddUndoState() @@ -202,7 +202,7 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro self.controls.weaponSwap1.locked = function() return not self.activeItemSet.useSecondWeaponSet end - self.controls.weaponSwap2 = new("ButtonControl", {"BOTTOMRIGHT",self.slotAnchor,"TOPRIGHT"}, 0, -2, 18, 18, "II", function() + self.controls.weaponSwap2 = new("ButtonControl", {"BOTTOMRIGHT",self.slotAnchor,"TOPRIGHT"}, {0, -2, 18, 18}, "II", function() if not self.activeItemSet.useSecondWeaponSet then self.activeItemSet.useSecondWeaponSet = true self:AddUndoState() @@ -222,24 +222,24 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro self.controls.weaponSwap2.locked = function() return self.activeItemSet.useSecondWeaponSet end - self.controls.weaponSwapLabel = new("LabelControl", {"RIGHT",self.controls.weaponSwap1,"LEFT"}, -4, 0, 0, 14, "^7Weapon Set:") + self.controls.weaponSwapLabel = new("LabelControl", {"RIGHT",self.controls.weaponSwap1,"LEFT"}, {-4, 0, 0, 14}, "^7Weapon Set:") -- All items list if main.portraitMode then - self.controls.itemList = new("ItemListControl", {"TOPRIGHT",self.lastSlot,"BOTTOMRIGHT"}, 0, 0, 360, 308, self, true) + self.controls.itemList = new("ItemListControl", {"TOPRIGHT",self.lastSlot,"BOTTOMRIGHT"}, {0, 0, 360, 308}, self, true) else - self.controls.itemList = new("ItemListControl", {"TOPLEFT",self.controls.setManage,"TOPRIGHT"}, 20, 20, 360, 308, self, true) + self.controls.itemList = new("ItemListControl", {"TOPLEFT",self.controls.setManage,"TOPRIGHT"}, {20, 20, 360, 308}, self, true) end -- Database selector - self.controls.selectDBLabel = new("LabelControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, 0, 14, 0, 16, "^7Import from:") + self.controls.selectDBLabel = new("LabelControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, {0, 14, 0, 16}, "^7Import from:") self.controls.selectDBLabel.shown = function() return self.height < 980 end - self.controls.selectDB = new("DropDownControl", {"LEFT",self.controls.selectDBLabel,"RIGHT"}, 4, 0, 150, 18, { "Uniques", "Rare Templates" }) + self.controls.selectDB = new("DropDownControl", {"LEFT",self.controls.selectDBLabel,"RIGHT"}, {4, 0, 150, 18}, { "Uniques", "Rare Templates" }) -- Unique database - self.controls.uniqueDB = new("ItemDBControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, 0, 76, 360, function(c) return m_min(244, self.maxY - select(2, c:GetPos())) end, self, main.uniqueDB, "UNIQUE") + self.controls.uniqueDB = new("ItemDBControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, {0, 76, 360, function(c) return m_min(244, self.maxY - select(2, c:GetPos())) end}, self, main.uniqueDB, "UNIQUE") self.controls.uniqueDB.y = function() return self.controls.selectDBLabel:IsShown() and 118 or 96 end @@ -248,7 +248,7 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro end -- Rare template database - self.controls.rareDB = new("ItemDBControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, 0, 76, 360, function(c) return m_min(260, self.maxY - select(2, c:GetPos())) end, self, main.rareDB, "RARE") + self.controls.rareDB = new("ItemDBControl", {"TOPLEFT",self.controls.itemList,"BOTTOMLEFT"}, {0, 76, 360, function(c) return m_min(260, self.maxY - select(2, c:GetPos())) end}, self, main.rareDB, "RARE") self.controls.rareDB.y = function() return self.controls.selectDBLabel:IsShown() and 78 or 396 end @@ -256,16 +256,16 @@ local ItemsTabClass = newClass("ItemsTab", "UndoHandler", "ControlHost", "Contro return not self.controls.selectDBLabel:IsShown() or self.controls.selectDB.selIndex == 2 end -- Create/import item - self.controls.craftDisplayItem = new("ButtonControl", {"TOPLEFT",main.portraitMode and self.controls.setManage or self.controls.itemList,"TOPRIGHT"}, 20, main.portraitMode and 0 or -20, 120, 20, "Craft item...", function() + self.controls.craftDisplayItem = new("ButtonControl", {"TOPLEFT",main.portraitMode and self.controls.setManage or self.controls.itemList,"TOPRIGHT"}, {20, main.portraitMode and 0 or -20, 120, 20}, "Craft item...", function() self:CraftItem() end) self.controls.craftDisplayItem.shown = function() return self.displayItem == nil end - self.controls.newDisplayItem = new("ButtonControl", {"TOPLEFT",self.controls.craftDisplayItem,"TOPRIGHT"}, 8, 0, 120, 20, "Create custom...", function() + self.controls.newDisplayItem = new("ButtonControl", {"TOPLEFT",self.controls.craftDisplayItem,"TOPRIGHT"}, {8, 0, 120, 20}, "Create custom...", function() self:EditDisplayItemText() end) - self.controls.displayItemTip = new("LabelControl", {"TOPLEFT",self.controls.craftDisplayItem,"BOTTOMLEFT"}, 0, 8, 100, 16, + self.controls.displayItemTip = new("LabelControl", {"TOPLEFT",self.controls.craftDisplayItem,"BOTTOMLEFT"}, {0, 8, 100, 16}, [[^7Double-click an item from one of the lists, or copy and paste an item from in game (hover over the item and Ctrl+C) to view or edit @@ -278,31 +278,31 @@ drag it onto the slot. This will also add it to your build if it's from the unique/template list. If there's 2 slots an item can go in, holding Shift will put it in the second.]]) - self.controls.sharedItemList = new("SharedItemListControl", {"TOPLEFT",self.controls.craftDisplayItem, "BOTTOMLEFT"}, 0, 232, 340, 308, self, true) + self.controls.sharedItemList = new("SharedItemListControl", {"TOPLEFT",self.controls.craftDisplayItem, "BOTTOMLEFT"}, {0, 232, 340, 308}, self, true) -- Display item self.displayItemTooltip = new("Tooltip") self.displayItemTooltip.maxWidth = 458 - self.anchorDisplayItem = new("Control", {"TOPLEFT",main.portraitMode and self.controls.setManage or self.controls.itemList,"TOPRIGHT"}, 20, main.portraitMode and 0 or -20, 0, 0) + self.anchorDisplayItem = new("Control", {"TOPLEFT",main.portraitMode and self.controls.setManage or self.controls.itemList,"TOPRIGHT"}, {20, main.portraitMode and 0 or -20, 0, 0}) self.anchorDisplayItem.shown = function() return self.displayItem ~= nil end - self.controls.addDisplayItem = new("ButtonControl", {"TOPLEFT",self.anchorDisplayItem,"TOPLEFT"}, 0, 0, 100, 20, "", function() + self.controls.addDisplayItem = new("ButtonControl", {"TOPLEFT",self.anchorDisplayItem,"TOPLEFT"}, {0, 0, 100, 20}, "", function() self:AddDisplayItem() end) self.controls.addDisplayItem.label = function() return self.items[self.displayItem.id] and "Save" or "Add to build" end - self.controls.editDisplayItem = new("ButtonControl", {"LEFT",self.controls.addDisplayItem,"RIGHT"}, 8, 0, 60, 20, "Edit...", function() + self.controls.editDisplayItem = new("ButtonControl", {"LEFT",self.controls.addDisplayItem,"RIGHT"}, {8, 0, 60, 20}, "Edit...", function() self:EditDisplayItemText() end) - self.controls.removeDisplayItem = new("ButtonControl", {"LEFT",self.controls.editDisplayItem,"RIGHT"}, 8, 0, 60, 20, "Cancel", function() + self.controls.removeDisplayItem = new("ButtonControl", {"LEFT",self.controls.editDisplayItem,"RIGHT"}, {8, 0, 60, 20}, "Cancel", function() self:SetDisplayItem() end) -- Section: Variant(s) - self.controls.displayItemSectionVariant = new("Control", {"TOPLEFT",self.controls.addDisplayItem,"BOTTOMLEFT"}, 0, 8, 0, function() + self.controls.displayItemSectionVariant = new("Control", {"TOPLEFT",self.controls.addDisplayItem,"BOTTOMLEFT"}, {0, 8, 0, function() if not self.controls.displayItemVariant:IsShown() then return 0 end @@ -312,8 +312,8 @@ holding Shift will put it in the second.]]) (self.displayItem.hasAltVariant3 and 24 or 0) + (self.displayItem.hasAltVariant4 and 24 or 0) + (self.displayItem.hasAltVariant5 and 24 or 0)) - end) - self.controls.displayItemVariant = new("DropDownControl", {"TOPLEFT", self.controls.displayItemSectionVariant,"TOPLEFT"}, 0, 0, 300, 20, nil, function(index, value) + end}) + self.controls.displayItemVariant = new("DropDownControl", {"TOPLEFT", self.controls.displayItemSectionVariant,"TOPLEFT"}, {0, 0, 300, 20}, nil, function(index, value) self.displayItem.variant = index self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -323,7 +323,7 @@ holding Shift will put it in the second.]]) self.controls.displayItemVariant.shown = function() return self.displayItem.variantList and #self.displayItem.variantList > 1 end - self.controls.displayItemAltVariant = new("DropDownControl", {"TOPLEFT",self.controls.displayItemVariant,"BOTTOMLEFT"}, 0, 4, 300, 20, nil, function(index, value) + self.controls.displayItemAltVariant = new("DropDownControl", {"TOPLEFT",self.controls.displayItemVariant,"BOTTOMLEFT"}, {0, 4, 300, 20}, nil, function(index, value) self.displayItem.variantAlt = index self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -333,7 +333,7 @@ holding Shift will put it in the second.]]) self.controls.displayItemAltVariant.shown = function() return self.displayItem.hasAltVariant end - self.controls.displayItemAltVariant2 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemAltVariant,"BOTTOMLEFT"}, 0, 4, 300, 20, nil, function(index, value) + self.controls.displayItemAltVariant2 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemAltVariant,"BOTTOMLEFT"}, {0, 4, 300, 20}, nil, function(index, value) self.displayItem.variantAlt2 = index self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -343,7 +343,7 @@ holding Shift will put it in the second.]]) self.controls.displayItemAltVariant2.shown = function() return self.displayItem.hasAltVariant2 end - self.controls.displayItemAltVariant3 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemAltVariant2,"BOTTOMLEFT"}, 0, 4, 300, 20, nil, function(index, value) + self.controls.displayItemAltVariant3 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemAltVariant2,"BOTTOMLEFT"}, {0, 4, 300, 20}, nil, function(index, value) self.displayItem.variantAlt3 = index self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -353,7 +353,7 @@ holding Shift will put it in the second.]]) self.controls.displayItemAltVariant3.shown = function() return self.displayItem.hasAltVariant3 end - self.controls.displayItemAltVariant4 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemAltVariant3,"BOTTOMLEFT"}, 0, 4, 300, 20, nil, function(index, value) + self.controls.displayItemAltVariant4 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemAltVariant3,"BOTTOMLEFT"}, {0, 4, 300, 20}, nil, function(index, value) self.displayItem.variantAlt4 = index self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -363,7 +363,7 @@ holding Shift will put it in the second.]]) self.controls.displayItemAltVariant4.shown = function() return self.displayItem.hasAltVariant4 end - self.controls.displayItemAltVariant5 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemAltVariant4,"BOTTOMLEFT"}, 0, 4, 300, 20, nil, function(index, value) + self.controls.displayItemAltVariant5 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemAltVariant4,"BOTTOMLEFT"}, {0, 4, 300, 20}, nil, function(index, value) self.displayItem.variantAlt5 = index self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -375,11 +375,11 @@ holding Shift will put it in the second.]]) end -- Section: Sockets and Links - self.controls.displayItemSectionSockets = new("Control", {"TOPLEFT",self.controls.displayItemSectionVariant,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionSockets = new("Control", {"TOPLEFT",self.controls.displayItemSectionVariant,"BOTTOMLEFT"}, {0, 0, 0, function() return self.displayItem and self.displayItem.selectableSocketCount > 0 and 28 or 0 - end) + end}) for i = 1, 6 do - local drop = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionSockets,"TOPLEFT"}, (i-1) * 64, 0, 36, 20, socketDropList, function(index, value) + local drop = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionSockets,"TOPLEFT"}, {(i-1) * 64, 0, 36, 20}, socketDropList, function(index, value) self.displayItem.sockets[i].color = value.color self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -389,7 +389,7 @@ holding Shift will put it in the second.]]) end self.controls["displayItemSocket"..i] = drop if i < 6 then - local link = new("CheckBoxControl", {"LEFT",drop,"RIGHT"}, 4, 0, 20, nil, function(state) + local link = new("CheckBoxControl", {"LEFT",drop,"RIGHT"}, {4, 0, 20}, nil, function(state) if state and self.displayItem.sockets[i].group ~= self.displayItem.sockets[i+1].group then for s = i + 1, #self.displayItem.sockets do self.displayItem.sockets[s].group = self.displayItem.sockets[s].group - 1 @@ -408,7 +408,7 @@ holding Shift will put it in the second.]]) self.controls["displayItemLink"..i] = link end end - self.controls.displayItemAddSocket = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionSockets,"TOPLEFT"}, function() return (#self.displayItem.sockets - self.displayItem.abyssalSocketCount) * 64 - 12 end, 0, 20, 20, "+", function() + self.controls.displayItemAddSocket = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionSockets,"TOPLEFT"}, {function() return (#self.displayItem.sockets - self.displayItem.abyssalSocketCount) * 64 - 12 end, 0, 20, 20}, "+", function() local insertIndex = #self.displayItem.sockets - self.displayItem.abyssalSocketCount + 1 t_insert(self.displayItem.sockets, insertIndex, { color = self.displayItem.defaultSocketColor, @@ -426,28 +426,28 @@ holding Shift will put it in the second.]]) end -- Section: Enchant / Anoint / Corrupt - self.controls.displayItemSectionEnchant = new("Control", {"TOPLEFT",self.controls.displayItemSectionSockets,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionEnchant = new("Control", {"TOPLEFT",self.controls.displayItemSectionSockets,"BOTTOMLEFT"}, {0, 0, 0, function() return (self.controls.displayItemEnchant:IsShown() or self.controls.displayItemEnchant2:IsShown() or self.controls.displayItemAnoint:IsShown() or self.controls.displayItemAnoint2:IsShown() or self.controls.displayItemCorrupt:IsShown() ) and 28 or 0 - end) - self.controls.displayItemEnchant = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionEnchant,"TOPLEFT"}, 0, 0, 160, 20, "Apply Enchantment...", function() + end}) + self.controls.displayItemEnchant = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionEnchant,"TOPLEFT"}, {0, 0, 160, 20}, "Apply Enchantment...", function() self:EnchantDisplayItem(1) end) self.controls.displayItemEnchant.shown = function() return self.displayItem and self.displayItem.enchantments end - self.controls.displayItemEnchant2 = new("ButtonControl", {"TOPLEFT",self.controls.displayItemEnchant,"TOPRIGHT",true}, 8, 0, 160, 20, "Apply Enchantment 2...", function() + self.controls.displayItemEnchant2 = new("ButtonControl", {"TOPLEFT",self.controls.displayItemEnchant,"TOPRIGHT",true}, {8, 0, 160, 20}, "Apply Enchantment 2...", function() self:EnchantDisplayItem(2) end) self.controls.displayItemEnchant2.shown = function() return self.displayItem and self.displayItem.enchantments and self.displayItem.canHaveTwoEnchants and #self.displayItem.enchantModLines > 0 end - self.controls.displayItemAnoint = new("ButtonControl", {"TOPLEFT",self.controls.displayItemEnchant2,"TOPRIGHT",true}, 8, 0, 100, 20, "Anoint...", function() + self.controls.displayItemAnoint = new("ButtonControl", {"TOPLEFT",self.controls.displayItemEnchant2,"TOPRIGHT",true}, {8, 0, 100, 20}, "Anoint...", function() self:AnointDisplayItem(1) end) self.controls.displayItemAnoint.shown = function() return self.displayItem and (self.displayItem.base.type == "Amulet" or self.displayItem.canBeAnointed) end - self.controls.displayItemAnoint2 = new("ButtonControl", {"TOPLEFT",self.controls.displayItemAnoint,"TOPRIGHT",true}, 8, 0, 100, 20, "Anoint 2...", function() + self.controls.displayItemAnoint2 = new("ButtonControl", {"TOPLEFT",self.controls.displayItemAnoint,"TOPRIGHT",true}, {8, 0, 100, 20}, "Anoint 2...", function() self:AnointDisplayItem(2) end) self.controls.displayItemAnoint2.shown = function() @@ -456,7 +456,7 @@ holding Shift will put it in the second.]]) self.displayItem.canHaveTwoEnchants and #self.displayItem.enchantModLines > 0 end - self.controls.displayItemAnoint3 = new("ButtonControl", {"TOPLEFT",self.controls.displayItemAnoint2,"TOPRIGHT",true}, 8, 0, 100, 20, "Anoint 3...", function() + self.controls.displayItemAnoint3 = new("ButtonControl", {"TOPLEFT",self.controls.displayItemAnoint2,"TOPRIGHT",true}, {8, 0, 100, 20}, "Anoint 3...", function() self:AnointDisplayItem(3) end) self.controls.displayItemAnoint3.shown = function() @@ -465,7 +465,7 @@ holding Shift will put it in the second.]]) self.displayItem.canHaveThreeEnchants and #self.displayItem.enchantModLines > 1 end - self.controls.displayItemAnoint4 = new("ButtonControl", {"TOPLEFT",self.controls.displayItemAnoint3,"TOPRIGHT",true}, 8, 0, 100, 20, "Anoint 4...", function() + self.controls.displayItemAnoint4 = new("ButtonControl", {"TOPLEFT",self.controls.displayItemAnoint3,"TOPRIGHT",true}, {8, 0, 100, 20}, "Anoint 4...", function() self:AnointDisplayItem(4) end) self.controls.displayItemAnoint4.shown = function() @@ -474,25 +474,28 @@ holding Shift will put it in the second.]]) self.displayItem.canHaveFourEnchants and #self.displayItem.enchantModLines > 2 end - self.controls.displayItemCorrupt = new("ButtonControl", {"TOPLEFT",self.controls.displayItemAnoint4,"TOPRIGHT",true}, 8, 10, 100, 20, "Corrupt...", function() + self.controls.displayItemCorrupt = new("ButtonControl", {"TOPLEFT",self.controls.displayItemAnoint4,"TOPRIGHT",true}, {8, 10, 100, 20}, "Corrupt...", function() self:CorruptDisplayItem("Corrupted") end) self.controls.displayItemCorrupt.shown = function() return self.displayItem and self.displayItem.corruptible end --[[ - self.controls.displayItemScourge = new("ButtonControl", {"TOPLEFT",self.controls.displayItemCorrupt,"TOPRIGHT",true}, 8, 0, 100, 20, "Scourge...", function() + self.controls.displayItemScourge = new("ButtonControl", {"TOPLEFT",self.controls.displayItemCorrupt,"TOPRIGHT",true}, {8, 0, 100, 20}, "Scourge...", function() self:CorruptDisplayItem("Scourge") end) self.controls.displayItemScourge.shown = function() return self.displayItem and self.displayItem.corruptible end --]] - self.controls.displayItemAddImplicit = new("ButtonControl", {"TOPLEFT",self.controls.displayItemCorrupt,"TOPRIGHT",true}, 8, 0, 120, 20, "Add Implicit...", function() + self.controls.displayItemAddImplicit = new("ButtonControl", {"TOPLEFT",self.controls.displayItemCorrupt,"TOPRIGHT",true}, {8, 0, 120, 20}, "Add Implicit...", function() self:AddImplicitToDisplayItem() end) self.controls.displayItemAddImplicit.shown = function() - return self.displayItem and self.displayItem.type ~= "Tincture" and (self.displayItem.corruptible or ((self.displayItem.type ~= "Flask" or self.displayItem.type ~= "Jewel") and (self.displayItem.rarity == "NORMAL" or self.displayItem.rarity == "MAGIC" or self.displayItem.rarity == "RARE"))) + return self.displayItem and + self.displayItem.type ~= "Tincture" and (self.displayItem.corruptible or ((self.displayItem.type ~= "Flask" and self.displayItem.type ~= "Jewel") and + (self.displayItem.rarity == "NORMAL" or self.displayItem.rarity == "MAGIC" or self.displayItem.rarity == "RARE"))) and + not self.displayItem.implicitsCannotBeChanged end -- Section: Influence dropdowns @@ -518,17 +521,17 @@ holding Shift will put it in the second.]]) self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() end - self.controls.displayItemSectionInfluence = new("Control", {"TOPLEFT",self.controls.displayItemSectionEnchant,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionInfluence = new("Control", {"TOPLEFT",self.controls.displayItemSectionEnchant,"BOTTOMLEFT"}, {0, 0, 0, function() return self.displayItem and self.displayItem.canBeInfluenced and 28 or 0 - end) - self.controls.displayItemInfluence = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionInfluence,"TOPRIGHT"}, 0, 0, 100, 20, influenceDisplayList, function(index, value) + end}) + self.controls.displayItemInfluence = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionInfluence,"TOPRIGHT"}, {0, 0, 100, 20}, influenceDisplayList, function(index, value) local otherIndex = self.controls.displayItemInfluence2.selIndex setDisplayItemInfluence({ index - 1, otherIndex - 1 }) end) self.controls.displayItemInfluence.shown = function() return self.displayItem and self.displayItem.canBeInfluenced end - self.controls.displayItemInfluence2 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemInfluence,"TOPRIGHT",true}, 8, 0, 100, 20, influenceDisplayList, function(index, value) + self.controls.displayItemInfluence2 = new("DropDownControl", {"TOPLEFT",self.controls.displayItemInfluence,"TOPRIGHT",true}, {8, 0, 100, 20}, influenceDisplayList, function(index, value) local otherIndex = self.controls.displayItemInfluence.selIndex setDisplayItemInfluence({ index - 1, otherIndex - 1 }) end) @@ -537,15 +540,15 @@ holding Shift will put it in the second.]]) end -- Section: Item Quality - self.controls.displayItemSectionQuality = new("Control", {"TOPLEFT",self.controls.displayItemSectionInfluence,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionQuality = new("Control", {"TOPLEFT",self.controls.displayItemSectionInfluence,"BOTTOMLEFT"}, {0, 0, 0, function() return (self.controls.displayItemQuality:IsShown() and self.controls.displayItemQualityEdit:IsShown()) and 28 or 0 - end) - self.controls.displayItemQuality = new("LabelControl", {"TOPLEFT",self.controls.displayItemSectionQuality,"TOPRIGHT"}, -4, 0, 0, 16, "^7Quality:") + end}) + self.controls.displayItemQuality = new("LabelControl", {"TOPLEFT",self.controls.displayItemSectionQuality,"TOPRIGHT"}, {-4, 0, 0, 16}, "^7Quality:") self.controls.displayItemQuality.shown = function() return self.displayItem and self.displayItem.quality and (self.displayItem.base.type ~= "Amulet" or self.displayItem.base.type ~= "Belt" or self.displayItem.base.type ~= "Jewel" or self.displayItem.base.type ~= "Quiver" or self.displayItem.base.type ~= "Ring") end - self.controls.displayItemQualityEdit = new("EditControl", {"LEFT",self.controls.displayItemQuality,"RIGHT"},2,0,60,20,nil,nil,"%D",2,function(buf) + self.controls.displayItemQualityEdit = new("EditControl", {"LEFT",self.controls.displayItemQuality,"RIGHT"}, {2, 0, 60, 20}, nil, nil, "%D", 2, function(buf) self.displayItem.quality = tonumber(buf) self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -555,10 +558,10 @@ holding Shift will put it in the second.]]) end -- Section: Catalysts - self.controls.displayItemSectionCatalyst = new("Control", {"TOPLEFT",self.controls.displayItemSectionQuality,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionCatalyst = new("Control", {"TOPLEFT",self.controls.displayItemSectionQuality,"BOTTOMLEFT"}, {0, 0, 0, function() return (self.controls.displayItemCatalyst:IsShown() or self.controls.displayItemCatalystQualityEdit:IsShown()) and 28 or 0 - end) - self.controls.displayItemCatalyst = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionCatalyst,"TOPRIGHT"}, 0, 0, 250, 20, + end}) + self.controls.displayItemCatalyst = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionCatalyst,"TOPRIGHT"}, {0, 0, 250, 20}, {"Catalyst","Abrasive (Attack)","Accelerating (Speed)","Fertile (Life & Mana)","Imbued (Caster)","Intrinsic (Attribute)","Noxious (Physical & Chaos Damage)", "Prismatic (Resistance)","Tempering (Defense)","Turbulent (Elemental)","Unstable (Critical)"}, function(index, value) @@ -580,7 +583,7 @@ holding Shift will put it in the second.]]) self.controls.displayItemCatalyst.shown = function() return self.displayItem and (self.displayItem.crafted or self.displayItem.hasModTags) and (self.displayItem.base.type == "Amulet" or self.displayItem.base.type == "Ring" or self.displayItem.base.type == "Belt") end - self.controls.displayItemCatalystQualityEdit = new("EditControl", {"LEFT",self.controls.displayItemCatalyst,"RIGHT"},2,0,60,20,nil,nil,"%D",2,function(buf) + self.controls.displayItemCatalystQualityEdit = new("EditControl", {"LEFT",self.controls.displayItemCatalyst,"RIGHT"}, {2, 0, 60, 20}, nil, nil, "%D", 2, function(buf) self.displayItem.catalystQuality = tonumber(buf) if self.displayItem.crafted then for i = 1, self.displayItem.affixLimit do @@ -597,10 +600,10 @@ holding Shift will put it in the second.]]) end -- Section: Cluster Jewel - self.controls.displayItemSectionClusterJewel = new("Control", {"TOPLEFT",self.controls.displayItemSectionCatalyst,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionClusterJewel = new("Control", {"TOPLEFT",self.controls.displayItemSectionCatalyst,"BOTTOMLEFT"}, {0, 0, 0, function() return self.controls.displayItemClusterJewelSkill:IsShown() and 52 or 0 - end) - self.controls.displayItemClusterJewelSkill = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionClusterJewel,"TOPLEFT"}, 0, 0, 300, 20, { }, function(index, value) + end}) + self.controls.displayItemClusterJewelSkill = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionClusterJewel,"TOPLEFT"}, {0, 0, 300, 20}, { }, function(index, value) self.displayItem.clusterJewelSkill = value.skillId self:CraftClusterJewel() end) { @@ -609,8 +612,8 @@ holding Shift will put it in the second.]]) end } - self.controls.displayItemClusterJewelNodeCountLabel = new("LabelControl", {"TOPLEFT",self.controls.displayItemClusterJewelSkill,"BOTTOMLEFT"}, 0, 7, 0, 14, "^7Added Passives:") - self.controls.displayItemClusterJewelNodeCount = new("SliderControl", {"LEFT",self.controls.displayItemClusterJewelNodeCountLabel,"RIGHT"}, 2, 0, 150, 20, function(val) + self.controls.displayItemClusterJewelNodeCountLabel = new("LabelControl", {"TOPLEFT",self.controls.displayItemClusterJewelSkill,"BOTTOMLEFT"}, {0, 7, 0, 14}, "^7Added Passives:") + self.controls.displayItemClusterJewelNodeCount = new("SliderControl", {"LEFT",self.controls.displayItemClusterJewelNodeCountLabel,"RIGHT"}, {2, 0, 150, 20}, function(val) local divVal = self.controls.displayItemClusterJewelNodeCount:GetDivVal() local clusterJewel = self.displayItem.clusterJewel self.displayItem.clusterJewelNodeCount = round(val * (clusterJewel.maxNodes - clusterJewel.minNodes) + clusterJewel.minNodes) @@ -618,7 +621,7 @@ holding Shift will put it in the second.]]) end) -- Section: Affix Selection - self.controls.displayItemSectionAffix = new("Control", {"TOPLEFT",self.controls.displayItemSectionClusterJewel,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionAffix = new("Control", {"TOPLEFT",self.controls.displayItemSectionClusterJewel,"BOTTOMLEFT"}, {0, 0, 0, function() if not self.displayItem or not self.displayItem.crafted then return 0 end @@ -632,7 +635,7 @@ holding Shift will put it in the second.]]) end end return h - end) + end}) for i = 1, 6 do local prev = self.controls["displayItemAffix"..(i-1)] or self.controls.displayItemSectionAffix local drop, slider @@ -676,7 +679,7 @@ holding Shift will put it in the second.]]) end return range end - drop = new("DropDownControl", {"TOPLEFT",prev,"TOPLEFT"}, i==1 and 40 or 0, 0, 418, 20, nil, function(index, value) + drop = new("DropDownControl", {"TOPLEFT",prev,"TOPLEFT"}, {i==1 and 40 or 0, 0, 418, 20}, nil, function(index, value) local affix = { modId = "None" } if value.modId then affix.modId = value.modId @@ -805,7 +808,7 @@ holding Shift will put it in the second.]]) drop.shown = function() return self.displayItem and self.displayItem.crafted and i <= self.displayItem.affixLimit end - slider = new("SliderControl", {"TOPLEFT",drop,"BOTTOMLEFT"}, 0, 2, 300, 16, function(val) + slider = new("SliderControl", {"TOPLEFT",drop,"BOTTOMLEFT"}, {0, 2, 300, 16}, function(val) local affix = self.displayItem[drop.outputTable][drop.outputIndex] local index, range = slider:GetDivVal() affix.modId = drop.list[drop.selIndex].modList[index] @@ -844,21 +847,21 @@ holding Shift will put it in the second.]]) end drop.slider = slider self.controls["displayItemAffix"..i] = drop - self.controls["displayItemAffixLabel"..i] = new("LabelControl", {"RIGHT",drop,"LEFT"}, -4, 0, 0, 14, function() + self.controls["displayItemAffixLabel"..i] = new("LabelControl", {"RIGHT",drop,"LEFT"}, {-4, 0, 0, 14}, function() return drop.outputTable == "prefixes" and "^7Prefix:" or "^7Suffix:" end) self.controls["displayItemAffixRange"..i] = slider - self.controls["displayItemAffixRangeLabel"..i] = new("LabelControl", {"RIGHT",slider,"LEFT"}, -4, 0, 0, 14, function() + self.controls["displayItemAffixRangeLabel"..i] = new("LabelControl", {"RIGHT",slider,"LEFT"}, {-4, 0, 0, 14}, function() return drop.selIndex > 1 and "^7Roll:" or "^x7F7F7FRoll:" end) end -- Section: Custom modifiers -- if either Custom or Crucible mod buttons are shown, create the control for the list of mods - self.controls.displayItemSectionCustom = new("Control", {"TOPLEFT",self.controls.displayItemSectionAffix,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionCustom = new("Control", {"TOPLEFT",self.controls.displayItemSectionAffix,"BOTTOMLEFT"}, {0, 0, 0, function() return (self.controls.displayItemAddCustom:IsShown() or self.controls.displayItemAddCrucible:IsShown()) and 28 + self.displayItem.customCount * 22 or 0 - end) - self.controls.displayItemAddCustom = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionCustom,"TOPLEFT"}, 0, 0, 120, 20, "Add modifier...", function() + end}) + self.controls.displayItemAddCustom = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionCustom,"TOPLEFT"}, {0, 0, 120, 20}, "Add modifier...", function() self:AddCustomModifierToDisplayItem() end) self.controls.displayItemAddCustom.shown = function() @@ -867,9 +870,9 @@ holding Shift will put it in the second.]]) -- Section: Crucible modifiers -- if the Add modifier button is not shown, take its place, otherwise move it to the right of it - self.controls.displayItemAddCrucible = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionCustom,"TOPLEFT"}, function() + self.controls.displayItemAddCrucible = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionCustom,"TOPLEFT"}, {function() return (self.controls.displayItemAddCustom:IsShown() and 128) or 0 - end, 0, 150, 20, "Add Crucible mod...", function() + end, 0, 150, 20}, "Add Crucible mod...", function() self:AddCrucibleModifierToDisplayItem() end) self.controls.displayItemAddCrucible.shown = function() @@ -877,16 +880,16 @@ holding Shift will put it in the second.]]) end -- Section: Modifier Range - self.controls.displayItemSectionRange = new("Control", {"TOPLEFT",self.controls.displayItemSectionCustom,"BOTTOMLEFT"}, 0, 0, 0, function() + self.controls.displayItemSectionRange = new("Control", {"TOPLEFT",self.controls.displayItemSectionCustom,"BOTTOMLEFT"}, {0, 0, 0, function() return self.displayItem.rangeLineList[1] and 28 or 0 - end) - self.controls.displayItemRangeLine = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionRange,"TOPLEFT"}, 0, 0, 350, 18, nil, function(index, value) + end}) + self.controls.displayItemRangeLine = new("DropDownControl", {"TOPLEFT",self.controls.displayItemSectionRange,"TOPLEFT"}, {0, 0, 350, 18}, nil, function(index, value) self.controls.displayItemRangeSlider.val = self.displayItem.rangeLineList[index].range end) self.controls.displayItemRangeLine.shown = function() return self.displayItem and self.displayItem.rangeLineList[1] ~= nil end - self.controls.displayItemRangeSlider = new("SliderControl", {"LEFT",self.controls.displayItemRangeLine,"RIGHT"}, 8, 0, 100, 18, function(val) + self.controls.displayItemRangeSlider = new("SliderControl", {"LEFT",self.controls.displayItemRangeLine,"RIGHT"}, {8, 0, 100, 18}, function(val) self.displayItem.rangeLineList[self.controls.displayItemRangeLine.selIndex].range = val self.displayItem:BuildAndParseRaw() self:UpdateDisplayItemTooltip() @@ -897,8 +900,8 @@ holding Shift will put it in the second.]]) self.controls.displayItemTooltipAnchor = new("Control", {"TOPLEFT",self.controls.displayItemSectionRange,"BOTTOMLEFT"}) -- Scroll bars - self.controls.scrollBarH = new("ScrollBarControl", nil, 0, 0, 0, 18, 100, "HORIZONTAL", true) - self.controls.scrollBarV = new("ScrollBarControl", nil, 0, 0, 18, 0, 100, "VERTICAL", true) + self.controls.scrollBarH = new("ScrollBarControl", nil, {0, 0, 0, 18}, 100, "HORIZONTAL", true) + self.controls.scrollBarV = new("ScrollBarControl", nil, {0, 0, 18, 0}, 100, "VERTICAL", true) -- Initialise drag target lists t_insert(self.controls.itemList.dragTargetList, self.controls.sharedItemList) @@ -1167,6 +1170,11 @@ function ItemsTabClass:Draw(viewPort, inputEvents) if event.type == "KeyDown" then if event.key == "v" and IsKeyDown("CTRL") then local newItem = Paste() + if newItem:find("{ ", 0, true) then + main:OpenConfirmPopup("Warning", "\"Advanced Item Descriptions\" (Ctrl+Alt+c) are unsupported.\n\nAbort paste?", "OK", function() + self:SetDisplayItem() + end) + end if newItem then self:CreateDisplayItemFromRaw(newItem, true) end @@ -1655,9 +1663,13 @@ end -- Update affix selection controls function ItemsTabClass:UpdateAffixControls() local item = self.displayItem - for i = 1, item.affixLimit/2 do - self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Prefix", "prefixes", i) - self:UpdateAffixControl(self.controls["displayItemAffix"..(i+item.affixLimit/2)], item, "Suffix", "suffixes", i) + local prefixLimit = item.prefixes.limit or (item.affixLimit / 2) + for i = 1, item.affixLimit do + if i <= prefixLimit then + self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Prefix", "prefixes", i) + else + self:UpdateAffixControl(self.controls["displayItemAffix"..i], item, "Suffix", "suffixes", i - prefixLimit) + end end -- The custom affixes may have had their indexes changed, so the custom control UI is also rebuilt so that it will -- reference the correct affix index. @@ -1668,7 +1680,7 @@ function ItemsTabClass:UpdateAffixControl(control, item, type, outputTable, outp local extraTags = { } local excludeGroups = { } for _, table in ipairs({"prefixes","suffixes"}) do - for index = 1, item.affixLimit/2 do + for index = 1, (item[table].limit or (item.affixLimit / 2)) do if index ~= outputIndex or table ~= outputTable then local mod = item.affixes[item[table][index] and item[table][index].modId] if mod then @@ -1785,9 +1797,9 @@ function ItemsTabClass:UpdateCustomControls() local line = itemLib.formatModLine(modLine) if line then if not self.controls["displayItemCustomModifierRemove"..i] then - self.controls["displayItemCustomModifierRemove"..i] = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionCustom,"TOPLEFT"}, 0, i * 22 + 4, 70, 20, "^7Remove") - self.controls["displayItemCustomModifier"..i] = new("LabelControl", {"LEFT",self.controls["displayItemCustomModifierRemove"..i],"RIGHT"}, 65, 0, 0, 16) - self.controls["displayItemCustomModifierLabel"..i] = new("LabelControl", {"LEFT",self.controls["displayItemCustomModifierRemove"..i],"RIGHT"}, 5, 0, 0, 16) + self.controls["displayItemCustomModifierRemove"..i] = new("ButtonControl", {"TOPLEFT",self.controls.displayItemSectionCustom,"TOPLEFT"}, {0, i * 22 + 4, 70, 20}, "^7Remove") + self.controls["displayItemCustomModifier"..i] = new("LabelControl", {"LEFT",self.controls["displayItemCustomModifierRemove"..i],"RIGHT"}, {65, 0, 0, 16}) + self.controls["displayItemCustomModifierLabel"..i] = new("LabelControl", {"LEFT",self.controls["displayItemCustomModifierRemove"..i],"RIGHT"}, {5, 0, 0, 16}) end self.controls["displayItemCustomModifierRemove"..i].shown = true local label = itemLib.formatModLine(modLine) @@ -1852,11 +1864,8 @@ function ItemsTabClass:AddModComparisonTooltip(tooltip, mod) newItem:BuildAndParseRaw() local calcFunc = self.build.calcsTab:GetMiscCalculator() - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local outputBase = calcFunc({ repSlotName = slotName, repItem = self.displayItem }, {}) - local outputNew = calcFunc({ repSlotName = slotName, repItem = newItem }, {}) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local outputBase = calcFunc({ repSlotName = slotName, repItem = self.displayItem }) + local outputNew = calcFunc({ repSlotName = slotName, repItem = newItem }) self.build:AddStatComparesToTooltip(tooltip, outputBase, outputNew, "\nAdding this mod will give: ") end @@ -1930,11 +1939,11 @@ end -- Opens the item set manager function ItemsTabClass:OpenItemSetManagePopup() local controls = { } - controls.setList = new("ItemSetListControl", nil, -155, 50, 300, 200, self) - controls.sharedList = new("SharedItemSetListControl", nil, 155, 50, 300, 200, self) + controls.setList = new("ItemSetListControl", nil, {-155, 50, 300, 200}, self) + controls.sharedList = new("SharedItemSetListControl", nil, {155, 50, 300, 200}, self) controls.setList.dragTargetList = { controls.sharedList } controls.sharedList.dragTargetList = { controls.setList } - controls.close = new("ButtonControl", nil, 0, 260, 90, 20, "Done", function() + controls.close = new("ButtonControl", nil, {0, 260, 90, 20}, "Done", function() main:ClosePopup() end) main:OpenPopup(630, 290, "Manage Item Sets", controls) @@ -1988,21 +1997,21 @@ function ItemsTabClass:CraftItem() item:BuildAndParseRaw() return item end - controls.rarityLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 50, 20, 0, 16, "Rarity:") - controls.rarity = new("DropDownControl", nil, -80, 20, 100, 18, rarityDropList) + controls.rarityLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {50, 20, 0, 16}, "Rarity:") + controls.rarity = new("DropDownControl", nil, {-80, 20, 100, 18}, rarityDropList) controls.rarity.selIndex = self.lastCraftRaritySel or 3 - controls.title = new("EditControl", nil, 70, 20, 190, 18, "", "Name") + controls.title = new("EditControl", nil, {70, 20, 190, 18}, "", "Name") controls.title.shown = function() return controls.rarity.selIndex >= 3 end - controls.typeLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 50, 45, 0, 16, "Type:") - controls.type = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 55, 45, 295, 18, self.build.data.itemBaseTypeList, function(index, value) + controls.typeLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {50, 45, 0, 16}, "Type:") + controls.type = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {55, 45, 295, 18}, self.build.data.itemBaseTypeList, function(index, value) controls.base.list = self.build.data.itemBaseLists[self.build.data.itemBaseTypeList[index]] controls.base.selIndex = 1 end) controls.type.selIndex = self.lastCraftTypeSel or 1 - controls.baseLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 50, 70, 0, 16, "Base:") - controls.base = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 55, 70, 200, 18, self.build.data.itemBaseLists[self.build.data.itemBaseTypeList[controls.type.selIndex]]) + controls.baseLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {50, 70, 0, 16}, "Base:") + controls.base = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {55, 70, 200, 18}, self.build.data.itemBaseLists[self.build.data.itemBaseTypeList[controls.type.selIndex]]) controls.base.selIndex = self.lastCraftBaseSel or 1 controls.base.tooltipFunc = function(tooltip, mode, index, value) tooltip:Clear() @@ -2010,7 +2019,7 @@ function ItemsTabClass:CraftItem() self:AddItemTooltip(tooltip, makeItem(value), nil, true) end end - controls.save = new("ButtonControl", nil, -45, 100, 80, 20, "Create", function() + controls.save = new("ButtonControl", nil, {-45, 100, 80, 20}, "Create", function() main:ClosePopup() local item = makeItem(controls.base.list[controls.base.selIndex]) self:SetDisplayItem(item) @@ -2021,7 +2030,7 @@ function ItemsTabClass:CraftItem() self.lastCraftTypeSel = controls.type.selIndex self.lastCraftBaseSel = controls.base.selIndex end) - controls.cancel = new("ButtonControl", nil, 45, 100, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 100, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(370, 130, "Craft Item", controls) @@ -2038,8 +2047,8 @@ function ItemsTabClass:EditDisplayItemText(alsoAddItem) return "Rarity: "..controls.rarity.list[controls.rarity.selIndex].rarity.."\n"..controls.edit.buf end end - controls.rarity = new("DropDownControl", nil, -190, 10, 100, 18, rarityDropList) - controls.edit = new("EditControl", nil, 0, 40, 480, 420, "", nil, "^%C\t\n", nil, nil, 14) + controls.rarity = new("DropDownControl", nil, {-190, 10, 100, 18}, rarityDropList) + controls.edit = new("EditControl", nil, {0, 40, 480, 420}, "", nil, "^%C\t\n", nil, nil, 14) if self.displayItem then controls.edit:SetText(self.displayItem:BuildRaw():gsub("Rarity: %w+\n","")) controls.rarity:SelByValue(self.displayItem.rarity, "rarity") @@ -2048,7 +2057,7 @@ function ItemsTabClass:EditDisplayItemText(alsoAddItem) end controls.edit.font = "FIXED" controls.edit.pasteFilter = sanitiseText - controls.save = new("ButtonControl", nil, -45, 470, 80, 20, self.displayItem and "Save" or "Create", function() + controls.save = new("ButtonControl", nil, {-45, 470, 80, 20}, self.displayItem and "Save" or "Create", function() local id = self.displayItem and self.displayItem.id self:CreateDisplayItemFromRaw(buildRaw(), not self.displayItem) self.displayItem.id = id @@ -2076,7 +2085,7 @@ function ItemsTabClass:EditDisplayItemText(alsoAddItem) tooltip:AddLine(14, "Scholar's Platinum Kris of Joy") end end - controls.cancel = new("ButtonControl", nil, 45, 470, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 470, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(500, 500, self.displayItem and "Edit Item Text" or "Create Custom Item from Text", controls, nil, "edit") @@ -2166,13 +2175,13 @@ function ItemsTabClass:EnchantDisplayItem(enchantSlot) return item end if haveSkills then - controls.skillLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 20, 0, 16, "^7Skill:") - controls.skill = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 20, 180, 18, skillList, function(index, value) + controls.skillLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 20, 0, 16}, "^7Skill:") + controls.skill = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 20, 180, 18}, skillList, function(index, value) buildEnchantmentSourceList() buildEnchantmentList() controls.enchantment:SetSel(1) end) - controls.allSkills = new("CheckBoxControl", {"TOPLEFT",nil,"TOPLEFT"}, 350, 20, 18, "All skills:", function(state) + controls.allSkills = new("CheckBoxControl", {"TOPLEFT",nil,"TOPLEFT"}, {350, 20, 18}, "All skills:", function(state) buildSkillList(not state) controls.skill:SetSel(1) buildEnchantmentList() @@ -2184,26 +2193,26 @@ function ItemsTabClass:EnchantDisplayItem(enchantSlot) controls.allSkills.enabled = false end end - controls.enchantmentSourceLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 45, 0, 16, "^7Source:") - controls.enchantmentSource = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 45, 180, 18, enchantmentSourceList, function(index, value) + controls.enchantmentSourceLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 45, 0, 16}, "^7Source:") + controls.enchantmentSource = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 45, 180, 18}, enchantmentSourceList, function(index, value) buildEnchantmentList() controls.enchantment:SetSel(m_min(controls.enchantment.selIndex, #enchantmentList)) end) - controls.enchantmentLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 70, 0, 16, "^7Enchantment:") - controls.enchantment = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 70, 440, 18, enchantmentList) + controls.enchantmentLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 70, 0, 16}, "^7Enchantment:") + controls.enchantment = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 70, 440, 18}, enchantmentList) controls.enchantment.tooltipFunc = function(tooltip, mode, index) tooltip:Clear() self:AddItemTooltip(tooltip, enchantItem(index), nil, true) end - controls.save = new("ButtonControl", nil, -88, 100, 80, 20, "Enchant", function() + controls.save = new("ButtonControl", nil, {-88, 100, 80, 20}, "Enchant", function() self:SetDisplayItem(enchantItem()) main:ClosePopup() end) - controls.remove = new("ButtonControl", nil, 0, 100, 80, 20, "Remove", function() + controls.remove = new("ButtonControl", nil, {0, 100, 80, 20}, "Remove", function() self:SetDisplayItem(enchantItem(nil, true)) main:ClosePopup() end) - controls.close = new("ButtonControl", nil, 88, 100, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {88, 100, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(550, 130, "Enchant Item", controls) @@ -2281,11 +2290,8 @@ function ItemsTabClass:AppendAnointTooltip(tooltip, node, actionText) header = "^7"..actionText.." nothing will give you: " end local calcFunc = self.build.calcsTab:GetMiscCalculator() - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local outputBase = calcFunc({ repSlotName = "Amulet", repItem = self.displayItem }, {}) - local outputNew = calcFunc({ repSlotName = "Amulet", repItem = self:anointItem(node) }, {}) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local outputBase = calcFunc({ repSlotName = "Amulet", repItem = self.displayItem }) + local outputNew = calcFunc({ repSlotName = "Amulet", repItem = self:anointItem(node) }) local numChanges = self.build:AddStatComparesToTooltip(tooltip, outputBase, outputNew, header) if node and numChanges == 0 then tooltip:AddLine(14, "^7"..actionText.." "..node.dn.." changes nothing.") @@ -2296,11 +2302,8 @@ end ---@param tooltip table @The tooltip to append into ---@param node table @The passive tree node that will be added function ItemsTabClass:AppendAddedNotableTooltip(tooltip, node) - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 local calcFunc, calcBase = self.build.calcsTab:GetMiscCalculator() - local outputNew = calcFunc({ addNodes = { [node] = true } }, { requirementsItems = true, requirementsGems = true, skills = true }) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local outputNew = calcFunc({ addNodes = { [node] = true } }) local numChanges = self.build:AddStatComparesToTooltip(tooltip, calcBase, outputNew, "^7Allocating "..node.dn.." will give you: ") if numChanges == 0 then tooltip:AddLine(14, "^7Allocating "..node.dn.." changes nothing.") @@ -2312,7 +2315,7 @@ function ItemsTabClass:AnointDisplayItem(enchantSlot) self.anointEnchantSlot = enchantSlot or 1 local controls = { } - controls.notableDB = new("NotableDBControl", {"TOPLEFT",nil,"TOPLEFT"}, 10, 60, 360, 360, self, self.build.spec.tree.nodes, "ANOINT") + controls.notableDB = new("NotableDBControl", {"TOPLEFT",nil,"TOPLEFT"}, {10, 60, 360, 360}, self, self.build.spec.tree.nodes, "ANOINT") local function saveLabel() local node = controls.notableDB.selValue @@ -2333,7 +2336,7 @@ function ItemsTabClass:AnointDisplayItem(enchantSlot) local width = saveLabelWidth() return -(width + 90) / 2 end - controls.save = new("ButtonControl", {"BOTTOMLEFT", nil, "BOTTOM" }, saveLabelX, -4, saveLabelWidth, 20, saveLabel, function() + controls.save = new("ButtonControl", {"BOTTOMLEFT", nil, "BOTTOM" }, {saveLabelX, -4, saveLabelWidth, 20}, saveLabel, function() self:SetDisplayItem(self:anointItem(controls.notableDB.selValue)) main:ClosePopup() end) @@ -2341,7 +2344,7 @@ function ItemsTabClass:AnointDisplayItem(enchantSlot) tooltip:Clear() self:AppendAnointTooltip(tooltip, controls.notableDB.selValue) end - controls.close = new("ButtonControl", {"TOPLEFT", controls.save, "TOPRIGHT" }, 10, 0, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", {"TOPLEFT", controls.save, "TOPRIGHT" }, {10, 0, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(380, 448, "Anoint Item", controls) @@ -2413,14 +2416,19 @@ function ItemsTabClass:CorruptDisplayItem(modType) item:BuildAndParseRaw() return item end - controls.sourceLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 20, 0, 16, "^7Source:") - controls.source = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 20, 150, 18, sourceList, function(index, value) + controls.sourceLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 20, 0, 16}, "^7Source:") + controls.source = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 20, 150, 18}, sourceList, function(index, value) if value == "Scourge" then currentModType = "ScourgeUpside" buildImplicitList("ScourgeUpside") buildImplicitList("ScourgeDownside") - controls.implicit3Label.shown = true + controls.implicit.shown = true + controls.implicitLabel.shown = true + controls.implicit2.shown = true + controls.implicit2Label.shown = true controls.implicit3.shown = true + controls.implicit3Label.shown = true + controls.implicitCannotBeChangedLabel.shown = false main.popups[1].height = 147 controls.close.y = 117 controls.save.y = 117 @@ -2436,10 +2444,15 @@ function ItemsTabClass:CorruptDisplayItem(modType) buildList(controls.implicit4, controls.implicit3, "ScourgeDownside") else currentModType = value + controls.implicit.shown = not self.displayItem.implicitsCannotBeChanged + controls.implicitLabel.shown = not self.displayItem.implicitsCannotBeChanged + controls.implicit2.shown = not self.displayItem.implicitsCannotBeChanged + controls.implicit2Label.shown = not self.displayItem.implicitsCannotBeChanged controls.implicit3Label.shown = false controls.implicit3.shown = false controls.implicit4Label.shown = false controls.implicit4.shown = false + controls.implicitCannotBeChangedLabel.shown = self.displayItem.implicitsCannotBeChanged controls.implicit2.y = 65 main.popups[1].height = 129 controls.close.y = 99 @@ -2453,8 +2466,8 @@ function ItemsTabClass:CorruptDisplayItem(modType) controls.implicit4:SetSel(1) end) controls.source.enabled = #sourceList > 1 - controls.implicitLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 75, 45, 0, 16, "^7Implicit #1:") - controls.implicit = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 80, 45, 440, 18, nil, function() + controls.implicitLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {75, 45, 0, 16}, "^7Implicit #1:") + controls.implicit = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {80, 45, 440, 18}, nil, function() buildList(controls.implicit2, controls.implicit, currentModType) end) controls.implicit.tooltipFunc = function(tooltip, mode, index, value) @@ -2466,8 +2479,10 @@ function ItemsTabClass:CorruptDisplayItem(modType) self:AddModComparisonTooltip(tooltip, value.mod) end end - controls.implicit2Label = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 75, 65, 0, 16, "^7Implicit #2:") - controls.implicit2 = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 80, 65, 440, 18, nil, function() + controls.implicit.shown = not self.displayItem.implicitsCannotBeChanged + controls.implicitLabel.shown = not self.displayItem.implicitsCannotBeChanged + controls.implicit2Label = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {75, 65, 0, 16}, "^7Implicit #2:") + controls.implicit2 = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {80, 65, 440, 18}, nil, function() buildList(controls.implicit, controls.implicit2, currentModType) end) controls.implicit2.tooltipFunc = function(tooltip, mode, index, value) @@ -2479,8 +2494,10 @@ function ItemsTabClass:CorruptDisplayItem(modType) self:AddModComparisonTooltip(tooltip, value.mod) end end - controls.implicit3Label = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 75, 85, 0, 16, "^7Implicit #3:") - controls.implicit3 = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 80, 65, 440, 18, nil, function() + controls.implicit2.shown = not self.displayItem.implicitsCannotBeChanged + controls.implicit2Label.shown = not self.displayItem.implicitsCannotBeChanged + controls.implicit3Label = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {75, 85, 0, 16}, "^7Implicit #3:") + controls.implicit3 = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {80, 65, 440, 18}, nil, function() buildList(controls.implicit4, controls.implicit3, "ScourgeDownside") end) controls.implicit3.tooltipFunc = function(tooltip, mode, index, value) @@ -2494,8 +2511,8 @@ function ItemsTabClass:CorruptDisplayItem(modType) end controls.implicit3Label.shown = false controls.implicit3.shown = false - controls.implicit4Label = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 75, 105, 0, 16, "^7Implicit #4:") - controls.implicit4 = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 80, 105, 440, 18, nil, function() + controls.implicit4Label = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {75, 105, 0, 16}, "^7Implicit #4:") + controls.implicit4 = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {80, 105, 440, 18}, nil, function() buildList(controls.implicit3, controls.implicit4, "ScourgeDownside") end) controls.implicit4.tooltipFunc = function(tooltip, mode, index, value) @@ -2509,9 +2526,11 @@ function ItemsTabClass:CorruptDisplayItem(modType) end controls.implicit4Label.shown = false controls.implicit4.shown = false + controls.implicitCannotBeChangedLabel = new("LabelControl", {"TOPLEFT",nil,"TOPLEFT"}, {20, 45, 0, 20}, "^7This Items Implicits Cannot Be Changed") + controls.implicitCannotBeChangedLabel.shown = self.displayItem.implicitsCannotBeChanged buildList(controls.implicit, controls.implicit2, currentModType) buildList(controls.implicit2, controls.implicit, currentModType) - controls.save = new("ButtonControl", nil, -45, 99, 80, 20, modType, function() + controls.save = new("ButtonControl", nil, {-45, 99, 80, 20}, modType, function() self:SetDisplayItem(corruptItem()) main:ClosePopup() end) @@ -2519,7 +2538,7 @@ function ItemsTabClass:CorruptDisplayItem(modType) tooltip:Clear() self:AddItemTooltip(tooltip, corruptItem(), nil, true) end - controls.close = new("ButtonControl", nil, 45, 99, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {45, 99, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(540, 129, modType .. " Item", controls) @@ -2537,7 +2556,7 @@ function ItemsTabClass:AddCustomModifierToDisplayItem() if sourceId == "MASTER" then local excludeGroups = { } for _, modLine in ipairs({ self.displayItem.prefixes, self.displayItem.suffixes }) do - for i = 1, self.displayItem.affixLimit / 2 do + for i = 1, (modLine.limit or (self.displayItem.affixLimit / 2)) do if modLine[i].modId ~= "None" then excludeGroups[self.displayItem.affixes[modLine[i].modId].group] = true end @@ -2698,14 +2717,14 @@ function ItemsTabClass:AddCustomModifierToDisplayItem() item:BuildAndParseRaw() return item end - controls.sourceLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 20, 0, 16, "^7Source:") - controls.source = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 20, 150, 18, sourceList, function(index, value) + controls.sourceLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 20, 0, 16}, "^7Source:") + controls.source = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 20, 150, 18}, sourceList, function(index, value) buildMods(value.sourceId) controls.modSelect:SetSel(1) end) controls.source.enabled = #sourceList > 1 - controls.modSelectLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 45, 0, 16, "^7Modifier:") - controls.modSelect = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 45, 600, 18, modList) + controls.modSelectLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 45, 0, 16}, "^7Modifier:") + controls.modSelect = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 45, 600, 18}, modList) controls.modSelect.shown = function() return sourceList[controls.source.selIndex].sourceId ~= "CUSTOM" end @@ -2718,11 +2737,11 @@ function ItemsTabClass:AddCustomModifierToDisplayItem() self:AddModComparisonTooltip(tooltip, value.mod) end end - controls.custom = new("EditControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 45, 440, 18) + controls.custom = new("EditControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 45, 440, 18}) controls.custom.shown = function() return sourceList[controls.source.selIndex].sourceId == "CUSTOM" end - controls.save = new("ButtonControl", nil, -45, 75, 80, 20, "Add", function() + controls.save = new("ButtonControl", nil, {-45, 75, 80, 20}, "Add", function() self:SetDisplayItem(addModifier()) main:ClosePopup() end) @@ -2730,7 +2749,7 @@ function ItemsTabClass:AddCustomModifierToDisplayItem() tooltip:Clear() self:AddItemTooltip(tooltip, addModifier()) end - controls.close = new("ButtonControl", nil, 45, 75, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {45, 75, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(710, 105, "Add Modifier to Item", controls, "save", sourceList[controls.source.selIndex].sourceId == "CUSTOM" and "custom") @@ -2834,8 +2853,8 @@ function ItemsTabClass:AddCrucibleModifierToDisplayItem() buildCrucibleMods() local y = 45 for i = 1,5 do - controls["modSelectNode"..i.."Label"] = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, y, 0, 16, "^7Node "..i..":") - controls["modSelectNode"..i] = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, y, 555, 18, modList[i]) + controls["modSelectNode"..i.."Label"] = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, y, 0, 16}, "^7Node "..i..":") + controls["modSelectNode"..i] = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, y, 555, 18}, modList[i]) controls["modSelectNode"..i].tooltipFunc = function(tooltip, mode, index, value) tooltip:Clear() if mode ~= "OUT" and value and value ~= "None" then @@ -2855,7 +2874,7 @@ function ItemsTabClass:AddCrucibleModifierToDisplayItem() end end end - controls.save = new("ButtonControl", nil, -45, 157, 80, 20, "Add", function() + controls.save = new("ButtonControl", nil, {-45, 157, 80, 20}, "Add", function() self:SetDisplayItem(addModifier()) main:ClosePopup() end) @@ -2863,7 +2882,7 @@ function ItemsTabClass:AddCrucibleModifierToDisplayItem() tooltip:Clear() self:AddItemTooltip(tooltip, addModifier()) end - controls.close = new("ButtonControl", nil, 45, 157, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {45, 157, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(710, 185, "Add Crucible Modifier to Item", controls, "save") @@ -3032,15 +3051,15 @@ function ItemsTabClass:AddImplicitToDisplayItem() local listMod = modList[modGroups[controls.modGroupSelect.selIndex].modListIndex][controls.modSelect.selIndex] local index for i, implicitMod in ipairs(item.implicitModLines) do - if implicitMod[listMod.type] and implicitMod[listMod.type] == "{"..listMod.type.."}" then + if implicitMod[listMod.type] then index = i break end end if index then for i, line in ipairs(listMod.mod) do - item.implicitModLines[index + i - 1] = { line = line, modTags = listMod.mod.modTags, [listMod.type] = true } - end + item.implicitModLines[index + i - 1] = { line = line, modTags = listMod.mod.modTags, [listMod.type] = true } + end else for _, line in ipairs(listMod.mod) do t_insert(item.implicitModLines, { line = line, modTags = listMod.mod.modTags, [listMod.type] = true }) @@ -3055,8 +3074,8 @@ function ItemsTabClass:AddImplicitToDisplayItem() item:BuildAndParseRaw() return item end - controls.sourceLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 20, 0, 16, "^7Source:") - controls.source = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 20, 150, 18, sourceList, function(index, value) + controls.sourceLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 20, 0, 16}, "^7Source:") + controls.source = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 20, 150, 18}, sourceList, function(index, value) if value.sourceId ~= "CUSTOM" then controls.modSelectLabel.y = 70 buildMods(value.sourceId) @@ -3068,8 +3087,8 @@ function ItemsTabClass:AddImplicitToDisplayItem() end end) controls.source.enabled = #sourceList > 1 - controls.modGroupSelectLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 45, 0, 16, "^7Type:") - controls.modGroupSelect = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 45, 600, 18, modGroups, function(index, value) + controls.modGroupSelectLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 45, 0, 16}, "^7Type:") + controls.modGroupSelect = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 45, 600, 18}, modGroups, function(index, value) controls.modSelect.list = modList[value.modListIndex] controls.modSelect:SetSel(1) end) @@ -3091,8 +3110,8 @@ function ItemsTabClass:AddImplicitToDisplayItem() self:AddModComparisonTooltip(tooltip, value.mod) end end - controls.modSelectLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 95, 70, 0, 16, "^7Modifier:") - controls.modSelect = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 70, 600, 18, sourceList[controls.source.selIndex].sourceId ~= "CUSTOM" and modList[modGroups[1].modListIndex] or { }) + controls.modSelectLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {95, 70, 0, 16}, "^7Modifier:") + controls.modSelect = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 70, 600, 18}, sourceList[controls.source.selIndex].sourceId ~= "CUSTOM" and modList[modGroups[1].modListIndex] or { }) controls.modSelect.shown = function() return sourceList[controls.source.selIndex].sourceId ~= "CUSTOM" end @@ -3105,11 +3124,11 @@ function ItemsTabClass:AddImplicitToDisplayItem() self:AddModComparisonTooltip(tooltip, value.mod) end end - controls.custom = new("EditControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 45, 440, 18) + controls.custom = new("EditControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 45, 440, 18}) controls.custom.shown = function() return sourceList[controls.source.selIndex].sourceId == "CUSTOM" end - controls.save = new("ButtonControl", nil, -45, 100, 80, 20, "Add", function() + controls.save = new("ButtonControl", nil, {-45, 100, 80, 20}, "Add", function() self:SetDisplayItem(addModifier()) main:ClosePopup() end) @@ -3117,7 +3136,7 @@ function ItemsTabClass:AddImplicitToDisplayItem() tooltip:Clear() self:AddItemTooltip(tooltip, addModifier()) end - controls.close = new("ButtonControl", nil, 45, 100, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {45, 100, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(710, 130, "Add Implicit to Item", controls, "save", sourceList[controls.source.selIndex].sourceId == "CUSTOM" and "custom") @@ -3269,13 +3288,13 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode) end end if flaskData.manaTotal then - if flaskData.manaGradual then + if flaskData.manaGradual ~= 0 then tooltip:AddLine(16, s_format("^x7F7F7FRecovers %s%d ^x7F7F7FMana over %s%.1f0 ^x7F7F7FSeconds", main:StatColor(flaskData.manaTotal, base.flask.mana), flaskData.manaGradual, main:StatColor(flaskData.duration, base.flask.duration), flaskData.duration )) end - if flaskData.manaInstant then + if flaskData.manaInstant ~= 0 then tooltip:AddLine(16, s_format("^x7F7F7FRecovers %s%d ^x7F7F7FMana instantly", main:StatColor(flaskData.manaTotal, base.flask.mana), flaskData.manaInstant)) end end @@ -3627,10 +3646,7 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode) tooltip:AddLine(14, stat) end end - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local output = calcFunc({ toggleFlask = item }, {}) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local output = calcFunc({ toggleFlask = item }) local header if self.build.calcsTab.mainEnv.flasks[item] then header = "^7Deactivating this flask will give you:" @@ -3666,10 +3682,7 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode) tooltip:AddLine(14, stat) end end - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local output = calcFunc({ toggleTincture = item }, {}) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local output = calcFunc({ toggleTincture = item }) local header if self.build.calcsTab.mainEnv.tinctures[item] then header = "^7Deactivating this tincture will give you:" @@ -3716,10 +3729,7 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode) for _, compareSlot in pairs(compareSlots) do if not main.slotOnlyTooltips or (slot and (slot.nodeId == compareSlot.nodeId or slot.slotName == compareSlot.slotName)) or not slot or slot == compareSlot then local selItem = self.items[compareSlot.selItemId] - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local output = calcFunc({ repSlotName = compareSlot.slotName, repItem = item ~= selItem and item or nil}, {}) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local output = calcFunc({ repSlotName = compareSlot.slotName, repItem = item ~= selItem and item or nil}) local header if item == selItem then header = "^7Removing this item from "..compareSlot.label.." will give you:" diff --git a/src/Classes/LabelControl.lua b/src/Classes/LabelControl.lua index a4e8753f3a..2f799ece2d 100644 --- a/src/Classes/LabelControl.lua +++ b/src/Classes/LabelControl.lua @@ -3,8 +3,8 @@ -- Class: Label Control -- Simple text label. -- -local LabelClass = newClass("LabelControl", "Control", function(self, anchor, x, y, width, height, label) - self.Control(anchor, x, y, width, height) +local LabelClass = newClass("LabelControl", "Control", function(self, anchor, rect, label) + self.Control(anchor, rect) self.label = label self.width = function() return DrawStringWidth(self:GetProperty("height"), "VAR", self:GetProperty("label")) diff --git a/src/Classes/ListControl.lua b/src/Classes/ListControl.lua index 4ca10ae51c..ebc8287c50 100644 --- a/src/Classes/ListControl.lua +++ b/src/Classes/ListControl.lua @@ -30,8 +30,8 @@ local m_min = math.min local m_max = math.max local m_floor = math.floor -local ListClass = newClass("ListControl", "Control", "ControlHost", function(self, anchor, x, y, width, height, rowHeight, scroll, isMutable, list, forceTooltip) - self.Control(anchor, x, y, width, height) +local ListClass = newClass("ListControl", "Control", "ControlHost", function(self, anchor, rect, rowHeight, scroll, isMutable, list, forceTooltip) + self.Control(anchor, rect) self.ControlHost() self.rowHeight = rowHeight self.scroll = scroll @@ -48,7 +48,7 @@ local ListClass = newClass("ListControl", "Control", "ControlHost", function(sel self.scrollH = false end end - self.controls.scrollBarH = new("ScrollBarControl", {"BOTTOM",self,"BOTTOM"}, -8, -1, 0, self.scroll and 16 or 0, rowHeight * 2, "HORIZONTAL") { + self.controls.scrollBarH = new("ScrollBarControl", {"BOTTOM",self,"BOTTOM"}, {-8, -1, 0, self.scroll and 16 or 0}, rowHeight * 2, "HORIZONTAL") { shown = function() return self.scrollH end, @@ -57,7 +57,7 @@ local ListClass = newClass("ListControl", "Control", "ControlHost", function(sel return width - 18 end } - self.controls.scrollBarV = new("ScrollBarControl", {"RIGHT",self,"RIGHT"}, -1, 0, self.scroll and 16 or 0, 0, rowHeight * 2, "VERTICAL") { + self.controls.scrollBarV = new("ScrollBarControl", {"RIGHT",self,"RIGHT"}, {-1, 0, self.scroll and 16 or 0, 0}, rowHeight * 2, "VERTICAL") { y = function() return (self.scrollH and -8 or 0) end, diff --git a/src/Classes/MinionListControl.lua b/src/Classes/MinionListControl.lua index 3fe86013cf..1bd119853c 100644 --- a/src/Classes/MinionListControl.lua +++ b/src/Classes/MinionListControl.lua @@ -8,14 +8,14 @@ local t_insert = table.insert local t_remove = table.remove local s_format = string.format -local MinionListClass = newClass("MinionListControl", "ListControl", function(self, anchor, x, y, width, height, data, list, dest) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", not dest, list) +local MinionListClass = newClass("MinionListControl", "ListControl", function(self, anchor, rect, data, list, dest) + self.ListControl(anchor, rect, 16, "VERTICAL", not dest, list) self.data = data self.dest = dest if dest then self.dragTargetList = { dest } self.label = "^7Available Spectres:" - self.controls.add = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, 0, -2, 60, 18, "Add", function() + self.controls.add = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, {0, -2, 60, 18}, "Add", function() self:AddSel() end) self.controls.add.enabled = function() @@ -23,7 +23,7 @@ local MinionListClass = newClass("MinionListControl", "ListControl", function(se end else self.label = "^7Spectres in Build:" - self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, 0, -2, 60, 18, "Remove", function() + self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, {0, -2, 60, 18}, "Remove", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() diff --git a/src/Classes/MinionSearchListControl.lua b/src/Classes/MinionSearchListControl.lua index a837ab6865..f0f4d28e13 100644 --- a/src/Classes/MinionSearchListControl.lua +++ b/src/Classes/MinionSearchListControl.lua @@ -8,16 +8,16 @@ local t_insert = table.insert local t_remove = table.remove local s_format = string.format -local MinionSearchListClass = newClass("MinionSearchListControl", "MinionListControl", function(self, anchor, x, y, width, height, data, list, dest) - self.MinionListControl(anchor, x, y, width, height, data, list, dest) +local MinionSearchListClass = newClass("MinionSearchListControl", "MinionListControl", function(self, anchor, rect, data, list, dest) + self.MinionListControl(anchor, rect, data, list, dest) self.unfilteredList = copyTable(list) self.isMutable = false - self.controls.searchText = new("EditControl", {"BOTTOMLEFT",self,"TOPLEFT"}, 0, -2, 128, 18, "", "Search", "%c", 100, function(buf) + self.controls.searchText = new("EditControl", {"BOTTOMLEFT",self,"TOPLEFT"}, {0, -2, 128, 18}, "", "Search", "%c", 100, function(buf) self:ListFilterChanged(buf, self.controls.searchModeDropDown.selIndex) end, nil, nil, true) - self.controls.searchModeDropDown = new("DropDownControl", {"LEFT",self.controls.searchText,"RIGHT"}, 2, 0, 60, 18, { "Names", "Skills", "Both"}, function(index, value) + self.controls.searchModeDropDown = new("DropDownControl", {"LEFT",self.controls.searchText,"RIGHT"}, {2, 0, 60, 18}, { "Names", "Skills", "Both"}, function(index, value) self:ListFilterChanged(self.controls.searchText.buf, index) end) diff --git a/src/Classes/ModDB.lua b/src/Classes/ModDB.lua index edab449cc0..2321f7231e 100644 --- a/src/Classes/ModDB.lua +++ b/src/Classes/ModDB.lua @@ -239,8 +239,9 @@ function ModDBClass:TabulateInternal(context, result, modType, cfg, flags, keywo if (mod.type == modType or not modType) and band(flags, mod.flags) == mod.flags and MatchKeywordFlags(keywordFlags, mod.keywordFlags) and (not source or mod.source:match("[^:]+") == source) then local value if mod[1] then - value = context:EvalMod(mod, cfg) or 0 + value = context:EvalMod(mod, cfg) if mod[1].globalLimit and mod[1].globalLimitKey then + value = value or 0 globalLimits[mod[1].globalLimitKey] = globalLimits[mod[1].globalLimitKey] or 0 if globalLimits[mod[1].globalLimitKey] + value > mod[1].globalLimit then value = mod[1].globalLimit - globalLimits[mod[1].globalLimitKey] diff --git a/src/Classes/NotableDBControl.lua b/src/Classes/NotableDBControl.lua index 62253adff8..83a8029b00 100644 --- a/src/Classes/NotableDBControl.lua +++ b/src/Classes/NotableDBControl.lua @@ -19,8 +19,8 @@ local function IsAnointableNode(node) end ---@class NotableDBControl : ListControl -local NotableDBClass = newClass("NotableDBControl", "ListControl", function(self, anchor, x, y, width, height, itemsTab, db, dbType) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", false) +local NotableDBClass = newClass("NotableDBControl", "ListControl", function(self, anchor, rect, itemsTab, db, dbType) + self.ListControl(anchor, rect, 16, "VERTICAL", false) self.itemsTab = itemsTab self.db = db self.dbType = dbType @@ -32,13 +32,13 @@ local NotableDBClass = newClass("NotableDBControl", "ListControl", function(self self.sortDropList = { } self.sortOrder = { } self.sortMode = "NAME" - self.controls.sort = new("DropDownControl", {"BOTTOMLEFT",self,"TOPLEFT"}, 0, -22, 360, 18, self.sortDropList, function(index, value) + self.controls.sort = new("DropDownControl", {"BOTTOMLEFT",self,"TOPLEFT"}, {0, -22, 360, 18}, self.sortDropList, function(index, value) self:SetSortMode(value.sortMode) end) - self.controls.search = new("EditControl", {"BOTTOMLEFT",self,"TOPLEFT"}, 0, -2, 258, 18, "", "Search", "%c", 100, function() + self.controls.search = new("EditControl", {"BOTTOMLEFT",self,"TOPLEFT"}, {0, -2, 258, 18}, "", "Search", "%c", 100, function() self.listBuildFlag = true end, nil, nil, true) - self.controls.searchMode = new("DropDownControl", {"LEFT",self.controls.search,"RIGHT"}, 2, 0, 100, 18, { "Anywhere", "Names", "Modifiers" }, function(index, value) + self.controls.searchMode = new("DropDownControl", {"LEFT",self.controls.search,"RIGHT"}, {2, 0, 100, 18}, { "Anywhere", "Names", "Modifiers" }, function(index, value) self.listBuildFlag = true end) self:BuildSortOrder() @@ -138,14 +138,12 @@ function NotableDBClass:ListBuilder() local start = GetTime() local calcFunc = self.itemsTab.build.calcsTab:GetMiscCalculator() local itemType = self.itemsTab.displayItem.base.type - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local calcBase = calcFunc({ repSlotName = itemType, repItem = self.itemsTab:anointItem(nil) }, {}) + local calcBase = calcFunc({ repSlotName = itemType, repItem = self.itemsTab:anointItem(nil) }) self.sortMaxPower = 0 for nodeIndex, node in ipairs(list) do node.measuredPower = 0 if node.modKey ~= "" then - local output = calcFunc({ repSlotName = itemType, repItem = self.itemsTab:anointItem(node) }, {}) + local output = calcFunc({ repSlotName = itemType, repItem = self.itemsTab:anointItem(node) }) node.measuredPower = self:CalculatePowerStat(self.sortDetail, output, calcBase) if node.measuredPower == m_huge then t_insert(infinites, node) @@ -160,7 +158,6 @@ function NotableDBClass:ListBuilder() start = now end end - GlobalCache.useFullDPS = storedGlobalCacheDPSView if #infinites > 0 then self.sortMaxPower = self.sortMaxPower * 2 diff --git a/src/Classes/NotesTab.lua b/src/Classes/NotesTab.lua index 303e169c29..f78ea2eb41 100644 --- a/src/Classes/NotesTab.lua +++ b/src/Classes/NotesTab.lua @@ -17,28 +17,28 @@ local NotesTabClass = newClass("NotesTab", "ControlHost", "Control", function(se local notesDesc = [[^7You can use Ctrl +/- (or Ctrl+Scroll) to zoom in and out and Ctrl+0 to reset. This field also supports different colors. Using the caret symbol (^) followed by a Hex code or a number (0-9) will set the color. Below are some common color codes PoB uses: ]] - self.controls.notesDesc = new("LabelControl", {"TOPLEFT",self,"TOPLEFT"}, 8, 8, 150, 16, notesDesc) - self.controls.normal = new("ButtonControl", {"TOPLEFT",self.controls.notesDesc,"TOPLEFT"}, 0, 48, 100, 18, colorCodes.NORMAL.."NORMAL", function() self:SetColor(colorCodes.NORMAL) end) - self.controls.magic = new("ButtonControl", {"TOPLEFT",self.controls.normal,"TOPLEFT"}, 120, 0, 100, 18, colorCodes.MAGIC.."MAGIC", function() self:SetColor(colorCodes.MAGIC) end) - self.controls.rare = new("ButtonControl", {"TOPLEFT",self.controls.magic,"TOPLEFT"}, 120, 0, 100, 18, colorCodes.RARE.."RARE", function() self:SetColor(colorCodes.RARE) end) - self.controls.unique = new("ButtonControl", {"TOPLEFT",self.controls.rare,"TOPLEFT"}, 120, 0, 100, 18, colorCodes.UNIQUE.."UNIQUE", function() self:SetColor(colorCodes.UNIQUE) end) - self.controls.fire = new("ButtonControl", {"TOPLEFT",self.controls.normal,"TOPLEFT"}, 0, 18, 100, 18, colorCodes.FIRE.."FIRE", function() self:SetColor(colorCodes.FIRE) end) - self.controls.cold = new("ButtonControl", {"TOPLEFT",self.controls.fire,"TOPLEFT"}, 120, 0, 100, 18, colorCodes.COLD.."COLD", function() self:SetColor(colorCodes.COLD) end) - self.controls.lightning = new("ButtonControl", {"TOPLEFT",self.controls.cold,"TOPLEFT"}, 120, 0, 100, 18, colorCodes.LIGHTNING.."LIGHTNING", function() self:SetColor(colorCodes.LIGHTNING) end) - self.controls.chaos = new("ButtonControl", {"TOPLEFT",self.controls.lightning,"TOPLEFT"}, 120, 0, 100, 18, colorCodes.CHAOS.."CHAOS", function() self:SetColor(colorCodes.CHAOS) end) - self.controls.strength = new("ButtonControl", {"TOPLEFT",self.controls.fire,"TOPLEFT"}, 0, 18, 100, 18, colorCodes.STRENGTH.."STRENGTH", function() self:SetColor(colorCodes.STRENGTH) end) - self.controls.dexterity = new("ButtonControl", {"TOPLEFT",self.controls.strength,"TOPLEFT"}, 120, 0, 100, 18, colorCodes.DEXTERITY.."DEXTERITY", function() self:SetColor(colorCodes.DEXTERITY) end) - self.controls.intelligence = new("ButtonControl", {"TOPLEFT",self.controls.dexterity,"TOPLEFT"}, 120, 0, 100, 18, colorCodes.INTELLIGENCE.."INTELLIGENCE", function() self:SetColor(colorCodes.INTELLIGENCE) end) - self.controls.default = new("ButtonControl", {"TOPLEFT",self.controls.intelligence,"TOPLEFT"}, 120, 0, 100, 18, "^7DEFAULT", function() self:SetColor("^7") end) + self.controls.notesDesc = new("LabelControl", {"TOPLEFT",self,"TOPLEFT"}, {8, 8, 150, 16}, notesDesc) + self.controls.normal = new("ButtonControl", {"TOPLEFT",self.controls.notesDesc,"TOPLEFT"}, {0, 48, 100, 18}, colorCodes.NORMAL.."NORMAL", function() self:SetColor(colorCodes.NORMAL) end) + self.controls.magic = new("ButtonControl", {"TOPLEFT",self.controls.normal,"TOPLEFT"}, {120, 0, 100, 18}, colorCodes.MAGIC.."MAGIC", function() self:SetColor(colorCodes.MAGIC) end) + self.controls.rare = new("ButtonControl", {"TOPLEFT",self.controls.magic,"TOPLEFT"}, {120, 0, 100, 18}, colorCodes.RARE.."RARE", function() self:SetColor(colorCodes.RARE) end) + self.controls.unique = new("ButtonControl", {"TOPLEFT",self.controls.rare,"TOPLEFT"}, {120, 0, 100, 18}, colorCodes.UNIQUE.."UNIQUE", function() self:SetColor(colorCodes.UNIQUE) end) + self.controls.fire = new("ButtonControl", {"TOPLEFT",self.controls.normal,"TOPLEFT"}, {0, 18, 100, 18}, colorCodes.FIRE.."FIRE", function() self:SetColor(colorCodes.FIRE) end) + self.controls.cold = new("ButtonControl", {"TOPLEFT",self.controls.fire,"TOPLEFT"}, {120, 0, 100, 18}, colorCodes.COLD.."COLD", function() self:SetColor(colorCodes.COLD) end) + self.controls.lightning = new("ButtonControl", {"TOPLEFT",self.controls.cold,"TOPLEFT"}, {120, 0, 100, 18}, colorCodes.LIGHTNING.."LIGHTNING", function() self:SetColor(colorCodes.LIGHTNING) end) + self.controls.chaos = new("ButtonControl", {"TOPLEFT",self.controls.lightning,"TOPLEFT"}, {120, 0, 100, 18}, colorCodes.CHAOS.."CHAOS", function() self:SetColor(colorCodes.CHAOS) end) + self.controls.strength = new("ButtonControl", {"TOPLEFT",self.controls.fire,"TOPLEFT"}, {0, 18, 100, 18}, colorCodes.STRENGTH.."STRENGTH", function() self:SetColor(colorCodes.STRENGTH) end) + self.controls.dexterity = new("ButtonControl", {"TOPLEFT",self.controls.strength,"TOPLEFT"}, {120, 0, 100, 18}, colorCodes.DEXTERITY.."DEXTERITY", function() self:SetColor(colorCodes.DEXTERITY) end) + self.controls.intelligence = new("ButtonControl", {"TOPLEFT",self.controls.dexterity,"TOPLEFT"}, {120, 0, 100, 18}, colorCodes.INTELLIGENCE.."INTELLIGENCE", function() self:SetColor(colorCodes.INTELLIGENCE) end) + self.controls.default = new("ButtonControl", {"TOPLEFT",self.controls.intelligence,"TOPLEFT"}, {120, 0, 100, 18}, "^7DEFAULT", function() self:SetColor("^7") end) - self.controls.edit = new("EditControl", {"TOPLEFT",self.controls.fire,"TOPLEFT"}, 0, 48, 0, 0, "", nil, "^%C\t\n", nil, nil, 16, true) + self.controls.edit = new("EditControl", {"TOPLEFT",self.controls.fire,"TOPLEFT"}, {0, 48, 0, 0}, "", nil, "^%C\t\n", nil, nil, 16, true) self.controls.edit.width = function() return self.width - 16 end self.controls.edit.height = function() return self.height - 128 end - self.controls.toggleColorCodes = new("ButtonControl", {"TOPRIGHT",self,"TOPRIGHT"}, -10, 70, 160, 20, "Show Color Codes", function() + self.controls.toggleColorCodes = new("ButtonControl", {"TOPRIGHT",self,"TOPRIGHT"}, {-10, 70, 160, 20}, "Show Color Codes", function() self.showColorCodes = not self.showColorCodes self:SetShowColorCodes(self.showColorCodes) end) diff --git a/src/Classes/PartyTab.lua b/src/Classes/PartyTab.lua index f375f0ae8e..61b0140368 100644 --- a/src/Classes/PartyTab.lua +++ b/src/Classes/PartyTab.lua @@ -61,7 +61,7 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se All of these effects can be found in the Calcs tab]] - self.controls.notesDesc = new("LabelControl", {"TOPLEFT",self,"TOPLEFT"}, 8, 8, 150, theme.stringHeight, notesDesc) + self.controls.notesDesc = new("LabelControl", {"TOPLEFT",self,"TOPLEFT"}, {8, 8, 150, theme.stringHeight}, notesDesc) self.controls.notesDesc.width = function() local width = self.width / 2 - 16 if width ~= self.controls.notesDesc.lastWidth then @@ -70,7 +70,7 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se end return width end - self.controls.importCodeHeader = new("LabelControl", {"TOPLEFT",self.controls.notesDesc,"BOTTOMLEFT"}, 0, 32, 0, theme.stringHeight, "^7Enter a build code/URL below:") + self.controls.importCodeHeader = new("LabelControl", {"TOPLEFT",self.controls.notesDesc,"BOTTOMLEFT"}, {0, 32, 0, theme.stringHeight}, "^7Enter a build code/URL below:") self.controls.importCodeHeader.y = function() return theme.lineCounter(self.controls.notesDesc.label) + 4 end @@ -92,8 +92,8 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.actor["Curse"] = {} end if partyDestinations[self.controls.importCodeDestination.selIndex] == "All" or partyDestinations[self.controls.importCodeDestination.selIndex] == "Warcry Skills" then - self.controls.simpleLinks.label = "" - self.controls.editLinks:SetText("") + self.controls.simpleWarcries.label = "" + self.controls.editWarcries:SetText("") wipeTable(self.actor["Warcry"]) self.actor["Warcry"] = {} end @@ -280,7 +280,7 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se end end - self.controls.importCodeIn = new("EditControl", {"TOPLEFT",self.controls.importCodeHeader,"BOTTOMLEFT"}, 0, 4, 328, theme.buttonHeight, "", nil, nil, nil, importCodeHandle) + self.controls.importCodeIn = new("EditControl", {"TOPLEFT",self.controls.importCodeHeader,"BOTTOMLEFT"}, {0, 4, 328, theme.buttonHeight}, "", nil, nil, nil, importCodeHandle) self.controls.importCodeIn.width = function() return (self.width > 880) and 328 or (self.width / 2 - 100) end @@ -289,13 +289,13 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.controls.importCodeGo.onClick() end end - self.controls.importCodeState = new("LabelControl", {"LEFT",self.controls.importCodeIn,"RIGHT"}, 8, 0, 0, theme.stringHeight) + self.controls.importCodeState = new("LabelControl", {"LEFT",self.controls.importCodeIn,"RIGHT"}, {8, 0, 0, theme.stringHeight}) self.controls.importCodeState.label = function() return self.importCodeDetail or "" end - self.controls.importCodeDestination = new("DropDownControl", {"TOPLEFT",self.controls.importCodeIn,"BOTTOMLEFT"}, 0, 4, 160, theme.buttonHeight, partyDestinations) + self.controls.importCodeDestination = new("DropDownControl", {"TOPLEFT",self.controls.importCodeIn,"BOTTOMLEFT"}, {0, 4, 160, theme.buttonHeight}, partyDestinations) self.controls.importCodeDestination.tooltipText = "Destination for Import/clear\nCurrently Links Skills do not export" - self.controls.importCodeGo = new("ButtonControl", {"LEFT",self.controls.importCodeDestination,"RIGHT"}, 8, 0, 160, theme.buttonHeight, "Import", function() + self.controls.importCodeGo = new("ButtonControl", {"LEFT",self.controls.importCodeDestination,"RIGHT"}, {8, 0, 160, theme.buttonHeight}, "Import", function() local importCodeFetching = false if self.importCodeSite and not self.importCodeXML then self.importCodeFetching = true @@ -323,7 +323,7 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.controls.importCodeGo.onClick() end end - self.controls.appendNotReplace = new("CheckBoxControl", {"LEFT",self.controls.importCodeGo,"RIGHT"}, 60, 0, theme.buttonHeight, "Append", function(state) + self.controls.appendNotReplace = new("CheckBoxControl", {"LEFT",self.controls.importCodeGo,"RIGHT"}, {60, 0, theme.buttonHeight}, "Append", function(state) end, "This sets the import button to append to the current party lists instead of replacing them (curses will still replace)", false) self.controls.appendNotReplace.x = function() return (self.width > theme.widthThreshold1) and 60 or (-276) @@ -332,7 +332,7 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se return (self.width > theme.widthThreshold1) and 0 or 24 end - self.controls.clear = new("ButtonControl", {"LEFT",self.controls.appendNotReplace,"RIGHT"}, 8, 0, 160, theme.buttonHeight, "Clear", function() + self.controls.clear = new("ButtonControl", {"LEFT",self.controls.appendNotReplace,"RIGHT"}, {8, 0, 160, theme.buttonHeight}, "Clear", function() clearInputText() wipeTable(self.enemyModList) self.enemyModList = new("ModList") @@ -340,13 +340,13 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se end) self.controls.clear.tooltipText = "^7Clears all the party tab imported data" - self.controls.ShowAdvanceTools = new("CheckBoxControl", {"TOPLEFT",self.controls.importCodeDestination,"BOTTOMLEFT"}, 140, 4, theme.buttonHeight, "^7Show Advanced Info", function(state) + self.controls.ShowAdvanceTools = new("CheckBoxControl", {"TOPLEFT",self.controls.importCodeDestination,"BOTTOMLEFT"}, {140, 4, theme.buttonHeight}, "^7Show Advanced Info", function(state) end, "This shows the advanced info like what stats each aura/curse etc are adding, as well as enables the ability to edit them without a re-export\nDo not edit any boxes unless you know what you are doing, use copy/paste or import instead", false) self.controls.ShowAdvanceTools.y = function() return (self.width > theme.widthThreshold1) and 4 or 28 end - self.controls.removeEffects = new("ButtonControl", {"LEFT",self.controls.ShowAdvanceTools,"RIGHT"}, 8, 0, 160, theme.buttonHeight, "Disable Party Effects", function() + self.controls.removeEffects = new("ButtonControl", {"LEFT",self.controls.ShowAdvanceTools,"RIGHT"}, {8, 0, 160, theme.buttonHeight}, "Disable Party Effects", function() wipeTable(self.actor) wipeTable(self.enemyModList) self.actor = { Aura = {}, Curse = {}, Warcry = { }, Link = {}, modDB = new("ModDB"), output = { } } @@ -356,7 +356,7 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se end) self.controls.removeEffects.tooltipText = "^7Removes the effects of the supports, without removing the data\nUse \"rebuild all\" to apply the effects again" - self.controls.rebuild = new("ButtonControl", {"LEFT",self.controls.removeEffects,"RIGHT"}, 8, 0, 160, theme.buttonHeight, "^7Rebuild All", function() + self.controls.rebuild = new("ButtonControl", {"LEFT",self.controls.removeEffects,"RIGHT"}, {8, 0, 160, theme.buttonHeight}, "^7Rebuild All", function() wipeTable(self.actor) wipeTable(self.enemyModList) self.actor = { Aura = {}, Curse = {}, Warcry = { }, Link = {}, modDB = new("ModDB"), output = { } } @@ -379,11 +379,11 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se return (self.width > theme.widthThreshold1) and 0 or 24 end - self.controls.editAurasLabel = new("LabelControl", {"TOPLEFT",self.controls.ShowAdvanceTools,"TOPLEFT"}, -140, 40, 0, theme.stringHeight, "^7Auras") + self.controls.editAurasLabel = new("LabelControl", {"TOPLEFT",self.controls.ShowAdvanceTools,"TOPLEFT"}, {-140, 40, 0, theme.stringHeight}, "^7Auras") self.controls.editAurasLabel.y = function() return 36 + ((self.width <= theme.widthThreshold1) and 24 or 0) end - self.controls.editAuras = new("EditControl", {"TOPLEFT",self.controls.editAurasLabel,"TOPLEFT"}, 0, 18, 0, 0, "", nil, "^%C\t\n", nil, nil, 14, true) + self.controls.editAuras = new("EditControl", {"TOPLEFT",self.controls.editAurasLabel,"TOPLEFT"}, {0, 18, 0, 0}, "", nil, "^%C\t\n", nil, nil, 14, true) self.controls.editAuras.width = function() return self.width / 2 - 16 end @@ -394,16 +394,16 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.controls.editAuras.shown = function() return self.controls.ShowAdvanceTools.state end - self.controls.simpleAuras = new("LabelControl", {"TOPLEFT",self.controls.editAurasLabel,"TOPLEFT"}, 0, 18, 0, theme.stringHeight, "") + self.controls.simpleAuras = new("LabelControl", {"TOPLEFT",self.controls.editAurasLabel,"TOPLEFT"}, {0, 18, 0, theme.stringHeight}, "") self.controls.simpleAuras.shown = function() return not self.controls.ShowAdvanceTools.state end - self.controls.editWarcriesLabel = new("LabelControl", {"TOPLEFT",self.controls.editAurasLabel,"BOTTOMLEFT"}, 0, 8, 0, theme.stringHeight, "^7Warcry Skills") + self.controls.editWarcriesLabel = new("LabelControl", {"TOPLEFT",self.controls.editAurasLabel,"BOTTOMLEFT"}, {0, 8, 0, theme.stringHeight}, "^7Warcry Skills") self.controls.editWarcriesLabel.y = function() return self.controls.ShowAdvanceTools.state and (self.controls.editAuras.height() + 8) or (theme.lineCounter(self.controls.simpleAuras.label) + 4) end - self.controls.editWarcries = new("EditControl", {"TOPLEFT",self.controls.editWarcriesLabel,"TOPLEFT"}, 0, 18, 0, 0, "", nil, "^%C\t\n", nil, nil, 14, true) + self.controls.editWarcries = new("EditControl", {"TOPLEFT",self.controls.editWarcriesLabel,"TOPLEFT"}, {0, 18, 0, 0}, "", nil, "^%C\t\n", nil, nil, 14, true) self.controls.editWarcries.width = function() return self.width / 2 - 16 end @@ -413,16 +413,16 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.controls.editWarcries.shown = function() return self.controls.ShowAdvanceTools.state end - self.controls.simpleWarcries = new("LabelControl", {"TOPLEFT",self.controls.editWarcriesLabel,"TOPLEFT"}, 0, 18, 0, theme.stringHeight, "") + self.controls.simpleWarcries = new("LabelControl", {"TOPLEFT",self.controls.editWarcriesLabel,"TOPLEFT"}, {0, 18, 0, theme.stringHeight}, "") self.controls.simpleWarcries.shown = function() return not self.controls.ShowAdvanceTools.state end - self.controls.editLinksLabel = new("LabelControl", {"TOPLEFT",self.controls.editWarcriesLabel,"BOTTOMLEFT"}, 0, 8, 0, theme.stringHeight, "^7Link Skills") + self.controls.editLinksLabel = new("LabelControl", {"TOPLEFT",self.controls.editWarcriesLabel,"BOTTOMLEFT"}, {0, 8, 0, theme.stringHeight}, "^7Link Skills") self.controls.editLinksLabel.y = function() return self.controls.ShowAdvanceTools.state and (self.controls.editWarcries.height() + 8) or (theme.lineCounter(self.controls.simpleWarcries.label) + 4) end - self.controls.editLinks = new("EditControl", {"TOPLEFT",self.controls.editLinksLabel,"TOPLEFT"}, 0, 18, 0, 0, "", nil, "^%C\t\n", nil, nil, 14, true) + self.controls.editLinks = new("EditControl", {"TOPLEFT",self.controls.editLinksLabel,"TOPLEFT"}, {0, 18, 0, 0}, "", nil, "^%C\t\n", nil, nil, 14, true) self.controls.editLinks.width = function() return self.width / 2 - 16 end @@ -432,13 +432,13 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.controls.editLinks.shown = function() return self.controls.ShowAdvanceTools.state end - self.controls.simpleLinks = new("LabelControl", {"TOPLEFT",self.controls.editLinksLabel,"TOPLEFT"}, 0, 18, 0, theme.stringHeight, "") + self.controls.simpleLinks = new("LabelControl", {"TOPLEFT",self.controls.editLinksLabel,"TOPLEFT"}, {0, 18, 0, theme.stringHeight}, "") self.controls.simpleLinks.shown = function() return not self.controls.ShowAdvanceTools.state end - self.controls.editPartyMemberStatsLabel = new("LabelControl", {"TOPLEFT",self.controls.notesDesc,"TOPRIGHT"}, 8, 0, 0, theme.stringHeight, "^7Party Member Stats") - self.controls.editPartyMemberStats = new("EditControl", {"TOPLEFT",self.controls.editPartyMemberStatsLabel,"BOTTOMLEFT"}, 0, 2, 0, 0, "", nil, "^%C\t\n", nil, nil, 14, true) + self.controls.editPartyMemberStatsLabel = new("LabelControl", {"TOPLEFT",self.controls.notesDesc,"TOPRIGHT"}, {8, 0, 0, theme.stringHeight}, "^7Party Member Stats") + self.controls.editPartyMemberStats = new("EditControl", {"TOPLEFT",self.controls.editPartyMemberStatsLabel,"BOTTOMLEFT"}, {0, 2, 0, 0}, "", nil, "^%C\t\n", nil, nil, 14, true) self.controls.editPartyMemberStats.width = function() return self.width / 2 - 16 end @@ -449,11 +449,11 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se return self.controls.ShowAdvanceTools.state end - self.controls.enemyCondLabel = new("LabelControl", {"TOPLEFT",self.controls.editPartyMemberStatsLabel,"BOTTOMLEFT"}, 0, 8, 0, theme.stringHeight, "^7Enemy Conditions") + self.controls.enemyCondLabel = new("LabelControl", {"TOPLEFT",self.controls.editPartyMemberStatsLabel,"BOTTOMLEFT"}, {0, 8, 0, theme.stringHeight}, "^7Enemy Conditions") self.controls.enemyCondLabel.y = function() return self.controls.ShowAdvanceTools.state and (self.controls.editPartyMemberStats.height() + 8) or 4 end - self.controls.enemyCond = new("EditControl", {"TOPLEFT",self.controls.enemyCondLabel,"BOTTOMLEFT"}, 0, 2, 0, 0, "", nil, "^%C\t\n", nil, nil, 14, true) + self.controls.enemyCond = new("EditControl", {"TOPLEFT",self.controls.enemyCondLabel,"BOTTOMLEFT"}, {0, 2, 0, 0}, "", nil, "^%C\t\n", nil, nil, 14, true) self.controls.enemyCond.width = function() return self.width / 2 - 16 end @@ -463,16 +463,16 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.controls.enemyCond.shown = function() return self.controls.ShowAdvanceTools.state end - self.controls.simpleEnemyCond = new("LabelControl", {"TOPLEFT",self.controls.enemyCondLabel,"TOPLEFT"}, 0, 18, 0, theme.stringHeight, "^7---------------------------\n") + self.controls.simpleEnemyCond = new("LabelControl", {"TOPLEFT",self.controls.enemyCondLabel,"TOPLEFT"}, {0, 18, 0, theme.stringHeight}, "^7---------------------------\n") self.controls.simpleEnemyCond.shown = function() return not self.controls.ShowAdvanceTools.state end - self.controls.enemyModsLabel = new("LabelControl", {"TOPLEFT",self.controls.enemyCondLabel,"BOTTOMLEFT"}, 0, 8, 0, theme.stringHeight, "^7Enemy Modifiers") + self.controls.enemyModsLabel = new("LabelControl", {"TOPLEFT",self.controls.enemyCondLabel,"BOTTOMLEFT"}, {0, 8, 0, theme.stringHeight}, "^7Enemy Modifiers") self.controls.enemyModsLabel.y = function() return self.controls.ShowAdvanceTools.state and (self.controls.enemyCond.height() + 8) or (theme.lineCounter(self.controls.simpleEnemyCond.label) + 4) end - self.controls.enemyMods = new("EditControl", {"TOPLEFT",self.controls.enemyModsLabel,"BOTTOMLEFT"}, 0, 2, 0, 0, "", nil, "^%C\t\n", nil, nil, 14, true) + self.controls.enemyMods = new("EditControl", {"TOPLEFT",self.controls.enemyModsLabel,"BOTTOMLEFT"}, {0, 2, 0, 0}, "", nil, "^%C\t\n", nil, nil, 14, true) self.controls.enemyMods.width = function() return self.width / 2 - 16 end @@ -482,16 +482,16 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.controls.enemyMods.shown = function() return self.controls.ShowAdvanceTools.state end - self.controls.simpleEnemyMods = new("LabelControl", {"TOPLEFT",self.controls.enemyModsLabel,"TOPLEFT"}, 0, 18, 0, theme.stringHeight, "\n") + self.controls.simpleEnemyMods = new("LabelControl", {"TOPLEFT",self.controls.enemyModsLabel,"TOPLEFT"}, {0, 18, 0, theme.stringHeight}, "\n") self.controls.simpleEnemyMods.shown = function() return not self.controls.ShowAdvanceTools.state end - self.controls.editCursesLabel = new("LabelControl", {"TOPLEFT",self.controls.enemyModsLabel,"BOTTOMLEFT"}, 0, 8, 0, theme.stringHeight, "^7Curses") + self.controls.editCursesLabel = new("LabelControl", {"TOPLEFT",self.controls.enemyModsLabel,"BOTTOMLEFT"}, {0, 8, 0, theme.stringHeight}, "^7Curses") self.controls.editCursesLabel.y = function() return self.controls.ShowAdvanceTools.state and (self.controls.enemyMods.height() + 8) or (theme.lineCounter(self.controls.simpleEnemyMods.label) + 4) end - self.controls.editCurses = new("EditControl", {"TOPLEFT",self.controls.editCursesLabel,"BOTTOMLEFT"}, 0, 2, 0, 0, "", nil, "^%C\t\n", nil, nil, 14, true) + self.controls.editCurses = new("EditControl", {"TOPLEFT",self.controls.editCursesLabel,"BOTTOMLEFT"}, {0, 2, 0, 0}, "", nil, "^%C\t\n", nil, nil, 14, true) self.controls.editCurses.width = function() return self.width / 2 - 16 end @@ -501,7 +501,7 @@ local PartyTabClass = newClass("PartyTab", "ControlHost", "Control", function(se self.controls.editCurses.shown = function() return self.controls.ShowAdvanceTools.state end - self.controls.simpleCurses = new("LabelControl", {"TOPLEFT",self.controls.editCursesLabel,"TOPLEFT"}, 0, 18, 0, theme.stringHeight, "") + self.controls.simpleCurses = new("LabelControl", {"TOPLEFT",self.controls.editCursesLabel,"TOPLEFT"}, {0, 18, 0, theme.stringHeight}, "") self.controls.simpleCurses.shown = function() return not self.controls.ShowAdvanceTools.state end @@ -857,9 +857,21 @@ function PartyTabClass:ParseBuffs(list, buf, buffType, label) end if currentName ~= "SKIP" then if mod.source:match("Item") then - _, mod.source = mod.source:match("Item:(%d+):(.+)") + local oldItem + oldItem, mod.source = mod.source:match("Item:(%d+):(.+)") mod.source = "Party - "..mod.source end + if mod.source:match("Skill") then + local skillId = mod.source:match("Skill:(.+)") + if not data.skills[skillId] then + local minimisedName = currentName:gsub(" %l",string.upper):gsub(" ","") + if data.skills[minimisedName] then + mod.source = "Skill:"..minimisedName + else + mod.source = skillId + end + end + end if buffType == "Link" then mod.name = mod.name:gsub("Parent", "PartyMember") for _, modTag in ipairs(mod) do diff --git a/src/Classes/PassiveMasteryControl.lua b/src/Classes/PassiveMasteryControl.lua index 61e0fef119..6cf35b182c 100644 --- a/src/Classes/PassiveMasteryControl.lua +++ b/src/Classes/PassiveMasteryControl.lua @@ -10,13 +10,13 @@ local m_max = math.max local m_floor = math.floor --constructor -local PassiveMasteryControlClass = newClass("PassiveMasteryControl", "ListControl", function(self, anchor, x, y, width, height, list, treeTab, node, saveButton) +local PassiveMasteryControlClass = newClass("PassiveMasteryControl", "ListControl", function(self, anchor, rect, list, treeTab, node, saveButton) self.list = list or { } -- automagical width for j=1,#list do - width = m_max(width, DrawStringWidth(16, "VAR", list[j].label) + 5) + rect[3] = m_max(rect[3], DrawStringWidth(16, "VAR", list[j].label) + 5) end - self.ListControl(anchor, x, y, width, height, 16, false, false, self.list) + self.ListControl(anchor, rect, 16, false, false, self.list) self.treeTab = treeTab self.treeView = treeTab.viewer self.node = node diff --git a/src/Classes/PassiveSpecListControl.lua b/src/Classes/PassiveSpecListControl.lua index 7b65d5a938..f227764d8f 100644 --- a/src/Classes/PassiveSpecListControl.lua +++ b/src/Classes/PassiveSpecListControl.lua @@ -7,10 +7,10 @@ local t_insert = table.insert local t_remove = table.remove local m_max = math.max -local PassiveSpecListClass = newClass("PassiveSpecListControl", "ListControl", function(self, anchor, x, y, width, height, treeTab) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", true, treeTab.specList) +local PassiveSpecListClass = newClass("PassiveSpecListControl", "ListControl", function(self, anchor, rect, treeTab) + self.ListControl(anchor, rect, 16, "VERTICAL", true, treeTab.specList) self.treeTab = treeTab - self.controls.copy = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, 2, -4, 60, 18, "Copy", function() + self.controls.copy = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, {2, -4, 60, 18}, "Copy", function() local newSpec = new("PassiveSpec", treeTab.build, self.selValue.treeVersion) newSpec.title = self.selValue.title newSpec.jewels = copyTable(self.selValue.jewels) @@ -21,19 +21,19 @@ local PassiveSpecListClass = newClass("PassiveSpecListControl", "ListControl", f self.controls.copy.enabled = function() return self.selValue ~= nil end - self.controls.delete = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, 4, 0, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, {4, 0, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() return self.selValue ~= nil and #self.list > 1 end - self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, -2, -4, 60, 18, "Rename", function() + self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, {-2, -4, 60, 18}, "Rename", function() self:RenameSpec(self.selValue, "Rename Tree") end) self.controls.rename.enabled = function() return self.selValue ~= nil end - self.controls.new = new("ButtonControl", {"RIGHT",self.controls.rename,"LEFT"}, -4, 0, 60, 18, "New", function() + self.controls.new = new("ButtonControl", {"RIGHT",self.controls.rename,"LEFT"}, {-4, 0, 60, 18}, "New", function() local newSpec = new("PassiveSpec", treeTab.build, latestTreeVersion) newSpec:SelectClass(treeTab.build.spec.curClassId) newSpec:SelectAscendClass(treeTab.build.spec.curAscendClassId) @@ -45,11 +45,11 @@ end) function PassiveSpecListClass:RenameSpec(spec, title, addOnName) local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter name for this passive tree:") - controls.edit = new("EditControl", nil, 0, 40, 350, 20, spec.title, nil, nil, 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter name for this passive tree:") + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, spec.title, nil, nil, 100, function(buf) controls.save.enabled = buf:match("%S") end) - controls.save = new("ButtonControl", nil, -45, 70, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, 70, 80, 20}, "Save", function() spec.title = controls.edit.buf self.treeTab.modFlag = true if addOnName then @@ -62,7 +62,7 @@ function PassiveSpecListClass:RenameSpec(spec, title, addOnName) main:ClosePopup() end) controls.save.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() main:ClosePopup() end) -- main:OpenPopup(370, 100, spec.title and "Rename" or "Set Name", controls, "save", "edit") diff --git a/src/Classes/PassiveTreeView.lua b/src/Classes/PassiveTreeView.lua index c03f3a4526..666bfeae02 100644 --- a/src/Classes/PassiveTreeView.lua +++ b/src/Classes/PassiveTreeView.lua @@ -1117,7 +1117,7 @@ function PassiveTreeViewClass:AddNodeTooltip(tooltip, node, build) -- Calculated the differences caused by allocating this node and all nodes along the path to it if node.type == "Mastery" and node.allMasteryOptions then pathNodes[node] = nil - nodeOutput = calcFunc({}) + nodeOutput = calcFunc() else nodeOutput = calcFunc({ addNodes = { [node] = true } }) end diff --git a/src/Classes/PathControl.lua b/src/Classes/PathControl.lua index 35b5cc872a..4d62bef272 100644 --- a/src/Classes/PathControl.lua +++ b/src/Classes/PathControl.lua @@ -6,8 +6,8 @@ local ipairs = ipairs local t_insert = table.insert -local PathClass = newClass("PathControl", "Control", "ControlHost", "UndoHandler", function(self, anchor, x, y, width, height, basePath, subPath, onChange) - self.Control(anchor, x, y, width, height) +local PathClass = newClass("PathControl", "Control", "ControlHost", "UndoHandler", function(self, anchor, rect, basePath, subPath, onChange) + self.Control(anchor, rect) self.ControlHost() self.UndoHandler() self.basePath = basePath @@ -33,7 +33,7 @@ function PathClass:SetSubPath(subPath, noUndo) for index, folder in ipairs(self.folderList) do local button = self.controls["folder"..i] if not button then - button = new("ButtonControl", {"LEFT",self,"LEFT"}, 0, 0, 0, self.height - 4) + button = new("ButtonControl", {"LEFT",self,"LEFT"}, {0, 0, 0, self.height - 4}) self.controls["folder"..i] = button end button.shown = true diff --git a/src/Classes/PopupDialog.lua b/src/Classes/PopupDialog.lua index afcf9b865f..223059def9 100644 --- a/src/Classes/PopupDialog.lua +++ b/src/Classes/PopupDialog.lua @@ -8,7 +8,7 @@ local m_floor = math.floor local PopupDialogClass = newClass("PopupDialog", "ControlHost", "Control", function(self, width, height, title, controls, enterControl, defaultControl, escapeControl, scrollBarFunc, resizeFunc) self.ControlHost() - self.Control(nil, 0, 0, width, height) + self.Control(nil, {0, 0, width, height}) self.x = function() return m_floor((main.screenW - width) / 2) end diff --git a/src/Classes/PowerReportListControl.lua b/src/Classes/PowerReportListControl.lua index 1a58db5f78..0b08bdd60f 100644 --- a/src/Classes/PowerReportListControl.lua +++ b/src/Classes/PowerReportListControl.lua @@ -8,9 +8,10 @@ local t_insert = table.insert local t_remove = table.remove local t_sort = table.sort -local PowerReportListClass = newClass("PowerReportListControl", "ListControl", function(self, anchor, x, y, width, height, nodeSelectCallback) - self.ListControl(anchor, x, y, width, height-50, 16, "VERTICAL", false) +local PowerReportListClass = newClass("PowerReportListControl", "ListControl", function(self, anchor, rect, nodeSelectCallback) + self.ListControl(anchor, rect, 16, "VERTICAL", false) + local width = rect[3] self.powerColumn = { width = width * 0.16, label = "", sortable = true } self.colList = { { width = width * 0.15, label = "Type", sortable = true }, @@ -25,7 +26,7 @@ local PowerReportListClass = newClass("PowerReportListControl", "ListControl", f self.allocated = false self.label = "Building Tree..." - self.controls.filterSelect = new("DropDownControl", { "BOTTOMRIGHT", self, "TOPRIGHT" }, 0, -2, 200, 20, + self.controls.filterSelect = new("DropDownControl", {"BOTTOMRIGHT", self, "TOPRIGHT"}, {0, -2, 200, 20}, { "Show Unallocated", "Show Unallocated & Clusters", "Show Allocated" }, function(index, value) self.showClusters = index == 2 diff --git a/src/Classes/RectangleOutlineControl.lua b/src/Classes/RectangleOutlineControl.lua index 2acf23bf8d..8b8b0b9d47 100644 --- a/src/Classes/RectangleOutlineControl.lua +++ b/src/Classes/RectangleOutlineControl.lua @@ -3,8 +3,8 @@ -- Class: RectangleOutline Control -- Simple Outline Only Rectangle control -- -local RectangleOutlineClass = newClass("RectangleOutlineControl", "Control", function(self, anchor, x, y, width, height, colors, stroke) - self.Control(anchor, x, y, width, height) +local RectangleOutlineClass = newClass("RectangleOutlineControl", "Control", function(self, anchor, rect, colors, stroke) + self.Control(anchor, rect) self.stroke = stroke or 1 self.colors = colors or { 1, 1, 1 } end) diff --git a/src/Classes/ResizableEditControl.lua b/src/Classes/ResizableEditControl.lua index 9bff3bd5fe..66a0402e3f 100644 --- a/src/Classes/ResizableEditControl.lua +++ b/src/Classes/ResizableEditControl.lua @@ -6,13 +6,14 @@ local m_max = math.max local m_min = math.min -local ResizableEditClass = newClass("ResizableEditControl", "EditControl", function(self, anchor, x, y, minWidth, width, maxWidth, minHeight, height, maxHeight, init, prompt, filter, limit, changeFunc, lineHeight, allowZoom, clearable) - self.EditControl(anchor, x, y, width, height, init, prompt, filter, limit, changeFunc, lineHeight, allowZoom, clearable) +local ResizableEditClass = newClass("ResizableEditControl", "EditControl", function(self, anchor, rect, init, prompt, filter, limit, changeFunc, lineHeight, allowZoom, clearable) + self.EditControl(anchor, rect, init, prompt, filter, limit, changeFunc, lineHeight, allowZoom, clearable) + local x, y, width, height, minWidth, minHeight, maxWidth, maxHeight = unpack(rect) self.minHeight = minHeight or height self.maxHeight = maxHeight or height self.minWidth = minWidth or width self.maxWidth = maxWidth or width - self.controls.draggerHeight = new("DraggerControl", {"BOTTOMRIGHT", self, "BOTTOMRIGHT"}, 7, 7, 14, 14, "//", nil, nil, function (position) + self.controls.draggerHeight = new("DraggerControl", {"BOTTOMRIGHT", self, "BOTTOMRIGHT"}, {7, 7, 14, 14}, "//", nil, nil, function (position) -- onRightClick if (self.height ~= self.minHeight) or (self.width ~= self.minWidth) then self:SetWidth(self.minWidth) diff --git a/src/Classes/ScrollBarControl.lua b/src/Classes/ScrollBarControl.lua index 8a7260470d..7dfc416e9e 100644 --- a/src/Classes/ScrollBarControl.lua +++ b/src/Classes/ScrollBarControl.lua @@ -8,9 +8,9 @@ local m_max = math.max local m_ceil = math.ceil local m_floor = math.floor -local ScrollBarClass = newClass("ScrollBarControl", "Control", function(self, anchor, x, y, width, height, step, dir, autoHide) - self.Control(anchor, x, y, width, height) - self.step = step or width * 2 +local ScrollBarClass = newClass("ScrollBarControl", "Control", function(self, anchor, rect, step, dir, autoHide) + self.Control(anchor, rect) + self.step = step or self.width * 2 self.dir = dir or "VERTICAL" self.offset = 0 self.enabled = false diff --git a/src/Classes/SectionControl.lua b/src/Classes/SectionControl.lua index 1d2390e99b..45e1498d2e 100644 --- a/src/Classes/SectionControl.lua +++ b/src/Classes/SectionControl.lua @@ -4,8 +4,8 @@ -- Section box with label -- -local SectionClass = newClass("SectionControl", "Control", function(self, anchor, x, y, width, height, label) - self.Control(anchor, x, y, width, height) +local SectionClass = newClass("SectionControl", "Control", function(self, anchor, rect, label) + self.Control(anchor, rect) self.label = label end) diff --git a/src/Classes/SharedItemListControl.lua b/src/Classes/SharedItemListControl.lua index 9672f38d56..b7605b61dc 100644 --- a/src/Classes/SharedItemListControl.lua +++ b/src/Classes/SharedItemListControl.lua @@ -7,13 +7,13 @@ local pairs = pairs local t_insert = table.insert local t_remove = table.remove -local SharedItemListClass = newClass("SharedItemListControl", "ListControl", function(self, anchor, x, y, width, height, itemsTab, forceTooltip) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", true, main.sharedItemList, forceTooltip) +local SharedItemListClass = newClass("SharedItemListControl", "ListControl", function(self, anchor, rect, itemsTab, forceTooltip) + self.ListControl(anchor, rect, 16, "VERTICAL", true, main.sharedItemList, forceTooltip) self.itemsTab = itemsTab self.label = "^7Shared items:" self.defaultText = "^x7F7F7FThis is a list of items that will be shared between all of\nyour builds.\nYou can add items to this list by dragging them from\none of the other lists." self.dragTargetList = { } - self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, 0, -2, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, {0, -2, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() diff --git a/src/Classes/SharedItemSetListControl.lua b/src/Classes/SharedItemSetListControl.lua index c6dfeefb81..c24932a705 100644 --- a/src/Classes/SharedItemSetListControl.lua +++ b/src/Classes/SharedItemSetListControl.lua @@ -8,17 +8,17 @@ local t_remove = table.remove local m_max = math.max local s_format = string.format -local SharedItemSetListClass = newClass("SharedItemSetListControl", "ListControl", function(self, anchor, x, y, width, height, itemsTab) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", true, main.sharedItemSetList) +local SharedItemSetListClass = newClass("SharedItemSetListControl", "ListControl", function(self, anchor, rect, itemsTab) + self.ListControl(anchor, rect, 16, "VERTICAL", true, main.sharedItemSetList) self.itemsTab = itemsTab self.defaultText = "^x7F7F7FThis is a list of item sets that will be shared\nbetween all of your builds.\nYou can add sets to this list by dragging them\nfrom the build's set list." - self.controls.delete = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, 2, -4, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, {2, -4, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() return self.selValue ~= nil end - self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, -2, -4, 60, 18, "Rename", function() + self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, {-2, -4, 60, 18}, "Rename", function() self:RenameSet(self.selValue) end) self.controls.rename.enabled = function() @@ -28,17 +28,17 @@ end) function SharedItemSetListClass:RenameSet(sharedItemSet) local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter name for this item set:") - controls.edit = new("EditControl", nil, 0, 40, 350, 20, sharedItemSet.title, nil, nil, 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter name for this item set:") + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, sharedItemSet.title, nil, nil, 100, function(buf) controls.save.enabled = buf:match("%S") end) - controls.save = new("ButtonControl", nil, -45, 70, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, 70, 80, 20}, "Save", function() sharedItemSet.title = controls.edit.buf self.itemsTab.modFlag = true main:ClosePopup() end) controls.save.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(370, 100, sharedItemSet.title and "Rename" or "Set Name", controls, "save", "edit") diff --git a/src/Classes/SkillListControl.lua b/src/Classes/SkillListControl.lua index e2126f3841..02a95c3ffe 100644 --- a/src/Classes/SkillListControl.lua +++ b/src/Classes/SkillListControl.lua @@ -25,17 +25,17 @@ local slot_map = { ["Belt"] = { icon = NewImageHandle(), path = "Assets/icon_belt.png" }, } -local SkillListClass = newClass("SkillListControl", "ListControl", function(self, anchor, x, y, width, height, skillsTab) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", true, skillsTab.socketGroupList) +local SkillListClass = newClass("SkillListControl", "ListControl", function(self, anchor, rect, skillsTab) + self.ListControl(anchor, rect, 16, "VERTICAL", true, skillsTab.socketGroupList) self.skillsTab = skillsTab self.label = "^7Socket Groups:" - self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, 0, -2, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"BOTTOMRIGHT",self,"TOPRIGHT"}, {0, -2, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() return self.selValue ~= nil and self.selValue.source == nil end - self.controls.deleteAll = new("ButtonControl", {"RIGHT",self.controls.delete,"LEFT"}, -4, 0, 70, 18, "Delete All", function() + self.controls.deleteAll = new("ButtonControl", {"RIGHT",self.controls.delete,"LEFT"}, {-4, 0, 70, 18}, "Delete All", function() main:OpenConfirmPopup("Delete All", "Are you sure you want to delete all socket groups in this build?", "Delete", function() wipeTable(self.list) skillsTab:SetDisplayGroup() @@ -48,7 +48,7 @@ local SkillListClass = newClass("SkillListControl", "ListControl", function(self self.controls.deleteAll.enabled = function() return #self.list > 0 end - self.controls.new = new("ButtonControl", {"RIGHT",self.controls.deleteAll,"LEFT"}, -4, 0, 60, 18, "New", function() + self.controls.new = new("ButtonControl", {"RIGHT",self.controls.deleteAll,"LEFT"}, {-4, 0, 60, 18}, "New", function() local newGroup = { label = "", enabled = true, diff --git a/src/Classes/SkillSetListControl.lua b/src/Classes/SkillSetListControl.lua index c0752f2e83..d93e175ae9 100644 --- a/src/Classes/SkillSetListControl.lua +++ b/src/Classes/SkillSetListControl.lua @@ -8,10 +8,10 @@ local t_remove = table.remove local m_max = math.max local s_format = string.format -local SkillSetListClass = newClass("SkillSetListControl", "ListControl", function(self, anchor, x, y, width, height, skillsTab) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", true, skillsTab.skillSetOrderList) +local SkillSetListClass = newClass("SkillSetListControl", "ListControl", function(self, anchor, rect, skillsTab) + self.ListControl(anchor, rect, 16, "VERTICAL", true, skillsTab.skillSetOrderList) self.skillsTab = skillsTab - self.controls.copy = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, 2, -4, 60, 18, "Copy", function() + self.controls.copy = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, {2, -4, 60, 18}, "Copy", function() local skillSet = skillsTab.skillSets[self.selValue] local newSkillSet = copyTable(skillSet, true) newSkillSet.socketGroupList = { } @@ -33,30 +33,30 @@ local SkillSetListClass = newClass("SkillSetListControl", "ListControl", functio self.controls.copy.enabled = function() return self.selValue ~= nil end - self.controls.delete = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, 4, 0, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, {4, 0, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex, self.selValue) end) self.controls.delete.enabled = function() return self.selValue ~= nil and #self.list > 1 end - self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, -2, -4, 60, 18, "Rename", function() + self.controls.rename = new("ButtonControl", {"BOTTOMRIGHT",self,"TOP"}, {-2, -4, 60, 18}, "Rename", function() self:RenameSet(skillsTab.skillSets[self.selValue]) end) self.controls.rename.enabled = function() return self.selValue ~= nil end - self.controls.new = new("ButtonControl", {"RIGHT",self.controls.rename,"LEFT"}, -4, 0, 60, 18, "New", function() + self.controls.new = new("ButtonControl", {"RIGHT",self.controls.rename,"LEFT"}, {-4, 0, 60, 18}, "New", function() self:RenameSet(skillsTab:NewSkillSet(), true) end) end) function SkillSetListClass:RenameSet(skillSet, addOnName) local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter name for this skill set:") - controls.edit = new("EditControl", nil, 0, 40, 350, 20, skillSet.title, nil, nil, 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter name for this skill set:") + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, skillSet.title, nil, nil, 100, function(buf) controls.save.enabled = buf:match("%S") end) - controls.save = new("ButtonControl", nil, -45, 70, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, 70, 80, 20}, "Save", function() skillSet.title = controls.edit.buf self.skillsTab.modFlag = true if addOnName then @@ -69,7 +69,7 @@ function SkillSetListClass:RenameSet(skillSet, addOnName) main:ClosePopup() end) controls.save.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() if addOnName then self.skillsTab.skillSets[skillSet.id] = nil end diff --git a/src/Classes/SkillsTab.lua b/src/Classes/SkillsTab.lua index 62909a4e3f..f188c42fa6 100644 --- a/src/Classes/SkillsTab.lua +++ b/src/Classes/SkillsTab.lua @@ -93,7 +93,7 @@ local SkillsTabClass = newClass("SkillsTab", "UndoHandler", "ControlHost", "Cont self.defaultGemQuality = main.defaultGemQuality -- Set selector - self.controls.setSelect = new("DropDownControl", { "TOPLEFT", self, "TOPLEFT" }, 76, 8, 210, 20, nil, function(index, value) + self.controls.setSelect = new("DropDownControl", { "TOPLEFT", self, "TOPLEFT" }, { 76, 8, 210, 20 }, nil, function(index, value) self:SetActiveSkillSet(self.skillSetOrderList[index]) self:AddUndoState() end) @@ -101,14 +101,14 @@ local SkillsTabClass = newClass("SkillsTab", "UndoHandler", "ControlHost", "Cont self.controls.setSelect.enabled = function() return #self.skillSetOrderList > 1 end - self.controls.setLabel = new("LabelControl", { "RIGHT", self.controls.setSelect, "LEFT" }, -2, 0, 0, 16, "^7Skill set:") - self.controls.setManage = new("ButtonControl", { "LEFT", self.controls.setSelect, "RIGHT" }, 4, 0, 90, 20, "Manage...", function() + self.controls.setLabel = new("LabelControl", { "RIGHT", self.controls.setSelect, "LEFT" }, { -2, 0, 0, 16 }, "^7Skill set:") + self.controls.setManage = new("ButtonControl", { "LEFT", self.controls.setSelect, "RIGHT" }, { 4, 0, 90, 20 }, "Manage...", function() self:OpenSkillSetManagePopup() end) -- Socket group list - self.controls.groupList = new("SkillListControl", { "TOPLEFT", self, "TOPLEFT" }, 20, 54, 360, 300, self) - self.controls.groupTip = new("LabelControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, 0, 8, 0, 14, + self.controls.groupList = new("SkillListControl", { "TOPLEFT", self, "TOPLEFT" }, { 20, 54, 360, 300 }, self) + self.controls.groupTip = new("LabelControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, { 0, 8, 0, 14 }, [[ ^7Usage Tips: - You can copy/paste socket groups using Ctrl+C and Ctrl+V. @@ -121,14 +121,14 @@ local SkillsTabClass = newClass("SkillsTab", "UndoHandler", "ControlHost", "Cont -- Gem options local optionInputsX = 170 local optionInputsY = 45 - self.controls.optionSection = new("SectionControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, 0, optionInputsY + 50, 360, 156, "Gem Options") - self.controls.sortGemsByDPS = new("CheckBoxControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, optionInputsX, optionInputsY + 70, 20, "Sort gems by DPS:", function(state) + self.controls.optionSection = new("SectionControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, { 0, optionInputsY + 50, 360, 156 }, "Gem Options") + self.controls.sortGemsByDPS = new("CheckBoxControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, { optionInputsX, optionInputsY + 70, 20 }, "Sort gems by DPS:", function(state) self.sortGemsByDPS = state end, nil, true) - self.controls.sortGemsByDPSFieldControl = new("DropDownControl", { "LEFT", self.controls.sortGemsByDPS, "RIGHT" }, 10, 0, 140, 20, sortGemTypeList, function(index, value) + self.controls.sortGemsByDPSFieldControl = new("DropDownControl", { "LEFT", self.controls.sortGemsByDPS, "RIGHT" }, { 10, 0, 140, 20 }, sortGemTypeList, function(index, value) self.sortGemsByDPSField = value.type end) - self.controls.defaultLevel = new("DropDownControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, optionInputsX, optionInputsY + 94, 170, 20, defaultGemLevelList, function(index, value) + self.controls.defaultLevel = new("DropDownControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, { optionInputsX, optionInputsY + 94, 170, 20 }, defaultGemLevelList, function(index, value) self.defaultGemLevel = value.gemLevel end) self.controls.defaultLevel.tooltipFunc = function(tooltip, mode, index, value) @@ -137,36 +137,36 @@ local SkillsTabClass = newClass("SkillsTab", "UndoHandler", "ControlHost", "Cont tooltip:AddLine(16, "^7" .. value.description) end end - self.controls.defaultLevelLabel = new("LabelControl", { "RIGHT", self.controls.defaultLevel, "LEFT" }, -4, 0, 0, 16, "^7Default gem level:") - self.controls.defaultQuality = new("EditControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, optionInputsX, optionInputsY + 118, 60, 20, nil, nil, "%D", 2, function(buf) + self.controls.defaultLevelLabel = new("LabelControl", { "RIGHT", self.controls.defaultLevel, "LEFT" }, { -4, 0, 0, 16 }, "^7Default gem level:") + self.controls.defaultQuality = new("EditControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, { optionInputsX, optionInputsY + 118, 60, 20 }, nil, nil, "%D", 2, function(buf) self.defaultGemQuality = m_min(tonumber(buf) or 0, 23) end) - self.controls.defaultQualityLabel = new("LabelControl", { "RIGHT", self.controls.defaultQuality, "LEFT" }, -4, 0, 0, 16, "^7Default gem quality:") - self.controls.showSupportGemTypes = new("DropDownControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, optionInputsX, optionInputsY + 142, 170, 20, showSupportGemTypeList, function(index, value) + self.controls.defaultQualityLabel = new("LabelControl", { "RIGHT", self.controls.defaultQuality, "LEFT" }, { -4, 0, 0, 16 }, "^7Default gem quality:") + self.controls.showSupportGemTypes = new("DropDownControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, { optionInputsX, optionInputsY + 142, 170, 20 }, showSupportGemTypeList, function(index, value) self.showSupportGemTypes = value.show end) - self.controls.showSupportGemTypesLabel = new("LabelControl", { "RIGHT", self.controls.showSupportGemTypes, "LEFT" }, -4, 0, 0, 16, "^7Show support gems:") - self.controls.showAltQualityGems = new("CheckBoxControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, optionInputsX, optionInputsY + 166, 20, "^7Show quality variants:", function(state) + self.controls.showSupportGemTypesLabel = new("LabelControl", { "RIGHT", self.controls.showSupportGemTypes, "LEFT" }, { -4, 0, 0, 16 }, "^7Show support gems:") + self.controls.showAltQualityGems = new("CheckBoxControl", { "TOPLEFT", self.controls.groupList, "BOTTOMLEFT" }, { optionInputsX, optionInputsY + 166, 20 }, "^7Show quality variants:", function(state) self.showAltQualityGems = state end) -- Socket group details if main.portraitMode then - self.anchorGroupDetail = new("Control", { "TOPLEFT", self.controls.optionSection, "BOTTOMLEFT" }, 0, 20, 0, 0) + self.anchorGroupDetail = new("Control", { "TOPLEFT", self.controls.optionSection, "BOTTOMLEFT" }, { 0, 20, 0, 0 }) else - self.anchorGroupDetail = new("Control", { "TOPLEFT", self.controls.groupList, "TOPRIGHT" }, 20, 0, 0, 0) + self.anchorGroupDetail = new("Control", { "TOPLEFT", self.controls.groupList, "TOPRIGHT" }, { 20, 0, 0, 0 }) end self.anchorGroupDetail.shown = function() return self.displayGroup ~= nil end - self.controls.groupLabel = new("EditControl", { "TOPLEFT", self.anchorGroupDetail, "TOPLEFT" }, 0, 0, 380, 20, nil, "Label", "%c", 50, function(buf) + self.controls.groupLabel = new("EditControl", { "TOPLEFT", self.anchorGroupDetail, "TOPLEFT" }, { 0, 0, 380, 20 }, nil, "Label", "%c", 50, function(buf) self.displayGroup.label = buf self:ProcessSocketGroup(self.displayGroup) self:AddUndoState() self.build.buildFlag = true end) - self.controls.groupSlotLabel = new("LabelControl", { "TOPLEFT", self.anchorGroupDetail, "TOPLEFT" }, 0, 30, 0, 16, "^7Socketed in:") - self.controls.groupSlot = new("DropDownControl", { "TOPLEFT", self.anchorGroupDetail, "TOPLEFT" }, 85, 28, 130, 20, groupSlotDropList, function(index, value) + self.controls.groupSlotLabel = new("LabelControl", { "TOPLEFT", self.anchorGroupDetail, "TOPLEFT" }, { 0, 30, 0, 16 }, "^7Socketed in:") + self.controls.groupSlot = new("DropDownControl", { "TOPLEFT", self.anchorGroupDetail, "TOPLEFT" }, { 85, 28, 130, 20 }, groupSlotDropList, function(index, value) self.displayGroup.slot = value.slotName self:AddUndoState() self.build.buildFlag = true @@ -189,21 +189,21 @@ local SkillsTabClass = newClass("SkillsTab", "UndoHandler", "ControlHost", "Cont self.controls.groupSlot.enabled = function() return self.displayGroup.source == nil end - self.controls.groupEnabled = new("CheckBoxControl", { "LEFT", self.controls.groupSlot, "RIGHT" }, 70, 0, 20, "Enabled:", function(state) + self.controls.groupEnabled = new("CheckBoxControl", { "LEFT", self.controls.groupSlot, "RIGHT" }, { 70, 0, 20 }, "Enabled:", function(state) self.displayGroup.enabled = state self:AddUndoState() self.build.buildFlag = true end) - self.controls.includeInFullDPS = new("CheckBoxControl", { "LEFT", self.controls.groupEnabled, "RIGHT" }, 145, 0, 20, "Include in Full DPS:", function(state) + self.controls.includeInFullDPS = new("CheckBoxControl", { "LEFT", self.controls.groupEnabled, "RIGHT" }, { 145, 0, 20 }, "Include in Full DPS:", function(state) self.displayGroup.includeInFullDPS = state self:AddUndoState() self.build.buildFlag = true end) - self.controls.groupCountLabel = new("LabelControl", { "LEFT", self.controls.includeInFullDPS, "RIGHT" }, 16, 0, 0, 16, "Count:") + self.controls.groupCountLabel = new("LabelControl", { "LEFT", self.controls.includeInFullDPS, "RIGHT" }, { 16, 0, 0, 16 }, "Count:") self.controls.groupCountLabel.shown = function() return self.displayGroup.source ~= nil end - self.controls.groupCount = new("EditControl", { "LEFT", self.controls.groupCountLabel, "RIGHT" }, 4, 0, 60, 20, nil, nil, "%D", 2, function(buf) + self.controls.groupCount = new("EditControl", { "LEFT", self.controls.groupCountLabel, "RIGHT" }, { 4, 0, 60, 20 }, nil, nil, "%D", 2, function(buf) self.displayGroup.groupCount = tonumber(buf) or 1 self:AddUndoState() self.build.buildFlag = true @@ -211,7 +211,7 @@ local SkillsTabClass = newClass("SkillsTab", "UndoHandler", "ControlHost", "Cont self.controls.groupCount.shown = function() return self.displayGroup.source ~= nil end - self.controls.sourceNote = new("LabelControl", { "TOPLEFT", self.controls.groupSlotLabel, "TOPLEFT" }, 0, 30, 0, 16) + self.controls.sourceNote = new("LabelControl", { "TOPLEFT", self.controls.groupSlotLabel, "TOPLEFT" }, { 0, 30, 0, 16 }) self.controls.sourceNote.shown = function() return self.displayGroup.source ~= nil end @@ -248,7 +248,7 @@ will automatically apply to the skill.]] end -- Scroll bar - self.controls.scrollBarH = new("ScrollBarControl", nil, 0, 0, 0, 18, 100, "HORIZONTAL", true) + self.controls.scrollBarH = new("ScrollBarControl", nil, {0, 0, 0, 18}, 100, "HORIZONTAL", true) -- Initialise skill sets self.skillSets = { } @@ -257,15 +257,15 @@ will automatically apply to the skill.]] self:SetActiveSkillSet(1) -- Skill gem slots - self.anchorGemSlots = new("Control", {"TOPLEFT",self.anchorGroupDetail,"TOPLEFT"}, 0, 28 + 28 + 16, 0, 0) + self.anchorGemSlots = new("Control", {"TOPLEFT",self.anchorGroupDetail,"TOPLEFT"}, {0, 28 + 28 + 16, 0, 0}) self.gemSlots = { } self:CreateGemSlot(1) - self.controls.gemNameHeader = new("LabelControl", { "BOTTOMLEFT", self.gemSlots[1].nameSpec, "TOPLEFT" }, 0, -2, 0, 16, "^7Gem name:") - self.controls.gemLevelHeader = new("LabelControl", { "BOTTOMLEFT", self.gemSlots[1].level, "TOPLEFT" }, 0, -2, 0, 16, "^7Level:") - self.controls.gemQualityIdHeader = new("LabelControl", { "BOTTOMLEFT", self.gemSlots[1].qualityId, "TOPLEFT" }, 0, -2, 0, 16, "^7Variant:") - self.controls.gemQualityHeader = new("LabelControl", { "BOTTOMLEFT", self.gemSlots[1].quality, "TOPLEFT" }, 0, -2, 0, 16, "^7Quality:") - self.controls.gemEnableHeader = new("LabelControl", { "BOTTOMLEFT", self.gemSlots[1].enabled, "TOPLEFT" }, -16, -2, 0, 16, "^7Enabled:") - self.controls.gemCountHeader = new("LabelControl", { "BOTTOMLEFT", self.gemSlots[1].count, "TOPLEFT" }, 8, -2, 0, 16, "^7Count:") + self.controls.gemNameHeader = new("LabelControl", {"BOTTOMLEFT", self.gemSlots[1].nameSpec, "TOPLEFT"}, {0, -2, 0, 16}, "^7Gem name:") + self.controls.gemLevelHeader = new("LabelControl", {"BOTTOMLEFT", self.gemSlots[1].level, "TOPLEFT"}, {0, -2, 0, 16}, "^7Level:") + self.controls.gemQualityIdHeader = new("LabelControl", {"BOTTOMLEFT", self.gemSlots[1].qualityId, "TOPLEFT"}, {0, -2, 0, 16}, "^7Variant:") + self.controls.gemQualityHeader = new("LabelControl", {"BOTTOMLEFT", self.gemSlots[1].quality, "TOPLEFT"}, {0, -2, 0, 16}, "^7Quality:") + self.controls.gemEnableHeader = new("LabelControl", {"BOTTOMLEFT", self.gemSlots[1].enabled, "TOPLEFT"}, {-16, -2, 0, 16}, "^7Enabled:") + self.controls.gemCountHeader = new("LabelControl", {"BOTTOMLEFT", self.gemSlots[1].count, "TOPLEFT"}, {8, -2, 0, 16}, "^7Count:") end) -- parse real gem name and quality by omitting the first word if alt qual is set @@ -599,7 +599,7 @@ function SkillsTabClass:CreateGemSlot(index) self.gemSlots[index] = slot -- Delete gem - slot.delete = new("ButtonControl", nil, 0, 0, 20, 20, "x", function() + slot.delete = new("ButtonControl", nil, {0, 0, 20, 20}, "x", function() t_remove(self.displayGroup.gemList, index) for index2 = index, #self.displayGroup.gemList do -- Update the other gem slot controls @@ -635,7 +635,7 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."Delete"] = slot.delete -- Gem name specification - slot.nameSpec = new("GemSelectControl", { "LEFT", slot.delete, "RIGHT" }, 2, 0, 300, 20, self, index, function(gemId, qualityId, addUndo) + slot.nameSpec = new("GemSelectControl", { "LEFT", slot.delete, "RIGHT" }, { 2, 0, 300, 20 }, self, index, function(gemId, qualityId, addUndo) if not self.displayGroup then return end @@ -690,7 +690,7 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."Name"] = slot.nameSpec -- Gem level - slot.level = new("EditControl", { "LEFT", slot.nameSpec, "RIGHT" }, 2, 0, 60, 20, nil, nil, "%D", 2, function(buf) + slot.level = new("EditControl", { "LEFT", slot.nameSpec, "RIGHT" }, { 2, 0, 60, 20 }, nil, nil, "%D", 2, function(buf) local gemInstance = self.displayGroup.gemList[index] if not gemInstance then gemInstance = { nameSpec = "", level = self.defaultGemLevel or 20, quality = self.defaultGemQuality or 0, qualityId = "Default", enabled = true, enableGlobal1 = true, enableGlobal2 = true, count = 1, new = true } @@ -714,7 +714,7 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."Level"] = slot.level -- Gem quality id - slot.qualityId = new("DropDownControl", {"LEFT",slot.level,"RIGHT"}, 2, 0, 90, 20, alternateGemQualityList, function(dropDownIndex, value) + slot.qualityId = new("DropDownControl", {"LEFT",slot.level,"RIGHT"}, {2, 0, 90, 20}, alternateGemQualityList, function(dropDownIndex, value) local gemInstance = self.displayGroup.gemList[index] if not gemInstance then gemInstance = { nameSpec = "", level = self.defaultGemLevel or 20, quality = self.defaultGemQuality or 0, qualityId = "Default", enabled = true, enableGlobal1 = true, enableGlobal2 = true, count = 1, new = true } @@ -792,10 +792,7 @@ function SkillsTabClass:CreateGemSlot(index) local tempQual = self.displayGroup.gemList[index].qualityId self.displayGroup.gemList[index].qualityId = hoveredQuality.type self:ProcessSocketGroup(self.displayGroup) - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local output = calcFunc({}, {}) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local output = calcFunc() self.displayGroup.gemList[index].qualityId = tempQual tooltip:AddSeparator(10) self.build:AddStatComparesToTooltip(tooltip, calcBase, output, "^7Switching to this quality variant will give you:") @@ -805,7 +802,7 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."QualityId"] = slot.qualityId -- Gem quality - slot.quality = new("EditControl", {"LEFT",slot.qualityId,"RIGHT"}, 2, 0, 60, 20, nil, nil, "%D", 2, function(buf) + slot.quality = new("EditControl", {"LEFT",slot.qualityId,"RIGHT"}, {2, 0, 60, 20}, nil, nil, "%D", 2, function(buf) local gemInstance = self.displayGroup.gemList[index] if not gemInstance then gemInstance = { nameSpec = "", level = self.defaultGemLevel or 20, quality = self.defaultGemQuality or 0, qualityId = "Default", enabled = true, enableGlobal1 = true, enableGlobal2 = true, count = 1, new = true } @@ -827,10 +824,7 @@ function SkillsTabClass:CreateGemSlot(index) if calcFunc then local storedQuality = self.displayGroup.gemList[index].quality self.displayGroup.gemList[index].quality = 20 - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local output = calcFunc({}, {}) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local output = calcFunc() self.displayGroup.gemList[index].quality = storedQuality self.build:AddStatComparesToTooltip(tooltip, calcBase, output, "^7Setting to 20 quality will give you:") end @@ -844,7 +838,7 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."Quality"] = slot.quality -- Enable gem - slot.enabled = new("CheckBoxControl", {"LEFT",slot.quality,"RIGHT"}, 18, 0, 20, nil, function(state) + slot.enabled = new("CheckBoxControl", {"LEFT",slot.quality,"RIGHT"}, {18, 0, 20}, nil, function(state) local gemInstance = self.displayGroup.gemList[index] if not gemInstance then gemInstance = { nameSpec = "", level = self.defaultGemLevel or 20, quality = self.defaultGemQuality or 0, qualityId = "Default", enabled = true, enableGlobal1 = true, enableGlobal2 = true, count = 1, new = true } @@ -872,10 +866,7 @@ function SkillsTabClass:CreateGemSlot(index) local calcFunc, calcBase = self.build.calcsTab:GetMiscCalculator(self.build) if calcFunc then self.displayGroup.gemList[index].enabled = not self.displayGroup.gemList[index].enabled - local storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - local output = calcFunc({}, {}) - GlobalCache.useFullDPS = storedGlobalCacheDPSView + local output = calcFunc() self.displayGroup.gemList[index].enabled = not self.displayGroup.gemList[index].enabled self.build:AddStatComparesToTooltip(tooltip, calcBase, output, self.displayGroup.gemList[index].enabled and "^7Disabling this gem will give you:" or "^7Enabling this gem will give you:") end @@ -888,7 +879,7 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."Enable"] = slot.enabled -- Count gem - slot.count = new("EditControl", {"LEFT",slot.enabled,"RIGHT"}, 18, 0, 60, 20, nil, nil, "%D", 2, function(buf) + slot.count = new("EditControl", {"LEFT",slot.enabled,"RIGHT"}, {18, 0, 60, 20}, nil, nil, "%D", 2, function(buf) local gemInstance = self.displayGroup.gemList[index] if not gemInstance then gemInstance = { nameSpec = "", level = self.defaultGemLevel or 20, quality = self.defaultGemQuality or 0, qualityId = "Default", enabled = true, enableGlobal1 = true, count = 1, new = true } @@ -931,14 +922,14 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."Count"] = slot.count -- Parser/calculator error message - slot.errMsg = new("LabelControl", {"LEFT",slot.count,"RIGHT"}, 2, 2, 0, 16, function() + slot.errMsg = new("LabelControl", {"LEFT",slot.count,"RIGHT"}, {2, 2, 0, 16}, function() local gemInstance = self.displayGroup and self.displayGroup.gemList[index] return "^1"..(gemInstance and gemInstance.errMsg or "") end) self.controls["gemSlot"..index.."ErrMsg"] = slot.errMsg -- Enable global-effect skill 1 - slot.enableGlobal1 = new("CheckBoxControl", {"TOPLEFT",slot.delete,"BOTTOMLEFT"}, 0, 2, 20, "", function(state) + slot.enableGlobal1 = new("CheckBoxControl", {"TOPLEFT",slot.delete,"BOTTOMLEFT"}, {0, 2, 20}, "", function(state) local gemInstance = self.displayGroup.gemList[index] gemInstance.enableGlobal1 = state self:AddUndoState() @@ -957,7 +948,7 @@ function SkillsTabClass:CreateGemSlot(index) self.controls["gemSlot"..index.."EnableGlobal1"] = slot.enableGlobal1 -- Enable global-effect skill 2 - slot.enableGlobal2 = new("CheckBoxControl", {"LEFT",slot.enableGlobal1,"RIGHT",true}, 0, 0, 20, "", function(state) + slot.enableGlobal2 = new("CheckBoxControl", {"LEFT",slot.enableGlobal1,"RIGHT",true}, {0, 0, 20}, "", function(state) local gemInstance = self.displayGroup.gemList[index] gemInstance.enableGlobal2 = state self:AddUndoState() @@ -1304,8 +1295,8 @@ end -- Opens the skill set manager function SkillsTabClass:OpenSkillSetManagePopup() main:OpenPopup(370, 290, "Manage Skill Sets", { - new("SkillSetListControl", nil, 0, 50, 350, 200, self), - new("ButtonControl", nil, 0, 260, 90, 20, "Done", function() + new("SkillSetListControl", nil, {0, 50, 350, 200}, self), + new("ButtonControl", nil, {0, 260, 90, 20}, "Done", function() main:ClosePopup() end), }) diff --git a/src/Classes/SliderControl.lua b/src/Classes/SliderControl.lua index f8c86a0217..2c3048de48 100644 --- a/src/Classes/SliderControl.lua +++ b/src/Classes/SliderControl.lua @@ -7,10 +7,10 @@ local m_min = math.min local m_max = math.max local m_ceil = math.ceil -local SliderClass = newClass("SliderControl", "Control", "TooltipHost", function(self, anchor, x, y, width, height, changeFunc, scrollWheelSpeedTbl) - self.Control(anchor, x, y, width, height) +local SliderClass = newClass("SliderControl", "Control", "TooltipHost", function(self, anchor, rect, changeFunc, scrollWheelSpeedTbl) + self.Control(anchor, rect) self.TooltipHost() - self.knobSize = height - 2 + self.knobSize = self.height - 2 self.val = 0 self.changeFunc = changeFunc self.scrollWheelSpeedTbl = scrollWheelSpeedTbl or { ["SHIFT"] = 0.25, ["CTRL"] = 0.01, ["DEFAULT"] = 0.05 } diff --git a/src/Classes/TextListControl.lua b/src/Classes/TextListControl.lua index 5f996dd50b..7302a153b9 100644 --- a/src/Classes/TextListControl.lua +++ b/src/Classes/TextListControl.lua @@ -3,10 +3,10 @@ -- Class: Text List -- Simple list control for displaying a block of text -- -local TextListClass = newClass("TextListControl", "Control", "ControlHost", function(self, anchor, x, y, width, height, columns, list, sectionHeights) - self.Control(anchor, x, y, width, height) +local TextListClass = newClass("TextListControl", "Control", "ControlHost", function(self, anchor, rect, columns, list, sectionHeights) + self.Control(anchor, rect) self.ControlHost() - self.controls.scrollBar = new("ScrollBarControl", {"RIGHT",self,"RIGHT"}, -1, 0, 18, 0, 40) + self.controls.scrollBar = new("ScrollBarControl", {"RIGHT",self,"RIGHT"}, {-1, 0, 18, 0}, 40) self.controls.scrollBar.height = function() local width, height = self:GetSize() return height - 2 diff --git a/src/Classes/TimelessJewelListControl.lua b/src/Classes/TimelessJewelListControl.lua index 54259ac81a..5a55490875 100644 --- a/src/Classes/TimelessJewelListControl.lua +++ b/src/Classes/TimelessJewelListControl.lua @@ -9,11 +9,11 @@ local m_min = math.min local m_max = math.max local t_concat = table.concat -local TimelessJewelListControlClass = newClass("TimelessJewelListControl", "ListControl", function(self, anchor, x, y, width, height, build) +local TimelessJewelListControlClass = newClass("TimelessJewelListControl", "ListControl", function(self, anchor, rect, build) self.build = build self.sharedList = self.build.timelessData.sharedResults or { } self.list = self.build.timelessData.searchResults or { } - self.ListControl(anchor, x, y, width, height, 16, true, false, self.list) + self.ListControl(anchor, rect, 16, true, false, self.list) self.selIndex = nil end) diff --git a/src/Classes/TimelessJewelSocketControl.lua b/src/Classes/TimelessJewelSocketControl.lua index fc0efaab5d..7ff6bcf0cf 100644 --- a/src/Classes/TimelessJewelSocketControl.lua +++ b/src/Classes/TimelessJewelSocketControl.lua @@ -6,8 +6,8 @@ local m_min = math.min -local TimelessJewelSocketClass = newClass("TimelessJewelSocketControl", "DropDownControl", function(self, anchor, x, y, width, height, list, selFunc, build, socketViewer) - self.DropDownControl(anchor, x, y, width, height, list, selFunc) +local TimelessJewelSocketClass = newClass("TimelessJewelSocketControl", "DropDownControl", function(self, anchor, rect, list, selFunc, build, socketViewer) + self.DropDownControl(anchor, rect, list, selFunc) self.build = build self.socketViewer = socketViewer end) diff --git a/src/Classes/TradeQuery.lua b/src/Classes/TradeQuery.lua index e76d1fdd12..73b1432058 100644 --- a/src/Classes/TradeQuery.lua +++ b/src/Classes/TradeQuery.lua @@ -53,8 +53,6 @@ local TradeQueryClass = newClass("TradeQuery", function(self, itemsTab) end -- set - self.storedGlobalCacheDPSView = GlobalCache.useFullDPS - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 self.hostName = "https://www.pathofexile.com/" end) @@ -236,7 +234,7 @@ function TradeQueryClass:PriceItem() local itemSet = self.itemsTab.itemSets[itemSetId] t_insert(newItemList, itemSet.title or "Default") end - self.controls.setSelect = new("DropDownControl", {"TOPLEFT", nil, "TOPLEFT"}, pane_margins_horizontal, pane_margins_vertical, 188, row_height, newItemList, function(index, value) + self.controls.setSelect = new("DropDownControl", {"TOPLEFT", nil, "TOPLEFT"}, {pane_margins_horizontal, pane_margins_vertical, 188, row_height}, newItemList, function(index, value) self.itemsTab:SetActiveItemSet(self.itemsTab.itemSetOrderList[index]) self.itemsTab:AddUndoState() end) @@ -245,20 +243,20 @@ function TradeQueryClass:PriceItem() return #self.itemsTab.itemSetOrderList > 1 end - self.controls.poesessidButton = new("ButtonControl", {"TOPLEFT", self.controls.setSelect, "TOPLEFT"}, 0, row_height + row_vertical_padding, 188, row_height, function() return main.POESESSID ~= "" and "^2Session Mode" or colorCodes.WARNING.."No Session Mode" end, function() + self.controls.poesessidButton = new("ButtonControl", {"TOPLEFT", self.controls.setSelect, "TOPLEFT"}, {0, row_height + row_vertical_padding, 188, row_height}, function() return main.POESESSID ~= "" and "^2Session Mode" or colorCodes.WARNING.."No Session Mode" end, function() local poesessid_controls = {} - poesessid_controls.sessionInput = new("EditControl", nil, 0, 18, 350, 18, main.POESESSID, nil, "%X", 32) + poesessid_controls.sessionInput = new("EditControl", nil, {0, 18, 350, 18}, main.POESESSID, nil, "%X", 32) poesessid_controls.sessionInput:SetProtected(true) poesessid_controls.sessionInput.placeholder = "Enter your session ID here" poesessid_controls.sessionInput.tooltipText = "You can get this from your web browser's cookies while logged into the Path of Exile website." - poesessid_controls.save = new("ButtonControl", {"TOPRIGHT", poesessid_controls.sessionInput, "TOP"}, -8, 24, 90, row_height, "Save", function() + poesessid_controls.save = new("ButtonControl", {"TOPRIGHT", poesessid_controls.sessionInput, "TOP"}, {-8, 24, 90, row_height}, "Save", function() main.POESESSID = poesessid_controls.sessionInput.buf main:ClosePopup() main:SaveSettings() self:UpdateRealms() end) poesessid_controls.save.enabled = function() return #poesessid_controls.sessionInput.buf == 32 or poesessid_controls.sessionInput.buf == "" end - poesessid_controls.cancel = new("ButtonControl", {"TOPLEFT", poesessid_controls.sessionInput, "TOP"}, 8, 24, 90, row_height, "Cancel", function() + poesessid_controls.cancel = new("ButtonControl", {"TOPLEFT", poesessid_controls.sessionInput, "TOP"}, {8, 24, 90, row_height}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(364, 72, "Change session ID", poesessid_controls) @@ -281,7 +279,7 @@ on trade site to work on other leagues and realms)]] -- Fetches Box self.maxFetchPerSearchDefault = 2 - self.controls.fetchCountEdit = new("EditControl", {"TOPRIGHT", nil, "TOPRIGHT"}, -12, 19, 154, row_height, "", "Fetch Pages", "%D", 3, function(buf) + self.controls.fetchCountEdit = new("EditControl", {"TOPRIGHT", nil, "TOPRIGHT"}, {-12, 19, 154, row_height}, "", "Fetch Pages", "%D", 3, function(buf) self.maxFetchPages = m_min(m_max(tonumber(buf) or self.maxFetchPerSearchDefault, 1), 10) self.tradeQueryRequests.maxFetchPerSearch = 10 * self.maxFetchPages self.controls.fetchCountEdit.focusValue = self.maxFetchPages @@ -305,7 +303,7 @@ on trade site to work on other leagues and realms)]] self.statSortSelectionList = { } initStatSortSelectionList(self.statSortSelectionList) end - self.controls.StatWeightMultipliersButton = new("ButtonControl", {"TOPRIGHT", self.controls.fetchCountEdit, "BOTTOMRIGHT"}, 0, row_vertical_padding, 150, row_height, "^7Adjust search weights", function() + self.controls.StatWeightMultipliersButton = new("ButtonControl", {"TOPRIGHT", self.controls.fetchCountEdit, "BOTTOMRIGHT"}, {0, row_vertical_padding, 150, row_height}, "^7Adjust search weights", function() self.itemsTab.modFlag = true self:SetStatWeights() end) @@ -330,7 +328,7 @@ on trade site to work on other leagues and realms)]] self.sortModes.Price, self.sortModes.Weight, } - self.controls.itemSortSelection = new("DropDownControl", {"TOPRIGHT", self.controls.StatWeightMultipliersButton, "TOPLEFT"}, -8, 0, 170, row_height, self.itemSortSelectionList, function(index, value) + self.controls.itemSortSelection = new("DropDownControl", {"TOPRIGHT", self.controls.StatWeightMultipliersButton, "TOPLEFT"}, {-8, 0, 170, row_height}, self.itemSortSelectionList, function(index, value) self.pbItemSortSelectionIndex = index for row_idx, _ in pairs(self.resultTbl) do self:UpdateControlsWithItems(row_idx) @@ -344,10 +342,10 @@ Highest Stat Value / Price - Sorts from highest to lowest Stat Value per currenc Lowest Price - Sorts from lowest to highest price of retrieved items Highest Weight - Displays the order retrieved from trade]] self.controls.itemSortSelection:SetSel(self.pbItemSortSelectionIndex) - self.controls.itemSortSelectionLabel = new("LabelControl", {"TOPRIGHT", self.controls.itemSortSelection, "TOPLEFT"}, -4, 0, 60, 16 , "^7Sort By:") + self.controls.itemSortSelectionLabel = new("LabelControl", {"TOPRIGHT", self.controls.itemSortSelection, "TOPLEFT"}, {-4, 0, 60, 16}, "^7Sort By:") -- Use Enchant in DPS sorting - self.controls.enchantInSort = new("CheckBoxControl", {"TOPRIGHT",self.controls.fetchCountEdit,"TOPLEFT"}, -8, 0, row_height, "Include Enchants:", function(state) + self.controls.enchantInSort = new("CheckBoxControl", {"TOPRIGHT",self.controls.fetchCountEdit,"TOPLEFT"}, {-8, 0, row_height}, "Include Enchants:", function(state) self.enchantInSort = state for row_idx, _ in pairs(self.resultTbl) do self:UpdateControlsWithItems(row_idx) @@ -356,8 +354,8 @@ Highest Weight - Displays the order retrieved from trade]] self.controls.enchantInSort.tooltipText = "This includes enchants in sorting that occurs after trade results have been retrieved" -- Realm selection - self.controls.realmLabel = new("LabelControl", {"LEFT", self.controls.setSelect, "RIGHT"}, 18, 0, 20, row_height - 4, "^7Realm:") - self.controls.realm = new("DropDownControl", {"LEFT", self.controls.realmLabel, "RIGHT"}, 6, 0, 150, row_height, self.realmDropList, function(index, value) + self.controls.realmLabel = new("LabelControl", {"LEFT", self.controls.setSelect, "RIGHT"}, {18, 0, 20, row_height - 4}, "^7Realm:") + self.controls.realm = new("DropDownControl", {"LEFT", self.controls.realmLabel, "RIGHT"}, {6, 0, 150, row_height}, self.realmDropList, function(index, value) self.pbRealmIndex = index self.pbRealm = self.realmIds[value] local function setLeagueDropList() @@ -397,8 +395,8 @@ Highest Weight - Displays the order retrieved from trade]] end -- League selection - self.controls.leagueLabel = new("LabelControl", {"TOPRIGHT", self.controls.realmLabel, "TOPRIGHT"}, 0, row_height + row_vertical_padding, 20, row_height - 4, "^7League:") - self.controls.league = new("DropDownControl", {"LEFT", self.controls.leagueLabel, "RIGHT"}, 6, 0, 150, row_height, self.itemsTab.leagueDropList, function(index, value) + self.controls.leagueLabel = new("LabelControl", {"TOPRIGHT", self.controls.realmLabel, "TOPRIGHT"}, {0, row_height + row_vertical_padding, 20, row_height - 4}, "^7League:") + self.controls.league = new("DropDownControl", {"LEFT", self.controls.leagueLabel, "RIGHT"}, {6, 0, 150, row_height}, self.itemsTab.leagueDropList, function(index, value) self.pbLeagueIndex = index self.pbLeague = value self:SetCurrencyConversionButton() @@ -449,7 +447,7 @@ Highest Weight - Displays the order retrieved from trade]] t_insert(slotTables, { slotName = self.itemsTab.sockets[nodeId].label, nodeId = nodeId }) end - self.controls.sectionAnchor = new("LabelControl", { "LEFT", self.controls.poesessidButton, "LEFT" }, 0, 0, 0, 0, "") + self.controls.sectionAnchor = new("LabelControl", {"LEFT", self.controls.poesessidButton, "LEFT"}, {0, 0, 0, 0}, "") top_pane_alignment_ref = {"TOPLEFT", self.controls.sectionAnchor, "TOPLEFT"} local scrollBarShown = #slotTables > 21 -- clipping starts beyond this -- dynamically hide rows that are above or below the scrollBar @@ -474,7 +472,7 @@ Highest Weight - Displays the order retrieved from trade]] end end - self.controls.otherTradesLabel = new("LabelControl", top_pane_alignment_ref, 0, (#slotTables+1)*(row_height + row_vertical_padding), 100, 16, "^8Other trades:") + self.controls.otherTradesLabel = new("LabelControl", top_pane_alignment_ref, {0, (#slotTables+1)*(row_height + row_vertical_padding), 100, 16}, "^8Other trades:") self.controls.otherTradesLabel.shown = function() return hideRowFunc(self, #slotTables+1) end @@ -492,7 +490,7 @@ Highest Weight - Displays the order retrieved from trade]] self.pane_height = (row_height + row_vertical_padding) * effective_row_count + 2 * pane_margins_vertical + row_height / 2 local pane_width = 850 + (scrollBarShown and 25 or 0) - self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT", self.controls["StatWeightMultipliersButton"],"TOPRIGHT"}, 0, 25, 18, 0, 50, "VERTICAL", false) + self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT", self.controls["StatWeightMultipliersButton"],"TOPRIGHT"}, {0, 25, 18, 0}, 50, "VERTICAL", false) self.controls.scrollBar.shown = function() return scrollBarShown end local function wipeItemControls() @@ -502,20 +500,18 @@ Highest Weight - Displays the order retrieved from trade]] end end end - self.controls.fullPrice = new("LabelControl", {"BOTTOM", nil, "BOTTOM"}, 0, -row_height - pane_margins_vertical - row_vertical_padding, pane_width - 2 * pane_margins_horizontal, row_height, "") - GlobalCache.useFullDPS = GlobalCache.numActiveSkillInFullDPS > 0 - self.controls.close = new("ButtonControl", {"BOTTOM", nil, "BOTTOM"}, 0, -pane_margins_vertical, 90, row_height, "Done", function() - GlobalCache.useFullDPS = self.storedGlobalCacheDPSView + self.controls.fullPrice = new("LabelControl", {"BOTTOM", nil, "BOTTOM"}, {0, -row_height - pane_margins_vertical - row_vertical_padding, pane_width - 2 * pane_margins_horizontal, row_height}, "") + self.controls.close = new("ButtonControl", {"BOTTOM", nil, "BOTTOM"}, {0, -pane_margins_vertical, 90, row_height}, "Done", function() main:ClosePopup() -- there's a case where if you have a socket(s) allocated, open TradeQuery, close it, dealloc, then open TradeQuery again -- the deallocated socket controls were still showing, so this will remove all dynamically created controls from items wipeItemControls() end) - self.controls.updateCurrencyConversion = new("ButtonControl", {"BOTTOMLEFT", nil, "BOTTOMLEFT"}, pane_margins_horizontal, -pane_margins_vertical, 240, row_height, "Get Currency Conversion Rates", function() + self.controls.updateCurrencyConversion = new("ButtonControl", {"BOTTOMLEFT", nil, "BOTTOMLEFT"}, {pane_margins_horizontal, -pane_margins_vertical, 240, row_height}, "Get Currency Conversion Rates", function() self:PullPoENinjaCurrencyConversion(self.pbLeague) end) - self.controls.pbNotice = new("LabelControl", {"BOTTOMRIGHT", nil, "BOTTOMRIGHT"}, -row_height - pane_margins_vertical - row_vertical_padding, -pane_margins_vertical, 300, row_height, "") + self.controls.pbNotice = new("LabelControl", {"BOTTOMRIGHT", nil, "BOTTOMRIGHT"}, {-row_height - pane_margins_vertical - row_vertical_padding, -pane_margins_vertical, 300, row_height}, "") -- used in PopupDialog:Draw() local function scrollBarFunc() @@ -528,12 +524,13 @@ end -- Popup to set stat weight multipliers for sorting function TradeQueryClass:SetStatWeights(previousSelectionList) - local controls = { } - local statList = { } + previousSelectionList = previousSelectionList or {} + local controls = { } + local statList = { } local sliderController = { index = 1 } - local popupHeight = 285 + local popupHeight = 285 - controls.ListControl = new("TradeStatWeightMultiplierListControl", { "TOPLEFT", nil, "TOPRIGHT" }, -410, 45, 400, 200, statList, sliderController) + controls.ListControl = new("TradeStatWeightMultiplierListControl", {"TOPLEFT", nil, "TOPRIGHT"}, {-410, 45, 400, 200}, statList, sliderController) for id, stat in pairs(data.powerStatList) do if not stat.ignoreForItems and stat.label ~= "Name" then @@ -549,8 +546,8 @@ function TradeQueryClass:SetStatWeights(previousSelectionList) end end - controls.SliderLabel = new("LabelControl", { "TOPLEFT", nil, "TOPRIGHT" }, -410, 20, 0, 16, "^7"..statList[1].stat.label..":") - controls.Slider = new("SliderControl", { "TOPLEFT", controls.SliderLabel, "TOPRIGHT" }, 20, 0, 150, 16, function(value) + controls.SliderLabel = new("LabelControl", { "TOPLEFT", nil, "TOPRIGHT" }, {-410, 20, 0, 16}, "^7"..statList[1].stat.label..":") + controls.Slider = new("SliderControl", { "TOPLEFT", controls.SliderLabel, "TOPRIGHT" }, {20, 0, 150, 16}, function(value) if value == 0 then controls.SliderValue.label = "^7Disabled" statList[sliderController.index].stat.weightMult = 0 @@ -561,7 +558,7 @@ function TradeQueryClass:SetStatWeights(previousSelectionList) statList[sliderController.index].label = s_format("%.2f : ", 0.01 + value * 0.99)..statList[sliderController.index].stat.label end end) - controls.SliderValue = new("LabelControl", { "TOPLEFT", controls.Slider, "TOPRIGHT" }, 20, 0, 0, 16, "^7Disabled") + controls.SliderValue = new("LabelControl", { "TOPLEFT", controls.Slider, "TOPRIGHT" }, {20, 0, 0, 16}, "^7Disabled") controls.Slider.tooltip.realDraw = controls.Slider.tooltip.Draw controls.Slider.tooltip.Draw = function(self, x, y, width, height, viewPort) local sliderOffsetX = round(184 * (1 - controls.Slider.val)) @@ -587,7 +584,7 @@ function TradeQueryClass:SetStatWeights(previousSelectionList) end end - controls.finalise = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, -90, -10, 80, 20, "Save", function() + controls.finalise = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, {-90, -10, 80, 20}, "Save", function() main:ClosePopup() -- used in ItemsTab to save to xml under TradeSearchWeights node @@ -605,13 +602,13 @@ function TradeQueryClass:SetStatWeights(previousSelectionList) self:UpdateControlsWithItems(row_idx) end end) - controls.cancel = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, 0, -10, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, { 0, -10, 80, 20 }, "Cancel", function() if previousSelectionList and #previousSelectionList > 0 then self.statSortSelectionList = copyTable(previousSelectionList, true) end main:ClosePopup() end) - controls.reset = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, 90, -10, 80, 20, "Reset", function() + controls.reset = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, { 90, -10, 80, 20 }, "Reset", function() local previousSelection = { } if isSameAsDefaultList(self.statSortSelectionList) then previousSelection = copyTable(previousSelectionList, true) @@ -692,13 +689,7 @@ end function TradeQueryClass:ReduceOutput(output) local smallOutput = {} for _, statTable in ipairs(self.statSortSelectionList) do - if statTable.stat == "FullDPS" and GlobalCache.numActiveSkillInFullDPS == 0 then - smallOutput.TotalDPS = output.TotalDPS - smallOutput.TotalDotDPS = output.TotalDotDPS - smallOutput.CombinedDPS = output.CombinedDPS - else - smallOutput[statTable.stat] = output[statTable.stat] - end + smallOutput[statTable.stat] = output[statTable.stat] end return smallOutput end @@ -728,10 +719,10 @@ function TradeQueryClass:GetResultEvaluation(row_idx, result_index, calcFunc, ba for nodeName in (result.item_string.."\r\n"):gmatch("1 Added Passive Skill is (.-)\r?\n") do t_insert(addedNodes, self.itemsTab.build.spec.tree.clusterNodeMap[nodeName]) end - local output12 = self:ReduceOutput(calcFunc({ addNodes = { [addedNodes[1]] = true, [addedNodes[2]] = true } }, { requirementsItems = true, requirementsGems = true, skills = true })) - local output13 = self:ReduceOutput(calcFunc({ addNodes = { [addedNodes[1]] = true, [addedNodes[3]] = true } }, { requirementsItems = true, requirementsGems = true, skills = true })) - local output23 = self:ReduceOutput(calcFunc({ addNodes = { [addedNodes[2]] = true, [addedNodes[3]] = true } }, { requirementsItems = true, requirementsGems = true, skills = true })) - local output123 = self:ReduceOutput(calcFunc({ addNodes = { [addedNodes[1]] = true, [addedNodes[2]] = true, [addedNodes[3]] = true } }), { requirementsItems = true, requirementsGems = true, skills = true }) + local output12 = self:ReduceOutput(calcFunc({ addNodes = { [addedNodes[1]] = true, [addedNodes[2]] = true } })) + local output13 = self:ReduceOutput(calcFunc({ addNodes = { [addedNodes[1]] = true, [addedNodes[3]] = true } })) + local output23 = self:ReduceOutput(calcFunc({ addNodes = { [addedNodes[2]] = true, [addedNodes[3]] = true } })) + local output123 = self:ReduceOutput(calcFunc({ addNodes = { [addedNodes[1]] = true, [addedNodes[2]] = true, [addedNodes[3]] = true } })) -- Sometimes the third node is as powerful as a wet noodle, so use weight per point spent, including the jewel socket local weight12 = self.tradeQueryGenerator.WeightedRatioOutputs(baseOutput, output12, self.statSortSelectionList) / 4 local weight13 = self.tradeQueryGenerator.WeightedRatioOutputs(baseOutput, output13, self.statSortSelectionList) / 4 @@ -884,8 +875,8 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro local activeSlotRef = slotTbl.nodeId and self.itemsTab.activeItemSet[slotTbl.nodeId] or self.itemsTab.activeItemSet[slotTbl.slotName] local activeSlot = slotTbl.nodeId and self.itemsTab.sockets[slotTbl.nodeId] or slotTbl.slotName and (self.itemsTab.slots[slotTbl.slotName] or slotTbl.fullName and self.itemsTab.slots[slotTbl.fullName]) -- fullName for Abyssal Sockets local nameColor = slotTbl.unique and colorCodes.UNIQUE or "^7" - controls["name"..row_idx] = new("LabelControl", top_pane_alignment_ref, 0, row_idx*(row_height + row_vertical_padding), 100, row_height - 4, nameColor..slotTbl.slotName) - controls["bestButton"..row_idx] = new("ButtonControl", { "LEFT", controls["name"..row_idx], "LEFT"}, 100 + 8, 0, 80, row_height, "Find best", function() + controls["name"..row_idx] = new("LabelControl", top_pane_alignment_ref, {0, row_idx*(row_height + row_vertical_padding), 100, row_height - 4}, nameColor..slotTbl.slotName) + controls["bestButton"..row_idx] = new("ButtonControl", { "LEFT", controls["name"..row_idx], "LEFT"}, {100 + 8, 0, 80, row_height}, "Find best", function() self.tradeQueryGenerator:RequestQuery(activeSlot, { slotTbl = slotTbl, controls = controls, row_idx = row_idx }, self.statSortSelectionList, function(context, query, errMsg) if errMsg then self:SetNotice(context.controls.pbNotice, colorCodes.NEGATIVE .. errMsg) @@ -925,7 +916,7 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro controls["bestButton"..row_idx].shown = function() return not self.resultTbl[row_idx] end controls["bestButton"..row_idx].tooltipText = "Creates a weighted search to find the highest Stat Value items for this slot." local pbURL - controls["uri"..row_idx] = new("EditControl", { "TOPLEFT", controls["bestButton"..row_idx], "TOPRIGHT"}, 8, 0, 514, row_height, nil, nil, "^%C\t\n", nil, function(buf) + controls["uri"..row_idx] = new("EditControl", { "TOPLEFT", controls["bestButton"..row_idx], "TOPRIGHT"}, {8, 0, 514, row_height}, nil, nil, "^%C\t\n", nil, function(buf) local subpath = buf:match(self.hostName .. "trade/search/(.+)$") or "" local paths = {} for path in subpath:gmatch("[^/]+") do @@ -952,7 +943,7 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro tooltip:AddLine(16, "Control + click to open in web-browser") end end - controls["priceButton"..row_idx] = new("ButtonControl", { "TOPLEFT", controls["uri"..row_idx], "TOPRIGHT"}, 8, 0, 100, row_height, "Price Item", + controls["priceButton"..row_idx] = new("ButtonControl", { "TOPLEFT", controls["uri"..row_idx], "TOPRIGHT"}, {8, 0, 100, row_height}, "Price Item", function() controls["priceButton"..row_idx].label = "Searching..." self.tradeQueryRequests:SearchWithURL(controls["uri"..row_idx].buf, function(items, errMsg) @@ -983,7 +974,7 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro local clampItemIndex = function(index) return m_min(m_max(index or 1, 1), self.sortedResultTbl[row_idx] and #self.sortedResultTbl[row_idx] or 1) end - controls["changeButton"..row_idx] = new("ButtonControl", { "LEFT", controls["name"..row_idx], "LEFT"}, 100 + 8, 0, 80, row_height, "<< Search", function() + controls["changeButton"..row_idx] = new("ButtonControl", { "LEFT", controls["name"..row_idx], "LEFT"}, {100 + 8, 0, 80, row_height}, "<< Search", function() self.itemIndexTbl[row_idx] = nil self.sortedResultTbl[row_idx] = nil self.resultTbl[row_idx] = nil @@ -996,7 +987,7 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro local item = new("Item", self.resultTbl[row_idx][sortedResult.index].item_string) table.insert(dropdownLabels, colorCodes[item.rarity]..item.name) end - controls["resultDropdown"..row_idx] = new("DropDownControl", { "TOPLEFT", controls["changeButton"..row_idx], "TOPRIGHT"}, 8, 0, 325, row_height, dropdownLabels, function(index) + controls["resultDropdown"..row_idx] = new("DropDownControl", { "TOPLEFT", controls["changeButton"..row_idx], "TOPRIGHT"}, {8, 0, 325, row_height}, dropdownLabels, function(index) self.itemIndexTbl[row_idx] = self.sortedResultTbl[row_idx][index].index self:SetFetchResultReturn(row_idx, self.itemIndexTbl[row_idx]) end) @@ -1024,7 +1015,7 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro tooltip:AddSeparator(10) tooltip:AddLine(16, string.format("^7Price: %s %s", result.amount, result.currency)) end - controls["importButton"..row_idx] = new("ButtonControl", { "TOPLEFT", controls["resultDropdown"..row_idx], "TOPRIGHT"}, 8, 0, 100, row_height, "Import Item", function() + controls["importButton"..row_idx] = new("ButtonControl", { "TOPLEFT", controls["resultDropdown"..row_idx], "TOPRIGHT"}, {8, 0, 100, row_height}, "Import Item", function() self.itemsTab:CreateDisplayItemFromRaw(self.resultTbl[row_idx][self.itemIndexTbl[row_idx]].item_string) local item = self.itemsTab.displayItem -- pass "true" to not auto equip it as we will have our own logic @@ -1055,7 +1046,7 @@ function TradeQueryClass:PriceItemRowDisplay(row_idx, top_pane_alignment_ref, ro return self.itemIndexTbl[row_idx] and self.resultTbl[row_idx][self.itemIndexTbl[row_idx]].item_string ~= nil end -- Whisper so we can copy to clipboard - controls["whisperButton"..row_idx] = new("ButtonControl", { "TOPLEFT", controls["importButton"..row_idx], "TOPRIGHT"}, 8, 0, 185, row_height, function() + controls["whisperButton"..row_idx] = new("ButtonControl", { "TOPLEFT", controls["importButton"..row_idx], "TOPRIGHT"}, {8, 0, 185, row_height}, function() return self.totalPrice[row_idx] and "Whisper for " .. self.totalPrice[row_idx].amount .. " " .. self.totalPrice[row_idx].currency or "Whisper" end, function() Copy(self.resultTbl[row_idx][self.itemIndexTbl[row_idx]].whisper) diff --git a/src/Classes/TradeQueryGenerator.lua b/src/Classes/TradeQueryGenerator.lua index 91566f5bdb..8b18cb699f 100644 --- a/src/Classes/TradeQueryGenerator.lua +++ b/src/Classes/TradeQueryGenerator.lua @@ -188,11 +188,7 @@ function TradeQueryGeneratorClass.WeightedRatioOutputs(baseOutput, newOutput, st end end for _, statTable in ipairs(statWeights) do - if statTable.stat == "FullDPS" and not GlobalCache.useFullDPS then - meanStatDiff = meanStatDiff + ratioModSums("TotalDPS", "TotalDotDPS", "CombinedDPS") * statTable.weightMult - else - meanStatDiff = meanStatDiff + ratioModSums(statTable.stat) * statTable.weightMult - end + meanStatDiff = meanStatDiff + ratioModSums(statTable.stat) * statTable.weightMult end return meanStatDiff end @@ -592,7 +588,7 @@ function TradeQueryGeneratorClass:GenerateModWeights(modsToTest) logToFile("Failed to test %s mod: %s", self.calcContext.itemCategory, modLine) end - local output = self.calcContext.calcFunc({ repSlotName = self.calcContext.slot.slotName, repItem = self.calcContext.testItem }, { nodeAlloc = true }) + local output = self.calcContext.calcFunc({ repSlotName = self.calcContext.slot.slotName, repItem = self.calcContext.testItem }) local meanStatDiff = TradeQueryGeneratorClass.WeightedRatioOutputs(self.calcContext.baseOutput, output, self.calcContext.options.statWeights) * 1000 - (self.calcContext.baseStatValue or 0) if meanStatDiff > 0.01 then t_insert(self.modWeights, { tradeModId = entry.tradeMod.id, weight = meanStatDiff / modValue, meanStatDiff = meanStatDiff, invert = entry.sign == "-" and true or false }) @@ -624,7 +620,7 @@ function TradeQueryGeneratorClass:GeneratePassiveNodeWeights(nodesToTest) local node = self.itemsTab.build.spec.tree.clusterNodeMap[nodeName] or self.itemsTab.build.spec.tree.notableMap[nodeName] local baseOutput = self.calcContext.baseOutput - local output = self.calcContext.calcFunc({ addNodes = { [node] = true } }, { requirementsItems = true, requirementsGems = true, skills = true }) + local output = self.calcContext.calcFunc({ addNodes = { [node] = true } }) local meanStatDiff = TradeQueryGeneratorClass.WeightedRatioOutputs(baseOutput, output, self.calcContext.options.statWeights) * 1000 - (self.calcContext.baseStatValue or 0) if meanStatDiff > 0.01 then t_insert(self.modWeights, { tradeModId = entry.tradeMod.id, weight = meanStatDiff, meanStatDiff = meanStatDiff, invert = false }) @@ -787,7 +783,7 @@ function TradeQueryGeneratorClass:StartQuery(slot, options) -- Calculate base output with a blank item local calcFunc, baseOutput = self.itemsTab.build.calcsTab:GetMiscCalculator() - local baseItemOutput = slot and calcFunc({ repSlotName = slot.slotName, repItem = testItem }, { nodeAlloc = true }) or baseOutput + local baseItemOutput = slot and calcFunc({ repSlotName = slot.slotName, repItem = testItem }) or baseOutput -- make weights more human readable local compStatValue = TradeQueryGeneratorClass.WeightedRatioOutputs(baseOutput, baseItemOutput, options.statWeights) * 1000 @@ -812,7 +808,7 @@ function TradeQueryGeneratorClass:StartQuery(slot, options) -- Open progress tracking blocker popup local controls = { } - controls.progressText = new("LabelControl", {"TOP",nil,"TOP"}, 0, 30, 0, 16, string.format("Calculating Mod Weights...")) + controls.progressText = new("LabelControl", {"TOP",nil,"TOP"}, {0, 30, 0, 16}, string.format("Calculating Mod Weights...")) self.calcContext.popup = main:OpenPopup(280, 65, "Please Wait", controls) end @@ -858,7 +854,7 @@ function TradeQueryGeneratorClass:FinishQuery() end self.calcContext.testItem:BuildAndParseRaw() - local originalOutput = originalItem and self.calcContext.calcFunc({ repSlotName = self.calcContext.slot.slotName, repItem = self.calcContext.testItem }, { nodeAlloc = true }) or self.calcContext.baseOutput + local originalOutput = originalItem and self.calcContext.calcFunc({ repSlotName = self.calcContext.slot.slotName, repItem = self.calcContext.testItem }) or self.calcContext.baseOutput local currentStatDiff = TradeQueryGeneratorClass.WeightedRatioOutputs(self.calcContext.baseOutput, originalOutput, self.calcContext.options.statWeights) * 1000 - (self.calcContext.baseStatValue or 0) -- Sort by mean Stat diff rather than weight to more accurately prioritize stats that can contribute more @@ -924,6 +920,14 @@ function TradeQueryGeneratorClass:FinishQuery() break end end + if not options.includeMirrored then + queryTable.query.filters.misc_filters = { + disabled = false, + filters = { + mirrored = false, + } + } + end if options.maxPrice and options.maxPrice > 0 then queryTable.query.filters.trade_filters = { @@ -982,9 +986,6 @@ function TradeQueryGeneratorClass:FinishQuery() if #queryTable.query.stats[1].filters == 0 then -- No mods to filter errMsg = "Could not generate search, found no mods to search for" - if GlobalCache.numActiveSkillInFullDPS == 0 then - errMsg = "Could not generate search, change active skill or enable FullDPS on some skills" - end end local queryJson = dkjson.encode(queryTable) @@ -1007,12 +1008,12 @@ function TradeQueryGeneratorClass:RequestQuery(slot, context, statWeights, callb local isAmuletSlot = slot and slot.slotName == "Amulet" local isEldritchModSlot = slot and eldritchModSlots[slot.slotName] == true - controls.includeCorrupted = new("CheckBoxControl", {"TOP",nil,"TOP"}, -40, 30, 18, "Corrupted Mods:", function(state) end) + controls.includeCorrupted = new("CheckBoxControl", {"TOP",nil,"TOP"}, {-40, 30, 18}, "Corrupted Mods:", function(state) end) controls.includeCorrupted.state = not context.slotTbl.alreadyCorrupted and (self.lastIncludeCorrupted == nil or self.lastIncludeCorrupted == true) controls.includeCorrupted.enabled = not context.slotTbl.alreadyCorrupted -- removing checkbox until synthesis mods are supported - --controls.includeSynthesis = new("CheckBoxControl", {"TOPRIGHT",controls.includeEldritch,"BOTTOMRIGHT"}, 0, 5, 18, "Synthesis Mods:", function(state) end) + --controls.includeSynthesis = new("CheckBoxControl", {"TOPRIGHT",controls.includeEldritch,"BOTTOMRIGHT"}, {0, 5, 18}, "Synthesis Mods:", function(state) end) --controls.includeSynthesis.state = (self.lastIncludeSynthesis == nil or self.lastIncludeSynthesis == true) local lastItemAnchor = controls.includeCorrupted @@ -1027,42 +1028,46 @@ function TradeQueryGeneratorClass:RequestQuery(slot, context, statWeights, callb options.special = { itemName = context.slotTbl.slotName } end + controls.includeMirrored = new("CheckBoxControl", {"TOPRIGHT",lastItemAnchor,"BOTTOMRIGHT"}, {0, 5, 18}, "Mirrored items:", function(state) end) + controls.includeMirrored.state = (self.lastIncludeMirrored == nil or self.lastIncludeMirrored == true) + updateLastAnchor(controls.includeMirrored) + if not isJewelSlot and not isAbyssalJewelSlot and includeScourge then - controls.includeScourge = new("CheckBoxControl", {"TOPRIGHT",lastItemAnchor,"BOTTOMRIGHT"}, 0, 5, 18, "Scourge Mods:", function(state) end) + controls.includeScourge = new("CheckBoxControl", {"TOPRIGHT",lastItemAnchor,"BOTTOMRIGHT"}, {0, 5, 18}, "Scourge Mods:", function(state) end) controls.includeScourge.state = (self.lastIncludeScourge == nil or self.lastIncludeScourge == true) updateLastAnchor(controls.includeScourge) end if isAmuletSlot then - controls.includeTalisman = new("CheckBoxControl", {"TOPRIGHT",lastItemAnchor,"BOTTOMRIGHT"}, 0, 5, 18, "Talisman Mods:", function(state) end) + controls.includeTalisman = new("CheckBoxControl", {"TOPRIGHT",lastItemAnchor,"BOTTOMRIGHT"}, {0, 5, 18}, "Talisman Mods:", function(state) end) controls.includeTalisman.state = (self.lastIncludeTalisman == nil or self.lastIncludeTalisman == true) updateLastAnchor(controls.includeTalisman) end if isEldritchModSlot then - controls.includeEldritch = new("CheckBoxControl", {"TOPRIGHT",lastItemAnchor,"BOTTOMRIGHT"}, 0, 5, 18, "Eldritch Mods:", function(state) end) + controls.includeEldritch = new("CheckBoxControl", {"TOPRIGHT",lastItemAnchor,"BOTTOMRIGHT"}, {0, 5, 18}, "Eldritch Mods:", function(state) end) controls.includeEldritch.state = (self.lastIncludeEldritch == true) updateLastAnchor(controls.includeEldritch) end if isJewelSlot then - controls.jewelType = new("DropDownControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, 0, 5, 100, 18, { "Any", "Base", "Abyss" }, function(index, value) end) + controls.jewelType = new("DropDownControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, {0, 5, 100, 18}, { "Any", "Base", "Abyss" }, function(index, value) end) controls.jewelType.selIndex = self.lastJewelType or 1 - controls.jewelTypeLabel = new("LabelControl", {"RIGHT",controls.jewelType,"LEFT"}, -5, 0, 0, 16, "Jewel Type:") + controls.jewelTypeLabel = new("LabelControl", {"RIGHT",controls.jewelType,"LEFT"}, {-5, 0, 0, 16}, "Jewel Type:") updateLastAnchor(controls.jewelType) elseif slot and not isAbyssalJewelSlot then - controls.influence1 = new("DropDownControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, 0, 5, 100, 18, influenceDropdownNames, function(index, value) end) + controls.influence1 = new("DropDownControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, {0, 5, 100, 18}, influenceDropdownNames, function(index, value) end) controls.influence1.selIndex = self.lastInfluence1 or 1 - controls.influence1Label = new("LabelControl", {"RIGHT",controls.influence1,"LEFT"}, -5, 0, 0, 16, "Influence 1:") + controls.influence1Label = new("LabelControl", {"RIGHT",controls.influence1,"LEFT"}, {-5, 0, 0, 16}, "Influence 1:") - controls.influence2 = new("DropDownControl", {"TOPLEFT",controls.influence1,"BOTTOMLEFT"}, 0, 5, 100, 18, influenceDropdownNames, function(index, value) end) + controls.influence2 = new("DropDownControl", {"TOPLEFT",controls.influence1,"BOTTOMLEFT"}, {0, 5, 100, 18}, influenceDropdownNames, function(index, value) end) controls.influence2.selIndex = self.lastInfluence2 or 1 - controls.influence2Label = new("LabelControl", {"RIGHT",controls.influence2,"LEFT"}, -5, 0, 0, 16, "Influence 2:") + controls.influence2Label = new("LabelControl", {"RIGHT",controls.influence2,"LEFT"}, {-5, 0, 0, 16}, "Influence 2:") updateLastAnchor(controls.influence2, 46) elseif isAbyssalJewelSlot then - controls.jewelType = new("DropDownControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, 0, 5, 100, 18, { "Abyss" }, nil) + controls.jewelType = new("DropDownControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, {0, 5, 100, 18}, { "Abyss" }, nil) controls.jewelType.selIndex = 1 - controls.jewelTypeLabel = new("LabelControl", {"RIGHT",controls.jewelType,"LEFT"}, -5, 0, 0, 16, "Jewel Type:") + controls.jewelTypeLabel = new("LabelControl", {"RIGHT",controls.jewelType,"LEFT"}, {-5, 0, 0, 16}, "Jewel Type:") updateLastAnchor(controls.jewelType) end @@ -1090,34 +1095,34 @@ function TradeQueryGeneratorClass:RequestQuery(slot, context, statWeights, callb for _, currency in ipairs(currencyTable) do t_insert(currencyDropdownNames, currency.name) end - controls.maxPrice = new("EditControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, 0, 5, 70, 18, nil, nil, "%D") - controls.maxPriceType = new("DropDownControl", {"LEFT",controls.maxPrice,"RIGHT"}, 5, 0, 150, 18, currencyDropdownNames, nil) - controls.maxPriceLabel = new("LabelControl", {"RIGHT",controls.maxPrice,"LEFT"}, -5, 0, 0, 16, "^7Max Price:") + controls.maxPrice = new("EditControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, {0, 5, 70, 18}, nil, nil, "%D") + controls.maxPriceType = new("DropDownControl", {"LEFT",controls.maxPrice,"RIGHT"}, {5, 0, 150, 18}, currencyDropdownNames, nil) + controls.maxPriceLabel = new("LabelControl", {"RIGHT",controls.maxPrice,"LEFT"}, {-5, 0, 0, 16}, "^7Max Price:") updateLastAnchor(controls.maxPrice) - controls.maxLevel = new("EditControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, 0, 5, 100, 18, nil, nil, "%D") - controls.maxLevelLabel = new("LabelControl", {"RIGHT",controls.maxLevel,"LEFT"}, -5, 0, 0, 16, "Max Level:") + controls.maxLevel = new("EditControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, {0, 5, 100, 18}, nil, nil, "%D") + controls.maxLevelLabel = new("LabelControl", {"RIGHT",controls.maxLevel,"LEFT"}, {-5, 0, 0, 16}, "Max Level:") updateLastAnchor(controls.maxLevel) -- basic filtering by slot for sockets and links, Megalomaniac does not have slot and Sockets use "Jewel nodeId" if slot and not isJewelSlot and not isAbyssalJewelSlot and not slot.slotName:find("Flask") then - controls.sockets = new("EditControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, 0, 5, 70, 18, nil, nil, "%D") - controls.socketsLabel = new("LabelControl", {"RIGHT",controls.sockets,"LEFT"}, -5, 0, 0, 16, "# of Sockets:") + controls.sockets = new("EditControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, {0, 5, 70, 18}, nil, nil, "%D") + controls.socketsLabel = new("LabelControl", {"RIGHT",controls.sockets,"LEFT"}, {-5, 0, 0, 16}, "# of Sockets:") updateLastAnchor(controls.sockets) if not slot.slotName:find("Belt") and not slot.slotName:find("Ring") and not slot.slotName:find("Amulet") then - controls.links = new("EditControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, 0, 5, 70, 18, nil, nil, "%D") - controls.linksLabel = new("LabelControl", {"RIGHT",controls.links,"LEFT"}, -5, 0, 0, 16, "# of Links:") + controls.links = new("EditControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, {0, 5, 70, 18}, nil, nil, "%D") + controls.linksLabel = new("LabelControl", {"RIGHT",controls.links,"LEFT"}, {-5, 0, 0, 16}, "# of Links:") updateLastAnchor(controls.links) end end for i, stat in ipairs(statWeights) do - controls["sortStatType"..tostring(i)] = new("LabelControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, 0, i == 1 and 5 or 3, 70, 16, i < (#statWeights < 6 and 10 or 5) and s_format("^7%.2f: %s", stat.weightMult, stat.label) or ("+ "..tostring(#statWeights - 4).." Additional Stats")) + controls["sortStatType"..tostring(i)] = new("LabelControl", {"TOPLEFT",lastItemAnchor,"BOTTOMLEFT"}, {0, i == 1 and 5 or 3, 70, 16}, i < (#statWeights < 6 and 10 or 5) and s_format("^7%.2f: %s", stat.weightMult, stat.label) or ("+ "..tostring(#statWeights - 4).." Additional Stats")) lastItemAnchor = controls["sortStatType"..tostring(i)] popupHeight = popupHeight + 19 if i == 1 then - controls.sortStatLabel = new("LabelControl", {"RIGHT",lastItemAnchor,"LEFT"}, -5, 0, 0, 16, "^7Stat to Sort By:") + controls.sortStatLabel = new("LabelControl", {"RIGHT",lastItemAnchor,"LEFT"}, {-5, 0, 0, 16}, "^7Stat to Sort By:") elseif i == 5 then -- tooltips do not actually work for labels lastItemAnchor.tooltipFunc = function(tooltip) @@ -1135,9 +1140,12 @@ function TradeQueryGeneratorClass:RequestQuery(slot, context, statWeights, callb end popupHeight = popupHeight + 4 - controls.generateQuery = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, -45, -10, 80, 20, "Execute", function() + controls.generateQuery = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, {-45, -10, 80, 20}, "Execute", function() main:ClosePopup() + if controls.includeMirrored then + self.lastIncludeMirrored, options.includeMirrored = controls.includeMirrored.state, controls.includeMirrored.state + end if controls.includeCorrupted then self.lastIncludeCorrupted, options.includeCorrupted = controls.includeCorrupted.state, controls.includeCorrupted.state end @@ -1184,7 +1192,7 @@ function TradeQueryGeneratorClass:RequestQuery(slot, context, statWeights, callb self:StartQuery(slot, options) end) - controls.cancel = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, 45, -10, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", { "BOTTOM", nil, "BOTTOM" }, {45, -10, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(400, popupHeight, "Query Options", controls) diff --git a/src/Classes/TradeStatWeightMultiplierListControl.lua b/src/Classes/TradeStatWeightMultiplierListControl.lua index 766b0f9de5..0d528470f5 100644 --- a/src/Classes/TradeStatWeightMultiplierListControl.lua +++ b/src/Classes/TradeStatWeightMultiplierListControl.lua @@ -4,10 +4,10 @@ -- Specialized UI element for listing and modifying Trade Stat Weight Multipliers. -- -local TradeStatWeightMultiplierListControlClass = newClass("TradeStatWeightMultiplierListControl", "ListControl", function(self, anchor, x, y, width, height, list, indexController) +local TradeStatWeightMultiplierListControlClass = newClass("TradeStatWeightMultiplierListControl", "ListControl", function(self, anchor, rect, list, indexController) self.list = list self.indexController = indexController - self.ListControl(anchor, x, y, width, height, 16, true, false, self.list) + self.ListControl(anchor, rect, 16, true, false, self.list) self.selIndex = nil end) diff --git a/src/Classes/TreeTab.lua b/src/Classes/TreeTab.lua index 9fa96e1d2c..e7d105b0bd 100644 --- a/src/Classes/TreeTab.lua +++ b/src/Classes/TreeTab.lua @@ -32,10 +32,10 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) self:SetActiveSpec(1) self:SetCompareSpec(1) - self.anchorControls = new("Control", nil, 0, 0, 0, 20) + self.anchorControls = new("Control", nil, {0, 0, 0, 20}) -- Tree list dropdown - self.controls.specSelect = new("DropDownControl", {"LEFT",self.anchorControls,"RIGHT"}, 0, 0, 190, 20, nil, function(index, value) + self.controls.specSelect = new("DropDownControl", { "LEFT",self.anchorControls,"RIGHT" }, { 0, 0, 190, 20 }, nil, function(index, value) if self.specList[index] then self.build.modFlag = true self:SetActiveSpec(index) @@ -62,7 +62,7 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) if selIndex ~= self.activeSpec then local calcFunc, calcBase = self.build.calcsTab:GetMiscCalculator() if calcFunc then - local output = calcFunc({ spec = spec }, {}) + local output = calcFunc({ spec = spec }) self.build:AddStatComparesToTooltip(tooltip, calcBase, output, "^7Switching to this tree will give you:") end if spec.curClassId == self.build.spec.curClassId then @@ -90,7 +90,7 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) end -- Compare checkbox - self.controls.compareCheck = new("CheckBoxControl", { "LEFT", self.controls.specSelect, "RIGHT" }, 74, 0, 20, "Compare:", function(state) + self.controls.compareCheck = new("CheckBoxControl", { "LEFT", self.controls.specSelect, "RIGHT" }, { 74, 0, 20 }, "Compare:", function(state) self.isComparing = state self:SetCompareSpec(self.activeCompareSpec) self.controls.compareSelect.shown = state @@ -102,7 +102,7 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) end) -- Compare tree dropdown - self.controls.compareSelect = new("DropDownControl", { "LEFT", self.controls.compareCheck, "RIGHT" }, 8, 0, 190, 20, nil, function(index, value) + self.controls.compareSelect = new("DropDownControl", { "LEFT", self.controls.compareCheck, "RIGHT" }, { 8, 0, 190, 20 }, nil, function(index, value) if self.specList[index] then self:SetCompareSpec(index) else @@ -113,18 +113,18 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) self.controls.compareSelect.maxDroppedWidth = 1000 self.controls.compareSelect.enableDroppedWidth = true self.controls.compareSelect.enableChangeBoxWidth = true - self.controls.reset = new("ButtonControl", { "LEFT", self.controls.compareCheck, "RIGHT" }, 8, 0, 145, 20, "Reset Tree/Tattoos", function() + self.controls.reset = new("ButtonControl", { "LEFT", self.controls.compareCheck, "RIGHT" }, { 8, 0, 145, 20 }, "Reset Tree/Tattoos", function() local controls = { } local buttonY = 65 - controls.warningLabel = new("LabelControl", nil, 0, 30, 0, 16, "^7Warning: resetting your passive tree or removing all tattoos cannot be undone.\n") - controls.reset = new("ButtonControl", nil, -130, buttonY, 100, 20, "Reset Tree", function() + controls.warningLabel = new("LabelControl", nil, { 0, 30, 0, 16 }, "^7Warning: resetting your passive tree or removing all tattoos cannot be undone.\n") + controls.reset = new("ButtonControl", nil, { -130, buttonY, 100, 20 }, "Reset Tree", function() self.build.spec:ResetNodes() self.build.spec:BuildAllDependsAndPaths() self.build.spec:AddUndoState() self.build.buildFlag = true main:ClosePopup() end) - controls.removeTattoo = new("ButtonControl", nil, 0, buttonY, 144, 20, "Remove All Tattoos", function() + controls.removeTattoo = new("ButtonControl", nil, { 0, buttonY, 144, 20 }, "Remove All Tattoos", function() for id, node in pairs(self.build.spec.hashOverrides) do --hashOverrides will contain only the nodes that have been tattoo-ed if node.isTattoo then self:RemoveTattooFromNode(self.build.spec.nodes[id]) @@ -134,7 +134,7 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) self.build.buildFlag = true main:ClosePopup() end) - controls.cancel = new("ButtonControl", nil, 130, buttonY, 100, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, { 130, buttonY, 100, 20 }, "Cancel", function() main:ClosePopup() end) main:OpenPopup(570, 100, "Reset Tree/Tattoos", controls, nil, "edit", "cancel") @@ -149,8 +149,8 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) } t_insert(self.treeVersions, value) end - self.controls.versionText = new("LabelControl", { "LEFT", self.controls.reset, "RIGHT" }, 8, 0, 0, 16, "Version:") - self.controls.versionSelect = new("DropDownControl", { "LEFT", self.controls.versionText, "RIGHT" }, 8, 0, 100, 20, self.treeVersions, function(index, selected) + self.controls.versionText = new("LabelControl", { "LEFT", self.controls.reset, "RIGHT" }, { 8, 0, 0, 16 }, "Version:") + self.controls.versionSelect = new("DropDownControl", { "LEFT", self.controls.versionText, "RIGHT" }, { 8, 0, 100, 20 }, self.treeVersions, function(index, selected) if selected.value ~= self.build.spec.treeVersion then self:OpenVersionConvertPopup(selected.value, true) end @@ -161,7 +161,7 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) self.controls.versionSelect.selIndex = #self.treeVersions -- Tree Search Textbox - self.controls.treeSearch = new("EditControl", { "LEFT", self.controls.versionSelect, "RIGHT" }, 8, 0, main.portraitMode and 200 or 300, 20, "", "Search", "%c", 100, function(buf) + self.controls.treeSearch = new("EditControl", { "LEFT", self.controls.versionSelect, "RIGHT" }, { 8, 0, main.portraitMode and 200 or 300, 20 }, "", "Search", "%c", 100, function(buf) self.viewer.searchStr = buf self.searchFlag = buf ~= self.viewer.searchStrSaved end, nil, nil, true) @@ -169,12 +169,15 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) self.tradeLeaguesList = { } -- Find Timeless Jewel Button - self.controls.findTimelessJewel = new("ButtonControl", { "LEFT", self.controls.treeSearch, "RIGHT" }, 8, 0, 150, 20, "Find Timeless Jewel", function() + self.controls.findTimelessJewel = new("ButtonControl", { "LEFT", self.controls.treeSearch, "RIGHT" }, { 8, 0, 150, 20 }, "Find Timeless Jewel", function() self:FindTimelessJewel() end) + + --Default index for Tattoos + self.defaultTattoo = { } -- Show Node Power Checkbox - self.controls.treeHeatMap = new("CheckBoxControl", { "LEFT", self.controls.findTimelessJewel, "RIGHT" }, 130, 0, 20, "Show Node Power:", function(state) + self.controls.treeHeatMap = new("CheckBoxControl", { "LEFT", self.controls.findTimelessJewel, "RIGHT" }, { 130, 0, 20 }, "Show Node Power:", function(state) self.viewer.showHeatMap = state self.controls.treeHeatMapStatSelect.shown = state @@ -184,8 +187,7 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) end) -- Control for setting max node depth to limit calculation time of the heat map - self.controls.nodePowerMaxDepthSelect = new("DropDownControl", - { "LEFT", self.controls.treeHeatMap, "RIGHT" }, 8, 0, 50, 20, { "All", 5, 10, 15 }, function(index, value) + self.controls.nodePowerMaxDepthSelect = new("DropDownControl", { "LEFT", self.controls.treeHeatMap, "RIGHT" }, { 8, 0, 50, 20 }, { "All", 5, 10, 15 }, function(index, value) local oldMax = self.build.calcsTab.nodePowerMaxDepth if type(value) == "number" then @@ -205,7 +207,7 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) self.controls.nodePowerMaxDepthSelect.tooltipText = "Limit of Node distance to search (lower = faster)" -- Control for selecting the power stat to sort by (Defense, DPS, etc) - self.controls.treeHeatMapStatSelect = new("DropDownControl", { "LEFT", self.controls.nodePowerMaxDepthSelect, "RIGHT" }, 8, 0, 150, 20, nil, function(index, value) + self.controls.treeHeatMapStatSelect = new("DropDownControl", { "LEFT", self.controls.nodePowerMaxDepthSelect, "RIGHT" }, { 8, 0, 150, 20 }, nil, function(index, value) self:SetPowerCalc(value) end) self.controls.treeHeatMap.tooltipText = function() @@ -221,14 +223,14 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) end -- Show/Hide Power Report Button - self.controls.powerReport = new("ButtonControl", { "LEFT", self.controls.treeHeatMapStatSelect, "RIGHT" }, 8, 0, 150, 20, + self.controls.powerReport = new("ButtonControl", { "LEFT", self.controls.treeHeatMapStatSelect, "RIGHT" }, { 8, 0, 150, 20 }, function() return self.controls.powerReportList.shown and "Hide Power Report" or "Show Power Report" end, function() self.controls.powerReportList.shown = not self.controls.powerReportList.shown end) -- Power Report List local yPos = self.controls.treeHeatMap.y == 0 and self.controls.specSelect.height + 4 or self.controls.specSelect.height * 2 + 8 - self.controls.powerReportList = new("PowerReportListControl", {"TOPLEFT", self.controls.specSelect, "BOTTOMLEFT"}, 0, yPos, 700, 220, function(selectedNode) + self.controls.powerReportList = new("PowerReportListControl", { "TOPLEFT", self.controls.specSelect, "BOTTOMLEFT" }, { 0, yPos, 700, 170 }, function(selectedNode) -- this code is called by the list control when the user "selects" one of the passives in the list. -- we use this to set a flag which causes the next Draw() to recenter the passive tree on the desired node. if selectedNode.x then @@ -244,7 +246,7 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) self.controls.powerReportList:SetReport(powerStat, report) end - self.controls.specConvertText = new("LabelControl", { "BOTTOMLEFT", self.controls.specSelect, "TOPLEFT" }, 0, -14, 0, 16, "^7This is an older tree version, which may not be fully compatible with the current game version.") + self.controls.specConvertText = new("LabelControl", { "BOTTOMLEFT", self.controls.specSelect, "TOPLEFT" }, { 0, -14, 0, 16 }, "^7This is an older tree version, which may not be fully compatible with the current game version.") self.controls.specConvertText.shown = function() return self.showConvert end @@ -257,10 +259,10 @@ local TreeTabClass = newClass("TreeTab", "ControlHost", function(self, build) local function buildConvertAllButtonLabel() return colorCodes.POSITIVE.."Convert all trees to "..treeVersions[getLatestTreeVersion()].display end - self.controls.specConvert = new("ButtonControl", { "LEFT", self.controls.specConvertText, "RIGHT" }, 8, 0, function() return DrawStringWidth(16, "VAR", buildConvertButtonLabel()) + 20 end, 20, buildConvertButtonLabel, function() + self.controls.specConvert = new("ButtonControl", { "LEFT", self.controls.specConvertText, "RIGHT" }, { 8, 0, function() return DrawStringWidth(16, "VAR", buildConvertButtonLabel()) + 20 end, 20 }, buildConvertButtonLabel, function() self:ConvertToVersion(getLatestTreeVersion(), false, true) end) - self.controls.specConvertAll = new("ButtonControl", { "LEFT", self.controls.specConvert, "RIGHT" }, 8, 0, function() return DrawStringWidth(16, "VAR", buildConvertAllButtonLabel()) + 20 end, 20, buildConvertAllButtonLabel, function() + self.controls.specConvertAll = new("ButtonControl", { "LEFT", self.controls.specConvert, "RIGHT" }, { 8, 0, function() return DrawStringWidth(16, "VAR", buildConvertAllButtonLabel()) + 20 end, 20 }, buildConvertAllButtonLabel, function() self:OpenVersionConvertAllPopup(getLatestTreeVersion()) end) self.jumpToNode = false @@ -523,19 +525,19 @@ end function TreeTabClass:OpenSpecManagePopup() local importTree = - new("ButtonControl", nil, -99, 259, 90, 20, "Import Tree", function() + new("ButtonControl", nil, {-99, 259, 90, 20}, "Import Tree", function() self:OpenImportPopup() end) local exportTree = - new("ButtonControl", { "LEFT", importTree, "RIGHT" }, 8, 0, 90, 20, "Export Tree", function() + new("ButtonControl", {"LEFT", importTree, "RIGHT"}, {8, 0, 90, 20}, "Export Tree", function() self:OpenExportPopup() end) main:OpenPopup(370, 290, "Manage Passive Trees", { - new("PassiveSpecListControl", nil, 0, 50, 350, 200, self), + new("PassiveSpecListControl", nil, {0, 50, 350, 200}, self), importTree, exportTree, - new("ButtonControl", {"LEFT", exportTree, "RIGHT"}, 8, 0, 90, 20, "Done", function() + new("ButtonControl", {"LEFT", exportTree, "RIGHT"}, {8, 0, 90, 20}, "Done", function() main:ClosePopup() end), }) @@ -543,17 +545,17 @@ end function TreeTabClass:OpenVersionConvertPopup(version, ignoreRuthlessCheck) local controls = { } - controls.warningLabel = new("LabelControl", nil, 0, 20, 0, 16, "^7Warning: some or all of the passives may be de-allocated due to changes in the tree.\n\n" .. + controls.warningLabel = new("LabelControl", nil, {0, 20, 0, 16}, "^7Warning: some or all of the passives may be de-allocated due to changes in the tree.\n\n" .. "Convert will replace your current tree.\nCopy + Convert will backup your current tree.\n") - controls.convert = new("ButtonControl", nil, -125, 105, 100, 20, "Convert", function() + controls.convert = new("ButtonControl", nil, {-125, 105, 100, 20}, "Convert", function() self:ConvertToVersion(version, true, false, ignoreRuthlessCheck) main:ClosePopup() end) - controls.convertCopy = new("ButtonControl", nil, 0, 105, 125, 20, "Copy + Convert", function() + controls.convertCopy = new("ButtonControl", nil, {0, 105, 125, 20}, "Copy + Convert", function() self:ConvertToVersion(version, false, false, ignoreRuthlessCheck) main:ClosePopup() end) - controls.cancel = new("ButtonControl", nil, 125, 105, 100, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {125, 105, 100, 20}, "Cancel", function() self.controls.versionSelect:SelByValue(self.build.spec.treeVersion, 'value') main:ClosePopup() end) @@ -562,13 +564,13 @@ end function TreeTabClass:OpenVersionConvertAllPopup(version) local controls = { } - controls.warningLabel = new("LabelControl", nil, 0, 20, 0, 16, "^7Warning: some or all of the passives may be de-allocated due to changes in the tree.\n\n" .. + controls.warningLabel = new("LabelControl", nil, {0, 20, 0, 16}, "^7Warning: some or all of the passives may be de-allocated due to changes in the tree.\n\n" .. "Convert will replace all trees that are not Version "..treeVersions[version].display..".\nThis action cannot be undone.\n") - controls.convert = new("ButtonControl", nil, -58, 105, 100, 20, "Convert", function() + controls.convert = new("ButtonControl", nil, {-58, 105, 100, 20}, "Convert", function() self:ConvertAllToVersion(version) main:ClosePopup() end) - controls.cancel = new("ButtonControl", nil, 58, 105, 100, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {58, 105, 100, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(570, 140, "Convert all to Version "..treeVersions[version].display, controls, "convert", "edit") @@ -634,18 +636,18 @@ function TreeTabClass:OpenImportPopup() return latestTreeVersion .. (isRuthless and "_ruthless" or "") end - controls.nameLabel = new("LabelControl", nil, -180, 20, 0, 16, "Enter name for this passive tree:") - controls.name = new("EditControl", nil, 100, 20, 350, 18, "", nil, nil, nil, function(buf) + controls.nameLabel = new("LabelControl", nil, {-180, 20, 0, 16}, "Enter name for this passive tree:") + controls.name = new("EditControl", nil, {100, 20, 350, 18}, "", nil, nil, nil, function(buf) controls.msg.label = "" controls.import.enabled = buf:match("%S") and controls.edit.buf:match("%S") end) - controls.editLabel = new("LabelControl", nil, -150, 45, 0, 16, "Enter passive tree link:") - controls.edit = new("EditControl", nil, 100, 45, 350, 18, "", nil, nil, nil, function(buf) + controls.editLabel = new("LabelControl", nil, {-150, 45, 0, 16}, "Enter passive tree link:") + controls.edit = new("EditControl", nil, {100, 45, 350, 18}, "", nil, nil, nil, function(buf) controls.msg.label = "" controls.import.enabled = buf:match("%S") and controls.name.buf:match("%S") end) - controls.msg = new("LabelControl", nil, 0, 65, 0, 16, "") - controls.import = new("ButtonControl", nil, -45, 85, 80, 20, "Import", function() + controls.msg = new("LabelControl", nil, {0, 65, 0, 16}, "") + controls.import = new("ButtonControl", nil, {-45, 85, 80, 20}, "Import", function() local treeLink = controls.edit.buf if #treeLink == 0 then return @@ -695,7 +697,7 @@ function TreeTabClass:OpenImportPopup() end end) controls.import.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 85, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 85, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(580, 115, "Import Tree", controls, "import", "name") @@ -705,9 +707,9 @@ function TreeTabClass:OpenExportPopup() local treeLink = self.build.spec:EncodeURL(treeVersions[self.build.spec.treeVersion].url) local popup local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "Passive tree link:") - controls.edit = new("EditControl", nil, 0, 40, 350, 18, treeLink, nil, "%Z") - controls.shrink = new("ButtonControl", nil, -90, 70, 140, 20, "Shrink with PoEURL", function() + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "Passive tree link:") + controls.edit = new("EditControl", nil, {0, 40, 350, 18}, treeLink, nil, "%Z") + controls.shrink = new("ButtonControl", nil, {-90, 70, 140, 20}, "Shrink with PoEURL", function() controls.shrink.enabled = false controls.shrink.label = "Shrinking..." launch:DownloadPage("http://poeurl.com/shrink.php?url="..treeLink, function(response, errMsg) @@ -721,10 +723,10 @@ function TreeTabClass:OpenExportPopup() end end) end) - controls.copy = new("ButtonControl", nil, 30, 70, 80, 20, "Copy", function() + controls.copy = new("ButtonControl", nil, {30, 70, 80, 20}, "Copy", function() Copy(treeLink) end) - controls.done = new("ButtonControl", nil, 120, 70, 80, 20, "Done", function() + controls.done = new("ButtonControl", nil, {120, 70, 80, 20}, "Done", function() main:ClosePopup() end) popup = main:OpenPopup(380, 100, "Export Tree", controls, "done", "edit") @@ -733,11 +735,11 @@ end function TreeTabClass:ModifyNodePopup(selectedNode) local controls = { } local modGroups = { } + local treeNodes = self.build.spec.tree.nodes + local nodeName = treeNodes[selectedNode.id].dn local function buildMods(selectedNode) wipeTable(modGroups) - local treeNodes = self.build.spec.tree.nodes local numLinkedNodes = selectedNode.linkedId and #selectedNode.linkedId or 0 - local nodeName = treeNodes[selectedNode.id].dn local nodeValue = treeNodes[selectedNode.id].sd[1] for id, node in pairs(self.build.spec.tree.tattoo.nodes) do if (nodeName:match(node.targetType:gsub("^Small ", "")) or (node.targetValue ~= "" and nodeValue:match(node.targetValue)) or @@ -792,7 +794,7 @@ function TreeTabClass:ModifyNodePopup(selectedNode) end end for idx, desc in ipairs(wrapTable) do - controls[idx] = new("LabelControl", {"TOPLEFT", controls[idx-1] or controls.modSelect,"TOPLEFT"}, 0, 20, 600, 16, "^7"..desc) + controls[idx] = new("LabelControl", {"TOPLEFT", controls[idx-1] or controls.modSelect,"TOPLEFT"}, {0, 20, 600, 16}, "^7"..desc) totalHeight = totalHeight + 20 end main.popups[1].height = totalHeight + 75 @@ -804,8 +806,9 @@ function TreeTabClass:ModifyNodePopup(selectedNode) end buildMods(selectedNode) - controls.modSelectLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, 150, 25, 0, 16, "^7Modifier:") - controls.modSelect = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, 155, 25, 250, 18, modGroups, function(idx) constructUI(modGroups[idx]) end) + controls.modSelectLabel = new("LabelControl", {"TOPRIGHT",nil,"TOPLEFT"}, {150, 25, 0, 16}, "^7Modifier:") + controls.modSelect = new("DropDownControl", {"TOPLEFT",nil,"TOPLEFT"}, {155, 25, 250, 18}, modGroups, function(idx) constructUI(modGroups[idx]) end) + controls.modSelect.selIndex = self.defaultTattoo[nodeName] or 1 controls.modSelect.tooltipFunc = function(tooltip, mode, index, value) tooltip:Clear() if mode ~= "OUT" and value then @@ -814,19 +817,20 @@ function TreeTabClass:ModifyNodePopup(selectedNode) end end end - controls.save = new("ButtonControl", nil, -90, 75, 80, 20, "Add", function() + controls.save = new("ButtonControl", nil, {-90, 75, 80, 20}, "Add", function() addModifier(selectedNode) self.modFlag = true self.build.buildFlag = true + self.defaultTattoo[nodeName] = controls.modSelect.selIndex main:ClosePopup() end) - controls.reset = new("ButtonControl", nil, 0, 75, 80, 20, "Reset Node", function() + controls.reset = new("ButtonControl", nil, {0, 75, 80, 20}, "Reset Node", function() self:RemoveTattooFromNode(selectedNode) self.modFlag = true self.build.buildFlag = true main:ClosePopup() end) - controls.close = new("ButtonControl", nil, 90, 75, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {90, 75, 80, 20}, "Cancel", function() main:ClosePopup() end) @@ -842,12 +846,12 @@ function TreeTabClass:ModifyNodePopup(selectedNode) end return count end - controls.totalTattoos = new("LabelControl", nil, 0, 95, 0, 16, "^7Tattoo Count: ".. getTattooCount() .."/50" ) + controls.totalTattoos = new("LabelControl", nil, { 0, 95, 0, 16 }, "^7Tattoo Count: ".. getTattooCount() .."/50" ) main:OpenPopup(600, 105, "Replace Modifier of Node", controls, "save") - constructUI(modGroups[1]) + constructUI(modGroups[self.defaultTattoo[nodeName] or 1]) -- Show Legacy Tattoos - controls.showLegacyTattoo = new("CheckBoxControl", { "LEFT", controls.totalTattoos, "RIGHT" }, 205, 0, 20, "Show Legacy Tattoos:", function(state) + controls.showLegacyTattoo = new("CheckBoxControl", { "LEFT", controls.totalTattoos, "RIGHT" }, { 205, 0, 20 }, "Show Legacy Tattoos:", function(state) self.showLegacyTattoo = state buildMods(selectedNode) end) @@ -889,13 +893,13 @@ function TreeTabClass:OpenMasteryPopup(node, viewPort) --Check to make sure that the effects list has a potential mod to apply to a mastery if not (next(effects) == nil) then local passiveMasteryControlHeight = (#effects + 1) * 14 + 2 - controls.close = new("ButtonControl", nil, 0, 30 + passiveMasteryControlHeight, 90, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {0, 30 + passiveMasteryControlHeight, 90, 20}, "Cancel", function() node.sd = cachedSd node.allMasteryOptions = cachedAllMasteryOption self.build.spec.tree:ProcessStats(node) main:ClosePopup() end) - controls.effect = new("PassiveMasteryControl", {"TOPLEFT",nil,"TOPLEFT"}, 6, 25, 0, passiveMasteryControlHeight, effects, self, node, controls.save) + controls.effect = new("PassiveMasteryControl", {"TOPLEFT",nil,"TOPLEFT"}, {6, 25, 0, passiveMasteryControlHeight}, effects, self, node, controls.save) main:OpenPopup(controls.effect.width + 12, controls.effect.height + 60, node.name, controls) end end @@ -1331,19 +1335,19 @@ function TreeTabClass:FindTimelessJewel() self.build.modFlag = true end - controls.devotionSelectLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 820, 25, 0, 16, "^7Devotion modifiers:") + controls.devotionSelectLabel = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {820, 25, 0, 16}, "^7Devotion modifiers:") controls.devotionSelectLabel.shown = timelessData.jewelType.id == 4 - controls.devotionSelect1 = new("DropDownControl", { "TOP", controls.devotionSelectLabel, "BOTTOM" }, 0, 8, 200, 18, devotionVariants, function(index, value) + controls.devotionSelect1 = new("DropDownControl", {"TOP", controls.devotionSelectLabel, "BOTTOM"}, {0, 8, 200, 18}, devotionVariants, function(index, value) timelessData.devotionVariant1 = index end) controls.devotionSelect1.selIndex = timelessData.devotionVariant1 - controls.devotionSelect2 = new("DropDownControl", { "TOP", controls.devotionSelect1, "BOTTOM" }, 0, 7, 200, 18, devotionVariants, function(index, value) + controls.devotionSelect2 = new("DropDownControl", {"TOP", controls.devotionSelect1, "BOTTOM"}, {0, 7, 200, 18}, devotionVariants, function(index, value) timelessData.devotionVariant2 = index end) controls.devotionSelect2.selIndex = timelessData.devotionVariant2 - controls.jewelSelectLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 25, 0, 16, "^7Jewel Type:") - controls.jewelSelect = new("DropDownControl", { "LEFT", controls.jewelSelectLabel, "RIGHT" }, 10, 0, 200, 18, jewelTypes, function(index, value) + controls.jewelSelectLabel = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {405, 25, 0, 16}, "^7Jewel Type:") + controls.jewelSelect = new("DropDownControl", {"LEFT", controls.jewelSelectLabel, "RIGHT"}, {10, 0, 200, 18}, jewelTypes, function(index, value) timelessData.jewelType = value controls.devotionSelectLabel.shown = value.id == 4 -- Militant Faith controls.protectAllocatedLabel.shown = (value.id == 4 and controls.socketFilter.state) @@ -1357,8 +1361,8 @@ function TreeTabClass:FindTimelessJewel() end) controls.jewelSelect.selIndex = timelessData.jewelType.id - controls.conquerorSelectLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 50, 0, 16, "^7Conqueror:") - controls.conquerorSelect = new("DropDownControl", { "LEFT", controls.conquerorSelectLabel, "RIGHT" }, 10, 0, 200, 18, conquerorTypes[timelessData.jewelType.id], function(index, value) + controls.conquerorSelectLabel = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {405, 50, 0, 16}, "^7Conqueror:") + controls.conquerorSelect = new("DropDownControl", {"LEFT", controls.conquerorSelectLabel, "RIGHT"}, {10, 0, 200, 18}, conquerorTypes[timelessData.jewelType.id], function(index, value) timelessData.conquerorType = value self.build.modFlag = true end) @@ -1383,8 +1387,8 @@ function TreeTabClass:FindTimelessJewel() self.allocatedNodesInRadiusCount = #nodeNames end - controls.socketSelectLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 75, 0, 16, "^7Jewel Socket:") - controls.socketSelect = new("TimelessJewelSocketControl", { "LEFT", controls.socketSelectLabel, "RIGHT" }, 10, 0, 200, 18, jewelSockets, function(index, value) + controls.socketSelectLabel = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {405, 75, 0, 16}, "^7Jewel Socket:") + controls.socketSelect = new("TimelessJewelSocketControl", {"LEFT", controls.socketSelectLabel, "RIGHT"}, {10, 0, 200, 18}, jewelSockets, function(index, value) timelessData.jewelSocket = value setAllocatedNodes() -- reset list when changing sockets self.build.modFlag = true @@ -1406,8 +1410,8 @@ function TreeTabClass:FindTimelessJewel() end end end - controls.socketFilterLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 100, 0, 16, "^7Filter Nodes:") - controls.socketFilter = new("CheckBoxControl", { "LEFT", controls.socketFilterLabel, "RIGHT" }, 10, 0, 18, nil, function(value) + controls.socketFilterLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, { 405, 100, 0, 16 }, "^7Filter Nodes:") + controls.socketFilter = new("CheckBoxControl", { "LEFT", controls.socketFilterLabel, "RIGHT" }, { 10, 0, 18 }, nil, function(value) timelessData.socketFilter = value self.build.modFlag = true controls.socketFilterAdditionalDistanceLabel.shown = value @@ -1429,17 +1433,17 @@ function TreeTabClass:FindTimelessJewel() controls.socketFilter.state = timelessData.socketFilter -- Militant Faith protect notables controls - controls.protectAllocatedLabel = new("LabelControl", { "TOPLEFT", nil, "TOPLEFT" }, 15, 25, 0, 16, "^7Protect allocated nodes from changing:") - controls.protectAllocatedSelect = new("DropDownControl", { "TOPLEFT", controls.protectAllocatedLabel, "BOTTOMLEFT" }, 0, 8, 200, 18, nil, nil) - controls.protectAllocatedButtonAdd = new("ButtonControl", { "LEFT", controls.protectAllocatedSelect, "RIGHT" }, 5, 0, 44, 18, "Add", function() + controls.protectAllocatedLabel = new("LabelControl", { "TOPLEFT", nil, "TOPLEFT" }, { 15, 25, 0, 16 }, "^7Protect allocated nodes from changing:") + controls.protectAllocatedSelect = new("DropDownControl", { "TOPLEFT", controls.protectAllocatedLabel, "BOTTOMLEFT" }, { 0, 8, 200, 18 }, nil, nil) + controls.protectAllocatedButtonAdd = new("ButtonControl", { "LEFT", controls.protectAllocatedSelect, "RIGHT" }, { 5, 0, 44, 18 }, "Add", function() local selValue = controls.protectAllocatedSelect:GetSelValue() if selValue and not controls["protected:"..selValue] then protectedNodesCount = protectedNodesCount + 1 t_insert(protectedNodes, selValue) - controls["protected:"..selValue] = new("LabelControl", { "TOPLEFT", controls.protectAllocatedSelect, "BOTTOMLEFT" }, 0, 16*protectedNodesCount-10, 0, 16, "^7"..selValue) + controls["protected:"..selValue] = new("LabelControl", { "TOPLEFT", controls.protectAllocatedSelect, "BOTTOMLEFT" }, { 0, 16 * protectedNodesCount - 10, 0, 16 }, "^7"..selValue) end end) - controls.protectAllocatedButtonClear = new("ButtonControl", { "LEFT", controls.protectAllocatedButtonAdd, "RIGHT" }, 5, 0, 44, 18, "Clear", function() + controls.protectAllocatedButtonClear = new("ButtonControl", { "LEFT", controls.protectAllocatedButtonAdd, "RIGHT" }, { 5, 0, 44, 18 }, "Clear", function() clearProtected() end) -- set shown and list on load @@ -1455,8 +1459,8 @@ function TreeTabClass:FindTimelessJewel() end local socketFilterAdditionalDistanceMAX = 10 - controls.socketFilterAdditionalDistanceLabel = new("LabelControl", { "LEFT", controls.socketFilter, "RIGHT" }, 10, 0, 0, 16, "^7Node Distance:") - controls.socketFilterAdditionalDistance = new("SliderControl", { "LEFT", controls.socketFilterAdditionalDistanceLabel, "RIGHT" }, 10, 0, 66, 18, function(value) + controls.socketFilterAdditionalDistanceLabel = new("LabelControl", {"LEFT", controls.socketFilter, "RIGHT"}, {10, 0, 0, 16}, "^7Node Distance:") + controls.socketFilterAdditionalDistance = new("SliderControl", {"LEFT", controls.socketFilterAdditionalDistanceLabel, "RIGHT"}, {10, 0, 66, 18}, function(value) timelessData.socketFilterDistance = m_floor(value * socketFilterAdditionalDistanceMAX + 0.01) controls.socketFilterAdditionalDistanceValue.label = s_format("^7%d", timelessData.socketFilterDistance) end, { ["SHIFT"] = 1, ["CTRL"] = 1 / (socketFilterAdditionalDistanceMAX * 2), ["DEFAULT"] = 1 / socketFilterAdditionalDistanceMAX }) @@ -1475,7 +1479,7 @@ function TreeTabClass:FindTimelessJewel() end return controls.socketFilterAdditionalDistance.tooltip.realDraw(self, x, y, width, height, viewPort) end - controls.socketFilterAdditionalDistanceValue = new("LabelControl", { "LEFT", controls.socketFilterAdditionalDistance, "RIGHT" }, 5, 0, 0, 16, "^70") + controls.socketFilterAdditionalDistanceValue = new("LabelControl", {"LEFT", controls.socketFilterAdditionalDistance, "RIGHT"}, {5, 0, 0, 16}, "^70") controls.socketFilterAdditionalDistance:SetVal((timelessData.socketFilterDistance or 0) / socketFilterAdditionalDistanceMAX) controls.socketFilterAdditionalDistanceLabel.shown = timelessData.socketFilter controls.socketFilterAdditionalDistance.shown = timelessData.socketFilter @@ -1485,8 +1489,8 @@ function TreeTabClass:FindTimelessJewel() local scrollWheelSpeedTbl2 = { ["SHIFT"] = 0.2, ["CTRL"] = 0.002, ["DEFAULT"] = 0.02 } local nodeSliderStatLabel = "None" - controls.nodeSliderLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 125, 0, 16, "^7Primary Node Weight:") - controls.nodeSlider = new("SliderControl", { "LEFT", controls.nodeSliderLabel, "RIGHT" }, 10, 0, 200, 16, function(value) + controls.nodeSliderLabel = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {405, 125, 0, 16}, "^7Primary Node Weight:") + controls.nodeSlider = new("SliderControl", {"LEFT", controls.nodeSliderLabel, "RIGHT"}, {10, 0, 200, 16}, function(value) controls.nodeSliderValue.label = s_format("^7%.3f", value * 10) parseSearchList(1, controls.searchListFallback and controls.searchListFallback.shown or false) end, scrollWheelSpeedTbl) @@ -1501,7 +1505,7 @@ function TreeTabClass:FindTimelessJewel() end end end - controls.nodeSliderValue = new("LabelControl", { "LEFT", controls.nodeSlider, "RIGHT" }, 5, 0, 0, 16, "^71.000") + controls.nodeSliderValue = new("LabelControl", {"LEFT", controls.nodeSlider, "RIGHT"}, {5, 0, 0, 16}, "^71.000") controls.nodeSlider.tooltip.realDraw = controls.nodeSlider.tooltip.Draw controls.nodeSlider.tooltip.Draw = function(self, x, y, width, height, viewPort) local sliderOffsetX = round(184 * (1 - controls.nodeSlider.val)) @@ -1514,8 +1518,8 @@ function TreeTabClass:FindTimelessJewel() controls.nodeSlider:SetVal(0.1) local nodeSlider2StatLabel = "None" - controls.nodeSlider2Label = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 150, 0, 16, "^7Secondary Node Weight:") - controls.nodeSlider2 = new("SliderControl", { "LEFT", controls.nodeSlider2Label, "RIGHT" }, 10, 0, 200, 16, function(value) + controls.nodeSlider2Label = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {405, 150, 0, 16}, "^7Secondary Node Weight:") + controls.nodeSlider2 = new("SliderControl", {"LEFT", controls.nodeSlider2Label, "RIGHT"}, {10, 0, 200, 16}, function(value) controls.nodeSlider2Value.label = s_format("^7%.3f", value * 10) parseSearchList(1, controls.searchListFallback and controls.searchListFallback.shown or false) end, scrollWheelSpeedTbl) @@ -1530,7 +1534,7 @@ function TreeTabClass:FindTimelessJewel() end end end - controls.nodeSlider2Value = new("LabelControl", { "LEFT", controls.nodeSlider2, "RIGHT" }, 5, 0, 0, 16, "^71.000") + controls.nodeSlider2Value = new("LabelControl", {"LEFT", controls.nodeSlider2, "RIGHT"}, {5, 0, 0, 16}, "^71.000") controls.nodeSlider2.tooltip.realDraw = controls.nodeSlider2.tooltip.Draw controls.nodeSlider2.tooltip.Draw = function(self, x, y, width, height, viewPort) local sliderOffsetX = round(184 * (1 - controls.nodeSlider2.val)) @@ -1542,8 +1546,8 @@ function TreeTabClass:FindTimelessJewel() end controls.nodeSlider2:SetVal(0.1) - controls.nodeSlider3Label = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 175, 0, 16, "^7Minimum Node Weight:") - controls.nodeSlider3 = new("SliderControl", { "LEFT", controls.nodeSlider3Label, "RIGHT" }, 10, 0, 200, 16, function(value) + controls.nodeSlider3Label = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {405, 175, 0, 16}, "^7Minimum Node Weight:") + controls.nodeSlider3 = new("SliderControl", {"LEFT", controls.nodeSlider3Label, "RIGHT"}, {10, 0, 200, 16}, function(value) if value == 1 then controls.nodeSlider3Value.label = "^7Required" else @@ -1557,7 +1561,7 @@ function TreeTabClass:FindTimelessJewel() tooltip:AddLine(16, "^7Seeds that do not meet the minimum weight threshold for a desired node are excluded from the search results.") end end - controls.nodeSlider3Value = new("LabelControl", { "LEFT", controls.nodeSlider3, "RIGHT" }, 5, 0, 0, 16, "^70") + controls.nodeSlider3Value = new("LabelControl", {"LEFT", controls.nodeSlider3, "RIGHT"}, {5, 0, 0, 16}, "^70") controls.nodeSlider3.tooltip.realDraw = controls.nodeSlider3.tooltip.Draw controls.nodeSlider3.tooltip.Draw = function(self, x, y, width, height, viewPort) local sliderOffsetX = round(184 * (1 - controls.nodeSlider3.val)) @@ -1596,8 +1600,8 @@ function TreeTabClass:FindTimelessJewel() end buildMods() - controls.nodeSelectLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 200, 0, 16, "^7Search for Node:") - controls.nodeSelect = new("DropDownControl", { "LEFT", controls.nodeSelectLabel, "RIGHT" }, 10, 0, 200, 18, modData, function(index, value) + controls.nodeSelectLabel = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {405, 200, 0, 16}, "^7Search for Node:") + controls.nodeSelect = new("DropDownControl", {"LEFT", controls.nodeSelectLabel, "RIGHT"}, {10, 0, 200, 18}, modData, function(index, value) nodeSliderStatLabel = "None" nodeSlider2StatLabel = "None" if value.id then @@ -1668,7 +1672,7 @@ function TreeTabClass:FindTimelessJewel() local function generateFallbackWeights(nodes, selection) local calcFunc, calcBase = self.build.calcsTab:GetMiscCalculator(self.build) local newList = { } - local baseOutput = calcFunc({ }) + local baseOutput = calcFunc() if baseOutput.Minion then baseOutput = baseOutput.Minion end @@ -1830,7 +1834,7 @@ function TreeTabClass:FindTimelessJewel() updateSearchList(newList, true) end - controls.fallbackWeightsLabel = new("LabelControl", { "TOPRIGHT", nil, "TOPLEFT" }, 405, 225, 0, 16, "^7Fallback Weight Mode:") + controls.fallbackWeightsLabel = new("LabelControl", {"TOPRIGHT", nil, "TOPLEFT"}, {405, 225, 0, 16}, "^7Fallback Weight Mode:") local fallbackWeightsList = { } for id, stat in pairs(data.powerStatList) do if not stat.ignoreForItems and stat.label ~= "Name" then @@ -1841,11 +1845,11 @@ function TreeTabClass:FindTimelessJewel() }) end end - controls.fallbackWeightsList = new("DropDownControl", { "LEFT", controls.fallbackWeightsLabel, "RIGHT" }, 10, 0, 200, 18, fallbackWeightsList, function(index) + controls.fallbackWeightsList = new("DropDownControl", {"LEFT", controls.fallbackWeightsLabel, "RIGHT"}, {10, 0, 200, 18}, fallbackWeightsList, function(index) timelessData.fallbackWeightMode.idx = index end) controls.fallbackWeightsList.selIndex = timelessData.fallbackWeightMode.idx or 1 - controls.fallbackWeightsButton = new("ButtonControl", { "LEFT", controls.fallbackWeightsList, "RIGHT" }, 5, 0, 66, 18, "Generate", function() + controls.fallbackWeightsButton = new("ButtonControl", {"LEFT", controls.fallbackWeightsList, "RIGHT"}, {5, 0, 66, 18}, "Generate", function() setupFallbackWeights() controls.searchListFallbackButton.label = "^4Fallback Nodes" end) @@ -1854,7 +1858,7 @@ function TreeTabClass:FindTimelessJewel() tooltip:AddLine(16, "^7Click this button to generate new fallback node weights, replacing your old ones.") end - controls.searchListButton = new("ButtonControl", { "TOPLEFT", nil, "TOPLEFT" }, 12, 250, 106, 20, "^7Desired Nodes", function() + controls.searchListButton = new("ButtonControl", {"TOPLEFT", nil, "TOPLEFT"}, {12, 250, 106, 20}, "^7Desired Nodes", function() if controls.searchListFallback.shown then controls.searchListFallback.shown = false controls.searchListFallback.enabled = false @@ -1868,7 +1872,7 @@ function TreeTabClass:FindTimelessJewel() tooltip:AddLine(16, "^7This list can be updated manually or by selecting the node you want to update via the search dropdown list and then moving the node weight sliders.") end controls.searchListButton.locked = function() return controls.searchList.shown end - controls.searchListFallbackButton = new("ButtonControl", { "LEFT", controls.searchListButton, "RIGHT" }, 5, 0, 110, 20, "^7Fallback Nodes", function() + controls.searchListFallbackButton = new("ButtonControl", {"LEFT", controls.searchListButton, "RIGHT"}, {5, 0, 110, 20}, "^7Fallback Nodes", function() controls.searchList.shown = false controls.searchList.enabled = false controls.searchListFallback.shown = true @@ -1884,7 +1888,7 @@ function TreeTabClass:FindTimelessJewel() tooltip:AddLine(16, "^7Any manual changes made to your fallback nodes are lost when you click the generate button, as it completely replaces them.") end controls.searchListFallbackButton.locked = function() return controls.searchListFallback.shown end - controls.searchList = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, 12, 275, 438, 200, timelessData.searchList, nil, "^%C\t\n", nil, function(value) + controls.searchList = new("EditControl", {"TOPLEFT", nil, "TOPLEFT"}, {12, 275, 438, 200}, timelessData.searchList, nil, "^%C\t\n", nil, function(value) timelessData.searchList = value parseSearchList(0, false) self.build.modFlag = true @@ -1892,7 +1896,7 @@ function TreeTabClass:FindTimelessJewel() controls.searchList.shown = true controls.searchList.enabled = true controls.searchList:SetText(timelessData.searchList and timelessData.searchList or "") - controls.searchListFallback = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, 12, 275, 438, 200, timelessData.searchListFallback, nil, "^%C\t\n", nil, function(value) + controls.searchListFallback = new("EditControl", {"TOPLEFT", nil, "TOPLEFT"}, {12, 275, 438, 200}, timelessData.searchListFallback, nil, "^%C\t\n", nil, function(value) timelessData.searchListFallback = value parseSearchList(0, true) self.build.modFlag = true @@ -1901,13 +1905,13 @@ function TreeTabClass:FindTimelessJewel() controls.searchListFallback.enabled = false controls.searchListFallback:SetText(timelessData.searchListFallback and timelessData.searchListFallback or "") - controls.searchResultsLabel = new("LabelControl", { "TOPLEFT", nil, "TOPRIGHT" }, -450, 250, 0, 16, "^7Search Results:") - controls.searchResults = new("TimelessJewelListControl", { "TOPLEFT", nil, "TOPRIGHT" }, -450, 275, 438, 200, self.build) - controls.searchTradeLeagueSelect = new("DropDownControl", { "BOTTOMRIGHT", controls.searchResults, "TOPRIGHT" }, -175, -5, 140, 20, nil, function(_, value) + controls.searchResultsLabel = new("LabelControl", { "TOPLEFT", nil, "TOPRIGHT" }, { -450, 250, 0, 16 }, "^7Search Results:") + controls.searchResults = new("TimelessJewelListControl", { "TOPLEFT", nil, "TOPRIGHT" }, { -450, 275, 438, 200 }, self.build) + controls.searchTradeLeagueSelect = new("DropDownControl", { "BOTTOMRIGHT", controls.searchResults, "TOPRIGHT" }, { -175, -5, 140, 20 }, nil, function(_, value) self.timelessJewelLeagueSelect = value end) self.tradeQueryRequests = new("TradeQueryRequests") - controls.msg = new("LabelControl", nil, -280, 5, 0, 16, "") + controls.msg = new("LabelControl", nil, { -280, 5, 0, 16 }, "") if #self.tradeLeaguesList > 0 then controls.searchTradeLeagueSelect:SetList(self.tradeLeaguesList) -- restore the last league selected @@ -1945,7 +1949,7 @@ function TreeTabClass:FindTimelessJewel() controls.searchTradeLeagueSelect:SetList(self.tradeLeaguesList) end) end - controls.searchTradeButton = new("ButtonControl", { "BOTTOMRIGHT", controls.searchResults, "TOPRIGHT" }, 0, -5, 170, 20, "Copy Trade URL", function() + controls.searchTradeButton = new("ButtonControl", { "BOTTOMRIGHT", controls.searchResults, "TOPRIGHT" }, { 0, -5, 170, 20 }, "Copy Trade URL", function() local seedTrades = {} local startRow = controls.searchResults.selIndex or 1 local endRow = startRow + m_floor(10 / ((timelessData.sharedResults.conqueror.id == 1) and 3 or 1)) @@ -2052,7 +2056,7 @@ function TreeTabClass:FindTimelessJewel() local totalWidth = m_floor(width * buttons + divider * (buttons - 1)) local buttonX = -totalWidth / 2 + width / 2 - controls.searchButton = new("ButtonControl", nil, buttonX, 485, width, 20, "Search", function() + controls.searchButton = new("ButtonControl", nil, {buttonX, 485, width, 20}, "Search", function() if treeData.nodes[timelessData.jewelSocket.id] and treeData.nodes[timelessData.jewelSocket.id].isJewelSocket then local radiusNodes = treeData.nodes[timelessData.jewelSocket.id].nodesInRadius[3] -- large radius around timelessData.jewelSocket.id local allocatedNodes = { } @@ -2344,14 +2348,14 @@ function TreeTabClass:FindTimelessJewel() controls.searchResults.selIndex = 1 end end) - controls.resetButton = new("ButtonControl", nil, buttonX + (width + divider), 485, width, 20, "Reset", function() + controls.resetButton = new("ButtonControl", nil, {buttonX + (width + divider), 485, width, 20}, "Reset", function() updateSearchList("", true) updateSearchList("", false) wipeTable(timelessData.searchResults) controls.searchTradeButton.enabled = false clearProtected() end) - controls.closeButton = new("ButtonControl", nil, buttonX + (width + divider) * 2, 485, width, 20, "Cancel", function() + controls.closeButton = new("ButtonControl", nil, {buttonX + (width + divider) * 2, 485, width, 20}, "Cancel", function() main:ClosePopup() end) diff --git a/src/Data/Bases/gloves.lua b/src/Data/Bases/gloves.lua index e90f528791..1577b72639 100644 --- a/src/Data/Bases/gloves.lua +++ b/src/Data/Bases/gloves.lua @@ -555,7 +555,7 @@ itemBases["Chimerascale Gauntlets"] = { tags = { str_dex_armour = true, top_tier_base_item_type = true, not_for_sale = true, armour = true, gloves = true, default = true, }, influenceTags = { shaper = "gloves_shaper", elder = "gloves_elder", adjudicator = "gloves_adjudicator", basilisk = "gloves_basilisk", crusader = "gloves_crusader", eyrie = "gloves_eyrie", cleansing = "gloves_cleansing", tangle = "gloves_tangle" }, implicitModTypes = { }, - armour = { ArmourBaseMin = 176, ArmourBaseMax = 176, EvasionBaseMin = 176, EvasionBaseMax = 176, }, + armour = { ArmourBaseMin = 176, ArmourBaseMax = 203, EvasionBaseMin = 176, EvasionBaseMax = 203, }, req = { level = 78, str = 70, dex = 70, }, } itemBases["Wyvernscale Gauntlets"] = { @@ -565,7 +565,7 @@ itemBases["Wyvernscale Gauntlets"] = { tags = { str_dex_armour = true, top_tier_base_item_type = true, not_for_sale = true, armour = true, gloves = true, default = true, }, influenceTags = { shaper = "gloves_shaper", elder = "gloves_elder", adjudicator = "gloves_adjudicator", basilisk = "gloves_basilisk", crusader = "gloves_crusader", eyrie = "gloves_eyrie", cleansing = "gloves_cleansing", tangle = "gloves_tangle" }, implicitModTypes = { }, - armour = { ArmourBaseMin = 205, ArmourBaseMax = 205, EvasionBaseMin = 205, EvasionBaseMax = 205, }, + armour = { ArmourBaseMin = 205, ArmourBaseMax = 236, EvasionBaseMin = 205, EvasionBaseMax = 236, }, req = { level = 84, str = 80, dex = 80, }, } diff --git a/src/Data/ClusterJewels.lua b/src/Data/ClusterJewels.lua index d69cd6abad..4f323ef681 100644 --- a/src/Data/ClusterJewels.lua +++ b/src/Data/ClusterJewels.lua @@ -891,160 +891,160 @@ return { "Pitfighter", }, orbitOffsets = { - [43989] = { + [2627120085] = { [0] = 3, [1] = 5, [2] = 5, }, - [25134] = { + [2627101230] = { [0] = 0, [1] = 11, [2] = 11, }, - [30275] = { + [2627106371] = { [0] = 2, [1] = 3, [2] = 3, }, - [28650] = { + [2627104746] = { [0] = 1, [1] = 1, [2] = 1, }, - [48132] = { + [2627124228] = { [0] = 5, [1] = 9, [2] = 9, }, - [18756] = { + [2627094852] = { [0] = 4, [1] = 7, [2] = 7, }, - [55706] = { + [2627131802] = { [0] = 2, [1] = 3, }, - [26661] = { + [2627102757] = { [0] = 3, [1] = 5, }, - [13201] = { + [2627089297] = { [0] = 3, [1] = 7, }, - [40114] = { + [2627116210] = { [0] = 1, }, - [18361] = { + [2627094457] = { [0] = 2, }, - [7956] = { + [2627084052] = { [0] = 3, }, - [51233] = { + [2627127329] = { [0] = 5, [1] = 9, }, - [57194] = { + [2627133290] = { [0] = 5, [1] = 11, }, - [35853] = { + [2627111949] = { [0] = 0, [1] = 1, }, - [35313] = { + [2627111409] = { [0] = 4, }, - [44470] = { + [2627120566] = { [0] = 5, }, - [37147] = { + [2627113243] = { [0] = 0, }, - [25441] = { + [2627101537] = { [0] = 1, [1] = 1, }, - [28018] = { + [2627104114] = { [0] = 2, [1] = 3, }, - [53203] = { + [2627129299] = { [0] = 3, [1] = 5, }, - [3854] = { + [2627079950] = { [0] = 0, }, - [49951] = { + [2627126047] = { [0] = 1, }, - [22046] = { + [2627098142] = { [0] = 2, }, - [37898] = { + [2627113994] = { [0] = 5, [1] = 11, }, - [64166] = { + [2627140262] = { [0] = 1, [1] = 1, }, - [58355] = { + [2627134451] = { [0] = 2, [1] = 3, }, - [48128] = { + [2627124224] = { [0] = 5, }, - [27475] = { + [2627103571] = { [0] = 0, }, - [35070] = { + [2627111166] = { [0] = 1, }, - [35926] = { + [2627112022] = { [0] = 4, [1] = 7, }, - [33833] = { + [2627109929] = { [0] = 5, [1] = 9, }, - [50179] = { + [2627126275] = { [0] = 5, [1] = 11, }, - [36414] = { + [2627112510] = { [0] = 3, }, - [10643] = { + [2627086739] = { [0] = 4, }, - [56439] = { + [2627132535] = { [0] = 5, }, - [58194] = { + [2627134290] = { [0] = 3, [1] = 5, }, - [34013] = { + [2627110109] = { [0] = 4, [1] = 7, }, - [24452] = { + [2627100548] = { [0] = 5, [1] = 9, }, - [63754] = { + [2627139850] = { [0] = 2, }, - [54600] = { + [2627130696] = { [0] = 3, }, - [27819] = { + [2627103915] = { [0] = 4, }, }, diff --git a/src/Data/EnchantmentWeapon.lua b/src/Data/EnchantmentWeapon.lua index 37d8d9fa04..8302065b50 100644 --- a/src/Data/EnchantmentWeapon.lua +++ b/src/Data/EnchantmentWeapon.lua @@ -193,4 +193,168 @@ return { "10% increased Explicit Ailment Modifier magnitudes/All Sockets are Green", "Can have 1 additional Crafted Modifier", }, + ["RUNESMITH"] = { + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (8-10) to (15-18) Fire Damage", statOrder = { 1226 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (12-17) to (25-29) Fire Damage", statOrder = { 1226 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (17-24) to (35-41) Fire Damage", statOrder = { 1226 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (14-20) to (29-33) Fire Damage", statOrder = { 1226 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (23-31) to (47-54) Fire Damage", statOrder = { 1226 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (32-44) to (65-76) Fire Damage", statOrder = { 1226 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "fire", "ailment" }, "(10-15)% chance to Ignite", statOrder = { 1880 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "fire", "ailment" }, "(20-25)% chance to Ignite", statOrder = { 1880 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Cast Level 10 Fire Burst on Hit", statOrder = { 7334 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Burning Enemies you kill have a 10% chance to Explode, dealing a tenth of their maximum Life as Fire Damage", statOrder = { 6047 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds 2 to (25-29) Lightning Damage", statOrder = { 1246 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds 2 to (41-48) Lightning Damage", statOrder = { 1246 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds 3 to (57-67) Lightning Damage", statOrder = { 1246 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds 3 to (46-53) Lightning Damage", statOrder = { 1246 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds (4-5) to (76-88) Lightning Damage", statOrder = { 1246 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds (5-8) to (106-123) Lightning Damage", statOrder = { 1246 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "lightning", "ailment" }, "(10-15)% chance to Shock", statOrder = { 1887 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "lightning", "ailment" }, "(20-25)% chance to Shock", statOrder = { 1887 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant", "critical" }, "Trigger Level 5 Lightning Bolt when you deal a Critical Strike", statOrder = { 660 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Trigger Level 10 Shock Ground on Hit", statOrder = { 7335 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "lightning", "ailment" }, "When you Kill a Shocked Enemy, inflict an equivalent Shock on each nearby Enemy", statOrder = { 2663 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "fire", "ailment" }, "When you Kill an Ignited Enemy, inflict an equivalent Ignite on each nearby Enemy", statOrder = { 2664 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(10-19)% increased Spell Damage", statOrder = { 1090 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(20-29)% increased Spell Damage", statOrder = { 1090 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(30-39)% increased Spell Damage", statOrder = { 1090 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(15-29)% increased Spell Damage", statOrder = { 1090 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(30-44)% increased Spell Damage", statOrder = { 1090 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(45-59)% increased Spell Damage", statOrder = { 1090 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (10-19)% increased Damage", statOrder = { 1830 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (20-29)% increased Damage", statOrder = { 1830 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (30-39)% increased Damage", statOrder = { 1830 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (15-29)% increased Damage", statOrder = { 1830 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (30-44)% increased Damage", statOrder = { 1830 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (45-59)% increased Damage", statOrder = { 1830 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "critical" }, "(20-25)% increased Spell Critical Strike Chance", statOrder = { 1320 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "critical" }, "(30-35)% increased Spell Critical Strike Chance", statOrder = { 1320 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "minion" }, "Trigger Level 10 Summon Spectral Wolf on Kill", statOrder = { 675 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Culling Strike", statOrder = { 1893 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Every 3 seconds, Consume a nearby Corpse to Recover (7-10)% of Life", statOrder = { 5447 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "minion" }, "25% chance to Trigger Level 10 Summon Raging Spirit on Kill", statOrder = { 669 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "minion" }, "Your Minions spread Burning Ground on Death, dealing 10% of their maximum Life as Fire Damage per second", statOrder = { 8630 }, types = { ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning" }, "You and Nearby Allies have 1 to (8-12) added Lightning Damage per Blue Socket", statOrder = { 2852 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "physical_damage", "village_runesmithing_enchant", "damage", "physical", "attack" }, "(11-15)% increased Physical Damage", statOrder = { 1098 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "physical_damage", "village_runesmithing_enchant", "damage", "physical", "attack" }, "(16-20)% increased Physical Damage", statOrder = { 1098 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "physical_damage", "village_runesmithing_enchant", "damage", "physical", "attack" }, "(21-25)% increased Physical Damage", statOrder = { 1098 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (7-9) to (14-16) Chaos Damage", statOrder = { 1253 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (11-15) to (23-26) Chaos Damage", statOrder = { 1253 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (16-21) to (31-37) Chaos Damage", statOrder = { 1253 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (12-17) to (26-30) Chaos Damage", statOrder = { 1253 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (21-28) to (42-48) Chaos Damage", statOrder = { 1253 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (29-40) to (58-68) Chaos Damage", statOrder = { 1253 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "(21-25)% reduced Enemy Stun Threshold with this Weapon", statOrder = { 2348 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "poison", "village_runesmithing_enchant", "chaos", "attack", "ailment" }, "10% chance to Poison on Hit", statOrder = { 7433 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "bleed", "village_runesmithing_enchant", "physical", "attack", "ailment" }, "10% chance to cause Bleeding on Hit", statOrder = { 2334 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "life", "physical", "attack" }, "(0.2-0.3)% of Physical Attack Damage Leeched as Life", statOrder = { 1510 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "mana", "physical", "attack" }, "(0.2-0.3)% of Physical Attack Damage Leeched as Mana", statOrder = { 1560 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack", "critical" }, "(5-7)% increased Critical Strike Chance", statOrder = { 1326 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant" }, "Trigger Level 1 Stalking Pustule on Kill", statOrder = { 700 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant" }, "Grants Level 1 Envy Skill", statOrder = { 555 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(7-13)% chance to gain Chaotic Might for 10 seconds on Kill", statOrder = { 5289 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (7-9) to (14-16) Cold Damage", statOrder = { 1235 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (11-15) to (23-26) Cold Damage", statOrder = { 1235 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (16-21) to (31-37) Cold Damage", statOrder = { 1235 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (12-17) to (26-30) Cold Damage", statOrder = { 1235 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (21-28) to (42-48) Cold Damage", statOrder = { 1235 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (29-40) to (58-68) Cold Damage", statOrder = { 1235 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "cold", "ailment" }, "(10-15)% chance to Freeze", statOrder = { 1883 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "cold", "ailment" }, "(20-25)% chance to Freeze", statOrder = { 1883 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack", "speed" }, "(3-6)% increased Attack Speed", statOrder = { 1276 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "speed" }, "(6-10)% increased Cast Speed", statOrder = { 1308 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "speed" }, "(13-18)% increased Cast Speed", statOrder = { 1308 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental" }, "No Physical Damage", "Has (50-100)% increased Elemental Damage", statOrder = { 1098, 7369 }, types = { ["Two Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant", "attack" }, "Trigger Level 10 Icicle Burst when you Hit a Frozen Enemy", statOrder = { 694 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "cold", "ailment" }, "(10-15)% chance to create Chilled Ground when you Freeze an Enemy", statOrder = { 3247 }, types = { ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-25)% chance to create Consecrated Ground when you Shatter an Enemy", statOrder = { 3958 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain (10-15)% of Cold Damage as Extra Fire Damage against Frozen Enemies", statOrder = { 5389 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "curse" }, "(20-30)% chance to Curse Enemies with Elemental Weakness on Hit", statOrder = { 2367 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (20-30)% increased Damage if you've Hit Recently", statOrder = { 8622 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "life" }, "Recover (1-3)% of Life on Kill", statOrder = { 1608 }, types = { ["Two Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "mana" }, "Recover (1-3)% of Mana on Kill", statOrder = { 1610 }, types = { ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-30)% of Attack Physical Damage Converted to Fire Damage", statOrder = { 4600 }, types = { ["Two Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-30)% of Attack Physical Damage Converted to Cold Damage", statOrder = { 4599 }, types = { ["Two Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-30)% of Attack Physical Damage Converted to Lightning Damage", statOrder = { 4601 }, types = { ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(10-15)% chance to Cover Enemies in Ash on Hit", statOrder = { 5471 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(10-15)% chance to Cover Enemies in Frost on Hit", statOrder = { 5475 }, types = { ["Two Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "+10% to Maximum Effect of Shock", statOrder = { 9261 }, types = { ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Enemies Killed by your Hits are destroyed", statOrder = { 5925 }, types = { ["Claw"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "chaos_damage", "village_runesmithing_enchant", "damage", "elemental", "chaos" }, "Gain (7-10)% of Elemental Damage as Extra Chaos Damage", statOrder = { 1799 }, types = { ["Two Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Your Hits against Marked Enemy cannot be Blocked or Suppressed", statOrder = { 6639 }, types = { ["Dagger"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "fire", "caster", "gem" }, "+1 to Level of all Fire Spell Skill Gems", statOrder = { 1470 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "cold", "caster", "gem" }, "+1 to Level of all Cold Spell Skill Gems", statOrder = { 1471 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "lightning", "caster", "gem" }, "+1 to Level of all Lightning Spell Skill Gems", statOrder = { 1472 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "chaos", "caster", "gem" }, "+1 to Level of all Chaos Spell Skill Gems", statOrder = { 1473 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "physical", "caster", "gem" }, "+1 to Level of all Physical Spell Skill Gems", statOrder = { 1469 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "minion", "gem" }, "+1 to Level of all Minion Skill Gems", statOrder = { 1474 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(15-25)% chance to inflict Fire Exposure on Hit", statOrder = { 4734 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(15-25)% chance to inflict Cold Exposure on Hit", statOrder = { 4733 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(15-25)% chance to inflict Lightning Exposure on Hit", statOrder = { 4735 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Spells deal added Chaos Damage equal to 4% of your maximum Life", statOrder = { 4313 }, types = { ["Two Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "physical", "caster" }, "(10-15)% chance to Impale on Spell Hit", statOrder = { 9425 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack", "gem" }, "+2 to Level of Socketed Melee Gems", statOrder = { 158 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(10-20)% chance to Blind Enemies on Hit with Spells", statOrder = { 9420 }, types = { ["One Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "Melee Hits Fortify", statOrder = { 2116 }, types = { ["Dagger"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain (2-4) Rage on Melee Hit", statOrder = { 6358 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "physical_damage", "bleed", "village_runesmithing_enchant", "damage", "physical", "attack", "ailment" }, "(10-20)% chance for Bleeding inflicted with this Weapon to deal 100% more Damage", statOrder = { 7316 }, types = { ["Dagger"] = true, }, }, + { type = "Runecraft", modTags = { "chaos_damage", "poison", "village_runesmithing_enchant", "damage", "chaos", "attack", "ailment" }, "(10-20)% chance for Poisons inflicted with this Weapon to deal 100% more Damage", statOrder = { 7317 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds 5% of your Maximum Mana as Fire Damage to Attacks with this Weapon", statOrder = { 4642 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "attack" }, "Iron Grip", statOrder = { 9965 }, types = { ["Claw"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster" }, "Iron Will", statOrder = { 9976 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Far Shot", statOrder = { 9974 }, types = { ["One Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "attack" }, "Point Blank", statOrder = { 9952 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Skills fire an additional Projectile", statOrder = { 1651 }, types = { ["Two Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Skills fire 2 additional Projectiles", "Projectiles are fired in random directions", statOrder = { 1651, 9091 }, types = { ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "block", "village_runesmithing_enchant" }, "+(6-8)% Chance to Block Attack Damage while Dual Wielding", statOrder = { 1029 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(5-10)% chance to Restore your Ward on Hit", statOrder = { 9184 }, types = { ["One Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster" }, "(10-20)% chance to inflict Corrosion on Hit with Spells", statOrder = { 9424 }, types = { ["Dagger"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "critical" }, "Gain Elusive on Critical Strike", statOrder = { 4110 }, types = { ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "attack" }, "Exerted Attacks deal (80-100)% increased Damage", statOrder = { 5908 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "+(15-25)% to Damage over Time Multiplier for Ailments from Critical Strikes", statOrder = { 1110 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(7-10)% increased Rage Effect", statOrder = { 9062 }, types = { ["Claw"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain Arcane Surge after Spending a total of 200 Life", statOrder = { 6249 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain Onslaught after Spending a total of 200 Mana", statOrder = { 6307 }, types = { ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Insufficient Life doesn't prevent your Melee Attacks", statOrder = { 8520 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "gem" }, "+2 to Level of all Spell Skill Gems", statOrder = { 1468 }, types = { ["Two Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "curse" }, "Curse Enemies with Temporal Chains on Hit", statOrder = { 2370 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Curse Enemies with Punishment on Hit", statOrder = { 5578 }, types = { ["One Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "curse" }, "Curse Enemies with Enfeeble on Hit", statOrder = { 2364 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "endurance_charge", "village_runesmithing_enchant" }, "(5-10)% chance to gain an Endurance Charge on Kill", statOrder = { 2478 }, types = { ["Claw"] = true, }, }, + { type = "Runecraft", modTags = { "frenzy_charge", "village_runesmithing_enchant" }, "(5-10)% chance to gain a Frenzy Charge on Kill", statOrder = { 2480 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "power_charge", "village_runesmithing_enchant" }, "(5-10)% chance to gain a Power Charge on Kill", statOrder = { 2482 }, types = { ["One Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "vaal" }, "100% chance to gain an additional Vaal Soul on Kill", statOrder = { 2943 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds 5% of your Maximum Energy Shield as Cold Damage to Attacks with this Weapon", statOrder = { 4641 }, types = { ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(10-20)% chance to Aggravate Bleeding on targets you Hit with Attacks", statOrder = { 4364 }, types = { ["Claw"] = true, }, }, + { type = "Runecraft", modTags = { "poison", "village_runesmithing_enchant", "chaos", "ailment" }, "(15-25)% increased Poison Duration", statOrder = { 3009 }, types = { ["Two Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "Attacks Cost Life instead of Mana", statOrder = { 9978 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "critical" }, "Gain Unholy Might for 4 seconds on Critical Strike", statOrder = { 2765 }, types = { ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "minion" }, "+1 to maximum number of Summoned Golems", statOrder = { 3526 }, types = { ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Damage cannot be Reflected", statOrder = { 5596 }, types = { ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "chaos_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "chaos" }, "(20-25)% of Cold Damage Converted to Chaos Damage", statOrder = { 1826 }, types = { ["Dagger"] = true, }, }, + { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "life" }, "Life Leech from Hits with this Weapon is instant", statOrder = { 2388 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "mana" }, "Mana Leech from Hits with this Weapon is Instant", statOrder = { 7423 }, types = { ["One Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "defences", "energy_shield" }, "Energy Shield Leech Effects from Attacks are not removed at Full Energy Shield", statOrder = { 5979 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Haunted by Tormented Spirits", statOrder = { 6769 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "vaal" }, "Socketed Vaal Skills have 100% reduced Soul Gain Prevention Duration", statOrder = { 495 }, types = { ["Dagger"] = true, }, }, + { type = "Runecraft", modTags = { "physical_damage", "elemental_damage", "village_runesmithing_enchant", "damage", "physical", "elemental", "attack" }, "Gain (30-50)% of Weapon Physical Damage as Extra Damage of each Element", statOrder = { 4092 }, types = { ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant", "caster", "gem" }, "Trigger a Socketed Fire Spell on Hit, with a 0.25 second Cooldown", statOrder = { 7546 }, types = { ["One Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "curse" }, "You can apply an additional Curse", statOrder = { 2022 }, types = { ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-25)% chance when you Kill a Magic Monster to gain its Modifiers for 60 seconds", statOrder = { 6291 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "Attack Projectiles Return to you", statOrder = { 2672 }, types = { ["Two Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Attack Critical Strikes ignore Enemy Monster Elemental Resistances", statOrder = { 4569 }, types = { ["Two Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "+2 metres to Weapon Range", statOrder = { 2594 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Chaos Damage with Hits is Lucky", statOrder = { 5318 }, types = { ["Dagger"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain Flaming, Icy or Crackling Runesurge at random for 4 seconds every 10 seconds", statOrder = { 6266 }, types = { ["Two Handed Mace"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Battlemage", statOrder = { 9924 }, types = { ["Claw"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "Melee Strike Skills deal Splash Damage to surrounding targets", statOrder = { 1035 }, types = { ["Claw"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain a random shrine buff every 10 seconds", statOrder = { 6339 }, types = { ["Staff"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Trigger Level 20 Summon Phantasm Skill when you Consume a corpse", statOrder = { 701 }, types = { ["Two Handed Sword"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Increases and Reductions to Minion Damage also affect you at 150% of their value", statOrder = { 4361 }, types = { ["Bow"] = true, }, }, + { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire" }, "(7-10)% increased Fire Damage per 1% Fire Resistance above 75%", statOrder = { 6096 }, types = { ["Two Handed Axe"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "+(50-75)% chance to Suppress Spell Damage while your Off Hand is empty", statOrder = { 9413 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "vaal" }, "Shepherd of Souls", statOrder = { 9962 }, types = { ["Wand"] = true, }, }, + { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "5% increased Quantity of Gold Dropped by Slain Enemies", statOrder = { 6772 }, types = { }, }, + }, } \ No newline at end of file diff --git a/src/Data/Global.lua b/src/Data/Global.lua index b80429da7a..ab83766717 100644 --- a/src/Data/Global.lua +++ b/src/Data/Global.lua @@ -318,8 +318,5 @@ SkillType = { GlobalCache = { cachedData = { MAIN = {}, CALCS = {}, CALCULATOR = {}, CACHE = {}, }, - noCache = nil, - useFullDPS = false, - numActiveSkillInFullDPS = 0, } diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index cbdc7c1366..8632b8e8fc 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -116,10 +116,8 @@ c["+1 Armour per 10 Unreserved Maximum Mana"]={{[1]={[1]={div=10,stat="ManaUnres c["+1 Armour per 2 Strength"]={{[1]={[1]={div=2,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="Armour",type="BASE",value=1}},nil} c["+1 Life per 4 Dexterity"]={{[1]={[1]={div=4,stat="Dex",type="PerStat"},flags=0,keywordFlags=0,name="Life",type="BASE",value=1}},nil} c["+1 Mana per 4 Strength"]={{[1]={[1]={div=4,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="Mana",type="BASE",value=1}},nil} -c["+1 Prefix Modifier allowed"]={{}," Prefix Modifier allowed "} -c["+1 Prefix Modifier allowed -1 Suffix Modifier allowed"]={{}," Prefix Modifier allowed -1 Suffix Modifier allowed "} -c["+1 Suffix Modifier allowed"]={{}," Suffix Modifier allowed "} -c["+1 Suffix Modifier allowed Implicit Modifiers Cannot Be Changed"]={{}," Suffix Modifier allowed Implicit Modifiers Cannot Be Changed "} +c["+1 Prefix Modifier allowed"]={{},nil} +c["+1 Suffix Modifier allowed"]={{},nil} c["+1 maximum Energy Shield per 5 Strength"]={{[1]={[1]={div=5,stat="Str",type="PerStat"},flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=1}},nil} c["+1 second to Summon Skeleton Cooldown"]={{}," second to Summon Cooldown "} c["+1 to Level of Socketed Active Skill Gems"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="active skill",value=1}}},nil} @@ -139,12 +137,14 @@ c["+1 to Level of Socketed Strength Gems"]={{[1]={[1]={slotName="{SlotName}",typ c["+1 to Level of Socketed Support Gems"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="support",value=1}}},nil} c["+1 to Level of Socketed Warcry Gems"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="warcry",value=1}}},nil} c["+1 to Level of all Chaos Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="chaos",[2]="skill"},value=1}}},nil} +c["+1 to Level of all Chaos Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="chaos",[2]="spell",[3]="skill"},value=1}}},nil} c["+1 to Level of all Cold Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="cold",[2]="spell",[3]="skill"},value=1}}},nil} c["+1 to Level of all Dexterity Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="dexterity",[2]="skill"},value=1}}},nil} c["+1 to Level of all Fire Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="fire",[2]="spell",[3]="skill"},value=1}}},nil} c["+1 to Level of all Intelligence Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="intelligence",[2]="skill"},value=1}}},nil} c["+1 to Level of all Lightning Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="lightning",[2]="spell",[3]="skill"},value=1}}},nil} c["+1 to Level of all Minion Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="minion",[2]="skill"},value=1}}},nil} +c["+1 to Level of all Physical Spell Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="physical",[2]="spell",[3]="skill"},value=1}}},nil} c["+1 to Level of all Raise Spectre Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="raise spectre",value=1}}},nil} c["+1 to Level of all Raise Zombie Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="raise zombie",value=1}}},nil} c["+1 to Level of all Skill Gems"]={{[1]={flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keywordList={[1]="skill"},value=1}}},nil} @@ -1074,6 +1074,7 @@ c["+400 to Accuracy Rating"]={{[1]={flags=0,keywordFlags=0,name="Accuracy",type= c["+400 to Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="BASE",value=400}},nil} c["+400 to Evasion Rating"]={{[1]={flags=0,keywordFlags=0,name="Evasion",type="BASE",value=400}},nil} c["+4000 to Armour during Soul Gain Prevention"]={{[1]={[1]={type="Condition",var="SoulGainPrevention"},flags=0,keywordFlags=0,name="Armour",type="BASE",value=4000}},nil} +c["+41 to maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=41}},nil} c["+41% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=41}},nil} c["+42% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=42}},nil} c["+425 to Accuracy Rating"]={{[1]={flags=0,keywordFlags=0,name="Accuracy",type="BASE",value=425}},nil} @@ -1337,7 +1338,6 @@ c["+75% to Cold Resistance"]={{[1]={flags=0,keywordFlags=0,name="ColdResist",typ c["+75% to Critical Strike Multiplier during any Flask Effect"]={{[1]={[1]={type="Condition",var="UsingFlask"},flags=0,keywordFlags=0,name="CritMultiplier",type="BASE",value=75}},nil} c["+75% to Fire Resistance"]={{[1]={flags=0,keywordFlags=0,name="FireResist",type="BASE",value=75}},nil} c["+75% to Lightning Resistance"]={{[1]={flags=0,keywordFlags=0,name="LightningResist",type="BASE",value=75}},nil} -c["+77 to maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="BASE",value=77}},nil} c["+78 to maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=78}},nil} c["+78 to maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="BASE",value=78}},nil} c["+8 to Dexterity"]={{[1]={flags=0,keywordFlags=0,name="Dex",type="BASE",value=8}},nil} @@ -1432,10 +1432,8 @@ c["+95 to maximum Life"]={{[1]={flags=0,keywordFlags=0,name="Life",type="BASE",v c["+96 to maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="BASE",value=96}},nil} c["-1 Fire Damage taken from Hits per Mana Burn"]={{[1]={[1]={type="Multiplier",var="ManaBurnStacks"},flags=0,keywordFlags=0,name="FireDamageTakenWhenHit",type="BASE",value=-1}},nil} c["-1 Physical Damage taken from Hits per Level"]={{[1]={[1]={type="Multiplier",var="Level"},flags=0,keywordFlags=0,name="PhysicalDamageTakenWhenHit",type="BASE",value=-1}},nil} -c["-1 Prefix Modifier allowed"]={{}," Prefix Modifier allowed "} -c["-1 Prefix Modifier allowed +1 Suffix Modifier allowed"]={{}," Prefix Modifier allowed +1 Suffix Modifier allowed "} -c["-1 Suffix Modifier allowed"]={{}," Suffix Modifier allowed "} -c["-1 Suffix Modifier allowed Implicit Modifiers Cannot Be Changed"]={{}," Suffix Modifier allowed Implicit Modifiers Cannot Be Changed "} +c["-1 Prefix Modifier allowed"]={{},nil} +c["-1 Suffix Modifier allowed"]={{},nil} c["-1 to Maximum Endurance Charges"]={{[1]={flags=0,keywordFlags=0,name="EnduranceChargesMax",type="BASE",value=-1}},nil} c["-1 to Maximum Frenzy Charges"]={{[1]={flags=0,keywordFlags=0,name="FrenzyChargesMax",type="BASE",value=-1}},nil} c["-1 to Maximum Power Charges"]={{[1]={flags=0,keywordFlags=0,name="PowerChargesMax",type="BASE",value=-1}},nil} @@ -1470,8 +1468,8 @@ c["-16 Physical Damage taken from Attack Hits"]={{[1]={flags=0,keywordFlags=0,na c["-18 Physical Damage taken from Attack Hits"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-18}},nil} c["-2 Physical Damage taken from Attack Hits"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-2}},nil} c["-2 Physical Damage taken from Attacks"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTakenFromAttacks",type="BASE",value=-2}},nil} -c["-2 Prefix Modifiers allowed"]={{}," Prefix Modifiers allowed "} -c["-2 Prefix Modifiers allowed -1 Suffix Modifier allowed"]={{}," Prefix Modifiers allowed -1 Suffix Modifier allowed "} +c["-2 Prefix Modifiers allowed"]={{},nil} +c["-2 Suffix Modifiers allowed"]={{},nil} c["-2 to Accuracy Rating per Level"]={{[1]={[1]={type="Multiplier",var="Level"},flags=0,keywordFlags=0,name="Accuracy",type="BASE",value=-2}},nil} c["-2 to Level of Socketed Skill Gems per Socketed Gem"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},[2]={type="Multiplier",var="SocketedGemsIn{SlotName}"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="grants_active_skill",value=-2}}},nil} c["-2 to Level of Socketed Support Gems"]={{[1]={[1]={slotName="{SlotName}",type="SocketedIn"},flags=0,keywordFlags=0,name="GemProperty",type="LIST",value={key="level",keyword="support",value=-2}}},nil} @@ -3420,7 +3418,7 @@ c["20% chance to Trigger Level 25 Summon Spectral Wolf on Critical Strike with t c["20% chance to deal Double Damage while Focused"]={{[1]={[1]={type="Condition",var="Focused"},flags=0,keywordFlags=0,name="DoubleDamageChance",type="BASE",value=20}},nil} c["20% chance to deal Double Damage while affected by Glorious Madness"]={{[1]={[1]={type="Condition",var="AffectedByGloriousMadness"},flags=0,keywordFlags=0,name="DoubleDamageChance",type="BASE",value=20}},nil} c["20% chance to double Stun Duration"]={{[1]={flags=0,keywordFlags=0,name="DoubleEnemyStunDurationChance",type="BASE",value=20}},nil} -c["20% chance to gain Elusive when you Block while Dual Wielding"]={{[1]={[1]={type="Condition",var="DualWielding"},flags=0,keywordFlags=0,name="Condition:CanBeElusive",type="FLAG",value=true}}," when you Block "} +c["20% chance to gain Elusive when you Block while Dual Wielding"]={{[1]={[1]={type="Condition",var="DualWielding"},flags=0,keywordFlags=0,name="Condition:CanBeElusive",type="FLAG",value=true}},nil} c["20% chance to gain Onslaught for 4 seconds on Kill"]={{[1]={[1]={type="Condition",var="KilledRecently"},flags=0,keywordFlags=0,name="Condition:Onslaught",type="FLAG",value=true}},nil} c["20% chance to gain a Endurance Charge on Kill"]={nil,"a Endurance Charge "} c["20% chance to gain a Endurance Charge on Kill Regenerate 4% of Life per second"]={nil,"a Endurance Charge Regenerate 4% of Life per second "} @@ -4682,7 +4680,7 @@ c["35% increased Effect of Blind from Melee Weapons"]={{[1]={flags=0,keywordFlag c["35% increased Effect of Buffs granted by your Golems"]={{[1]={[1]={skillType=61,type="SkillType"},flags=0,keywordFlags=0,name="BuffEffect",type="INC",value=35}},nil} c["35% increased Effect of your Curses"]={{[1]={flags=0,keywordFlags=0,name="CurseEffect",type="INC",value=35}},nil} c["35% increased Elemental Damage"]={{[1]={flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=35}},nil} -c["35% increased Elemental Damage with Hits and Ailments for each type of Elemental Ailment on Enemy"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Frozen"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=35},[2]={[1]={actor="enemy",type="ActorCondition",var="Chilled"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=35},[3]={[1]={actor="enemy",type="ActorCondition",var="Ignited"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=35},[4]={[1]={actor="enemy",type="ActorCondition",var="Shocked"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=35},[5]={[1]={actor="enemy",type="ActorCondition",var="Scorched"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=35},[6]={[1]={actor="enemy",type="ActorCondition",var="Brittle"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=35},[7]={[1]={actor="enemy",type="ActorCondition",var="Sapped"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=35}},nil} +c["35% increased Elemental Damage with Hits and Ailments for each type of Elemental Ailment on Enemy"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Frozen"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=35},[2]={[1]={actor="enemy",type="ActorCondition",var="Chilled"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=35},[3]={[1]={actor="enemy",type="ActorCondition",var="Ignited"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=35},[4]={[1]={actor="enemy",type="ActorCondition",var="Shocked"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=35},[5]={[1]={actor="enemy",type="ActorCondition",var="Scorched"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=35},[6]={[1]={actor="enemy",type="ActorCondition",var="Brittle"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=35},[7]={[1]={actor="enemy",type="ActorCondition",var="Sapped"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=35}},nil} c["35% increased Evasion Rating from Equipped Helmet and Boots"]={{[1]={[1]={slotNameList={[1]="Helmet",[2]="Boots"},type="SlotName"},flags=0,keywordFlags=0,name="Evasion",type="INC",value=35}},nil} c["35% increased Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="FireDamage",type="INC",value=35}},nil} c["35% increased Global Critical Strike Chance"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=35}},nil} @@ -4716,6 +4714,7 @@ c["35% less Minimum Physical Attack Damage"]={{[1]={[1]={skillType=1,type="Skill c["35% less Physical and Chaos Damage Taken while Sane"]={{[1]={[1]={neg=true,type="Condition",var="Insane"},flags=0,keywordFlags=0,name="PhysicalDamageTaken",type="MORE",value=-35},[2]={[1]={neg=true,type="Condition",var="Insane"},flags=0,keywordFlags=0,name="ChaosDamageTaken",type="MORE",value=-35}},nil} c["35% more Maximum Physical Attack Damage"]={{[1]={[1]={skillType=1,type="SkillType"},flags=0,keywordFlags=0,name="MaxPhysicalDamage",type="MORE",value=35}},nil} c["35% more Melee Physical Damage during effect"]={{[1]={[1]={type="Condition",var="UsingFlask"},flags=256,keywordFlags=0,name="PhysicalDamage",type="MORE",value=35}},nil} +c["35% reduced Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=-35}},nil} c["35% reduced Elemental Damage"]={{[1]={flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=-35}},nil} c["35% reduced Mana Burn rate"]={{[1]={flags=0,keywordFlags=0,name="TinctureManaBurnRate",type="INC",value=-35}},nil} c["35% reduced Recovery rate"]={{[1]={flags=0,keywordFlags=0,name="FlaskRecoveryRate",type="INC",value=-35}},nil} @@ -4853,6 +4852,7 @@ c["40% increased Brand Attachment range"]={{[1]={flags=0,keywordFlags=0,name="Br c["40% increased Brand Damage"]={{[1]={[1]={skillType=75,type="SkillType"},flags=0,keywordFlags=0,name="Damage",type="INC",value=40}},nil} c["40% increased Cast Speed"]={{[1]={flags=16,keywordFlags=0,name="Speed",type="INC",value=40}},nil} c["40% increased Cast Speed while Ignited"]={{[1]={[1]={type="Condition",var="Ignited"},flags=16,keywordFlags=0,name="Speed",type="INC",value=40}},nil} +c["40% increased Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosDamage",type="INC",value=40}},nil} c["40% increased Chaos Skill Effect Duration"]={{[1]={flags=0,keywordFlags=256,name="Duration",type="INC",value=40}},nil} c["40% increased Charge Recovery"]={{[1]={flags=0,keywordFlags=0,name="FlaskChargeRecovery",type="INC",value=40}},nil} c["40% increased Charges per use"]={{[1]={flags=0,keywordFlags=0,name="FlaskChargesUsed",type="INC",value=40}},nil} @@ -4890,6 +4890,7 @@ c["40% increased Effect of Impales inflicted with Spells"]={{[1]={flags=0,keywor c["40% increased Effect of Lightning Ailments"]={{[1]={flags=0,keywordFlags=0,name="EnemyShockEffect",type="INC",value=40},[2]={flags=0,keywordFlags=0,name="EnemySapEffect",type="INC",value=40}},nil} c["40% increased Effect of Non-Curse Auras from your Skills on Enemies"]={{[1]={[1]={skillType=43,type="SkillType"},[2]={neg=true,skillType=79,type="SkillType"},flags=0,keywordFlags=0,name="DebuffEffect",type="INC",value=40},[2]={[1]={skillName="Death Aura",type="SkillName"},flags=0,keywordFlags=0,name="AuraEffect",type="INC",value=40}},nil} c["40% increased Effect of Non-Curse Auras from your Skills while you have a Linked Target"]={{[1]={[1]={skillType=43,type="SkillType"},[2]={neg=true,skillType=79,type="SkillType"},[3]={threshold=1,type="MultiplierThreshold",var="LinkedTargets"},flags=0,keywordFlags=0,name="AuraEffect",type="INC",value=40}},nil} +c["40% increased Effect of Non-Damaging Ailments"]={{[1]={flags=0,keywordFlags=0,name="EnemyShockEffect",type="INC",value=40},[2]={flags=0,keywordFlags=0,name="EnemyChillEffect",type="INC",value=40},[3]={flags=0,keywordFlags=0,name="EnemyFreezeEffect",type="INC",value=40},[4]={flags=0,keywordFlags=0,name="EnemyScorchEffect",type="INC",value=40},[5]={flags=0,keywordFlags=0,name="EnemyBrittleEffect",type="INC",value=40},[6]={flags=0,keywordFlags=0,name="EnemySapEffect",type="INC",value=40}},nil} c["40% increased Effect of Onslaught on you"]={{[1]={flags=0,keywordFlags=0,name="OnslaughtEffect",type="INC",value=40}},nil} c["40% increased Effect of Scorch"]={{[1]={flags=0,keywordFlags=0,name="EnemyScorchEffect",type="INC",value=40}},nil} c["40% increased Effect of Shock"]={{[1]={flags=0,keywordFlags=0,name="EnemyShockEffect",type="INC",value=40}},nil} @@ -4897,7 +4898,7 @@ c["40% increased Effect of Shocks you inflict during Effect"]={{[1]={[1]={type=" c["40% increased Effect of non-Damaging Ailments you inflict with Critical Strikes"]={{[1]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemyShockEffect",type="INC",value=40},[2]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemyChillEffect",type="INC",value=40},[3]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemyFreezeEffect",type="INC",value=40},[4]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemyScorchEffect",type="INC",value=40},[5]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemyBrittleEffect",type="INC",value=40},[6]={[1]={type="Condition",var="CriticalStrike"},flags=0,keywordFlags=0,name="EnemySapEffect",type="INC",value=40}},nil} c["40% increased Elemental Damage"]={{[1]={flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=40}},nil} c["40% increased Elemental Damage with Attack Skills"]={{[1]={flags=0,keywordFlags=65536,name="ElementalDamage",type="INC",value=40}},nil} -c["40% increased Elemental Damage with Hits and Ailments for each type of Elemental Ailment on Enemy"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Frozen"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=40},[2]={[1]={actor="enemy",type="ActorCondition",var="Chilled"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=40},[3]={[1]={actor="enemy",type="ActorCondition",var="Ignited"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=40},[4]={[1]={actor="enemy",type="ActorCondition",var="Shocked"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=40},[5]={[1]={actor="enemy",type="ActorCondition",var="Scorched"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=40},[6]={[1]={actor="enemy",type="ActorCondition",var="Brittle"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=40},[7]={[1]={actor="enemy",type="ActorCondition",var="Sapped"},flags=0,keywordFlags=0,name="ElementalDamage",type="INC",value=40}},nil} +c["40% increased Elemental Damage with Hits and Ailments for each type of Elemental Ailment on Enemy"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Frozen"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=40},[2]={[1]={actor="enemy",type="ActorCondition",var="Chilled"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=40},[3]={[1]={actor="enemy",type="ActorCondition",var="Ignited"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=40},[4]={[1]={actor="enemy",type="ActorCondition",var="Shocked"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=40},[5]={[1]={actor="enemy",type="ActorCondition",var="Scorched"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=40},[6]={[1]={actor="enemy",type="ActorCondition",var="Brittle"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=40},[7]={[1]={actor="enemy",type="ActorCondition",var="Sapped"},flags=0,keywordFlags=786432,name="ElementalDamage",type="INC",value=40}},nil} c["40% increased Elusive Effect"]={{[1]={flags=0,keywordFlags=0,name="ElusiveEffect",type="INC",value=40}},nil} c["40% increased Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShield",type="INC",value=40}},nil} c["40% increased Energy Shield Recharge Rate if Equipped Amulet has an Explicit Evasion Modifier"]={{[1]={[1]={itemSlot="amulet",searchCond="explicit evasion",type="ItemCondition"},flags=0,keywordFlags=0,name="EnergyShieldRecharge",type="INC",value=40}},nil} @@ -5366,6 +5367,7 @@ c["50% increased Melee Damage against Bleeding Enemies"]={{[1]={[1]={actor="enem c["50% increased Movement Speed"]={{[1]={flags=0,keywordFlags=0,name="MovementSpeed",type="INC",value=50}},nil} c["50% increased Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=50}},nil} c["50% increased Physical Damage taken"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTaken",type="INC",value=50}},nil} +c["50% increased Prefix Modifier magnitudes"]={{}," Prefix Modifier magnitudes "} c["50% increased Projectile Attack Damage while you have at least 200 Dexterity"]={{[1]={[1]={stat="Dex",threshold=200,type="StatThreshold"},flags=1025,keywordFlags=0,name="Damage",type="INC",value=50}},nil} c["50% increased Projectile Damage"]={{[1]={flags=1024,keywordFlags=0,name="Damage",type="INC",value=50}},nil} c["50% increased Projectile Damage while in Blood Stance"]={{[1]={[1]={type="Condition",var="BloodStance"},flags=1024,keywordFlags=0,name="Damage",type="INC",value=50}},nil} @@ -5389,6 +5391,7 @@ c["50% increased Stun Duration on you"]={{[1]={flags=0,keywordFlags=0,name="Stun c["50% increased Stun Duration with Bows on Enemies"]={{[1]={flags=131076,keywordFlags=0,name="EnemyStunDuration",type="INC",value=50}},nil} c["50% increased Stun Threshold"]={{[1]={flags=0,keywordFlags=0,name="StunThreshold",type="INC",value=50}},nil} c["50% increased Stun and Block Recovery"]={{[1]={flags=0,keywordFlags=0,name="StunRecovery",type="INC",value=50}},nil} +c["50% increased Suffix Modifier magnitudes"]={{}," Suffix Modifier magnitudes "} c["50% increased Totem Duration"]={{[1]={flags=0,keywordFlags=0,name="TotemDuration",type="INC",value=50}},nil} c["50% increased Totem Life"]={{[1]={flags=0,keywordFlags=0,name="TotemLife",type="INC",value=50}},nil} c["50% increased Totem Placement speed"]={{[1]={flags=0,keywordFlags=0,name="TotemPlacementSpeed",type="INC",value=50}},nil} @@ -5575,6 +5578,7 @@ c["60% increased Area of Effect while you don't have Convergence"]={{[1]={[1]={n c["60% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC",value=60}},nil} c["60% increased Armour and Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="ArmourAndEnergyShield",type="INC",value=60}},nil} c["60% increased Armour and Evasion"]={{[1]={flags=0,keywordFlags=0,name="ArmourAndEvasion",type="INC",value=60}},nil} +c["60% increased Armour during Effect"]={{[1]={[1]={type="Condition",var="UsingFlask"},flags=0,keywordFlags=0,name="Armour",type="INC",value=60}},nil} c["60% increased Aspect of the Spider Area of Effect"]={{[1]={[1]={skillName="Aspect of the Spider",type="SkillName"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=60}},nil} c["60% increased Attack Damage"]={{[1]={flags=1,keywordFlags=0,name="Damage",type="INC",value=60}},nil} c["60% increased Attack Damage while affected by Precision"]={{[1]={[1]={type="Condition",var="AffectedByPrecision"},flags=1,keywordFlags=0,name="Damage",type="INC",value=60}},nil} @@ -5671,6 +5675,9 @@ c["600% increased Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EnergyShie c["600% increased Evasion and Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="EvasionAndEnergyShield",type="INC",value=600}},nil} c["600% increased Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=600}},nil} c["62% increased Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosDamage",type="INC",value=62}},nil} +c["62% increased Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="ColdDamage",type="INC",value=62}},nil} +c["62% increased Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="FireDamage",type="INC",value=62}},nil} +c["62% increased Lightning Damage"]={{[1]={flags=0,keywordFlags=0,name="LightningDamage",type="INC",value=62}},nil} c["62% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=62}},nil} c["63% increased Armour and Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="ArmourAndEnergyShield",type="INC",value=63}},nil} c["63% increased Critical Strike Chance"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=63}},nil} @@ -5692,7 +5699,7 @@ c["650% increased Armour"]={{[1]={flags=0,keywordFlags=0,name="Armour",type="INC c["66% increased Critical Strike Chance"]={{[1]={flags=0,keywordFlags=0,name="CritChance",type="INC",value=66}},nil} c["66% reduced Amount Recovered"]={{[1]={flags=0,keywordFlags=0,name="FlaskRecovery",type="INC",value=-66}},nil} c["67% chance to deal Double Damage while Focused"]={{[1]={[1]={type="Condition",var="Focused"},flags=0,keywordFlags=0,name="DoubleDamageChance",type="BASE",value=67}},nil} -c["67% increased Elemental Damage with Attack Skills"]={{[1]={flags=0,keywordFlags=65536,name="ElementalDamage",type="INC",value=67}},nil} +c["67% increased Chance to Block"]={{[1]={flags=0,keywordFlags=0,name="BlockChance",type="INC",value=67}},nil} c["68% increased Global Critical Strike Chance"]={{[1]={[1]={type="Global"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=68}},nil} c["69% increased Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosDamage",type="INC",value=69}},nil} c["69% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=69}},nil} @@ -6032,7 +6039,6 @@ c["90% less Power Charge Duration"]={{[1]={flags=0,keywordFlags=0,name="PowerCha c["90% of Damage taken Recouped as Life"]={{[1]={flags=0,keywordFlags=0,name="LifeRecoup",type="BASE",value=90}},nil} c["90% reduced Duration"]={{[1]={flags=0,keywordFlags=0,name="Duration",type="INC",value=-90}},nil} c["90% reduced Ignite Duration on Enemies"]={{[1]={flags=0,keywordFlags=0,name="EnemyIgniteDuration",type="INC",value=-90}},nil} -c["94% increased Elemental Damage with Attack Skills"]={{[1]={flags=0,keywordFlags=65536,name="ElementalDamage",type="INC",value=94}},nil} c["95% increased Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=95}},nil} c["95% increased Spell Damage"]={{[1]={flags=2,keywordFlags=0,name="Damage",type="INC",value=95}},nil} c["98% increased Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamage",type="INC",value=98}},nil} @@ -6170,12 +6176,14 @@ c["Adds 113 to 338 Lightning Damage to Spells while Unarmed"]={{[1]={[1]={type=" c["Adds 115 to 205 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=115},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=205}},nil} c["Adds 115 to 260 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=115},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=260}},nil} c["Adds 115 to 265 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=115},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=265}},nil} +c["Adds 118 to 216 Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="ColdMin",type="BASE",value=118},[2]={flags=0,keywordFlags=0,name="ColdMax",type="BASE",value=216}},nil} c["Adds 12 Passive Skills"]={{[1]={flags=0,keywordFlags=0,name="JewelData",type="LIST",value={key="clusterJewelNodeCount",value=12}}},nil} c["Adds 12 to 15 Cold Damage to Attacks"]={{[1]={flags=0,keywordFlags=65536,name="ColdMin",type="BASE",value=12},[2]={flags=0,keywordFlags=65536,name="ColdMax",type="BASE",value=15}},nil} c["Adds 12 to 16 Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="ColdMin",type="BASE",value=12},[2]={flags=0,keywordFlags=0,name="ColdMax",type="BASE",value=16}},nil} c["Adds 12 to 16 Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="FireMin",type="BASE",value=12},[2]={flags=0,keywordFlags=0,name="FireMax",type="BASE",value=16}},nil} c["Adds 12 to 20 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=12},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=20}},nil} c["Adds 12 to 20 Physical Damage to Attacks"]={{[1]={flags=0,keywordFlags=65536,name="PhysicalMin",type="BASE",value=12},[2]={flags=0,keywordFlags=65536,name="PhysicalMax",type="BASE",value=20}},nil} +c["Adds 12 to 213 Lightning Damage"]={{[1]={flags=0,keywordFlags=0,name="LightningMin",type="BASE",value=12},[2]={flags=0,keywordFlags=0,name="LightningMax",type="BASE",value=213}},nil} c["Adds 12 to 22 Fire Damage to Spells"]={{[1]={flags=0,keywordFlags=131072,name="FireMin",type="BASE",value=12},[2]={flags=0,keywordFlags=131072,name="FireMax",type="BASE",value=22}},nil} c["Adds 12 to 22 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=12},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=22}},nil} c["Adds 12 to 22 Physical Damage if you've dealt a Critical Strike Recently"]={{[1]={[1]={type="Condition",var="CritRecently"},flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=12},[2]={[1]={type="Condition",var="CritRecently"},flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=22}},nil} @@ -6207,6 +6215,7 @@ c["Adds 13 to 60 Lightning Damage to Attacks during Effect"]={{[1]={[1]={type="C c["Adds 130 to 160 Cold Damage to Spells"]={{[1]={flags=0,keywordFlags=131072,name="ColdMin",type="BASE",value=130},[2]={flags=0,keywordFlags=131072,name="ColdMax",type="BASE",value=160}},nil} c["Adds 130 to 190 Chaos Damage to Spells"]={{[1]={flags=0,keywordFlags=131072,name="ChaosMin",type="BASE",value=130},[2]={flags=0,keywordFlags=131072,name="ChaosMax",type="BASE",value=190}},nil} c["Adds 130 to 195 Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="ColdMin",type="BASE",value=130},[2]={flags=0,keywordFlags=0,name="ColdMax",type="BASE",value=195}},nil} +c["Adds 130 to 242 Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="FireMin",type="BASE",value=130},[2]={flags=0,keywordFlags=0,name="FireMax",type="BASE",value=242}},nil} c["Adds 133 to 197 Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="FireMin",type="BASE",value=133},[2]={flags=0,keywordFlags=0,name="FireMax",type="BASE",value=197}},nil} c["Adds 135 to 360 Lightning Damage to Spells while Unarmed"]={{[1]={[1]={type="Condition",var="Unarmed"},flags=0,keywordFlags=131072,name="LightningMin",type="BASE",value=135},[2]={[1]={type="Condition",var="Unarmed"},flags=0,keywordFlags=131072,name="LightningMax",type="BASE",value=360}},nil} c["Adds 14 to 16 Physical Damage to Attacks and Spells per Siphoning Charge"]={{[1]={[1]={type="Multiplier",var="SiphoningCharge"},flags=0,keywordFlags=196608,name="PhysicalMin",type="BASE",value=14},[2]={[1]={type="Multiplier",var="SiphoningCharge"},flags=0,keywordFlags=196608,name="PhysicalMax",type="BASE",value=16}},nil} @@ -6352,6 +6361,7 @@ c["Adds 22 to 33 Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="ColdMin",type c["Adds 22 to 35 Cold Damage to Spells and Attacks"]={{[1]={flags=0,keywordFlags=196608,name="ColdMin",type="BASE",value=22},[2]={flags=0,keywordFlags=196608,name="ColdMax",type="BASE",value=35}},nil} c["Adds 22 to 35 Fire Damage to Spells and Attacks"]={{[1]={flags=0,keywordFlags=196608,name="FireMin",type="BASE",value=22},[2]={flags=0,keywordFlags=196608,name="FireMax",type="BASE",value=35}},nil} c["Adds 22 to 37 Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosMin",type="BASE",value=22},[2]={flags=0,keywordFlags=0,name="ChaosMax",type="BASE",value=37}},nil} +c["Adds 22 to 396 Lightning Damage"]={{[1]={flags=0,keywordFlags=0,name="LightningMin",type="BASE",value=22},[2]={flags=0,keywordFlags=0,name="LightningMax",type="BASE",value=396}},nil} c["Adds 22 to 41 Fire Damage to Spells"]={{[1]={flags=0,keywordFlags=131072,name="FireMin",type="BASE",value=22},[2]={flags=0,keywordFlags=131072,name="FireMax",type="BASE",value=41}},nil} c["Adds 22 to 42 Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="FireMin",type="BASE",value=22},[2]={flags=0,keywordFlags=0,name="FireMax",type="BASE",value=42}},nil} c["Adds 22 to 44 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=22},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=44}},nil} @@ -6595,6 +6605,7 @@ c["Adds 60 to 90 Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="ColdMin",type c["Adds 625 to 775 Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosMin",type="BASE",value=625},[2]={flags=0,keywordFlags=0,name="ChaosMax",type="BASE",value=775}},nil} c["Adds 63 to 113 Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosMin",type="BASE",value=63},[2]={flags=0,keywordFlags=0,name="ChaosMax",type="BASE",value=113}},nil} c["Adds 64 to 107 Fire Damage to Spells while no Life is Reserved"]={{[1]={[1]={stat="LifeReserved",threshold=0,type="StatThreshold",upper=true},flags=0,keywordFlags=131072,name="FireMin",type="BASE",value=64},[2]={[1]={stat="LifeReserved",threshold=0,type="StatThreshold",upper=true},flags=0,keywordFlags=131072,name="FireMax",type="BASE",value=107}},nil} +c["Adds 64 to 117 Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="ColdMin",type="BASE",value=64},[2]={flags=0,keywordFlags=0,name="ColdMax",type="BASE",value=117}},nil} c["Adds 64 to 96 Chaos Damage"]={{[1]={flags=0,keywordFlags=0,name="ChaosMin",type="BASE",value=64},[2]={flags=0,keywordFlags=0,name="ChaosMax",type="BASE",value=96}},nil} c["Adds 65 to 100 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=65},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=100}},nil} c["Adds 65 to 105 Chaos Damage to Spells"]={{[1]={flags=0,keywordFlags=131072,name="ChaosMin",type="BASE",value=65},[2]={flags=0,keywordFlags=131072,name="ChaosMax",type="BASE",value=105}},nil} @@ -6617,6 +6628,7 @@ c["Adds 7 to 18 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMi c["Adds 7 to 25 Physical Damage to Attacks"]={{[1]={flags=0,keywordFlags=65536,name="PhysicalMin",type="BASE",value=7},[2]={flags=0,keywordFlags=65536,name="PhysicalMax",type="BASE",value=25}},nil} c["Adds 70 to 104 Cold Damage while affected by Hatred"]={{[1]={[1]={type="Condition",var="AffectedByHatred"},flags=0,keywordFlags=0,name="ColdMin",type="BASE",value=70},[2]={[1]={type="Condition",var="AffectedByHatred"},flags=0,keywordFlags=0,name="ColdMax",type="BASE",value=104}},nil} c["Adds 70 to 105 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=70},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=105}},nil} +c["Adds 70 to 130 Fire Damage"]={{[1]={flags=0,keywordFlags=0,name="FireMin",type="BASE",value=70},[2]={flags=0,keywordFlags=0,name="FireMax",type="BASE",value=130}},nil} c["Adds 70 to 165 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=70},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=165}},nil} c["Adds 70 to 210 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=70},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=210}},nil} c["Adds 70 to 295 Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=70},[2]={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=295}},nil} @@ -7599,9 +7611,12 @@ c["Curse Auras from Socketed Skills also affect you"]={nil,"Curse Auras from Soc c["Curse Auras from Socketed Skills also affect you Socketed Curse Gems have 50% increased Reservation Efficiency"]={nil,"Curse Auras from Socketed Skills also affect you Socketed Curse Gems have 50% increased Reservation Efficiency "} c["Curse Enemies which Hit you with a random Hex, ignoring Curse Limit"]={nil,"Curse Enemies which Hit you with a random Hex, ignoring Curse Limit "} c["Curse Enemies which Hit you with a random Hex, ignoring Curse Limit 5% chance to create Shocked Ground when Hit"]={nil,"Curse Enemies which Hit you with a random Hex, ignoring Curse Limit 5% chance to create Shocked Ground when Hit "} +c["Curse Enemies with Conductivity on Hit"]={{[1]={flags=0,keywordFlags=0,name="ExtraSkill",type="LIST",value={level=1,noSupports=true,skillId="Conductivity",triggered=true}}},nil} +c["Curse Enemies with Elemental Weakness on Hit"]={{[1]={flags=0,keywordFlags=0,name="ExtraSkill",type="LIST",value={level=1,noSupports=true,skillId="ElementalWeakness",triggered=true}}},nil} c["Curse Enemies with Elemental Weakness when you Block their Spell Damage, ignoring Curse Limit"]={nil,"Curse Enemies with Elemental Weakness when you Block their Spell Damage, ignoring Curse Limit "} c["Curse Enemies with Flammability on Block"]={{[1]={flags=0,keywordFlags=0,name="ExtraSkill",type="LIST",value={level=1,noSupports=true,skillId="Flammability",triggered=true}}},nil} c["Curse Enemies with Flammability on Hit"]={{[1]={flags=0,keywordFlags=0,name="ExtraSkill",type="LIST",value={level=1,noSupports=true,skillId="Flammability",triggered=true}}},nil} +c["Curse Enemies with Frostbite on Hit"]={{[1]={flags=0,keywordFlags=0,name="ExtraSkill",type="LIST",value={level=1,noSupports=true,skillId="Frostbite",triggered=true}}},nil} c["Curse Enemies with Punishment when you Block their Melee Damage, ignoring Curse Limit"]={nil,"Curse Enemies with Punishment when you Block their Melee Damage, ignoring Curse Limit "} c["Curse Enemies with Punishment when you Block their Melee Damage, ignoring Curse Limit Curse Enemies with Temporal Chains when you Block their Projectile Attack Damage, ignoring Curse Limit"]={nil,"Curse Enemies with Punishment when you Block their Melee Damage, ignoring Curse Limit Curse Enemies with Temporal Chains when you Block their Projectile Attack Damage, ignoring Curse Limit "} c["Curse Enemies with Socketed Hex Curse Gem on Hit"]={{},nil} @@ -7661,7 +7676,7 @@ c["Damage Penetrates 7% Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="C c["Damage Penetrates 8% Lightning Resistance"]={{[1]={flags=0,keywordFlags=0,name="LightningPenetration",type="BASE",value=8}},nil} c["Damage Penetrates 8% of Enemy Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="ElementalPenetration",type="BASE",value=8}},nil} c["Damage Penetrates 9% Elemental Resistances while you are Chilled"]={{[1]={[1]={type="Condition",var="Chilled"},flags=0,keywordFlags=0,name="ElementalPenetration",type="BASE",value=9}},nil} -c["Damage cannot be Reflected"]={nil,"Damage cannot be Reflected "} +c["Damage cannot be Reflected"]={{[1]={[1]={effectType="Global",type="GlobalEffect",unscalable=true},flags=0,keywordFlags=0,name="ReflectedDamageTaken",type="MORE",value=-100}},nil} c["Damage from Enemies Hitting you is Unlucky while you are Cursed with Vulnerability"]={nil,"Damage from Enemies Hitting you is Unlucky while you are Cursed with Vulnerability "} c["Damage from Enemies Hitting you is Unlucky while you are Cursed with Vulnerability You count as on Full Life while you are Cursed with Vulnerability"]={nil,"Damage from Enemies Hitting you is Unlucky while you are Cursed with Vulnerability You count as on Full Life while you are Cursed with Vulnerability "} c["Damage from your Critical Strikes cannot be Reflected"]={nil,"Damage from your Critical Strikes cannot be Reflected "} @@ -7926,8 +7941,8 @@ c["Energy Shield protects Mana instead of Life"]={{[1]={flags=0,keywordFlags=0,n c["Energy Shield starts at zero"]={nil,"Energy Shield starts at zero "} c["Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield"]={nil,"Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield "} c["Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second"]={nil,"Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second "} -c["Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second Life Leech effects are not removed at Full Life"]={nil,"Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second Life Leech effects are not removed at Full Life "} -c["Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second Life Leech effects are not removed at Full Life Life Leech effects Recover Energy Shield instead while on Full Life"]={nil,"Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second Life Leech effects are not removed at Full Life Life Leech effects Recover Energy Shield instead while on Full Life "} +c["Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second Life Leech effects are not removed when Unreserved Life is Filled"]={nil,"Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second Life Leech effects are not removed when Unreserved Life is Filled "} +c["Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second Life Leech effects are not removed when Unreserved Life is Filled Life Leech effects Recover Energy Shield instead while on Full Life"]={nil,"Energy Shield starts at zero Cannot Recharge or Regenerate Energy Shield Lose 5% of Energy Shield per second Life Leech effects are not removed when Unreserved Life is Filled Life Leech effects Recover Energy Shield instead while on Full Life "} c["Enfeeble can affect Hexproof Enemies"]={{[1]={[1]={skillId="Enfeeble",type="SkillId"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="ignoreHexproof",value=true}}},nil} c["Envy has no Reservation"]={{[1]={[1]={skillId="Envy",type="SkillId"},[2]={neg=true,skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="manaReservationFlat",value=0}},[2]={[1]={skillId="Envy",type="SkillId"},[2]={neg=true,skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="lifeReservationFlat",value=0}},[3]={[1]={skillId="Envy",type="SkillId"},[2]={neg=true,skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="manaReservationPercent",value=0}},[4]={[1]={skillId="Envy",type="SkillId"},[2]={neg=true,skillType=119,type="SkillType"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="lifeReservationPercent",value=0}}},nil} c["Eternal Youth"]={{[1]={flags=0,keywordFlags=0,name="Keystone",type="LIST",value="Eternal Youth"}},nil} @@ -8141,13 +8156,13 @@ c["Gain 19% of Non-Chaos Damage as extra Chaos Damage"]={{[1]={flags=0,keywordFl c["Gain 2 Endurance, Frenzy or Power Charges every 6 seconds"]={{}," Endurance,or Power Charges every 6 seconds "} c["Gain 2 Endurance, Frenzy or Power Charges every 6 seconds 172% increased Physical Damage"]={{[1]={[1]={includeTransfigured=true,skillName="Frenzy",type="SkillName"},flags=0,keywordFlags=0,name="PhysicalDamage",type="BASE",value=2}}," Endurance,or Power Charges every 6 seconds 172% increased "} c["Gain 2 Endurance, Frenzy or Power Charges every 6 seconds 84% increased Spell Damage"]={{[1]={[1]={includeTransfigured=true,skillName="Frenzy",type="SkillName"},flags=2,keywordFlags=0,name="Damage",type="BASE",value=2}}," Endurance,or Power Charges every 6 seconds 84% increased "} -c["Gain 2 Endurance, Frenzy or Power Charges every 6 seconds 9% increased Attack Speed"]={{[1]={[1]={includeTransfigured=true,skillName="Frenzy",type="SkillName"},flags=1,keywordFlags=0,name="Speed",type="BASE",value=2}}," Endurance,or Power Charges every 6 seconds 9% increased "} +c["Gain 2 Endurance, Frenzy or Power Charges every 6 seconds Adds 70 to 130 Fire Damage"]={{[1]={[1]={includeTransfigured=true,skillName="Frenzy",type="SkillName"},flags=0,keywordFlags=0,name="FireDamage",type="BASE",value=2}}," Endurance,or Power Charges every 6 seconds Adds 70 to 130 "} c["Gain 2 Grasping Vines each second while stationary"]={{[1]={[1]={limit=10,limitTotal=true,type="Multiplier",var="StationarySeconds"},[2]={type="Condition",var="Stationary"},flags=0,keywordFlags=0,name="Multiplier:GraspingVinesCount",type="BASE",value=2}},nil} c["Gain 2 Mana per Enemy Hit with Attacks"]={{[1]={flags=4,keywordFlags=65536,name="ManaOnHit",type="BASE",value=2}},nil} c["Gain 2 Power Charges on Using a Warcry"]={{}," Power Charges on Using a "} c["Gain 2 Power Charges on Using a Warcry Warcries grant Arcane Surge to you and Allies, with 10% increased effect per 5 power, up to 50%"]={{[1]={flags=0,keywordFlags=4,name="Condition:ArcaneSurge",type="BASE",value=2}}," Power Charges on Using a Warcries grant , with 10% increased effect per 5 power, up to 50% "} c["Gain 2 Rage on Hit with Axes"]={{[1]={flags=0,keywordFlags=0,name="Condition:CanGainRage",type="FLAG",value=true}},nil} -c["Gain 2 Rage on Hit with Axes or Swords"]={{}," Rage with Axes or Swords "} +c["Gain 2 Rage on Hit with Axes or Swords"]={{[1]={flags=0,keywordFlags=0,name="Condition:CanGainRage",type="FLAG",value=true}},nil} c["Gain 2 Rage on Melee Hit"]={{[1]={flags=0,keywordFlags=0,name="Condition:CanGainRage",type="FLAG",value=true}},nil} c["Gain 2% of Cold Damage as Extra Chaos Damage per Frenzy Charge"]={{[1]={[1]={type="Multiplier",var="FrenzyCharge"},flags=0,keywordFlags=0,name="ColdDamageGainAsChaos",type="BASE",value=2}},nil} c["Gain 2% of Fire Damage as Extra Chaos Damage per Endurance Charge"]={{[1]={[1]={type="Multiplier",var="EnduranceCharge"},flags=0,keywordFlags=0,name="FireDamageGainAsChaos",type="BASE",value=2}},nil} @@ -8437,6 +8452,7 @@ c["Gain up to your maximum number of Frenzy and Power Charges when you gain Cat' c["Gain up to your maximum number of Frenzy and Power Charges when you gain Cat's Stealth You have Phasing while you have Cat's Stealth"]={{[1]={[1]={type="Condition",var="AffectedByCat'sStealth"},[2]={includeTransfigured=true,skillName="Frenzy",type="SkillName"},flags=0,keywordFlags=0,name="Condition:Phasing",type="FLAG",value=true}},"up to your maximum number ofand Power Charges when you gain Cat's Stealth You have "} c["Gains no Charges during Effect"]={nil,"Gains no Charges during Effect "} c["Gains no Charges during Effect 23% reduced Duration"]={nil,"Gains no Charges during Effect 23% reduced Duration "} +c["Gains no Charges during Effect 35% reduced Duration"]={nil,"Gains no Charges during Effect 35% reduced Duration "} c["Gains no Charges during Effect Creates a Smoke Cloud on Use"]={nil,"Gains no Charges during Effect Creates a Smoke Cloud on Use "} c["Gains no Charges during Effect Taunts nearby Enemies on use"]={nil,"Gains no Charges during Effect Taunts nearby Enemies on use "} c["Gains no Charges during Effect of any Overflowing Chalice Flask"]={nil,"Gains no Charges during Effect of any Overflowing Chalice Flask "} @@ -8786,11 +8802,7 @@ c["Impales you inflict last 2 additional Hits while using Pride"]={{[1]={[1]={ty c["Implicit Modifier magnitudes are doubled"]={nil,"Implicit Modifier magnitudes are doubled "} c["Implicit Modifier magnitudes are tripled"]={nil,"Implicit Modifier magnitudes are tripled "} c["Implicit Modifier magnitudes are tripled Corrupted"]={nil,"Implicit Modifier magnitudes are tripled Corrupted "} -c["Implicit Modifiers Cannot Be Changed"]={nil,"Implicit Modifiers Cannot Be Changed "} -c["Implicit Modifiers Cannot Be Changed 100% increased Explicit Modifier magnitudes"]={nil,"Implicit Modifiers Cannot Be Changed 100% increased Explicit Modifier magnitudes "} -c["Implicit Modifiers Cannot Be Changed 25% increased Prefix Modifier magnitudes"]={nil,"Implicit Modifiers Cannot Be Changed 25% increased Prefix Modifier magnitudes "} -c["Implicit Modifiers Cannot Be Changed 25% increased Suffix Modifier magnitudes"]={nil,"Implicit Modifiers Cannot Be Changed 25% increased Suffix Modifier magnitudes "} -c["Implicit Modifiers Cannot Be Changed Has Elder, Shaper and all Conqueror Influences"]={nil,"Implicit Modifiers Cannot Be Changed Has Elder, Shaper and all Conqueror Influences "} +c["Implicit Modifiers Cannot Be Changed"]={{},nil} c["Increases and Reductions to Armour also apply to Energy"]={nil,"Increases and Reductions to Armour also apply to Energy "} c["Increases and Reductions to Armour also apply to Energy Shield Recharge Rate at 20% of their value"]={{[1]={flags=0,keywordFlags=0,name="ArmourAppliesToEnergyShieldRecharge",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ImprovedArmourAppliesToEnergyShieldRecharge",type="MAX",value=20}},nil} c["Increases and Reductions to Cast Speed also Apply to Trap Throwing Speed"]={{[1]={flags=0,keywordFlags=0,name="CastSpeedAppliesToTrapThrowingSpeed",type="FLAG",value=true}},nil} @@ -8810,7 +8822,7 @@ c["Inflict 5 additional Impales on Enemies you Impale"]={nil,"Inflict 5 addition c["Inflict 5 additional Impales on Enemies you Impale For 5 seconds after you Impale Enemies, they cannot be Impaled again, and Impales cannot be Called from them"]={nil,"Inflict 5 additional Impales on Enemies you Impale For 5 seconds after you Impale Enemies, they cannot be Impaled again, and Impales cannot be Called from them "} c["Inflict 5 additional Impales on Enemies you Impale For 5 seconds after you Impale Enemies, they cannot be Impaled again, and Impales cannot be Called from them Limited to 1 Keystone Tattoo"]={nil,"Inflict 5 additional Impales on Enemies you Impale For 5 seconds after you Impale Enemies, they cannot be Impaled again, and Impales cannot be Called from them Limited to 1 Keystone Tattoo "} c["Inflict Brittle on Enemies when you Block their Damage"]={nil,"Inflict Brittle on Enemies when you Block their Damage "} -c["Inflict Brittle on Enemies when you Block their Damage +92 to Evasion Rating"]={nil,"Inflict Brittle on Enemies when you Block their Damage +92 to Evasion Rating "} +c["Inflict Brittle on Enemies when you Block their Damage 67% increased Chance to Block"]={nil,"Inflict Brittle on Enemies when you Block their Damage 67% increased Chance to Block "} c["Inflict Decay on Enemies you Curse with Hex Skills, dealing 700 Chaos Damage per Second for 8 Seconds"]={{[1]={[1]={actor="enemy",type="ActorCondition",var="Cursed"},flags=0,keywordFlags=0,name="SkillData",type="LIST",value={key="decay",merge="MAX",value=700}}},nil} c["Inflict Fire Exposure on Hit if you've cast Flammability in the past 10 seconds"]={{[1]={[1]={type="Condition",var="SelfCastFlammability"},[2]={type="Condition",var="Effective"},flags=4,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="FireExposure",type="BASE",value=-10}}}},nil} c["Inflict Fire, Cold and Lightning Exposure on Enemies when you Suppress their Spell Damage"]={{[1]={[1]={type="Condition",var="Effective"},[2]={type="Condition",var="SuppressedRecently"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="FireExposure",type="BASE",value=-10}}},[2]={[1]={type="Condition",var="Effective"},[2]={type="Condition",var="SuppressedRecently"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdExposure",type="BASE",value=-10}}},[3]={[1]={type="Condition",var="Effective"},[2]={type="Condition",var="SuppressedRecently"},flags=0,keywordFlags=0,name="EnemyModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="LightningExposure",type="BASE",value=-10}}}},nil} @@ -8905,7 +8917,6 @@ c["Life Flasks gain 3 charges every 3 seconds"]={{[1]={flags=0,keywordFlags=0,na c["Life Flasks gain a Charge when you hit an Enemy, no more than once each second"]={nil,"Life Flasks gain a Charge when you hit an Enemy, no more than once each second "} c["Life Flasks used while on Low Life apply Recovery Instantly"]={{[1]={[1]={type="Condition",var="LowLife"},flags=0,keywordFlags=0,name="LifeFlaskInstantRecovery",type="BASE",value=100}},nil} c["Life Leech effects Recover Energy Shield instead while on Full Life"]={{[1]={[1]={type="Condition",var="FullLife"},[2]={type="Condition",var="LeechingLife"},flags=0,keywordFlags=0,name="ImmortalAmbition",type="FLAG",value=true}},nil} -c["Life Leech effects are not removed at Full Life"]={{[1]={flags=0,keywordFlags=0,name="CanLeechLifeOnFullLife",type="FLAG",value=true}},nil} c["Life Leech effects are not removed when Unreserved Life is Filled"]={{[1]={flags=0,keywordFlags=0,name="CanLeechLifeOnFullLife",type="FLAG",value=true}},nil} c["Life Leech from Exerted Attacks is instant"]={nil,"Life Leech from Exerted Attacks is instant "} c["Life Leech from Exerted Attacks is instant Non-Exerted Attacks deal no Damage"]={nil,"Life Leech from Exerted Attacks is instant Non-Exerted Attacks deal no Damage "} @@ -9175,6 +9186,8 @@ c["Minions deal 18% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="Minio c["Minions deal 20% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=20}}}},nil} c["Minions deal 20% increased Damage while you are affected by a Herald"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="parent",type="ActorCondition",var="AffectedByHerald"},flags=0,keywordFlags=0,name="Damage",type="INC",value=20}}}},nil} c["Minions deal 20% increased Damage with Hits and Ailments against Ignited Enemies"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="enemy",type="ActorCondition",var="Ignited"},flags=0,keywordFlags=786432,name="Damage",type="INC",value=20}}}},nil} +c["Minions deal 26% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=26}}}},nil} +c["Minions deal 28% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=28}}}},nil} c["Minions deal 30 to 63 additional Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdMin",type="BASE",value=30}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdMax",type="BASE",value=63}}}},nil} c["Minions deal 30% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=30}}}},nil} c["Minions deal 30% increased Damage if you've used a Minion Skill Recently"]={{[1]={[1]={type="Condition",var="UsedMinionSkillRecently"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=30}}}},nil} @@ -9188,9 +9201,12 @@ c["Minions deal 48 to 72 additional Physical Damage"]={{[1]={flags=0,keywordFlag c["Minions deal 50% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=50}}}},nil} c["Minions deal 51 to 78 additional Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalMin",type="BASE",value=51}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="PhysicalMax",type="BASE",value=78}}}},nil} c["Minions deal 60% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=60}}}},nil} +c["Minions deal 62% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=62}}}},nil} c["Minions deal 70% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=70}}}},nil} c["Minions deal 70% increased Damage if you've Hit Recently"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={type="Condition",var="HitRecently"},flags=0,keywordFlags=0,name="Damage",type="INC",value=70}}}},nil} +c["Minions deal 77% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=77}}}},nil} c["Minions deal 8 to 16 Added Attack Physical Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=65536,name="PhysicalMin",type="BASE",value=8}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=65536,name="PhysicalMax",type="BASE",value=16}}}},nil} +c["Minions deal 8% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=8}}}},nil} c["Minions deal 80% increased Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=80}}}},nil} c["Minions deal 9 to 15 additional Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdMin",type="BASE",value=9}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ColdMax",type="BASE",value=15}}}},nil} c["Minions deal no Non-Cold Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DealNoPhysical",type="FLAG",value=true}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DealNoLightning",type="FLAG",value=true}}},[3]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DealNoFire",type="FLAG",value=true}}},[4]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DealNoChaos",type="FLAG",value=true}}}},nil} @@ -9215,6 +9231,7 @@ c["Minions have +11% Chance to Block Spell Damage"]={{[1]={flags=0,keywordFlags= c["Minions have +12% Chance to Block Attack Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="BlockChance",type="BASE",value=12}}}},nil} c["Minions have +12% Chance to Block Spell Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="SpellBlockChance",type="BASE",value=12}}}},nil} c["Minions have +13% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=13}}}},nil} +c["Minions have +13% to all Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=13}}}},nil} c["Minions have +15% to Critical Strike Multiplier"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritMultiplier",type="BASE",value=15}}}},nil} c["Minions have +15% to all Elemental Resistances"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ElementalResist",type="BASE",value=15}}}},nil} c["Minions have +17% to Chaos Resistance"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ChaosResist",type="BASE",value=17}}}},nil} @@ -9312,6 +9329,7 @@ c["Minions have 5% chance to Taunt on Hit with Attacks"]={{}," to Taunt with At c["Minions have 5% chance to Taunt on Hit with Attacks Your Minions spread Caustic Ground on Death, dealing 20% of their maximum Life as Chaos Damage per second"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=4,keywordFlags=0,name="Life",type="BASE",value=5}}}}," to Taunt with Attacks Your Minions spread Caustic Ground on Death, dealing 20% of their as Chaos Damage per second "} c["Minions have 5% chance to deal Double Damage while they are on Full Life"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={type="Condition",var="FullLife"},flags=0,keywordFlags=0,name="DoubleDamageChance",type="BASE",value=5}}}},nil} c["Minions have 5% increased maximum Life"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Life",type="INC",value=5}}}},nil} +c["Minions have 50% increased Critical Strike Chance"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="CritChance",type="INC",value=50}}}},nil} c["Minions have 50% increased Critical Strike Chance per Maximum Power Charge you have"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={[1]={actor="parent",type="Multiplier",var="PowerChargeMax"},flags=0,keywordFlags=0,name="CritChance",type="INC",value=50}}}},nil} c["Minions have 50% increased Movement Speed"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="MovementSpeed",type="INC",value=50}}}},nil} c["Minions have 6% chance to deal Double Damage"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="DoubleDamageChance",type="BASE",value=6}}}},nil} @@ -9332,6 +9350,7 @@ c["Minions have 8% increased Movement Speed"]={{[1]={flags=0,keywordFlags=0,name c["Minions have 8% increased maximum Life"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Life",type="INC",value=8}}}},nil} c["Minions have 80% increased Flask Effect Duration"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="FlaskDuration",type="INC",value=80}}}},nil} c["Minions have 80% increased maximum Life"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Life",type="INC",value=80}}}},nil} +c["Minions have 9% increased Attack and Cast Speed"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Speed",type="INC",value=9}}}},nil} c["Minions have 90% increased Movement Speed"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="MovementSpeed",type="INC",value=90}}}},nil} c["Minions have Unholy Might"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Condition:UnholyMight",type="FLAG",value=true}}},[2]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Condition:CanWither",type="FLAG",value=true}}}},nil} c["Minions have a 12% chance to Impale on Hit with Attacks"]={{[1]={flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="ImpaleChance",type="BASE",value=12}}}},nil} @@ -9747,6 +9766,7 @@ c["Recover 4% of Energy Shield on Kill"]={{[1]={[1]={percent=4,stat="EnergyShiel c["Recover 4% of Life on Kill"]={{[1]={[1]={percent=4,stat="Life",type="PercentStat"},flags=0,keywordFlags=0,name="LifeOnKill",type="BASE",value=1}},nil} c["Recover 4% of Life per Endurance Charge on use"]={nil,"Recover 4% of Life per Endurance Charge on use "} c["Recover 4% of Life per Endurance Charge on use Lose all Endurance Charges on use"]={nil,"Recover 4% of Life per Endurance Charge on use Lose all Endurance Charges on use "} +c["Recover 4% of Life when you Block"]={{[1]={[1]={percent=4,stat="Life",type="PercentStat"},flags=0,keywordFlags=0,name="LifeOnBlock",type="BASE",value=1}},nil} c["Recover 4% of Life when you use a Flask"]={nil,"Recover 4% of Life when you use a Flask "} c["Recover 40% of Mana and Energy Shield when you Focus"]={nil,"Recover 40% of Mana and Energy Shield when you Focus "} c["Recover 40% of Mana and Energy Shield when you Focus +35 to Strength"]={nil,"Recover 40% of Mana and Energy Shield when you Focus +35 to Strength "} @@ -10379,12 +10399,12 @@ c["Retaliation Skills have 10% reduced Enemy Stun Threshold"]={{[1]={[1]={skillT c["Retaliation Skills have 12% increased Cooldown Recovery Rate"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="CooldownRecovery",type="INC",value=12}},nil} c["Retaliation Skills have 15% increased Area of Effect"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=15}},nil} c["Retaliation Skills have 15% increased Cooldown Recovery Rate"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="CooldownRecovery",type="INC",value=15}},nil} -c["Retaliation Skills have 20% increased Speed"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="Speed",type="INC",value=20}},nil} +c["Retaliation Skills have 20% increased Speed"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="Speed",type="INC",value=20},[2]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=4,name="WarcrySpeed",type="INC",value=20}},nil} c["Retaliation Skills have 25% increased Stun Duration on Enemies"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="EnemyStunDuration",type="INC",value=25}},nil} c["Retaliation Skills have 30% increased Area of Effect"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="AreaOfEffect",type="INC",value=30}},nil} c["Retaliation Skills have 50% increased Stun Duration on Enemies"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="EnemyStunDuration",type="INC",value=50}},nil} -c["Retaliation Skills have 6% increased Speed"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="Speed",type="INC",value=6}},nil} -c["Retaliation Skills have 8% increased Speed"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="Speed",type="INC",value=8}},nil} +c["Retaliation Skills have 6% increased Speed"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="Speed",type="INC",value=6},[2]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=4,name="WarcrySpeed",type="INC",value=6}},nil} +c["Retaliation Skills have 8% increased Speed"]={{[1]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=0,name="Speed",type="INC",value=8},[2]={[1]={skillType=132,type="SkillType"},flags=0,keywordFlags=4,name="WarcrySpeed",type="INC",value=8}},nil} c["Returning Projectiles have 150% increased Speed"]={nil,"Returning Projectiles have 150% increased Speed "} c["Right Ring Slot: Your Shocking Skitterbot's Aura applies Socketed Hex Curse instead"]={{[1]={[1]={num=2,type="SlotNumber"},flags=0,keywordFlags=0,name="SkitterbotsCannotShock",type="FLAG",value=true}},nil} c["Right Ring slot: Cover Enemies in Frost for 5 seconds when you Freeze them"]={{[1]={[1]={num=2,type="SlotNumber"},[2]={actor="enemy",type="ActorCondition",var="Frozen"},flags=0,keywordFlags=0,name="CoveredInFrostEffect",type="BASE",value=20}},nil} @@ -10409,12 +10429,12 @@ c["Sacrifice 4% of your Life when you Use or Trigger a Spell Skill Sacrifice 10% c["Sacrifice 5% of Life to gain that much Energy Shield when you Cast a Spell"]={nil,"Sacrifice 5% of Life to gain that much Energy Shield when you Cast a Spell "} c["Sacrifice 5% of Life to gain that much Energy Shield when you Cast a Spell Sacrifice 25% of Life to gain that much Energy Shield when you Cast a Spell"]={nil,"Sacrifice 5% of Life to gain that much Energy Shield when you Cast a Spell Sacrifice 25% of Life to gain that much Energy Shield when you Cast a Spell "} c["Sap Enemies when you Block their Damage"]={nil,"Sap Enemies when you Block their Damage "} -c["Sap Enemies when you Block their Damage +69 to maximum Energy Shield"]={nil,"Sap Enemies when you Block their Damage +69 to maximum Energy Shield "} +c["Sap Enemies when you Block their Damage 67% increased Chance to Block"]={nil,"Sap Enemies when you Block their Damage 67% increased Chance to Block "} c["Scion: +25 to All Attributes"]={{[1]={[1]={type="Condition",var="ConnectedToScionStart"},flags=0,keywordFlags=0,name="Str",type="BASE",value=25},[2]={[1]={type="Condition",var="ConnectedToScionStart"},flags=0,keywordFlags=0,name="Dex",type="BASE",value=25},[3]={[1]={type="Condition",var="ConnectedToScionStart"},flags=0,keywordFlags=0,name="Int",type="BASE",value=25},[4]={[1]={type="Condition",var="ConnectedToScionStart"},flags=0,keywordFlags=0,name="All",type="BASE",value=25}},nil} c["Scion: 30% increased Damage"]={{[1]={[1]={type="Condition",var="ConnectedToScionStart"},flags=0,keywordFlags=0,name="Damage",type="INC",value=30}},nil} c["Scorch Enemies in Close Range when you Block"]={{[1]={flags=0,keywordFlags=0,name="EnemyScorchChance",type="BASE",value=100}},nil} c["Scorch Enemies when you Block their Damage"]={nil,"Scorch Enemies when you Block their Damage "} -c["Scorch Enemies when you Block their Damage +92 to Armour"]={nil,"Scorch Enemies when you Block their Damage +92 to Armour "} +c["Scorch Enemies when you Block their Damage 67% increased Chance to Block"]={nil,"Scorch Enemies when you Block their Damage 67% increased Chance to Block "} c["Secrets of Suffering"]={{[1]={flags=0,keywordFlags=0,name="Keystone",type="LIST",value="Secrets of Suffering"}},nil} c["Sentinels of Purity deal 100% increased Damage"]={{[1]={[1]={skillName="Herald of Purity",type="SkillName"},flags=0,keywordFlags=0,name="MinionModifier",type="LIST",value={mod={flags=0,keywordFlags=0,name="Damage",type="INC",value=100}}}},nil} c["Shadow: +0.5% to Critical Strike Chance"]={{[1]={[1]={type="Condition",var="ConnectedToShadowStart"},flags=0,keywordFlags=0,name="CritChance",type="BASE",value=0.5}},nil} @@ -11151,7 +11171,7 @@ c["Take 200 Physical Damage when you use a Movement Skill"]={{[1]={flags=0,keywo c["Take 200 Physical Damage when you use a Movement Skill You have no Armour or Maximum Energy Shield"]={{[1]={flags=0,keywordFlags=0,name="PhysicalDamageTaken",type="BASE",value=200}}," when you use a Movement Skill You have no Armour or Maximum Energy Shield "} c["Take 25% less Damage"]={{[1]={flags=0,keywordFlags=0,name="DamageTaken",type="MORE",value=-25}},nil} c["Take 250 Chaos Damage per Second during Effect"]={{[1]={[1]={type="Condition",var="UsingFlask"},flags=0,keywordFlags=0,name="ChaosDegen",type="BASE",value=250}},nil} -c["Take 250 Lightning Damage when Herald of Thunder Hits an Enemy"]={{[1]={[1]={includeTransfigured=true,skillName="Herald of Thunder",type="SkillName"},flags=0,keywordFlags=0,name="LightningDamageTaken",type="BASE",value=250}}," whenHits an Enemy "} +c["Take 250 Lightning Damage when Herald of Thunder Hits an Enemy"]={{[1]={flags=0,keywordFlags=0,name="StormSecretSelfDamage",type="LIST",value={baseDamage=250,damageType="lightning"}}},nil} c["Take 30 Chaos Damage per Second during Effect"]={{[1]={[1]={type="Condition",var="UsingFlask"},flags=0,keywordFlags=0,name="ChaosDegen",type="BASE",value=30}},nil} c["Take 300 Chaos Damage per Second during Effect"]={{[1]={[1]={type="Condition",var="UsingFlask"},flags=0,keywordFlags=0,name="ChaosDegen",type="BASE",value=300}},nil} c["Take 40% less Damage from Hits for 5 seconds"]={{[1]={[1]={type="Condition",var="HeartstopperHIT"},flags=0,keywordFlags=0,name="DamageTakenWhenHit",type="MORE",value=-40},[2]={[1]={type="Condition",var="HeartstopperAVERAGE"},flags=0,keywordFlags=0,name="DamageTakenWhenHit",type="MORE",value=-20}},nil} @@ -11227,7 +11247,7 @@ c["Transfiguration of Mind"]={{[1]={flags=0,keywordFlags=0,name="Transfiguration c["Transfiguration of Soul"]={{[1]={flags=0,keywordFlags=0,name="TransfigurationOfSoul",type="FLAG",value=true}},nil} c["Trap Damage Penetrates 4% Elemental Resistances"]={{[1]={flags=0,keywordFlags=4096,name="ElementalPenetration",type="BASE",value=4}},nil} c["Trap Skills have 25% increased Skill Effect Duration"]={nil,"Trap Skills have 25% increased Skill Effect Duration "} -c["Trap Skills have 25% increased Skill Effect Duration +24 to Armour"]={nil,"Trap Skills have 25% increased Skill Effect Duration +24 to Armour "} +c["Trap Skills have 25% increased Skill Effect Duration +8% chance to Suppress Spell Damage"]={nil,"Trap Skills have 25% increased Skill Effect Duration +8% chance to Suppress Spell Damage "} c["Traps and Mines deal 5 to 15 additional Physical Damage"]={{[1]={flags=0,keywordFlags=12288,name="PhysicalMin",type="BASE",value=5},[2]={flags=0,keywordFlags=12288,name="PhysicalMax",type="BASE",value=15}},nil} c["Traps and Mines have a 25% chance to Poison on Hit"]={{[1]={flags=0,keywordFlags=12288,name="PoisonChance",type="BASE",value=25}},nil} c["Traps cannot be Damaged"]={nil,"Traps cannot be Damaged "} @@ -11698,7 +11718,7 @@ c["You can apply an additional Curse"]={{[1]={flags=0,keywordFlags=0,name="Enemy c["You can apply an additional Curse while affected by Malevolence"]={{[1]={[1]={type="Condition",var="AffectedByMalevolence"},flags=0,keywordFlags=0,name="EnemyCurseLimit",type="BASE",value=1}},nil} c["You can apply an additional Curse while at maximum Power Charges"]={{[1]={[1]={stat="PowerCharges",thresholdStat="PowerChargesMax",type="StatThreshold"},flags=0,keywordFlags=0,name="EnemyCurseLimit",type="BASE",value=1}},nil} c["You can apply one fewer Curse"]={{[1]={flags=0,keywordFlags=0,name="EnemyCurseLimit",type="BASE",value=-1}},nil} -c["You can apply up to 50 Shocks to each Enemy"]={{[1]={flags=0,keywordFlags=0,name="ShockCanStack",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ShockStacksMax",type="BASE",value=50}},nil} +c["You can apply up to 50 Shocks to each Enemy"]={{[1]={flags=0,keywordFlags=0,name="ShockCanStack",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ShockStacksMax",type="OVERRIDE",value=50}},nil} c["You can be Touched by Tormented Spirits"]={nil,"You can be Touched by Tormented Spirits "} c["You can catch Exotic Fish"]={nil,"You can catch Exotic Fish "} c["You can have an Offering of each type"]={nil,"You can have an Offering of each type "} @@ -11708,7 +11728,7 @@ c["You can have an additional Tincture active"]={{[1]={flags=0,keywordFlags=0,na c["You can have two different Banners at the same time"]={{},nil} c["You can inflict Bleeding on an Enemy up to 8 times"]={{[1]={flags=0,keywordFlags=0,name="BleedStacksMax",type="OVERRIDE",value=8},[2]={flags=0,keywordFlags=0,name="Condition:HaveCrimsonDance",type="FLAG",value=true}},nil} c["You can inflict an additional Ignite on an Enemy"]={{[1]={flags=0,keywordFlags=0,name="IgniteCanStack",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="IgniteStacks",type="BASE",value=1}},nil} -c["You can inflict an additional Scorch on each Enemy"]={{[1]={flags=0,keywordFlags=0,name="ScorchCanStack",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ScorchStacksMax",type="BASE",value=2}},nil} +c["You can inflict an additional Scorch on each Enemy"]={{[1]={flags=0,keywordFlags=0,name="ScorchCanStack",type="FLAG",value=true},[2]={flags=0,keywordFlags=0,name="ScorchStacksMax",type="BASE",value=1}},nil} c["You can only Socket Corrupted Gems in this item"]={nil,"You can only Socket Corrupted Gems in this item "} c["You can only Socket Corrupted Gems in this item Acrobatics"]={nil,"You can only Socket Corrupted Gems in this item Acrobatics "} c["You can only deal Damage with this Weapon or Ignite"]={nil,"You can only deal Damage with this Weapon or Ignite "} diff --git a/src/Data/ModItem.lua b/src/Data/ModItem.lua index 7372e198d3..21eb51b096 100644 --- a/src/Data/ModItem.lua +++ b/src/Data/ModItem.lua @@ -271,47 +271,47 @@ return { ["ElementalDamagePercent3"] = { type = "Prefix", affix = "Druid's", "(17-24)% increased Elemental Damage", statOrderKey = "1835", statOrder = { 1835 }, level = 30, group = "ElementalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental" }, }, ["ElementalDamagePercent4"] = { type = "Prefix", affix = "Haruspex's", "(25-29)% increased Elemental Damage", statOrderKey = "1835", statOrder = { 1835 }, level = 60, group = "ElementalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental" }, }, ["ElementalDamagePercent5"] = { type = "Prefix", affix = "Harbinger's", "(30-34)% increased Elemental Damage", statOrderKey = "1835", statOrder = { 1835 }, level = 81, group = "ElementalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental" }, }, - ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating1"] = { type = "Prefix", affix = "Squire's", "(15-19)% increased Physical Damage", "+(16-20) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 1, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating2"] = { type = "Prefix", affix = "Journeyman's", "(20-24)% increased Physical Damage", "+(21-46) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 11, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating3"] = { type = "Prefix", affix = "Reaver's", "(25-34)% increased Physical Damage", "+(47-72) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 23, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating4"] = { type = "Prefix", affix = "Mercenary's", "(35-44)% increased Physical Damage", "+(73-97) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 35, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 400, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating5"] = { type = "Prefix", affix = "Champion's", "(45-54)% increased Physical Damage", "+(98-123) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 46, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 200, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating6"] = { type = "Prefix", affix = "Conqueror's", "(55-64)% increased Physical Damage", "+(124-149) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 60, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 100, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating7"] = { type = "Prefix", affix = "Emperor's", "(65-74)% increased Physical Damage", "+(150-174) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 73, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 50, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating8"] = { type = "Prefix", affix = "Dictator's", "(75-79)% increased Physical Damage", "+(175-200) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 83, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 25, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercent1"] = { type = "Prefix", affix = "Heavy", "(40-49)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 1, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercent2"] = { type = "Prefix", affix = "Serrated", "(50-64)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 11, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercent3"] = { type = "Prefix", affix = "Wicked", "(65-84)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 23, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercent4"] = { type = "Prefix", affix = "Vicious", "(85-109)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 35, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 400, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercent5"] = { type = "Prefix", affix = "Bloodthirsty", "(110-134)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 46, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 200, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercent6"] = { type = "Prefix", affix = "Cruel", "(135-154)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 60, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 100, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercent7"] = { type = "Prefix", affix = "Tyrannical", "(155-169)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 73, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 50, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalIncreasedPhysicalDamagePercent8"] = { type = "Prefix", affix = "Merciless", "(170-179)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 83, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 25, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating1"] = { type = "Prefix", affix = "Squire's", "(15-19)% increased Physical Damage", "+(16-20) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 1, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating2"] = { type = "Prefix", affix = "Journeyman's", "(20-24)% increased Physical Damage", "+(21-46) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 11, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating3"] = { type = "Prefix", affix = "Reaver's", "(25-34)% increased Physical Damage", "+(47-72) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 23, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating4"] = { type = "Prefix", affix = "Mercenary's", "(35-44)% increased Physical Damage", "+(73-97) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 35, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 400, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating5"] = { type = "Prefix", affix = "Champion's", "(45-54)% increased Physical Damage", "+(98-123) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 46, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating6"] = { type = "Prefix", affix = "Conqueror's", "(55-64)% increased Physical Damage", "+(124-149) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 60, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating7"] = { type = "Prefix", affix = "Emperor's", "(65-74)% increased Physical Damage", "+(150-174) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 73, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercentAndAccuracyRating8"] = { type = "Prefix", affix = "Dictator's", "(75-79)% increased Physical Damage", "+(175-200) to Accuracy Rating", statOrderKey = "1098,1878", statOrder = { 1098, 1878 }, level = 83, group = "LocalIncreasedPhysicalDamagePercentAndAccuracyRating", weightKey = { "weapon", "default", }, weightVal = { 25, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercent1"] = { type = "Prefix", affix = "Heavy", "(40-49)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 1, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercent2"] = { type = "Prefix", affix = "Serrated", "(50-64)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 11, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercent3"] = { type = "Prefix", affix = "Wicked", "(65-84)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 23, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercent4"] = { type = "Prefix", affix = "Vicious", "(85-109)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 35, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 400, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercent5"] = { type = "Prefix", affix = "Bloodthirsty", "(110-134)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 46, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercent6"] = { type = "Prefix", affix = "Cruel", "(135-154)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 60, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercent7"] = { type = "Prefix", affix = "Tyrannical", "(155-169)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 73, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalIncreasedPhysicalDamagePercent8"] = { type = "Prefix", affix = "Merciless", "(170-179)% increased Physical Damage", statOrderKey = "1098", statOrder = { 1098 }, level = 83, group = "LocalPhysicalDamagePercent", weightKey = { "weapon", "default", }, weightVal = { 25, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, ["LocalIncreasedPhysicalDamageEnhancedMod"] = { type = "Prefix", affix = "Tacati's", "(155-169)% increased Physical Damage", "Gain (9-10)% of Physical Damage as Extra Chaos Damage", statOrderKey = "1098,1792", statOrder = { 1098, 1792 }, level = 1, group = "LocalPhysicalDamagePercentAddedAsChaos", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical_damage", "chaos_damage", "damage", "physical", "chaos", "attack" }, }, ["IncreasedPhysicalDamagePercent1"] = { type = "Prefix", affix = "Heavy", "(8-12)% increased Global Physical Damage", statOrderKey = "1097", statOrder = { 1097 }, level = 4, group = "PhysicalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical_damage", "damage", "physical" }, }, ["IncreasedPhysicalDamagePercent2"] = { type = "Prefix", affix = "Serrated", "(13-17)% increased Global Physical Damage", statOrderKey = "1097", statOrder = { 1097 }, level = 15, group = "PhysicalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical_damage", "damage", "physical" }, }, ["IncreasedPhysicalDamagePercent3"] = { type = "Prefix", affix = "Wicked", "(18-22)% increased Global Physical Damage", statOrderKey = "1097", statOrder = { 1097 }, level = 30, group = "PhysicalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical_damage", "damage", "physical" }, }, ["IncreasedPhysicalDamagePercent4"] = { type = "Prefix", affix = "Cruel", "(23-28)% increased Global Physical Damage", statOrderKey = "1097", statOrder = { 1097 }, level = 60, group = "PhysicalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical_damage", "damage", "physical" }, }, ["IncreasedPhysicalDamagePercent5__"] = { type = "Prefix", affix = "Merciless", "(29-33)% increased Global Physical Damage", statOrderKey = "1097", statOrder = { 1097 }, level = 81, group = "PhysicalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical_damage", "damage", "physical" }, }, - ["LocalAddedPhysicalDamage1"] = { type = "Prefix", affix = "Glinting", "Adds 1 to (2-3) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 2, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamage2"] = { type = "Prefix", affix = "Burnished", "Adds (4-5) to (8-9) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 13, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamage3"] = { type = "Prefix", affix = "Polished", "Adds (6-9) to (13-15) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 21, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamage4"] = { type = "Prefix", affix = "Honed", "Adds (8-12) to (17-20) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 29, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamage5"] = { type = "Prefix", affix = "Gleaming", "Adds (11-14) to (21-25) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 36, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamage6"] = { type = "Prefix", affix = "Annealed", "Adds (13-18) to (27-31) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 46, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 800, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamage7"] = { type = "Prefix", affix = "Razor-sharp", "Adds (16-21) to (32-38) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 54, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 600, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamage8"] = { type = "Prefix", affix = "Tempered", "Adds (19-25) to (39-45) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 65, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 400, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamage9"] = { type = "Prefix", affix = "Flaring", "Adds (22-29) to (45-52) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 77, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 200, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage1"] = { type = "Prefix", affix = "Glinting", "Adds 1 to (2-3) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 2, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage2"] = { type = "Prefix", affix = "Burnished", "Adds (4-5) to (8-9) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 13, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage3"] = { type = "Prefix", affix = "Polished", "Adds (6-9) to (13-15) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 21, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage4"] = { type = "Prefix", affix = "Honed", "Adds (8-12) to (17-20) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 29, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage5"] = { type = "Prefix", affix = "Gleaming", "Adds (11-14) to (21-25) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 36, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage6"] = { type = "Prefix", affix = "Annealed", "Adds (13-18) to (27-31) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 46, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 800, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage7"] = { type = "Prefix", affix = "Razor-sharp", "Adds (16-21) to (32-38) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 54, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage8"] = { type = "Prefix", affix = "Tempered", "Adds (19-25) to (39-45) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 65, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 400, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamage9"] = { type = "Prefix", affix = "Flaring", "Adds (22-29) to (45-52) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 77, group = "LocalPhysicalDamage", weightKey = { "one_hand_weapon", "default", }, weightVal = { 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, ["LocalAddedPhysicalDamageEssenceNew7"] = { type = "Prefix", affix = "Essences", "Adds (20-26) to (40-47) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 82, group = "LocalPhysicalDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand1"] = { type = "Prefix", affix = "Glinting", "Adds 2 to (4-5) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 2, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand2"] = { type = "Prefix", affix = "Burnished", "Adds (6-8) to (12-15) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 13, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand3"] = { type = "Prefix", affix = "Polished", "Adds (10-13) to (21-25) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 21, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand4"] = { type = "Prefix", affix = "Honed", "Adds (13-17) to (28-32) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 29, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand5"] = { type = "Prefix", affix = "Gleaming", "Adds (16-22) to (35-40) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 36, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand6"] = { type = "Prefix", affix = "Annealed", "Adds (20-28) to (43-51) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 46, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 800, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand7"] = { type = "Prefix", affix = "Razor-sharp", "Adds (25-33) to (52-61) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 54, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 600, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand8"] = { type = "Prefix", affix = "Tempered", "Adds (30-40) to (63-73) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 65, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 400, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["LocalAddedPhysicalDamageTwoHand9"] = { type = "Prefix", affix = "Flaring", "Adds (34-47) to (72-84) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 77, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 200, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand1"] = { type = "Prefix", affix = "Glinting", "Adds 2 to (4-5) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 2, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand2"] = { type = "Prefix", affix = "Burnished", "Adds (6-8) to (12-15) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 13, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand3"] = { type = "Prefix", affix = "Polished", "Adds (10-13) to (21-25) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 21, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand4"] = { type = "Prefix", affix = "Honed", "Adds (13-17) to (28-32) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 29, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand5"] = { type = "Prefix", affix = "Gleaming", "Adds (16-22) to (35-40) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 36, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand6"] = { type = "Prefix", affix = "Annealed", "Adds (20-28) to (43-51) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 46, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 800, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand7"] = { type = "Prefix", affix = "Razor-sharp", "Adds (25-33) to (52-61) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 54, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand8"] = { type = "Prefix", affix = "Tempered", "Adds (30-40) to (63-73) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 65, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 400, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["LocalAddedPhysicalDamageTwoHand9"] = { type = "Prefix", affix = "Flaring", "Adds (34-47) to (72-84) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 77, group = "LocalPhysicalDamageTwoHanded", weightKey = { "two_hand_weapon", "default", }, weightVal = { 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, ["LocalAddedPhysicalDamageTwoHandEssenceNew7__"] = { type = "Prefix", affix = "Essences", "Adds (31-42) to (65-75) Physical Damage", statOrderKey = "1140", statOrder = { 1140 }, level = 82, group = "LocalPhysicalDamageTwoHanded", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, ["LocalIncreasedEnergyShieldPercent1"] = { type = "Prefix", affix = "Protective", "(11-28)% increased Energy Shield", statOrderKey = "1420", statOrder = { 1420 }, level = 3, group = "LocalEnergyShieldPercent", weightKey = { "int_armour", "default", }, weightVal = { 1000, 0 }, modTags = { "defences", "energy_shield" }, }, ["LocalIncreasedEnergyShieldPercent2"] = { type = "Prefix", affix = "Strong-Willed", "(27-42)% increased Energy Shield", statOrderKey = "1420", statOrder = { 1420 }, level = 18, group = "LocalEnergyShieldPercent", weightKey = { "int_armour", "default", }, weightVal = { 1000, 0 }, modTags = { "defences", "energy_shield" }, }, @@ -412,106 +412,106 @@ return { ["LocalIncreasedArmourEvasionEnergyShieldStunRecovery4"] = { type = "Prefix", affix = "Wasp's", "(27-32)% increased Armour, Evasion and Energy Shield", "(12-13)% increased Stun and Block Recovery", statOrderKey = "1416,1759", statOrder = { 1416, 1759 }, level = 44, group = "LocalArmourAndEvasionAndEnergyShieldAndStunRecovery", weightKey = { "str_dex_int_armour", "default", }, weightVal = { 1000, 0 }, modTags = { "defences", "armour", "evasion", "energy_shield" }, }, ["LocalIncreasedArmourEvasionEnergyShieldStunRecovery5"] = { type = "Prefix", affix = "Dragonfly's", "(33-38)% increased Armour, Evasion and Energy Shield", "(14-15)% increased Stun and Block Recovery", statOrderKey = "1416,1759", statOrder = { 1416, 1759 }, level = 60, group = "LocalArmourAndEvasionAndEnergyShieldAndStunRecovery", weightKey = { "str_dex_int_armour", "default", }, weightVal = { 1000, 0 }, modTags = { "defences", "armour", "evasion", "energy_shield" }, }, ["LocalIncreasedArmourEvasionEnergyShieldStunRecovery6"] = { type = "Prefix", affix = "Hummingbird's", "(39-42)% increased Armour, Evasion and Energy Shield", "(16-17)% increased Stun and Block Recovery", statOrderKey = "1416,1759", statOrder = { 1416, 1759 }, level = 78, group = "LocalArmourAndEvasionAndEnergyShieldAndStunRecovery", weightKey = { "str_dex_int_armour", "default", }, weightVal = { 1000, 0 }, modTags = { "defences", "armour", "evasion", "energy_shield" }, }, - ["LocalAddedFireDamage1"] = { type = "Prefix", affix = "Heated", "Adds (1-2) to (3-4) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 1, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage2"] = { type = "Prefix", affix = "Smouldering", "Adds (8-10) to (15-18) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 11, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage3"] = { type = "Prefix", affix = "Smoking", "Adds (12-17) to (25-29) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 18, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage4"] = { type = "Prefix", affix = "Burning", "Adds (17-24) to (35-41) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 26, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage5"] = { type = "Prefix", affix = "Flaming", "Adds (24-33) to (49-57) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 33, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage6"] = { type = "Prefix", affix = "Scorching", "Adds (34-46) to (68-80) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 42, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage7"] = { type = "Prefix", affix = "Incinerating", "Adds (46-62) to (93-107) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 51, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage8"] = { type = "Prefix", affix = "Blasting", "Adds (59-81) to (120-140) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 62, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 1600, 960, 960, 640, 400, 400, 960, 960, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage9"] = { type = "Prefix", affix = "Cremating", "Adds (74-101) to (150-175) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 74, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 700, 420, 420, 280, 175, 175, 420, 420, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamage10_"] = { type = "Prefix", affix = "Carbonising", "Adds (89-121) to (180-210) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 82, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 180, 108, 108, 72, 45, 45, 108, 108, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage1"] = { type = "Prefix", affix = "Heated", "Adds (1-2) to (3-4) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 1, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage2"] = { type = "Prefix", affix = "Smouldering", "Adds (8-10) to (15-18) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 11, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage3"] = { type = "Prefix", affix = "Smoking", "Adds (12-17) to (25-29) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 18, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage4"] = { type = "Prefix", affix = "Burning", "Adds (17-24) to (35-41) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 26, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage5"] = { type = "Prefix", affix = "Flaming", "Adds (24-33) to (49-57) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 33, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage6"] = { type = "Prefix", affix = "Scorching", "Adds (34-46) to (68-80) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 42, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage7"] = { type = "Prefix", affix = "Incinerating", "Adds (46-62) to (93-107) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 51, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage8"] = { type = "Prefix", affix = "Blasting", "Adds (59-81) to (120-140) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 62, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 1600, 960, 960, 640, 400, 400, 960, 960, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage9"] = { type = "Prefix", affix = "Cremating", "Adds (74-101) to (150-175) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 74, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 700, 420, 420, 280, 175, 175, 420, 420, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamage10_"] = { type = "Prefix", affix = "Carbonising", "Adds (89-121) to (180-210) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 82, group = "LocalFireDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 180, 108, 108, 72, 45, 45, 108, 108, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, ["LocalAddedFireDamageEssence7"] = { type = "Prefix", affix = "Essences", "Adds (80-109) to (162-189) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 82, group = "LocalFireDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, ["LocalAddedFireDamageEnhancedMod_"] = { type = "Prefix", affix = "Topotante's", "Adds (59-79) to (118-138) Fire Damage", "Attacks with this Weapon Penetrate (13-15)% Fire Resistance", statOrderKey = "1226,3595", statOrder = { 1226, 3595 }, level = 1, group = "LocalFireDamageAndPen", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand1"] = { type = "Prefix", affix = "Heated", "Adds (3-5) to (6-7) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 1, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand2"] = { type = "Prefix", affix = "Smouldering", "Adds (14-20) to (29-33) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 11, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand3"] = { type = "Prefix", affix = "Smoking", "Adds (23-31) to (47-54) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 18, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand4"] = { type = "Prefix", affix = "Burning", "Adds (32-44) to (65-76) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 26, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand5"] = { type = "Prefix", affix = "Flaming", "Adds (45-61) to (91-106) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 33, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand6"] = { type = "Prefix", affix = "Scorching", "Adds (63-85) to (128-148) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 42, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand7"] = { type = "Prefix", affix = "Incinerating", "Adds (85-115) to (172-200) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 51, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand8_"] = { type = "Prefix", affix = "Blasting", "Adds (110-150) to (223-260) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 62, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1120, 960, 960, 400, 480, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand9"] = { type = "Prefix", affix = "Cremating", "Adds (137-188) to (279-325) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 74, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 490, 420, 420, 175, 210, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageTwoHand10"] = { type = "Prefix", affix = "Carbonising", "Adds (165-225) to (335-390) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 82, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 126, 108, 108, 45, 54, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged1"] = { type = "Prefix", affix = "Heated", "Adds (3-5) to (6-7) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 1, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged2"] = { type = "Prefix", affix = "Smouldering", "Adds (14-20) to (29-33) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 11, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged3"] = { type = "Prefix", affix = "Smoking", "Adds (23-31) to (47-54) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 18, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged4"] = { type = "Prefix", affix = "Burning", "Adds (32-44) to (65-76) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 26, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged5"] = { type = "Prefix", affix = "Flaming", "Adds (45-61) to (91-106) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 33, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged6"] = { type = "Prefix", affix = "Scorching", "Adds (63-85) to (128-148) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 42, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged7"] = { type = "Prefix", affix = "Incinerating", "Adds (85-115) to (172-200) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 51, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged8"] = { type = "Prefix", affix = "Blasting", "Adds (110-150) to (223-260) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 62, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged9_"] = { type = "Prefix", affix = "Cremating", "Adds (137-188) to (279-325) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 74, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedFireDamageRanged10"] = { type = "Prefix", affix = "Carbonising", "Adds (165-225) to (335-390) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 82, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand1"] = { type = "Prefix", affix = "Heated", "Adds (3-5) to (6-7) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 1, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand2"] = { type = "Prefix", affix = "Smouldering", "Adds (14-20) to (29-33) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 11, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand3"] = { type = "Prefix", affix = "Smoking", "Adds (23-31) to (47-54) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 18, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand4"] = { type = "Prefix", affix = "Burning", "Adds (32-44) to (65-76) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 26, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand5"] = { type = "Prefix", affix = "Flaming", "Adds (45-61) to (91-106) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 33, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand6"] = { type = "Prefix", affix = "Scorching", "Adds (63-85) to (128-148) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 42, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand7"] = { type = "Prefix", affix = "Incinerating", "Adds (85-115) to (172-200) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 51, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand8_"] = { type = "Prefix", affix = "Blasting", "Adds (110-150) to (223-260) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 62, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1120, 960, 960, 400, 480, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand9"] = { type = "Prefix", affix = "Cremating", "Adds (137-188) to (279-325) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 74, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 490, 420, 420, 175, 210, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageTwoHand10"] = { type = "Prefix", affix = "Carbonising", "Adds (165-225) to (335-390) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 82, group = "LocalFireDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 126, 108, 108, 45, 54, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged1"] = { type = "Prefix", affix = "Heated", "Adds (3-5) to (6-7) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 1, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged2"] = { type = "Prefix", affix = "Smouldering", "Adds (14-20) to (29-33) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 11, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged3"] = { type = "Prefix", affix = "Smoking", "Adds (23-31) to (47-54) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 18, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged4"] = { type = "Prefix", affix = "Burning", "Adds (32-44) to (65-76) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 26, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged5"] = { type = "Prefix", affix = "Flaming", "Adds (45-61) to (91-106) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 33, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged6"] = { type = "Prefix", affix = "Scorching", "Adds (63-85) to (128-148) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 42, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged7"] = { type = "Prefix", affix = "Incinerating", "Adds (85-115) to (172-200) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 51, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged8"] = { type = "Prefix", affix = "Blasting", "Adds (110-150) to (223-260) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 62, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged9_"] = { type = "Prefix", affix = "Cremating", "Adds (137-188) to (279-325) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 74, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, + ["LocalAddedFireDamageRanged10"] = { type = "Prefix", affix = "Carbonising", "Adds (165-225) to (335-390) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 82, group = "LocalFireDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, ["LocalAddedFireDamageTwoHandEssence7"] = { type = "Prefix", affix = "Essences", "Adds (149-203) to (302-351) Fire Damage", statOrderKey = "1226", statOrder = { 1226 }, level = 82, group = "LocalFireDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, ["LocalAddedFireDamageEnhancedTwoHandMod"] = { type = "Prefix", affix = "Topotante's", "Adds (109-147) to (220-256) Fire Damage", "Attacks with this Weapon Penetrate (13-15)% Fire Resistance", statOrderKey = "1226,3595", statOrder = { 1226, 3595 }, level = 1, group = "LocalFireDamageTwoHandAndPen", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "attack" }, }, - ["LocalAddedColdDamage1"] = { type = "Prefix", affix = "Frosted", "Adds (1-2) to (3-4) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 2, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage2"] = { type = "Prefix", affix = "Chilled", "Adds (7-9) to (14-16) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 12, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage3"] = { type = "Prefix", affix = "Icy", "Adds (11-15) to (23-26) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 19, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage4"] = { type = "Prefix", affix = "Frigid", "Adds (16-21) to (31-37) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 27, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage5"] = { type = "Prefix", affix = "Freezing", "Adds (22-30) to (44-51) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 34, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage6"] = { type = "Prefix", affix = "Frozen", "Adds (31-42) to (62-71) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 43, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage7"] = { type = "Prefix", affix = "Glaciated", "Adds (41-57) to (83-97) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 52, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage8"] = { type = "Prefix", affix = "Polar", "Adds (54-74) to (108-126) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 63, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 1600, 960, 960, 640, 400, 400, 960, 960, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage9"] = { type = "Prefix", affix = "Entombing", "Adds (68-92) to (136-157) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 75, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 700, 420, 420, 280, 175, 175, 420, 420, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamage10__"] = { type = "Prefix", affix = "Crystalising", "Adds (81-111) to (163-189) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 82, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 180, 108, 108, 72, 45, 45, 108, 108, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage1"] = { type = "Prefix", affix = "Frosted", "Adds (1-2) to (3-4) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 2, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage2"] = { type = "Prefix", affix = "Chilled", "Adds (7-9) to (14-16) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 12, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage3"] = { type = "Prefix", affix = "Icy", "Adds (11-15) to (23-26) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 19, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage4"] = { type = "Prefix", affix = "Frigid", "Adds (16-21) to (31-37) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 27, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage5"] = { type = "Prefix", affix = "Freezing", "Adds (22-30) to (44-51) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 34, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage6"] = { type = "Prefix", affix = "Frozen", "Adds (31-42) to (62-71) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 43, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage7"] = { type = "Prefix", affix = "Glaciated", "Adds (41-57) to (83-97) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 52, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage8"] = { type = "Prefix", affix = "Polar", "Adds (54-74) to (108-126) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 63, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 1600, 960, 960, 640, 400, 400, 960, 960, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage9"] = { type = "Prefix", affix = "Entombing", "Adds (68-92) to (136-157) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 75, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 700, 420, 420, 280, 175, 175, 420, 420, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamage10__"] = { type = "Prefix", affix = "Crystalising", "Adds (81-111) to (163-189) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 82, group = "LocalColdDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 180, 108, 108, 72, 45, 45, 108, 108, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, ["LocalAddedColdDamageEssence7"] = { type = "Prefix", affix = "Essences", "Adds (73-100) to (147-170) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 82, group = "LocalColdDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, ["LocalAddedColdDamageEnhancedMod"] = { type = "Prefix", affix = "Topotante's", "Adds (53-72) to (107-124) Cold Damage", "Attacks with this Weapon Penetrate (13-15)% Cold Resistance", statOrderKey = "1235,3596", statOrder = { 1235, 3596 }, level = 1, group = "LocalColdDamageAndPen", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand1"] = { type = "Prefix", affix = "Frosted", "Adds (2-3) to (6-7) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 2, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand2"] = { type = "Prefix", affix = "Chilled", "Adds (12-17) to (26-30) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 12, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand3"] = { type = "Prefix", affix = "Icy", "Adds (21-28) to (42-48) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 19, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand4"] = { type = "Prefix", affix = "Frigid", "Adds (29-40) to (58-68) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 27, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand5"] = { type = "Prefix", affix = "Freezing", "Adds (41-55) to (81-95) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 34, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand6"] = { type = "Prefix", affix = "Frozen", "Adds (57-77) to (114-132) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 43, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand7"] = { type = "Prefix", affix = "Glaciated", "Adds (77-104) to (154-178) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 52, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand8"] = { type = "Prefix", affix = "Polar", "Adds (99-136) to (200-232) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 63, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1120, 960, 960, 400, 480, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand9"] = { type = "Prefix", affix = "Entombing", "Adds (124-170) to (250-290) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 75, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 490, 420, 420, 175, 210, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageTwoHand10"] = { type = "Prefix", affix = "Crystalising", "Adds (149-204) to (300-348) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 82, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 126, 108, 108, 45, 54, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged1"] = { type = "Prefix", affix = "Frosted", "Adds (2-3) to (6-7) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 2, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged2"] = { type = "Prefix", affix = "Chilled", "Adds (12-17) to (26-30) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 12, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged3"] = { type = "Prefix", affix = "Icy", "Adds (21-28) to (42-48) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 19, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged4"] = { type = "Prefix", affix = "Frigid", "Adds (29-40) to (58-68) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 27, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged5"] = { type = "Prefix", affix = "Freezing", "Adds (41-55) to (81-95) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 34, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged6"] = { type = "Prefix", affix = "Frozen", "Adds (57-77) to (114-132) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 43, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged7"] = { type = "Prefix", affix = "Glaciated", "Adds (77-104) to (154-178) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 52, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged8"] = { type = "Prefix", affix = "Polar", "Adds (99-136) to (200-232) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 63, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged9"] = { type = "Prefix", affix = "Entombing", "Adds (124-170) to (250-290) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 75, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedColdDamageRanged10"] = { type = "Prefix", affix = "Crystalising", "Adds (149-204) to (300-348) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 82, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand1"] = { type = "Prefix", affix = "Frosted", "Adds (2-3) to (6-7) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 2, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand2"] = { type = "Prefix", affix = "Chilled", "Adds (12-17) to (26-30) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 12, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand3"] = { type = "Prefix", affix = "Icy", "Adds (21-28) to (42-48) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 19, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand4"] = { type = "Prefix", affix = "Frigid", "Adds (29-40) to (58-68) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 27, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand5"] = { type = "Prefix", affix = "Freezing", "Adds (41-55) to (81-95) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 34, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand6"] = { type = "Prefix", affix = "Frozen", "Adds (57-77) to (114-132) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 43, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand7"] = { type = "Prefix", affix = "Glaciated", "Adds (77-104) to (154-178) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 52, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand8"] = { type = "Prefix", affix = "Polar", "Adds (99-136) to (200-232) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 63, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1120, 960, 960, 400, 480, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand9"] = { type = "Prefix", affix = "Entombing", "Adds (124-170) to (250-290) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 75, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 490, 420, 420, 175, 210, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageTwoHand10"] = { type = "Prefix", affix = "Crystalising", "Adds (149-204) to (300-348) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 82, group = "LocalColdDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 126, 108, 108, 45, 54, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged1"] = { type = "Prefix", affix = "Frosted", "Adds (2-3) to (6-7) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 2, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged2"] = { type = "Prefix", affix = "Chilled", "Adds (12-17) to (26-30) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 12, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged3"] = { type = "Prefix", affix = "Icy", "Adds (21-28) to (42-48) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 19, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged4"] = { type = "Prefix", affix = "Frigid", "Adds (29-40) to (58-68) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 27, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged5"] = { type = "Prefix", affix = "Freezing", "Adds (41-55) to (81-95) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 34, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged6"] = { type = "Prefix", affix = "Frozen", "Adds (57-77) to (114-132) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 43, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged7"] = { type = "Prefix", affix = "Glaciated", "Adds (77-104) to (154-178) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 52, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged8"] = { type = "Prefix", affix = "Polar", "Adds (99-136) to (200-232) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 63, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged9"] = { type = "Prefix", affix = "Entombing", "Adds (124-170) to (250-290) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 75, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, + ["LocalAddedColdDamageRanged10"] = { type = "Prefix", affix = "Crystalising", "Adds (149-204) to (300-348) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 82, group = "LocalColdDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, ["LocalAddedColdDamageTwoHandEssence7"] = { type = "Prefix", affix = "Essences", "Adds (134-184) to (270-313) Cold Damage", statOrderKey = "1235", statOrder = { 1235 }, level = 82, group = "LocalColdDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, ["LocalAddedColdDamageEnhancedTwoHandMod"] = { type = "Prefix", affix = "Topotante's", "Adds (100-132) to (197-230) Cold Damage", "Attacks with this Weapon Penetrate (13-15)% Cold Resistance", statOrderKey = "1235,3596", statOrder = { 1235, 3596 }, level = 1, group = "LocalColdDamageTwoHandAndPen", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "attack" }, }, - ["LocalAddedLightningDamage1"] = { type = "Prefix", affix = "Humming", "Adds 1 to (5-6) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 3, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage2"] = { type = "Prefix", affix = "Buzzing", "Adds 2 to (25-29) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 13, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage3"] = { type = "Prefix", affix = "Snapping", "Adds 2 to (41-48) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 19, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage4"] = { type = "Prefix", affix = "Crackling", "Adds 3 to (57-67) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 31, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage5"] = { type = "Prefix", affix = "Sparking", "Adds (4-5) to (80-94) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 34, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage6"] = { type = "Prefix", affix = "Arcing", "Adds (5-8) to (112-131) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 42, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage7"] = { type = "Prefix", affix = "Shocking", "Adds (8-10) to (152-176) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 51, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage8"] = { type = "Prefix", affix = "Discharging", "Adds (10-14) to (197-229) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 63, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 1600, 960, 960, 640, 400, 400, 960, 960, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage9"] = { type = "Prefix", affix = "Electrocuting", "Adds (13-17) to (247-286) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 74, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 700, 420, 420, 280, 175, 175, 420, 420, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamage10"] = { type = "Prefix", affix = "Vapourising", "Adds (15-21) to (296-344) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 82, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 180, 108, 108, 72, 45, 45, 108, 108, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage1"] = { type = "Prefix", affix = "Humming", "Adds 1 to (5-6) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 3, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage2"] = { type = "Prefix", affix = "Buzzing", "Adds 2 to (25-29) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 13, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage3"] = { type = "Prefix", affix = "Snapping", "Adds 2 to (41-48) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 19, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage4"] = { type = "Prefix", affix = "Crackling", "Adds 3 to (57-67) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 31, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage5"] = { type = "Prefix", affix = "Sparking", "Adds (4-5) to (80-94) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 34, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage6"] = { type = "Prefix", affix = "Arcing", "Adds (5-8) to (112-131) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 42, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage7"] = { type = "Prefix", affix = "Shocking", "Adds (8-10) to (152-176) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 51, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 2000, 1200, 1200, 800, 500, 500, 1200, 1200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage8"] = { type = "Prefix", affix = "Discharging", "Adds (10-14) to (197-229) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 63, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 1600, 960, 960, 640, 400, 400, 960, 960, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage9"] = { type = "Prefix", affix = "Electrocuting", "Adds (13-17) to (247-286) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 74, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 700, 420, 420, 280, 175, 175, 420, 420, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamage10"] = { type = "Prefix", affix = "Vapourising", "Adds (15-21) to (296-344) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 82, group = "LocalLightningDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 180, 108, 108, 72, 45, 45, 108, 108, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, ["LocalAddedLightningDamageEssence7_"] = { type = "Prefix", affix = "Essences", "Adds (13-19) to (266-310) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 82, group = "LocalLightningDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, ["LocalAddedLightningDamageEnhancedMod"] = { type = "Prefix", affix = "Topotante's", "Adds (7-17) to (198-224) Lightning Damage", "Attacks with this Weapon Penetrate (13-15)% Lightning Resistance", statOrderKey = "1246,3597", statOrder = { 1246, 3597 }, level = 1, group = "LocalLightningDamageAndPen", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand1_"] = { type = "Prefix", affix = "Humming", "Adds 2 to (10-11) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 3, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand2"] = { type = "Prefix", affix = "Buzzing", "Adds 3 to (46-53) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 13, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand3"] = { type = "Prefix", affix = "Snapping", "Adds (4-5) to (76-88) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 19, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand4"] = { type = "Prefix", affix = "Crackling", "Adds (5-8) to (106-123) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 31, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand5"] = { type = "Prefix", affix = "Sparking", "Adds (8-10) to (148-173) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 34, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand6"] = { type = "Prefix", affix = "Arcing", "Adds (11-14) to (208-242) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 42, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand7"] = { type = "Prefix", affix = "Shocking", "Adds (14-20) to (281-327) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 51, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand8"] = { type = "Prefix", affix = "Discharging", "Adds (19-25) to (366-425) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 63, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1120, 960, 960, 400, 480, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand9"] = { type = "Prefix", affix = "Electrocuting", "Adds (23-32) to (458-531) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 74, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 490, 420, 420, 175, 210, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageTwoHand10"] = { type = "Prefix", affix = "Vapourising", "Adds (28-38) to (549-638) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 82, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 126, 108, 108, 45, 54, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged1"] = { type = "Prefix", affix = "Humming", "Adds 2 to (10-11) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 3, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged2"] = { type = "Prefix", affix = "Buzzing", "Adds 3 to (46-53) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 13, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged3___"] = { type = "Prefix", affix = "Snapping", "Adds (4-5) to (76-88) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 19, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged4"] = { type = "Prefix", affix = "Crackling", "Adds (5-8) to (106-123) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 31, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged5"] = { type = "Prefix", affix = "Sparking", "Adds (8-10) to (148-173) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 34, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged6_"] = { type = "Prefix", affix = "Arcing", "Adds (11-14) to (208-242) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 42, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged7"] = { type = "Prefix", affix = "Shocking", "Adds (14-20) to (281-327) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 51, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged8"] = { type = "Prefix", affix = "Discharging", "Adds (19-25) to (366-425) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 63, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged9"] = { type = "Prefix", affix = "Electrocuting", "Adds (23-32) to (458-531) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 74, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, - ["LocalAddedLightningDamageRanged10_"] = { type = "Prefix", affix = "Vapourising", "Adds (28-38) to (549-638) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 82, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand1_"] = { type = "Prefix", affix = "Humming", "Adds 2 to (10-11) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 3, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand2"] = { type = "Prefix", affix = "Buzzing", "Adds 3 to (46-53) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 13, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand3"] = { type = "Prefix", affix = "Snapping", "Adds (4-5) to (76-88) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 19, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand4"] = { type = "Prefix", affix = "Crackling", "Adds (5-8) to (106-123) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 31, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand5"] = { type = "Prefix", affix = "Sparking", "Adds (8-10) to (148-173) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 34, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand6"] = { type = "Prefix", affix = "Arcing", "Adds (11-14) to (208-242) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 42, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand7"] = { type = "Prefix", affix = "Shocking", "Adds (14-20) to (281-327) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 51, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1400, 1200, 1200, 500, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand8"] = { type = "Prefix", affix = "Discharging", "Adds (19-25) to (366-425) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 63, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 1120, 960, 960, 400, 480, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand9"] = { type = "Prefix", affix = "Electrocuting", "Adds (23-32) to (458-531) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 74, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 490, 420, 420, 175, 210, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageTwoHand10"] = { type = "Prefix", affix = "Vapourising", "Adds (28-38) to (549-638) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 82, group = "LocalLightningDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 126, 108, 108, 45, 54, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged1"] = { type = "Prefix", affix = "Humming", "Adds 2 to (10-11) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 3, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged2"] = { type = "Prefix", affix = "Buzzing", "Adds 3 to (46-53) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 13, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged3___"] = { type = "Prefix", affix = "Snapping", "Adds (4-5) to (76-88) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 19, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged4"] = { type = "Prefix", affix = "Crackling", "Adds (5-8) to (106-123) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 31, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged5"] = { type = "Prefix", affix = "Sparking", "Adds (8-10) to (148-173) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 34, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged6_"] = { type = "Prefix", affix = "Arcing", "Adds (11-14) to (208-242) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 42, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged7"] = { type = "Prefix", affix = "Shocking", "Adds (14-20) to (281-327) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 51, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged8"] = { type = "Prefix", affix = "Discharging", "Adds (19-25) to (366-425) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 63, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged9"] = { type = "Prefix", affix = "Electrocuting", "Adds (23-32) to (458-531) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 74, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, + ["LocalAddedLightningDamageRanged10_"] = { type = "Prefix", affix = "Vapourising", "Adds (28-38) to (549-638) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 82, group = "LocalLightningDamageRanged", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, ["LocalAddedLightningDamageTwoHandEssence7"] = { type = "Prefix", affix = "Essences", "Adds (25-34) to (494-575) Lightning Damage", statOrderKey = "1246", statOrder = { 1246 }, level = 82, group = "LocalLightningDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, ["LocalAddedLightningDamageEnhancedTwoHandMod"] = { type = "Prefix", affix = "Topotante's", "Adds (12-31) to (367-415) Lightning Damage", "Attacks with this Weapon Penetrate (13-15)% Lightning Resistance", statOrderKey = "1246,3597", statOrder = { 1246, 3597 }, level = 1, group = "LocalLightningDamageTwoHandAndPen", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "attack" }, }, ["IncreasedPhysicalDamageReductionRatingPercent1"] = { type = "Prefix", affix = "Reinforced", "(4-8)% increased Armour", statOrderKey = "1402", statOrder = { 1402 }, level = 2, group = "GlobalPhysicalDamageReductionRatingPercent", weightKey = { "amulet", "default", }, weightVal = { 1000, 0 }, modTags = { "defences", "armour" }, }, @@ -676,44 +676,44 @@ return { ["SpellDamage3"] = { type = "Prefix", affix = "Sorcerer's", "(13-17)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 38, group = "SpellDamage", weightKey = { "amulet", "default", }, weightVal = { 1000, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, ["SpellDamage4"] = { type = "Prefix", affix = "Thaumaturgist's", "(18-22)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 56, group = "SpellDamage", weightKey = { "amulet", "default", }, weightVal = { 1000, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, ["SpellDamage5"] = { type = "Prefix", affix = "Wizard's", "(23-26)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 76, group = "SpellDamage", weightKey = { "amulet", "default", }, weightVal = { 1000, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeapon1"] = { type = "Prefix", affix = "Apprentice's", "(10-19)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 2, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1500, 1500, 1500, 1500, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeapon2"] = { type = "Prefix", affix = "Adept's", "(20-29)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 11, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1500, 1500, 1500, 1500, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeapon3"] = { type = "Prefix", affix = "Scholar's", "(30-39)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 23, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1500, 1500, 1500, 1500, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeapon4"] = { type = "Prefix", affix = "Professor's", "(40-54)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 35, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 600, 600, 600, 600, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeapon5"] = { type = "Prefix", affix = "Occultist's", "(55-69)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 46, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 300, 300, 300, 300, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeapon6"] = { type = "Prefix", affix = "Incanter's", "(70-84)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 58, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 150, 150, 150, 150, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeapon7"] = { type = "Prefix", affix = "Glyphic", "(85-99)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 64, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 80, 80, 80, 80, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeapon8_"] = { type = "Prefix", affix = "Runic", "(100-109)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 84, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 40, 40, 40, 40, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeaponEssence5_"] = { type = "Prefix", affix = "Essences", "(50-66)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 58, group = "WeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeaponEssence6"] = { type = "Prefix", affix = "Essences", "(67-82)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 74, group = "WeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnWeaponEssence7"] = { type = "Prefix", affix = "Essences", "(83-94)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 82, group = "WeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeapon1"] = { type = "Prefix", affix = "Apprentice's", "(10-19)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 2, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1500, 1500, 1500, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeapon2"] = { type = "Prefix", affix = "Adept's", "(20-29)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 11, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1500, 1500, 1500, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeapon3"] = { type = "Prefix", affix = "Scholar's", "(30-39)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 23, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1500, 1500, 1500, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeapon4"] = { type = "Prefix", affix = "Professor's", "(40-54)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 35, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 600, 600, 600, 600, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeapon5"] = { type = "Prefix", affix = "Occultist's", "(55-69)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 46, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 300, 300, 300, 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeapon6"] = { type = "Prefix", affix = "Incanter's", "(70-84)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 58, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 150, 150, 150, 150, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeapon7"] = { type = "Prefix", affix = "Glyphic", "(85-99)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 64, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 80, 80, 80, 80, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeapon8_"] = { type = "Prefix", affix = "Runic", "(100-109)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 84, group = "WeaponSpellDamage", weightKey = { "attack_dagger", "focus", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 40, 40, 40, 40, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeaponEssence5_"] = { type = "Prefix", affix = "Essences", "(50-66)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 58, group = "WeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeaponEssence6"] = { type = "Prefix", affix = "Essences", "(67-82)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 74, group = "WeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnWeaponEssence7"] = { type = "Prefix", affix = "Essences", "(83-94)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 82, group = "WeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, ["SpellDamageOnWeaponEnhancedMod"] = { type = "Prefix", affix = "Tacati's", "(70-74)% increased Spell Damage", "Gain 5% of Non-Chaos Damage as extra Chaos Damage", statOrderKey = "1090,8785", statOrder = { 1090, 8785 }, level = 1, group = "WeaponSpellDamageAddedAsChaos", weightKey = { "default", }, weightVal = { 0 }, modTags = { "caster_damage", "chaos_damage", "damage", "chaos", "caster" }, }, - ["SpellDamageOnTwoHandWeapon1"] = { type = "Prefix", affix = "Apprentice's", "(15-29)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 2, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeapon2"] = { type = "Prefix", affix = "Adept's", "(30-44)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 11, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeapon3"] = { type = "Prefix", affix = "Scholar's", "(45-59)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 23, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeapon4"] = { type = "Prefix", affix = "Professor's", "(60-84)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 35, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 600, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeapon5"] = { type = "Prefix", affix = "Occultist's", "(85-104)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 46, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 300, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeapon6"] = { type = "Prefix", affix = "Incanter's", "(105-124)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 58, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 150, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeapon7"] = { type = "Prefix", affix = "Glyphic", "(125-149)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 79, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 80, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeapon8"] = { type = "Prefix", affix = "Runic", "(150-164)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 84, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 40, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeaponEssence5"] = { type = "Prefix", affix = "Essences", "(85-106)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 58, group = "TwoHandWeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeaponEssence6"] = { type = "Prefix", affix = "Essences", "(107-122)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 74, group = "TwoHandWeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["SpellDamageOnTwoHandWeaponEssence7"] = { type = "Prefix", affix = "Essences", "(123-144)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 82, group = "TwoHandWeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeapon1"] = { type = "Prefix", affix = "Apprentice's", "(15-29)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 2, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeapon2"] = { type = "Prefix", affix = "Adept's", "(30-44)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 11, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeapon3"] = { type = "Prefix", affix = "Scholar's", "(45-59)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 23, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeapon4"] = { type = "Prefix", affix = "Professor's", "(60-84)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 35, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 600, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeapon5"] = { type = "Prefix", affix = "Occultist's", "(85-104)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 46, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeapon6"] = { type = "Prefix", affix = "Incanter's", "(105-124)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 58, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 150, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeapon7"] = { type = "Prefix", affix = "Glyphic", "(125-149)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 79, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 80, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeapon8"] = { type = "Prefix", affix = "Runic", "(150-164)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 84, group = "TwoHandWeaponSpellDamage", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 40, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeaponEssence5"] = { type = "Prefix", affix = "Essences", "(85-106)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 58, group = "TwoHandWeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeaponEssence6"] = { type = "Prefix", affix = "Essences", "(107-122)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 74, group = "TwoHandWeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["SpellDamageOnTwoHandWeaponEssence7"] = { type = "Prefix", affix = "Essences", "(123-144)% increased Spell Damage", statOrderKey = "1090", statOrder = { 1090 }, level = 82, group = "TwoHandWeaponSpellDamage", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "damage", "caster" }, }, ["SpellDamageOnTwoHandWeaponEnhancedMod"] = { type = "Prefix", affix = "Tacati's", "(105-110)% increased Spell Damage", "Gain 5% of Non-Chaos Damage as extra Chaos Damage", statOrderKey = "1090,8785", statOrder = { 1090, 8785 }, level = 1, group = "WeaponSpellDamageAddedAsChaos", weightKey = { "default", }, weightVal = { 0 }, modTags = { "caster_damage", "chaos_damage", "damage", "chaos", "caster" }, }, - ["SpellDamageAndManaOnWeapon1"] = { type = "Prefix", affix = "Caster's", "(5-9)% increased Spell Damage", "+(17-20) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 2, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1000, 750, 750, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnWeapon2"] = { type = "Prefix", affix = "Conjuror's", "(10-14)% increased Spell Damage", "+(21-24) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 11, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1000, 750, 750, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnWeapon3"] = { type = "Prefix", affix = "Wizard's", "(15-19)% increased Spell Damage", "+(25-28) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 23, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1000, 750, 750, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnWeapon4"] = { type = "Prefix", affix = "Warlock's", "(20-24)% increased Spell Damage", "+(29-33) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 35, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 600, 600, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnWeapon5"] = { type = "Prefix", affix = "Mage's", "(25-29)% increased Spell Damage", "+(34-37) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 46, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 400, 300, 300, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnWeapon6"] = { type = "Prefix", affix = "Archmage's", "(30-34)% increased Spell Damage", "+(38-41) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 58, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 200, 150, 150, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnWeapon7"] = { type = "Prefix", affix = "Lich's", "(35-39)% increased Spell Damage", "+(42-45) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 80, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 100, 75, 75, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnTwoHandWeapon1"] = { type = "Prefix", affix = "Caster's", "(8-14)% increased Spell Damage", "+(26-30) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 2, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnTwoHandWeapon2"] = { type = "Prefix", affix = "Conjuror's", "(15-22)% increased Spell Damage", "+(31-35) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 11, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnTwoHandWeapon3"] = { type = "Prefix", affix = "Wizard's", "(23-29)% increased Spell Damage", "+(36-41) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 23, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnTwoHandWeapon4"] = { type = "Prefix", affix = "Warlock's", "(30-37)% increased Spell Damage", "+(42-47) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 35, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 600, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnTwoHandWeapon5"] = { type = "Prefix", affix = "Mage's", "(38-44)% increased Spell Damage", "+(48-53) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 46, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 300, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnTwoHandWeapon6"] = { type = "Prefix", affix = "Archmage's", "(45-50)% increased Spell Damage", "+(54-59) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 58, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 150, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, - ["SpellDamageAndManaOnTwoHandWeapon7"] = { type = "Prefix", affix = "Lich's", "(51-55)% increased Spell Damage", "+(60-64) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 80, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 75, 0 }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnWeapon1"] = { type = "Prefix", affix = "Caster's", "(5-9)% increased Spell Damage", "+(17-20) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 2, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1000, 750, 750, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnWeapon2"] = { type = "Prefix", affix = "Conjuror's", "(10-14)% increased Spell Damage", "+(21-24) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 11, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1000, 750, 750, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnWeapon3"] = { type = "Prefix", affix = "Wizard's", "(15-19)% increased Spell Damage", "+(25-28) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 23, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 1000, 750, 750, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnWeapon4"] = { type = "Prefix", affix = "Warlock's", "(20-24)% increased Spell Damage", "+(29-33) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 35, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 600, 600, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnWeapon5"] = { type = "Prefix", affix = "Mage's", "(25-29)% increased Spell Damage", "+(34-37) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 46, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 400, 300, 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnWeapon6"] = { type = "Prefix", affix = "Archmage's", "(30-34)% increased Spell Damage", "+(38-41) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 58, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 200, 150, 150, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnWeapon7"] = { type = "Prefix", affix = "Lich's", "(35-39)% increased Spell Damage", "+(42-45) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 80, group = "WeaponSpellDamageAndMana", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 100, 75, 75, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnTwoHandWeapon1"] = { type = "Prefix", affix = "Caster's", "(8-14)% increased Spell Damage", "+(26-30) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 2, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnTwoHandWeapon2"] = { type = "Prefix", affix = "Conjuror's", "(15-22)% increased Spell Damage", "+(31-35) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 11, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnTwoHandWeapon3"] = { type = "Prefix", affix = "Wizard's", "(23-29)% increased Spell Damage", "+(36-41) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 23, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 1500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnTwoHandWeapon4"] = { type = "Prefix", affix = "Warlock's", "(30-37)% increased Spell Damage", "+(42-47) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 35, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 600, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnTwoHandWeapon5"] = { type = "Prefix", affix = "Mage's", "(38-44)% increased Spell Damage", "+(48-53) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 46, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnTwoHandWeapon6"] = { type = "Prefix", affix = "Archmage's", "(45-50)% increased Spell Damage", "+(54-59) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 58, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 150, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, + ["SpellDamageAndManaOnTwoHandWeapon7"] = { type = "Prefix", affix = "Lich's", "(51-55)% increased Spell Damage", "+(60-64) to maximum Mana", statOrderKey = "1090,1439", statOrder = { 1090, 1439 }, level = 80, group = "TwoHandWeaponSpellDamageAndMana", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 75, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "resource", "mana", "damage", "caster" }, }, ["TrapDamageOnWeaponEnhancedMod"] = { type = "Prefix", affix = "Matatl's", "(90-95)% increased Trap Damage", statOrderKey = "1061", statOrder = { 1061 }, level = 1, group = "TrapDamageOnWeapon", weightKey = { "default", }, weightVal = { 0 }, modTags = { "damage" }, }, ["TrapDamageOnTwoHandWeaponEnhancedMod"] = { type = "Prefix", affix = "Matatl's", "(133-138)% increased Trap Damage", statOrderKey = "1061", statOrder = { 1061 }, level = 1, group = "TrapDamageOnWeapon", weightKey = { "default", }, weightVal = { 0 }, modTags = { "damage" }, }, ["TrapThrowSpeedEnhancedMod"] = { type = "Suffix", affix = "of Matatl", "(20-22)% increased Trap Throwing Speed", statOrderKey = "1784", statOrder = { 1784 }, level = 1, group = "TrapThrowSpeedOnWeapon", weightKey = { "default", }, weightVal = { 0 }, modTags = { "speed" }, }, @@ -725,58 +725,58 @@ return { ["MinionAttackAndCastSpeedEnhancedMod"] = { type = "Suffix", affix = "of Citaqualotl", "Minions have (13-15)% increased Attack Speed", "Minions have (13-15)% increased Cast Speed", statOrderKey = "2755,2756", statOrder = { 2755, 2756 }, level = 1, group = "MinionAttackAndCastSpeedOnWeapon", weightKey = { "default", }, weightVal = { 0 }, modTags = { "attack", "caster", "speed", "minion" }, }, ["MinionDurationEnhancedMod_"] = { type = "Suffix", affix = "of Citaqualotl", "(17-20)% increased Minion Duration", statOrderKey = "4739", statOrder = { 4739 }, level = 1, group = "MinionDuration", weightKey = { "default", }, weightVal = { 0 }, modTags = { "minion" }, }, ["LocalIncreaseSocketedMinionGemLevelEnhancedMod"] = { type = "Prefix", affix = "Citaqualotl's", "+2 to Level of Socketed Minion Gems", statOrderKey = "159", statOrder = { 159 }, level = 1, group = "LocalIncreaseSocketedMinionGemLevel", weightKey = { "default", }, weightVal = { 0 }, modTags = { "minion", "gem" }, }, - ["FireDamagePrefixOnWeapon1"] = { type = "Prefix", affix = "Searing", "(10-19)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 2, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnWeapon2"] = { type = "Prefix", affix = "Sizzling", "(20-29)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 11, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnWeapon3"] = { type = "Prefix", affix = "Blistering", "(30-39)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 23, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnWeapon4"] = { type = "Prefix", affix = "Cauterising", "(40-54)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 35, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 200, 200, 200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnWeapon5_"] = { type = "Prefix", affix = "Volcanic", "(55-69)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 46, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 100, 100, 100, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnWeapon6"] = { type = "Prefix", affix = "Magmatic", "(70-84)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 58, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 50, 50, 50, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnWeapon7_"] = { type = "Prefix", affix = "Pyroclastic", "(85-99)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 64, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 25, 25, 25, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnWeapon8_"] = { type = "Prefix", affix = "Xoph's", "(100-109)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 84, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 12, 12, 12, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnTwoHandWeapon1"] = { type = "Prefix", affix = "Searing", "(15-29)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 2, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnTwoHandWeapon2___"] = { type = "Prefix", affix = "Sizzling", "(30-44)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 11, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnTwoHandWeapon3"] = { type = "Prefix", affix = "Blistering", "(45-59)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 23, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnTwoHandWeapon4"] = { type = "Prefix", affix = "Cauterising", "(60-84)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 35, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnTwoHandWeapon5"] = { type = "Prefix", affix = "Volcanic", "(85-104)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 46, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 100, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnTwoHandWeapon6"] = { type = "Prefix", affix = "Magmatic", "(105-124)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 58, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 50, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnTwoHandWeapon7"] = { type = "Prefix", affix = "Pyroclastic", "(125-149)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 79, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 25, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamagePrefixOnTwoHandWeapon8_"] = { type = "Prefix", affix = "Xoph's", "(150-164)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 84, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 13, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnWeapon1"] = { type = "Prefix", affix = "Searing", "(10-19)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 2, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnWeapon2"] = { type = "Prefix", affix = "Sizzling", "(20-29)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 11, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnWeapon3"] = { type = "Prefix", affix = "Blistering", "(30-39)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 23, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnWeapon4"] = { type = "Prefix", affix = "Cauterising", "(40-54)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 35, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 200, 200, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnWeapon5_"] = { type = "Prefix", affix = "Volcanic", "(55-69)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 46, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 100, 100, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnWeapon6"] = { type = "Prefix", affix = "Magmatic", "(70-84)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 58, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 50, 50, 50, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnWeapon7_"] = { type = "Prefix", affix = "Pyroclastic", "(85-99)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 64, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 25, 25, 25, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnWeapon8_"] = { type = "Prefix", affix = "Xoph's", "(100-109)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 84, group = "FireDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 12, 12, 12, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnTwoHandWeapon1"] = { type = "Prefix", affix = "Searing", "(15-29)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 2, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnTwoHandWeapon2___"] = { type = "Prefix", affix = "Sizzling", "(30-44)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 11, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnTwoHandWeapon3"] = { type = "Prefix", affix = "Blistering", "(45-59)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 23, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnTwoHandWeapon4"] = { type = "Prefix", affix = "Cauterising", "(60-84)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 35, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnTwoHandWeapon5"] = { type = "Prefix", affix = "Volcanic", "(85-104)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 46, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnTwoHandWeapon6"] = { type = "Prefix", affix = "Magmatic", "(105-124)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 58, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 50, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnTwoHandWeapon7"] = { type = "Prefix", affix = "Pyroclastic", "(125-149)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 79, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 25, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamagePrefixOnTwoHandWeapon8_"] = { type = "Prefix", affix = "Xoph's", "(150-164)% increased Fire Damage", statOrderKey = "1221", statOrder = { 1221 }, level = 84, group = "TwoHandFireDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 13, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, ["FireDamagePrefixOnWeaponEnhancedMod"] = { type = "Prefix", affix = "Topotante's", "(75-79)% increased Fire Damage", "Adds (15-20) to (30-35) Fire Damage to Spells", statOrderKey = "1221,1267", statOrder = { 1221, 1267 }, level = 1, group = "FireDamageWeaponPrefixAndFlat", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, ["FireDamagePrefixOnTwoHandWeaponEnhancedMod"] = { type = "Prefix", affix = "Topotante's", "(111-115)% increased Fire Damage", "Adds (20-27) to (41-48) Fire Damage to Spells", statOrderKey = "1221,1267", statOrder = { 1221, 1267 }, level = 1, group = "TwoHandFireDamageWeaponPrefixAndFlat", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["ColdDamagePrefixOnWeapon1"] = { type = "Prefix", affix = "Bitter", "(10-19)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 2, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnWeapon2"] = { type = "Prefix", affix = "Biting", "(20-29)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 11, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnWeapon3_"] = { type = "Prefix", affix = "Alpine", "(30-39)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 23, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnWeapon4"] = { type = "Prefix", affix = "Snowy", "(40-54)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 35, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 200, 200, 200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnWeapon5_"] = { type = "Prefix", affix = "Hailing", "(55-69)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 46, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 100, 100, 100, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnWeapon6"] = { type = "Prefix", affix = "Crystalline", "(70-84)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 58, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 50, 50, 50, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnWeapon7"] = { type = "Prefix", affix = "Cryomancer's", "(85-99)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 64, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 25, 25, 25, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnWeapon8"] = { type = "Prefix", affix = "Tul's", "(100-109)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 84, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 12, 12, 12, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnTwoHandWeapon1"] = { type = "Prefix", affix = "Bitter", "(15-29)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 2, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnTwoHandWeapon2"] = { type = "Prefix", affix = "Biting", "(30-44)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 11, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnTwoHandWeapon3"] = { type = "Prefix", affix = "Alpine", "(45-59)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 23, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnTwoHandWeapon4_"] = { type = "Prefix", affix = "Snowy", "(60-84)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 35, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnTwoHandWeapon5_"] = { type = "Prefix", affix = "Hailing", "(85-104)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 46, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 100, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnTwoHandWeapon6"] = { type = "Prefix", affix = "Crystalline", "(105-124)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 58, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 50, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnTwoHandWeapon7"] = { type = "Prefix", affix = "Cryomancer's", "(125-149)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 79, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 25, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamagePrefixOnTwoHandWeapon8"] = { type = "Prefix", affix = "Tul's", "(150-164)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 84, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 13, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnWeapon1"] = { type = "Prefix", affix = "Bitter", "(10-19)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 2, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnWeapon2"] = { type = "Prefix", affix = "Biting", "(20-29)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 11, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnWeapon3_"] = { type = "Prefix", affix = "Alpine", "(30-39)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 23, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnWeapon4"] = { type = "Prefix", affix = "Snowy", "(40-54)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 35, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 200, 200, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnWeapon5_"] = { type = "Prefix", affix = "Hailing", "(55-69)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 46, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 100, 100, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnWeapon6"] = { type = "Prefix", affix = "Crystalline", "(70-84)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 58, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 50, 50, 50, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnWeapon7"] = { type = "Prefix", affix = "Cryomancer's", "(85-99)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 64, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 25, 25, 25, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnWeapon8"] = { type = "Prefix", affix = "Tul's", "(100-109)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 84, group = "ColdDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 12, 12, 12, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnTwoHandWeapon1"] = { type = "Prefix", affix = "Bitter", "(15-29)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 2, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnTwoHandWeapon2"] = { type = "Prefix", affix = "Biting", "(30-44)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 11, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnTwoHandWeapon3"] = { type = "Prefix", affix = "Alpine", "(45-59)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 23, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnTwoHandWeapon4_"] = { type = "Prefix", affix = "Snowy", "(60-84)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 35, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnTwoHandWeapon5_"] = { type = "Prefix", affix = "Hailing", "(85-104)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 46, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnTwoHandWeapon6"] = { type = "Prefix", affix = "Crystalline", "(105-124)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 58, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 50, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnTwoHandWeapon7"] = { type = "Prefix", affix = "Cryomancer's", "(125-149)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 79, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 25, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamagePrefixOnTwoHandWeapon8"] = { type = "Prefix", affix = "Tul's", "(150-164)% increased Cold Damage", statOrderKey = "1230", statOrder = { 1230 }, level = 84, group = "TwoHandColdDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 13, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, ["ColdDamagePrefixOnWeaponEnhancedMod"] = { type = "Prefix", affix = "Topotante's", "(75-79)% increased Cold Damage", "Adds (12-16) to (25-29) Cold Damage to Spells", statOrderKey = "1230,1268", statOrder = { 1230, 1268 }, level = 1, group = "ColdDamageWeaponPrefixAndFlat", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, ["ColdDamagePrefixOnTwoHandWeaponEnhancedMod"] = { type = "Prefix", affix = "Topotante's", "(111-115)% increased Cold Damage", "Adds (19-25) to (37-44) Cold Damage to Spells", statOrderKey = "1230,1268", statOrder = { 1230, 1268 }, level = 1, group = "TwoHandColdDamageWeaponPrefixAndFlat", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["LightningDamagePrefixOnWeapon1_"] = { type = "Prefix", affix = "Charged", "(10-19)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 2, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnWeapon2"] = { type = "Prefix", affix = "Hissing", "(20-29)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 11, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnWeapon3"] = { type = "Prefix", affix = "Bolting", "(30-39)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 23, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnWeapon4"] = { type = "Prefix", affix = "Coursing", "(40-54)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 35, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 200, 200, 200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnWeapon5"] = { type = "Prefix", affix = "Striking", "(55-69)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 46, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 100, 100, 100, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnWeapon6"] = { type = "Prefix", affix = "Smiting", "(70-84)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 58, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 50, 50, 50, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnWeapon7"] = { type = "Prefix", affix = "Ionising", "(85-99)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 64, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 25, 25, 25, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnWeapon8"] = { type = "Prefix", affix = "Esh's", "(100-109)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 84, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 12, 12, 12, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnTwoHandWeapon1"] = { type = "Prefix", affix = "Charged", "(15-29)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 2, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnTwoHandWeapon2"] = { type = "Prefix", affix = "Hissing", "(30-44)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 11, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnTwoHandWeapon3"] = { type = "Prefix", affix = "Bolting", "(45-59)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 23, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnTwoHandWeapon4"] = { type = "Prefix", affix = "Coursing", "(60-84)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 35, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 200, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnTwoHandWeapon5"] = { type = "Prefix", affix = "Striking", "(85-104)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 46, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 100, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnTwoHandWeapon6"] = { type = "Prefix", affix = "Smiting", "(105-124)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 58, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 50, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnTwoHandWeapon7"] = { type = "Prefix", affix = "Ionising", "(125-149)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 79, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 25, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["LightningDamagePrefixOnTwoHandWeapon8"] = { type = "Prefix", affix = "Esh's", "(150-164)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 84, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 13, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnWeapon1_"] = { type = "Prefix", affix = "Charged", "(10-19)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 2, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnWeapon2"] = { type = "Prefix", affix = "Hissing", "(20-29)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 11, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnWeapon3"] = { type = "Prefix", affix = "Bolting", "(30-39)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 23, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnWeapon4"] = { type = "Prefix", affix = "Coursing", "(40-54)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 35, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 200, 200, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnWeapon5"] = { type = "Prefix", affix = "Striking", "(55-69)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 46, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 100, 100, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnWeapon6"] = { type = "Prefix", affix = "Smiting", "(70-84)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 58, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 50, 50, 50, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnWeapon7"] = { type = "Prefix", affix = "Ionising", "(85-99)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 64, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 25, 25, 25, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnWeapon8"] = { type = "Prefix", affix = "Esh's", "(100-109)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 84, group = "LightningDamageWeaponPrefix", weightKey = { "focus", "wand", "sceptre", "default", }, weightVal = { 12, 12, 12, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnTwoHandWeapon1"] = { type = "Prefix", affix = "Charged", "(15-29)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 2, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnTwoHandWeapon2"] = { type = "Prefix", affix = "Hissing", "(30-44)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 11, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnTwoHandWeapon3"] = { type = "Prefix", affix = "Bolting", "(45-59)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 23, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnTwoHandWeapon4"] = { type = "Prefix", affix = "Coursing", "(60-84)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 35, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnTwoHandWeapon5"] = { type = "Prefix", affix = "Striking", "(85-104)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 46, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnTwoHandWeapon6"] = { type = "Prefix", affix = "Smiting", "(105-124)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 58, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 50, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnTwoHandWeapon7"] = { type = "Prefix", affix = "Ionising", "(125-149)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 79, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 25, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["LightningDamagePrefixOnTwoHandWeapon8"] = { type = "Prefix", affix = "Esh's", "(150-164)% increased Lightning Damage", statOrderKey = "1241", statOrder = { 1241 }, level = 84, group = "TwoHandLightningDamageWeaponPrefix", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 13, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, ["LightningDamagePrefixOnWeaponEnhancedMod_"] = { type = "Prefix", affix = "Topotante's", "(75-79)% increased Lightning Damage", "Adds (1-4) to (53-56) Lightning Damage to Spells", statOrderKey = "1241,1269", statOrder = { 1241, 1269 }, level = 1, group = "LightningDamageWeaponPrefixAndFlat", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, ["LightningDamagePrefixOnTwoHandWeaponEnhancedMod"] = { type = "Prefix", affix = "Topotante's", "(111-115)% increased Lightning Damage", "Adds (2-6) to (79-84) Lightning Damage to Spells", statOrderKey = "1241,1269", statOrder = { 1241, 1269 }, level = 1, group = "TwoHandLightningDamageWeaponPrefixAndFlat", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, ["WeaponElementalDamage1"] = { type = "Prefix", affix = "Catalysing", "(5-10)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 4, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "ring", "amulet", "belt", "default", }, weightVal = { 300, 300, 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, @@ -792,18 +792,18 @@ return { ["WeaponElementalDamageEssence5"] = { type = "Prefix", affix = "Essences", "(30-34)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 58, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, ["WeaponElementalDamageEssence6_"] = { type = "Prefix", affix = "Essences", "(35-38)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 74, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, ["WeaponElementalDamageEssence7"] = { type = "Prefix", affix = "Essences", "(39-42)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 82, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnWeapons1_"] = { type = "Prefix", affix = "Catalysing", "(11-20)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 4, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnWeapons2"] = { type = "Prefix", affix = "Infusing", "(21-30)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 15, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnWeapons3_"] = { type = "Prefix", affix = "Empowering", "(31-36)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 30, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnWeapons4"] = { type = "Prefix", affix = "Unleashed", "(37-42)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 60, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnWeapons5_"] = { type = "Prefix", affix = "Overpowering", "(43-50)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 81, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnWeapons6"] = { type = "Prefix", affix = "Devastating", "(51-59)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 86, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnTwohandWeapon1"] = { type = "Prefix", affix = "Catalysing", "(19-34)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 4, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnTwohandWeapon2____"] = { type = "Prefix", affix = "Infusing", "(36-51)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 15, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnTwohandWeapon3"] = { type = "Prefix", affix = "Empowering", "(53-61)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 30, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnTwohandWeapon4"] = { type = "Prefix", affix = "Unleashed", "(63-71)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 60, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnTwohandWeapon5"] = { type = "Prefix", affix = "Overpowering", "(73-85)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 81, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, - ["WeaponElementalDamageOnTwohandWeapon6"] = { type = "Prefix", affix = "Devastating", "(87-100)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 86, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnWeapons1_"] = { type = "Prefix", affix = "Catalysing", "(11-20)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 4, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnWeapons2"] = { type = "Prefix", affix = "Infusing", "(21-30)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 15, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnWeapons3_"] = { type = "Prefix", affix = "Empowering", "(31-36)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 30, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnWeapons4"] = { type = "Prefix", affix = "Unleashed", "(37-42)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 60, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnWeapons5_"] = { type = "Prefix", affix = "Overpowering", "(43-50)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 81, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnWeapons6"] = { type = "Prefix", affix = "Devastating", "(51-59)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 86, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "one_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnTwohandWeapon1"] = { type = "Prefix", affix = "Catalysing", "(19-34)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 4, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnTwohandWeapon2____"] = { type = "Prefix", affix = "Infusing", "(36-51)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 15, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnTwohandWeapon3"] = { type = "Prefix", affix = "Empowering", "(53-61)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 30, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnTwohandWeapon4"] = { type = "Prefix", affix = "Unleashed", "(63-71)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 60, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnTwohandWeapon5"] = { type = "Prefix", affix = "Overpowering", "(73-85)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 81, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, + ["WeaponElementalDamageOnTwohandWeapon6"] = { type = "Prefix", affix = "Devastating", "(87-100)% increased Elemental Damage with Attack Skills", statOrderKey = "5876", statOrder = { 5876 }, level = 86, group = "IncreasedWeaponElementalDamagePercent", weightKey = { "two_hand_weapon", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "elemental_damage", "damage", "elemental", "attack" }, }, ["ManaLeech1"] = { type = "Prefix", affix = "Thirsty", "(1-2)% of Physical Attack Damage Leeched as Mana", statOrderKey = "1556", statOrder = { 1556 }, level = 9, group = "ManaLeech", weightKey = { "default", }, weightVal = { 0 }, modTags = { "resource", "mana", "physical", "attack" }, }, ["ManaLeech2"] = { type = "Prefix", affix = "Parched", "(3-4)% of Physical Attack Damage Leeched as Mana", statOrderKey = "1556", statOrder = { 1556 }, level = 74, group = "ManaLeech", weightKey = { "default", }, weightVal = { 0 }, modTags = { "resource", "mana", "physical", "attack" }, }, ["ManaLeechPermyriad1"] = { type = "Prefix", affix = "Thirsty", "(0.2-0.4)% of Physical Attack Damage Leeched as Mana", statOrderKey = "1558", statOrder = { 1558 }, level = 50, group = "ManaLeechPermyriad", weightKey = { "ring", "amulet", "gloves", "quiver", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "resource", "mana", "physical", "attack" }, }, @@ -1700,9 +1700,9 @@ return { ["AttackAndCastSpeed1"] = { type = "Suffix", affix = "of Zeal", "(3-4)% increased Attack and Cast Speed", statOrderKey = "1900", statOrder = { 1900 }, level = 15, group = "AttackAndCastSpeed", weightKey = { "default", }, weightVal = { 0 }, modTags = { "attack", "caster", "speed" }, }, ["AttackAndCastSpeed2"] = { type = "Suffix", affix = "of Fervour", "(5-6)% increased Attack and Cast Speed", statOrderKey = "1900", statOrder = { 1900 }, level = 45, group = "AttackAndCastSpeed", weightKey = { "default", }, weightVal = { 0 }, modTags = { "attack", "caster", "speed" }, }, ["AttackAndCastSpeed3"] = { type = "Suffix", affix = "of Haste", "(7-8)% increased Attack and Cast Speed", statOrderKey = "1900", statOrder = { 1900 }, level = 70, group = "AttackAndCastSpeed", weightKey = { "default", }, weightVal = { 0 }, modTags = { "attack", "caster", "speed" }, }, - ["LifeLeechPermyriadLocal1"] = { type = "Prefix", affix = "Remora's", "(0.2-0.4)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 50, group = "LifeLeechLocalPermyriad", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "resource", "life", "physical", "attack" }, }, - ["LifeLeechPermyriadLocal2"] = { type = "Prefix", affix = "Lamprey's", "(0.6-0.8)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 60, group = "LifeLeechLocalPermyriad", weightKey = { "ranged", "weapon", "default", }, weightVal = { 0, 500, 0 }, modTags = { "resource", "life", "physical", "attack" }, }, - ["LifeLeechPermyriadLocal3"] = { type = "Prefix", affix = "Vampire's", "(1-1.2)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 70, group = "LifeLeechLocalPermyriad", weightKey = { "ranged", "weapon", "default", }, weightVal = { 0, 250, 0 }, modTags = { "resource", "life", "physical", "attack" }, }, + ["LifeLeechPermyriadLocal1"] = { type = "Prefix", affix = "Remora's", "(0.2-0.4)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 50, group = "LifeLeechLocalPermyriad", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "resource", "life", "physical", "attack" }, }, + ["LifeLeechPermyriadLocal2"] = { type = "Prefix", affix = "Lamprey's", "(0.6-0.8)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 60, group = "LifeLeechLocalPermyriad", weightKey = { "ranged", "weapon", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "resource", "life", "physical", "attack" }, }, + ["LifeLeechPermyriadLocal3"] = { type = "Prefix", affix = "Vampire's", "(1-1.2)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 70, group = "LifeLeechLocalPermyriad", weightKey = { "ranged", "weapon", "default", }, weightVal = { 0, 250, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "resource", "life", "physical", "attack" }, }, ["LifeLeechPermyriadLocalEssence1"] = { type = "Prefix", affix = "Essences", "(0.5-0.7)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 1, group = "LifeLeechLocalPermyriad", weightKey = { "default", }, weightVal = { 0 }, modTags = { "resource", "life", "physical", "attack" }, }, ["LifeLeechPermyriadLocalEssence2"] = { type = "Prefix", affix = "Essences", "(0.6-0.8)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 10, group = "LifeLeechLocalPermyriad", weightKey = { "default", }, weightVal = { 0 }, modTags = { "resource", "life", "physical", "attack" }, }, ["LifeLeechPermyriadLocalEssence3"] = { type = "Prefix", affix = "Essences", "(0.7-0.9)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 26, group = "LifeLeechLocalPermyriad", weightKey = { "default", }, weightVal = { 0 }, modTags = { "resource", "life", "physical", "attack" }, }, @@ -1710,7 +1710,7 @@ return { ["LifeLeechPermyriadLocalEssence5"] = { type = "Prefix", affix = "Essences", "(0.9-1.1)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 58, group = "LifeLeechLocalPermyriad", weightKey = { "default", }, weightVal = { 0 }, modTags = { "resource", "life", "physical", "attack" }, }, ["LifeLeechPermyriadLocalEssence6"] = { type = "Prefix", affix = "Essences", "(1-1.2)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 74, group = "LifeLeechLocalPermyriad", weightKey = { "default", }, weightVal = { 0 }, modTags = { "resource", "life", "physical", "attack" }, }, ["LifeLeechPermyriadLocalEssence7"] = { type = "Prefix", affix = "Essences", "(1.1-1.3)% of Physical Attack Damage Leeched as Life", statOrderKey = "1510", statOrder = { 1510 }, level = 82, group = "LifeLeechLocalPermyriad", weightKey = { "default", }, weightVal = { 0 }, modTags = { "resource", "life", "physical", "attack" }, }, - ["ManaLeechPermyriadLocal1"] = { type = "Prefix", affix = "Thirsty", "(0.2-0.4)% of Physical Attack Damage Leeched as Mana", statOrderKey = "1560", statOrder = { 1560 }, level = 50, group = "ManaLeechLocalPermyriad", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, modTags = { "resource", "mana", "physical", "attack" }, }, + ["ManaLeechPermyriadLocal1"] = { type = "Prefix", affix = "Thirsty", "(0.2-0.4)% of Physical Attack Damage Leeched as Mana", statOrderKey = "1560", statOrder = { 1560 }, level = 50, group = "ManaLeechLocalPermyriad", weightKey = { "weapon", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "resource", "mana", "physical", "attack" }, }, ["AttackDamagePercent1"] = { type = "Prefix", affix = "Bully's", "(4-8)% increased Attack Damage", statOrderKey = "1065", statOrder = { 1065 }, level = 4, group = "AttackDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "damage", "attack" }, }, ["AttackDamagePercent2"] = { type = "Prefix", affix = "Thug's", "(9-16)% increased Attack Damage", statOrderKey = "1065", statOrder = { 1065 }, level = 15, group = "AttackDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "damage", "attack" }, }, ["AttackDamagePercent3"] = { type = "Prefix", affix = "Brute's", "(17-24)% increased Attack Damage", statOrderKey = "1065", statOrder = { 1065 }, level = 30, group = "AttackDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "damage", "attack" }, }, @@ -1730,71 +1730,71 @@ return { ["IncreasedStunThresholdEssence5"] = { type = "Suffix", affix = "of the Essence", "(31-39)% increased Stun Threshold", statOrderKey = "3113", statOrder = { 3113 }, level = 58, group = "IncreasedStunThreshold", weightKey = { "default", }, weightVal = { 0 }, modTags = { }, }, ["IncreasedStunThresholdEssence6"] = { type = "Suffix", affix = "of the Essence", "(40-45)% increased Stun Threshold", statOrderKey = "3113", statOrder = { 3113 }, level = 74, group = "IncreasedStunThreshold", weightKey = { "default", }, weightVal = { 0 }, modTags = { }, }, ["IncreasedStunThresholdEssence7"] = { type = "Suffix", affix = "of the Essence", "(46-60)% increased Stun Threshold", statOrderKey = "3113", statOrder = { 3113 }, level = 82, group = "IncreasedStunThreshold", weightKey = { "default", }, weightVal = { 0 }, modTags = { }, }, - ["SpellAddedFireDamage1"] = { type = "Prefix", affix = "Heated", "Adds (1-2) to (3-4) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 1, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamage2_"] = { type = "Prefix", affix = "Smouldering", "Adds (6-8) to (12-14) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 11, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamage3"] = { type = "Prefix", affix = "Smoking", "Adds (10-12) to (19-23) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 18, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamage4"] = { type = "Prefix", affix = "Burning", "Adds (13-18) to (27-31) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 26, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamage5"] = { type = "Prefix", affix = "Flaming", "Adds (19-25) to (37-44) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 33, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamage6"] = { type = "Prefix", affix = "Scorching", "Adds (24-33) to (48-57) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 42, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamage7"] = { type = "Prefix", affix = "Incinerating", "Adds (31-42) to (64-73) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 51, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamage8"] = { type = "Prefix", affix = "Blasting", "Adds (40-52) to (79-91) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 62, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamage9"] = { type = "Prefix", affix = "Cremating", "Adds (49-66) to (98-115) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 74, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage1"] = { type = "Prefix", affix = "Heated", "Adds (1-2) to (3-4) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 1, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage2_"] = { type = "Prefix", affix = "Smouldering", "Adds (6-8) to (12-14) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 11, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage3"] = { type = "Prefix", affix = "Smoking", "Adds (10-12) to (19-23) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 18, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage4"] = { type = "Prefix", affix = "Burning", "Adds (13-18) to (27-31) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 26, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage5"] = { type = "Prefix", affix = "Flaming", "Adds (19-25) to (37-44) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 33, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage6"] = { type = "Prefix", affix = "Scorching", "Adds (24-33) to (48-57) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 42, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage7"] = { type = "Prefix", affix = "Incinerating", "Adds (31-42) to (64-73) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 51, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage8"] = { type = "Prefix", affix = "Blasting", "Adds (40-52) to (79-91) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 62, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamage9"] = { type = "Prefix", affix = "Cremating", "Adds (49-66) to (98-115) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 74, group = "SpellAddedFireDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, ["SpellAddedFireDamageEssence7"] = { type = "Prefix", affix = "Essences", "Adds (45-54) to (80-90) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 82, group = "SpellAddedFireDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedColdDamage1"] = { type = "Prefix", affix = "Frosted", "Adds 1 to (2-3) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 1, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamage2"] = { type = "Prefix", affix = "Chilled", "Adds (5-7) to (10-12) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 11, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamage3"] = { type = "Prefix", affix = "Icy", "Adds (8-10) to (16-18) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 18, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamage4"] = { type = "Prefix", affix = "Frigid", "Adds (11-15) to (22-25) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 26, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamage5"] = { type = "Prefix", affix = "Freezing", "Adds (16-20) to (30-36) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 33, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamage6_"] = { type = "Prefix", affix = "Frozen", "Adds (20-26) to (40-46) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 42, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamage7"] = { type = "Prefix", affix = "Glaciated", "Adds (26-35) to (51-60) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 51, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamage8"] = { type = "Prefix", affix = "Polar", "Adds (33-43) to (64-75) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 62, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamage9"] = { type = "Prefix", affix = "Entombing", "Adds (41-54) to (81-93) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 74, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage1"] = { type = "Prefix", affix = "Frosted", "Adds 1 to (2-3) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 1, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage2"] = { type = "Prefix", affix = "Chilled", "Adds (5-7) to (10-12) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 11, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage3"] = { type = "Prefix", affix = "Icy", "Adds (8-10) to (16-18) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 18, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage4"] = { type = "Prefix", affix = "Frigid", "Adds (11-15) to (22-25) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 26, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage5"] = { type = "Prefix", affix = "Freezing", "Adds (16-20) to (30-36) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 33, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage6_"] = { type = "Prefix", affix = "Frozen", "Adds (20-26) to (40-46) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 42, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage7"] = { type = "Prefix", affix = "Glaciated", "Adds (26-35) to (51-60) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 51, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage8"] = { type = "Prefix", affix = "Polar", "Adds (33-43) to (64-75) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 62, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamage9"] = { type = "Prefix", affix = "Entombing", "Adds (41-54) to (81-93) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 74, group = "SpellAddedColdDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, ["SpellAddedColdDamageEssence7"] = { type = "Prefix", affix = "Essences", "Adds (35-45) to (66-74) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 82, group = "SpellAddedColdDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedLightningDamage1"] = { type = "Prefix", affix = "Humming", "Adds 1 to (4-5) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 1, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamage2"] = { type = "Prefix", affix = "Buzzing", "Adds (1-2) to (21-22) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 11, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamage3"] = { type = "Prefix", affix = "Snapping", "Adds (1-2) to (33-35) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 18, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamage4"] = { type = "Prefix", affix = "Crackling", "Adds (1-4) to (46-48) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 26, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamage5"] = { type = "Prefix", affix = "Sparking", "Adds (2-5) to (64-68) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 33, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamage6"] = { type = "Prefix", affix = "Arcing", "Adds (2-7) to (84-88) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 42, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamage7"] = { type = "Prefix", affix = "Shocking", "Adds (2-9) to (109-115) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 51, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamage8"] = { type = "Prefix", affix = "Discharging", "Adds (4-11) to (136-144) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 62, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamage9"] = { type = "Prefix", affix = "Electrocuting", "Adds (4-14) to (170-179) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 74, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage1"] = { type = "Prefix", affix = "Humming", "Adds 1 to (4-5) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 1, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage2"] = { type = "Prefix", affix = "Buzzing", "Adds (1-2) to (21-22) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 11, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage3"] = { type = "Prefix", affix = "Snapping", "Adds (1-2) to (33-35) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 18, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage4"] = { type = "Prefix", affix = "Crackling", "Adds (1-4) to (46-48) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 26, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage5"] = { type = "Prefix", affix = "Sparking", "Adds (2-5) to (64-68) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 33, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage6"] = { type = "Prefix", affix = "Arcing", "Adds (2-7) to (84-88) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 42, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage7"] = { type = "Prefix", affix = "Shocking", "Adds (2-9) to (109-115) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 51, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage8"] = { type = "Prefix", affix = "Discharging", "Adds (4-11) to (136-144) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 62, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamage9"] = { type = "Prefix", affix = "Electrocuting", "Adds (4-14) to (170-179) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 74, group = "SpellAddedLightningDamage", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 800, 800, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, ["SpellAddedLightningDamageEssence7"] = { type = "Prefix", affix = "Essences", "Adds (4-11) to (134-144) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 82, group = "SpellAddedLightningDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedFireDamageTwoHand1"] = { type = "Prefix", affix = "Heated", "Adds (1-2) to (4-5) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 1, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamageTwoHand2"] = { type = "Prefix", affix = "Smouldering", "Adds (8-11) to (17-19) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 11, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamageTwoHand3"] = { type = "Prefix", affix = "Smoking", "Adds (13-17) to (26-29) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 18, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamageTwoHand4"] = { type = "Prefix", affix = "Burning", "Adds (18-23) to (36-42) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 26, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamageTwoHand5"] = { type = "Prefix", affix = "Flaming", "Adds (25-33) to (50-59) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 33, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamageTwoHand6_"] = { type = "Prefix", affix = "Scorching", "Adds (32-44) to (65-76) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 42, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamageTwoHand7"] = { type = "Prefix", affix = "Incinerating", "Adds (42-56) to (85-99) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 51, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamageTwoHand8"] = { type = "Prefix", affix = "Blasting", "Adds (53-70) to (107-123) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 62, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedFireDamageTwoHand9"] = { type = "Prefix", affix = "Cremating", "Adds (66-88) to (132-155) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 74, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand1"] = { type = "Prefix", affix = "Heated", "Adds (1-2) to (4-5) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 1, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand2"] = { type = "Prefix", affix = "Smouldering", "Adds (8-11) to (17-19) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 11, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand3"] = { type = "Prefix", affix = "Smoking", "Adds (13-17) to (26-29) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 18, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand4"] = { type = "Prefix", affix = "Burning", "Adds (18-23) to (36-42) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 26, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand5"] = { type = "Prefix", affix = "Flaming", "Adds (25-33) to (50-59) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 33, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand6_"] = { type = "Prefix", affix = "Scorching", "Adds (32-44) to (65-76) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 42, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand7"] = { type = "Prefix", affix = "Incinerating", "Adds (42-56) to (85-99) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 51, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand8"] = { type = "Prefix", affix = "Blasting", "Adds (53-70) to (107-123) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 62, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, + ["SpellAddedFireDamageTwoHand9"] = { type = "Prefix", affix = "Cremating", "Adds (66-88) to (132-155) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 74, group = "SpellAddedFireDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, ["SpellAddedFireDamageTwoHandEssence7_"] = { type = "Prefix", affix = "Essences", "Adds (67-81) to (120-135) Fire Damage to Spells", statOrderKey = "1267", statOrder = { 1267 }, level = 82, group = "SpellAddedFireDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "fire", "caster" }, }, - ["SpellAddedColdDamageTwoHand1_"] = { type = "Prefix", affix = "Frosted", "Adds (1-2) to (3-4) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 1, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamageTwoHand2"] = { type = "Prefix", affix = "Chilled", "Adds (8-10) to (15-18) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 11, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamageTwoHand3"] = { type = "Prefix", affix = "Icy", "Adds (12-15) to (23-28) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 18, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamageTwoHand4"] = { type = "Prefix", affix = "Frigid", "Adds (16-22) to (33-38) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 26, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamageTwoHand5"] = { type = "Prefix", affix = "Freezing", "Adds (24-30) to (45-53) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 33, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamageTwoHand6"] = { type = "Prefix", affix = "Frozen", "Adds (30-40) to (59-69) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 42, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamageTwoHand7"] = { type = "Prefix", affix = "Glaciated", "Adds (39-52) to (77-90) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 51, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamageTwoHand8"] = { type = "Prefix", affix = "Polar", "Adds (49-64) to (96-113) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 62, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedColdDamageTwoHand9"] = { type = "Prefix", affix = "Entombing", "Adds (61-81) to (120-140) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 74, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand1_"] = { type = "Prefix", affix = "Frosted", "Adds (1-2) to (3-4) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 1, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand2"] = { type = "Prefix", affix = "Chilled", "Adds (8-10) to (15-18) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 11, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand3"] = { type = "Prefix", affix = "Icy", "Adds (12-15) to (23-28) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 18, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand4"] = { type = "Prefix", affix = "Frigid", "Adds (16-22) to (33-38) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 26, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand5"] = { type = "Prefix", affix = "Freezing", "Adds (24-30) to (45-53) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 33, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand6"] = { type = "Prefix", affix = "Frozen", "Adds (30-40) to (59-69) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 42, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand7"] = { type = "Prefix", affix = "Glaciated", "Adds (39-52) to (77-90) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 51, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand8"] = { type = "Prefix", affix = "Polar", "Adds (49-64) to (96-113) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 62, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, + ["SpellAddedColdDamageTwoHand9"] = { type = "Prefix", affix = "Entombing", "Adds (61-81) to (120-140) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 74, group = "SpellAddedColdDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, ["SpellAddedColdDamageTwoHandEssence7"] = { type = "Prefix", affix = "Essences", "Adds (57-66) to (100-111) Cold Damage to Spells", statOrderKey = "1268", statOrder = { 1268 }, level = 82, group = "SpellAddedColdDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "cold", "caster" }, }, - ["SpellAddedLightningDamageTwoHand1"] = { type = "Prefix", affix = "Humming", "Adds 1 to (6-7) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 1, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamageTwoHand2"] = { type = "Prefix", affix = "Buzzing", "Adds (1-3) to (32-34) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 11, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamageTwoHand3"] = { type = "Prefix", affix = "Snapping", "Adds (1-4) to (49-52) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 18, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamageTwoHand4"] = { type = "Prefix", affix = "Crackling", "Adds (2-5) to (69-73) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 26, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamageTwoHand5"] = { type = "Prefix", affix = "Sparking", "Adds (2-8) to (97-102) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 33, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamageTwoHand6"] = { type = "Prefix", affix = "Arcing", "Adds (3-10) to (126-133) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 42, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamageTwoHand7"] = { type = "Prefix", affix = "Shocking", "Adds (5-12) to (164-173) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 51, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamageTwoHand8"] = { type = "Prefix", affix = "Discharging", "Adds (5-17) to (204-216) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 62, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["SpellAddedLightningDamageTwoHand9_"] = { type = "Prefix", affix = "Electrocuting", "Adds (7-20) to (255-270) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 74, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand1"] = { type = "Prefix", affix = "Humming", "Adds 1 to (6-7) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 1, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand2"] = { type = "Prefix", affix = "Buzzing", "Adds (1-3) to (32-34) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 11, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand3"] = { type = "Prefix", affix = "Snapping", "Adds (1-4) to (49-52) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 18, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand4"] = { type = "Prefix", affix = "Crackling", "Adds (2-5) to (69-73) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 26, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand5"] = { type = "Prefix", affix = "Sparking", "Adds (2-8) to (97-102) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 33, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand6"] = { type = "Prefix", affix = "Arcing", "Adds (3-10) to (126-133) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 42, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand7"] = { type = "Prefix", affix = "Shocking", "Adds (5-12) to (164-173) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 51, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand8"] = { type = "Prefix", affix = "Discharging", "Adds (5-17) to (204-216) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 62, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, + ["SpellAddedLightningDamageTwoHand9_"] = { type = "Prefix", affix = "Electrocuting", "Adds (7-20) to (255-270) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 74, group = "SpellAddedLightningDamageTwoHand", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 800, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, ["SpellAddedLightningDamageTwoHandEssence7"] = { type = "Prefix", affix = "Essences", "Adds (6-16) to (201-216) Lightning Damage to Spells", statOrderKey = "1269", statOrder = { 1269 }, level = 82, group = "SpellAddedLightningDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "caster_damage", "damage", "elemental", "lightning", "caster" }, }, - ["LocalAddedChaosDamage1"] = { type = "Prefix", affix = "Malicious", "Adds (56-87) to (105-160) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 83, group = "LocalChaosDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 600, 600, 600, 400, 250, 250, 600, 600, 0 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, + ["LocalAddedChaosDamage1"] = { type = "Prefix", affix = "Malicious", "Adds (56-87) to (105-160) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 83, group = "LocalChaosDamage", weightKey = { "two_hand_weapon", "rapier", "sword", "axe", "sceptre", "mace", "wand", "claw", "dagger", "default", }, weightVal = { 0, 600, 600, 600, 400, 250, 250, 600, 600, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, ["LocalAddedChaosDamageEssence1_"] = { type = "Prefix", affix = "Essences", "Adds (37-59) to (79-103) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 62, group = "LocalChaosDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, ["LocalAddedChaosDamageEssence2__"] = { type = "Prefix", affix = "Essences", "Adds (43-67) to (89-113) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 74, group = "LocalChaosDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, ["LocalAddedChaosDamageEssence3"] = { type = "Prefix", affix = "Essences", "Adds (53-79) to (101-131) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 82, group = "LocalChaosDamage", weightKey = { "default", }, weightVal = { 0 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, - ["LocalAddedChaosDamageTwoHand1"] = { type = "Prefix", affix = "Malicious", "Adds (98-149) to (183-280) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 83, group = "LocalChaosDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 700, 600, 600, 250, 300, 0 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, + ["LocalAddedChaosDamageTwoHand1"] = { type = "Prefix", affix = "Malicious", "Adds (98-149) to (183-280) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 83, group = "LocalChaosDamageTwoHand", weightKey = { "one_hand_weapon", "bow", "sword", "axe", "mace", "staff", "default", }, weightVal = { 0, 700, 600, 600, 250, 300, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, ["LocalAddedChaosDamageTwoHandEssence1"] = { type = "Prefix", affix = "Essences", "Adds (61-103) to (149-193) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 62, group = "LocalChaosDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, ["LocalAddedChaosDamageTwoHandEssence2"] = { type = "Prefix", affix = "Essences", "Adds (73-113) to (163-205) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 74, group = "LocalChaosDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, ["LocalAddedChaosDamageTwoHandEssence3"] = { type = "Prefix", affix = "Essences", "Adds (89-131) to (181-229) Chaos Damage", statOrderKey = "1253", statOrder = { 1253 }, level = 82, group = "LocalChaosDamageTwoHand", weightKey = { "default", }, weightVal = { 0 }, modTags = { "chaos_damage", "damage", "chaos", "attack" }, }, @@ -2419,61 +2419,61 @@ return { ["SupportedByFortifyWeaponUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 1 Fortify", statOrderKey = "415", statOrder = { 415 }, level = 68, group = "SupportedByFortifyWeapon", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 0, 400, 400, 400, 400, 400, 0 }, modTags = { "support", "influence_mod", "gem" }, }, ["SupportedByArcaneSurgeWeaponUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 1 Arcane Surge", statOrderKey = "203", statOrder = { 203 }, level = 68, group = "SupportedByArcaneSurgeWeapon", weightKey = { "grants_2h_support", "staff_shaper", "default", }, weightVal = { 0, 400, 0 }, modTags = { "support", "influence_mod", "gem" }, }, ["SupportedByInspirationWeaponUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 1 Inspiration", statOrderKey = "413", statOrder = { 413 }, level = 68, group = "SupportedByInspirationWeapon", weightKey = { "grants_2h_support", "staff_elder", "warstaff_elder", "default", }, weightVal = { 0, 400, 400, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentMeleePhysicalUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Melee Physical Damage", "(101-115)% increased Physical Damage", statOrderKey = "387,1098", statOrder = { 387, 1098 }, level = 68, group = "LocalPhysicalDamagePercentMeleePhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 400, 400, 400, 400, 400, 400, 400, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentMeleePhysicalUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Melee Physical Damage", "(116-126)% increased Physical Damage", statOrderKey = "387,1098", statOrder = { 387, 1098 }, level = 75, group = "LocalPhysicalDamagePercentMeleePhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 200, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentMeleePhysicalUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Melee Physical Damage", "(127-134)% increased Physical Damage", statOrderKey = "387,1098", statOrder = { 387, 1098 }, level = 80, group = "LocalPhysicalDamagePercentMeleePhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 100, 100, 100, 100, 100, 100, 100, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentBrutalityUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Brutality", "(101-115)% increased Physical Damage", statOrderKey = "212,1098", statOrder = { 212, 1098 }, level = 68, group = "LocalPhysicalDamagePercentBrutality", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 400, 400, 400, 400, 400, 400, 400, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentBrutalityUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Brutality", "(116-126)% increased Physical Damage", statOrderKey = "212,1098", statOrder = { 212, 1098 }, level = 75, group = "LocalPhysicalDamagePercentBrutality", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 200, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentBrutalityUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Brutality", "(127-134)% increased Physical Damage", statOrderKey = "212,1098", statOrder = { 212, 1098 }, level = 80, group = "LocalPhysicalDamagePercentBrutality", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 100, 100, 100, 100, 100, 100, 100, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentAddedFireUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Added Fire Damage", "(101-115)% increased Physical Damage", statOrderKey = "381,1098", statOrder = { 381, 1098 }, level = 68, group = "LocalPhysicalDamagePercentAddedFireDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 400, 400, 400, 400, 400, 400, 400, 400, 0 }, modTags = { "support", "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentAddedFireUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Added Fire Damage", "(116-126)% increased Physical Damage", statOrderKey = "381,1098", statOrder = { 381, 1098 }, level = 75, group = "LocalPhysicalDamagePercentAddedFireDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 200, 200, 0 }, modTags = { "support", "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentAddedFireUber3_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Added Fire Damage", "(127-134)% increased Physical Damage", statOrderKey = "381,1098", statOrder = { 381, 1098 }, level = 80, group = "LocalPhysicalDamagePercentAddedFireDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 100, 100, 100, 100, 100, 100, 100, 100, 0 }, modTags = { "support", "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentRuthlessUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Ruthless", "(101-115)% increased Physical Damage", statOrderKey = "302,1098", statOrder = { 302, 1098 }, level = 68, group = "LocalPhysicalDamagePercentRuthless", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 400, 400, 400, 400, 400, 400, 400, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentRuthlessUber2__"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Ruthless", "(116-126)% increased Physical Damage", statOrderKey = "302,1098", statOrder = { 302, 1098 }, level = 75, group = "LocalPhysicalDamagePercentRuthless", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 200, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentRuthlessUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Ruthless", "(127-134)% increased Physical Damage", statOrderKey = "302,1098", statOrder = { 302, 1098 }, level = 80, group = "LocalPhysicalDamagePercentRuthless", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 100, 100, 100, 100, 100, 100, 100, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentOnslaughtUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Momentum", "(101-115)% increased Physical Damage", statOrderKey = "281,1098", statOrder = { 281, 1098 }, level = 68, group = "LocalPhysicalDamagePercentOnslaught", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentOnslaughtUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Momentum", "(116-126)% increased Physical Damage", statOrderKey = "281,1098", statOrder = { 281, 1098 }, level = 75, group = "LocalPhysicalDamagePercentOnslaught", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentOnslaughtUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Momentum", "(127-134)% increased Physical Damage", statOrderKey = "281,1098", statOrder = { 281, 1098 }, level = 80, group = "LocalPhysicalDamagePercentOnslaught", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentEnduranceChargeOnStunUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Endurance Charge on Melee Stun", "(101-115)% increased Physical Damage", statOrderKey = "443,1098", statOrder = { 443, 1098 }, level = 68, group = "LocalPhysicalDamagePercentEnduranceChargeOnStun", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentEnduranceChargeOnStunUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Endurance Charge on Melee Stun", "(116-126)% increased Physical Damage", statOrderKey = "443,1098", statOrder = { 443, 1098 }, level = 75, group = "LocalPhysicalDamagePercentEnduranceChargeOnStun", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentEnduranceChargeOnStunUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Endurance Charge on Melee Stun", "(127-134)% increased Physical Damage", statOrderKey = "443,1098", statOrder = { 443, 1098 }, level = 80, group = "LocalPhysicalDamagePercentEnduranceChargeOnStun", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentFortifyUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Fortify", "(101-115)% increased Physical Damage", statOrderKey = "415,1098", statOrder = { 415, 1098 }, level = 68, group = "LocalPhysicalDamagePercentFortify", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentFortifyUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Fortify", "(116-126)% increased Physical Damage", statOrderKey = "415,1098", statOrder = { 415, 1098 }, level = 75, group = "LocalPhysicalDamagePercentFortify", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentFortifyUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Fortify", "(127-134)% increased Physical Damage", statOrderKey = "415,1098", statOrder = { 415, 1098 }, level = 80, group = "LocalPhysicalDamagePercentFortify", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentPowerChargeOnCritUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Power Charge On Critical Strike", "(101-115)% increased Physical Damage", statOrderKey = "290,1098", statOrder = { 290, 1098 }, level = 68, group = "LocalIncreasedPhysicalDamagePercentPowerChargeOnCrit", weightKey = { "grants_2h_support", "staff_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentPowerChargeOnCritUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Power Charge On Critical Strike", "(116-126)% increased Physical Damage", statOrderKey = "290,1098", statOrder = { 290, 1098 }, level = 75, group = "LocalIncreasedPhysicalDamagePercentPowerChargeOnCrit", weightKey = { "grants_2h_support", "staff_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentPowerChargeOnCritUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Power Charge On Critical Strike", "(127-134)% increased Physical Damage", statOrderKey = "290,1098", statOrder = { 290, 1098 }, level = 80, group = "LocalIncreasedPhysicalDamagePercentPowerChargeOnCrit", weightKey = { "grants_2h_support", "staff_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentIronGripUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Iron Grip", "(101-115)% increased Physical Damage", statOrderKey = "264,1098", statOrder = { 264, 1098 }, level = 68, group = "LocalIncreasedPhysicalDamagePercentIronGrip", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentIronGripUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Iron Grip", "(116-126)% increased Physical Damage", statOrderKey = "264,1098", statOrder = { 264, 1098 }, level = 75, group = "LocalIncreasedPhysicalDamagePercentIronGrip", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentIronGripUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Iron Grip", "(127-134)% increased Physical Damage", statOrderKey = "264,1098", statOrder = { 264, 1098 }, level = 80, group = "LocalIncreasedPhysicalDamagePercentIronGrip", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentFasterProjectilesUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are supported by Level 16 Faster Projectiles", "(101-115)% increased Physical Damage", statOrderKey = "401,1098", statOrder = { 401, 1098 }, level = 68, group = "LocalIncreasedPhysicalDamagePercentFasterProjectiles", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentFasterProjectilesUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are supported by Level 18 Faster Projectiles", "(116-126)% increased Physical Damage", statOrderKey = "401,1098", statOrder = { 401, 1098 }, level = 75, group = "LocalIncreasedPhysicalDamagePercentFasterProjectiles", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentFasterProjectilesUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are supported by Level 20 Faster Projectiles", "(127-134)% increased Physical Damage", statOrderKey = "401,1098", statOrder = { 401, 1098 }, level = 80, group = "LocalIncreasedPhysicalDamagePercentFasterProjectiles", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentProjectileAttackDamageUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Vicious Projectiles", "(101-115)% increased Physical Damage", statOrderKey = "285,1098", statOrder = { 285, 1098 }, level = 68, group = "LocalIncreasedPhysicalDamagePercentProjectileAttackDamage", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentProjectileAttackDamageUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Vicious Projectiles", "(116-126)% increased Physical Damage", statOrderKey = "285,1098", statOrder = { 285, 1098 }, level = 75, group = "LocalIncreasedPhysicalDamagePercentProjectileAttackDamage", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["LocalIncreasedPhysicalDamagePercentProjectileAttackDamageUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Vicious Projectiles", "(127-134)% increased Physical Damage", statOrderKey = "285,1098", statOrder = { 285, 1098 }, level = 80, group = "LocalIncreasedPhysicalDamagePercentProjectileAttackDamage", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, - ["SupportedByMeleeSplashDamageUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are supported by Level 16 Melee Splash", "(23-27)% increased Area Damage", statOrderKey = "390,1889", statOrder = { 390, 1889 }, level = 68, group = "SupportedByMeleeSplashDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["SupportedByMeleeSplashDamageUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are supported by Level 18 Melee Splash", "(28-32)% increased Area Damage", statOrderKey = "390,1889", statOrder = { 390, 1889 }, level = 75, group = "SupportedByMeleeSplashDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["SupportedByMeleeSplashDamageUber3"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are supported by Level 20 Melee Splash", "(33-37)% increased Area Damage", statOrderKey = "390,1889", statOrder = { 390, 1889 }, level = 80, group = "SupportedByMeleeSplashDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["SupportedBySpiritStrikeAreaUber1_"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 16 Ancestral Call", "(5-8)% increased Area of Effect", statOrderKey = "313,1739", statOrder = { 313, 1739 }, level = 68, group = "SupportedBySpiritStrikeArea", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["SupportedBySpiritStrikeAreaUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Ancestral Call", "(9-12)% increased Area of Effect", statOrderKey = "313,1739", statOrder = { 313, 1739 }, level = 75, group = "SupportedBySpiritStrikeArea", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["SupportedBySpiritStrikeAreaUber3"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Ancestral Call", "(13-15)% increased Area of Effect", statOrderKey = "313,1739", statOrder = { 313, 1739 }, level = 80, group = "SupportedBySpiritStrikeArea", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["LocalIncreasedAttackSpeedMultistrikeUber1_"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are supported by Level 18 Multistrike", "(17-19)% increased Attack Speed", statOrderKey = "400,1276", statOrder = { 400, 1276 }, level = 68, group = "LocalIncreasedAttackSpeedMultistrike", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, - ["LocalIncreasedAttackSpeedMultistrikeUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are supported by Level 20 Multistrike", "(20-21)% increased Attack Speed", statOrderKey = "400,1276", statOrder = { 400, 1276 }, level = 75, group = "LocalIncreasedAttackSpeedMultistrike", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, - ["LocalIncreasedAttackSpeedFasterAttacksUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Faster Attacks", "(17-19)% increased Attack Speed", statOrderKey = "388,1276", statOrder = { 388, 1276 }, level = 68, group = "LocalIncreasedAttackSpeedFasterAttacks", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, - ["LocalIncreasedAttackSpeedFasterAttacksUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Faster Attacks", "(20-21)% increased Attack Speed", statOrderKey = "388,1276", statOrder = { 388, 1276 }, level = 75, group = "LocalIncreasedAttackSpeedFasterAttacks", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, - ["LocalIncreasedAttackSpeedRangedOnslaughtUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Momentum", "(8-10)% increased Attack Speed", statOrderKey = "281,1276", statOrder = { 281, 1276 }, level = 68, group = "LocalIncreasedAttackSpeedOnslaught", weightKey = { "wand_elder", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, - ["LocalIncreasedAttackSpeedRangedOnslaughtUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Momentum", "(11-12)% increased Attack Speed", statOrderKey = "281,1276", statOrder = { 281, 1276 }, level = 75, group = "LocalIncreasedAttackSpeedOnslaught", weightKey = { "wand_elder", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, - ["LocalIncreasedAttackSpeedRangedFasterAttacksUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Faster Attacks", "(8-10)% increased Attack Speed", statOrderKey = "388,1276", statOrder = { 388, 1276 }, level = 68, group = "LocalIncreasedAttackSpeedFasterAttacks", weightKey = { "wand_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, - ["LocalIncreasedAttackSpeedRangedFasterAttacksUber2_"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Faster Attacks", "(11-12)% increased Attack Speed", statOrderKey = "388,1276", statOrder = { 388, 1276 }, level = 75, group = "LocalIncreasedAttackSpeedFasterAttacks", weightKey = { "wand_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, - ["LocalIncreasedAttackSpeedTwoHandedDoubleDamageUber1"] = { type = "Suffix", affix = "of Shaping", "(17-19)% increased Attack Speed", "(4-6)% chance to deal Double Damage", statOrderKey = "1276,5249", statOrder = { 1276, 5249 }, level = 68, group = "AttackSpeedDoubleDamage", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "2h_mace_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "damage", "attack", "speed" }, }, - ["LocalIncreasedAttackSpeedTwoHandedDoubleDamageUber2"] = { type = "Suffix", affix = "of Shaping", "(20-21)% increased Attack Speed", "(4-6)% chance to deal Double Damage", statOrderKey = "1276,5249", statOrder = { 1276, 5249 }, level = 75, group = "AttackSpeedDoubleDamage", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "2h_mace_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "damage", "attack", "speed" }, }, - ["LocalIncreasedAttackSpeedTwoHandedKilledRecentlyUber1"] = { type = "Suffix", affix = "of the Elder", "(17-19)% increased Attack Speed", "20% increased Attack Speed if you've Killed Recently", statOrderKey = "1276,4614", statOrder = { 1276, 4614 }, level = 68, group = "AttackSpeedKilledRecently", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "attack", "speed" }, }, - ["LocalIncreasedAttackSpeedTwoHandedKilledRecentlyUber2"] = { type = "Suffix", affix = "of the Elder", "(20-21)% increased Attack Speed", "20% increased Attack Speed if you've Killed Recently", statOrderKey = "1276,4614", statOrder = { 1276, 4614 }, level = 75, group = "AttackSpeedKilledRecently", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "attack", "speed" }, }, - ["LocalIncreasedAttackSpeedRangedDoubleDamageUber1"] = { type = "Suffix", affix = "of Shaping", "(8-10)% increased Attack Speed", "(4-6)% chance to deal Double Damage", statOrderKey = "1276,5249", statOrder = { 1276, 5249 }, level = 68, group = "AttackSpeedDoubleDamage", weightKey = { "bow_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "influence_mod", "damage", "attack", "speed" }, }, - ["LocalIncreasedAttackSpeedRangedDoubleDamageUber2"] = { type = "Suffix", affix = "of Shaping", "(11-12)% increased Attack Speed", "(4-6)% chance to deal Double Damage", statOrderKey = "1276,5249", statOrder = { 1276, 5249 }, level = 75, group = "AttackSpeedDoubleDamage", weightKey = { "bow_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "influence_mod", "damage", "attack", "speed" }, }, - ["LocalIncreasedAttackSpeedRangedKilledRecentlyUber1"] = { type = "Suffix", affix = "of the Elder", "(8-10)% increased Attack Speed", "20% increased Attack Speed if you've Killed Recently", statOrderKey = "1276,4614", statOrder = { 1276, 4614 }, level = 68, group = "AttackSpeedKilledRecently", weightKey = { "bow_elder", "default", }, weightVal = { 1000, 0 }, modTags = { "influence_mod", "attack", "speed" }, }, - ["LocalIncreasedAttackSpeedRangedKilledRecentlyUber2"] = { type = "Suffix", affix = "of the Elder", "(11-12)% increased Attack Speed", "20% increased Attack Speed if you've Killed Recently", statOrderKey = "1276,4614", statOrder = { 1276, 4614 }, level = 75, group = "AttackSpeedKilledRecently", weightKey = { "bow_elder", "default", }, weightVal = { 1000, 0 }, modTags = { "influence_mod", "attack", "speed" }, }, + ["LocalIncreasedPhysicalDamagePercentMeleePhysicalUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Melee Physical Damage", "(101-115)% increased Physical Damage", statOrderKey = "387,1098", statOrder = { 387, 1098 }, level = 68, group = "LocalPhysicalDamagePercentMeleePhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 400, 400, 400, 400, 400, 400, 400, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentMeleePhysicalUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Melee Physical Damage", "(116-126)% increased Physical Damage", statOrderKey = "387,1098", statOrder = { 387, 1098 }, level = 75, group = "LocalPhysicalDamagePercentMeleePhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentMeleePhysicalUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Melee Physical Damage", "(127-134)% increased Physical Damage", statOrderKey = "387,1098", statOrder = { 387, 1098 }, level = 80, group = "LocalPhysicalDamagePercentMeleePhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 100, 100, 100, 100, 100, 100, 100, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentBrutalityUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Brutality", "(101-115)% increased Physical Damage", statOrderKey = "212,1098", statOrder = { 212, 1098 }, level = 68, group = "LocalPhysicalDamagePercentBrutality", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 400, 400, 400, 400, 400, 400, 400, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentBrutalityUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Brutality", "(116-126)% increased Physical Damage", statOrderKey = "212,1098", statOrder = { 212, 1098 }, level = 75, group = "LocalPhysicalDamagePercentBrutality", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentBrutalityUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Brutality", "(127-134)% increased Physical Damage", statOrderKey = "212,1098", statOrder = { 212, 1098 }, level = 80, group = "LocalPhysicalDamagePercentBrutality", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 100, 100, 100, 100, 100, 100, 100, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentAddedFireUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Added Fire Damage", "(101-115)% increased Physical Damage", statOrderKey = "381,1098", statOrder = { 381, 1098 }, level = 68, group = "LocalPhysicalDamagePercentAddedFireDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 400, 400, 400, 400, 400, 400, 400, 400, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentAddedFireUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Added Fire Damage", "(116-126)% increased Physical Damage", statOrderKey = "381,1098", statOrder = { 381, 1098 }, level = 75, group = "LocalPhysicalDamagePercentAddedFireDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentAddedFireUber3_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Added Fire Damage", "(127-134)% increased Physical Damage", statOrderKey = "381,1098", statOrder = { 381, 1098 }, level = 80, group = "LocalPhysicalDamagePercentAddedFireDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 100, 100, 100, 100, 100, 100, 100, 100, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentRuthlessUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Ruthless", "(101-115)% increased Physical Damage", statOrderKey = "302,1098", statOrder = { 302, 1098 }, level = 68, group = "LocalPhysicalDamagePercentRuthless", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 400, 400, 400, 400, 400, 400, 400, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentRuthlessUber2__"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Ruthless", "(116-126)% increased Physical Damage", statOrderKey = "302,1098", statOrder = { 302, 1098 }, level = 75, group = "LocalPhysicalDamagePercentRuthless", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentRuthlessUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Ruthless", "(127-134)% increased Physical Damage", statOrderKey = "302,1098", statOrder = { 302, 1098 }, level = 80, group = "LocalPhysicalDamagePercentRuthless", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 100, 100, 100, 100, 100, 100, 100, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentOnslaughtUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Momentum", "(101-115)% increased Physical Damage", statOrderKey = "281,1098", statOrder = { 281, 1098 }, level = 68, group = "LocalPhysicalDamagePercentOnslaught", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentOnslaughtUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Momentum", "(116-126)% increased Physical Damage", statOrderKey = "281,1098", statOrder = { 281, 1098 }, level = 75, group = "LocalPhysicalDamagePercentOnslaught", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentOnslaughtUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Momentum", "(127-134)% increased Physical Damage", statOrderKey = "281,1098", statOrder = { 281, 1098 }, level = 80, group = "LocalPhysicalDamagePercentOnslaught", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentEnduranceChargeOnStunUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Endurance Charge on Melee Stun", "(101-115)% increased Physical Damage", statOrderKey = "443,1098", statOrder = { 443, 1098 }, level = 68, group = "LocalPhysicalDamagePercentEnduranceChargeOnStun", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentEnduranceChargeOnStunUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Endurance Charge on Melee Stun", "(116-126)% increased Physical Damage", statOrderKey = "443,1098", statOrder = { 443, 1098 }, level = 75, group = "LocalPhysicalDamagePercentEnduranceChargeOnStun", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentEnduranceChargeOnStunUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Endurance Charge on Melee Stun", "(127-134)% increased Physical Damage", statOrderKey = "443,1098", statOrder = { 443, 1098 }, level = 80, group = "LocalPhysicalDamagePercentEnduranceChargeOnStun", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentFortifyUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Fortify", "(101-115)% increased Physical Damage", statOrderKey = "415,1098", statOrder = { 415, 1098 }, level = 68, group = "LocalPhysicalDamagePercentFortify", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentFortifyUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Fortify", "(116-126)% increased Physical Damage", statOrderKey = "415,1098", statOrder = { 415, 1098 }, level = 75, group = "LocalPhysicalDamagePercentFortify", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentFortifyUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Fortify", "(127-134)% increased Physical Damage", statOrderKey = "415,1098", statOrder = { 415, 1098 }, level = 80, group = "LocalPhysicalDamagePercentFortify", weightKey = { "grants_2h_support", "2h_sword_elder", "2h_axe_elder", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentPowerChargeOnCritUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Power Charge On Critical Strike", "(101-115)% increased Physical Damage", statOrderKey = "290,1098", statOrder = { 290, 1098 }, level = 68, group = "LocalIncreasedPhysicalDamagePercentPowerChargeOnCrit", weightKey = { "grants_2h_support", "staff_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentPowerChargeOnCritUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Power Charge On Critical Strike", "(116-126)% increased Physical Damage", statOrderKey = "290,1098", statOrder = { 290, 1098 }, level = 75, group = "LocalIncreasedPhysicalDamagePercentPowerChargeOnCrit", weightKey = { "grants_2h_support", "staff_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentPowerChargeOnCritUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Power Charge On Critical Strike", "(127-134)% increased Physical Damage", statOrderKey = "290,1098", statOrder = { 290, 1098 }, level = 80, group = "LocalIncreasedPhysicalDamagePercentPowerChargeOnCrit", weightKey = { "grants_2h_support", "staff_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentIronGripUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Iron Grip", "(101-115)% increased Physical Damage", statOrderKey = "264,1098", statOrder = { 264, 1098 }, level = 68, group = "LocalIncreasedPhysicalDamagePercentIronGrip", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentIronGripUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Iron Grip", "(116-126)% increased Physical Damage", statOrderKey = "264,1098", statOrder = { 264, 1098 }, level = 75, group = "LocalIncreasedPhysicalDamagePercentIronGrip", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentIronGripUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Iron Grip", "(127-134)% increased Physical Damage", statOrderKey = "264,1098", statOrder = { 264, 1098 }, level = 80, group = "LocalIncreasedPhysicalDamagePercentIronGrip", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentFasterProjectilesUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are supported by Level 16 Faster Projectiles", "(101-115)% increased Physical Damage", statOrderKey = "401,1098", statOrder = { 401, 1098 }, level = 68, group = "LocalIncreasedPhysicalDamagePercentFasterProjectiles", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentFasterProjectilesUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are supported by Level 18 Faster Projectiles", "(116-126)% increased Physical Damage", statOrderKey = "401,1098", statOrder = { 401, 1098 }, level = 75, group = "LocalIncreasedPhysicalDamagePercentFasterProjectiles", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentFasterProjectilesUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are supported by Level 20 Faster Projectiles", "(127-134)% increased Physical Damage", statOrderKey = "401,1098", statOrder = { 401, 1098 }, level = 80, group = "LocalIncreasedPhysicalDamagePercentFasterProjectiles", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentProjectileAttackDamageUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Vicious Projectiles", "(101-115)% increased Physical Damage", statOrderKey = "285,1098", statOrder = { 285, 1098 }, level = 68, group = "LocalIncreasedPhysicalDamagePercentProjectileAttackDamage", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentProjectileAttackDamageUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Vicious Projectiles", "(116-126)% increased Physical Damage", statOrderKey = "285,1098", statOrder = { 285, 1098 }, level = 75, group = "LocalIncreasedPhysicalDamagePercentProjectileAttackDamage", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["LocalIncreasedPhysicalDamagePercentProjectileAttackDamageUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Vicious Projectiles", "(127-134)% increased Physical Damage", statOrderKey = "285,1098", statOrder = { 285, 1098 }, level = 80, group = "LocalIncreasedPhysicalDamagePercentProjectileAttackDamage", weightKey = { "grants_2h_support", "bow_elder", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "physical_damage", "influence_mod", "damage", "physical", "attack", "gem" }, }, + ["SupportedByMeleeSplashDamageUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are supported by Level 16 Melee Splash", "(23-27)% increased Area Damage", statOrderKey = "390,1889", statOrder = { 390, 1889 }, level = 68, group = "SupportedByMeleeSplashDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "gem" }, }, + ["SupportedByMeleeSplashDamageUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are supported by Level 18 Melee Splash", "(28-32)% increased Area Damage", statOrderKey = "390,1889", statOrder = { 390, 1889 }, level = 75, group = "SupportedByMeleeSplashDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "gem" }, }, + ["SupportedByMeleeSplashDamageUber3"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are supported by Level 20 Melee Splash", "(33-37)% increased Area Damage", statOrderKey = "390,1889", statOrder = { 390, 1889 }, level = 80, group = "SupportedByMeleeSplashDamage", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "gem" }, }, + ["SupportedBySpiritStrikeAreaUber1_"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 16 Ancestral Call", "(5-8)% increased Area of Effect", statOrderKey = "313,1739", statOrder = { 313, 1739 }, level = 68, group = "SupportedBySpiritStrikeArea", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "gem" }, }, + ["SupportedBySpiritStrikeAreaUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Ancestral Call", "(9-12)% increased Area of Effect", statOrderKey = "313,1739", statOrder = { 313, 1739 }, level = 75, group = "SupportedBySpiritStrikeArea", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "gem" }, }, + ["SupportedBySpiritStrikeAreaUber3"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Ancestral Call", "(13-15)% increased Area of Effect", statOrderKey = "313,1739", statOrder = { 313, 1739 }, level = 80, group = "SupportedBySpiritStrikeArea", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "gem" }, }, + ["LocalIncreasedAttackSpeedMultistrikeUber1_"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are supported by Level 18 Multistrike", "(17-19)% increased Attack Speed", statOrderKey = "400,1276", statOrder = { 400, 1276 }, level = 68, group = "LocalIncreasedAttackSpeedMultistrike", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, + ["LocalIncreasedAttackSpeedMultistrikeUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are supported by Level 20 Multistrike", "(20-21)% increased Attack Speed", statOrderKey = "400,1276", statOrder = { 400, 1276 }, level = 75, group = "LocalIncreasedAttackSpeedMultistrike", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, + ["LocalIncreasedAttackSpeedFasterAttacksUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Faster Attacks", "(17-19)% increased Attack Speed", statOrderKey = "388,1276", statOrder = { 388, 1276 }, level = 68, group = "LocalIncreasedAttackSpeedFasterAttacks", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, + ["LocalIncreasedAttackSpeedFasterAttacksUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Faster Attacks", "(20-21)% increased Attack Speed", statOrderKey = "388,1276", statOrder = { 388, 1276 }, level = 75, group = "LocalIncreasedAttackSpeedFasterAttacks", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, + ["LocalIncreasedAttackSpeedRangedOnslaughtUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Momentum", "(8-10)% increased Attack Speed", statOrderKey = "281,1276", statOrder = { 281, 1276 }, level = 68, group = "LocalIncreasedAttackSpeedOnslaught", weightKey = { "wand_elder", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, + ["LocalIncreasedAttackSpeedRangedOnslaughtUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Momentum", "(11-12)% increased Attack Speed", statOrderKey = "281,1276", statOrder = { 281, 1276 }, level = 75, group = "LocalIncreasedAttackSpeedOnslaught", weightKey = { "wand_elder", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, + ["LocalIncreasedAttackSpeedRangedFasterAttacksUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Faster Attacks", "(8-10)% increased Attack Speed", statOrderKey = "388,1276", statOrder = { 388, 1276 }, level = 68, group = "LocalIncreasedAttackSpeedFasterAttacks", weightKey = { "wand_shaper", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, + ["LocalIncreasedAttackSpeedRangedFasterAttacksUber2_"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Faster Attacks", "(11-12)% increased Attack Speed", statOrderKey = "388,1276", statOrder = { 388, 1276 }, level = 75, group = "LocalIncreasedAttackSpeedFasterAttacks", weightKey = { "wand_shaper", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "influence_mod", "attack", "speed", "gem" }, }, + ["LocalIncreasedAttackSpeedTwoHandedDoubleDamageUber1"] = { type = "Suffix", affix = "of Shaping", "(17-19)% increased Attack Speed", "(4-6)% chance to deal Double Damage", statOrderKey = "1276,5249", statOrder = { 1276, 5249 }, level = 68, group = "AttackSpeedDoubleDamage", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "2h_mace_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "damage", "attack", "speed" }, }, + ["LocalIncreasedAttackSpeedTwoHandedDoubleDamageUber2"] = { type = "Suffix", affix = "of Shaping", "(20-21)% increased Attack Speed", "(4-6)% chance to deal Double Damage", statOrderKey = "1276,5249", statOrder = { 1276, 5249 }, level = 75, group = "AttackSpeedDoubleDamage", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "2h_mace_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "damage", "attack", "speed" }, }, + ["LocalIncreasedAttackSpeedTwoHandedKilledRecentlyUber1"] = { type = "Suffix", affix = "of the Elder", "(17-19)% increased Attack Speed", "20% increased Attack Speed if you've Killed Recently", statOrderKey = "1276,4614", statOrder = { 1276, 4614 }, level = 68, group = "AttackSpeedKilledRecently", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack", "speed" }, }, + ["LocalIncreasedAttackSpeedTwoHandedKilledRecentlyUber2"] = { type = "Suffix", affix = "of the Elder", "(20-21)% increased Attack Speed", "20% increased Attack Speed if you've Killed Recently", statOrderKey = "1276,4614", statOrder = { 1276, 4614 }, level = 75, group = "AttackSpeedKilledRecently", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack", "speed" }, }, + ["LocalIncreasedAttackSpeedRangedDoubleDamageUber1"] = { type = "Suffix", affix = "of Shaping", "(8-10)% increased Attack Speed", "(4-6)% chance to deal Double Damage", statOrderKey = "1276,5249", statOrder = { 1276, 5249 }, level = 68, group = "AttackSpeedDoubleDamage", weightKey = { "bow_shaper", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "damage", "attack", "speed" }, }, + ["LocalIncreasedAttackSpeedRangedDoubleDamageUber2"] = { type = "Suffix", affix = "of Shaping", "(11-12)% increased Attack Speed", "(4-6)% chance to deal Double Damage", statOrderKey = "1276,5249", statOrder = { 1276, 5249 }, level = 75, group = "AttackSpeedDoubleDamage", weightKey = { "bow_shaper", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "damage", "attack", "speed" }, }, + ["LocalIncreasedAttackSpeedRangedKilledRecentlyUber1"] = { type = "Suffix", affix = "of the Elder", "(8-10)% increased Attack Speed", "20% increased Attack Speed if you've Killed Recently", statOrderKey = "1276,4614", statOrder = { 1276, 4614 }, level = 68, group = "AttackSpeedKilledRecently", weightKey = { "bow_elder", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack", "speed" }, }, + ["LocalIncreasedAttackSpeedRangedKilledRecentlyUber2"] = { type = "Suffix", affix = "of the Elder", "(11-12)% increased Attack Speed", "20% increased Attack Speed if you've Killed Recently", statOrderKey = "1276,4614", statOrder = { 1276, 4614 }, level = 75, group = "AttackSpeedKilledRecently", weightKey = { "bow_elder", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack", "speed" }, }, ["CriticalStrikeChanceSupportedUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Increased Critical Strikes", "(22-25)% increased Critical Strike Chance", statOrderKey = "260,1326", statOrder = { 260, 1326 }, level = 68, group = "CriticalStrikeChanceSupported", weightKey = { "grants_crit_chance_support", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 0, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "attack", "critical", "gem" }, }, ["CriticalStrikeChanceSupportedUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Increased Critical Strikes", "(26-29)% increased Critical Strike Chance", statOrderKey = "260,1326", statOrder = { 260, 1326 }, level = 75, group = "CriticalStrikeChanceSupported", weightKey = { "grants_crit_chance_support", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 0, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "attack", "critical", "gem" }, }, ["CriticalStrikeChanceTwoHandedCritChanceRecentlyUber1_"] = { type = "Suffix", affix = "of Shaping", "(22-25)% increased Critical Strike Chance", "50% increased Critical Strike Chance if you have Killed Recently", statOrderKey = "1326,5503", statOrder = { 1326, 5503 }, level = 68, group = "CriticalStrikeChanceTwoHandedCritChanceRecently", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "2h_mace_shaper", "staff_shaper", "warstaff_shaper", "bow_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "attack", "critical" }, }, @@ -2484,14 +2484,14 @@ return { ["CriticalMultiplierSupportedUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are supported by Level 20 Increased Critical Damage", "+(26-29)% to Global Critical Strike Multiplier", statOrderKey = "404,1350", statOrder = { 404, 1350 }, level = 75, group = "CriticalStrikeMultiplierSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "damage", "attack", "critical", "gem" }, }, ["CriticalMultiplierSupportedTwoHandedUber1"] = { type = "Suffix", affix = "of Shaping", "+(22-25)% to Global Critical Strike Multiplier", "(5-8)% chance to gain a Power Charge on Critical Strike", statOrderKey = "1350,1689", statOrder = { 1350, 1689 }, level = 68, group = "CriticalMultiplierSupportedTwoHanded", weightKey = { "bow_shaper", "default", }, weightVal = { 500, 0 }, modTags = { "power_charge", "influence_mod", "damage", "attack", "critical" }, }, ["CriticalMultiplierSupportedTwoHandedUber2"] = { type = "Suffix", affix = "of Shaping", "+(26-29)% to Global Critical Strike Multiplier", "(9-10)% chance to gain a Power Charge on Critical Strike", statOrderKey = "1350,1689", statOrder = { 1350, 1689 }, level = 75, group = "CriticalMultiplierSupportedTwoHanded", weightKey = { "bow_shaper", "default", }, weightVal = { 500, 0 }, modTags = { "power_charge", "influence_mod", "damage", "attack", "critical" }, }, - ["WeaponElementalDamageSupportedUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are supported by Level 18 Elemental Damage with Attacks", "(28-32)% increased Elemental Damage with Attack Skills", statOrderKey = "406,5876", statOrder = { 406, 5876 }, level = 68, group = "IncreasedWeaponElementalDamagePercentSupported", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 500, 500, 500, 500, 500, 500, 500, 500, 0 }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "attack", "gem" }, }, - ["WeaponElementalDamageSupportedUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are supported by Level 20 Elemental Damage with Attacks", "(33-37)% increased Elemental Damage with Attack Skills", statOrderKey = "406,5876", statOrder = { 406, 5876 }, level = 75, group = "IncreasedWeaponElementalDamagePercentSupported", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 500, 500, 500, 500, 500, 500, 500, 500, 0 }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "attack", "gem" }, }, - ["ChanceToMaimUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Maim", "15% chance to Maim on Hit", statOrderKey = "271,7421", statOrder = { 271, 7421 }, level = 68, group = "ChanceToMaimSupported", weightKey = { "grants_2h_support", "2h_mace_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 0, 0, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "attack", "gem" }, }, - ["ChanceToMaimUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Maim", "20% chance to Maim on Hit", statOrderKey = "271,7421", statOrder = { 271, 7421 }, level = 75, group = "ChanceToMaimSupported", weightKey = { "grants_2h_support", "2h_mace_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 0, 0, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "attack", "gem" }, }, - ["ChanceToPoisonUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Chance to Poison", "15% chance to Poison on Hit", statOrderKey = "440,7433", statOrder = { 440, 7433 }, level = 68, group = "ChanceToPoisonSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "poison", "influence_mod", "chaos", "attack", "ailment", "gem" }, }, - ["ChanceToPoisonUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Chance to Poison", "20% chance to Poison on Hit", statOrderKey = "440,7433", statOrder = { 440, 7433 }, level = 75, group = "ChanceToPoisonSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "poison", "influence_mod", "chaos", "attack", "ailment", "gem" }, }, - ["ChanceToBleedUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Chance To Bleed", "10% chance to cause Bleeding on Hit", statOrderKey = "218,2334", statOrder = { 218, 2334 }, level = 68, group = "ChanceToBleedSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "bleed", "influence_mod", "physical", "attack", "ailment", "gem" }, }, - ["ChanceToBleedUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Chance To Bleed", "15% chance to cause Bleeding on Hit", statOrderKey = "218,2334", statOrder = { 218, 2334 }, level = 75, group = "ChanceToBleedSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "bleed", "influence_mod", "physical", "attack", "ailment", "gem" }, }, + ["WeaponElementalDamageSupportedUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are supported by Level 18 Elemental Damage with Attacks", "(28-32)% increased Elemental Damage with Attack Skills", statOrderKey = "406,5876", statOrder = { 406, 5876 }, level = 68, group = "IncreasedWeaponElementalDamagePercentSupported", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 500, 500, 500, 500, 500, 500, 500, 500, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "attack", "gem" }, }, + ["WeaponElementalDamageSupportedUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are supported by Level 20 Elemental Damage with Attacks", "(33-37)% increased Elemental Damage with Attack Skills", statOrderKey = "406,5876", statOrder = { 406, 5876 }, level = 75, group = "IncreasedWeaponElementalDamagePercentSupported", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 500, 500, 500, 500, 500, 500, 500, 500, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "attack", "gem" }, }, + ["ChanceToMaimUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Maim", "15% chance to Maim on Hit", statOrderKey = "271,7421", statOrder = { 271, 7421 }, level = 68, group = "ChanceToMaimSupported", weightKey = { "grants_2h_support", "2h_mace_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 0, 0, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "influence_mod", "attack", "gem" }, }, + ["ChanceToMaimUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Maim", "20% chance to Maim on Hit", statOrderKey = "271,7421", statOrder = { 271, 7421 }, level = 75, group = "ChanceToMaimSupported", weightKey = { "grants_2h_support", "2h_mace_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "dagger_shaper", "rune_dagger_shaper", "default", }, weightVal = { 0, 0, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", "grants_2h_support", }, modTags = { "support", "influence_mod", "attack", "gem" }, }, + ["ChanceToPoisonUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Chance to Poison", "15% chance to Poison on Hit", statOrderKey = "440,7433", statOrder = { 440, 7433 }, level = 68, group = "ChanceToPoisonSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "poison", "influence_mod", "chaos", "attack", "ailment", "gem" }, }, + ["ChanceToPoisonUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Chance to Poison", "20% chance to Poison on Hit", statOrderKey = "440,7433", statOrder = { 440, 7433 }, level = 75, group = "ChanceToPoisonSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "poison", "influence_mod", "chaos", "attack", "ailment", "gem" }, }, + ["ChanceToBleedUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Chance To Bleed", "10% chance to cause Bleeding on Hit", statOrderKey = "218,2334", statOrder = { 218, 2334 }, level = 68, group = "ChanceToBleedSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "bleed", "influence_mod", "physical", "attack", "ailment", "gem" }, }, + ["ChanceToBleedUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Chance To Bleed", "15% chance to cause Bleeding on Hit", statOrderKey = "218,2334", statOrder = { 218, 2334 }, level = 75, group = "ChanceToBleedSupported", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "dagger_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "support", "bleed", "influence_mod", "physical", "attack", "ailment", "gem" }, }, ["PhysicalAddedAsFireUber1_"] = { type = "Prefix", affix = "The Shaper's", "Gain (7-12)% of Physical Damage as Extra Fire Damage", statOrderKey = "1789", statOrder = { 1789 }, level = 68, group = "PhysicalAddedAsFire", weightKey = { "2h_sword_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "sceptre_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire" }, }, ["PhysicalAddedAsFireUber2"] = { type = "Prefix", affix = "The Shaper's", "Gain (13-17)% of Physical Damage as Extra Fire Damage", statOrderKey = "1789", statOrder = { 1789 }, level = 75, group = "PhysicalAddedAsFire", weightKey = { "2h_sword_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "sceptre_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire" }, }, ["PhysicalAddedAsFireUber3"] = { type = "Prefix", affix = "The Shaper's", "Gain (18-20)% of Physical Damage as Extra Fire Damage", statOrderKey = "1789", statOrder = { 1789 }, level = 80, group = "PhysicalAddedAsFire", weightKey = { "2h_sword_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "sceptre_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "elemental_damage", "influence_mod", "damage", "physical", "elemental", "fire" }, }, @@ -2507,18 +2507,18 @@ return { ["UnholyMightOnKillUber1"] = { type = "Suffix", affix = "of the Elder", "(5-6)% chance to gain Unholy Might for 3 seconds on Kill", statOrderKey = "3217", statOrder = { 3217 }, level = 68, group = "UnholyMightOnKillPercentChance", weightKey = { "claw_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "influence_mod" }, }, ["UnholyMightOnKillUber2_"] = { type = "Suffix", affix = "of the Elder", "(7-8)% chance to gain Unholy Might for 3 seconds on Kill", statOrderKey = "3217", statOrder = { 3217 }, level = 75, group = "UnholyMightOnKillPercentChance", weightKey = { "claw_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "influence_mod" }, }, ["UnholyMightOnKillUber3"] = { type = "Suffix", affix = "of the Elder", "(9-10)% chance to gain Unholy Might for 3 seconds on Kill", statOrderKey = "3217", statOrder = { 3217 }, level = 84, group = "UnholyMightOnKillPercentChance", weightKey = { "claw_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "influence_mod" }, }, - ["BlindOnHitUber1"] = { type = "Suffix", affix = "of the Elder", "(5-6)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 68, group = "AttacksBlindOnHitChance", weightKey = { "bow_elder", "2h_axe_elder", "2h_sword_elder", "sword_elder", "axe_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "attack" }, }, - ["BlindOnHitUber2"] = { type = "Suffix", affix = "of the Elder", "(7-8)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 75, group = "AttacksBlindOnHitChance", weightKey = { "bow_elder", "2h_axe_elder", "2h_sword_elder", "sword_elder", "axe_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "attack" }, }, - ["BlindOnHitUber3"] = { type = "Suffix", affix = "of the Elder", "(9-10)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 81, group = "AttacksBlindOnHitChance", weightKey = { "bow_elder", "2h_axe_elder", "2h_sword_elder", "sword_elder", "axe_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "attack" }, }, - ["BlindOnHitShaperUber1"] = { type = "Suffix", affix = "of Shaping", "(5-6)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 68, group = "AttacksBlindOnHitChance", weightKey = { "quiver_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "influence_mod", "attack" }, }, - ["BlindOnHitShaperUber2"] = { type = "Suffix", affix = "of Shaping", "(7-8)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 75, group = "AttacksBlindOnHitChance", weightKey = { "quiver_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "influence_mod", "attack" }, }, - ["BlindOnHitShaperUber3"] = { type = "Suffix", affix = "of Shaping", "(9-10)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 81, group = "AttacksBlindOnHitChance", weightKey = { "quiver_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "influence_mod", "attack" }, }, + ["BlindOnHitUber1"] = { type = "Suffix", affix = "of the Elder", "(5-6)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 68, group = "AttacksBlindOnHitChance", weightKey = { "bow_elder", "2h_axe_elder", "2h_sword_elder", "sword_elder", "axe_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack" }, }, + ["BlindOnHitUber2"] = { type = "Suffix", affix = "of the Elder", "(7-8)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 75, group = "AttacksBlindOnHitChance", weightKey = { "bow_elder", "2h_axe_elder", "2h_sword_elder", "sword_elder", "axe_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack" }, }, + ["BlindOnHitUber3"] = { type = "Suffix", affix = "of the Elder", "(9-10)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 81, group = "AttacksBlindOnHitChance", weightKey = { "bow_elder", "2h_axe_elder", "2h_sword_elder", "sword_elder", "axe_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack" }, }, + ["BlindOnHitShaperUber1"] = { type = "Suffix", affix = "of Shaping", "(5-6)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 68, group = "AttacksBlindOnHitChance", weightKey = { "quiver_shaper", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack" }, }, + ["BlindOnHitShaperUber2"] = { type = "Suffix", affix = "of Shaping", "(7-8)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 75, group = "AttacksBlindOnHitChance", weightKey = { "quiver_shaper", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack" }, }, + ["BlindOnHitShaperUber3"] = { type = "Suffix", affix = "of Shaping", "(9-10)% chance to Blind Enemies on Hit with Attacks", statOrderKey = "4635", statOrder = { 4635 }, level = 81, group = "AttacksBlindOnHitChance", weightKey = { "quiver_shaper", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack" }, }, ["BlockWhileDualWieldingUber1"] = { type = "Suffix", affix = "of Shaping", "+(2-4)% Chance to Block Attack Damage while Dual Wielding", statOrderKey = "1029", statOrder = { 1029 }, level = 68, group = "BlockWhileDualWielding", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "block", "influence_mod" }, }, ["BlockWhileDualWieldingUber2"] = { type = "Suffix", affix = "of Shaping", "+(5-7)% Chance to Block Attack Damage while Dual Wielding", statOrderKey = "1029", statOrder = { 1029 }, level = 75, group = "BlockWhileDualWielding", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "block", "influence_mod" }, }, ["BlockWhileDualWieldingUber3_"] = { type = "Suffix", affix = "of Shaping", "+(8-9)% Chance to Block Attack Damage while Dual Wielding", statOrderKey = "1029", statOrder = { 1029 }, level = 80, group = "BlockWhileDualWielding", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "block", "influence_mod" }, }, - ["PhysicalDamageWhileDualWieldingUber1"] = { type = "Suffix", affix = "of the Elder", "(23-27)% increased Physical Attack Damage while Dual Wielding", statOrderKey = "1143", statOrder = { 1143 }, level = 68, group = "DualWieldingPhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "influence_mod", "damage", "physical", "attack" }, }, - ["PhysicalDamageWhileDualWieldingUber2"] = { type = "Suffix", affix = "of the Elder", "(28-32)% increased Physical Attack Damage while Dual Wielding", statOrderKey = "1143", statOrder = { 1143 }, level = 75, group = "DualWieldingPhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "influence_mod", "damage", "physical", "attack" }, }, - ["PhysicalDamageWhileDualWieldingUber3"] = { type = "Suffix", affix = "of the Elder", "(33-37)% increased Physical Attack Damage while Dual Wielding", statOrderKey = "1143", statOrder = { 1143 }, level = 80, group = "DualWieldingPhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "influence_mod", "damage", "physical", "attack" }, }, + ["PhysicalDamageWhileDualWieldingUber1"] = { type = "Suffix", affix = "of the Elder", "(23-27)% increased Physical Attack Damage while Dual Wielding", statOrderKey = "1143", statOrder = { 1143 }, level = 68, group = "DualWieldingPhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "influence_mod", "damage", "physical", "attack" }, }, + ["PhysicalDamageWhileDualWieldingUber2"] = { type = "Suffix", affix = "of the Elder", "(28-32)% increased Physical Attack Damage while Dual Wielding", statOrderKey = "1143", statOrder = { 1143 }, level = 75, group = "DualWieldingPhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "influence_mod", "damage", "physical", "attack" }, }, + ["PhysicalDamageWhileDualWieldingUber3"] = { type = "Suffix", affix = "of the Elder", "(33-37)% increased Physical Attack Damage while Dual Wielding", statOrderKey = "1143", statOrder = { 1143 }, level = 80, group = "DualWieldingPhysicalDamage", weightKey = { "sword_elder", "axe_elder", "mace_elder", "claw_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "physical_damage", "influence_mod", "damage", "physical", "attack" }, }, ["ElementalPenetrationWeaponUber1"] = { type = "Suffix", affix = "of Shaping", "Damage Penetrates (5-6)% Elemental Resistances", statOrderKey = "2826", statOrder = { 2826 }, level = 68, group = "ElementalPenetration", weightKey = { "bow_shaper", "2h_axe_shaper", "2h_mace_shaper", "2h_sword_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "wand_shaper", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental" }, }, ["ElementalPenetrationWeaponUber2"] = { type = "Suffix", affix = "of Shaping", "Damage Penetrates (7-8)% Elemental Resistances", statOrderKey = "2826", statOrder = { 2826 }, level = 75, group = "ElementalPenetration", weightKey = { "bow_shaper", "2h_axe_shaper", "2h_mace_shaper", "2h_sword_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "wand_shaper", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental" }, }, ["ElementalPenetrationWeaponUber3"] = { type = "Suffix", affix = "of Shaping", "Damage Penetrates (9-10)% Elemental Resistances", statOrderKey = "2826", statOrder = { 2826 }, level = 83, group = "ElementalPenetration", weightKey = { "bow_shaper", "2h_axe_shaper", "2h_mace_shaper", "2h_sword_shaper", "sword_shaper", "axe_shaper", "mace_shaper", "claw_shaper", "sceptre_shaper", "dagger_shaper", "wand_shaper", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental" }, }, @@ -2543,12 +2543,12 @@ return { ["PhysicalDamageConvertedToChaosUber1"] = { type = "Suffix", affix = "of the Elder", "(10-15)% of Physical Damage Converted to Chaos Damage", statOrderKey = "1819", statOrder = { 1819 }, level = 68, group = "PhysicalDamageConvertedToChaos", weightKey = { "bow_elder", "2h_axe_elder", "2h_mace_elder", "2h_sword_elder", "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "wand_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "chaos_damage", "influence_mod", "damage", "physical", "chaos" }, }, ["PhysicalDamageConvertedToChaosUber2"] = { type = "Suffix", affix = "of the Elder", "(16-20)% of Physical Damage Converted to Chaos Damage", statOrderKey = "1819", statOrder = { 1819 }, level = 75, group = "PhysicalDamageConvertedToChaos", weightKey = { "bow_elder", "2h_axe_elder", "2h_mace_elder", "2h_sword_elder", "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "wand_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "chaos_damage", "influence_mod", "damage", "physical", "chaos" }, }, ["PhysicalDamageConvertedToChaosUber3"] = { type = "Suffix", affix = "of the Elder", "(21-25)% of Physical Damage Converted to Chaos Damage", statOrderKey = "1819", statOrder = { 1819 }, level = 85, group = "PhysicalDamageConvertedToChaos", weightKey = { "bow_elder", "2h_axe_elder", "2h_mace_elder", "2h_sword_elder", "sword_elder", "axe_elder", "mace_elder", "claw_elder", "sceptre_elder", "dagger_elder", "rune_dagger_elder", "wand_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "chaos_damage", "influence_mod", "damage", "physical", "chaos" }, }, - ["AddedFireDamagePerStrengthUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds (1-2) to (3-4) Fire Damage to Attacks with this Weapon per 10 Strength", statOrderKey = "4590", statOrder = { 4590 }, level = 68, group = "AddedFireDamagePerStrength", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "sceptre_shaper", "default", }, weightVal = { 200, 200, 200, 200, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "fire", "attack" }, }, - ["AddedFireDamagePerStrengthTwoHandedUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds (2-3) to (4-5) Fire Damage to Attacks with this Weapon per 10 Strength", statOrderKey = "4590", statOrder = { 4590 }, level = 68, group = "AddedFireDamagePerStrength", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "2h_mace_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 200, 200, 200, 200, 200, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "fire", "attack" }, }, - ["AddedColdDamagePerDexterityUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds (1-2) to (3-4) Cold Damage to Attacks with this Weapon per 10 Dexterity", statOrderKey = "4644", statOrder = { 4644 }, level = 68, group = "AddedColdDamagePerDexterity", weightKey = { "sword_shaper", "axe_shaper", "claw_shaper", "dagger_shaper", "rune_dagger_shaper", "bow_shaper", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "cold", "attack" }, }, - ["AddedColdDamagePerDexterityTwoHandedUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds (2-3) to (4-5) Cold Damage to Attacks with this Weapon per 10 Dexterity", statOrderKey = "4644", statOrder = { 4644 }, level = 68, group = "AddedColdDamagePerDexterity", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "default", }, weightVal = { 200, 200, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "cold", "attack" }, }, - ["AddedLightningDamagePerIntelligenceUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds 1 to (5-6) Lightning Damage to Attacks with this Weapon per 10 Intelligence", statOrderKey = "4593", statOrder = { 4593 }, level = 68, group = "AddedLightningDamagePerIntelligence", weightKey = { "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 200, 200, 200, 200, 200, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "lightning", "attack" }, }, - ["AddedLightningDamagePerIntelligenceTwoHandedUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds 1 to (7-8) Lightning Damage to Attacks with this Weapon per 10 Intelligence", statOrderKey = "4593", statOrder = { 4593 }, level = 68, group = "AddedLightningDamagePerIntelligence", weightKey = { "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 200, 200, 0 }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "lightning", "attack" }, }, + ["AddedFireDamagePerStrengthUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds (1-2) to (3-4) Fire Damage to Attacks with this Weapon per 10 Strength", statOrderKey = "4590", statOrder = { 4590 }, level = 68, group = "AddedFireDamagePerStrength", weightKey = { "sword_shaper", "axe_shaper", "mace_shaper", "sceptre_shaper", "default", }, weightVal = { 200, 200, 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "fire", "attack" }, }, + ["AddedFireDamagePerStrengthTwoHandedUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds (2-3) to (4-5) Fire Damage to Attacks with this Weapon per 10 Strength", statOrderKey = "4590", statOrder = { 4590 }, level = 68, group = "AddedFireDamagePerStrength", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "2h_mace_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 200, 200, 200, 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "fire", "attack" }, }, + ["AddedColdDamagePerDexterityUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds (1-2) to (3-4) Cold Damage to Attacks with this Weapon per 10 Dexterity", statOrderKey = "4644", statOrder = { 4644 }, level = 68, group = "AddedColdDamagePerDexterity", weightKey = { "sword_shaper", "axe_shaper", "claw_shaper", "dagger_shaper", "rune_dagger_shaper", "bow_shaper", "default", }, weightVal = { 200, 200, 200, 200, 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "cold", "attack" }, }, + ["AddedColdDamagePerDexterityTwoHandedUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds (2-3) to (4-5) Cold Damage to Attacks with this Weapon per 10 Dexterity", statOrderKey = "4644", statOrder = { 4644 }, level = 68, group = "AddedColdDamagePerDexterity", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "default", }, weightVal = { 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "cold", "attack" }, }, + ["AddedLightningDamagePerIntelligenceUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds 1 to (5-6) Lightning Damage to Attacks with this Weapon per 10 Intelligence", statOrderKey = "4593", statOrder = { 4593 }, level = 68, group = "AddedLightningDamagePerIntelligence", weightKey = { "claw_shaper", "sceptre_shaper", "dagger_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 200, 200, 200, 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "lightning", "attack" }, }, + ["AddedLightningDamagePerIntelligenceTwoHandedUber1"] = { type = "Prefix", affix = "The Shaper's", "Adds 1 to (7-8) Lightning Damage to Attacks with this Weapon per 10 Intelligence", statOrderKey = "4593", statOrder = { 4593 }, level = 68, group = "AddedLightningDamagePerIntelligence", weightKey = { "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 200, 200, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "elemental_damage", "influence_mod", "damage", "elemental", "lightning", "attack" }, }, ["SupportedByCastOnCritUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are supported by Level 18 Cast On Critical Strike", statOrderKey = "391", statOrder = { 391 }, level = 68, group = "SupportedByCastOnCritWeapon", weightKey = { "grants_2h_support", "bow_shaper", "2h_axe_shaper", "2h_sword_shaper", "default", }, weightVal = { 0, 350, 350, 350, 0 }, modTags = { "support", "influence_mod", "gem" }, }, ["SupportedByCastOnCritUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are supported by Level 20 Cast On Critical Strike", statOrderKey = "391", statOrder = { 391 }, level = 75, group = "SupportedByCastOnCritWeapon", weightKey = { "grants_2h_support", "bow_shaper", "2h_axe_shaper", "2h_sword_shaper", "default", }, weightVal = { 0, 350, 350, 350, 0 }, modTags = { "support", "influence_mod", "gem" }, }, ["SupportedByCastOnMeleeKillUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Cast On Melee Kill", statOrderKey = "215", statOrder = { 215 }, level = 68, group = "SupportedByCastOnMeleeKillWeapon", weightKey = { "grants_2h_support", "2h_mace_shaper", "2h_axe_shaper", "2h_sword_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 0, 250, 250, 250, 250, 250, 0 }, modTags = { "support", "influence_mod", "gem" }, }, @@ -2556,8 +2556,8 @@ return { ["SupportedByCastWhileChannellingUber1_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Cast While Channelling", statOrderKey = "216", statOrder = { 216 }, level = 68, group = "SupportedByCastWhileChannellingWeapon", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 0, 0, 500, 500, 0 }, modTags = { "support", "influence_mod", "gem" }, }, ["SupportedByCastWhileChannellingUber2_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Cast While Channelling", statOrderKey = "216", statOrder = { 216 }, level = 75, group = "SupportedByCastWhileChannellingWeapon", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 0, 0, 500, 500, 0 }, modTags = { "support", "influence_mod", "gem" }, }, ["CullingStrikeUber1"] = { type = "Suffix", affix = "of the Elder", "Culling Strike", statOrderKey = "1893", statOrder = { 1893 }, level = 68, group = "CullingStrike", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "bow_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod" }, }, - ["MeleeWeaponRangeUber1"] = { type = "Suffix", affix = "of the Elder", "+0.1 metres to Weapon Range", statOrderKey = "2594", statOrder = { 2594 }, level = 75, group = "LocalWeaponRangeUber", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "attack" }, }, - ["MeleeWeaponRangeUber2"] = { type = "Suffix", affix = "of the Elder", "+0.2 metres to Weapon Range", statOrderKey = "2594", statOrder = { 2594 }, level = 85, group = "LocalWeaponRangeUber", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod", "attack" }, }, + ["MeleeWeaponRangeUber1"] = { type = "Suffix", affix = "of the Elder", "+0.1 metres to Weapon Range", statOrderKey = "2594", statOrder = { 2594 }, level = 75, group = "LocalWeaponRangeUber", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack" }, }, + ["MeleeWeaponRangeUber2"] = { type = "Suffix", affix = "of the Elder", "+0.2 metres to Weapon Range", statOrderKey = "2594", statOrder = { 2594 }, level = 85, group = "LocalWeaponRangeUber", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_attack_mod", "has_caster_mod", "default", }, weightMultiplierVal = { 100, 65, 100 }, tags = { "has_attack_mod", }, modTags = { "influence_mod", "attack" }, }, ["AreaOfEffectTwoHandedWeaponUber1"] = { type = "Suffix", affix = "of the Elder", "(5-10)% increased Area of Effect", statOrderKey = "1739", statOrder = { 1739 }, level = 68, group = "AreaOfEffect", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "bow_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod" }, }, ["AreaOfEffectTwoHandedWeaponUber2"] = { type = "Suffix", affix = "of the Elder", "(11-15)% increased Area of Effect", statOrderKey = "1739", statOrder = { 1739 }, level = 75, group = "AreaOfEffect", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "bow_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod" }, }, ["AreaOfEffectTwoHandedWeaponUber3"] = { type = "Suffix", affix = "of the Elder", "(16-20)% increased Area of Effect", statOrderKey = "1739", statOrder = { 1739 }, level = 82, group = "AreaOfEffect", weightKey = { "2h_sword_elder", "2h_axe_elder", "2h_mace_elder", "bow_elder", "staff_elder", "warstaff_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "influence_mod" }, }, @@ -2566,21 +2566,21 @@ return { ["AdditionalArrowsUber1"] = { type = "Suffix", affix = "of the Elder", "Skills fire an additional Projectile", statOrderKey = "1651", statOrder = { 1651 }, level = 82, group = "AdditionalProjectiles", weightKey = { "2h_sword_elder", "2h_axe_elder", "staff_elder", "warstaff_elder", "bow_elder", "default", }, weightVal = { 500, 500, 500, 500, 500, 0 }, modTags = { "influence_mod" }, }, ["AdditionalPierceRangedUber1"] = { type = "Suffix", affix = "of Shaping", "Projectiles Pierce an additional Target", statOrderKey = "1649", statOrder = { 1649 }, level = 68, group = "AdditionalPierce", weightKey = { "bow_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 0 }, modTags = { "influence_mod" }, }, ["AdditionalPierceRangedUber2"] = { type = "Suffix", affix = "of Shaping", "Projectiles Pierce 2 additional Targets", statOrderKey = "1649", statOrder = { 1649 }, level = 75, group = "AdditionalPierce", weightKey = { "bow_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 0 }, modTags = { "influence_mod" }, }, - ["SpellDamageOnWeaponControlledDestructionUber1_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Controlled Destruction", "(45-52)% increased Spell Damage", statOrderKey = "442,1090", statOrder = { 442, 1090 }, level = 68, group = "WeaponSpellDamageControlledDestruction", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 400, 400, 400, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponControlledDestructionUber2_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Controlled Destruction", "(53-56)% increased Spell Damage", statOrderKey = "442,1090", statOrder = { 442, 1090 }, level = 75, group = "WeaponSpellDamageControlledDestruction", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 200, 200, 200, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponControlledDestructionUber3"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Controlled Destruction", "(57-60)% increased Spell Damage", statOrderKey = "442,1090", statOrder = { 442, 1090 }, level = 80, group = "WeaponSpellDamageControlledDestruction", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 100, 100, 100, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponEfficacyUber1_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Efficacy", "(45-52)% increased Spell Damage", statOrderKey = "232,1090", statOrder = { 232, 1090 }, level = 68, group = "WeaponSpellDamageEfficacy", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 400, 400, 400, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponEfficacyUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Efficacy", "(53-56)% increased Spell Damage", statOrderKey = "232,1090", statOrder = { 232, 1090 }, level = 75, group = "WeaponSpellDamageEfficacy", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 200, 200, 200, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponEfficacyUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Efficacy", "(57-60)% increased Spell Damage", statOrderKey = "232,1090", statOrder = { 232, 1090 }, level = 80, group = "WeaponSpellDamageEfficacy", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 100, 100, 100, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponArcaneSurgeUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Arcane Surge", "(67-78)% increased Spell Damage", statOrderKey = "203,1090", statOrder = { 203, 1090 }, level = 68, group = "WeaponSpellDamageArcaneSurge", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponArcaneSurgeUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Arcane Surge", "(79-83)% increased Spell Damage", statOrderKey = "203,1090", statOrder = { 203, 1090 }, level = 75, group = "WeaponSpellDamageArcaneSurge", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponArcaneSurgeUber3"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Arcane Surge", "(84-87)% increased Spell Damage", statOrderKey = "203,1090", statOrder = { 203, 1090 }, level = 80, group = "WeaponSpellDamageArcaneSurge", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponReducedManaUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Inspiration", "(67-78)% increased Spell Damage", statOrderKey = "413,1090", statOrder = { 413, 1090 }, level = 68, group = "WeaponSpellDamageReducedMana", weightKey = { "grants_2h_support", "attack_staff", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponReducedManaUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Inspiration", "(79-83)% increased Spell Damage", statOrderKey = "413,1090", statOrder = { 413, 1090 }, level = 75, group = "WeaponSpellDamageReducedMana", weightKey = { "grants_2h_support", "attack_staff", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponReducedManaUber3__"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Inspiration", "(84-87)% increased Spell Damage", statOrderKey = "413,1090", statOrder = { 413, 1090 }, level = 80, group = "WeaponSpellDamageReducedMana", weightKey = { "grants_2h_support", "attack_staff", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponPowerChargeOnCritUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Power Charge On Critical Strike", "(67-78)% increased Spell Damage", statOrderKey = "290,1090", statOrder = { 290, 1090 }, level = 68, group = "WeaponSpellDamagePowerChargeOnCrit", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponPowerChargeOnCritUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Power Charge On Critical Strike", "(79-83)% increased Spell Damage", statOrderKey = "290,1090", statOrder = { 290, 1090 }, level = 75, group = "WeaponSpellDamagePowerChargeOnCrit", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, - ["SpellDamageOnWeaponPowerChargeOnCritUber3_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Power Charge On Critical Strike", "(84-87)% increased Spell Damage", statOrderKey = "290,1090", statOrder = { 290, 1090 }, level = 80, group = "WeaponSpellDamagePowerChargeOnCrit", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponControlledDestructionUber1_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Controlled Destruction", "(45-52)% increased Spell Damage", statOrderKey = "442,1090", statOrder = { 442, 1090 }, level = 68, group = "WeaponSpellDamageControlledDestruction", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 400, 400, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponControlledDestructionUber2_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Controlled Destruction", "(53-56)% increased Spell Damage", statOrderKey = "442,1090", statOrder = { 442, 1090 }, level = 75, group = "WeaponSpellDamageControlledDestruction", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 200, 200, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponControlledDestructionUber3"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Controlled Destruction", "(57-60)% increased Spell Damage", statOrderKey = "442,1090", statOrder = { 442, 1090 }, level = 80, group = "WeaponSpellDamageControlledDestruction", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 100, 100, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponEfficacyUber1_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Efficacy", "(45-52)% increased Spell Damage", statOrderKey = "232,1090", statOrder = { 232, 1090 }, level = 68, group = "WeaponSpellDamageEfficacy", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 400, 400, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponEfficacyUber2"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Efficacy", "(53-56)% increased Spell Damage", statOrderKey = "232,1090", statOrder = { 232, 1090 }, level = 75, group = "WeaponSpellDamageEfficacy", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 200, 200, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponEfficacyUber3"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Efficacy", "(57-60)% increased Spell Damage", statOrderKey = "232,1090", statOrder = { 232, 1090 }, level = 80, group = "WeaponSpellDamageEfficacy", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 100, 100, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponArcaneSurgeUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Arcane Surge", "(67-78)% increased Spell Damage", statOrderKey = "203,1090", statOrder = { 203, 1090 }, level = 68, group = "WeaponSpellDamageArcaneSurge", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponArcaneSurgeUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Arcane Surge", "(79-83)% increased Spell Damage", statOrderKey = "203,1090", statOrder = { 203, 1090 }, level = 75, group = "WeaponSpellDamageArcaneSurge", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponArcaneSurgeUber3"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Arcane Surge", "(84-87)% increased Spell Damage", statOrderKey = "203,1090", statOrder = { 203, 1090 }, level = 80, group = "WeaponSpellDamageArcaneSurge", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponReducedManaUber1"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 16 Inspiration", "(67-78)% increased Spell Damage", statOrderKey = "413,1090", statOrder = { 413, 1090 }, level = 68, group = "WeaponSpellDamageReducedMana", weightKey = { "grants_2h_support", "attack_staff", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponReducedManaUber2_"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 18 Inspiration", "(79-83)% increased Spell Damage", statOrderKey = "413,1090", statOrder = { 413, 1090 }, level = 75, group = "WeaponSpellDamageReducedMana", weightKey = { "grants_2h_support", "attack_staff", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponReducedManaUber3__"] = { type = "Prefix", affix = "The Elder's", "Socketed Gems are Supported by Level 20 Inspiration", "(84-87)% increased Spell Damage", statOrderKey = "413,1090", statOrder = { 413, 1090 }, level = 80, group = "WeaponSpellDamageReducedMana", weightKey = { "grants_2h_support", "attack_staff", "staff_elder", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponPowerChargeOnCritUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Power Charge On Critical Strike", "(67-78)% increased Spell Damage", statOrderKey = "290,1090", statOrder = { 290, 1090 }, level = 68, group = "WeaponSpellDamagePowerChargeOnCrit", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponPowerChargeOnCritUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Power Charge On Critical Strike", "(79-83)% increased Spell Damage", statOrderKey = "290,1090", statOrder = { 290, 1090 }, level = 75, group = "WeaponSpellDamagePowerChargeOnCrit", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, + ["SpellDamageOnWeaponPowerChargeOnCritUber3_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Power Charge On Critical Strike", "(84-87)% increased Spell Damage", statOrderKey = "290,1090", statOrder = { 290, 1090 }, level = 80, group = "WeaponSpellDamagePowerChargeOnCrit", weightKey = { "grants_2h_support", "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 0, 0, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_2h_support", }, modTags = { "support", "caster_damage", "influence_mod", "damage", "caster", "gem" }, }, ["ElementalDamagePrefixOnWeaponElementalFocusUber1_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Elemental Focus", "(45-52)% increased Elemental Damage", statOrderKey = "233,1835", statOrder = { 233, 1835 }, level = 68, group = "ElementalDamagePrefixElementalFocus", weightKey = { "sceptre_shaper", "default", }, weightVal = { 400, 0 }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "gem" }, }, ["ElementalDamagePrefixOnWeaponElementalFocusUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Elemental Focus", "(53-56)% increased Elemental Damage", statOrderKey = "233,1835", statOrder = { 233, 1835 }, level = 75, group = "ElementalDamagePrefixElementalFocus", weightKey = { "sceptre_shaper", "default", }, weightVal = { 200, 0 }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "gem" }, }, ["ElementalDamagePrefixOnWeaponElementalFocusUber3"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Elemental Focus", "(57-60)% increased Elemental Damage", statOrderKey = "233,1835", statOrder = { 233, 1835 }, level = 80, group = "ElementalDamagePrefixElementalFocus", weightKey = { "sceptre_shaper", "default", }, weightVal = { 100, 0 }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "gem" }, }, @@ -2593,18 +2593,18 @@ return { ["LightningDamagePrefixOnWeaponLightningPenetrationUber1"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 16 Lightning Penetration", "(45-52)% increased Lightning Damage", statOrderKey = "269,1241", statOrder = { 269, 1241 }, level = 68, group = "LightningDamagePrefixLightningPenetration", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 400, 400, 400, 0 }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "lightning", "gem" }, }, ["LightningDamagePrefixOnWeaponLightningPenetrationUber2"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 18 Lightning Penetration", "(53-56)% increased Lightning Damage", statOrderKey = "269,1241", statOrder = { 269, 1241 }, level = 75, group = "LightningDamagePrefixLightningPenetration", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 200, 200, 200, 0 }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "lightning", "gem" }, }, ["LightningDamagePrefixOnWeaponLightningPenetrationUber3_"] = { type = "Prefix", affix = "The Shaper's", "Socketed Gems are Supported by Level 20 Lightning Penetration", "(57-60)% increased Lightning Damage", statOrderKey = "269,1241", statOrder = { 269, 1241 }, level = 80, group = "LightningDamagePrefixLightningPenetration", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 100, 100, 100, 0 }, modTags = { "support", "elemental_damage", "influence_mod", "damage", "elemental", "lightning", "gem" }, }, - ["IncreasedCastSpeedSpellEchoUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Spell Echo", "(15-17)% increased Cast Speed", statOrderKey = "279,1308", statOrder = { 279, 1308 }, level = 68, group = "IncreasedCastSpeedSpellEcho", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "caster", "speed", "gem" }, }, - ["IncreasedCastSpeedSpellEchoUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Spell Echo", "(18-20)% increased Cast Speed", statOrderKey = "279,1308", statOrder = { 279, 1308 }, level = 75, group = "IncreasedCastSpeedSpellEcho", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "support", "influence_mod", "caster", "speed", "gem" }, }, - ["IncreasedCastSpeedFasterCastingUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Faster Casting", "(15-17)% increased Cast Speed", statOrderKey = "418,1308", statOrder = { 418, 1308 }, level = 68, group = "IncreasedCastSpeedFasterCasting", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "caster", "speed", "gem" }, }, - ["IncreasedCastSpeedFasterCastingUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Faster Casting", "(18-20)% increased Cast Speed", statOrderKey = "418,1308", statOrder = { 418, 1308 }, level = 75, group = "IncreasedCastSpeedFasterCasting", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 500, 500, 500, 0 }, modTags = { "support", "influence_mod", "caster", "speed", "gem" }, }, - ["IncreasedCastSpeedTwoHandedAvoidInterruptionUber1"] = { type = "Suffix", affix = "of the Elder", "(15-17)% increased Cast Speed", "(15-25)% chance to Ignore Stuns while Casting", statOrderKey = "1308,1757", statOrder = { 1308, 1757 }, level = 68, group = "IncreasedCastSpeedTwoHandedAvoidInterruption", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "influence_mod", "caster", "speed" }, }, - ["IncreasedCastSpeedTwoHandedAvoidInterruptionUber2"] = { type = "Suffix", affix = "of the Elder", "(18-20)% increased Cast Speed", "(26-35)% chance to Ignore Stuns while Casting", statOrderKey = "1308,1757", statOrder = { 1308, 1757 }, level = 75, group = "IncreasedCastSpeedTwoHandedAvoidInterruption", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 500, 0 }, modTags = { "influence_mod", "caster", "speed" }, }, - ["IncreasedCastSpeedTwoHandedKilledRecentlyUber1"] = { type = "Suffix", affix = "of Shaping", "(15-17)% increased Cast Speed", "20% increased Cast Speed if you've Killed Recently", statOrderKey = "1308,5054", statOrder = { 1308, 5054 }, level = 68, group = "IncreasedCastSpeedTwoHandedKilledRecently", weightKey = { "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "influence_mod", "caster", "speed" }, }, - ["IncreasedCastSpeedTwoHandedKilledRecentlyUber2"] = { type = "Suffix", affix = "of Shaping", "(18-20)% increased Cast Speed", "20% increased Cast Speed if you've Killed Recently", statOrderKey = "1308,5054", statOrder = { 1308, 5054 }, level = 75, group = "IncreasedCastSpeedTwoHandedKilledRecently", weightKey = { "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 500, 0 }, modTags = { "influence_mod", "caster", "speed" }, }, - ["CriticalStrikeChanceSpellsSupportedUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Increased Critical Strikes", "(60-74)% increased Spell Critical Strike Chance", statOrderKey = "260,1320", statOrder = { 260, 1320 }, level = 68, group = "CriticalStrikeChanceSpellsSupported", weightKey = { "grants_crit_chance_support", "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 0, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "caster", "critical", "gem" }, }, - ["CriticalStrikeChanceSpellsSupportedUber2__"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Increased Critical Strikes", "(75-82)% increased Spell Critical Strike Chance", statOrderKey = "260,1320", statOrder = { 260, 1320 }, level = 75, group = "CriticalStrikeChanceSpellsSupported", weightKey = { "grants_crit_chance_support", "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 0, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "caster", "critical", "gem" }, }, - ["CriticalStrikeChanceSpellsTwoHandedPowerChargeUber1"] = { type = "Suffix", affix = "of Shaping", "(60-74)% increased Spell Critical Strike Chance", "10% chance to gain a Power Charge on Critical Strike", statOrderKey = "1320,1689", statOrder = { 1320, 1689 }, level = 68, group = "CriticalStrikeChanceSpellsTwoHandedPowerCharge", weightKey = { "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "power_charge", "influence_mod", "caster", "critical" }, }, - ["CriticalStrikeChanceSpellsTwoHandedPowerChargeUber2"] = { type = "Suffix", affix = "of Shaping", "(75-82)% increased Spell Critical Strike Chance", "10% chance to gain a Power Charge on Critical Strike", statOrderKey = "1320,1689", statOrder = { 1320, 1689 }, level = 75, group = "CriticalStrikeChanceSpellsTwoHandedPowerCharge", weightKey = { "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "power_charge", "influence_mod", "caster", "critical" }, }, + ["IncreasedCastSpeedSpellEchoUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Spell Echo", "(15-17)% increased Cast Speed", statOrderKey = "279,1308", statOrder = { 279, 1308 }, level = 68, group = "IncreasedCastSpeedSpellEcho", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "influence_mod", "caster", "speed", "gem" }, }, + ["IncreasedCastSpeedSpellEchoUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Spell Echo", "(18-20)% increased Cast Speed", statOrderKey = "279,1308", statOrder = { 279, 1308 }, level = 75, group = "IncreasedCastSpeedSpellEcho", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "influence_mod", "caster", "speed", "gem" }, }, + ["IncreasedCastSpeedFasterCastingUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Faster Casting", "(15-17)% increased Cast Speed", statOrderKey = "418,1308", statOrder = { 418, 1308 }, level = 68, group = "IncreasedCastSpeedFasterCasting", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "influence_mod", "caster", "speed", "gem" }, }, + ["IncreasedCastSpeedFasterCastingUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Faster Casting", "(18-20)% increased Cast Speed", statOrderKey = "418,1308", statOrder = { 418, 1308 }, level = 75, group = "IncreasedCastSpeedFasterCasting", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 500, 500, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "influence_mod", "caster", "speed", "gem" }, }, + ["IncreasedCastSpeedTwoHandedAvoidInterruptionUber1"] = { type = "Suffix", affix = "of the Elder", "(15-17)% increased Cast Speed", "(15-25)% chance to Ignore Stuns while Casting", statOrderKey = "1308,1757", statOrder = { 1308, 1757 }, level = 68, group = "IncreasedCastSpeedTwoHandedAvoidInterruption", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "influence_mod", "caster", "speed" }, }, + ["IncreasedCastSpeedTwoHandedAvoidInterruptionUber2"] = { type = "Suffix", affix = "of the Elder", "(18-20)% increased Cast Speed", "(26-35)% chance to Ignore Stuns while Casting", statOrderKey = "1308,1757", statOrder = { 1308, 1757 }, level = 75, group = "IncreasedCastSpeedTwoHandedAvoidInterruption", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "influence_mod", "caster", "speed" }, }, + ["IncreasedCastSpeedTwoHandedKilledRecentlyUber1"] = { type = "Suffix", affix = "of Shaping", "(15-17)% increased Cast Speed", "20% increased Cast Speed if you've Killed Recently", statOrderKey = "1308,5054", statOrder = { 1308, 5054 }, level = 68, group = "IncreasedCastSpeedTwoHandedKilledRecently", weightKey = { "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "influence_mod", "caster", "speed" }, }, + ["IncreasedCastSpeedTwoHandedKilledRecentlyUber2"] = { type = "Suffix", affix = "of Shaping", "(18-20)% increased Cast Speed", "20% increased Cast Speed if you've Killed Recently", statOrderKey = "1308,5054", statOrder = { 1308, 5054 }, level = 75, group = "IncreasedCastSpeedTwoHandedKilledRecently", weightKey = { "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 500, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "influence_mod", "caster", "speed" }, }, + ["CriticalStrikeChanceSpellsSupportedUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Increased Critical Strikes", "(60-74)% increased Spell Critical Strike Chance", statOrderKey = "260,1320", statOrder = { 260, 1320 }, level = 68, group = "CriticalStrikeChanceSpellsSupported", weightKey = { "grants_crit_chance_support", "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 0, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_crit_chance_support", }, modTags = { "support", "influence_mod", "caster", "critical", "gem" }, }, + ["CriticalStrikeChanceSpellsSupportedUber2__"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Increased Critical Strikes", "(75-82)% increased Spell Critical Strike Chance", statOrderKey = "260,1320", statOrder = { 260, 1320 }, level = 75, group = "CriticalStrikeChanceSpellsSupported", weightKey = { "grants_crit_chance_support", "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 0, 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", "grants_crit_chance_support", }, modTags = { "support", "influence_mod", "caster", "critical", "gem" }, }, + ["CriticalStrikeChanceSpellsTwoHandedPowerChargeUber1"] = { type = "Suffix", affix = "of Shaping", "(60-74)% increased Spell Critical Strike Chance", "10% chance to gain a Power Charge on Critical Strike", statOrderKey = "1320,1689", statOrder = { 1320, 1689 }, level = 68, group = "CriticalStrikeChanceSpellsTwoHandedPowerCharge", weightKey = { "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "power_charge", "influence_mod", "caster", "critical" }, }, + ["CriticalStrikeChanceSpellsTwoHandedPowerChargeUber2"] = { type = "Suffix", affix = "of Shaping", "(75-82)% increased Spell Critical Strike Chance", "10% chance to gain a Power Charge on Critical Strike", statOrderKey = "1320,1689", statOrder = { 1320, 1689 }, level = 75, group = "CriticalStrikeChanceSpellsTwoHandedPowerCharge", weightKey = { "attack_staff", "staff_shaper", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "power_charge", "influence_mod", "caster", "critical" }, }, ["ChanceToFreezeShockIgniteProliferationUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Elemental Proliferation", "(5-7)% chance to Freeze, Shock and Ignite", statOrderKey = "385,2650", statOrder = { 385, 2650 }, level = 68, group = "ChanceToFreezeShockIgniteProliferation", weightKey = { "sceptre_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "elemental", "fire", "cold", "lightning", "ailment", "gem" }, }, ["ChanceToFreezeShockIgniteProliferationUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Elemental Proliferation", "(8-10)% chance to Freeze, Shock and Ignite", statOrderKey = "385,2650", statOrder = { 385, 2650 }, level = 75, group = "ChanceToFreezeShockIgniteProliferation", weightKey = { "sceptre_shaper", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "elemental", "fire", "cold", "lightning", "ailment", "gem" }, }, ["ChanceToFreezeShockIgniteUnboundAilmentsUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Unbound Ailments", "(5-7)% chance to Freeze, Shock and Ignite", statOrderKey = "322,2650", statOrder = { 322, 2650 }, level = 68, group = "ChanceToFreezeShockIgniteUnboundAilments", weightKey = { "sceptre_elder", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "elemental", "fire", "cold", "lightning", "ailment", "gem" }, }, @@ -2616,9 +2616,9 @@ return { ["SupportedByIncreasedAreaOfEffectDamageUber1_"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 16 Increased Area of Effect", "(23-27)% increased Area Damage", statOrderKey = "202,1889", statOrder = { 202, 1889 }, level = 68, group = "SupportedByIncreasedAreaOfEffectDamage", weightKey = { "sceptre_elder", "dagger_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "damage", "gem" }, }, ["SupportedByIncreasedAreaOfEffectDamageUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Increased Area of Effect", "(28-32)% increased Area Damage", statOrderKey = "202,1889", statOrder = { 202, 1889 }, level = 75, group = "SupportedByIncreasedAreaOfEffectDamage", weightKey = { "sceptre_elder", "dagger_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "damage", "gem" }, }, ["SupportedByIncreasedAreaOfEffectDamageUber3_"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Increased Area of Effect", "(33-37)% increased Area Damage", statOrderKey = "202,1889", statOrder = { 202, 1889 }, level = 80, group = "SupportedByIncreasedAreaOfEffectDamage", weightKey = { "sceptre_elder", "dagger_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 1000, 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "damage", "gem" }, }, - ["SupportedBySpellCascadeAreaUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 16 Spell Cascade", "(5-8)% increased Area of Effect", statOrderKey = "310,1739", statOrder = { 310, 1739 }, level = 68, group = "SupportedBySpellCascadeArea", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["SupportedBySpellCascadeAreaUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Spell Cascade", "(9-12)% increased Area of Effect", statOrderKey = "310,1739", statOrder = { 310, 1739 }, level = 75, group = "SupportedBySpellCascadeArea", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, - ["SupportedBySpellCascadeAreaUber3_"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Spell Cascade", "(13-15)% increased Area of Effect", statOrderKey = "310,1739", statOrder = { 310, 1739 }, level = 80, group = "SupportedBySpellCascadeArea", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "support", "influence_mod", "gem" }, }, + ["SupportedBySpellCascadeAreaUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 16 Spell Cascade", "(5-8)% increased Area of Effect", statOrderKey = "310,1739", statOrder = { 310, 1739 }, level = 68, group = "SupportedBySpellCascadeArea", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "influence_mod", "gem" }, }, + ["SupportedBySpellCascadeAreaUber2"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 18 Spell Cascade", "(9-12)% increased Area of Effect", statOrderKey = "310,1739", statOrder = { 310, 1739 }, level = 75, group = "SupportedBySpellCascadeArea", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "influence_mod", "gem" }, }, + ["SupportedBySpellCascadeAreaUber3_"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems are Supported by Level 20 Spell Cascade", "(13-15)% increased Area of Effect", statOrderKey = "310,1739", statOrder = { 310, 1739 }, level = 80, group = "SupportedBySpellCascadeArea", weightKey = { "sceptre_shaper", "rune_dagger_shaper", "wand_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "support", "influence_mod", "gem" }, }, ["SupportedByLesserMultipleProjectilesDamageUber1"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 16 Lesser Multiple Projectiles", "(15-20)% increased Projectile Damage", statOrderKey = "422,1850", statOrder = { 422, 1850 }, level = 68, group = "SupportedByLesserMultipleProjectilesDamage", weightKey = { "wand_elder", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "damage", "gem" }, }, ["SupportedByLesserMultipleProjectilesDamageUber2"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 18 Lesser Multiple Projectiles", "(21-25)% increased Projectile Damage", statOrderKey = "422,1850", statOrder = { 422, 1850 }, level = 75, group = "SupportedByLesserMultipleProjectilesDamage", weightKey = { "wand_elder", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "damage", "gem" }, }, ["SupportedByLesserMultipleProjectilesDamageUber3_"] = { type = "Suffix", affix = "of the Elder", "Socketed Gems are Supported by Level 20 Lesser Multiple Projectiles", "(26-30)% increased Projectile Damage", statOrderKey = "422,1850", statOrder = { 422, 1850 }, level = 80, group = "SupportedByLesserMultipleProjectilesDamage", weightKey = { "wand_elder", "default", }, weightVal = { 1000, 0 }, modTags = { "support", "influence_mod", "damage", "gem" }, }, @@ -2630,23 +2630,23 @@ return { ["ElementalDamagePercentAddedAsChaosStaffUber1"] = { type = "Prefix", affix = "The Shaper's", "Gain (10-12)% of Elemental Damage as Extra Chaos Damage", statOrderKey = "1799", statOrder = { 1799 }, level = 75, group = "ElementalDamagePercentAddedAsChaos", weightKey = { "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 0 }, modTags = { "elemental_damage", "chaos_damage", "influence_mod", "damage", "elemental", "chaos" }, }, ["ElementalDamagePercentAddedAsChaosStaffUber2__"] = { type = "Prefix", affix = "The Shaper's", "Gain (13-15)% of Elemental Damage as Extra Chaos Damage", statOrderKey = "1799", statOrder = { 1799 }, level = 85, group = "ElementalDamagePercentAddedAsChaos", weightKey = { "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 0 }, modTags = { "elemental_damage", "chaos_damage", "influence_mod", "damage", "elemental", "chaos" }, }, ["DisplaySocketedSkillsChainUber1"] = { type = "Suffix", affix = "of Shaping", "Socketed Gems Chain 1 additional times", statOrderKey = "457", statOrder = { 457 }, level = 85, group = "DisplaySocketedSkillsChain", weightKey = { "bow_shaper", "default", }, weightVal = { 200, 0 }, modTags = { "skill", "influence_mod", "gem" }, }, - ["SpellAddedPhysicalDamageWeaponUber1"] = { type = "Prefix", affix = "The Elder's", "Adds (22-31) to (46-53) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 68, group = "SpellAddedPhysicalDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, - ["SpellAddedPhysicalDamageWeaponUber2_"] = { type = "Prefix", affix = "The Elder's", "Adds (28-37) to (55-64) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 75, group = "SpellAddedPhysicalDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, - ["SpellAddedPhysicalDamageWeaponUber3"] = { type = "Prefix", affix = "The Elder's", "Adds (32-44) to (66-76) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 84, group = "SpellAddedPhysicalDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, - ["SpellAddedPhysicalDamageTwoHandWeaponUber1_"] = { type = "Prefix", affix = "The Elder's", "Adds (37-49) to (75-86) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 68, group = "SpellAddedPhysicalDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, - ["SpellAddedPhysicalDamageTwoHandWeaponUber2"] = { type = "Prefix", affix = "The Elder's", "Adds (44-58) to (88-103) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 75, group = "SpellAddedPhysicalDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, - ["SpellAddedPhysicalDamageTwoHandWeaponUber3"] = { type = "Prefix", affix = "The Elder's", "Adds (60-73) to (108-122) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 84, group = "SpellAddedPhysicalDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, - ["SpellAddedChaosDamageWeaponUber1"] = { type = "Prefix", affix = "The Elder's", "Adds (22-31) to (46-53) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 68, group = "SpellAddedChaosDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, - ["SpellAddedChaosDamageWeaponUber2"] = { type = "Prefix", affix = "The Elder's", "Adds (28-37) to (55-64) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 75, group = "SpellAddedChaosDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, - ["SpellAddedChaosDamageWeaponUber3_"] = { type = "Prefix", affix = "The Elder's", "Adds (32-44) to (66-76) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 85, group = "SpellAddedChaosDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, - ["SpellAddedChaosDamageTwoHandWeaponUber1"] = { type = "Prefix", affix = "The Elder's", "Adds (37-49) to (75-86) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 68, group = "SpellAddedChaosDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, - ["SpellAddedChaosDamageTwoHandWeaponUber2"] = { type = "Prefix", affix = "The Elder's", "Adds (44-58) to (88-103) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 75, group = "SpellAddedChaosDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, - ["SpellAddedChaosDamageTwoHandWeaponUber3"] = { type = "Prefix", affix = "The Elder's", "Adds (60-73) to (108-122) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 85, group = "SpellAddedChaosDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, - ["SpellDamagePer16StrengthUber1"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 16 Strength", statOrderKey = "9391", statOrder = { 9391 }, level = 68, group = "SpellDamagePer16Strength", weightKey = { "sceptre_elder", "default", }, weightVal = { 400, 0 }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, - ["SpellDamagePer16DexterityUber1__"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 16 Dexterity", statOrderKey = "9389", statOrder = { 9389 }, level = 68, group = "SpellDamagePer16Dexterity", weightKey = { "rune_dagger_elder", "default", }, weightVal = { 400, 0 }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, - ["SpellDamagePer16IntelligenceUber1"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 16 Intelligence", statOrderKey = "9390", statOrder = { 9390 }, level = 68, group = "SpellDamagePer16Intelligence", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 400, 400, 400, 0 }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, - ["SpellDamagePer10StrengthUber1"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 10 Strength", statOrderKey = "9388", statOrder = { 9388 }, level = 68, group = "SpellDamagePer10Strength", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 400, 0 }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, - ["SpellDamagePer10IntelligenceUber1_"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 10 Intelligence", statOrderKey = "2587", statOrder = { 2587 }, level = 68, group = "SpellDamagePer10Intelligence", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 400, 0 }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, + ["SpellAddedPhysicalDamageWeaponUber1"] = { type = "Prefix", affix = "The Elder's", "Adds (22-31) to (46-53) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 68, group = "SpellAddedPhysicalDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, + ["SpellAddedPhysicalDamageWeaponUber2_"] = { type = "Prefix", affix = "The Elder's", "Adds (28-37) to (55-64) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 75, group = "SpellAddedPhysicalDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, + ["SpellAddedPhysicalDamageWeaponUber3"] = { type = "Prefix", affix = "The Elder's", "Adds (32-44) to (66-76) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 84, group = "SpellAddedPhysicalDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, + ["SpellAddedPhysicalDamageTwoHandWeaponUber1_"] = { type = "Prefix", affix = "The Elder's", "Adds (37-49) to (75-86) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 68, group = "SpellAddedPhysicalDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, + ["SpellAddedPhysicalDamageTwoHandWeaponUber2"] = { type = "Prefix", affix = "The Elder's", "Adds (44-58) to (88-103) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 75, group = "SpellAddedPhysicalDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, + ["SpellAddedPhysicalDamageTwoHandWeaponUber3"] = { type = "Prefix", affix = "The Elder's", "Adds (60-73) to (108-122) Physical Damage to Spells", statOrderKey = "1266", statOrder = { 1266 }, level = 84, group = "SpellAddedPhysicalDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "physical_damage", "caster_damage", "influence_mod", "damage", "physical", "caster" }, }, + ["SpellAddedChaosDamageWeaponUber1"] = { type = "Prefix", affix = "The Elder's", "Adds (22-31) to (46-53) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 68, group = "SpellAddedChaosDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, + ["SpellAddedChaosDamageWeaponUber2"] = { type = "Prefix", affix = "The Elder's", "Adds (28-37) to (55-64) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 75, group = "SpellAddedChaosDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, + ["SpellAddedChaosDamageWeaponUber3_"] = { type = "Prefix", affix = "The Elder's", "Adds (32-44) to (66-76) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 85, group = "SpellAddedChaosDamage", weightKey = { "sceptre_elder", "wand_elder", "rune_dagger_elder", "default", }, weightVal = { 1000, 1000, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, + ["SpellAddedChaosDamageTwoHandWeaponUber1"] = { type = "Prefix", affix = "The Elder's", "Adds (37-49) to (75-86) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 68, group = "SpellAddedChaosDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, + ["SpellAddedChaosDamageTwoHandWeaponUber2"] = { type = "Prefix", affix = "The Elder's", "Adds (44-58) to (88-103) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 75, group = "SpellAddedChaosDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, + ["SpellAddedChaosDamageTwoHandWeaponUber3"] = { type = "Prefix", affix = "The Elder's", "Adds (60-73) to (108-122) Chaos Damage to Spells", statOrderKey = "1270", statOrder = { 1270 }, level = 85, group = "SpellAddedChaosDamage", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 1000, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "chaos_damage", "influence_mod", "damage", "chaos", "caster" }, }, + ["SpellDamagePer16StrengthUber1"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 16 Strength", statOrderKey = "9391", statOrder = { 9391 }, level = 68, group = "SpellDamagePer16Strength", weightKey = { "sceptre_elder", "default", }, weightVal = { 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, + ["SpellDamagePer16DexterityUber1__"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 16 Dexterity", statOrderKey = "9389", statOrder = { 9389 }, level = 68, group = "SpellDamagePer16Dexterity", weightKey = { "rune_dagger_elder", "default", }, weightVal = { 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, + ["SpellDamagePer16IntelligenceUber1"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 16 Intelligence", statOrderKey = "9390", statOrder = { 9390 }, level = 68, group = "SpellDamagePer16Intelligence", weightKey = { "sceptre_elder", "rune_dagger_elder", "wand_elder", "default", }, weightVal = { 400, 400, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, + ["SpellDamagePer10StrengthUber1"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 10 Strength", statOrderKey = "9388", statOrder = { 9388 }, level = 68, group = "SpellDamagePer10Strength", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, + ["SpellDamagePer10IntelligenceUber1_"] = { type = "Prefix", affix = "The Elder's", "1% increased Spell Damage per 10 Intelligence", statOrderKey = "2587", statOrder = { 2587 }, level = 68, group = "SpellDamagePer10Intelligence", weightKey = { "attack_staff", "staff_elder", "default", }, weightVal = { 0, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "caster_damage", "influence_mod", "damage", "caster" }, }, ["MaximumEnduranceChargeUber1"] = { type = "Suffix", affix = "of Shaping", "+1 to Maximum Endurance Charges", statOrderKey = "1663", statOrder = { 1663 }, level = 84, group = "MaximumEnduranceCharges", weightKey = { "2h_mace_shaper", "2h_sword_shaper", "2h_axe_shaper", "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 1000, 1000, 1000, 0 }, modTags = { "endurance_charge", "influence_mod" }, }, ["MaximumFrenzyChargeUber1"] = { type = "Suffix", affix = "of Shaping", "+1 to Maximum Frenzy Charges", statOrderKey = "1668", statOrder = { 1668 }, level = 84, group = "MaximumFrenzyCharges", weightKey = { "2h_sword_shaper", "2h_axe_shaper", "bow_shaper", "default", }, weightVal = { 1000, 1000, 1000, 0 }, modTags = { "frenzy_charge", "influence_mod" }, }, ["MaximumPowerChargeUber1"] = { type = "Suffix", affix = "of Shaping", "+1 to Maximum Power Charges", statOrderKey = "1673", statOrder = { 1673 }, level = 84, group = "IncreasedMaximumPowerCharges", weightKey = { "staff_shaper", "warstaff_shaper", "default", }, weightVal = { 1000, 1000, 0 }, modTags = { "power_charge", "influence_mod" }, }, @@ -2972,30 +2972,30 @@ return { ["ChaosNonAilmentDamageOverTimeMultiplier1h5"] = { type = "Prefix", affix = "Disintegrating", "+(34-38)% to Chaos Damage over Time Multiplier", statOrderKey = "1124", statOrder = { 1124 }, level = 78, group = "ChaosDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "chaos_damage", "damage", "chaos" }, }, ["ChaosNonAilmentDamageOverTimeMultiplierUber1"] = { type = "Suffix", affix = "of the Elder", "+(11-15)% to Chaos Damage over Time Multiplier", statOrderKey = "1124", statOrder = { 1124 }, level = 68, group = "ChaosDamageOverTimeMultiplier", weightKey = { "gloves_elder", "amulet_elder", "default", }, weightVal = { 200, 400, 0 }, modTags = { "dot_multi", "chaos_damage", "influence_mod", "damage", "chaos" }, }, ["ChaosNonAilmentDamageOverTimeMultiplierUber2"] = { type = "Suffix", affix = "of the Elder", "+(16-20)% to Chaos Damage over Time Multiplier", statOrderKey = "1124", statOrder = { 1124 }, level = 80, group = "ChaosDamageOverTimeMultiplier", weightKey = { "gloves_elder", "amulet_elder", "default", }, weightVal = { 200, 400, 0 }, modTags = { "dot_multi", "chaos_damage", "influence_mod", "damage", "chaos" }, }, - ["ColdDamageOverTimeMultiplier2h1_"] = { type = "Prefix", affix = "Inclement", "+(26-35)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 4, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier2h2_"] = { type = "Prefix", affix = "Bleak", "+(36-45)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 12, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier2h3"] = { type = "Prefix", affix = "Boreal", "+(46-55)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 36, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier2h4"] = { type = "Prefix", affix = "Gelid", "+(56-65)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 64, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier2h5"] = { type = "Prefix", affix = "Heartstopping", "+(66-75)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 78, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier1h1"] = { type = "Prefix", affix = "Inclement", "+(14-18)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 4, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier1h2"] = { type = "Prefix", affix = "Bleak", "+(19-23)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 12, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier1h3"] = { type = "Prefix", affix = "Boreal", "+(24-28)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 36, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier1h4"] = { type = "Prefix", affix = "Gelid", "+(29-33)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 64, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier1h5"] = { type = "Prefix", affix = "Heartstopping", "+(34-38)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 78, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplierUber1"] = { type = "Suffix", affix = "of Shaping", "+(11-15)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 68, group = "ColdDamageOverTimeMultiplier", weightKey = { "gloves_shaper", "amulet_shaper", "default", }, weightVal = { 200, 400, 0 }, modTags = { "dot_multi", "elemental_damage", "influence_mod", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplierUber2_"] = { type = "Suffix", affix = "of Shaping", "+(16-20)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 80, group = "ColdDamageOverTimeMultiplier", weightKey = { "gloves_shaper", "amulet_shaper", "default", }, weightVal = { 200, 400, 0 }, modTags = { "dot_multi", "elemental_damage", "influence_mod", "damage", "elemental", "cold" }, }, - ["FireDamageOverTimeMultiplier2h1"] = { type = "Prefix", affix = "Earnest", "+(26-35)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 4, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier2h2"] = { type = "Prefix", affix = "Fervid", "+(36-45)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 12, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier2h3"] = { type = "Prefix", affix = "Ardent", "+(46-55)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 36, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier2h4"] = { type = "Prefix", affix = "Zealous", "+(56-65)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 64, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier2h5__"] = { type = "Prefix", affix = "Fanatical", "+(66-75)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 78, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier1h1"] = { type = "Prefix", affix = "Earnest", "+(14-18)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 4, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier1h2"] = { type = "Prefix", affix = "Fervid", "+(19-23)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 12, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier1h3"] = { type = "Prefix", affix = "Ardent", "+(24-28)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 36, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier1h4"] = { type = "Prefix", affix = "Zealous", "+(29-33)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 64, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier1h5"] = { type = "Prefix", affix = "Fanatical", "+(34-38)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 78, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplierUber1___"] = { type = "Suffix", affix = "of Shaping", "+(11-15)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 68, group = "FireDamageOverTimeMultiplier", weightKey = { "gloves_shaper", "amulet_shaper", "default", }, weightVal = { 200, 400, 0 }, modTags = { "dot_multi", "elemental_damage", "influence_mod", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplierUber2"] = { type = "Suffix", affix = "of Shaping", "+(16-20)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 80, group = "FireDamageOverTimeMultiplier", weightKey = { "gloves_shaper", "amulet_shaper", "default", }, weightVal = { 200, 400, 0 }, modTags = { "dot_multi", "elemental_damage", "influence_mod", "damage", "elemental", "fire" }, }, + ["ColdDamageOverTimeMultiplier2h1_"] = { type = "Prefix", affix = "Inclement", "+(26-35)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 4, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier2h2_"] = { type = "Prefix", affix = "Bleak", "+(36-45)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 12, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier2h3"] = { type = "Prefix", affix = "Boreal", "+(46-55)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 36, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier2h4"] = { type = "Prefix", affix = "Gelid", "+(56-65)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 64, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier2h5"] = { type = "Prefix", affix = "Heartstopping", "+(66-75)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 78, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier1h1"] = { type = "Prefix", affix = "Inclement", "+(14-18)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 4, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier1h2"] = { type = "Prefix", affix = "Bleak", "+(19-23)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 12, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier1h3"] = { type = "Prefix", affix = "Boreal", "+(24-28)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 36, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier1h4"] = { type = "Prefix", affix = "Gelid", "+(29-33)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 64, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier1h5"] = { type = "Prefix", affix = "Heartstopping", "+(34-38)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 78, group = "ColdDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplierUber1"] = { type = "Suffix", affix = "of Shaping", "+(11-15)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 68, group = "ColdDamageOverTimeMultiplier", weightKey = { "gloves_shaper", "amulet_shaper", "default", }, weightVal = { 200, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "influence_mod", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplierUber2_"] = { type = "Suffix", affix = "of Shaping", "+(16-20)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 80, group = "ColdDamageOverTimeMultiplier", weightKey = { "gloves_shaper", "amulet_shaper", "default", }, weightVal = { 200, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "influence_mod", "damage", "elemental", "cold" }, }, + ["FireDamageOverTimeMultiplier2h1"] = { type = "Prefix", affix = "Earnest", "+(26-35)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 4, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier2h2"] = { type = "Prefix", affix = "Fervid", "+(36-45)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 12, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier2h3"] = { type = "Prefix", affix = "Ardent", "+(46-55)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 36, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier2h4"] = { type = "Prefix", affix = "Zealous", "+(56-65)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 64, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier2h5__"] = { type = "Prefix", affix = "Fanatical", "+(66-75)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 78, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier1h1"] = { type = "Prefix", affix = "Earnest", "+(14-18)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 4, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier1h2"] = { type = "Prefix", affix = "Fervid", "+(19-23)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 12, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier1h3"] = { type = "Prefix", affix = "Ardent", "+(24-28)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 36, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier1h4"] = { type = "Prefix", affix = "Zealous", "+(29-33)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 64, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier1h5"] = { type = "Prefix", affix = "Fanatical", "+(34-38)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 78, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplierUber1___"] = { type = "Suffix", affix = "of Shaping", "+(11-15)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 68, group = "FireDamageOverTimeMultiplier", weightKey = { "gloves_shaper", "amulet_shaper", "default", }, weightVal = { 200, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "influence_mod", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplierUber2"] = { type = "Suffix", affix = "of Shaping", "+(16-20)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 80, group = "FireDamageOverTimeMultiplier", weightKey = { "gloves_shaper", "amulet_shaper", "default", }, weightVal = { 200, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "influence_mod", "damage", "elemental", "fire" }, }, ["PhysicalDamageOverTimeMultiplier2h1"] = { type = "Prefix", affix = "Seeping", "+(26-35)% to Physical Damage over Time Multiplier", statOrderKey = "1112", statOrder = { 1112 }, level = 4, group = "PhysicalDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "physical_damage", "damage", "physical" }, }, ["PhysicalDamageOverTimeMultiplier2h2_"] = { type = "Prefix", affix = "Spilling", "+(36-45)% to Physical Damage over Time Multiplier", statOrderKey = "1112", statOrder = { 1112 }, level = 12, group = "PhysicalDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "physical_damage", "damage", "physical" }, }, ["PhysicalDamageOverTimeMultiplier2h3"] = { type = "Prefix", affix = "Phlebotomising", "+(46-55)% to Physical Damage over Time Multiplier", statOrderKey = "1112", statOrder = { 1112 }, level = 36, group = "PhysicalDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 0 }, modTags = { "dot_multi", "physical_damage", "damage", "physical" }, }, @@ -3035,26 +3035,26 @@ return { ["ChaosDamageOverTimeMultiplier3"] = { type = "Suffix", affix = "of Deteriorating", "+(24-28)% to Chaos Damage over Time Multiplier", statOrderKey = "1124", statOrder = { 1124 }, level = 36, group = "ChaosDamageOverTimeMultiplier", weightKey = { "wand", "dagger", "default", }, weightVal = { 200, 200, 0 }, modTags = { "dot_multi", "chaos_damage", "damage", "chaos" }, }, ["ChaosDamageOverTimeMultiplier4"] = { type = "Suffix", affix = "of Atrophying", "+(29-33)% to Chaos Damage over Time Multiplier", statOrderKey = "1124", statOrder = { 1124 }, level = 64, group = "ChaosDamageOverTimeMultiplier", weightKey = { "wand", "dagger", "default", }, weightVal = { 100, 100, 0 }, modTags = { "dot_multi", "chaos_damage", "damage", "chaos" }, }, ["ChaosDamageOverTimeMultiplier5"] = { type = "Suffix", affix = "of Disintegrating", "+(34-38)% to Chaos Damage over Time Multiplier", statOrderKey = "1124", statOrder = { 1124 }, level = 78, group = "ChaosDamageOverTimeMultiplier", weightKey = { "wand", "dagger", "default", }, weightVal = { 50, 50, 0 }, modTags = { "dot_multi", "chaos_damage", "damage", "chaos" }, }, - ["ColdDamageOverTimeMultiplierTwoHand1_"] = { type = "Suffix", affix = "of the Inclement", "+(26-35)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 4, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 400, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplierTwoHand2"] = { type = "Suffix", affix = "of the Bleak", "+(36-45)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 12, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 300, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplierTwoHand3"] = { type = "Suffix", affix = "of the Boreal", "+(46-55)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 36, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 200, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplierTwoHand4"] = { type = "Suffix", affix = "of the Gelid", "+(56-65)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 64, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 100, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplierTwoHand5"] = { type = "Suffix", affix = "of Heartstopping", "+(66-75)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 78, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 50, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of the Inclement", "+(14-18)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 4, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 300, 300, 300, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier2"] = { type = "Suffix", affix = "of the Bleak", "+(19-23)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 12, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 220, 220, 220, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier3"] = { type = "Suffix", affix = "of the Boreal", "+(24-28)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 36, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 140, 140, 140, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier4"] = { type = "Suffix", affix = "of the Gelid", "+(29-33)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 64, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 70, 70, 70, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["ColdDamageOverTimeMultiplier5"] = { type = "Suffix", affix = "of Heartstopping", "+(34-38)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 78, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 35, 35, 35, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["FireDamageOverTimeMultiplierTwoHand1_"] = { type = "Suffix", affix = "of the Earnest", "+(26-35)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 4, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 400, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplierTwoHand2_"] = { type = "Suffix", affix = "of the Fervid", "+(36-45)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 12, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 300, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplierTwoHand3"] = { type = "Suffix", affix = "of the Ardent", "+(46-55)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 36, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 200, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplierTwoHand4"] = { type = "Suffix", affix = "of the Zealous", "+(56-65)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 64, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 100, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplierTwoHand5_"] = { type = "Suffix", affix = "of the Fanatical", "+(66-75)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 78, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 50, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of the Earnest", "+(14-18)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 4, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 300, 300, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier2"] = { type = "Suffix", affix = "of the Fervid", "+(19-23)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 12, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 220, 220, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier3"] = { type = "Suffix", affix = "of the Ardent", "+(24-28)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 36, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 140, 140, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier4__"] = { type = "Suffix", affix = "of the Zealous", "+(29-33)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 64, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 70, 70, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, - ["FireDamageOverTimeMultiplier5"] = { type = "Suffix", affix = "of the Fanatical", "+(34-38)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 78, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 35, 35, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["ColdDamageOverTimeMultiplierTwoHand1_"] = { type = "Suffix", affix = "of the Inclement", "+(26-35)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 4, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplierTwoHand2"] = { type = "Suffix", affix = "of the Bleak", "+(36-45)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 12, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplierTwoHand3"] = { type = "Suffix", affix = "of the Boreal", "+(46-55)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 36, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplierTwoHand4"] = { type = "Suffix", affix = "of the Gelid", "+(56-65)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 64, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplierTwoHand5"] = { type = "Suffix", affix = "of Heartstopping", "+(66-75)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 78, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_staff", "staff", "default", }, weightVal = { 0, 50, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of the Inclement", "+(14-18)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 4, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 300, 300, 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier2"] = { type = "Suffix", affix = "of the Bleak", "+(19-23)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 12, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 220, 220, 220, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier3"] = { type = "Suffix", affix = "of the Boreal", "+(24-28)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 36, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 140, 140, 140, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier4"] = { type = "Suffix", affix = "of the Gelid", "+(29-33)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 64, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 70, 70, 70, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["ColdDamageOverTimeMultiplier5"] = { type = "Suffix", affix = "of Heartstopping", "+(34-38)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 78, group = "ColdDamageOverTimeMultiplier", weightKey = { "attack_dagger", "wand", "sceptre", "dagger", "default", }, weightVal = { 0, 35, 35, 35, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["FireDamageOverTimeMultiplierTwoHand1_"] = { type = "Suffix", affix = "of the Earnest", "+(26-35)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 4, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 400, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplierTwoHand2_"] = { type = "Suffix", affix = "of the Fervid", "+(36-45)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 12, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplierTwoHand3"] = { type = "Suffix", affix = "of the Ardent", "+(46-55)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 36, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 200, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplierTwoHand4"] = { type = "Suffix", affix = "of the Zealous", "+(56-65)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 64, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 100, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplierTwoHand5_"] = { type = "Suffix", affix = "of the Fanatical", "+(66-75)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 78, group = "FireDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 50, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of the Earnest", "+(14-18)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 4, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 300, 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier2"] = { type = "Suffix", affix = "of the Fervid", "+(19-23)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 12, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 220, 220, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier3"] = { type = "Suffix", affix = "of the Ardent", "+(24-28)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 36, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 140, 140, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier4__"] = { type = "Suffix", affix = "of the Zealous", "+(29-33)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 64, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 70, 70, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["FireDamageOverTimeMultiplier5"] = { type = "Suffix", affix = "of the Fanatical", "+(34-38)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 78, group = "FireDamageOverTimeMultiplier", weightKey = { "wand", "sceptre", "default", }, weightVal = { 35, 35, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, ["PhysicalDamageOverTimeMultiplierTwoHand1"] = { type = "Suffix", affix = "of Seeping", "+(26-35)% to Physical Damage over Time Multiplier", statOrderKey = "1112", statOrder = { 1112 }, level = 4, group = "PhysicalDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 400, 0 }, modTags = { "dot_multi", "physical_damage", "damage", "physical" }, }, ["PhysicalDamageOverTimeMultiplierTwoHand2"] = { type = "Suffix", affix = "of Spilling", "+(36-45)% to Physical Damage over Time Multiplier", statOrderKey = "1112", statOrder = { 1112 }, level = 12, group = "PhysicalDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 300, 0 }, modTags = { "dot_multi", "physical_damage", "damage", "physical" }, }, ["PhysicalDamageOverTimeMultiplierTwoHand3"] = { type = "Suffix", affix = "of Phlebotomising", "+(46-55)% to Physical Damage over Time Multiplier", statOrderKey = "1112", statOrder = { 1112 }, level = 36, group = "PhysicalDamageOverTimeMultiplier", weightKey = { "staff", "default", }, weightVal = { 200, 0 }, modTags = { "dot_multi", "physical_damage", "damage", "physical" }, }, diff --git a/src/Data/ModJewel.lua b/src/Data/ModJewel.lua index 315e41e87c..4b1d5f056a 100644 --- a/src/Data/ModJewel.lua +++ b/src/Data/ModJewel.lua @@ -420,8 +420,8 @@ return { ["DelveAmuletVaalSkillDuration1"] = { type = "Suffix", affix = "of the Underground", "(15-25)% increased Vaal Skill Effect Duration", statOrderKey = "2944", statOrder = { 2944 }, level = 1, group = "VaalSkillDuration", weightKey = { "abyss_jewel", "jewel", "amulet", "default", }, weightVal = { 0, 0, 2000, 0 }, modTags = { "vaal" }, }, ["DelveJewelryVaalSkillDamage1"] = { type = "Suffix", affix = "of the Underground", "(20-40)% increased Damage with Vaal Skills", statOrderKey = "2934", statOrder = { 2934 }, level = 1, group = "VaalSkillDamage", weightKey = { "abyss_jewel", "jewel", "belt", "ring", "default", }, weightVal = { 0, 0, 2000, 2000, 0 }, modTags = { "damage", "vaal" }, }, ["JewelChaosNonAilmentDamageOverTimeMultiplier2"] = { type = "Suffix", affix = "of Atrophy", "+(6-8)% to Chaos Damage over Time Multiplier", statOrderKey = "1124", statOrder = { 1124 }, level = 1, group = "ChaosDamageOverTimeMultiplier", weightKey = { "not_str", "default", }, weightVal = { 300, 0 }, modTags = { "dot_multi", "chaos_damage", "damage", "chaos" }, }, - ["JewelColdDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of Gelidity", "+(6-8)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 1, group = "ColdDamageOverTimeMultiplier", weightKey = { "not_str", "default", }, weightVal = { 300, 0 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, - ["JewelFireDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of Zealousness", "+(6-8)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 1, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 300 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, + ["JewelColdDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of Gelidity", "+(6-8)% to Cold Damage over Time Multiplier", statOrderKey = "1121", statOrder = { 1121 }, level = 1, group = "ColdDamageOverTimeMultiplier", weightKey = { "not_str", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, tags = { "has_caster_mod", }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "cold" }, }, + ["JewelFireDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of Zealousness", "+(6-8)% to Fire Damage over Time Multiplier", statOrderKey = "1116", statOrder = { 1116 }, level = 1, group = "FireDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 300 }, weightMultiplierKey = { "has_caster_mod", "has_attack_mod", "default", }, weightMultiplierVal = { 100, 50, 100 }, modTags = { "dot_multi", "elemental_damage", "damage", "elemental", "fire" }, }, ["JewelPhysicalDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of Exsanguinating", "+(6-8)% to Physical Damage over Time Multiplier", statOrderKey = "1112", statOrder = { 1112 }, level = 1, group = "PhysicalDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 300 }, modTags = { "dot_multi", "physical_damage", "damage", "physical" }, }, ["JewelGlobalDamageOverTimeMultiplier1"] = { type = "Suffix", affix = "of Acrimony", "+(4-6)% to Damage over Time Multiplier", statOrderKey = "1108", statOrder = { 1108 }, level = 1, group = "GlobalDamageOverTimeMultiplier", weightKey = { "default", }, weightVal = { 300 }, modTags = { "dot_multi", "damage" }, }, } \ No newline at end of file diff --git a/src/Data/ModJewelCluster.lua b/src/Data/ModJewelCluster.lua index cd12d2fa6c..748728f832 100644 --- a/src/Data/ModJewelCluster.lua +++ b/src/Data/ModJewelCluster.lua @@ -45,305 +45,305 @@ return { ["V2PoisonDurationOnYouJewelCorrupted"] = { type = "Corrupted", affix = "", "(20-25)% reduced Poison Duration on you", statOrderKey = "9230", statOrder = { 9230 }, level = 1, group = "ReducedPoisonDuration", weightKey = { "jewel", "default", }, weightVal = { 1000, 0 }, modTags = { "poison", "chaos", "ailment" }, }, ["V2BleedDurationOnYouJewelCorrupted"] = { type = "Corrupted", affix = "", "(20-25)% reduced Bleed Duration on you", statOrderKey = "9222", statOrder = { 9222 }, level = 1, group = "ReducedBleedDuration", weightKey = { "jewel", "default", }, weightVal = { 1000, 0 }, modTags = { "bleed", "physical", "ailment" }, }, ["V2CurseEffectOnYouJewelCorrupted"] = { type = "Corrupted", affix = "", "(20-25)% reduced Effect of Curses on you", statOrderKey = "2024", statOrder = { 2024 }, level = 1, group = "CurseEffectOnYouJewel", weightKey = { "jewel", "default", }, weightVal = { 1000, 0 }, modTags = { "curse" }, }, - ["AfflictionNotableProdigiousDefense__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Prodigious Defence", statOrderKey = "7201", statOrder = { 7201 }, level = 1, group = "AfflictionNotableProdigiousDefense", weightKey = { "affliction_attack_damage_while_holding_a_shield", "affliction_chance_to_block", "default", }, weightVal = { 600, 750, 0 }, modTags = { "block", "damage", "attack" }, }, - ["AfflictionNotableAdvanceGuard"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Advance Guard", statOrderKey = "7004", statOrder = { 7004 }, level = 50, group = "AfflictionNotableAdvanceGuard", weightKey = { "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 300, 0 }, modTags = { "damage", "attack", "speed" }, }, - ["AfflictionNotableGladiatorialCombat"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Gladiatorial Combat", statOrderKey = "7125", statOrder = { 7125 }, level = 68, group = "AfflictionNotableGladiatorialCombat", weightKey = { "default", }, weightVal = { 0 }, modTags = { "damage", "attack", "critical" }, }, - ["AfflictionNotableStrikeLeader_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Strike Leader", statOrderKey = "7256", statOrder = { 7256 }, level = 1, group = "AfflictionNotableStrikeLeader", weightKey = { "affliction_attack_damage_while_holding_a_shield", "affliction_chance_to_block", "default", }, weightVal = { 600, 750, 0 }, modTags = { "block", "damage", "attack" }, }, - ["AfflictionNotablePowerfulWard"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Powerful Ward", statOrderKey = "7191", statOrder = { 7191 }, level = 68, group = "AfflictionNotablePowerfulWard", weightKey = { "affliction_chance_to_block", "default", }, weightVal = { 141, 0 }, modTags = { "block", "power_charge" }, }, - ["AfflictionNotableEnduringWard_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Enduring Ward", statOrderKey = "7094", statOrder = { 7094 }, level = 68, group = "AfflictionNotableEnduringWard", weightKey = { "affliction_chance_to_block", "default", }, weightVal = { 141, 0 }, modTags = { "block", "endurance_charge" }, }, - ["AfflictionNotableGladiatorsFortitude"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Gladiator's Fortitude", statOrderKey = "7126", statOrder = { 7126 }, level = 68, group = "AfflictionNotableGladiatorsFortitude", weightKey = { "affliction_attack_damage_while_holding_a_shield", "affliction_maximum_life", "default", }, weightVal = { 113, 146, 0 }, modTags = { "resource", "life", "damage", "attack" }, }, - ["AfflictionNotablePreciseRetaliation_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Precise Retaliation", statOrderKey = "7195", statOrder = { 7195 }, level = 50, group = "AfflictionNotablePreciseRetaliation", weightKey = { "affliction_attack_damage_while_holding_a_shield", "affliction_critical_chance", "default", }, weightVal = { 300, 457, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotableVeteranDefender"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Veteran Defender", statOrderKey = "7278", statOrder = { 7278 }, level = 1, group = "AfflictionNotableVeteranDefender", weightKey = { "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 600, 0 }, modTags = { "defences", "elemental", "resistance", "attribute" }, }, - ["AfflictionNotableIronBreaker"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Iron Breaker", statOrderKey = "7152", statOrder = { 7152 }, level = 1, group = "AfflictionNotableIronBreaker", weightKey = { "affliction_physical_damage", "default", }, weightVal = { 464, 0 }, modTags = { "physical_damage", "damage", "physical" }, }, - ["AfflictionNotableDeepCuts"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Deep Cuts", statOrderKey = "7072", statOrder = { 7072 }, level = 75, group = "AfflictionNotableDeepCuts", weightKey = { "default", }, weightVal = { 0 }, modTags = { "physical", "attack" }, }, - ["AfflictionNotableMastertheFundamentals_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master the Fundamentals", statOrderKey = "7169", statOrder = { 7169 }, level = 50, group = "AfflictionNotableMastertheFundamentals", weightKey = { "affliction_physical_damage", "default", }, weightVal = { 232, 0 }, modTags = { "physical_damage", "elemental_damage", "damage", "physical", "elemental", "resistance" }, }, - ["AfflictionNotableForceMultiplier"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Force Multiplier", statOrderKey = "7120", statOrder = { 7120 }, level = 50, group = "AfflictionNotableForceMultiplier", weightKey = { "affliction_physical_damage", "default", }, weightVal = { 232, 0 }, modTags = { "physical_damage", "damage", "physical" }, }, - ["AfflictionNotableFuriousAssault"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Furious Assault", statOrderKey = "7123", statOrder = { 7123 }, level = 1, group = "AfflictionNotableFuriousAssault", weightKey = { "affliction_physical_damage", "default", }, weightVal = { 464, 0 }, modTags = { "physical_damage", "caster_damage", "damage", "damage", "physical", "attack", "caster" }, }, - ["AfflictionNotableViciousSkewering"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vicious Skewering", statOrderKey = "7281", statOrder = { 7281 }, level = 68, group = "AfflictionNotableViciousSkewering", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 81, 141, 141, 151, 145, 151, 113, 117, 113, 0 }, modTags = { "bleed", "physical", "attack", "ailment" }, }, - ["AfflictionNotableGrimOath"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Grim Oath", statOrderKey = "7130", statOrder = { 7130 }, level = 68, group = "AfflictionNotableGrimOath", weightKey = { "affliction_physical_damage", "affliction_chaos_damage", "default", }, weightVal = { 87, 97, 0 }, modTags = { "physical_damage", "chaos_damage", "damage", "physical", "chaos" }, }, - ["AfflictionNotableBattleHardened_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Battle-Hardened", statOrderKey = "7025", statOrder = { 7025 }, level = 50, group = "AfflictionNotableBattleHardened", weightKey = { "affliction_physical_damage", "affliction_armour", "affliction_evasion", "default", }, weightVal = { 232, 696, 658, 0 }, modTags = { "defences", "armour", "evasion", "physical" }, }, - ["AfflictionNotableReplenishingPresence"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Replenishing Presence", statOrderKey = "7219", statOrder = { 7219 }, level = 50, group = "AfflictionNotableReplenishingPresence", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 480, 480, 0 }, modTags = { "aura" }, }, - ["AfflictionNotableMasterofCommand__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master of Command", statOrderKey = "7165", statOrder = { 7165 }, level = 68, group = "AfflictionNotableMasterofCommand", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 180, 180, 0 }, modTags = { "resource", "mana", "aura" }, }, - ["AfflictionNotableFirstAmongEquals__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Spiteful Presence", statOrderKey = "7115", statOrder = { 7115 }, level = 1, group = "AfflictionNotableFirstAmongEquals", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 960, 960, 0 }, modTags = { "resource", "mana", "elemental", "cold", "aura", "ailment" }, }, - ["AfflictionNotablePurposefulHarbinger"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Purposeful Harbinger", statOrderKey = "7208", statOrder = { 7208 }, level = 75, group = "AfflictionNotablePurposefulHarbinger", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_damage_while_you_have_a_herald", "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 60, 60, 118, 158, 0 }, modTags = { "resource", "mana", "aura" }, }, - ["AfflictionNotablePreciseCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Destructive Aspect", statOrderKey = "7193", statOrder = { 7193 }, level = 68, group = "AfflictionNotablePreciseCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_critical_chance", "default", }, weightVal = { 180, 180, 0, 0 }, modTags = { "resource", "mana", "aura" }, }, - ["AfflictionNotablePureCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Electric Presence", statOrderKey = "7205", statOrder = { 7205 }, level = 68, group = "AfflictionNotablePureCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 180, 180, 0, 0, 0, 0 }, modTags = { "resource", "mana", "elemental", "lightning", "aura", "ailment" }, }, - ["AfflictionNotableSummerCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mortifying Aspect", statOrderKey = "7260", statOrder = { 7260 }, level = 68, group = "AfflictionNotableSummerCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_fire_resistance", "default", }, weightVal = { 180, 180, 0, 0 }, modTags = { "resource", "mana", "chaos", "resistance", "aura" }, }, - ["AfflictionNotableWinterCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Frantic Aspect", statOrderKey = "7296", statOrder = { 7296 }, level = 68, group = "AfflictionNotableWinterCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_cold_resistance", "default", }, weightVal = { 180, 180, 0, 0 }, modTags = { "resource", "mana", "speed", "aura" }, }, - ["AfflictionNotableGroundedCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Introspection", statOrderKey = "7131", statOrder = { 7131 }, level = 68, group = "AfflictionNotableGroundedCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_lightning_resistance", "default", }, weightVal = { 180, 180, 0, 0 }, modTags = { "aura" }, }, - ["AfflictionNotableStalwartCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Volatile Presence", statOrderKey = "7249", statOrder = { 7249 }, level = 50, group = "AfflictionNotableStalwartCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_armour", "affliction_evasion", "affliction_maximum_energy_shield", "default", }, weightVal = { 480, 480, 0, 0, 0, 0 }, modTags = { "resource", "mana", "elemental", "fire", "aura", "ailment" }, }, - ["AfflictionNotableVengefulCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Righteous Path", statOrderKey = "7277", statOrder = { 7277 }, level = 1, group = "AfflictionNotableVengefulCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 960, 960, 0, 0, 0, 0, 0 }, modTags = { "resource", "mana", "aura" }, }, - ["AfflictionNotableSkullbreaker"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Skullbreaker", statOrderKey = "7240", statOrder = { 7240 }, level = 68, group = "AfflictionNotableSkullbreaker", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 171, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotablePressurePoints__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pressure Points", statOrderKey = "7196", statOrder = { 7196 }, level = 50, group = "AfflictionNotablePressurePoints", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 457, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotableOverwhelmingMalice"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Overwhelming Malice", statOrderKey = "7185", statOrder = { 7185 }, level = 68, group = "AfflictionNotableOverwhelmingMalice", weightKey = { "affliction_critical_chance", "affliction_chaos_damage", "default", }, weightVal = { 171, 97, 0 }, modTags = { }, }, - ["AfflictionNotableMagnifier"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Magnifier", statOrderKey = "7161", statOrder = { 7161 }, level = 1, group = "AfflictionNotableMagnifier", weightKey = { "affliction_critical_chance", "affliction_area_damage", "default", }, weightVal = { 914, 1959, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotableSavageResponse"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Savage Response", statOrderKey = "7228", statOrder = { 7228 }, level = 50, group = "AfflictionNotableSavageResponse", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 457, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotableEyeoftheStorm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Eye of the Storm", statOrderKey = "7104", statOrder = { 7104 }, level = 50, group = "AfflictionNotableEyeoftheStorm", weightKey = { "affliction_critical_chance", "affliction_fire_damage_over_time_multiplier", "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 457, 366, 814, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "cold", "lightning", "critical", "ailment" }, }, - ["AfflictionNotableBasicsofPain"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Basics of Pain", statOrderKey = "7024", statOrder = { 7024 }, level = 1, group = "AfflictionNotableBasicsofPain", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 914, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotableQuickGetaway"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Quick Getaway", statOrderKey = "7210", statOrder = { 7210 }, level = 1, group = "AfflictionNotableQuickGetaway", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 914, 0 }, modTags = { "attack", "caster", "speed", "critical" }, }, - ["AfflictionNotableAssertDominance"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Assert Dominance", statOrderKey = "7022", statOrder = { 7022 }, level = 68, group = "AfflictionNotableAssertDominance", weightKey = { "affliction_area_damage", "default", }, weightVal = { 367, 0 }, modTags = { }, }, - ["AfflictionNotableVastPower"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vast Power", statOrderKey = "7276", statOrder = { 7276 }, level = 50, group = "AfflictionNotableVastPower", weightKey = { "affliction_area_damage", "default", }, weightVal = { 980, 0 }, modTags = { "damage" }, }, - ["AfflictionNotablePowerfulAssault_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Powerful Assault", statOrderKey = "7190", statOrder = { 7190 }, level = 50, group = "AfflictionNotablePowerfulAssault", weightKey = { "affliction_area_damage", "default", }, weightVal = { 980, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableIntensity"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Intensity", statOrderKey = "7150", statOrder = { 7150 }, level = 68, group = "AfflictionNotableIntensity", weightKey = { "default", }, weightVal = { 0 }, modTags = { "damage" }, }, - ["AfflictionNotableTitanicSwings_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Titanic Swings", statOrderKey = "7268", statOrder = { 7268 }, level = 50, group = "AfflictionNotableTitanicSwings", weightKey = { "affliction_area_damage", "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 980, 302, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableToweringThreat"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Towering Threat", statOrderKey = "7270", statOrder = { 7270 }, level = 68, group = "AfflictionNotableToweringThreat", weightKey = { "affliction_area_damage", "affliction_maximum_life", "default", }, weightVal = { 367, 146, 0 }, modTags = { "resource", "life" }, }, - ["AfflictionNotableAncestralEcho"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Echo", statOrderKey = "7010", statOrder = { 7010 }, level = 1, group = "AfflictionNotableAncestralEcho", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 1477, 0 }, modTags = { "attack", "caster", "speed" }, }, - ["AfflictionNotableAncestralReach"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Reach", statOrderKey = "7015", statOrder = { 7015 }, level = 1, group = "AfflictionNotableAncestralReach", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 1477, 0 }, modTags = { "damage", "speed" }, }, - ["AfflictionNotableAncestralMight"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Might", statOrderKey = "7013", statOrder = { 7013 }, level = 50, group = "AfflictionNotableAncestralMight", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 738, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableAncestralPreservation__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Preservation", statOrderKey = "7014", statOrder = { 7014 }, level = 68, group = "AfflictionNotableAncestralPreservation", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 277, 0 }, modTags = { "resource", "life", "chaos", "resistance" }, }, - ["AfflictionNotableSnaringSpirits"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Snaring Spirits", statOrderKey = "7244", statOrder = { 7244 }, level = 50, group = "AfflictionNotableSnaringSpirits", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 738, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableSleeplessSentries"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sleepless Sentries", statOrderKey = "7241", statOrder = { 7241 }, level = 68, group = "AfflictionNotableSleeplessSentries", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 277, 0 }, modTags = { }, }, - ["AfflictionNotableAncestralGuidance_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Guidance", statOrderKey = "7011", statOrder = { 7011 }, level = 50, group = "AfflictionNotableAncestralGuidance", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 738, 0 }, modTags = { "speed" }, }, - ["AfflictionNotableAncestralInspiration__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Inspiration", statOrderKey = "7012", statOrder = { 7012 }, level = 68, group = "AfflictionNotableAncestralInspiration", weightKey = { "affliction_totem_damage", "affliction_spell_damage", "default", }, weightVal = { 277, 281, 0 }, modTags = { "caster" }, }, - ["AfflictionNotableVitalFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vital Focus", statOrderKey = "7284", statOrder = { 7284 }, level = 1, group = "AfflictionNotableVitalFocus", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 1811, 0 }, modTags = { "resource", "life", "damage" }, }, - ["AfflictionNotableRapidInfusion_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Unrestrained Focus", statOrderKey = "7211", statOrder = { 7211 }, level = 68, group = "AfflictionNotableRapidInfusion", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 340, 0 }, modTags = { "speed" }, }, - ["AfflictionNotableUnwaveringFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Unwavering Focus", statOrderKey = "7274", statOrder = { 7274 }, level = 50, group = "AfflictionNotableUnwaveringFocus", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 906, 0 }, modTags = { "resource", "mana", "damage" }, }, - ["AfflictionNotableEnduringFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Enduring Focus", statOrderKey = "7093", statOrder = { 7093 }, level = 75, group = "AfflictionNotableEnduringFocus", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 113, 0 }, modTags = { "endurance_charge", "damage" }, }, - ["AfflictionNotablePreciseFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Precise Focus", statOrderKey = "7194", statOrder = { 7194 }, level = 50, group = "AfflictionNotablePreciseFocus", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 906, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotableStoicFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Stoic Focus", statOrderKey = "7251", statOrder = { 7251 }, level = 1, group = "AfflictionNotableStoicFocus", weightKey = { "affliction_channelling_skill_damage", "affliction_chance_to_block", "default", }, weightVal = { 1811, 750, 0 }, modTags = { "block", "damage" }, }, - ["AfflictionNotableHexBreaker"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hex Breaker", statOrderKey = "7139", statOrder = { 7139 }, level = 75, group = "AfflictionNotableHexBreaker", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 113, 0 }, modTags = { "attack", "caster", "speed", "curse" }, }, - ["AfflictionNotableArcaneAdept_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Arcane Adept", statOrderKey = "7018", statOrder = { 7018 }, level = 68, group = "AfflictionNotableArcaneAdept", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 281, 0 }, modTags = { "caster_damage", "damage", "attack", "caster", "speed" }, }, - ["AfflictionNotableDistilledPerfection_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Distilled Perfection", statOrderKey = "7081", statOrder = { 7081 }, level = 1, group = "AfflictionNotableDistilledPerfection", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 1079, 1778, 0 }, modTags = { "flask", "resource", "life", "mana" }, }, - ["AfflictionNotableSpikedConcoction"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Spiked Concoction", statOrderKey = "7247", statOrder = { 7247 }, level = 50, group = "AfflictionNotableSpikedConcoction", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 539, 889, 0 }, modTags = { "flask", "attack", "caster", "speed" }, }, - ["AfflictionNotableFasting"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fasting", statOrderKey = "7108", statOrder = { 7108 }, level = 50, group = "AfflictionNotableFasting", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 539, 889, 0 }, modTags = { "flask", "speed" }, }, - ["AfflictionNotableMendersWellspring__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mender's Wellspring", statOrderKey = "7170", statOrder = { 7170 }, level = 68, group = "AfflictionNotableMendersWellspring", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 202, 333, 0 }, modTags = { "flask", "resource", "life" }, }, - ["AfflictionNotableSpecialReserve"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Special Reserve", statOrderKey = "7246", statOrder = { 7246 }, level = 1, group = "AfflictionNotableSpecialReserve", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 1079, 1778, 0 }, modTags = { "flask", "resource", "life", "damage" }, }, - ["AfflictionNotableNumbingElixir"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Numbing Elixir", statOrderKey = "7179", statOrder = { 7179 }, level = 68, group = "AfflictionNotableNumbingElixir", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 202, 333, 0 }, modTags = { "flask", "caster", "ailment", "curse" }, }, - ["AfflictionNotableMobMentality"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mob Mentality", statOrderKey = "7173", statOrder = { 7173 }, level = 75, group = "AfflictionNotableMobMentality", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 109, 0 }, modTags = { "endurance_charge", "frenzy_charge", "power_charge", "damage", "attack" }, }, - ["AfflictionNotableCryWolf__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cry Wolf", statOrderKey = "7063", statOrder = { 7063 }, level = 68, group = "AfflictionNotableCryWolf", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 327, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableHauntingShout"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Haunting Shout", statOrderKey = "7134", statOrder = { 7134 }, level = 50, group = "AfflictionNotableHauntingShout", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 873, 0 }, modTags = { }, }, - ["AfflictionNotableLeadByExample__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Lead By Example", statOrderKey = "7154", statOrder = { 7154 }, level = 1, group = "AfflictionNotableLeadByExample", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 1745, 0 }, modTags = { "attribute" }, }, - ["AfflictionNotableProvocateur"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Provocateur", statOrderKey = "7202", statOrder = { 7202 }, level = 50, group = "AfflictionNotableProvocateur", weightKey = { "affliction_warcry_buff_effect", "affliction_critical_chance", "default", }, weightVal = { 873, 457, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotableWarningCall"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Warning Call", statOrderKey = "7288", statOrder = { 7288 }, level = 68, group = "AfflictionNotableWarningCall", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 327, 0 }, modTags = { "defences", "armour" }, }, - ["AfflictionNotableRattlingBellow"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rattling Bellow", statOrderKey = "7212", statOrder = { 7212 }, level = 1, group = "AfflictionNotableRattlingBellow", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 1745, 0 }, modTags = { "damage", "attack", "attribute" }, }, - ["AfflictionNotableBloodscent"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Bloodscent", statOrderKey = "7033", statOrder = { 7033 }, level = 75, group = "AfflictionNotableBloodscent", weightKey = { "affliction_axe_and_sword_damage", "default", }, weightVal = { 47, 0 }, modTags = { "attack" }, }, - ["AfflictionNotableRunThrough"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Run Through", statOrderKey = "7224", statOrder = { 7224 }, level = 68, group = "AfflictionNotableRunThrough", weightKey = { "affliction_axe_and_sword_damage", "default", }, weightVal = { 141, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["AfflictionNotableWoundAggravation____"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wound Aggravation", statOrderKey = "7300", statOrder = { 7300 }, level = 1, group = "AfflictionNotableWoundAggravation", weightKey = { "affliction_axe_and_sword_damage", "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 750, 686, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["AfflictionNotableOverlord"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Overlord", statOrderKey = "7183", statOrder = { 7183 }, level = 75, group = "AfflictionNotableOverlord", weightKey = { "affliction_mace_and_staff_damage", "default", }, weightVal = { 47, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableExpansiveMight"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Expansive Might", statOrderKey = "7099", statOrder = { 7099 }, level = 68, group = "AfflictionNotableExpansiveMight", weightKey = { "affliction_mace_and_staff_damage", "affliction_area_damage", "default", }, weightVal = { 141, 367, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableWeightAdvantage_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Weight Advantage", statOrderKey = "7290", statOrder = { 7290 }, level = 1, group = "AfflictionNotableWeightAdvantage", weightKey = { "affliction_mace_and_staff_damage", "default", }, weightVal = { 750, 0 }, modTags = { "damage", "attack", "attribute" }, }, - ["AfflictionNotableWindup_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wind-up", statOrderKey = "7295", statOrder = { 7295 }, level = 68, group = "AfflictionNotableWindup", weightKey = { "affliction_dagger_and_claw_damage", "default", }, weightVal = { 151, 0 }, modTags = { "power_charge", "damage", "attack", "critical" }, }, - ["AfflictionNotableFanofBlades_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fan of Blades", statOrderKey = "7106", statOrder = { 7106 }, level = 75, group = "AfflictionNotableFanofBlades", weightKey = { "affliction_dagger_and_claw_damage", "default", }, weightVal = { 51, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableDiseaseVector"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Disease Vector", statOrderKey = "7078", statOrder = { 7078 }, level = 50, group = "AfflictionNotableDiseaseVector", weightKey = { "affliction_dagger_and_claw_damage", "default", }, weightVal = { 404, 0 }, modTags = { "chaos_damage", "poison", "damage", "chaos", "ailment" }, }, - ["AfflictionNotableArcingShot__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Arcing Shot", statOrderKey = "7021", statOrder = { 7021 }, level = 50, group = "AfflictionNotableArcingShot", weightKey = { "affliction_bow_damage", "default", }, weightVal = { 387, 0 }, modTags = { "damage", "attack", "critical" }, }, - ["AfflictionNotableTemperedArrowheads"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Tempered Arrowheads", statOrderKey = "7265", statOrder = { 7265 }, level = 50, group = "AfflictionNotableTemperedArrowheads", weightKey = { "affliction_bow_damage", "default", }, weightVal = { 387, 0 }, modTags = { "damage", "attack", "ailment" }, }, - ["AfflictionNotableBroadside_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Broadside", statOrderKey = "7039", statOrder = { 7039 }, level = 1, group = "AfflictionNotableBroadside", weightKey = { "affliction_bow_damage", "default", }, weightVal = { 774, 0 }, modTags = { "attack" }, }, - ["AfflictionNotableExplosiveForce"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Explosive Force", statOrderKey = "7102", statOrder = { 7102 }, level = 68, group = "AfflictionNotableExplosiveForce", weightKey = { "affliction_wand_damage", "default", }, weightVal = { 151, 0 }, modTags = { "physical_damage", "chaos_damage", "damage", "physical", "chaos", "attack" }, }, - ["AfflictionNotableOpportunisticFusilade_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Opportunistic Fusilade", statOrderKey = "7182", statOrder = { 7182 }, level = 1, group = "AfflictionNotableOpportunisticFusilade", weightKey = { "affliction_wand_damage", "default", }, weightVal = { 807, 0 }, modTags = { "damage", "attack", "critical" }, }, - ["AfflictionNotableStormsHand"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Storm's Hand", statOrderKey = "7254", statOrder = { 7254 }, level = 50, group = "AfflictionNotableStormsHand", weightKey = { "affliction_wand_damage", "default", }, weightVal = { 403, 0 }, modTags = { "physical_damage", "elemental_damage", "damage", "physical", "elemental", "lightning", "attack" }, }, - ["AfflictionNotableBattlefieldDominator"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Battlefield Dominator", statOrderKey = "7026", statOrder = { 7026 }, level = 1, group = "AfflictionNotableBattlefieldDominator", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 604, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableMartialMastery"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Martial Mastery", statOrderKey = "7162", statOrder = { 7162 }, level = 50, group = "AfflictionNotableMartialMastery", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 302, 0 }, modTags = { "attack", "speed", "attribute" }, }, - ["AfflictionNotableSurefootedStriker_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Surefooted Striker", statOrderKey = "7262", statOrder = { 7262 }, level = 50, group = "AfflictionNotableSurefootedStriker", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 302, 0 }, modTags = { "damage", "attack", "critical" }, }, - ["AfflictionNotableGracefulExecution_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Graceful Execution", statOrderKey = "7127", statOrder = { 7127 }, level = 1, group = "AfflictionNotableGracefulExecution", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 604, 0 }, modTags = { "attack", "speed", "critical", "attribute" }, }, - ["AfflictionNotableBrutalInfamy"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Brutal Infamy", statOrderKey = "7041", statOrder = { 7041 }, level = 50, group = "AfflictionNotableBrutalInfamy", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 302, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableFearsomeWarrior"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fearsome Warrior", statOrderKey = "7109", statOrder = { 7109 }, level = 68, group = "AfflictionNotableFearsomeWarrior", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 113, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableCombatRhythm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Combat Rhythm", statOrderKey = "7055", statOrder = { 7055 }, level = 50, group = "AfflictionNotableCombatRhythm", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 312, 0 }, modTags = { "attack", "speed" }, }, - ["AfflictionNotableHitandRun"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hit and Run", statOrderKey = "7141", statOrder = { 7141 }, level = 1, group = "AfflictionNotableHitandRun", weightKey = { "affliction_attack_damage_while_dual_wielding_", "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 623, 1477, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableInsatiableKiller_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Insatiable Killer", statOrderKey = "7147", statOrder = { 7147 }, level = 50, group = "AfflictionNotableInsatiableKiller", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 312, 0 }, modTags = { "frenzy_charge", "attack", "speed" }, }, - ["AfflictionNotableMageBane__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mage Bane", statOrderKey = "7159", statOrder = { 7159 }, level = 68, group = "AfflictionNotableMageBane", weightKey = { "affliction_attack_damage_while_dual_wielding_", "affliction_chance_to_block", "default", }, weightVal = { 117, 141, 0 }, modTags = { "block", "power_charge", "damage", "attack" }, }, - ["AfflictionNotableMartialMomentum"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Martial Momentum", statOrderKey = "7163", statOrder = { 7163 }, level = 50, group = "AfflictionNotableMartialMomentum", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 312, 0 }, modTags = { "damage", "attack", "speed" }, }, - ["AfflictionNotableDeadlyRepartee"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Deadly Repartee", statOrderKey = "7070", statOrder = { 7070 }, level = 1, group = "AfflictionNotableDeadlyRepartee", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 623, 0 }, modTags = { "block", "damage", "attack", "critical" }, }, - ["AfflictionNotableQuickandDeadly_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Quick and Deadly", statOrderKey = "7209", statOrder = { 7209 }, level = 68, group = "AfflictionNotableQuickandDeadly", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 117, 0 }, modTags = { "damage", "attack", "speed" }, }, - ["AfflictionNotableSmitetheWeak"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Smite the Weak", statOrderKey = "7242", statOrder = { 7242 }, level = 1, group = "AfflictionNotableSmitetheWeak", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 432, 750, 750, 808, 774, 807, 604, 623, 600, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableHeavyHitter"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Heavy Hitter", statOrderKey = "7136", statOrder = { 7136 }, level = 50, group = "AfflictionNotableHeavyHitter", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 216, 375, 375, 404, 387, 403, 302, 312, 300, 0 }, modTags = { "damage", "attack" }, }, - ["AfflictionNotableMartialProwess"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Martial Prowess", statOrderKey = "7164", statOrder = { 7164 }, level = 1, group = "AfflictionNotableMartialProwess", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 432, 750, 750, 808, 774, 807, 604, 623, 600, 0 }, modTags = { "damage", "attack", "speed" }, }, - ["AfflictionNotableCalamitous"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Calamitous", statOrderKey = "7044", statOrder = { 7044 }, level = 50, group = "AfflictionNotableCalamitous", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 216, 375, 375, 404, 387, 403, 302, 312, 300, 0 }, modTags = { "elemental", "fire", "cold", "lightning", "attack", "ailment" }, }, - ["AfflictionNotableDevastator"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Devastator", statOrderKey = "7075", statOrder = { 7075 }, level = 75, group = "AfflictionNotableDevastator", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 27, 47, 47, 51, 48, 50, 38, 39, 38, 0 }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, - ["AfflictionNotableFueltheFight"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fuel the Fight", statOrderKey = "7122", statOrder = { 7122 }, level = 1, group = "AfflictionNotableFueltheFight", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 432, 750, 750, 808, 774, 807, 604, 623, 600, 0 }, modTags = { "resource", "mana", "attack", "speed" }, }, - ["AfflictionNotableDrivetheDestruction__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Drive the Destruction", statOrderKey = "7087", statOrder = { 7087 }, level = 1, group = "AfflictionNotableDrivetheDestruction", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 432, 750, 750, 808, 774, 807, 604, 623, 600, 0 }, modTags = { "resource", "life", "damage", "attack" }, }, - ["AfflictionNotableFeedtheFury"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Feed the Fury", statOrderKey = "7112", statOrder = { 7112 }, level = 50, group = "AfflictionNotableFeedtheFury", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 216, 375, 375, 404, 387, 403, 302, 312, 300, 0 }, modTags = { "resource", "life", "damage", "attack", "speed" }, }, - ["AfflictionNotableSealMender"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Seal Mender", statOrderKey = "7231", statOrder = { 7231 }, level = 75, group = "AfflictionNotableSealMender", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 94, 0 }, modTags = { }, }, - ["AfflictionNotableConjuredWall"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Conjured Wall", statOrderKey = "7058", statOrder = { 7058 }, level = 50, group = "AfflictionNotableConjuredWall", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 750, 0 }, modTags = { "block", "caster_damage", "damage", "caster" }, }, - ["AfflictionNotableArcaneHeroism_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Arcane Heroism", statOrderKey = "7019", statOrder = { 7019 }, level = 68, group = "AfflictionNotableArcaneHeroism", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 281, 0 }, modTags = { }, }, - ["AfflictionNotablePracticedCaster"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Practiced Caster", statOrderKey = "7192", statOrder = { 7192 }, level = 1, group = "AfflictionNotablePracticedCaster", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 1500, 0 }, modTags = { "caster_damage", "damage", "caster", "speed" }, }, - ["AfflictionNotableBurdenProjection"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Burden Projection", statOrderKey = "7042", statOrder = { 7042 }, level = 50, group = "AfflictionNotableBurdenProjection", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 750, 0 }, modTags = { "caster_damage", "damage", "caster", "speed" }, }, - ["AfflictionNotableThaumophage"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Thaumophage", statOrderKey = "7266", statOrder = { 7266 }, level = 50, group = "AfflictionNotableThaumophage", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 750, 0 }, modTags = { "caster_damage", "defences", "energy_shield", "damage", "caster" }, }, - ["AfflictionNotableEssenceRush"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Essence Rush", statOrderKey = "7096", statOrder = { 7096 }, level = 50, group = "AfflictionNotableEssenceRush", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 750, 0 }, modTags = { "caster_damage", "defences", "energy_shield", "damage", "attack", "caster", "speed" }, }, - ["AfflictionNotableSapPsyche"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Sap Psyche", statOrderKey = "7227", statOrder = { 7227 }, level = 68, group = "AfflictionNotableSapPsyche", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 281, 0 }, modTags = { "caster_damage", "resource", "mana", "defences", "energy_shield", "damage", "caster" }, }, - ["AfflictionNotableSadist_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sadist", statOrderKey = "7225", statOrder = { 7225 }, level = 68, group = "AfflictionNotableSadist", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 281, 136, 95, 89, 0 }, modTags = { "elemental_damage", "damage", "elemental" }, }, - ["AfflictionNotableCorrosiveElements"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Corrosive Elements", statOrderKey = "7061", statOrder = { 7061 }, level = 75, group = "AfflictionNotableCorrosiveElements", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 94, 45, 32, 30, 0 }, modTags = { "elemental_damage", "damage", "elemental" }, }, - ["AfflictionNotableDoryanisLesson_"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Doryani's Lesson", statOrderKey = "7084", statOrder = { 7084 }, level = 68, group = "AfflictionNotableDoryanisLesson", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 281, 136, 95, 89, 0 }, modTags = { "elemental_damage", "resource", "life", "damage", "elemental" }, }, - ["AfflictionNotableDisorientingDisplay____"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Disorienting Display", statOrderKey = "7079", statOrder = { 7079 }, level = 50, group = "AfflictionNotableDisorientingDisplay", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 750, 364, 253, 238, 0 }, modTags = { "elemental_damage", "damage", "elemental" }, }, - ["AfflictionNotablePrismaticHeart__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Prismatic Heart", statOrderKey = "7200", statOrder = { 7200 }, level = 1, group = "AfflictionNotablePrismaticHeart", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 1500, 727, 505, 475, 1371, 1371, 1315, 0 }, modTags = { "elemental_damage", "damage", "elemental", "resistance" }, }, - ["AfflictionNotableWidespreadDestruction"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Widespread Destruction", statOrderKey = "7293", statOrder = { 7293 }, level = 1, group = "AfflictionNotableWidespreadDestruction", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 1500, 727, 505, 475, 0 }, modTags = { "elemental_damage", "damage", "elemental" }, }, - ["AfflictionNotableMasterofFire"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master of Fire", statOrderKey = "7167", statOrder = { 7167 }, level = 75, group = "AfflictionNotableMasterofFire", weightKey = { "affliction_fire_damage", "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 30, 46, 0 }, modTags = { }, }, - ["AfflictionNotableSmokingRemains"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Smoking Remains", statOrderKey = "7243", statOrder = { 7243 }, level = 50, group = "AfflictionNotableSmokingRemains", weightKey = { "affliction_fire_damage", "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 238, 366, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["AfflictionNotableCremator"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cremator", statOrderKey = "7062", statOrder = { 7062 }, level = 50, group = "AfflictionNotableCremator", weightKey = { "affliction_fire_damage", "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 238, 366, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["AfflictionNotableSnowstorm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Snowstorm", statOrderKey = "7245", statOrder = { 7245 }, level = 50, group = "AfflictionNotableSnowstorm", weightKey = { "affliction_lightning_damage", "affliction_cold_damage", "default", }, weightVal = { 364, 253, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "lightning" }, }, - ["AfflictionNotableStormDrinker___"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Storm Drinker", statOrderKey = "7252", statOrder = { 7252 }, level = 1, group = "AfflictionNotableStormDrinker", weightKey = { "affliction_lightning_damage", "default", }, weightVal = { 727, 0 }, modTags = { "elemental_damage", "defences", "energy_shield", "damage", "elemental", "lightning" }, }, - ["AfflictionNotableParalysis"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Paralysis", statOrderKey = "7186", statOrder = { 7186 }, level = 50, group = "AfflictionNotableParalysis", weightKey = { "affliction_lightning_damage", "default", }, weightVal = { 364, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["AfflictionNotableSupercharge"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Supercharge", statOrderKey = "7261", statOrder = { 7261 }, level = 75, group = "AfflictionNotableSupercharge", weightKey = { "default", }, weightVal = { 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, - ["AfflictionNotableBlanketedSnow_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blanketed Snow", statOrderKey = "7028", statOrder = { 7028 }, level = 68, group = "AfflictionNotableBlanketedSnow", weightKey = { "affliction_cold_damage", "default", }, weightVal = { 95, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["AfflictionNotableColdtotheCore"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cold to the Core", statOrderKey = "7054", statOrder = { 7054 }, level = 68, group = "AfflictionNotableColdtotheCore", weightKey = { "affliction_cold_damage", "default", }, weightVal = { 95, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, - ["AfflictionNotableColdBloodedKiller_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cold-Blooded Killer", statOrderKey = "7052", statOrder = { 7052 }, level = 50, group = "AfflictionNotableColdBloodedKiller", weightKey = { "affliction_cold_damage", "affliction_cold_damage_over_time_multiplier", "default", }, weightVal = { 253, 390, 0 }, modTags = { "elemental_damage", "resource", "life", "damage", "elemental", "cold" }, }, - ["AfflictionNotableTouchofCruelty_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Touch of Cruelty", statOrderKey = "7269", statOrder = { 7269 }, level = 1, group = "AfflictionNotableTouchofCruelty", weightKey = { "affliction_chaos_damage", "default", }, weightVal = { 519, 0 }, modTags = { "chaos_damage", "damage", "chaos" }, }, - ["AfflictionNotableUnwaveringlyEvil"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Unwaveringly Evil", statOrderKey = "7275", statOrder = { 7275 }, level = 1, group = "AfflictionNotableUnwaveringlyEvil", weightKey = { "affliction_chaos_damage", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 519, 696, 0 }, modTags = { "chaos_damage", "damage", "chaos" }, }, - ["AfflictionNotableUnspeakableGifts"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Unspeakable Gifts", statOrderKey = "7272", statOrder = { 7272 }, level = 75, group = "AfflictionNotableUnspeakableGifts", weightKey = { "affliction_chaos_damage", "default", }, weightVal = { 32, 0 }, modTags = { "chaos_damage", "damage", "chaos" }, }, - ["AfflictionNotableDarkIdeation"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Dark Ideation", statOrderKey = "7067", statOrder = { 7067 }, level = 68, group = "AfflictionNotableDarkIdeation", weightKey = { "affliction_chaos_damage", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 97, 130, 0 }, modTags = { "chaos_damage", "damage", "chaos" }, }, - ["AfflictionNotableUnholyGrace_"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Unholy Grace", statOrderKey = "7271", statOrder = { 7271 }, level = 1, group = "AfflictionNotableUnholyGrace", weightKey = { "affliction_chaos_damage", "default", }, weightVal = { 519, 0 }, modTags = { "caster_damage", "chaos_damage", "damage", "chaos", "attack", "caster", "speed" }, }, - ["AfflictionNotableWickedPall_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wicked Pall", statOrderKey = "7292", statOrder = { 7292 }, level = 50, group = "AfflictionNotableWickedPall", weightKey = { "affliction_chaos_damage", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 259, 348, 0 }, modTags = { "chaos_damage", "damage", "chaos" }, }, - ["AfflictionNotableRenewal"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Renewal", statOrderKey = "7217", statOrder = { 7217 }, level = 50, group = "AfflictionNotableRenewal", weightKey = { "affliction_minion_damage", "affliction_minion_life", "default", }, weightVal = { 500, 716, 0 }, modTags = { "resource", "life", "damage", "minion" }, }, - ["AfflictionNotableRazeandPillage_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Raze and Pillage", statOrderKey = "7213", statOrder = { 7213 }, level = 68, group = "AfflictionNotableRazeandPillage", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 188, 0 }, modTags = { "physical_damage", "elemental_damage", "bleed", "damage", "physical", "elemental", "fire", "minion", "ailment" }, }, - ["AfflictionNotableRottenClaws"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rotten Claws", statOrderKey = "7223", statOrder = { 7223 }, level = 50, group = "AfflictionNotableRottenClaws", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 500, 0 }, modTags = { "physical", "attack", "minion" }, }, - ["AfflictionNotableCalltotheSlaughter"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Call to the Slaughter", statOrderKey = "7045", statOrder = { 7045 }, level = 1, group = "AfflictionNotableCalltotheSlaughter", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 1000, 0 }, modTags = { "caster_damage", "damage", "attack", "caster", "speed", "minion" }, }, - ["AfflictionNotableSkeletalAtrophy"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Skeletal Atrophy", statOrderKey = "7239", statOrder = { 7239 }, level = 68, group = "AfflictionNotableSkeletalAtrophy", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 188, 0 }, modTags = { "physical_damage", "chaos_damage", "damage", "physical", "chaos", "minion" }, }, - ["AfflictionNotableHulkingCorpses"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hulking Corpses", statOrderKey = "7145", statOrder = { 7145 }, level = 50, group = "AfflictionNotableHulkingCorpses", weightKey = { "affliction_minion_life", "default", }, weightVal = { 716, 0 }, modTags = { "resource", "life", "minion" }, }, - ["AfflictionNotableViciousBite"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Vicious Bite", statOrderKey = "7279", statOrder = { 7279 }, level = 75, group = "AfflictionNotableViciousBite", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 63, 0 }, modTags = { "damage", "minion", "critical" }, }, - ["AfflictionNotablePrimordialBond"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Primordial Bond", statOrderKey = "7197", statOrder = { 7197 }, level = 68, group = "AfflictionNotablePrimordialBond", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 188, 0 }, modTags = { "resource", "life", "damage", "minion" }, }, - ["AfflictionNotableBlowback"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blowback", statOrderKey = "7034", statOrder = { 7034 }, level = 50, group = "AfflictionNotableBlowback", weightKey = { "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 366, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "ailment" }, }, - ["AfflictionNotableFantheFlames_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fan the Flames", statOrderKey = "7107", statOrder = { 7107 }, level = 68, group = "AfflictionNotableFantheFlames", weightKey = { "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 137, 0 }, modTags = { "elemental", "fire", "ailment" }, }, - ["AfflictionNotableCookedAlive"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cooked Alive", statOrderKey = "7060", statOrder = { 7060 }, level = 68, group = "AfflictionNotableCookedAlive", weightKey = { "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 137, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "ailment" }, }, - ["AfflictionNotableBurningBright"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Burning Bright", statOrderKey = "7043", statOrder = { 7043 }, level = 50, group = "AfflictionNotableBurningBright", weightKey = { "affliction_fire_damage_over_time_multiplier", "affliction_fire_damage", "default", }, weightVal = { 366, 238, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["AfflictionNotableWrappedinFlame_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wrapped in Flame", statOrderKey = "7301", statOrder = { 7301 }, level = 68, group = "AfflictionNotableWrappedinFlame", weightKey = { "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 137, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, - ["AfflictionNotableVividHues"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vivid Hues", statOrderKey = "7285", statOrder = { 7285 }, level = 50, group = "AfflictionNotableVividHues", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 343, 0 }, modTags = { "bleed", "resource", "life", "physical", "attack", "ailment" }, }, - ["AfflictionNotableRend"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rend", statOrderKey = "7216", statOrder = { 7216 }, level = 50, group = "AfflictionNotableRend", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 343, 0 }, modTags = { "bleed", "physical", "attack", "ailment" }, }, - ["AfflictionNotableDisorientingWounds"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Disorienting Wounds", statOrderKey = "7080", statOrder = { 7080 }, level = 1, group = "AfflictionNotableDisorientingWounds", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 686, 0 }, modTags = { "bleed", "physical", "attack", "ailment" }, }, - ["AfflictionNotableCompoundInjury"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Compound Injury", statOrderKey = "7056", statOrder = { 7056 }, level = 50, group = "AfflictionNotableCompoundInjury", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 343, 0 }, modTags = { "bleed", "physical", "attack", "ailment" }, }, - ["AfflictionNotableBloodArtist"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blood Artist", statOrderKey = "7032", statOrder = { 7032 }, level = 75, group = "AfflictionNotableBloodArtist", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 129, 0 }, modTags = { "bleed", "physical", "ailment" }, }, - ["AfflictionNotablePhlebotomist"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Phlebotomist", statOrderKey = "7189", statOrder = { 7189 }, level = 50, group = "AfflictionNotablePhlebotomist", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 343, 0 }, modTags = { "bleed", "physical", "critical", "ailment" }, }, - ["AfflictionNotableSepticSpells"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Septic Spells", statOrderKey = "7235", statOrder = { 7235 }, level = 50, group = "AfflictionNotableSepticSpells", weightKey = { "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 348, 0 }, modTags = { "caster_damage", "chaos_damage", "poison", "damage", "chaos", "caster", "speed", "ailment" }, }, - ["AfflictionNotableLowTolerance"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Low Tolerance", statOrderKey = "7158", statOrder = { 7158 }, level = 68, group = "AfflictionNotableLowTolerance", weightKey = { "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 130, 0 }, modTags = { "chaos_damage", "poison", "damage", "chaos", "ailment" }, }, - ["AfflictionNotableSteadyTorment"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Steady Torment", statOrderKey = "7250", statOrder = { 7250 }, level = 68, group = "AfflictionNotableSteadyTorment", weightKey = { "affliction_chaos_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 130, 129, 0 }, modTags = { "physical_damage", "chaos_damage", "bleed", "poison", "damage", "physical", "chaos", "attack", "ailment", "ailment" }, }, - ["AfflictionNotableEternalSuffering"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Eternal Suffering", statOrderKey = "7097", statOrder = { 7097 }, level = 50, group = "AfflictionNotableEternalSuffering", weightKey = { "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 348, 0 }, modTags = { "chaos_damage", "damage", "chaos" }, }, - ["AfflictionNotableEldritchInspiration"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Eldritch Inspiration", statOrderKey = "7088", statOrder = { 7088 }, level = 50, group = "AfflictionNotableEldritchInspiration", weightKey = { "affliction_chaos_damage_over_time_multiplier", "affliction_maximum_mana", "default", }, weightVal = { 348, 466, 0 }, modTags = { "chaos_damage", "resource", "mana", "damage", "chaos" }, }, - ["AfflictionNotableWastingAffliction"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wasting Affliction", statOrderKey = "7289", statOrder = { 7289 }, level = 68, group = "AfflictionNotableWastingAffliction", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 222, 178, 129, 137, 130, 0 }, modTags = { "damage", "ailment" }, }, - ["AfflictionNotableHaemorrhage"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Haemorrhage", statOrderKey = "7133", statOrder = { 7133 }, level = 50, group = "AfflictionNotableHaemorrhage", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_critical_chance", "default", }, weightVal = { 593, 475, 343, 366, 348, 457, 0 }, modTags = { "damage", "critical", "ailment" }, }, - ["AfflictionNotableFlowofLife_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Flow of Life", statOrderKey = "7118", statOrder = { 7118 }, level = 68, group = "AfflictionNotableFlowofLife", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_maximum_life", "default", }, weightVal = { 222, 178, 129, 137, 130, 146, 0 }, modTags = { "resource", "life", "damage" }, }, - ["AfflictionNotableExposureTherapy_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Exposure Therapy", statOrderKey = "7103", statOrder = { 7103 }, level = 1, group = "AfflictionNotableExposureTherapy", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_chaos_resistance", "default", }, weightVal = { 1185, 950, 686, 733, 696, 2341, 0 }, modTags = { "chaos_damage", "damage", "chaos", "resistance" }, }, - ["AfflictionNotableBrushwithDeath"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Brush with Death", statOrderKey = "7040", statOrder = { 7040 }, level = 68, group = "AfflictionNotableBrushwithDeath", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_maximum_life", "affliction_maximum_energy_shield", "default", }, weightVal = { 222, 178, 129, 137, 130, 146, 189, 0 }, modTags = { "resource", "life", "defences", "energy_shield", "damage" }, }, - ["AfflictionNotableVileReinvigoration_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vile Reinvigoration", statOrderKey = "7283", statOrder = { 7283 }, level = 50, group = "AfflictionNotableVileReinvigoration", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_maximum_energy_shield", "default", }, weightVal = { 593, 475, 343, 366, 348, 505, 0 }, modTags = { "defences", "energy_shield", "damage" }, }, - ["AfflictionNotableCirclingOblivion"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Circling Oblivion", statOrderKey = "7050", statOrder = { 7050 }, level = 1, group = "AfflictionNotableCirclingOblivion", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 1185, 950, 686, 733, 696, 0 }, modTags = { "damage", "ailment" }, }, - ["AfflictionNotableBrewedforPotency"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Brewed for Potency", statOrderKey = "7038", statOrder = { 7038 }, level = 1, group = "AfflictionNotableBrewedforPotency", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_flask_duration", "default", }, weightVal = { 1185, 950, 686, 733, 696, 1079, 0 }, modTags = { "flask", "resource", "life", "mana", "damage" }, }, - ["AfflictionNotableAstonishingAffliction"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Astonishing Affliction", statOrderKey = "7023", statOrder = { 7023 }, level = 1, group = "AfflictionNotableAstonishingAffliction", weightKey = { "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 1627, 0 }, modTags = { "damage", "ailment" }, }, - ["AfflictionNotableColdConduction__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cold Conduction", statOrderKey = "7053", statOrder = { 7053 }, level = 68, group = "AfflictionNotableColdConduction", weightKey = { "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 305, 0 }, modTags = { "elemental", "cold", "lightning", "ailment" }, }, - ["AfflictionNotableInspiredOppression"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Inspired Oppression", statOrderKey = "7148", statOrder = { 7148 }, level = 75, group = "AfflictionNotableInspiredOppression", weightKey = { "affliction_effect_of_non-damaging_ailments", "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "default", }, weightVal = { 102, 94, 45, 32, 0 }, modTags = { "elemental_damage", "resource", "mana", "damage", "elemental", "ailment" }, }, - ["AfflictionNotableChillingPresence"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Chilling Presence", statOrderKey = "7048", statOrder = { 7048 }, level = 75, group = "AfflictionNotableChillingPresence", weightKey = { "affliction_effect_of_non-damaging_ailments", "affliction_cold_damage_over_time_multiplier", "default", }, weightVal = { 102, 59, 0 }, modTags = { "elemental", "cold", "ailment" }, }, - ["AfflictionNotableDeepChill"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Deep Chill", statOrderKey = "7071", statOrder = { 7071 }, level = 1, group = "AfflictionNotableDeepChill", weightKey = { "affliction_effect_of_non-damaging_ailments", "affliction_cold_damage", "affliction_cold_damage_over_time_multiplier", "default", }, weightVal = { 1627, 505, 950, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "ailment" }, }, - ["AfflictionNotableBlastFreeze_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blast-Freeze", statOrderKey = "7029", statOrder = { 7029 }, level = 68, group = "AfflictionNotableBlastFreeze", weightKey = { "affliction_cold_damage", "affliction_cold_damage_over_time_multiplier", "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 95, 178, 305, 0 }, modTags = { "elemental_damage", "damage", "elemental", "cold", "ailment" }, }, - ["AfflictionNotableThunderstruck"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Thunderstruck", statOrderKey = "7267", statOrder = { 7267 }, level = 50, group = "AfflictionNotableThunderstruck", weightKey = { "affliction_lightning_damage", "default", }, weightVal = { 364, 0 }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "critical" }, }, - ["AfflictionNotableStormrider"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Stormrider", statOrderKey = "7253", statOrder = { 7253 }, level = 68, group = "AfflictionNotableStormrider", weightKey = { "affliction_effect_of_non-damaging_ailments", "affliction_cold_damage", "affliction_lightning_damage", "default", }, weightVal = { 305, 95, 136, 0 }, modTags = { "power_charge", "elemental_damage", "damage", "elemental", "cold", "lightning" }, }, - ["AfflictionNotableOvershock"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Overshock", statOrderKey = "7184", statOrder = { 7184 }, level = 50, group = "AfflictionNotableOvershock", weightKey = { "affliction_lightning_damage", "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 364, 814, 0 }, modTags = { "elemental", "lightning", "ailment" }, }, - ["AfflictionNotableEvilEye"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Evil Eye", statOrderKey = "7098", statOrder = { 7098 }, level = 1, group = "AfflictionNotableEvilEye", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 706, 706, 0 }, modTags = { "caster_damage", "damage", "caster", "curse" }, }, - ["AfflictionNotableWhispersofDeath"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Evil Eye", statOrderKey = "7291", statOrder = { 7291 }, level = 1, group = "AfflictionNotableWhispersofDeath", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 0, 0, 0 }, modTags = { "caster", "curse" }, }, - ["AfflictionNotableWardbreaker_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Forbidden Words", statOrderKey = "7287", statOrder = { 7287 }, level = 68, group = "AfflictionNotableWardbreaker", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 0, 0, 0 }, modTags = { "resource", "mana", "caster", "curse" }, }, - ["AfflictionNotableDarkDiscourse"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Doedre's Spite", statOrderKey = "7066", statOrder = { 7066 }, level = 50, group = "AfflictionNotableDarkDiscourse", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 353, 353, 0 }, modTags = { "caster", "curse" }, }, - ["AfflictionNotableVictimMaker"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Victim Maker", statOrderKey = "7282", statOrder = { 7282 }, level = 50, group = "AfflictionNotableVictimMaker", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 353, 353, 0 }, modTags = { "caster", "speed", "curse" }, }, - ["AfflictionNotableMasterofFear"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master of Fear", statOrderKey = "7166", statOrder = { 7166 }, level = 68, group = "AfflictionNotableMasterofFear", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 0, 0, 0 }, modTags = { "caster", "curse" }, }, - ["AfflictionNotableWishforDeath_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wish for Death", statOrderKey = "7298", statOrder = { 7298 }, level = 50, group = "AfflictionNotableWishforDeath", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 0, 0, 0 }, modTags = { "caster", "curse" }, }, - ["AfflictionNotableLordofDrought_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Lord of Drought", statOrderKey = "7116", statOrder = { 7116 }, level = 50, group = "AfflictionNotableLordofDrought", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_fire_damage", "default", }, weightVal = { 353, 353, 0, 0 }, modTags = { "caster", "curse" }, }, - ["AfflictionNotableBlizzardCaller_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blizzard Caller", statOrderKey = "7121", statOrder = { 7121 }, level = 50, group = "AfflictionNotableBlizzardCaller", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_cold_damage", "default", }, weightVal = { 353, 353, 0, 0 }, modTags = { "caster", "critical", "curse" }, }, - ["AfflictionNotableTempttheStorm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Tempt the Storm", statOrderKey = "7156", statOrder = { 7156 }, level = 50, group = "AfflictionNotableTempttheStorm", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_lightning_damage", "default", }, weightVal = { 353, 353, 0, 0 }, modTags = { "caster", "speed", "curse" }, }, - ["AfflictionNotableMiseryEverlasting"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Misery Everlasting", statOrderKey = "7073", statOrder = { 7073 }, level = 50, group = "AfflictionNotableMiseryEverlasting", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_chaos_damage", "default", }, weightVal = { 353, 353, 0, 0 }, modTags = { "caster", "curse" }, }, - ["AfflictionNotableExploitWeakness_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Exploit Weakness", statOrderKey = "7137", statOrder = { 7137 }, level = 50, group = "AfflictionNotableExploitWeakness", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_physical_damage", "default", }, weightVal = { 353, 353, 0, 0 }, modTags = { "physical_damage", "caster_damage", "damage", "physical", "caster", "curse" }, }, - ["AfflictionNotableHoundsMark"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hound's Mark", statOrderKey = "7144", statOrder = { 7144 }, level = 1, group = "AfflictionNotableHoundsMark", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 706, 706, 0 }, modTags = { "caster_damage", "damage", "caster", "curse" }, }, - ["AfflictionNotableDoedresGluttony"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Doedre's Gluttony", statOrderKey = "7083", statOrder = { 7083 }, level = 50, group = "AfflictionNotableDoedresGluttony", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 353, 353, 0 }, modTags = { "caster_damage", "damage", "caster", "curse" }, }, - ["AfflictionNotableDoedresApathy____"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Doedre's Apathy", statOrderKey = "7082", statOrder = { 7082 }, level = 68, group = "AfflictionNotableDoedresApathy", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 132, 132, 0 }, modTags = { "caster", "curse" }, }, - ["AfflictionNotableMasterOfTheMaelstrom_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master of the Maelstrom", statOrderKey = "7168", statOrder = { 7168 }, level = 50, group = "AfflictionNotableMasterOfTheMaelstrom", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 353, 353, 0 }, modTags = { "elemental", "caster", "ailment", "curse" }, }, - ["AfflictionNotableHeraldry"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Heraldry", statOrderKey = "7138", statOrder = { 7138 }, level = 75, group = "AfflictionNotableHeraldry", weightKey = { "affliction_damage_while_you_have_a_herald", "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 118, 158, 0 }, modTags = { }, }, - ["AfflictionNotableEndbringer"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Endbringer", statOrderKey = "7091", statOrder = { 7091 }, level = 68, group = "AfflictionNotableEndbringer", weightKey = { "affliction_damage_while_you_have_a_herald", "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 353, 474, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableCultLeader_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cult-Leader", statOrderKey = "7064", statOrder = { 7064 }, level = 1, group = "AfflictionNotableCultLeader", weightKey = { "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 2526, 0 }, modTags = { "damage", "minion" }, }, - ["AfflictionNotableEmpoweredEnvoy_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Empowered Envoy", statOrderKey = "7090", statOrder = { 7090 }, level = 1, group = "AfflictionNotableEmpoweredEnvoy", weightKey = { "affliction_damage_while_you_have_a_herald", "default", }, weightVal = { 1882, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableDarkMessenger"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Dark Messenger", statOrderKey = "7068", statOrder = { 7068 }, level = 50, group = "AfflictionNotableDarkMessenger", weightKey = { "affliction_damage_while_you_have_a_herald", "default", }, weightVal = { 941, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableAgentofDestruction"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Agent of Destruction", statOrderKey = "7007", statOrder = { 7007 }, level = 1, group = "AfflictionNotableAgentofDestruction", weightKey = { "affliction_damage_while_you_have_a_herald", "default", }, weightVal = { 1882, 0 }, modTags = { "elemental_damage", "damage", "elemental", "fire", "cold", "lightning", "ailment" }, }, - ["AfflictionNotableLastingImpression_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Lasting Impression", statOrderKey = "7153", statOrder = { 7153 }, level = 68, group = "AfflictionNotableLastingImpression", weightKey = { "affliction_damage_while_you_have_a_herald", "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 353, 474, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableSelfFulfillingProphecy_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Self-Fulfilling Prophecy", statOrderKey = "7234", statOrder = { 7234 }, level = 68, group = "AfflictionNotableSelfFulfillingProphecy", weightKey = { "affliction_damage_while_you_have_a_herald", "default", }, weightVal = { 353, 0 }, modTags = { "damage", "critical" }, }, - ["AfflictionNotableInvigoratingPortents"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Invigorating Portents", statOrderKey = "7151", statOrder = { 7151 }, level = 50, group = "AfflictionNotableInvigoratingPortents", weightKey = { "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 1263, 0 }, modTags = { "damage", "speed", "minion" }, }, - ["AfflictionNotablePureAgony_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pure Agony", statOrderKey = "7203", statOrder = { 7203 }, level = 68, group = "AfflictionNotablePureAgony", weightKey = { "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 474, 0 }, modTags = { "damage", "minion" }, }, - ["AfflictionNotableDisciples_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Disciples", statOrderKey = "7076", statOrder = { 7076 }, level = 68, group = "AfflictionNotableDisciples", weightKey = { "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 474, 0 }, modTags = { "damage", "speed", "minion" }, }, - ["AfflictionNotableDreadMarch_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Dread March", statOrderKey = "7086", statOrder = { 7086 }, level = 1, group = "AfflictionNotableDreadMarch", weightKey = { "affliction_minion_life", "default", }, weightVal = { 1433, 0 }, modTags = { "resource", "life", "chaos", "resistance", "speed", "minion" }, }, - ["AfflictionNotableBlessedRebirth"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blessed Rebirth", statOrderKey = "7031", statOrder = { 7031 }, level = 68, group = "AfflictionNotableBlessedRebirth", weightKey = { "affliction_minion_life", "default", }, weightVal = { 269, 0 }, modTags = { "resource", "life", "minion" }, }, - ["AfflictionNotableLifefromDeath_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Life from Death", statOrderKey = "7155", statOrder = { 7155 }, level = 50, group = "AfflictionNotableLifefromDeath", weightKey = { "affliction_minion_life", "default", }, weightVal = { 716, 0 }, modTags = { "resource", "life", "minion" }, }, - ["AfflictionNotableFeastingFiends"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Feasting Fiends", statOrderKey = "7111", statOrder = { 7111 }, level = 1, group = "AfflictionNotableFeastingFiends", weightKey = { "affliction_minion_life", "affliction_minion_damage", "default", }, weightVal = { 1433, 1000, 0 }, modTags = { "resource", "life", "damage", "minion" }, }, - ["AfflictionNotableBodyguards"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Bodyguards", statOrderKey = "7035", statOrder = { 7035 }, level = 50, group = "AfflictionNotableBodyguards", weightKey = { "affliction_minion_life", "default", }, weightVal = { 716, 0 }, modTags = { "resource", "life", "minion" }, }, - ["AfflictionNotableFollowThrough_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Follow-Through", statOrderKey = "7119", statOrder = { 7119 }, level = 68, group = "AfflictionNotableFollowThrough", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 333, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableStreamlined"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Streamlined", statOrderKey = "7255", statOrder = { 7255 }, level = 1, group = "AfflictionNotableStreamlined", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 1778, 0 }, modTags = { "damage", "speed" }, }, - ["AfflictionNotableShriekingBolts_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Shrieking Bolts", statOrderKey = "7238", statOrder = { 7238 }, level = 50, group = "AfflictionNotableShriekingBolts", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 889, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableEyetoEye"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Eye to Eye", statOrderKey = "7105", statOrder = { 7105 }, level = 50, group = "AfflictionNotableEyetoEye", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 889, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableRepeater"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Repeater", statOrderKey = "7218", statOrder = { 7218 }, level = 1, group = "AfflictionNotableRepeater", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 1778, 0 }, modTags = { "caster_damage", "damage", "attack", "caster", "speed" }, }, - ["AfflictionNotableAerodynamics"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Aerodynamics", statOrderKey = "7006", statOrder = { 7006 }, level = 68, group = "AfflictionNotableAerodynamics", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 333, 0 }, modTags = { "damage", "speed" }, }, - ["AfflictionNotableChipAway"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Chip Away", statOrderKey = "7049", statOrder = { 7049 }, level = 50, group = "AfflictionNotableChipAway", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 1171, 0 }, modTags = { "caster", "speed" }, }, - ["AfflictionNotableSeekerRunes"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Seeker Runes", statOrderKey = "7233", statOrder = { 7233 }, level = 68, group = "AfflictionNotableSeekerRunes", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 439, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["AfflictionNotableRemarkable"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Remarkable", statOrderKey = "7215", statOrder = { 7215 }, level = 68, group = "AfflictionNotableRemarkable", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 439, 0 }, modTags = { "caster", "speed" }, }, - ["AfflictionNotableBrandLoyalty"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Brand Loyalty", statOrderKey = "7037", statOrder = { 7037 }, level = 1, group = "AfflictionNotableBrandLoyalty", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 2341, 0 }, modTags = { "caster_damage", "damage", "caster" }, }, - ["AfflictionNotableHolyConquest"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Holy Conquest", statOrderKey = "7143", statOrder = { 7143 }, level = 50, group = "AfflictionNotableHolyConquest", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 1171, 0 }, modTags = { "caster", "speed" }, }, - ["AfflictionNotableGrandDesign_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Grand Design", statOrderKey = "7129", statOrder = { 7129 }, level = 68, group = "AfflictionNotableGrandDesign", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 439, 0 }, modTags = { "caster", "speed" }, }, - ["AfflictionNotableSetandForget_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Set and Forget", statOrderKey = "7236", statOrder = { 7236 }, level = 50, group = "AfflictionNotableSetandForget", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 980, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableExpertSabotage"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Expert Sabotage", statOrderKey = "7101", statOrder = { 7101 }, level = 50, group = "AfflictionNotableExpertSabotage", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 980, 0 }, modTags = { "speed" }, }, - ["AfflictionNotableGuerillaTactics"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Guerilla Tactics", statOrderKey = "7132", statOrder = { 7132 }, level = 1, group = "AfflictionNotableGuerillaTactics", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 1959, 0 }, modTags = { "damage", "speed" }, }, - ["AfflictionNotableExpendability"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Expendability", statOrderKey = "7100", statOrder = { 7100 }, level = 68, group = "AfflictionNotableExpendability", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 367, 0 }, modTags = { }, }, - ["AfflictionNotableArcanePyrotechnics"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Arcane Pyrotechnics", statOrderKey = "7020", statOrder = { 7020 }, level = 68, group = "AfflictionNotableArcanePyrotechnics", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 367, 0 }, modTags = { "damage" }, }, - ["AfflictionNotableSurpriseSabotage_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Surprise Sabotage", statOrderKey = "7264", statOrder = { 7264 }, level = 50, group = "AfflictionNotableSurpriseSabotage", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 980, 0 }, modTags = { "elemental_damage", "damage", "elemental", "critical" }, }, - ["AfflictionNotableCarefulHandling"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Careful Handling", statOrderKey = "7047", statOrder = { 7047 }, level = 68, group = "AfflictionNotableCarefulHandling", weightKey = { "affliction_trap_and_mine_damage", "affliction_maximum_mana", "affliction_maximum_life", "default", }, weightVal = { 367, 175, 146, 0 }, modTags = { "resource", "life", "mana", "damage" }, }, - ["AfflictionNotablePeakVigour"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Peak Vigour", statOrderKey = "7188", statOrder = { 7188 }, level = 1, group = "AfflictionNotablePeakVigour", weightKey = { "affliction_maximum_life", "affliction_flask_duration", "default", }, weightVal = { 780, 1079, 0 }, modTags = { "flask", "resource", "life" }, }, - ["AfflictionNotableFettle"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fettle", statOrderKey = "7113", statOrder = { 7113 }, level = 75, group = "AfflictionNotableFettle", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 49, 0 }, modTags = { "resource", "life" }, }, - ["AfflictionNotableFeastofFlesh"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Feast of Flesh", statOrderKey = "7110", statOrder = { 7110 }, level = 68, group = "AfflictionNotableFeastofFlesh", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 146, 0 }, modTags = { "resource", "life", "attack" }, }, - ["AfflictionNotableSublimeSensation_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sublime Sensation", statOrderKey = "7259", statOrder = { 7259 }, level = 50, group = "AfflictionNotableSublimeSensation", weightKey = { "affliction_maximum_life", "affliction_maximum_energy_shield", "default", }, weightVal = { 390, 505, 0 }, modTags = { "resource", "life", "defences", "energy_shield" }, }, - ["AfflictionNotableSurgingVitality"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Surging Vitality", statOrderKey = "7263", statOrder = { 7263 }, level = 1, group = "AfflictionNotableSurgingVitality", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 780, 0 }, modTags = { "resource", "life" }, }, - ["AfflictionNotablePeaceAmidstChaos"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Peace Amidst Chaos", statOrderKey = "7187", statOrder = { 7187 }, level = 50, group = "AfflictionNotablePeaceAmidstChaos", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 390, 0 }, modTags = { "resource", "life", "defences", "armour" }, }, - ["AfflictionNotableAdrenaline_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Adrenaline", statOrderKey = "7003", statOrder = { 7003 }, level = 68, group = "AfflictionNotableAdrenaline", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 146, 0 }, modTags = { "resource", "life" }, }, - ["AfflictionNotableWallofMuscle_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wall of Muscle", statOrderKey = "7286", statOrder = { 7286 }, level = 75, group = "AfflictionNotableWallofMuscle", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 49, 0 }, modTags = { "resource", "life", "attribute" }, }, - ["AfflictionNotableMindfulness"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mindfulness", statOrderKey = "7172", statOrder = { 7172 }, level = 50, group = "AfflictionNotableMindfulness", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 466, 0 }, modTags = { "resource", "mana" }, }, - ["AfflictionNotableLiquidInspiration"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Liquid Inspiration", statOrderKey = "7157", statOrder = { 7157 }, level = 68, group = "AfflictionNotableLiquidInspiration", weightKey = { "affliction_maximum_mana", "affliction_flask_duration", "default", }, weightVal = { 175, 202, 0 }, modTags = { "flask", "power_charge", "resource", "mana" }, }, - ["AfflictionNotableOpenness__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Openness", statOrderKey = "7181", statOrder = { 7181 }, level = 1, group = "AfflictionNotableOpenness", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 932, 0 }, modTags = { "resource", "mana" }, }, - ["AfflictionNotableDaringIdeas"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Daring Ideas", statOrderKey = "7065", statOrder = { 7065 }, level = 50, group = "AfflictionNotableDaringIdeas", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 466, 0 }, modTags = { "resource", "mana", "attack" }, }, - ["AfflictionNotableClarityofPurpose"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Clarity of Purpose", statOrderKey = "7051", statOrder = { 7051 }, level = 1, group = "AfflictionNotableClarityofPurpose", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 932, 0 }, modTags = { "resource", "mana" }, }, - ["AfflictionNotableScintillatingIdea_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Scintillating Idea", statOrderKey = "7230", statOrder = { 7230 }, level = 50, group = "AfflictionNotableScintillatingIdea", weightKey = { "affliction_maximum_mana", "affliction_lightning_damage", "default", }, weightVal = { 466, 364, 0 }, modTags = { "elemental_damage", "resource", "mana", "damage", "elemental", "lightning" }, }, - ["AfflictionNotableHolisticHealth"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Holistic Health", statOrderKey = "7142", statOrder = { 7142 }, level = 68, group = "AfflictionNotableHolisticHealth", weightKey = { "affliction_maximum_mana", "affliction_maximum_life", "default", }, weightVal = { 175, 146, 0 }, modTags = { "resource", "life", "mana" }, }, - ["AfflictionNotableGenius"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Genius", statOrderKey = "7124", statOrder = { 7124 }, level = 75, group = "AfflictionNotableGenius", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 58, 0 }, modTags = { "resource", "mana", "attribute" }, }, - ["AfflictionNotableImprovisor"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Improvisor", statOrderKey = "7146", statOrder = { 7146 }, level = 68, group = "AfflictionNotableImprovisor", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 175, 0 }, modTags = { "resource", "mana", "attack" }, }, - ["AfflictionNotableStubbornStudent"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Stubborn Student", statOrderKey = "7257", statOrder = { 7257 }, level = 68, group = "AfflictionNotableStubbornStudent", weightKey = { "affliction_maximum_mana", "affliction_armour", "default", }, weightVal = { 175, 261, 0 }, modTags = { "resource", "mana", "defences", "armour" }, }, - ["AfflictionNotableSavourtheMoment"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Savour the Moment", statOrderKey = "7229", statOrder = { 7229 }, level = 1, group = "AfflictionNotableSavourtheMoment", weightKey = { "affliction_maximum_energy_shield", "default", }, weightVal = { 1011, 0 }, modTags = { "defences", "energy_shield" }, }, - ["AfflictionNotableEnergyFromNaught"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Energy From Naught", statOrderKey = "7095", statOrder = { 7095 }, level = 50, group = "AfflictionNotableEnergyFromNaught", weightKey = { "affliction_maximum_energy_shield", "default", }, weightVal = { 505, 0 }, modTags = { "defences", "energy_shield" }, }, - ["AfflictionNotableWillShaper"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Will Shaper", statOrderKey = "7294", statOrder = { 7294 }, level = 75, group = "AfflictionNotableWillShaper", weightKey = { "affliction_maximum_energy_shield", "affliction_maximum_mana", "default", }, weightVal = { 63, 58, 0 }, modTags = { "defences", "energy_shield" }, }, - ["AfflictionNotableSpringBack_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Spring Back", statOrderKey = "7248", statOrder = { 7248 }, level = 1, group = "AfflictionNotableSpringBack", weightKey = { "affliction_maximum_energy_shield", "default", }, weightVal = { 1011, 0 }, modTags = { "defences", "energy_shield" }, }, - ["AfflictionNotableConservationofEnergy"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Conservation of Energy", statOrderKey = "7059", statOrder = { 7059 }, level = 68, group = "AfflictionNotableConservationofEnergy", weightKey = { "affliction_maximum_energy_shield", "default", }, weightVal = { 189, 0 }, modTags = { "defences", "energy_shield", "caster" }, }, - ["AfflictionNotableSelfControl"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Self-Control", statOrderKey = "7077", statOrder = { 7077 }, level = 50, group = "AfflictionNotableSelfControl", weightKey = { "affliction_maximum_energy_shield", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 505, 480, 480, 0 }, modTags = { "resource", "mana" }, }, - ["AfflictionNotableHeartofIron"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Heart of Iron", statOrderKey = "7135", statOrder = { 7135 }, level = 68, group = "AfflictionNotableHeartofIron", weightKey = { "affliction_maximum_life", "affliction_armour", "default", }, weightVal = { 146, 261, 0 }, modTags = { "defences", "armour" }, }, - ["AfflictionNotablePrismaticCarapace_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Prismatic Carapace", statOrderKey = "7198", statOrder = { 7198 }, level = 75, group = "AfflictionNotablePrismaticCarapace", weightKey = { "affliction_armour", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 87, 86, 86, 82, 0 }, modTags = { "defences", "armour", "elemental", "resistance" }, }, - ["AfflictionNotableMilitarism"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Militarism", statOrderKey = "7171", statOrder = { 7171 }, level = 50, group = "AfflictionNotableMilitarism", weightKey = { "affliction_armour", "default", }, weightVal = { 696, 0 }, modTags = { "resource", "life", "defences", "armour" }, }, - ["AfflictionNotableSecondSkin"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Second Skin", statOrderKey = "7232", statOrder = { 7232 }, level = 1, group = "AfflictionNotableSecondSkin", weightKey = { "affliction_armour", "affliction_chance_to_block", "default", }, weightVal = { 1391, 750, 0 }, modTags = { "block", "defences", "armour" }, }, - ["AfflictionNotableDragonHunter__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Dragon Hunter", statOrderKey = "7085", statOrder = { 7085 }, level = 50, group = "AfflictionNotableDragonHunter", weightKey = { "affliction_armour", "affliction_fire_resistance", "default", }, weightVal = { 696, 658, 0 }, modTags = { "defences", "armour", "elemental", "fire", "resistance" }, }, - ["AfflictionNotableEnduringComposure"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Enduring Composure", statOrderKey = "7092", statOrder = { 7092 }, level = 68, group = "AfflictionNotableEnduringComposure", weightKey = { "affliction_armour", "default", }, weightVal = { 261, 0 }, modTags = { "endurance_charge", "defences", "armour" }, }, - ["AfflictionNotableUncompromising_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Uncompromising", statOrderKey = "7074", statOrder = { 7074 }, level = 50, group = "AfflictionNotableUncompromising", weightKey = { "affliction_armour", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 696, 480, 480, 0 }, modTags = { "resource", "mana" }, }, - ["AfflictionNotablePrismaticDance____"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Prismatic Dance", statOrderKey = "7199", statOrder = { 7199 }, level = 75, group = "AfflictionNotablePrismaticDance", weightKey = { "affliction_evasion", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 82, 86, 86, 82, 0 }, modTags = { "defences", "evasion", "elemental", "resistance" }, }, - ["AfflictionNotableNaturalVigour_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Natural Vigour", statOrderKey = "7176", statOrder = { 7176 }, level = 50, group = "AfflictionNotableNaturalVigour", weightKey = { "affliction_evasion", "affliction_maximum_life", "default", }, weightVal = { 658, 390, 0 }, modTags = { "resource", "life", "defences", "evasion" }, }, - ["AfflictionNotableUntouchable"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Untouchable", statOrderKey = "7273", statOrder = { 7273 }, level = 1, group = "AfflictionNotableUntouchable", weightKey = { "affliction_evasion", "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 1315, 1477, 0 }, modTags = { "defences", "evasion" }, }, - ["AfflictionNotableShiftingShadow"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Shifting Shadow", statOrderKey = "7237", statOrder = { 7237 }, level = 50, group = "AfflictionNotableShiftingShadow", weightKey = { "affliction_evasion", "default", }, weightVal = { 658, 0 }, modTags = { "defences", "evasion", "attribute" }, }, - ["AfflictionNotableReadiness"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Readiness", statOrderKey = "7214", statOrder = { 7214 }, level = 1, group = "AfflictionNotableReadiness", weightKey = { "affliction_evasion", "default", }, weightVal = { 1315, 0 }, modTags = { "bleed", "defences", "evasion", "physical", "attack", "ailment" }, }, - ["AfflictionNotableSublimeForm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sublime Form", statOrderKey = "7128", statOrder = { 7128 }, level = 50, group = "AfflictionNotableSublimeForm", weightKey = { "affliction_evasion", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 658, 480, 480, 0 }, modTags = { "resource", "mana", "elemental", "resistance" }, }, - ["AfflictionNotableConfidentCombatant"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Confident Combatant", statOrderKey = "7057", statOrder = { 7057 }, level = 68, group = "AfflictionNotableConfidentCombatant", weightKey = { "default", }, weightVal = { 0 }, modTags = { "damage" }, }, - ["AfflictionNotableFlexibleSentry___"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Flexible Sentry", statOrderKey = "7117", statOrder = { 7117 }, level = 50, group = "AfflictionNotableFlexibleSentry", weightKey = { "affliction_chance_to_block", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 375, 686, 686, 658, 0 }, modTags = { "block", "ailment" }, }, - ["AfflictionNotableViciousGuard_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vicious Guard", statOrderKey = "7280", statOrder = { 7280 }, level = 1, group = "AfflictionNotableViciousGuard", weightKey = { "affliction_chance_to_block", "affliction_maximum_life", "default", }, weightVal = { 750, 780, 0 }, modTags = { "block", "resource", "life", "attack" }, }, - ["AfflictionNotableMysticalWard_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mystical Ward", statOrderKey = "7175", statOrder = { 7175 }, level = 1, group = "AfflictionNotableMysticalWard", weightKey = { "affliction_chance_to_block", "affliction_maximum_energy_shield", "default", }, weightVal = { 750, 1011, 0 }, modTags = { "block", "defences", "energy_shield" }, }, - ["AfflictionNotableRoteReinforcement"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rote Reinforcement", statOrderKey = "7222", statOrder = { 7222 }, level = 68, group = "AfflictionNotableRoteReinforcement", weightKey = { "affliction_chance_to_block", "affliction_maximum_life", "default", }, weightVal = { 141, 146, 0 }, modTags = { "block", "endurance_charge", "resource", "life" }, }, - ["AfflictionNotableMageHunter___"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mage Hunter", statOrderKey = "7160", statOrder = { 7160 }, level = 68, group = "AfflictionNotableMageHunter", weightKey = { "affliction_chance_to_block", "affliction_spell_damage", "default", }, weightVal = { 141, 281, 0 }, modTags = { "block", "power_charge", "caster_damage", "damage", "caster" }, }, - ["AfflictionNotableRiotQueller"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Riot Queller", statOrderKey = "7220", statOrder = { 7220 }, level = 75, group = "AfflictionNotableRiotQueller", weightKey = { "affliction_chance_to_block", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 47, 38, 0 }, modTags = { "block" }, }, - ["AfflictionNotableOnewiththeShield_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is One with the Shield", statOrderKey = "7180", statOrder = { 7180 }, level = 50, group = "AfflictionNotableOnewiththeShield", weightKey = { "affliction_chance_to_block", "default", }, weightVal = { 375, 0 }, modTags = { "block", "resource", "life", "defences" }, }, - ["AfflictionNotableAerialist"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Aerialist", statOrderKey = "7005", statOrder = { 7005 }, level = 75, group = "AfflictionNotableAerialist", weightKey = { "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 92, 0 }, modTags = { "attribute" }, }, - ["AfflictionNotableElegantForm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Elegant Form", statOrderKey = "7089", statOrder = { 7089 }, level = 1, group = "AfflictionNotableElegantForm", weightKey = { "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 1477, 0 }, modTags = { "ailment" }, }, - ["AfflictionNotableDartingMovements"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Darting Movements", statOrderKey = "7069", statOrder = { 7069 }, level = 1, group = "AfflictionNotableDartingMovements", weightKey = { "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 1477, 0 }, modTags = { "speed" }, }, - ["AfflictionNotableNoWitnesses"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is No Witnesses", statOrderKey = "7177", statOrder = { 7177 }, level = 75, group = "AfflictionNotableNoWitnesses", weightKey = { "default", }, weightVal = { 0 }, modTags = { }, }, - ["AfflictionNotableMoltenOnesMark_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Molten One's Mark", statOrderKey = "7174", statOrder = { 7174 }, level = 68, group = "AfflictionNotableMoltenOnesMark", weightKey = { "affliction_fire_resistance", "default", }, weightVal = { 247, 0 }, modTags = { "resource", "life", "elemental", "fire", "resistance" }, }, - ["AfflictionNotableFireAttunement_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fire Attunement", statOrderKey = "7114", statOrder = { 7114 }, level = 1, group = "AfflictionNotableFireAttunement", weightKey = { "affliction_fire_resistance", "default", }, weightVal = { 1315, 0 }, modTags = { "elemental", "fire", "ailment" }, }, - ["AfflictionNotablePureMight"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pure Might", statOrderKey = "7207", statOrder = { 7207 }, level = 68, group = "AfflictionNotablePureMight", weightKey = { "affliction_fire_resistance", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 247, 180, 180, 0 }, modTags = { "resource", "mana", "attribute" }, }, - ["AfflictionNotableBlacksmith_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blacksmith", statOrderKey = "7027", statOrder = { 7027 }, level = 68, group = "AfflictionNotableBlacksmith", weightKey = { "affliction_fire_resistance", "affliction_armour", "default", }, weightVal = { 247, 261, 0 }, modTags = { "resource", "life", "defences", "armour", "elemental", "fire", "resistance" }, }, - ["AfflictionNotableNonFlammable"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Non-Flammable", statOrderKey = "7178", statOrder = { 7178 }, level = 50, group = "AfflictionNotableNonFlammable", weightKey = { "affliction_fire_resistance", "default", }, weightVal = { 658, 0 }, modTags = { "elemental", "fire", "resistance", "ailment" }, }, - ["AfflictionNotableWinterProwler"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Winter Prowler", statOrderKey = "7297", statOrder = { 7297 }, level = 68, group = "AfflictionNotableWinterProwler", weightKey = { "affliction_cold_resistance", "default", }, weightVal = { 257, 0 }, modTags = { "elemental", "cold", "resistance", "speed" }, }, - ["AfflictionNotableHibernator"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hibernator", statOrderKey = "7140", statOrder = { 7140 }, level = 50, group = "AfflictionNotableHibernator", weightKey = { "affliction_cold_resistance", "default", }, weightVal = { 686, 0 }, modTags = { "elemental", "cold", "ailment" }, }, - ["AfflictionNotablePureGuile"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pure Guile", statOrderKey = "7206", statOrder = { 7206 }, level = 68, group = "AfflictionNotablePureGuile", weightKey = { "affliction_cold_resistance", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 257, 180, 180, 0 }, modTags = { "resource", "mana", "attribute" }, }, - ["AfflictionNotableAlchemist"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Alchemist", statOrderKey = "7009", statOrder = { 7009 }, level = 1, group = "AfflictionNotableAlchemist", weightKey = { "affliction_cold_resistance", "default", }, weightVal = { 1371, 0 }, modTags = { "flask", "elemental", "cold", "resistance", "attack", "caster", "speed" }, }, - ["AfflictionNotableAntifreeze"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Antifreeze", statOrderKey = "7016", statOrder = { 7016 }, level = 50, group = "AfflictionNotableAntifreeze", weightKey = { "affliction_cold_resistance", "default", }, weightVal = { 686, 0 }, modTags = { "elemental", "cold", "resistance", "ailment" }, }, - ["AfflictionNotableWizardry_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wizardry", statOrderKey = "7299", statOrder = { 7299 }, level = 68, group = "AfflictionNotableWizardry", weightKey = { "affliction_lightning_resistance", "affliction_maximum_mana", "default", }, weightVal = { 257, 175, 0 }, modTags = { "resource", "mana", "elemental", "lightning", "resistance" }, }, - ["AfflictionNotableCapacitor____"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Capacitor", statOrderKey = "7046", statOrder = { 7046 }, level = 50, group = "AfflictionNotableCapacitor", weightKey = { "affliction_lightning_resistance", "default", }, weightVal = { 686, 0 }, modTags = { "elemental", "lightning", "ailment" }, }, - ["AfflictionNotablePureAptitude"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pure Aptitude", statOrderKey = "7204", statOrder = { 7204 }, level = 68, group = "AfflictionNotablePureAptitude", weightKey = { "affliction_lightning_resistance", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 257, 180, 180, 0 }, modTags = { "resource", "mana", "defences", "energy_shield", "attribute" }, }, - ["AfflictionNotableSage_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sage", statOrderKey = "7226", statOrder = { 7226 }, level = 1, group = "AfflictionNotableSage", weightKey = { "affliction_lightning_resistance", "affliction_maximum_mana", "affliction_maximum_life", "default", }, weightVal = { 1371, 932, 780, 0 }, modTags = { "resource", "life", "mana", "elemental", "lightning", "resistance" }, }, - ["AfflictionNotableInsulated"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Insulated", statOrderKey = "7149", statOrder = { 7149 }, level = 50, group = "AfflictionNotableInsulated", weightKey = { "affliction_lightning_resistance", "default", }, weightVal = { 686, 0 }, modTags = { "elemental", "lightning", "resistance", "ailment" }, }, - ["AfflictionNotableBornofChaos"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Born of Chaos", statOrderKey = "7036", statOrder = { 7036 }, level = 68, group = "AfflictionNotableBornofChaos", weightKey = { "affliction_chaos_resistance", "default", }, weightVal = { 439, 0 }, modTags = { "chaos", "resistance" }, }, - ["AfflictionNotableAntivenom"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Antivenom", statOrderKey = "7017", statOrder = { 7017 }, level = 50, group = "AfflictionNotableAntivenom", weightKey = { "affliction_chaos_resistance", "default", }, weightVal = { 1171, 0 }, modTags = { "poison", "chaos", "resistance", "ailment" }, }, - ["AfflictionNotableRotResistant"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rot-Resistant", statOrderKey = "7221", statOrder = { 7221 }, level = 68, group = "AfflictionNotableRotResistant", weightKey = { "affliction_chaos_resistance", "default", }, weightVal = { 439, 0 }, modTags = { "resource", "life", "mana", "defences", "energy_shield", "chaos", "resistance" }, }, - ["AfflictionNotableBlessed"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blessed", statOrderKey = "7030", statOrder = { 7030 }, level = 68, group = "AfflictionNotableBlessed", weightKey = { "affliction_chaos_resistance", "affliction_maximum_life", "affliction_maximum_mana", "default", }, weightVal = { 439, 146, 175, 0 }, modTags = { "resource", "life", "mana", "chaos", "resistance" }, }, - ["AfflictionNotableStudentofDecay"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Student of Decay", statOrderKey = "7258", statOrder = { 7258 }, level = 50, group = "AfflictionNotableStudentofDecay", weightKey = { "affliction_chaos_resistance", "affliction_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 1171, 593, 343, 366, 348, 0 }, modTags = { "chaos_damage", "damage", "chaos", "resistance" }, }, - ["AfflictionNotableAggressiveDefence"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Aggressive Defence", statOrderKey = "7008", statOrder = { 7008 }, level = 1, group = "AfflictionNotableAggressiveDefence", weightKey = { "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "default", }, weightVal = { 750, 750, 750, 0 }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableProdigiousDefense__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Prodigious Defence", statOrderKey = "7201", statOrder = { 7201 }, level = 1, group = "AfflictionNotableProdigiousDefense", weightKey = { "affliction_attack_damage_while_holding_a_shield", "affliction_chance_to_block", "default", }, weightVal = { 600, 750, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "damage", "attack" }, }, + ["AfflictionNotableAdvanceGuard"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Advance Guard", statOrderKey = "7004", statOrder = { 7004 }, level = 50, group = "AfflictionNotableAdvanceGuard", weightKey = { "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 300, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "speed" }, }, + ["AfflictionNotableGladiatorialCombat"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Gladiatorial Combat", statOrderKey = "7125", statOrder = { 7125 }, level = 68, group = "AfflictionNotableGladiatorialCombat", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "critical" }, }, + ["AfflictionNotableStrikeLeader_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Strike Leader", statOrderKey = "7256", statOrder = { 7256 }, level = 1, group = "AfflictionNotableStrikeLeader", weightKey = { "affliction_attack_damage_while_holding_a_shield", "affliction_chance_to_block", "default", }, weightVal = { 600, 750, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "damage", "attack" }, }, + ["AfflictionNotablePowerfulWard"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Powerful Ward", statOrderKey = "7191", statOrder = { 7191 }, level = 68, group = "AfflictionNotablePowerfulWard", weightKey = { "affliction_chance_to_block", "default", }, weightVal = { 141, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "power_charge" }, }, + ["AfflictionNotableEnduringWard_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Enduring Ward", statOrderKey = "7094", statOrder = { 7094 }, level = 68, group = "AfflictionNotableEnduringWard", weightKey = { "affliction_chance_to_block", "default", }, weightVal = { 141, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "endurance_charge" }, }, + ["AfflictionNotableGladiatorsFortitude"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Gladiator's Fortitude", statOrderKey = "7126", statOrder = { 7126 }, level = 68, group = "AfflictionNotableGladiatorsFortitude", weightKey = { "affliction_attack_damage_while_holding_a_shield", "affliction_maximum_life", "default", }, weightVal = { 113, 146, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "damage", "attack" }, }, + ["AfflictionNotablePreciseRetaliation_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Precise Retaliation", statOrderKey = "7195", statOrder = { 7195 }, level = 50, group = "AfflictionNotablePreciseRetaliation", weightKey = { "affliction_attack_damage_while_holding_a_shield", "affliction_critical_chance", "default", }, weightVal = { 300, 457, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotableVeteranDefender"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Veteran Defender", statOrderKey = "7278", statOrder = { 7278 }, level = 1, group = "AfflictionNotableVeteranDefender", weightKey = { "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 600, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "elemental", "resistance", "attribute" }, }, + ["AfflictionNotableIronBreaker"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Iron Breaker", statOrderKey = "7152", statOrder = { 7152 }, level = 1, group = "AfflictionNotableIronBreaker", weightKey = { "affliction_physical_damage", "default", }, weightVal = { 464, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "damage", "physical" }, }, + ["AfflictionNotableDeepCuts"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Deep Cuts", statOrderKey = "7072", statOrder = { 7072 }, level = 75, group = "AfflictionNotableDeepCuts", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical", "attack" }, }, + ["AfflictionNotableMastertheFundamentals_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master the Fundamentals", statOrderKey = "7169", statOrder = { 7169 }, level = 50, group = "AfflictionNotableMastertheFundamentals", weightKey = { "affliction_physical_damage", "default", }, weightVal = { 232, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "elemental_damage", "damage", "physical", "elemental", "resistance" }, }, + ["AfflictionNotableForceMultiplier"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Force Multiplier", statOrderKey = "7120", statOrder = { 7120 }, level = 50, group = "AfflictionNotableForceMultiplier", weightKey = { "affliction_physical_damage", "default", }, weightVal = { 232, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "physical_damage", "damage", "physical" }, }, + ["AfflictionNotableFuriousAssault"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Furious Assault", statOrderKey = "7123", statOrder = { 7123 }, level = 1, group = "AfflictionNotableFuriousAssault", weightKey = { "affliction_physical_damage", "default", }, weightVal = { 464, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "physical_damage", "caster_damage", "damage", "damage", "physical", "attack", "caster" }, }, + ["AfflictionNotableViciousSkewering"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vicious Skewering", statOrderKey = "7281", statOrder = { 7281 }, level = 68, group = "AfflictionNotableViciousSkewering", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 81, 141, 141, 151, 145, 151, 113, 117, 113, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "bleed", "physical", "attack", "ailment" }, }, + ["AfflictionNotableGrimOath"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Grim Oath", statOrderKey = "7130", statOrder = { 7130 }, level = 68, group = "AfflictionNotableGrimOath", weightKey = { "affliction_physical_damage", "affliction_chaos_damage", "default", }, weightVal = { 87, 97, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "physical_damage", "chaos_damage", "damage", "physical", "chaos" }, }, + ["AfflictionNotableBattleHardened_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Battle-Hardened", statOrderKey = "7025", statOrder = { 7025 }, level = 50, group = "AfflictionNotableBattleHardened", weightKey = { "affliction_physical_damage", "affliction_armour", "affliction_evasion", "default", }, weightVal = { 232, 696, 658, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "armour", "evasion", "physical" }, }, + ["AfflictionNotableReplenishingPresence"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Replenishing Presence", statOrderKey = "7219", statOrder = { 7219 }, level = 50, group = "AfflictionNotableReplenishingPresence", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 480, 480, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "aura" }, }, + ["AfflictionNotableMasterofCommand__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master of Command", statOrderKey = "7165", statOrder = { 7165 }, level = 68, group = "AfflictionNotableMasterofCommand", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 180, 180, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "aura" }, }, + ["AfflictionNotableFirstAmongEquals__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Spiteful Presence", statOrderKey = "7115", statOrder = { 7115 }, level = 1, group = "AfflictionNotableFirstAmongEquals", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 960, 960, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "elemental", "cold", "aura", "ailment" }, }, + ["AfflictionNotablePurposefulHarbinger"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Purposeful Harbinger", statOrderKey = "7208", statOrder = { 7208 }, level = 75, group = "AfflictionNotablePurposefulHarbinger", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_damage_while_you_have_a_herald", "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 60, 60, 118, 158, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "aura" }, }, + ["AfflictionNotablePreciseCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Destructive Aspect", statOrderKey = "7193", statOrder = { 7193 }, level = 68, group = "AfflictionNotablePreciseCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_critical_chance", "default", }, weightVal = { 180, 180, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "aura" }, }, + ["AfflictionNotablePureCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Electric Presence", statOrderKey = "7205", statOrder = { 7205 }, level = 68, group = "AfflictionNotablePureCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 180, 180, 0, 0, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "elemental", "lightning", "aura", "ailment" }, }, + ["AfflictionNotableSummerCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mortifying Aspect", statOrderKey = "7260", statOrder = { 7260 }, level = 68, group = "AfflictionNotableSummerCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_fire_resistance", "default", }, weightVal = { 180, 180, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "chaos", "resistance", "aura" }, }, + ["AfflictionNotableWinterCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Frantic Aspect", statOrderKey = "7296", statOrder = { 7296 }, level = 68, group = "AfflictionNotableWinterCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_cold_resistance", "default", }, weightVal = { 180, 180, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "speed", "aura" }, }, + ["AfflictionNotableGroundedCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Introspection", statOrderKey = "7131", statOrder = { 7131 }, level = 68, group = "AfflictionNotableGroundedCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_lightning_resistance", "default", }, weightVal = { 180, 180, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "aura" }, }, + ["AfflictionNotableStalwartCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Volatile Presence", statOrderKey = "7249", statOrder = { 7249 }, level = 50, group = "AfflictionNotableStalwartCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_armour", "affliction_evasion", "affliction_maximum_energy_shield", "default", }, weightVal = { 480, 480, 0, 0, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "elemental", "fire", "aura", "ailment" }, }, + ["AfflictionNotableVengefulCommander"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Righteous Path", statOrderKey = "7277", statOrder = { 7277 }, level = 1, group = "AfflictionNotableVengefulCommander", weightKey = { "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 960, 960, 0, 0, 0, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "aura" }, }, + ["AfflictionNotableSkullbreaker"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Skullbreaker", statOrderKey = "7240", statOrder = { 7240 }, level = 68, group = "AfflictionNotableSkullbreaker", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 171, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotablePressurePoints__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pressure Points", statOrderKey = "7196", statOrder = { 7196 }, level = 50, group = "AfflictionNotablePressurePoints", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 457, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotableOverwhelmingMalice"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Overwhelming Malice", statOrderKey = "7185", statOrder = { 7185 }, level = 68, group = "AfflictionNotableOverwhelmingMalice", weightKey = { "affliction_critical_chance", "affliction_chaos_damage", "default", }, weightVal = { 171, 97, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableMagnifier"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Magnifier", statOrderKey = "7161", statOrder = { 7161 }, level = 1, group = "AfflictionNotableMagnifier", weightKey = { "affliction_critical_chance", "affliction_area_damage", "default", }, weightVal = { 914, 1959, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotableSavageResponse"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Savage Response", statOrderKey = "7228", statOrder = { 7228 }, level = 50, group = "AfflictionNotableSavageResponse", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 457, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotableEyeoftheStorm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Eye of the Storm", statOrderKey = "7104", statOrder = { 7104 }, level = 50, group = "AfflictionNotableEyeoftheStorm", weightKey = { "affliction_critical_chance", "affliction_fire_damage_over_time_multiplier", "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 457, 366, 814, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "cold", "lightning", "critical", "ailment" }, }, + ["AfflictionNotableBasicsofPain"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Basics of Pain", statOrderKey = "7024", statOrder = { 7024 }, level = 1, group = "AfflictionNotableBasicsofPain", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 914, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotableQuickGetaway"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Quick Getaway", statOrderKey = "7210", statOrder = { 7210 }, level = 1, group = "AfflictionNotableQuickGetaway", weightKey = { "affliction_critical_chance", "default", }, weightVal = { 914, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attack", "caster", "speed", "critical" }, }, + ["AfflictionNotableAssertDominance"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Assert Dominance", statOrderKey = "7022", statOrder = { 7022 }, level = 68, group = "AfflictionNotableAssertDominance", weightKey = { "affliction_area_damage", "default", }, weightVal = { 367, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableVastPower"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vast Power", statOrderKey = "7276", statOrder = { 7276 }, level = 50, group = "AfflictionNotableVastPower", weightKey = { "affliction_area_damage", "default", }, weightVal = { 980, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotablePowerfulAssault_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Powerful Assault", statOrderKey = "7190", statOrder = { 7190 }, level = 50, group = "AfflictionNotablePowerfulAssault", weightKey = { "affliction_area_damage", "default", }, weightVal = { 980, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableIntensity"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Intensity", statOrderKey = "7150", statOrder = { 7150 }, level = 68, group = "AfflictionNotableIntensity", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableTitanicSwings_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Titanic Swings", statOrderKey = "7268", statOrder = { 7268 }, level = 50, group = "AfflictionNotableTitanicSwings", weightKey = { "affliction_area_damage", "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 980, 302, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableToweringThreat"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Towering Threat", statOrderKey = "7270", statOrder = { 7270 }, level = 68, group = "AfflictionNotableToweringThreat", weightKey = { "affliction_area_damage", "affliction_maximum_life", "default", }, weightVal = { 367, 146, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life" }, }, + ["AfflictionNotableAncestralEcho"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Echo", statOrderKey = "7010", statOrder = { 7010 }, level = 1, group = "AfflictionNotableAncestralEcho", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 1477, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attack", "caster", "speed" }, }, + ["AfflictionNotableAncestralReach"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Reach", statOrderKey = "7015", statOrder = { 7015 }, level = 1, group = "AfflictionNotableAncestralReach", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 1477, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "speed" }, }, + ["AfflictionNotableAncestralMight"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Might", statOrderKey = "7013", statOrder = { 7013 }, level = 50, group = "AfflictionNotableAncestralMight", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 738, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableAncestralPreservation__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Preservation", statOrderKey = "7014", statOrder = { 7014 }, level = 68, group = "AfflictionNotableAncestralPreservation", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 277, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "chaos", "resistance" }, }, + ["AfflictionNotableSnaringSpirits"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Snaring Spirits", statOrderKey = "7244", statOrder = { 7244 }, level = 50, group = "AfflictionNotableSnaringSpirits", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 738, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableSleeplessSentries"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sleepless Sentries", statOrderKey = "7241", statOrder = { 7241 }, level = 68, group = "AfflictionNotableSleeplessSentries", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 277, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableAncestralGuidance_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Guidance", statOrderKey = "7011", statOrder = { 7011 }, level = 50, group = "AfflictionNotableAncestralGuidance", weightKey = { "affliction_totem_damage", "default", }, weightVal = { 738, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "speed" }, }, + ["AfflictionNotableAncestralInspiration__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Ancestral Inspiration", statOrderKey = "7012", statOrder = { 7012 }, level = 68, group = "AfflictionNotableAncestralInspiration", weightKey = { "affliction_totem_damage", "affliction_spell_damage", "default", }, weightVal = { 277, 281, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster" }, }, + ["AfflictionNotableVitalFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vital Focus", statOrderKey = "7284", statOrder = { 7284 }, level = 1, group = "AfflictionNotableVitalFocus", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 1811, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "damage" }, }, + ["AfflictionNotableRapidInfusion_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Unrestrained Focus", statOrderKey = "7211", statOrder = { 7211 }, level = 68, group = "AfflictionNotableRapidInfusion", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 340, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "speed" }, }, + ["AfflictionNotableUnwaveringFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Unwavering Focus", statOrderKey = "7274", statOrder = { 7274 }, level = 50, group = "AfflictionNotableUnwaveringFocus", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 906, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "damage" }, }, + ["AfflictionNotableEnduringFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Enduring Focus", statOrderKey = "7093", statOrder = { 7093 }, level = 75, group = "AfflictionNotableEnduringFocus", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 113, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "endurance_charge", "damage" }, }, + ["AfflictionNotablePreciseFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Precise Focus", statOrderKey = "7194", statOrder = { 7194 }, level = 50, group = "AfflictionNotablePreciseFocus", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 906, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotableStoicFocus"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Stoic Focus", statOrderKey = "7251", statOrder = { 7251 }, level = 1, group = "AfflictionNotableStoicFocus", weightKey = { "affliction_channelling_skill_damage", "affliction_chance_to_block", "default", }, weightVal = { 1811, 750, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "damage" }, }, + ["AfflictionNotableHexBreaker"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hex Breaker", statOrderKey = "7139", statOrder = { 7139 }, level = 75, group = "AfflictionNotableHexBreaker", weightKey = { "affliction_channelling_skill_damage", "default", }, weightVal = { 113, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attack", "caster", "speed", "curse" }, }, + ["AfflictionNotableArcaneAdept_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Arcane Adept", statOrderKey = "7018", statOrder = { 7018 }, level = 68, group = "AfflictionNotableArcaneAdept", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 281, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "attack", "caster", "speed" }, }, + ["AfflictionNotableDistilledPerfection_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Distilled Perfection", statOrderKey = "7081", statOrder = { 7081 }, level = 1, group = "AfflictionNotableDistilledPerfection", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 1079, 1778, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "resource", "life", "mana" }, }, + ["AfflictionNotableSpikedConcoction"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Spiked Concoction", statOrderKey = "7247", statOrder = { 7247 }, level = 50, group = "AfflictionNotableSpikedConcoction", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 539, 889, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "attack", "caster", "speed" }, }, + ["AfflictionNotableFasting"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fasting", statOrderKey = "7108", statOrder = { 7108 }, level = 50, group = "AfflictionNotableFasting", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 539, 889, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "speed" }, }, + ["AfflictionNotableMendersWellspring__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mender's Wellspring", statOrderKey = "7170", statOrder = { 7170 }, level = 68, group = "AfflictionNotableMendersWellspring", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 202, 333, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "resource", "life" }, }, + ["AfflictionNotableSpecialReserve"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Special Reserve", statOrderKey = "7246", statOrder = { 7246 }, level = 1, group = "AfflictionNotableSpecialReserve", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 1079, 1778, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "resource", "life", "damage" }, }, + ["AfflictionNotableNumbingElixir"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Numbing Elixir", statOrderKey = "7179", statOrder = { 7179 }, level = 68, group = "AfflictionNotableNumbingElixir", weightKey = { "affliction_flask_duration", "affliction_life_and_mana_recovery_from_flasks", "default", }, weightVal = { 202, 333, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "caster", "ailment", "curse" }, }, + ["AfflictionNotableMobMentality"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mob Mentality", statOrderKey = "7173", statOrder = { 7173 }, level = 75, group = "AfflictionNotableMobMentality", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 109, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "endurance_charge", "frenzy_charge", "power_charge", "damage", "attack" }, }, + ["AfflictionNotableCryWolf__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cry Wolf", statOrderKey = "7063", statOrder = { 7063 }, level = 68, group = "AfflictionNotableCryWolf", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 327, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableHauntingShout"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Haunting Shout", statOrderKey = "7134", statOrder = { 7134 }, level = 50, group = "AfflictionNotableHauntingShout", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 873, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableLeadByExample__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Lead By Example", statOrderKey = "7154", statOrder = { 7154 }, level = 1, group = "AfflictionNotableLeadByExample", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 1745, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attribute" }, }, + ["AfflictionNotableProvocateur"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Provocateur", statOrderKey = "7202", statOrder = { 7202 }, level = 50, group = "AfflictionNotableProvocateur", weightKey = { "affliction_warcry_buff_effect", "affliction_critical_chance", "default", }, weightVal = { 873, 457, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotableWarningCall"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Warning Call", statOrderKey = "7288", statOrder = { 7288 }, level = 68, group = "AfflictionNotableWarningCall", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 327, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "armour" }, }, + ["AfflictionNotableRattlingBellow"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rattling Bellow", statOrderKey = "7212", statOrder = { 7212 }, level = 1, group = "AfflictionNotableRattlingBellow", weightKey = { "affliction_warcry_buff_effect", "default", }, weightVal = { 1745, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "attribute" }, }, + ["AfflictionNotableBloodscent"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Bloodscent", statOrderKey = "7033", statOrder = { 7033 }, level = 75, group = "AfflictionNotableBloodscent", weightKey = { "affliction_axe_and_sword_damage", "default", }, weightVal = { 47, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attack" }, }, + ["AfflictionNotableRunThrough"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Run Through", statOrderKey = "7224", statOrder = { 7224 }, level = 68, group = "AfflictionNotableRunThrough", weightKey = { "affliction_axe_and_sword_damage", "default", }, weightVal = { 141, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["AfflictionNotableWoundAggravation____"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wound Aggravation", statOrderKey = "7300", statOrder = { 7300 }, level = 1, group = "AfflictionNotableWoundAggravation", weightKey = { "affliction_axe_and_sword_damage", "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 750, 686, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["AfflictionNotableOverlord"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Overlord", statOrderKey = "7183", statOrder = { 7183 }, level = 75, group = "AfflictionNotableOverlord", weightKey = { "affliction_mace_and_staff_damage", "default", }, weightVal = { 47, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableExpansiveMight"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Expansive Might", statOrderKey = "7099", statOrder = { 7099 }, level = 68, group = "AfflictionNotableExpansiveMight", weightKey = { "affliction_mace_and_staff_damage", "affliction_area_damage", "default", }, weightVal = { 141, 367, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableWeightAdvantage_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Weight Advantage", statOrderKey = "7290", statOrder = { 7290 }, level = 1, group = "AfflictionNotableWeightAdvantage", weightKey = { "affliction_mace_and_staff_damage", "default", }, weightVal = { 750, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "attribute" }, }, + ["AfflictionNotableWindup_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wind-up", statOrderKey = "7295", statOrder = { 7295 }, level = 68, group = "AfflictionNotableWindup", weightKey = { "affliction_dagger_and_claw_damage", "default", }, weightVal = { 151, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "power_charge", "damage", "attack", "critical" }, }, + ["AfflictionNotableFanofBlades_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fan of Blades", statOrderKey = "7106", statOrder = { 7106 }, level = 75, group = "AfflictionNotableFanofBlades", weightKey = { "affliction_dagger_and_claw_damage", "default", }, weightVal = { 51, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableDiseaseVector"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Disease Vector", statOrderKey = "7078", statOrder = { 7078 }, level = 50, group = "AfflictionNotableDiseaseVector", weightKey = { "affliction_dagger_and_claw_damage", "default", }, weightVal = { 404, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "poison", "damage", "chaos", "ailment" }, }, + ["AfflictionNotableArcingShot__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Arcing Shot", statOrderKey = "7021", statOrder = { 7021 }, level = 50, group = "AfflictionNotableArcingShot", weightKey = { "affliction_bow_damage", "default", }, weightVal = { 387, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "critical" }, }, + ["AfflictionNotableTemperedArrowheads"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Tempered Arrowheads", statOrderKey = "7265", statOrder = { 7265 }, level = 50, group = "AfflictionNotableTemperedArrowheads", weightKey = { "affliction_bow_damage", "default", }, weightVal = { 387, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "ailment" }, }, + ["AfflictionNotableBroadside_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Broadside", statOrderKey = "7039", statOrder = { 7039 }, level = 1, group = "AfflictionNotableBroadside", weightKey = { "affliction_bow_damage", "default", }, weightVal = { 774, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attack" }, }, + ["AfflictionNotableExplosiveForce"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Explosive Force", statOrderKey = "7102", statOrder = { 7102 }, level = 68, group = "AfflictionNotableExplosiveForce", weightKey = { "affliction_wand_damage", "default", }, weightVal = { 151, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "chaos_damage", "damage", "physical", "chaos", "attack" }, }, + ["AfflictionNotableOpportunisticFusilade_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Opportunistic Fusilade", statOrderKey = "7182", statOrder = { 7182 }, level = 1, group = "AfflictionNotableOpportunisticFusilade", weightKey = { "affliction_wand_damage", "default", }, weightVal = { 807, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "critical" }, }, + ["AfflictionNotableStormsHand"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Storm's Hand", statOrderKey = "7254", statOrder = { 7254 }, level = 50, group = "AfflictionNotableStormsHand", weightKey = { "affliction_wand_damage", "default", }, weightVal = { 403, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "elemental_damage", "damage", "physical", "elemental", "lightning", "attack" }, }, + ["AfflictionNotableBattlefieldDominator"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Battlefield Dominator", statOrderKey = "7026", statOrder = { 7026 }, level = 1, group = "AfflictionNotableBattlefieldDominator", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 604, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableMartialMastery"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Martial Mastery", statOrderKey = "7162", statOrder = { 7162 }, level = 50, group = "AfflictionNotableMartialMastery", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 302, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attack", "speed", "attribute" }, }, + ["AfflictionNotableSurefootedStriker_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Surefooted Striker", statOrderKey = "7262", statOrder = { 7262 }, level = 50, group = "AfflictionNotableSurefootedStriker", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 302, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "critical" }, }, + ["AfflictionNotableGracefulExecution_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Graceful Execution", statOrderKey = "7127", statOrder = { 7127 }, level = 1, group = "AfflictionNotableGracefulExecution", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 604, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attack", "speed", "critical", "attribute" }, }, + ["AfflictionNotableBrutalInfamy"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Brutal Infamy", statOrderKey = "7041", statOrder = { 7041 }, level = 50, group = "AfflictionNotableBrutalInfamy", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 302, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableFearsomeWarrior"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fearsome Warrior", statOrderKey = "7109", statOrder = { 7109 }, level = 68, group = "AfflictionNotableFearsomeWarrior", weightKey = { "affliction_damage_with_two_handed_melee_weapons", "default", }, weightVal = { 113, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableCombatRhythm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Combat Rhythm", statOrderKey = "7055", statOrder = { 7055 }, level = 50, group = "AfflictionNotableCombatRhythm", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 312, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attack", "speed" }, }, + ["AfflictionNotableHitandRun"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hit and Run", statOrderKey = "7141", statOrder = { 7141 }, level = 1, group = "AfflictionNotableHitandRun", weightKey = { "affliction_attack_damage_while_dual_wielding_", "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 623, 1477, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableInsatiableKiller_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Insatiable Killer", statOrderKey = "7147", statOrder = { 7147 }, level = 50, group = "AfflictionNotableInsatiableKiller", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 312, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "frenzy_charge", "attack", "speed" }, }, + ["AfflictionNotableMageBane__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mage Bane", statOrderKey = "7159", statOrder = { 7159 }, level = 68, group = "AfflictionNotableMageBane", weightKey = { "affliction_attack_damage_while_dual_wielding_", "affliction_chance_to_block", "default", }, weightVal = { 117, 141, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "power_charge", "damage", "attack" }, }, + ["AfflictionNotableMartialMomentum"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Martial Momentum", statOrderKey = "7163", statOrder = { 7163 }, level = 50, group = "AfflictionNotableMartialMomentum", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 312, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "speed" }, }, + ["AfflictionNotableDeadlyRepartee"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Deadly Repartee", statOrderKey = "7070", statOrder = { 7070 }, level = 1, group = "AfflictionNotableDeadlyRepartee", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 623, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "damage", "attack", "critical" }, }, + ["AfflictionNotableQuickandDeadly_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Quick and Deadly", statOrderKey = "7209", statOrder = { 7209 }, level = 68, group = "AfflictionNotableQuickandDeadly", weightKey = { "affliction_attack_damage_while_dual_wielding_", "default", }, weightVal = { 117, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack", "speed" }, }, + ["AfflictionNotableSmitetheWeak"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Smite the Weak", statOrderKey = "7242", statOrder = { 7242 }, level = 1, group = "AfflictionNotableSmitetheWeak", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 432, 750, 750, 808, 774, 807, 604, 623, 600, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableHeavyHitter"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Heavy Hitter", statOrderKey = "7136", statOrder = { 7136 }, level = 50, group = "AfflictionNotableHeavyHitter", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 216, 375, 375, 404, 387, 403, 302, 312, 300, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "damage", "attack" }, }, + ["AfflictionNotableMartialProwess"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Martial Prowess", statOrderKey = "7164", statOrder = { 7164 }, level = 1, group = "AfflictionNotableMartialProwess", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 432, 750, 750, 808, 774, 807, 604, 623, 600, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "damage", "attack", "speed" }, }, + ["AfflictionNotableCalamitous"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Calamitous", statOrderKey = "7044", statOrder = { 7044 }, level = 50, group = "AfflictionNotableCalamitous", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 216, 375, 375, 404, 387, 403, 302, 312, 300, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "fire", "cold", "lightning", "attack", "ailment" }, }, + ["AfflictionNotableDevastator"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Devastator", statOrderKey = "7075", statOrder = { 7075 }, level = 75, group = "AfflictionNotableDevastator", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 27, 47, 47, 51, 48, 50, 38, 39, 38, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "damage", "physical", "attack" }, }, + ["AfflictionNotableFueltheFight"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fuel the Fight", statOrderKey = "7122", statOrder = { 7122 }, level = 1, group = "AfflictionNotableFueltheFight", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 432, 750, 750, 808, 774, 807, 604, 623, 600, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "attack", "speed" }, }, + ["AfflictionNotableDrivetheDestruction__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Drive the Destruction", statOrderKey = "7087", statOrder = { 7087 }, level = 1, group = "AfflictionNotableDrivetheDestruction", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 432, 750, 750, 808, 774, 807, 604, 623, 600, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "damage", "attack" }, }, + ["AfflictionNotableFeedtheFury"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Feed the Fury", statOrderKey = "7112", statOrder = { 7112 }, level = 50, group = "AfflictionNotableFeedtheFury", weightKey = { "affliction_attack_damage_", "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "affliction_bow_damage", "affliction_wand_damage", "affliction_damage_with_two_handed_melee_weapons", "affliction_attack_damage_while_dual_wielding_", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 216, 375, 375, 404, 387, 403, 302, 312, 300, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "damage", "attack", "speed" }, }, + ["AfflictionNotableSealMender"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Seal Mender", statOrderKey = "7231", statOrder = { 7231 }, level = 75, group = "AfflictionNotableSealMender", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 94, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableConjuredWall"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Conjured Wall", statOrderKey = "7058", statOrder = { 7058 }, level = 50, group = "AfflictionNotableConjuredWall", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 750, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "caster_damage", "damage", "caster" }, }, + ["AfflictionNotableArcaneHeroism_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Arcane Heroism", statOrderKey = "7019", statOrder = { 7019 }, level = 68, group = "AfflictionNotableArcaneHeroism", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 281, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotablePracticedCaster"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Practiced Caster", statOrderKey = "7192", statOrder = { 7192 }, level = 1, group = "AfflictionNotablePracticedCaster", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 1500, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "caster", "speed" }, }, + ["AfflictionNotableBurdenProjection"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Burden Projection", statOrderKey = "7042", statOrder = { 7042 }, level = 50, group = "AfflictionNotableBurdenProjection", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 750, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "caster", "speed" }, }, + ["AfflictionNotableThaumophage"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Thaumophage", statOrderKey = "7266", statOrder = { 7266 }, level = 50, group = "AfflictionNotableThaumophage", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 750, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "caster_damage", "defences", "energy_shield", "damage", "caster" }, }, + ["AfflictionNotableEssenceRush"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Essence Rush", statOrderKey = "7096", statOrder = { 7096 }, level = 50, group = "AfflictionNotableEssenceRush", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 750, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "caster_damage", "defences", "energy_shield", "damage", "attack", "caster", "speed" }, }, + ["AfflictionNotableSapPsyche"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Sap Psyche", statOrderKey = "7227", statOrder = { 7227 }, level = 68, group = "AfflictionNotableSapPsyche", weightKey = { "affliction_spell_damage", "default", }, weightVal = { 281, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "caster_damage", "resource", "mana", "defences", "energy_shield", "damage", "caster" }, }, + ["AfflictionNotableSadist_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sadist", statOrderKey = "7225", statOrder = { 7225 }, level = 68, group = "AfflictionNotableSadist", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 281, 136, 95, 89, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental" }, }, + ["AfflictionNotableCorrosiveElements"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Corrosive Elements", statOrderKey = "7061", statOrder = { 7061 }, level = 75, group = "AfflictionNotableCorrosiveElements", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 94, 45, 32, 30, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental" }, }, + ["AfflictionNotableDoryanisLesson_"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Doryani's Lesson", statOrderKey = "7084", statOrder = { 7084 }, level = 68, group = "AfflictionNotableDoryanisLesson", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 281, 136, 95, 89, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "elemental_damage", "resource", "life", "damage", "elemental" }, }, + ["AfflictionNotableDisorientingDisplay____"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Disorienting Display", statOrderKey = "7079", statOrder = { 7079 }, level = 50, group = "AfflictionNotableDisorientingDisplay", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 750, 364, 253, 238, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental" }, }, + ["AfflictionNotablePrismaticHeart__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Prismatic Heart", statOrderKey = "7200", statOrder = { 7200 }, level = 1, group = "AfflictionNotablePrismaticHeart", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 1500, 727, 505, 475, 1371, 1371, 1315, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "resistance" }, }, + ["AfflictionNotableWidespreadDestruction"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Widespread Destruction", statOrderKey = "7293", statOrder = { 7293 }, level = 1, group = "AfflictionNotableWidespreadDestruction", weightKey = { "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "affliction_fire_damage", "default", }, weightVal = { 1500, 727, 505, 475, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental" }, }, + ["AfflictionNotableMasterofFire"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master of Fire", statOrderKey = "7167", statOrder = { 7167 }, level = 75, group = "AfflictionNotableMasterofFire", weightKey = { "affliction_fire_damage", "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 30, 46, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableSmokingRemains"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Smoking Remains", statOrderKey = "7243", statOrder = { 7243 }, level = 50, group = "AfflictionNotableSmokingRemains", weightKey = { "affliction_fire_damage", "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 238, 366, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["AfflictionNotableCremator"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cremator", statOrderKey = "7062", statOrder = { 7062 }, level = 50, group = "AfflictionNotableCremator", weightKey = { "affliction_fire_damage", "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 238, 366, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["AfflictionNotableSnowstorm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Snowstorm", statOrderKey = "7245", statOrder = { 7245 }, level = 50, group = "AfflictionNotableSnowstorm", weightKey = { "affliction_lightning_damage", "affliction_cold_damage", "default", }, weightVal = { 364, 253, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "lightning" }, }, + ["AfflictionNotableStormDrinker___"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Storm Drinker", statOrderKey = "7252", statOrder = { 7252 }, level = 1, group = "AfflictionNotableStormDrinker", weightKey = { "affliction_lightning_damage", "default", }, weightVal = { 727, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "defences", "energy_shield", "damage", "elemental", "lightning" }, }, + ["AfflictionNotableParalysis"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Paralysis", statOrderKey = "7186", statOrder = { 7186 }, level = 50, group = "AfflictionNotableParalysis", weightKey = { "affliction_lightning_damage", "default", }, weightVal = { 364, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["AfflictionNotableSupercharge"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Supercharge", statOrderKey = "7261", statOrder = { 7261 }, level = 75, group = "AfflictionNotableSupercharge", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "lightning" }, }, + ["AfflictionNotableBlanketedSnow_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blanketed Snow", statOrderKey = "7028", statOrder = { 7028 }, level = 68, group = "AfflictionNotableBlanketedSnow", weightKey = { "affliction_cold_damage", "default", }, weightVal = { 95, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["AfflictionNotableColdtotheCore"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cold to the Core", statOrderKey = "7054", statOrder = { 7054 }, level = 68, group = "AfflictionNotableColdtotheCore", weightKey = { "affliction_cold_damage", "default", }, weightVal = { 95, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "cold" }, }, + ["AfflictionNotableColdBloodedKiller_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cold-Blooded Killer", statOrderKey = "7052", statOrder = { 7052 }, level = 50, group = "AfflictionNotableColdBloodedKiller", weightKey = { "affliction_cold_damage", "affliction_cold_damage_over_time_multiplier", "default", }, weightVal = { 253, 390, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "resource", "life", "damage", "elemental", "cold" }, }, + ["AfflictionNotableTouchofCruelty_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Touch of Cruelty", statOrderKey = "7269", statOrder = { 7269 }, level = 1, group = "AfflictionNotableTouchofCruelty", weightKey = { "affliction_chaos_damage", "default", }, weightVal = { 519, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "damage", "chaos" }, }, + ["AfflictionNotableUnwaveringlyEvil"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Unwaveringly Evil", statOrderKey = "7275", statOrder = { 7275 }, level = 1, group = "AfflictionNotableUnwaveringlyEvil", weightKey = { "affliction_chaos_damage", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 519, 696, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "damage", "chaos" }, }, + ["AfflictionNotableUnspeakableGifts"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Unspeakable Gifts", statOrderKey = "7272", statOrder = { 7272 }, level = 75, group = "AfflictionNotableUnspeakableGifts", weightKey = { "affliction_chaos_damage", "default", }, weightVal = { 32, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "chaos_damage", "damage", "chaos" }, }, + ["AfflictionNotableDarkIdeation"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Dark Ideation", statOrderKey = "7067", statOrder = { 7067 }, level = 68, group = "AfflictionNotableDarkIdeation", weightKey = { "affliction_chaos_damage", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 97, 130, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "damage", "chaos" }, }, + ["AfflictionNotableUnholyGrace_"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Unholy Grace", statOrderKey = "7271", statOrder = { 7271 }, level = 1, group = "AfflictionNotableUnholyGrace", weightKey = { "affliction_chaos_damage", "default", }, weightVal = { 519, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "caster_damage", "chaos_damage", "damage", "chaos", "attack", "caster", "speed" }, }, + ["AfflictionNotableWickedPall_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wicked Pall", statOrderKey = "7292", statOrder = { 7292 }, level = 50, group = "AfflictionNotableWickedPall", weightKey = { "affliction_chaos_damage", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 259, 348, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "damage", "chaos" }, }, + ["AfflictionNotableRenewal"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Renewal", statOrderKey = "7217", statOrder = { 7217 }, level = 50, group = "AfflictionNotableRenewal", weightKey = { "affliction_minion_damage", "affliction_minion_life", "default", }, weightVal = { 500, 716, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "damage", "minion" }, }, + ["AfflictionNotableRazeandPillage_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Raze and Pillage", statOrderKey = "7213", statOrder = { 7213 }, level = 68, group = "AfflictionNotableRazeandPillage", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 188, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "elemental_damage", "bleed", "damage", "physical", "elemental", "fire", "minion", "ailment" }, }, + ["AfflictionNotableRottenClaws"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rotten Claws", statOrderKey = "7223", statOrder = { 7223 }, level = 50, group = "AfflictionNotableRottenClaws", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 500, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical", "attack", "minion" }, }, + ["AfflictionNotableCalltotheSlaughter"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Call to the Slaughter", statOrderKey = "7045", statOrder = { 7045 }, level = 1, group = "AfflictionNotableCalltotheSlaughter", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 1000, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "caster_damage", "damage", "attack", "caster", "speed", "minion" }, }, + ["AfflictionNotableSkeletalAtrophy"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Skeletal Atrophy", statOrderKey = "7239", statOrder = { 7239 }, level = 68, group = "AfflictionNotableSkeletalAtrophy", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 188, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "chaos_damage", "damage", "physical", "chaos", "minion" }, }, + ["AfflictionNotableHulkingCorpses"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hulking Corpses", statOrderKey = "7145", statOrder = { 7145 }, level = 50, group = "AfflictionNotableHulkingCorpses", weightKey = { "affliction_minion_life", "default", }, weightVal = { 716, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "minion" }, }, + ["AfflictionNotableViciousBite"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Vicious Bite", statOrderKey = "7279", statOrder = { 7279 }, level = 75, group = "AfflictionNotableViciousBite", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 63, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "damage", "minion", "critical" }, }, + ["AfflictionNotablePrimordialBond"] = { type = "Suffix", affix = "of Significance", "1 Added Passive Skill is Primordial Bond", statOrderKey = "7197", statOrder = { 7197 }, level = 68, group = "AfflictionNotablePrimordialBond", weightKey = { "affliction_minion_damage", "default", }, weightVal = { 188, 0 }, weightMultiplierKey = { "has_affliction_notable2", "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 0, 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable2", "has_affliction_notable", }, modTags = { "resource", "life", "damage", "minion" }, }, + ["AfflictionNotableBlowback"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blowback", statOrderKey = "7034", statOrder = { 7034 }, level = 50, group = "AfflictionNotableBlowback", weightKey = { "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 366, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "ailment" }, }, + ["AfflictionNotableFantheFlames_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fan the Flames", statOrderKey = "7107", statOrder = { 7107 }, level = 68, group = "AfflictionNotableFantheFlames", weightKey = { "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 137, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "fire", "ailment" }, }, + ["AfflictionNotableCookedAlive"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cooked Alive", statOrderKey = "7060", statOrder = { 7060 }, level = 68, group = "AfflictionNotableCookedAlive", weightKey = { "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 137, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "ailment" }, }, + ["AfflictionNotableBurningBright"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Burning Bright", statOrderKey = "7043", statOrder = { 7043 }, level = 50, group = "AfflictionNotableBurningBright", weightKey = { "affliction_fire_damage_over_time_multiplier", "affliction_fire_damage", "default", }, weightVal = { 366, 238, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["AfflictionNotableWrappedinFlame_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wrapped in Flame", statOrderKey = "7301", statOrder = { 7301 }, level = 68, group = "AfflictionNotableWrappedinFlame", weightKey = { "affliction_fire_damage_over_time_multiplier", "default", }, weightVal = { 137, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "fire" }, }, + ["AfflictionNotableVividHues"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vivid Hues", statOrderKey = "7285", statOrder = { 7285 }, level = 50, group = "AfflictionNotableVividHues", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 343, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "bleed", "resource", "life", "physical", "attack", "ailment" }, }, + ["AfflictionNotableRend"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rend", statOrderKey = "7216", statOrder = { 7216 }, level = 50, group = "AfflictionNotableRend", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 343, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "bleed", "physical", "attack", "ailment" }, }, + ["AfflictionNotableDisorientingWounds"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Disorienting Wounds", statOrderKey = "7080", statOrder = { 7080 }, level = 1, group = "AfflictionNotableDisorientingWounds", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 686, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "bleed", "physical", "attack", "ailment" }, }, + ["AfflictionNotableCompoundInjury"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Compound Injury", statOrderKey = "7056", statOrder = { 7056 }, level = 50, group = "AfflictionNotableCompoundInjury", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 343, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "bleed", "physical", "attack", "ailment" }, }, + ["AfflictionNotableBloodArtist"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blood Artist", statOrderKey = "7032", statOrder = { 7032 }, level = 75, group = "AfflictionNotableBloodArtist", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 129, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "bleed", "physical", "ailment" }, }, + ["AfflictionNotablePhlebotomist"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Phlebotomist", statOrderKey = "7189", statOrder = { 7189 }, level = 50, group = "AfflictionNotablePhlebotomist", weightKey = { "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 343, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "bleed", "physical", "critical", "ailment" }, }, + ["AfflictionNotableSepticSpells"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Septic Spells", statOrderKey = "7235", statOrder = { 7235 }, level = 50, group = "AfflictionNotableSepticSpells", weightKey = { "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 348, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "chaos_damage", "poison", "damage", "chaos", "caster", "speed", "ailment" }, }, + ["AfflictionNotableLowTolerance"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Low Tolerance", statOrderKey = "7158", statOrder = { 7158 }, level = 68, group = "AfflictionNotableLowTolerance", weightKey = { "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 130, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "poison", "damage", "chaos", "ailment" }, }, + ["AfflictionNotableSteadyTorment"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Steady Torment", statOrderKey = "7250", statOrder = { 7250 }, level = 68, group = "AfflictionNotableSteadyTorment", weightKey = { "affliction_chaos_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "default", }, weightVal = { 130, 129, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "chaos_damage", "bleed", "poison", "damage", "physical", "chaos", "attack", "ailment", "ailment" }, }, + ["AfflictionNotableEternalSuffering"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Eternal Suffering", statOrderKey = "7097", statOrder = { 7097 }, level = 50, group = "AfflictionNotableEternalSuffering", weightKey = { "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 348, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "damage", "chaos" }, }, + ["AfflictionNotableEldritchInspiration"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Eldritch Inspiration", statOrderKey = "7088", statOrder = { 7088 }, level = 50, group = "AfflictionNotableEldritchInspiration", weightKey = { "affliction_chaos_damage_over_time_multiplier", "affliction_maximum_mana", "default", }, weightVal = { 348, 466, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "resource", "mana", "damage", "chaos" }, }, + ["AfflictionNotableWastingAffliction"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wasting Affliction", statOrderKey = "7289", statOrder = { 7289 }, level = 68, group = "AfflictionNotableWastingAffliction", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 222, 178, 129, 137, 130, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "ailment" }, }, + ["AfflictionNotableHaemorrhage"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Haemorrhage", statOrderKey = "7133", statOrder = { 7133 }, level = 50, group = "AfflictionNotableHaemorrhage", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_critical_chance", "default", }, weightVal = { 593, 475, 343, 366, 348, 457, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical", "ailment" }, }, + ["AfflictionNotableFlowofLife_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Flow of Life", statOrderKey = "7118", statOrder = { 7118 }, level = 68, group = "AfflictionNotableFlowofLife", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_maximum_life", "default", }, weightVal = { 222, 178, 129, 137, 130, 146, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "damage" }, }, + ["AfflictionNotableExposureTherapy_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Exposure Therapy", statOrderKey = "7103", statOrder = { 7103 }, level = 1, group = "AfflictionNotableExposureTherapy", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_chaos_resistance", "default", }, weightVal = { 1185, 950, 686, 733, 696, 2341, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "damage", "chaos", "resistance" }, }, + ["AfflictionNotableBrushwithDeath"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Brush with Death", statOrderKey = "7040", statOrder = { 7040 }, level = 68, group = "AfflictionNotableBrushwithDeath", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_maximum_life", "affliction_maximum_energy_shield", "default", }, weightVal = { 222, 178, 129, 137, 130, 146, 189, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "defences", "energy_shield", "damage" }, }, + ["AfflictionNotableVileReinvigoration_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vile Reinvigoration", statOrderKey = "7283", statOrder = { 7283 }, level = 50, group = "AfflictionNotableVileReinvigoration", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_maximum_energy_shield", "default", }, weightVal = { 593, 475, 343, 366, 348, 505, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "energy_shield", "damage" }, }, + ["AfflictionNotableCirclingOblivion"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Circling Oblivion", statOrderKey = "7050", statOrder = { 7050 }, level = 1, group = "AfflictionNotableCirclingOblivion", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 1185, 950, 686, 733, 696, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "ailment" }, }, + ["AfflictionNotableBrewedforPotency"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Brewed for Potency", statOrderKey = "7038", statOrder = { 7038 }, level = 1, group = "AfflictionNotableBrewedforPotency", weightKey = { "affliction_damage_over_time_multiplier", "affliction_cold_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "affliction_flask_duration", "default", }, weightVal = { 1185, 950, 686, 733, 696, 1079, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "resource", "life", "mana", "damage" }, }, + ["AfflictionNotableAstonishingAffliction"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Astonishing Affliction", statOrderKey = "7023", statOrder = { 7023 }, level = 1, group = "AfflictionNotableAstonishingAffliction", weightKey = { "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 1627, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "ailment" }, }, + ["AfflictionNotableColdConduction__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cold Conduction", statOrderKey = "7053", statOrder = { 7053 }, level = 68, group = "AfflictionNotableColdConduction", weightKey = { "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 305, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "cold", "lightning", "ailment" }, }, + ["AfflictionNotableInspiredOppression"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Inspired Oppression", statOrderKey = "7148", statOrder = { 7148 }, level = 75, group = "AfflictionNotableInspiredOppression", weightKey = { "affliction_effect_of_non-damaging_ailments", "affliction_elemental_damage", "affliction_lightning_damage", "affliction_cold_damage", "default", }, weightVal = { 102, 94, 45, 32, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "resource", "mana", "damage", "elemental", "ailment" }, }, + ["AfflictionNotableChillingPresence"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Chilling Presence", statOrderKey = "7048", statOrder = { 7048 }, level = 75, group = "AfflictionNotableChillingPresence", weightKey = { "affliction_effect_of_non-damaging_ailments", "affliction_cold_damage_over_time_multiplier", "default", }, weightVal = { 102, 59, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "cold", "ailment" }, }, + ["AfflictionNotableDeepChill"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Deep Chill", statOrderKey = "7071", statOrder = { 7071 }, level = 1, group = "AfflictionNotableDeepChill", weightKey = { "affliction_effect_of_non-damaging_ailments", "affliction_cold_damage", "affliction_cold_damage_over_time_multiplier", "default", }, weightVal = { 1627, 505, 950, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "ailment" }, }, + ["AfflictionNotableBlastFreeze_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blast-Freeze", statOrderKey = "7029", statOrder = { 7029 }, level = 68, group = "AfflictionNotableBlastFreeze", weightKey = { "affliction_cold_damage", "affliction_cold_damage_over_time_multiplier", "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 95, 178, 305, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "cold", "ailment" }, }, + ["AfflictionNotableThunderstruck"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Thunderstruck", statOrderKey = "7267", statOrder = { 7267 }, level = 50, group = "AfflictionNotableThunderstruck", weightKey = { "affliction_lightning_damage", "default", }, weightVal = { 364, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "lightning", "critical" }, }, + ["AfflictionNotableStormrider"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Stormrider", statOrderKey = "7253", statOrder = { 7253 }, level = 68, group = "AfflictionNotableStormrider", weightKey = { "affliction_effect_of_non-damaging_ailments", "affliction_cold_damage", "affliction_lightning_damage", "default", }, weightVal = { 305, 95, 136, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "power_charge", "elemental_damage", "damage", "elemental", "cold", "lightning" }, }, + ["AfflictionNotableOvershock"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Overshock", statOrderKey = "7184", statOrder = { 7184 }, level = 50, group = "AfflictionNotableOvershock", weightKey = { "affliction_lightning_damage", "affliction_effect_of_non-damaging_ailments", "default", }, weightVal = { 364, 814, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "lightning", "ailment" }, }, + ["AfflictionNotableEvilEye"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Evil Eye", statOrderKey = "7098", statOrder = { 7098 }, level = 1, group = "AfflictionNotableEvilEye", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 706, 706, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "caster", "curse" }, }, + ["AfflictionNotableWhispersofDeath"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Evil Eye", statOrderKey = "7291", statOrder = { 7291 }, level = 1, group = "AfflictionNotableWhispersofDeath", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "curse" }, }, + ["AfflictionNotableWardbreaker_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Forbidden Words", statOrderKey = "7287", statOrder = { 7287 }, level = 68, group = "AfflictionNotableWardbreaker", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "caster", "curse" }, }, + ["AfflictionNotableDarkDiscourse"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Doedre's Spite", statOrderKey = "7066", statOrder = { 7066 }, level = 50, group = "AfflictionNotableDarkDiscourse", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 353, 353, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "curse" }, }, + ["AfflictionNotableVictimMaker"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Victim Maker", statOrderKey = "7282", statOrder = { 7282 }, level = 50, group = "AfflictionNotableVictimMaker", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 353, 353, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "speed", "curse" }, }, + ["AfflictionNotableMasterofFear"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master of Fear", statOrderKey = "7166", statOrder = { 7166 }, level = 68, group = "AfflictionNotableMasterofFear", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "curse" }, }, + ["AfflictionNotableWishforDeath_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wish for Death", statOrderKey = "7298", statOrder = { 7298 }, level = 50, group = "AfflictionNotableWishforDeath", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 0, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "curse" }, }, + ["AfflictionNotableLordofDrought_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Lord of Drought", statOrderKey = "7116", statOrder = { 7116 }, level = 50, group = "AfflictionNotableLordofDrought", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_fire_damage", "default", }, weightVal = { 353, 353, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "curse" }, }, + ["AfflictionNotableBlizzardCaller_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blizzard Caller", statOrderKey = "7121", statOrder = { 7121 }, level = 50, group = "AfflictionNotableBlizzardCaller", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_cold_damage", "default", }, weightVal = { 353, 353, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "critical", "curse" }, }, + ["AfflictionNotableTempttheStorm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Tempt the Storm", statOrderKey = "7156", statOrder = { 7156 }, level = 50, group = "AfflictionNotableTempttheStorm", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_lightning_damage", "default", }, weightVal = { 353, 353, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "speed", "curse" }, }, + ["AfflictionNotableMiseryEverlasting"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Misery Everlasting", statOrderKey = "7073", statOrder = { 7073 }, level = 50, group = "AfflictionNotableMiseryEverlasting", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_chaos_damage", "default", }, weightVal = { 353, 353, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "curse" }, }, + ["AfflictionNotableExploitWeakness_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Exploit Weakness", statOrderKey = "7137", statOrder = { 7137 }, level = 50, group = "AfflictionNotableExploitWeakness", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "affliction_physical_damage", "default", }, weightVal = { 353, 353, 0, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "physical_damage", "caster_damage", "damage", "physical", "caster", "curse" }, }, + ["AfflictionNotableHoundsMark"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hound's Mark", statOrderKey = "7144", statOrder = { 7144 }, level = 1, group = "AfflictionNotableHoundsMark", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 706, 706, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "caster", "curse" }, }, + ["AfflictionNotableDoedresGluttony"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Doedre's Gluttony", statOrderKey = "7083", statOrder = { 7083 }, level = 50, group = "AfflictionNotableDoedresGluttony", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 353, 353, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "caster", "curse" }, }, + ["AfflictionNotableDoedresApathy____"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Doedre's Apathy", statOrderKey = "7082", statOrder = { 7082 }, level = 68, group = "AfflictionNotableDoedresApathy", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 132, 132, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "curse" }, }, + ["AfflictionNotableMasterOfTheMaelstrom_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Master of the Maelstrom", statOrderKey = "7168", statOrder = { 7168 }, level = 50, group = "AfflictionNotableMasterOfTheMaelstrom", weightKey = { "old_do_not_use_affliction_curse_effect", "affliction_curse_effect_small", "default", }, weightVal = { 353, 353, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "caster", "ailment", "curse" }, }, + ["AfflictionNotableHeraldry"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Heraldry", statOrderKey = "7138", statOrder = { 7138 }, level = 75, group = "AfflictionNotableHeraldry", weightKey = { "affliction_damage_while_you_have_a_herald", "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 118, 158, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableEndbringer"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Endbringer", statOrderKey = "7091", statOrder = { 7091 }, level = 68, group = "AfflictionNotableEndbringer", weightKey = { "affliction_damage_while_you_have_a_herald", "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 353, 474, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableCultLeader_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Cult-Leader", statOrderKey = "7064", statOrder = { 7064 }, level = 1, group = "AfflictionNotableCultLeader", weightKey = { "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 2526, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "minion" }, }, + ["AfflictionNotableEmpoweredEnvoy_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Empowered Envoy", statOrderKey = "7090", statOrder = { 7090 }, level = 1, group = "AfflictionNotableEmpoweredEnvoy", weightKey = { "affliction_damage_while_you_have_a_herald", "default", }, weightVal = { 1882, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableDarkMessenger"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Dark Messenger", statOrderKey = "7068", statOrder = { 7068 }, level = 50, group = "AfflictionNotableDarkMessenger", weightKey = { "affliction_damage_while_you_have_a_herald", "default", }, weightVal = { 941, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableAgentofDestruction"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Agent of Destruction", statOrderKey = "7007", statOrder = { 7007 }, level = 1, group = "AfflictionNotableAgentofDestruction", weightKey = { "affliction_damage_while_you_have_a_herald", "default", }, weightVal = { 1882, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "fire", "cold", "lightning", "ailment" }, }, + ["AfflictionNotableLastingImpression_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Lasting Impression", statOrderKey = "7153", statOrder = { 7153 }, level = 68, group = "AfflictionNotableLastingImpression", weightKey = { "affliction_damage_while_you_have_a_herald", "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 353, 474, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableSelfFulfillingProphecy_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Self-Fulfilling Prophecy", statOrderKey = "7234", statOrder = { 7234 }, level = 68, group = "AfflictionNotableSelfFulfillingProphecy", weightKey = { "affliction_damage_while_you_have_a_herald", "default", }, weightVal = { 353, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "critical" }, }, + ["AfflictionNotableInvigoratingPortents"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Invigorating Portents", statOrderKey = "7151", statOrder = { 7151 }, level = 50, group = "AfflictionNotableInvigoratingPortents", weightKey = { "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 1263, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "speed", "minion" }, }, + ["AfflictionNotablePureAgony_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pure Agony", statOrderKey = "7203", statOrder = { 7203 }, level = 68, group = "AfflictionNotablePureAgony", weightKey = { "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 474, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "minion" }, }, + ["AfflictionNotableDisciples_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Disciples", statOrderKey = "7076", statOrder = { 7076 }, level = 68, group = "AfflictionNotableDisciples", weightKey = { "affliction_minion_damage_while_you_have_a_herald", "default", }, weightVal = { 474, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "speed", "minion" }, }, + ["AfflictionNotableDreadMarch_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Dread March", statOrderKey = "7086", statOrder = { 7086 }, level = 1, group = "AfflictionNotableDreadMarch", weightKey = { "affliction_minion_life", "default", }, weightVal = { 1433, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "chaos", "resistance", "speed", "minion" }, }, + ["AfflictionNotableBlessedRebirth"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blessed Rebirth", statOrderKey = "7031", statOrder = { 7031 }, level = 68, group = "AfflictionNotableBlessedRebirth", weightKey = { "affliction_minion_life", "default", }, weightVal = { 269, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "minion" }, }, + ["AfflictionNotableLifefromDeath_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Life from Death", statOrderKey = "7155", statOrder = { 7155 }, level = 50, group = "AfflictionNotableLifefromDeath", weightKey = { "affliction_minion_life", "default", }, weightVal = { 716, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "minion" }, }, + ["AfflictionNotableFeastingFiends"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Feasting Fiends", statOrderKey = "7111", statOrder = { 7111 }, level = 1, group = "AfflictionNotableFeastingFiends", weightKey = { "affliction_minion_life", "affliction_minion_damage", "default", }, weightVal = { 1433, 1000, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "damage", "minion" }, }, + ["AfflictionNotableBodyguards"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Bodyguards", statOrderKey = "7035", statOrder = { 7035 }, level = 50, group = "AfflictionNotableBodyguards", weightKey = { "affliction_minion_life", "default", }, weightVal = { 716, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "minion" }, }, + ["AfflictionNotableFollowThrough_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Follow-Through", statOrderKey = "7119", statOrder = { 7119 }, level = 68, group = "AfflictionNotableFollowThrough", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 333, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableStreamlined"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Streamlined", statOrderKey = "7255", statOrder = { 7255 }, level = 1, group = "AfflictionNotableStreamlined", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 1778, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "speed" }, }, + ["AfflictionNotableShriekingBolts_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Shrieking Bolts", statOrderKey = "7238", statOrder = { 7238 }, level = 50, group = "AfflictionNotableShriekingBolts", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 889, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableEyetoEye"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Eye to Eye", statOrderKey = "7105", statOrder = { 7105 }, level = 50, group = "AfflictionNotableEyetoEye", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 889, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableRepeater"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Repeater", statOrderKey = "7218", statOrder = { 7218 }, level = 1, group = "AfflictionNotableRepeater", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 1778, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "attack", "caster", "speed" }, }, + ["AfflictionNotableAerodynamics"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Aerodynamics", statOrderKey = "7006", statOrder = { 7006 }, level = 68, group = "AfflictionNotableAerodynamics", weightKey = { "affliction_projectile_damage", "default", }, weightVal = { 333, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "speed" }, }, + ["AfflictionNotableChipAway"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Chip Away", statOrderKey = "7049", statOrder = { 7049 }, level = 50, group = "AfflictionNotableChipAway", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 1171, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "speed" }, }, + ["AfflictionNotableSeekerRunes"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Seeker Runes", statOrderKey = "7233", statOrder = { 7233 }, level = 68, group = "AfflictionNotableSeekerRunes", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 439, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["AfflictionNotableRemarkable"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Remarkable", statOrderKey = "7215", statOrder = { 7215 }, level = 68, group = "AfflictionNotableRemarkable", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 439, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "speed" }, }, + ["AfflictionNotableBrandLoyalty"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Brand Loyalty", statOrderKey = "7037", statOrder = { 7037 }, level = 1, group = "AfflictionNotableBrandLoyalty", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 2341, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster_damage", "damage", "caster" }, }, + ["AfflictionNotableHolyConquest"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Holy Conquest", statOrderKey = "7143", statOrder = { 7143 }, level = 50, group = "AfflictionNotableHolyConquest", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 1171, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "speed" }, }, + ["AfflictionNotableGrandDesign_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Grand Design", statOrderKey = "7129", statOrder = { 7129 }, level = 68, group = "AfflictionNotableGrandDesign", weightKey = { "affliction_brand_damage", "default", }, weightVal = { 439, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "caster", "speed" }, }, + ["AfflictionNotableSetandForget_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Set and Forget", statOrderKey = "7236", statOrder = { 7236 }, level = 50, group = "AfflictionNotableSetandForget", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 980, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableExpertSabotage"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Expert Sabotage", statOrderKey = "7101", statOrder = { 7101 }, level = 50, group = "AfflictionNotableExpertSabotage", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 980, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "speed" }, }, + ["AfflictionNotableGuerillaTactics"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Guerilla Tactics", statOrderKey = "7132", statOrder = { 7132 }, level = 1, group = "AfflictionNotableGuerillaTactics", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 1959, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "speed" }, }, + ["AfflictionNotableExpendability"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Expendability", statOrderKey = "7100", statOrder = { 7100 }, level = 68, group = "AfflictionNotableExpendability", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 367, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableArcanePyrotechnics"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Arcane Pyrotechnics", statOrderKey = "7020", statOrder = { 7020 }, level = 68, group = "AfflictionNotableArcanePyrotechnics", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 367, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableSurpriseSabotage_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Surprise Sabotage", statOrderKey = "7264", statOrder = { 7264 }, level = 50, group = "AfflictionNotableSurpriseSabotage", weightKey = { "affliction_trap_and_mine_damage", "default", }, weightVal = { 980, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "damage", "elemental", "critical" }, }, + ["AfflictionNotableCarefulHandling"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Careful Handling", statOrderKey = "7047", statOrder = { 7047 }, level = 68, group = "AfflictionNotableCarefulHandling", weightKey = { "affliction_trap_and_mine_damage", "affliction_maximum_mana", "affliction_maximum_life", "default", }, weightVal = { 367, 175, 146, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "mana", "damage" }, }, + ["AfflictionNotablePeakVigour"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Peak Vigour", statOrderKey = "7188", statOrder = { 7188 }, level = 1, group = "AfflictionNotablePeakVigour", weightKey = { "affliction_maximum_life", "affliction_flask_duration", "default", }, weightVal = { 780, 1079, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "resource", "life" }, }, + ["AfflictionNotableFettle"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fettle", statOrderKey = "7113", statOrder = { 7113 }, level = 75, group = "AfflictionNotableFettle", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 49, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life" }, }, + ["AfflictionNotableFeastofFlesh"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Feast of Flesh", statOrderKey = "7110", statOrder = { 7110 }, level = 68, group = "AfflictionNotableFeastofFlesh", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 146, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "attack" }, }, + ["AfflictionNotableSublimeSensation_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sublime Sensation", statOrderKey = "7259", statOrder = { 7259 }, level = 50, group = "AfflictionNotableSublimeSensation", weightKey = { "affliction_maximum_life", "affliction_maximum_energy_shield", "default", }, weightVal = { 390, 505, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "defences", "energy_shield" }, }, + ["AfflictionNotableSurgingVitality"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Surging Vitality", statOrderKey = "7263", statOrder = { 7263 }, level = 1, group = "AfflictionNotableSurgingVitality", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 780, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life" }, }, + ["AfflictionNotablePeaceAmidstChaos"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Peace Amidst Chaos", statOrderKey = "7187", statOrder = { 7187 }, level = 50, group = "AfflictionNotablePeaceAmidstChaos", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 390, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "defences", "armour" }, }, + ["AfflictionNotableAdrenaline_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Adrenaline", statOrderKey = "7003", statOrder = { 7003 }, level = 68, group = "AfflictionNotableAdrenaline", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 146, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life" }, }, + ["AfflictionNotableWallofMuscle_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wall of Muscle", statOrderKey = "7286", statOrder = { 7286 }, level = 75, group = "AfflictionNotableWallofMuscle", weightKey = { "affliction_maximum_life", "default", }, weightVal = { 49, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "attribute" }, }, + ["AfflictionNotableMindfulness"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mindfulness", statOrderKey = "7172", statOrder = { 7172 }, level = 50, group = "AfflictionNotableMindfulness", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 466, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana" }, }, + ["AfflictionNotableLiquidInspiration"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Liquid Inspiration", statOrderKey = "7157", statOrder = { 7157 }, level = 68, group = "AfflictionNotableLiquidInspiration", weightKey = { "affliction_maximum_mana", "affliction_flask_duration", "default", }, weightVal = { 175, 202, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "power_charge", "resource", "mana" }, }, + ["AfflictionNotableOpenness__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Openness", statOrderKey = "7181", statOrder = { 7181 }, level = 1, group = "AfflictionNotableOpenness", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 932, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana" }, }, + ["AfflictionNotableDaringIdeas"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Daring Ideas", statOrderKey = "7065", statOrder = { 7065 }, level = 50, group = "AfflictionNotableDaringIdeas", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 466, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "attack" }, }, + ["AfflictionNotableClarityofPurpose"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Clarity of Purpose", statOrderKey = "7051", statOrder = { 7051 }, level = 1, group = "AfflictionNotableClarityofPurpose", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 932, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana" }, }, + ["AfflictionNotableScintillatingIdea_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Scintillating Idea", statOrderKey = "7230", statOrder = { 7230 }, level = 50, group = "AfflictionNotableScintillatingIdea", weightKey = { "affliction_maximum_mana", "affliction_lightning_damage", "default", }, weightVal = { 466, 364, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental_damage", "resource", "mana", "damage", "elemental", "lightning" }, }, + ["AfflictionNotableHolisticHealth"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Holistic Health", statOrderKey = "7142", statOrder = { 7142 }, level = 68, group = "AfflictionNotableHolisticHealth", weightKey = { "affliction_maximum_mana", "affliction_maximum_life", "default", }, weightVal = { 175, 146, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "mana" }, }, + ["AfflictionNotableGenius"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Genius", statOrderKey = "7124", statOrder = { 7124 }, level = 75, group = "AfflictionNotableGenius", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 58, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "attribute" }, }, + ["AfflictionNotableImprovisor"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Improvisor", statOrderKey = "7146", statOrder = { 7146 }, level = 68, group = "AfflictionNotableImprovisor", weightKey = { "affliction_maximum_mana", "default", }, weightVal = { 175, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "attack" }, }, + ["AfflictionNotableStubbornStudent"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Stubborn Student", statOrderKey = "7257", statOrder = { 7257 }, level = 68, group = "AfflictionNotableStubbornStudent", weightKey = { "affliction_maximum_mana", "affliction_armour", "default", }, weightVal = { 175, 261, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "defences", "armour" }, }, + ["AfflictionNotableSavourtheMoment"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Savour the Moment", statOrderKey = "7229", statOrder = { 7229 }, level = 1, group = "AfflictionNotableSavourtheMoment", weightKey = { "affliction_maximum_energy_shield", "default", }, weightVal = { 1011, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "energy_shield" }, }, + ["AfflictionNotableEnergyFromNaught"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Energy From Naught", statOrderKey = "7095", statOrder = { 7095 }, level = 50, group = "AfflictionNotableEnergyFromNaught", weightKey = { "affliction_maximum_energy_shield", "default", }, weightVal = { 505, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "energy_shield" }, }, + ["AfflictionNotableWillShaper"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Will Shaper", statOrderKey = "7294", statOrder = { 7294 }, level = 75, group = "AfflictionNotableWillShaper", weightKey = { "affliction_maximum_energy_shield", "affliction_maximum_mana", "default", }, weightVal = { 63, 58, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "energy_shield" }, }, + ["AfflictionNotableSpringBack_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Spring Back", statOrderKey = "7248", statOrder = { 7248 }, level = 1, group = "AfflictionNotableSpringBack", weightKey = { "affliction_maximum_energy_shield", "default", }, weightVal = { 1011, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "energy_shield" }, }, + ["AfflictionNotableConservationofEnergy"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Conservation of Energy", statOrderKey = "7059", statOrder = { 7059 }, level = 68, group = "AfflictionNotableConservationofEnergy", weightKey = { "affliction_maximum_energy_shield", "default", }, weightVal = { 189, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "energy_shield", "caster" }, }, + ["AfflictionNotableSelfControl"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Self-Control", statOrderKey = "7077", statOrder = { 7077 }, level = 50, group = "AfflictionNotableSelfControl", weightKey = { "affliction_maximum_energy_shield", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 505, 480, 480, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana" }, }, + ["AfflictionNotableHeartofIron"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Heart of Iron", statOrderKey = "7135", statOrder = { 7135 }, level = 68, group = "AfflictionNotableHeartofIron", weightKey = { "affliction_maximum_life", "affliction_armour", "default", }, weightVal = { 146, 261, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "armour" }, }, + ["AfflictionNotablePrismaticCarapace_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Prismatic Carapace", statOrderKey = "7198", statOrder = { 7198 }, level = 75, group = "AfflictionNotablePrismaticCarapace", weightKey = { "affliction_armour", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 87, 86, 86, 82, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "armour", "elemental", "resistance" }, }, + ["AfflictionNotableMilitarism"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Militarism", statOrderKey = "7171", statOrder = { 7171 }, level = 50, group = "AfflictionNotableMilitarism", weightKey = { "affliction_armour", "default", }, weightVal = { 696, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "defences", "armour" }, }, + ["AfflictionNotableSecondSkin"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Second Skin", statOrderKey = "7232", statOrder = { 7232 }, level = 1, group = "AfflictionNotableSecondSkin", weightKey = { "affliction_armour", "affliction_chance_to_block", "default", }, weightVal = { 1391, 750, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "defences", "armour" }, }, + ["AfflictionNotableDragonHunter__"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Dragon Hunter", statOrderKey = "7085", statOrder = { 7085 }, level = 50, group = "AfflictionNotableDragonHunter", weightKey = { "affliction_armour", "affliction_fire_resistance", "default", }, weightVal = { 696, 658, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "armour", "elemental", "fire", "resistance" }, }, + ["AfflictionNotableEnduringComposure"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Enduring Composure", statOrderKey = "7092", statOrder = { 7092 }, level = 68, group = "AfflictionNotableEnduringComposure", weightKey = { "affliction_armour", "default", }, weightVal = { 261, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "endurance_charge", "defences", "armour" }, }, + ["AfflictionNotableUncompromising_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Uncompromising", statOrderKey = "7074", statOrder = { 7074 }, level = 50, group = "AfflictionNotableUncompromising", weightKey = { "affliction_armour", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 696, 480, 480, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana" }, }, + ["AfflictionNotablePrismaticDance____"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Prismatic Dance", statOrderKey = "7199", statOrder = { 7199 }, level = 75, group = "AfflictionNotablePrismaticDance", weightKey = { "affliction_evasion", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 82, 86, 86, 82, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "evasion", "elemental", "resistance" }, }, + ["AfflictionNotableNaturalVigour_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Natural Vigour", statOrderKey = "7176", statOrder = { 7176 }, level = 50, group = "AfflictionNotableNaturalVigour", weightKey = { "affliction_evasion", "affliction_maximum_life", "default", }, weightVal = { 658, 390, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "defences", "evasion" }, }, + ["AfflictionNotableUntouchable"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Untouchable", statOrderKey = "7273", statOrder = { 7273 }, level = 1, group = "AfflictionNotableUntouchable", weightKey = { "affliction_evasion", "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 1315, 1477, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "evasion" }, }, + ["AfflictionNotableShiftingShadow"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Shifting Shadow", statOrderKey = "7237", statOrder = { 7237 }, level = 50, group = "AfflictionNotableShiftingShadow", weightKey = { "affliction_evasion", "default", }, weightVal = { 658, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "defences", "evasion", "attribute" }, }, + ["AfflictionNotableReadiness"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Readiness", statOrderKey = "7214", statOrder = { 7214 }, level = 1, group = "AfflictionNotableReadiness", weightKey = { "affliction_evasion", "default", }, weightVal = { 1315, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "bleed", "defences", "evasion", "physical", "attack", "ailment" }, }, + ["AfflictionNotableSublimeForm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sublime Form", statOrderKey = "7128", statOrder = { 7128 }, level = 50, group = "AfflictionNotableSublimeForm", weightKey = { "affliction_evasion", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 658, 480, 480, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "elemental", "resistance" }, }, + ["AfflictionNotableConfidentCombatant"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Confident Combatant", statOrderKey = "7057", statOrder = { 7057 }, level = 68, group = "AfflictionNotableConfidentCombatant", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage" }, }, + ["AfflictionNotableFlexibleSentry___"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Flexible Sentry", statOrderKey = "7117", statOrder = { 7117 }, level = 50, group = "AfflictionNotableFlexibleSentry", weightKey = { "affliction_chance_to_block", "affliction_lightning_resistance", "affliction_cold_resistance", "affliction_fire_resistance", "default", }, weightVal = { 375, 686, 686, 658, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "ailment" }, }, + ["AfflictionNotableViciousGuard_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Vicious Guard", statOrderKey = "7280", statOrder = { 7280 }, level = 1, group = "AfflictionNotableViciousGuard", weightKey = { "affliction_chance_to_block", "affliction_maximum_life", "default", }, weightVal = { 750, 780, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "resource", "life", "attack" }, }, + ["AfflictionNotableMysticalWard_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mystical Ward", statOrderKey = "7175", statOrder = { 7175 }, level = 1, group = "AfflictionNotableMysticalWard", weightKey = { "affliction_chance_to_block", "affliction_maximum_energy_shield", "default", }, weightVal = { 750, 1011, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "defences", "energy_shield" }, }, + ["AfflictionNotableRoteReinforcement"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rote Reinforcement", statOrderKey = "7222", statOrder = { 7222 }, level = 68, group = "AfflictionNotableRoteReinforcement", weightKey = { "affliction_chance_to_block", "affliction_maximum_life", "default", }, weightVal = { 141, 146, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "endurance_charge", "resource", "life" }, }, + ["AfflictionNotableMageHunter___"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Mage Hunter", statOrderKey = "7160", statOrder = { 7160 }, level = 68, group = "AfflictionNotableMageHunter", weightKey = { "affliction_chance_to_block", "affliction_spell_damage", "default", }, weightVal = { 141, 281, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "power_charge", "caster_damage", "damage", "caster" }, }, + ["AfflictionNotableRiotQueller"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Riot Queller", statOrderKey = "7220", statOrder = { 7220 }, level = 75, group = "AfflictionNotableRiotQueller", weightKey = { "affliction_chance_to_block", "affliction_attack_damage_while_holding_a_shield", "default", }, weightVal = { 47, 38, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block" }, }, + ["AfflictionNotableOnewiththeShield_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is One with the Shield", statOrderKey = "7180", statOrder = { 7180 }, level = 50, group = "AfflictionNotableOnewiththeShield", weightKey = { "affliction_chance_to_block", "default", }, weightVal = { 375, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "block", "resource", "life", "defences" }, }, + ["AfflictionNotableAerialist"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Aerialist", statOrderKey = "7005", statOrder = { 7005 }, level = 75, group = "AfflictionNotableAerialist", weightKey = { "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 92, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "attribute" }, }, + ["AfflictionNotableElegantForm"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Elegant Form", statOrderKey = "7089", statOrder = { 7089 }, level = 1, group = "AfflictionNotableElegantForm", weightKey = { "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 1477, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "ailment" }, }, + ["AfflictionNotableDartingMovements"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Darting Movements", statOrderKey = "7069", statOrder = { 7069 }, level = 1, group = "AfflictionNotableDartingMovements", weightKey = { "affliction_chance_to_dodge_attacks", "default", }, weightVal = { 1477, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "speed" }, }, + ["AfflictionNotableNoWitnesses"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is No Witnesses", statOrderKey = "7177", statOrder = { 7177 }, level = 75, group = "AfflictionNotableNoWitnesses", weightKey = { "default", }, weightVal = { 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { }, }, + ["AfflictionNotableMoltenOnesMark_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Molten One's Mark", statOrderKey = "7174", statOrder = { 7174 }, level = 68, group = "AfflictionNotableMoltenOnesMark", weightKey = { "affliction_fire_resistance", "default", }, weightVal = { 247, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "elemental", "fire", "resistance" }, }, + ["AfflictionNotableFireAttunement_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Fire Attunement", statOrderKey = "7114", statOrder = { 7114 }, level = 1, group = "AfflictionNotableFireAttunement", weightKey = { "affliction_fire_resistance", "default", }, weightVal = { 1315, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "fire", "ailment" }, }, + ["AfflictionNotablePureMight"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pure Might", statOrderKey = "7207", statOrder = { 7207 }, level = 68, group = "AfflictionNotablePureMight", weightKey = { "affliction_fire_resistance", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 247, 180, 180, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "attribute" }, }, + ["AfflictionNotableBlacksmith_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blacksmith", statOrderKey = "7027", statOrder = { 7027 }, level = 68, group = "AfflictionNotableBlacksmith", weightKey = { "affliction_fire_resistance", "affliction_armour", "default", }, weightVal = { 247, 261, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "defences", "armour", "elemental", "fire", "resistance" }, }, + ["AfflictionNotableNonFlammable"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Non-Flammable", statOrderKey = "7178", statOrder = { 7178 }, level = 50, group = "AfflictionNotableNonFlammable", weightKey = { "affliction_fire_resistance", "default", }, weightVal = { 658, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "fire", "resistance", "ailment" }, }, + ["AfflictionNotableWinterProwler"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Winter Prowler", statOrderKey = "7297", statOrder = { 7297 }, level = 68, group = "AfflictionNotableWinterProwler", weightKey = { "affliction_cold_resistance", "default", }, weightVal = { 257, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "cold", "resistance", "speed" }, }, + ["AfflictionNotableHibernator"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Hibernator", statOrderKey = "7140", statOrder = { 7140 }, level = 50, group = "AfflictionNotableHibernator", weightKey = { "affliction_cold_resistance", "default", }, weightVal = { 686, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "cold", "ailment" }, }, + ["AfflictionNotablePureGuile"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pure Guile", statOrderKey = "7206", statOrder = { 7206 }, level = 68, group = "AfflictionNotablePureGuile", weightKey = { "affliction_cold_resistance", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 257, 180, 180, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "attribute" }, }, + ["AfflictionNotableAlchemist"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Alchemist", statOrderKey = "7009", statOrder = { 7009 }, level = 1, group = "AfflictionNotableAlchemist", weightKey = { "affliction_cold_resistance", "default", }, weightVal = { 1371, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "flask", "elemental", "cold", "resistance", "attack", "caster", "speed" }, }, + ["AfflictionNotableAntifreeze"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Antifreeze", statOrderKey = "7016", statOrder = { 7016 }, level = 50, group = "AfflictionNotableAntifreeze", weightKey = { "affliction_cold_resistance", "default", }, weightVal = { 686, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "cold", "resistance", "ailment" }, }, + ["AfflictionNotableWizardry_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Wizardry", statOrderKey = "7299", statOrder = { 7299 }, level = 68, group = "AfflictionNotableWizardry", weightKey = { "affliction_lightning_resistance", "affliction_maximum_mana", "default", }, weightVal = { 257, 175, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "elemental", "lightning", "resistance" }, }, + ["AfflictionNotableCapacitor____"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Capacitor", statOrderKey = "7046", statOrder = { 7046 }, level = 50, group = "AfflictionNotableCapacitor", weightKey = { "affliction_lightning_resistance", "default", }, weightVal = { 686, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "lightning", "ailment" }, }, + ["AfflictionNotablePureAptitude"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Pure Aptitude", statOrderKey = "7204", statOrder = { 7204 }, level = 68, group = "AfflictionNotablePureAptitude", weightKey = { "affliction_lightning_resistance", "old_do_not_use_affliction_aura_effect", "affliction_reservation_efficiency_small", "default", }, weightVal = { 257, 180, 180, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "mana", "defences", "energy_shield", "attribute" }, }, + ["AfflictionNotableSage_"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Sage", statOrderKey = "7226", statOrder = { 7226 }, level = 1, group = "AfflictionNotableSage", weightKey = { "affliction_lightning_resistance", "affliction_maximum_mana", "affliction_maximum_life", "default", }, weightVal = { 1371, 932, 780, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "mana", "elemental", "lightning", "resistance" }, }, + ["AfflictionNotableInsulated"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Insulated", statOrderKey = "7149", statOrder = { 7149 }, level = 50, group = "AfflictionNotableInsulated", weightKey = { "affliction_lightning_resistance", "default", }, weightVal = { 686, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "elemental", "lightning", "resistance", "ailment" }, }, + ["AfflictionNotableBornofChaos"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Born of Chaos", statOrderKey = "7036", statOrder = { 7036 }, level = 68, group = "AfflictionNotableBornofChaos", weightKey = { "affliction_chaos_resistance", "default", }, weightVal = { 439, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos", "resistance" }, }, + ["AfflictionNotableAntivenom"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Antivenom", statOrderKey = "7017", statOrder = { 7017 }, level = 50, group = "AfflictionNotableAntivenom", weightKey = { "affliction_chaos_resistance", "default", }, weightVal = { 1171, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "poison", "chaos", "resistance", "ailment" }, }, + ["AfflictionNotableRotResistant"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Rot-Resistant", statOrderKey = "7221", statOrder = { 7221 }, level = 68, group = "AfflictionNotableRotResistant", weightKey = { "affliction_chaos_resistance", "default", }, weightVal = { 439, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "mana", "defences", "energy_shield", "chaos", "resistance" }, }, + ["AfflictionNotableBlessed"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Blessed", statOrderKey = "7030", statOrder = { 7030 }, level = 68, group = "AfflictionNotableBlessed", weightKey = { "affliction_chaos_resistance", "affliction_maximum_life", "affliction_maximum_mana", "default", }, weightVal = { 439, 146, 175, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "resource", "life", "mana", "chaos", "resistance" }, }, + ["AfflictionNotableStudentofDecay"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Student of Decay", statOrderKey = "7258", statOrder = { 7258 }, level = 50, group = "AfflictionNotableStudentofDecay", weightKey = { "affliction_chaos_resistance", "affliction_damage_over_time_multiplier", "affliction_physical_damage_over_time_multiplier", "affliction_fire_damage_over_time_multiplier", "affliction_chaos_damage_over_time_multiplier", "default", }, weightVal = { 1171, 593, 343, 366, 348, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "chaos_damage", "damage", "chaos", "resistance" }, }, + ["AfflictionNotableAggressiveDefence"] = { type = "Prefix", affix = "Notable", "1 Added Passive Skill is Aggressive Defence", statOrderKey = "7008", statOrder = { 7008 }, level = 1, group = "AfflictionNotableAggressiveDefence", weightKey = { "affliction_axe_and_sword_damage", "affliction_mace_and_staff_damage", "affliction_dagger_and_claw_damage", "default", }, weightVal = { 750, 750, 750, 0 }, weightMultiplierKey = { "expansion_jewel_large", "expansion_jewel_medium", "has_affliction_notable", "expansion_jewel_small", "default", }, weightMultiplierVal = { 100, 100, 0, 100, 0 }, tags = { "has_affliction_notable", }, modTags = { "damage", "attack" }, }, ["AfflictionJewelSmallPassivesGrantLife_"] = { type = "Prefix", affix = "Hale", "Added Small Passive Skills also grant: +(2-3) to Maximum Life", statOrderKey = "6991", statOrder = { 6991 }, level = 1, group = "AfflictionJewelSmallPassivesGrantLife", weightKey = { "expansion_jewel_large", "expansion_jewel_medium", "default", }, weightVal = { 500, 500, 0 }, modTags = { "resource", "life" }, }, ["AfflictionJewelSmallPassivesGrantLife2_"] = { type = "Prefix", affix = "Healthy", "Added Small Passive Skills also grant: +(4-7) to Maximum Life", statOrderKey = "6991", statOrder = { 6991 }, level = 68, group = "AfflictionJewelSmallPassivesGrantLife", weightKey = { "expansion_jewel_large", "expansion_jewel_medium", "default", }, weightVal = { 400, 400, 0 }, modTags = { "resource", "life" }, }, ["AfflictionJewelSmallPassivesGrantLife3"] = { type = "Prefix", affix = "Sanguine", "Added Small Passive Skills also grant: +(8-10) to Maximum Life", statOrderKey = "6991", statOrder = { 6991 }, level = 84, group = "AfflictionJewelSmallPassivesGrantLife", weightKey = { "expansion_jewel_large", "expansion_jewel_medium", "default", }, weightVal = { 300, 300, 0 }, modTags = { "resource", "life" }, }, diff --git a/src/Data/ModMaster.lua b/src/Data/ModMaster.lua index a258387ff1..3da1df23ea 100644 --- a/src/Data/ModMaster.lua +++ b/src/Data/ModMaster.lua @@ -729,166 +729,4 @@ return { { type = "Suffix", affix = "of Crafting", modTags = { }, "Can have up to 3 Crafted Modifiers", statOrder = { 17 }, level = 1, group = "ItemGenerationCanHaveMultipleCraftedMods", types = { ["Dagger"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["One Handed Sword"] = true, ["Claw"] = true, ["Sceptre"] = true, ["Thrusting One Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Two Handed Sword"] = true, ["Staff"] = true, ["Wand"] = true, ["Bow"] = true, ["Body Armour"] = true, ["Gloves"] = true, ["Boots"] = true, ["Helmet"] = true, ["Shield"] = true, ["Ring"] = true, ["Amulet"] = true, ["Belt"] = true, ["Quiver"] = true, }, }, { type = "Suffix", affix = "of Spellcraft", modTags = { }, "Cannot roll Attack Modifiers", statOrder = { 16 }, level = 1, group = "ItemGenerationCannotRollAttackAffixes", types = { ["Dagger"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["One Handed Sword"] = true, ["Claw"] = true, ["Sceptre"] = true, ["Thrusting One Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Two Handed Sword"] = true, ["Staff"] = true, ["Wand"] = true, ["Bow"] = true, ["Body Armour"] = true, ["Gloves"] = true, ["Boots"] = true, ["Helmet"] = true, ["Shield"] = true, ["Ring"] = true, ["Amulet"] = true, ["Belt"] = true, ["Quiver"] = true, }, }, { type = "Suffix", affix = "of Weaponcraft", modTags = { }, "Cannot roll Caster Modifiers", statOrder = { 15 }, level = 1, group = "ItemGenerationCannotRollCasterAffixes", types = { ["Dagger"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["One Handed Sword"] = true, ["Claw"] = true, ["Sceptre"] = true, ["Thrusting One Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Two Handed Sword"] = true, ["Staff"] = true, ["Wand"] = true, ["Bow"] = true, ["Body Armour"] = true, ["Gloves"] = true, ["Boots"] = true, ["Helmet"] = true, ["Shield"] = true, ["Ring"] = true, ["Amulet"] = true, ["Belt"] = true, ["Quiver"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (8-10) to (15-18) Fire Damage", statOrder = { 1226 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (12-17) to (25-29) Fire Damage", statOrder = { 1226 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (17-24) to (35-41) Fire Damage", statOrder = { 1226 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (14-20) to (29-33) Fire Damage", statOrder = { 1226 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (23-31) to (47-54) Fire Damage", statOrder = { 1226 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds (32-44) to (65-76) Fire Damage", statOrder = { 1226 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "fire", "ailment" }, "(10-15)% chance to Ignite", statOrder = { 1880 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "fire", "ailment" }, "(20-25)% chance to Ignite", statOrder = { 1880 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Cast Level 10 Fire Burst on Hit", statOrder = { 7334 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Burning Enemies you kill have a 10% chance to Explode, dealing a tenth of their maximum Life as Fire Damage", statOrder = { 6047 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds 2 to (25-29) Lightning Damage", statOrder = { 1246 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds 2 to (41-48) Lightning Damage", statOrder = { 1246 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds 3 to (57-67) Lightning Damage", statOrder = { 1246 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds 3 to (46-53) Lightning Damage", statOrder = { 1246 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds (4-5) to (76-88) Lightning Damage", statOrder = { 1246 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning", "attack" }, "Adds (5-8) to (106-123) Lightning Damage", statOrder = { 1246 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "lightning", "ailment" }, "(10-15)% chance to Shock", statOrder = { 1887 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "lightning", "ailment" }, "(20-25)% chance to Shock", statOrder = { 1887 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant", "critical" }, "Trigger Level 5 Lightning Bolt when you deal a Critical Strike", statOrder = { 660 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Trigger Level 10 Shock Ground on Hit", statOrder = { 7335 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "lightning", "ailment" }, "When you Kill a Shocked Enemy, inflict an equivalent Shock on each nearby Enemy", statOrder = { 2663 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "fire", "ailment" }, "When you Kill an Ignited Enemy, inflict an equivalent Ignite on each nearby Enemy", statOrder = { 2664 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(10-19)% increased Spell Damage", statOrder = { 1090 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(20-29)% increased Spell Damage", statOrder = { 1090 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(30-39)% increased Spell Damage", statOrder = { 1090 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(15-29)% increased Spell Damage", statOrder = { 1090 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(30-44)% increased Spell Damage", statOrder = { 1090 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "caster_damage", "village_runesmithing_enchant", "damage", "caster" }, "(45-59)% increased Spell Damage", statOrder = { 1090 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (10-19)% increased Damage", statOrder = { 1830 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (20-29)% increased Damage", statOrder = { 1830 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (30-39)% increased Damage", statOrder = { 1830 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (15-29)% increased Damage", statOrder = { 1830 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (30-44)% increased Damage", statOrder = { 1830 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (45-59)% increased Damage", statOrder = { 1830 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "critical" }, "(20-25)% increased Spell Critical Strike Chance", statOrder = { 1320 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "critical" }, "(30-35)% increased Spell Critical Strike Chance", statOrder = { 1320 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "minion" }, "Trigger Level 10 Summon Spectral Wolf on Kill", statOrder = { 675 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Culling Strike", statOrder = { 1893 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Every 3 seconds, Consume a nearby Corpse to Recover (7-10)% of Life", statOrder = { 5447 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "minion" }, "25% chance to Trigger Level 10 Summon Raging Spirit on Kill", statOrder = { 669 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "minion" }, "Your Minions spread Burning Ground on Death, dealing 10% of their maximum Life as Fire Damage per second", statOrder = { 8630 }, types = { ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "lightning" }, "You and Nearby Allies have 1 to (8-12) added Lightning Damage per Blue Socket", statOrder = { 2852 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "physical_damage", "village_runesmithing_enchant", "damage", "physical", "attack" }, "(11-15)% increased Physical Damage", statOrder = { 1098 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "physical_damage", "village_runesmithing_enchant", "damage", "physical", "attack" }, "(16-20)% increased Physical Damage", statOrder = { 1098 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "physical_damage", "village_runesmithing_enchant", "damage", "physical", "attack" }, "(21-25)% increased Physical Damage", statOrder = { 1098 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (7-9) to (14-16) Chaos Damage", statOrder = { 1253 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (11-15) to (23-26) Chaos Damage", statOrder = { 1253 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (16-21) to (31-37) Chaos Damage", statOrder = { 1253 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (12-17) to (26-30) Chaos Damage", statOrder = { 1253 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (21-28) to (42-48) Chaos Damage", statOrder = { 1253 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "chaos_damage", "village_runesmithing_enchant", "damage", "chaos", "attack" }, "Adds (29-40) to (58-68) Chaos Damage", statOrder = { 1253 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "(21-25)% reduced Enemy Stun Threshold with this Weapon", statOrder = { 2348 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "poison", "village_runesmithing_enchant", "chaos", "attack", "ailment" }, "10% chance to Poison on Hit", statOrder = { 7433 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "bleed", "village_runesmithing_enchant", "physical", "attack", "ailment" }, "10% chance to cause Bleeding on Hit", statOrder = { 2334 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "life", "physical", "attack" }, "(0.2-0.3)% of Physical Attack Damage Leeched as Life", statOrder = { 1510 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "mana", "physical", "attack" }, "(0.2-0.3)% of Physical Attack Damage Leeched as Mana", statOrder = { 1560 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack", "critical" }, "(5-7)% increased Critical Strike Chance", statOrder = { 1326 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant" }, "Trigger Level 1 Stalking Pustule on Kill", statOrder = { 700 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant" }, "Grants Level 1 Envy Skill", statOrder = { 555 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(7-13)% chance to gain Chaotic Might for 10 seconds on Kill", statOrder = { 5289 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (7-9) to (14-16) Cold Damage", statOrder = { 1235 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (11-15) to (23-26) Cold Damage", statOrder = { 1235 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (16-21) to (31-37) Cold Damage", statOrder = { 1235 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (12-17) to (26-30) Cold Damage", statOrder = { 1235 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (21-28) to (42-48) Cold Damage", statOrder = { 1235 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds (29-40) to (58-68) Cold Damage", statOrder = { 1235 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "cold", "ailment" }, "(10-15)% chance to Freeze", statOrder = { 1883 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "cold", "ailment" }, "(20-25)% chance to Freeze", statOrder = { 1883 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack", "speed" }, "(3-6)% increased Attack Speed", statOrder = { 1276 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "speed" }, "(6-10)% increased Cast Speed", statOrder = { 1308 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "speed" }, "(13-18)% increased Cast Speed", statOrder = { 1308 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental" }, "No Physical Damage", "Has (50-100)% increased Elemental Damage", statOrder = { 1098, 7369 }, types = { ["Two Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant", "attack" }, "Trigger Level 10 Icicle Burst when you Hit a Frozen Enemy", statOrder = { 694 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "cold", "ailment" }, "(10-15)% chance to create Chilled Ground when you Freeze an Enemy", statOrder = { 3247 }, types = { ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-25)% chance to create Consecrated Ground when you Shatter an Enemy", statOrder = { 3958 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain (10-15)% of Cold Damage as Extra Fire Damage against Frozen Enemies", statOrder = { 5389 }, types = { ["Two Handed Sword"] = true, ["Two Handed Axe"] = true, ["Two Handed Mace"] = true, ["Staff"] = true, ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "curse" }, "(20-30)% chance to Curse Enemies with Elemental Weakness on Hit", statOrder = { 2367 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, ["Claw"] = true, ["Dagger"] = true, ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Minions deal (20-30)% increased Damage if you've Hit Recently", statOrder = { 8622 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, ["One Handed Axe"] = true, ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "life" }, "Recover (1-3)% of Life on Kill", statOrder = { 1608 }, types = { ["Two Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "mana" }, "Recover (1-3)% of Mana on Kill", statOrder = { 1610 }, types = { ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-30)% of Attack Physical Damage Converted to Fire Damage", statOrder = { 4600 }, types = { ["Two Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-30)% of Attack Physical Damage Converted to Cold Damage", statOrder = { 4599 }, types = { ["Two Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-30)% of Attack Physical Damage Converted to Lightning Damage", statOrder = { 4601 }, types = { ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(10-15)% chance to Cover Enemies in Ash on Hit", statOrder = { 5471 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(10-15)% chance to Cover Enemies in Frost on Hit", statOrder = { 5475 }, types = { ["Two Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "+10% to Maximum Effect of Shock", statOrder = { 9261 }, types = { ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Enemies Killed by your Hits are destroyed", statOrder = { 5925 }, types = { ["Claw"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "chaos_damage", "village_runesmithing_enchant", "damage", "elemental", "chaos" }, "Gain (7-10)% of Elemental Damage as Extra Chaos Damage", statOrder = { 1799 }, types = { ["Two Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Your Hits against Marked Enemy cannot be Blocked or Suppressed", statOrder = { 6639 }, types = { ["Dagger"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "fire", "caster", "gem" }, "+1 to Level of all Fire Spell Skill Gems", statOrder = { 1470 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "cold", "caster", "gem" }, "+1 to Level of all Cold Spell Skill Gems", statOrder = { 1471 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "elemental", "lightning", "caster", "gem" }, "+1 to Level of all Lightning Spell Skill Gems", statOrder = { 1472 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "chaos", "caster", "gem" }, "+1 to Level of all Chaos Spell Skill Gems", statOrder = { 1473 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "physical", "caster", "gem" }, "+1 to Level of all Physical Spell Skill Gems", statOrder = { 1469 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "minion", "gem" }, "+1 to Level of all Minion Skill Gems", statOrder = { 1474 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(15-25)% chance to inflict Fire Exposure on Hit", statOrder = { 4734 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(15-25)% chance to inflict Cold Exposure on Hit", statOrder = { 4733 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(15-25)% chance to inflict Lightning Exposure on Hit", statOrder = { 4735 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Spells deal added Chaos Damage equal to 4% of your maximum Life", statOrder = { 4313 }, types = { ["Two Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "physical", "caster" }, "(10-15)% chance to Impale on Spell Hit", statOrder = { 9425 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack", "gem" }, "+2 to Level of Socketed Melee Gems", statOrder = { 158 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(10-20)% chance to Blind Enemies on Hit with Spells", statOrder = { 9420 }, types = { ["One Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "Melee Hits Fortify", statOrder = { 2116 }, types = { ["Dagger"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain (2-4) Rage on Melee Hit", statOrder = { 6358 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "physical_damage", "bleed", "village_runesmithing_enchant", "damage", "physical", "attack", "ailment" }, "(10-20)% chance for Bleeding inflicted with this Weapon to deal 100% more Damage", statOrder = { 7316 }, types = { ["Dagger"] = true, }, }, - { type = "Runecraft", modTags = { "chaos_damage", "poison", "village_runesmithing_enchant", "damage", "chaos", "attack", "ailment" }, "(10-20)% chance for Poisons inflicted with this Weapon to deal 100% more Damage", statOrder = { 7317 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire", "attack" }, "Adds 5% of your Maximum Mana as Fire Damage to Attacks with this Weapon", statOrder = { 4642 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "attack" }, "Iron Grip", statOrder = { 9965 }, types = { ["Claw"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster" }, "Iron Will", statOrder = { 9976 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Far Shot", statOrder = { 9974 }, types = { ["One Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "attack" }, "Point Blank", statOrder = { 9952 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Skills fire an additional Projectile", statOrder = { 1651 }, types = { ["Two Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Skills fire 2 additional Projectiles", "Projectiles are fired in random directions", statOrder = { 1651, 9091 }, types = { ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "block", "village_runesmithing_enchant" }, "+(6-8)% Chance to Block Attack Damage while Dual Wielding", statOrder = { 1029 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(5-10)% chance to Restore your Ward on Hit", statOrder = { 9184 }, types = { ["One Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster" }, "(10-20)% chance to inflict Corrosion on Hit with Spells", statOrder = { 9424 }, types = { ["Dagger"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "critical" }, "Gain Elusive on Critical Strike", statOrder = { 4110 }, types = { ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "attack" }, "Exerted Attacks deal (80-100)% increased Damage", statOrder = { 5908 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "+(15-25)% to Damage over Time Multiplier for Ailments from Critical Strikes", statOrder = { 1110 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(7-10)% increased Rage Effect", statOrder = { 9062 }, types = { ["Claw"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain Arcane Surge after Spending a total of 200 Life", statOrder = { 6249 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain Onslaught after Spending a total of 200 Mana", statOrder = { 6307 }, types = { ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Insufficient Life doesn't prevent your Melee Attacks", statOrder = { 8520 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "gem" }, "+2 to Level of all Spell Skill Gems", statOrder = { 1468 }, types = { ["Two Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "curse" }, "Curse Enemies with Temporal Chains on Hit", statOrder = { 2370 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Curse Enemies with Punishment on Hit", statOrder = { 5578 }, types = { ["One Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "curse" }, "Curse Enemies with Enfeeble on Hit", statOrder = { 2364 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "endurance_charge", "village_runesmithing_enchant" }, "(5-10)% chance to gain an Endurance Charge on Kill", statOrder = { 2478 }, types = { ["Claw"] = true, }, }, - { type = "Runecraft", modTags = { "frenzy_charge", "village_runesmithing_enchant" }, "(5-10)% chance to gain a Frenzy Charge on Kill", statOrder = { 2480 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "power_charge", "village_runesmithing_enchant" }, "(5-10)% chance to gain a Power Charge on Kill", statOrder = { 2482 }, types = { ["One Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "vaal" }, "100% chance to gain an additional Vaal Soul on Kill", statOrder = { 2943 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "attack" }, "Adds 5% of your Maximum Energy Shield as Cold Damage to Attacks with this Weapon", statOrder = { 4641 }, types = { ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(10-20)% chance to Aggravate Bleeding on targets you Hit with Attacks", statOrder = { 4364 }, types = { ["Claw"] = true, }, }, - { type = "Runecraft", modTags = { "poison", "village_runesmithing_enchant", "chaos", "ailment" }, "(15-25)% increased Poison Duration", statOrder = { 3009 }, types = { ["Two Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "Attacks Cost Life instead of Mana", statOrder = { 9978 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "critical" }, "Gain Unholy Might for 4 seconds on Critical Strike", statOrder = { 2765 }, types = { ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "minion" }, "+1 to maximum number of Summoned Golems", statOrder = { 3526 }, types = { ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Damage cannot be Reflected", statOrder = { 5596 }, types = { ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "chaos_damage", "village_runesmithing_enchant", "damage", "elemental", "cold", "chaos" }, "(20-25)% of Cold Damage Converted to Chaos Damage", statOrder = { 1826 }, types = { ["Dagger"] = true, }, }, - { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "life" }, "Life Leech from Hits with this Weapon is instant", statOrder = { 2388 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "resource", "village_runesmithing_enchant", "mana" }, "Mana Leech from Hits with this Weapon is Instant", statOrder = { 7423 }, types = { ["One Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "defences", "energy_shield" }, "Energy Shield Leech Effects from Attacks are not removed at Full Energy Shield", statOrder = { 5979 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Haunted by Tormented Spirits", statOrder = { 6769 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "vaal" }, "Socketed Vaal Skills have 100% reduced Soul Gain Prevention Duration", statOrder = { 495 }, types = { ["Dagger"] = true, }, }, - { type = "Runecraft", modTags = { "physical_damage", "elemental_damage", "village_runesmithing_enchant", "damage", "physical", "elemental", "attack" }, "Gain (30-50)% of Weapon Physical Damage as Extra Damage of each Element", statOrder = { 4092 }, types = { ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "skill", "village_runesmithing_enchant", "caster", "gem" }, "Trigger a Socketed Fire Spell on Hit, with a 250 second Cooldown", statOrder = { 7546 }, types = { ["One Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "caster", "curse" }, "You can apply an additional Curse", statOrder = { 2022 }, types = { ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "(20-25)% chance when you Kill a Magic Monster to gain its Modifiers for 60 seconds", statOrder = { 6291 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "Attack Projectiles Return to you", statOrder = { 2672 }, types = { ["Two Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Attack Critical Strikes ignore Enemy Monster Elemental Resistances", statOrder = { 4569 }, types = { ["Two Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "+2 metres to Weapon Range", statOrder = { 2594 }, types = { ["One Handed Sword"] = true, ["Thrusting One Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Chaos Damage with Hits is Lucky", statOrder = { 5318 }, types = { ["Dagger"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain Flaming, Icy or Crackling Runesurge at random for 4 seconds every 10 seconds", statOrder = { 6266 }, types = { ["Two Handed Mace"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Battlemage", statOrder = { 9924 }, types = { ["Claw"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "attack" }, "Melee Strike Skills deal Splash Damage to surrounding targets", statOrder = { 1035 }, types = { ["Claw"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Gain a random shrine buff every 10 seconds", statOrder = { 6339 }, types = { ["Staff"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "Trigger Level 20 Summon Phantasm Skill when you Consume a corpse", statOrder = { 701 }, types = { ["Two Handed Sword"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "minion" }, "Increases and Reductions to Minion Damage also affect you at 150% of their value", statOrder = { 4361 }, types = { ["Bow"] = true, }, }, - { type = "Runecraft", modTags = { "elemental_damage", "village_runesmithing_enchant", "damage", "elemental", "fire" }, "(7-10)% increased Fire Damage per 1% Fire Resistance above 75%", statOrder = { 6096 }, types = { ["Two Handed Axe"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "+(50-75)% chance to Suppress Spell Damage while your Off Hand is empty", statOrder = { 9413 }, types = { ["One Handed Mace"] = true, ["Sceptre"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant", "damage", "vaal" }, "Shepherd of Souls", statOrder = { 9962 }, types = { ["Wand"] = true, }, }, - { type = "Runecraft", modTags = { "village_runesmithing_enchant" }, "5% increased Quantity of Gold Dropped by Slain Enemies", statOrder = { 6772 }, types = { }, }, } \ No newline at end of file diff --git a/src/Data/QueryMods.lua b/src/Data/QueryMods.lua index 407452971d..4de165dbbf 100644 --- a/src/Data/QueryMods.lua +++ b/src/Data/QueryMods.lua @@ -54857,24 +54857,26 @@ return { }, }, ["786_FlaskDispellsPoison"] = { + ["sign"] = "", ["specialCaseData"] = { }, ["tradeMod"] = { - ["id"] = "explicit.stat_3596333054", - ["text"] = "Grants Immunity to Poison for 4 seconds if used while Poisoned", + ["id"] = "explicit.stat_542375676", + ["text"] = "Grants Immunity to Poison for # seconds if used while Poisoned", ["type"] = "explicit", }, }, ["787_FlaskPoisonImmunity"] = { ["Flask"] = { - ["max"] = 1, - ["min"] = 1, + ["max"] = 17, + ["min"] = 6, }, + ["sign"] = "", ["specialCaseData"] = { }, ["tradeMod"] = { - ["id"] = "explicit.stat_3596333054", - ["text"] = "Grants Immunity to Poison for 4 seconds if used while Poisoned", + ["id"] = "explicit.stat_542375676", + ["text"] = "Grants Immunity to Poison for # seconds if used while Poisoned", ["type"] = "explicit", }, }, @@ -55155,7 +55157,7 @@ return { ["specialCaseData"] = { }, ["tradeMod"] = { - ["id"] = "explicit.stat_1053326368", + ["id"] = "explicit.stat_1619168299", ["text"] = "#% chance to Avoid being Chilled during Effect", ["type"] = "explicit", }, @@ -55169,7 +55171,7 @@ return { ["specialCaseData"] = { }, ["tradeMod"] = { - ["id"] = "explicit.stat_2872815301", + ["id"] = "explicit.stat_475518267", ["text"] = "#% chance to Avoid being Frozen during Effect", ["type"] = "explicit", }, @@ -55223,7 +55225,7 @@ return { ["specialCaseData"] = { }, ["tradeMod"] = { - ["id"] = "explicit.stat_335507772", + ["id"] = "explicit.stat_2094299742", ["text"] = "+# to maximum Fortification", ["type"] = "explicit", }, @@ -55237,7 +55239,7 @@ return { ["specialCaseData"] = { }, ["tradeMod"] = { - ["id"] = "explicit.stat_335507772", + ["id"] = "explicit.stat_2094299742", ["text"] = "+# to maximum Fortification", ["type"] = "explicit", }, diff --git a/src/Data/Rares.lua b/src/Data/Rares.lua index 88a3bcdeac..79061c852d 100644 --- a/src/Data/Rares.lua +++ b/src/Data/Rares.lua @@ -1,77 +1,82 @@ +-- This file is automatically generated, do not edit! -- Item data (c) Grinding Gear Games return { -- Helmet [[ -Armour/Evasion Helmet -Penitent Mask -Crafted: true -Prefix: LocalBaseArmourAndEvasionRating3 -Prefix: LocalIncreasedArmourAndEvasion5 -Prefix: IncreasedLife7 -]],[[ -Evasion/Energy Shield Helmet -Blizzard Crown -Crafted: true -Prefix: LocalBaseEvasionRatingAndEnergyShield3 -Prefix: LocalIncreasedEvasionAndEnergyShield5_ -Prefix: IncreasedLife7 -]],[[ -Armour/Energy Shield Helmet -Archdemon Crown -Crafted: true -Prefix: LocalBaseArmourAndEnergyShield3 -Prefix: LocalIncreasedArmourAndEnergyShield5 -Prefix: IncreasedLife7 -]],[[ Armour Helmet -Eternal Burgonet +Giantslayer Helmet Crafted: true Prefix: LocalIncreasedPhysicalDamageReductionRating3 Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife7 ]],[[ Evasion Helmet -Lion Pelt +Majestic Pelt Crafted: true Prefix: LocalIncreasedEvasionRating3 Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife7 +Suffix: ChanceToSuppressSpells2 ]],[[ Energy Shield Helmet -Hubris Circlet +Lich's Circlet Crafted: true Prefix: IncreasedLife7 Prefix: LocalIncreasedEnergyShieldPercent5 Prefix: LocalIncreasedEnergyShield7 ]],[[ Armour/Evasion Helmet -Nightmare Bascinet +Haunted Bascinet Crafted: true Prefix: LocalBaseArmourAndEvasionRating3 Prefix: LocalIncreasedArmourAndEvasion5 Prefix: IncreasedLife7 +Suffix: ChanceToSuppressSpells2 +]],[[ +Armour/Evasion Helmet +Penitent Mask +Crafted: true +Prefix: LocalBaseArmourAndEvasionRating3 +Prefix: LocalIncreasedArmourAndEvasion5 +Prefix: IncreasedLife7 +Suffix: ChanceToSuppressSpells2 ]],[[ Armour/Energy Shield Helmet -Praetor Crown +Divine Crown Crafted: true Prefix: LocalBaseArmourAndEnergyShield3 Prefix: LocalIncreasedArmourAndEnergyShield5 Prefix: IncreasedLife7 ]],[[ -Armour/Energy Shield Helmet +Minion Helm Bone Helmet Crafted: true +Prefix: GlobalIncreaseMinionSpellSkillGemLevel2 +Prefix: IncreasedLife7 +]],[[ +Armour/Energy Shield Helmet +Archdemon Crown +Crafted: true Prefix: LocalBaseArmourAndEnergyShield3 Prefix: LocalIncreasedArmourAndEnergyShield5 Prefix: IncreasedLife7 ]],[[ Evasion/Energy Shield Helmet -Deicide Mask +Torturer's Mask +Crafted: true +Prefix: LocalBaseEvasionRatingAndEnergyShield3 +Prefix: LocalIncreasedEvasionAndEnergyShield5_ +Prefix: IncreasedLife7 +Suffix: ChanceToSuppressSpells2 +]],[[ +Evasion/Energy Shield Helmet +Blizzard Crown Crafted: true Prefix: LocalBaseEvasionRatingAndEnergyShield3 Prefix: LocalIncreasedEvasionAndEnergyShield5_ Prefix: IncreasedLife7 +Suffix: ChanceToSuppressSpells2 ]],[[ Ward Helmet Runic Crown @@ -82,64 +87,53 @@ Prefix: IncreasedLife7 ]], -- Gloves [[ -Evasion Gloves -Trapsetter Gloves +Armour Gloves +Leviathan Gauntlets Crafted: true Prefix: LocalIncreasedPhysicalDamageReductionRating2 Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife6 ]],[[ -Energy Shield Gloves -Nexus Gloves -Crafted: true -Prefix: IncreasedLife6 -Prefix: LocalIncreasedEnergyShieldPercent5 -Prefix: LocalIncreasedEnergyShield6 -]],[[ Armour Gloves -Thwarting Gauntlets +Spiked Gloves Crafted: true Prefix: LocalIncreasedPhysicalDamageReductionRating2 Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife6 ]],[[ -Armour/Energy Shield Gloves -Apothecary's Gloves -Crafted: true -Prefix: LocalBaseArmourAndEnergyShield2_ -Prefix: LocalIncreasedArmourAndEnergyShield5 -Prefix: IncreasedLife6 -]],[[ Armour Gloves -Titan Gauntlets +Thwarting Gauntlets Crafted: true Prefix: LocalIncreasedPhysicalDamageReductionRating2 Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife6 ]],[[ -Armour Gloves -Spiked Gloves +Evasion Gloves +Velour Gloves Crafted: true -Prefix: LocalIncreasedPhysicalDamageReductionRating2 -Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 +Prefix: LocalIncreasedEvasionRating2 +Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife6 +Suffix: ChanceToSuppressSpells2 ]],[[ Evasion Gloves -Slink Gloves +Gripped Gloves Crafted: true Prefix: LocalIncreasedEvasionRating2 Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife6 +Suffix: ChanceToSuppressSpells2 ]],[[ Evasion Gloves -Gripped Gloves +Trapsetter Gloves Crafted: true Prefix: LocalIncreasedEvasionRating2 Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife6 +Suffix: ChanceToSuppressSpells2 ]],[[ Energy Shield Gloves -Sorcerer Gloves +Warlock Gloves Crafted: true Prefix: IncreasedLife6 Prefix: LocalIncreasedEnergyShieldPercent5 @@ -152,26 +146,42 @@ Prefix: IncreasedLife6 Prefix: LocalIncreasedEnergyShieldPercent5 Prefix: LocalIncreasedEnergyShield6 ]],[[ +Energy Shield Gloves +Nexus Gloves +Crafted: true +Prefix: IncreasedLife6 +Prefix: LocalIncreasedEnergyShieldPercent5 +Prefix: LocalIncreasedEnergyShield6 +]],[[ Armour/Evasion Gloves -Dragonscale Gauntlets +Wyvernscale Gauntlets Crafted: true Prefix: LocalBaseArmourAndEvasionRating2 Prefix: LocalIncreasedArmourAndEvasion5 Prefix: IncreasedLife6 +Suffix: ChanceToSuppressSpells2 +]],[[ +Armour/Energy Shield Gloves +Paladin Gloves +Crafted: true +Prefix: LocalBaseArmourAndEnergyShield2_ +Prefix: LocalIncreasedArmourAndEnergyShield5 +Prefix: IncreasedLife6 ]],[[ Armour/Energy Shield Gloves -Crusader Gloves +Apothecary's Gloves Crafted: true Prefix: LocalBaseArmourAndEnergyShield2_ Prefix: LocalIncreasedArmourAndEnergyShield5 Prefix: IncreasedLife6 ]],[[ Evasion/Energy Shield Gloves -Murder Mitts +Phantom Mitts Crafted: true Prefix: LocalBaseEvasionRatingAndEnergyShield2 Prefix: LocalIncreasedEvasionAndEnergyShield5_ Prefix: IncreasedLife6 +Suffix: ChanceToSuppressSpells2 ]],[[ Ward Gloves Runic Gauntlets @@ -183,7 +193,7 @@ Prefix: IncreasedLife7 -- Body Armour [[ Armour Chest -Glorious Plate +Royal Plate Crafted: true Prefix: LocalIncreasedPhysicalDamageReductionRating5 Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 @@ -196,69 +206,65 @@ Prefix: LocalIncreasedPhysicalDamageReductionRating5 Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife9 ]],[[ +Additional Curse Hunter Chest +Royal Plate +Hunter Item +Crafted: true +Prefix: AdditionalCurseOnEnemiesInfluence1 +Prefix: IncreasedLife9 +]],[[ Evasion Chest -Assassin's Garb +Syndicate's Garb Crafted: true Prefix: LocalIncreasedEvasionRating5 Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife9 +Suffix: ChanceToSuppressSpellsHigh2__ ]],[[ Evasion Chest -Zodiac Leather +Assassin's Garb Crafted: true Prefix: LocalIncreasedEvasionRating5 Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife9 +Suffix: ChanceToSuppressSpellsHigh2__ ]],[[ Energy Shield Chest -Vaal Regalia +Twilight Regalia Crafted: true Prefix: IncreasedLife9 Prefix: LocalIncreasedEnergyShieldPercent5 Prefix: LocalIncreasedEnergyShield10 ]],[[ Armour/Evasion Chest -Triumphant Lamellar +Conquest Lamellar Crafted: true Prefix: LocalBaseArmourAndEvasionRating5 Prefix: LocalIncreasedArmourAndEvasion5 Prefix: IncreasedLife9 +Suffix: ChanceToSuppressSpellsHigh2__ ]],[[ Armour/Energy Shield Chest -Saintly Chainmail +Sacred Chainmail Crafted: true Prefix: LocalBaseArmourAndEnergyShield5 Prefix: LocalIncreasedArmourAndEnergyShield5 Prefix: IncreasedLife9 ]],[[ Evasion/Energy Shield Chest -Carnal Armour +Necrotic Armour Crafted: true Prefix: LocalBaseEvasionRatingAndEnergyShield5_ Prefix: LocalIncreasedEvasionAndEnergyShield5_ Prefix: IncreasedLife9 +Suffix: ChanceToSuppressSpellsHigh2__ ]], -- Boots [[ -Evasion/Energy Shield Boots -Fugitive Boots -Crafted: true -Prefix: LocalIncreasedEvasionAndEnergyShield5_ -Prefix: IncreasedLife6 -Prefix: MovementVelocity5 -Suffix: ChaosResist4 -]],[[ -Evasion Boots -Stormrider Boots -Crafted: true -Prefix: LocalIncreasedEvasionRatingPercent5 -Prefix: IncreasedLife6 -Prefix: MovementVelocity5 -]],[[ -Energy Shield Boots -Dreamquest Slippers +Armour Boots +Leviathan Greaves Crafted: true -Prefix: LocalIncreasedEnergyShieldPercent5 +Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife6 Prefix: MovementVelocity5 ]],[[ @@ -269,33 +275,43 @@ Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife6 Prefix: MovementVelocity5 ]],[[ -Armour Boots -Titan Greaves +Evasion Boots +Velour Boots Crafted: true -Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 +Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife6 Prefix: MovementVelocity5 +Suffix: ChanceToSuppressSpells2 ]],[[ Evasion Boots -Slink Boots +Stormrider Boots Crafted: true Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife6 Prefix: MovementVelocity5 +Suffix: ChanceToSuppressSpells2 ]],[[ Energy Shield Boots -Sorcerer Boots +Warlock Boots Crafted: true Prefix: IncreasedLife6 Prefix: LocalIncreasedEnergyShieldPercent5 Prefix: MovementVelocity5 ]],[[ +Energy Shield Boots +Dreamquest Slippers +Crafted: true +Prefix: LocalIncreasedEnergyShieldPercent5 +Prefix: IncreasedLife6 +Prefix: MovementVelocity5 +]],[[ Armour/Evasion Boots -Dragonscale Boots +Wyvernscale Boots Crafted: true Prefix: LocalIncreasedArmourAndEvasion5 Prefix: IncreasedLife6 Prefix: MovementVelocity5 +Suffix: ChanceToSuppressSpells2 ]],[[ Armour/Evasion Boots Two-Toned Boots (Armour/Evasion) @@ -303,9 +319,10 @@ Crafted: true Prefix: LocalIncreasedArmourAndEvasion5 Prefix: IncreasedLife6 Prefix: MovementVelocity5 +Suffix: ChanceToSuppressSpells2 ]],[[ Armour/Energy Shield Boots -Crusader Boots +Paladin Boots Crafted: true Prefix: LocalIncreasedArmourAndEnergyShield5 Prefix: IncreasedLife6 @@ -319,11 +336,12 @@ Prefix: IncreasedLife6 Prefix: MovementVelocity5 ]],[[ Evasion/Energy Shield Boots -Murder Boots +Phantom Boots Crafted: true Prefix: LocalIncreasedEvasionAndEnergyShield5_ Prefix: IncreasedLife6 Prefix: MovementVelocity5 +Suffix: ChanceToSuppressSpells2 ]],[[ Evasion/Energy Shield Boots Two-Toned Boots (Evasion/Energy Shield) @@ -331,6 +349,15 @@ Crafted: true Prefix: LocalIncreasedEvasionAndEnergyShield5_ Prefix: IncreasedLife6 Prefix: MovementVelocity5 +Suffix: ChanceToSuppressSpells2 +]],[[ +Evasion/Energy Shield Boots +Fugitive Boots +Crafted: true +Prefix: LocalIncreasedEvasionAndEnergyShield5_ +Prefix: IncreasedLife6 +Prefix: MovementVelocity5 +Suffix: ChaosResist4 ]],[[ Ward Boots Runic Sabatons @@ -341,78 +368,132 @@ Prefix: IncreasedLife7 ]], -- Shields [[ -Energy Shield Shield -Transfer-attuned Spirit Shield -Crafted: true -Prefix: IncreasedLife8 -Prefix: LocalIncreasedEnergyShieldPercent5 -Prefix: LocalIncreasedEnergyShield9 -]],[[ -Evasion Shield -Cold-attuned Buckler +Armour Shield +Colossal Tower Shield Crafted: true -Prefix: LocalIncreasedEvasionRating5 -Prefix: LocalIncreasedEvasionRatingPercent5 +Prefix: LocalIncreasedBlockPercentage5 +Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife8 ]],[[ Armour Shield Heat-attuned Tower Shield Crafted: true -Prefix: LocalIncreasedPhysicalDamageReductionRating5 +Prefix: LocalIncreasedBlockPercentage5 Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 Prefix: IncreasedLife8 ]],[[ -Armour Shield -Pinnacle Tower Shield +Shaper Gain On Block Shield +Ezomyte Tower Shield +Shaper Item Crafted: true -Prefix: LocalIncreasedPhysicalDamageReductionRating5 -Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5 +Prefix: LocalIncreasedBlockPercentage5 Prefix: IncreasedLife8 +Suffix: RecoverLifePercentOnBlockUber1_ ]],[[ Evasion Shield -Imperial Buckler +Lacquered Buckler Crafted: true -Prefix: LocalIncreasedEvasionRating5 +Prefix: LocalIncreasedBlockPercentage5 +Prefix: LocalIncreasedEvasionRatingPercent5 +Prefix: IncreasedLife8 +Suffix: ChanceToSuppressSpellsHigh2__ +]],[[ +Evasion Shield +Cold-attuned Buckler +Crafted: true +Prefix: LocalIncreasedBlockPercentage5 Prefix: LocalIncreasedEvasionRatingPercent5 Prefix: IncreasedLife8 +Suffix: ChanceToSuppressSpellsHigh2__ ]],[[ Energy Shield Shield Titanium Spirit Shield Crafted: true -Prefix: IncreasedLife8 +Prefix: LocalIncreasedBlockPercentage5 +Prefix: LocalIncreasedEnergyShieldPercent5 +Prefix: LocalIncreasedEnergyShield9 +]],[[ +Energy Shield Shield +Transfer-attuned Spirit Shield +Crafted: true +Prefix: LocalIncreasedBlockPercentage5 Prefix: LocalIncreasedEnergyShieldPercent5 Prefix: LocalIncreasedEnergyShield9 ]],[[ ++Physical Shield +Titanium Spirit Shield +Crafted: true +Prefix: GlobalPhysicalSpellGemsLevel1 +Prefix: SpellDamageOnWeapon5 +Suffix: SpellCriticalStrikeChance3 +]],[[ ++Fire Shield +Titanium Spirit Shield +Crafted: true +Prefix: GlobalFireSpellGemsLevel1_ +Prefix: FireDamagePrefixOnWeapon5_ +Suffix: SpellCriticalStrikeChance3 +]],[[ ++Cold Shield +Titanium Spirit Shield +Crafted: true +Prefix: GlobalColdSpellGemsLevel1_ +Prefix: ColdDamagePrefixOnWeapon5_ +Suffix: SpellCriticalStrikeChance3 +]],[[ ++Lightning Shield +Titanium Spirit Shield +Crafted: true +Prefix: GlobalLightningSpellGemsLevel1 +Prefix: LightningDamagePrefixOnWeapon5 +Suffix: SpellCriticalStrikeChance3 +]],[[ ++Chaos Shield +Titanium Spirit Shield +Crafted: true +Prefix: GlobalChaosSpellGemsLevel1 +Prefix: SpellDamageOnWeapon5 +Suffix: SpellCriticalStrikeChance3 +]],[[ ++Minion Shield +Fossilised Spirit Shield +Crafted: true +Prefix: MinionGemLevel1h1 +Prefix: MinionDamageOnWeapon5 +Suffix: MinionCriticalStrikeChanceIncrease3 +]],[[ Armour/Evasion Shield -Elegant Round Shield +Cardinal Round Shield Crafted: true -Prefix: LocalBaseArmourAndEvasionRating5 +Prefix: LocalIncreasedBlockPercentage5 Prefix: LocalIncreasedArmourAndEvasion5 Prefix: IncreasedLife8 +Suffix: ChanceToSuppressSpellsHigh2__ +]],[[ +Armour/Energy Shield Shield +Champion Kite Shield +Crafted: true +Prefix: LocalIncreasedBlockPercentage5 +Prefix: LocalIncreasedArmourAndEnergyShield5 +Prefix: IncreasedLife8 ]],[[ Armour/Energy Shield Shield Archon Kite Shield Crafted: true -Prefix: LocalBaseArmourAndEnergyShield5 +Prefix: LocalIncreasedBlockPercentage5 Prefix: LocalIncreasedArmourAndEnergyShield5 Prefix: IncreasedLife8 ]],[[ Evasion/Energy Shield Shield Supreme Spiked Shield Crafted: true -Prefix: LocalBaseEvasionRatingAndEnergyShield5_ +Prefix: LocalIncreasedBlockPercentage5 Prefix: LocalIncreasedEvasionAndEnergyShield5_ Prefix: IncreasedLife8 +Suffix: ChanceToSuppressSpellsHigh2__ ]], -- Amulets [[ -Energy Shield Amulet -Seaglass Amulet -Crafted: true -Prefix: IncreasedEnergyShield7 -Prefix: IncreasedEnergyShieldPercent5 -Suffix: Intelligence5 -]],[[ Amulet Amber Amulet Crafted: true @@ -451,6 +532,10 @@ Crafted: true Suffix: Dexterity5 Suffix: Strength5 ]],[[ +Amulet +Marble Amulet +Crafted: true +]],[[ Mana Amulet Paua Amulet Crafted: true @@ -458,10 +543,6 @@ Prefix: IncreasedMana7 Suffix: Intelligence5 Suffix: ManaRegeneration4 ]],[[ -Amulet -Marble Amulet -Crafted: true -]],[[ Mana Amulet Blue Pearl Amulet Crafted: true @@ -469,6 +550,13 @@ Prefix: IncreasedMana7 Suffix: Intelligence5 Suffix: ManaRegeneration4 ]],[[ +Energy Shield Amulet +Seaglass Amulet +Crafted: true +Prefix: IncreasedEnergyShield7 +Prefix: IncreasedEnergyShieldPercent5 +Suffix: Intelligence5 +]],[[ Influence Amulet Astrolabe Amulet Crafted: true @@ -479,16 +567,17 @@ Crafted: true ]], -- Rings [[ -Ring -Geodesic Ring +Life Ring +Coral Ring Crafted: true +Prefix: IncreasedLife4 +Suffix: Strength6 ]],[[ -Resistance Ring -Cogwork Ring +Life Ring +Vermillion Ring Crafted: true -Suffix: FireResist4 -Suffix: ColdResist4 -Suffix: LightningResist4 +Prefix: IncreasedLife4 +Suffix: Strength6 ]],[[ Mana Ring Paua Ring @@ -497,16 +586,19 @@ Prefix: IncreasedMana7 Suffix: Intelligence5 Suffix: ManaRegeneration4 ]],[[ +Mana Ring +Cerulean Ring +Crafted: true +Prefix: IncreasedMana7 +Suffix: Intelligence5 +Suffix: ManaRegeneration4 +]],[[ Energy Shield Ring Moonstone Ring Crafted: true Prefix: IncreasedEnergyShield6 Suffix: Intelligence5 ]],[[ -Ring -Diamond Ring -Crafted: true -]],[[ Resistance Ring Ruby Ring Crafted: true @@ -528,23 +620,19 @@ Suffix: FireResist4 Suffix: ColdResist4 Suffix: LightningResist4 ]],[[ -Chaos Resistance Ring -Amethyst Ring -Crafted: true -Suffix: ChaosResist4 -]],[[ Resistance Ring -Ruby Ring +Two-Stone Ring +Variant: Fire and Cold +Variant: Cold and Lightning +Variant: Fire and Lightning Crafted: true Suffix: FireResist4 Suffix: ColdResist4 Suffix: LightningResist4 -]],[[ -Life Ring -Coral Ring -Crafted: true -Prefix: IncreasedLife4 -Suffix: Strength6 +Implicits: 3 +{variant:1}+(12-16)% to Fire and Cold Resistances +{variant:2}+(12-16)% to Cold and Lightning Resistances +{variant:3}+(12-16)% to Fire and Lightning Resistances ]],[[ Resistance Ring Prismatic Ring @@ -554,18 +642,16 @@ Suffix: ColdResist4 Suffix: LightningResist4 ]],[[ Resistance Ring -Two-Stone Ring -Variant: Fire and Cold -Variant: Cold and Lightning -Variant: Fire and Lightning +Cogwork Ring Crafted: true Suffix: FireResist4 Suffix: ColdResist4 Suffix: LightningResist4 -Implicits: 3 -{variant:1}+(12-16)% to Fire and Cold Resistances -{variant:2}+(12-16)% to Cold and Lightning Resistances -{variant:3}+(12-16)% to Fire and Lightning Resistances +]],[[ +Chaos Resistance Ring +Amethyst Ring +Crafted: true +Suffix: ChaosResist4 ]],[[ Ring Unset Ring @@ -573,12 +659,22 @@ Crafted: true Prefix: LocalIncreaseSocketedGemUnsetRing2 ]],[[ Ring +Diamond Ring +Crafted: true +]],[[ +Ring Steel Ring Crafted: true Prefix: AddedPhysicalDamage4 Suffix: IncreasedAccuracyNew3 Suffix: IncreasedAttackSpeed1 ]],[[ +Minion Ring +Bone Ring +Crafted: true +Prefix: MinionDamagePercent3 +Suffix: MinionAttackAndCastSpeed2 +]],[[ Ring Iolite Ring Crafted: true @@ -587,52 +683,82 @@ Ring Opal Ring Crafted: true ]],[[ -Mana Ring -Cerulean Ring +Ring +Geodesic Ring Crafted: true -Prefix: IncreasedMana7 -Suffix: Intelligence5 -Suffix: ManaRegeneration4 ]],[[ -Life Ring -Vermillion Ring +Ring +Helical Ring Crafted: true -Prefix: IncreasedLife4 -Suffix: Strength6 +]],[[ +Ring +Manifold Ring +Crafted: true +]],[[ +Synthesised Charge Ring +Iron Ring +Variant: Endurance Charge +Variant: Frenzy Charge +Variant: Power Charge +Crafted: true +Implicits: 3 +{variant:1}+1 to Maximum Endurance Charges +{variant:2}+1 to Maximum Frenzy Charges +{variant:3}+1 to Maximum Power Charges +]],[[ +Synthesised Curse Ring +Iron Ring +Variant: Vulnerability +Variant: Flammability +Variant: Frostbite +Variant: Conductivity +Variant: Elemental Weakness +Crafted: true +Implicits: 5 +{variant:1}Curse Enemies with Vulnerability on Hit +{variant:2}Curse Enemies with Flammability on Hit +{variant:3}Curse Enemies with Frostbite on Hit +{variant:4}Curse Enemies with Conductivity on Hit +{variant:5}Curse Enemies with Elemental Weakness on Hit ]], + -- Belts [[ Belt -Rustic Sash -Crafted: true -]],[[ -Energy Shield Belt -Chain Belt +Heavy Belt Crafted: true -Prefix: IncreasedEnergyShield6 +Prefix: IncreasedLife7 +Suffix: Strength7 ]],[[ Belt Leather Belt Crafted: true -Prefix: IncreasedLife4 -Suffix: Strength6 +Prefix: IncreasedLife7 +Suffix: Strength7 ]],[[ -Belt -Heavy Belt +Energy Shield Belt +Chain Belt Crafted: true -Prefix: IncreasedLife4 -Suffix: Strength6 +Prefix: IncreasedEnergyShield10 ]],[[ Energy Shield Belt Crystal Belt Crafted: true -Prefix: IncreasedEnergyShield6 +Prefix: IncreasedEnergyShield10 ]],[[ Belt Vanguard Belt Crafted: true Prefix: IncreasedPhysicalDamageReductionRating5 -Prefix: IncreasedLife5 +Prefix: IncreasedLife7 +]],[[ +Belt +Rustic Sash +Crafted: true +]],[[ +Belt +Stygian Vise +Crafted: true ]],[[ Flask Belt Micro-Distillery Belt @@ -655,8 +781,7 @@ Prefix: WeaponElementalDamage3 Suffix: IncreasedAttackSpeed1 Suffix: CriticalStrikeChanceWithBows4 Suffix: CriticalMultiplierWithBows3 -]], -[[ +]],[[ Quiver Artillery Quiver Crafted: true @@ -664,7 +789,7 @@ Prefix: AddedPhysicalDamage3 Prefix: IncreasedLife7 Prefix: WeaponElementalDamage3 Suffix: IncreasedAttackSpeed1 -Suffix: CriticalStrikeChanceWithBows4 +Suffix: CriticalStrikeChanceWithBows4 Suffix: CriticalMultiplierWithBows3 ]], -- Weapons @@ -682,7 +807,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 1H Axe Vaal Hatchet Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -700,7 +827,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 1H Axe Psychotic Axe Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -718,7 +847,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 2H Axe Despot Axe Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon4 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -736,7 +867,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 2H Axe Apex Cleaver Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon4 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -754,13 +887,15 @@ Suffix: LocalCriticalMultiplier4 Elemental Bow Thicket Bow Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon4 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed2 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 ]],[[ Fire Bow -Solarine Bow +Solarine Bow Crafted: true Prefix: LocalAddedFireDamageRanged6 Prefix: WeaponElementalDamageOnWeapons4 @@ -788,7 +923,9 @@ Suffix: LocalCriticalMultiplier4 Elemental Claw Imperial Claw Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -816,7 +953,9 @@ Suffix: LocalCriticalMultiplier4 Elemental Dagger Ambusher Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -843,7 +982,9 @@ Suffix: LocalCriticalMultiplier4 Elemental Dagger Pneumatic Dagger Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -873,20 +1014,22 @@ Prefix: SpellDamageAndManaOnWeapon4 Suffix: SpellCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 ]],[[ -Elemental Sceptre +Physical Sceptre Void Sceptre Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalIncreasedPhysicalDamagePercent5 +Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5 +Prefix: LocalAddedPhysicalDamage6 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 ]],[[ -Physical Sceptre +Elemental Sceptre Void Sceptre Crafted: true -Prefix: LocalIncreasedPhysicalDamagePercent5 -Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5 -Prefix: LocalAddedPhysicalDamage6 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -902,7 +1045,9 @@ Suffix: LocalCriticalMultiplier4 Elemental Sceptre Oscillating Sceptre Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -918,7 +1063,9 @@ Suffix: LocalCriticalMultiplier4 Elemental Sceptre Stabilising Sceptre Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -931,20 +1078,22 @@ Prefix: SpellDamageAndManaOnWeapon4 Suffix: SpellCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 ]],[[ -Elemental Sceptre +Physical Sceptre Alternating Sceptre Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalIncreasedPhysicalDamagePercent5 +Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5 +Prefix: LocalAddedPhysicalDamage6 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 ]],[[ -Physical Sceptre +Elemental Sceptre Alternating Sceptre Crafted: true -Prefix: LocalIncreasedPhysicalDamagePercent5 -Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5 -Prefix: LocalAddedPhysicalDamage6 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -962,7 +1111,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 1H Mace Behemoth Mace Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -980,7 +1131,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 1H Mace Boom Mace Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -998,7 +1151,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 2H Mace Coronal Maul Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon4 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1016,7 +1171,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 2H Mace Impact Force Propagator Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon4 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1034,7 +1191,9 @@ Suffix: LocalCriticalMultiplier4 Elemental Staff Maelstrom Staff Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon6 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1052,7 +1211,9 @@ Suffix: LocalCriticalMultiplier4 Elemental Staff Eventuality Rod Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon6 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1186,7 +1347,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 1H Sword Eternal Sword Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1204,7 +1367,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 1H Sword Anarchic Spiritblade Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1212,7 +1377,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 1H Sword Jewelled Foil Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1230,7 +1397,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 2H Sword Reaver Sword Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon4 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1238,7 +1407,9 @@ Suffix: LocalCriticalMultiplier4 Elemental 2H Sword Banishing Blade Crafted: true -Prefix: WeaponElementalDamageOnTwohandWeapon4 +Prefix: LocalAddedFireDamageTwoHand8_ +Prefix: LocalAddedColdDamageTwoHand8 +Prefix: LocalAddedLightningDamageTwoHand8 Suffix: LocalIncreasedAttackSpeed3 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1256,7 +1427,9 @@ Suffix: LocalCriticalMultiplier4 Elemental Wand Imbued Wand Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed2 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 @@ -1269,6 +1442,14 @@ Prefix: SpellDamageAndManaOnWeapon4 Suffix: SpellCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 ]],[[ +Spell Wand +Accumulator Wand +Crafted: true +Prefix: SpellDamageOnWeapon5 +Prefix: SpellDamageAndManaOnWeapon4 +Suffix: SpellCriticalStrikeChance3 +Suffix: LocalCriticalMultiplier4 +]],[[ Physical Wand Accumulator Wand Crafted: true @@ -1282,18 +1463,18 @@ Suffix: LocalCriticalMultiplier4 Elemental Wand Accumulator Wand Crafted: true -Prefix: WeaponElementalDamageOnWeapons4 +Prefix: LocalAddedFireDamage8 +Prefix: LocalAddedColdDamage8 +Prefix: LocalAddedLightningDamage8 Suffix: LocalIncreasedAttackSpeed2 Suffix: LocalCriticalStrikeChance3 Suffix: LocalCriticalMultiplier4 ]],[[ -Spell Wand -Accumulator Wand +Minion Wand +Convoking Wand Crafted: true -Prefix: SpellDamageOnWeapon5 -Prefix: SpellDamageAndManaOnWeapon4 -Suffix: SpellCriticalStrikeChance3 -Suffix: LocalCriticalMultiplier4 +Prefix: MinionGemLevel1h1 +Prefix: MinionDamageOnWeapon6 ]], -- Jewels [[ @@ -1320,6 +1501,22 @@ Crafted: true Cluster Jewel Small Cluster Jewel Crafted: true +]],[[ +Abyss Jewel +Ghastly Eye Jewel +Crafted: true +]],[[ +Abyss Jewel +Hypnotic Eye Jewel +Crafted: true +]],[[ +Abyss Jewel +Murderous Eye Jewel +Crafted: true +]],[[ +Abyss Jewel +Searching Eye Jewel +Crafted: true ]], -- Flasks -- Instant CB/Bleed immune Divine Life Flask @@ -1465,4 +1662,4 @@ Implicits: 1 {crafted}Used when Charges reach full Gain 3 Charges when you are Hit by an Enemy ]] -} \ No newline at end of file +} diff --git a/src/Data/Skills/act_dex.lua b/src/Data/Skills/act_dex.lua index 83461ef798..45de635fab 100644 --- a/src/Data/Skills/act_dex.lua +++ b/src/Data/Skills/act_dex.lua @@ -7924,6 +7924,7 @@ skills["FrostBladesAltX"] = { { name = "Ground DoT", attack = false, + hit = false, melee = false, projectile = false, area = true, @@ -7940,6 +7941,7 @@ skills["FrostBladesAltX"] = { melee = true, projectile = true, area = true, + dotFromAttack = true, }, baseMods = { skill("dotIsArea", true, { type = "SkillPart", skillPart = 2 }), diff --git a/src/Data/Skills/act_str.lua b/src/Data/Skills/act_str.lua index d9d4ac3e0b..3da344b332 100644 --- a/src/Data/Skills/act_str.lua +++ b/src/Data/Skills/act_str.lua @@ -5368,6 +5368,7 @@ skills["HeraldOfAsh"] = { }, baseMods = { skill("radius", 10), + flag("dotIsHeraldOfAsh"), }, qualityStats = { Default = { diff --git a/src/Data/Skills/other.lua b/src/Data/Skills/other.lua index 7a44f899be..9ae995e4fa 100644 --- a/src/Data/Skills/other.lua +++ b/src/Data/Skills/other.lua @@ -3856,6 +3856,29 @@ skills["SupportUniqueCastCurseOnCurse"] = { [1] = { storedUses = 1, levelRequirement = 0, cooldown = 0.25, }, }, } +skills["SupportTriggerFireSpellOnHit"] = { + name = "SupportTriggerFireSpellOnHit", + hidden = true, + color = 4, + support = true, + requireSkillTypes = { SkillType.Spell, SkillType.Triggerable, SkillType.AND, SkillType.Fire, SkillType.AND, }, + addSkillTypes = { SkillType.Triggered, SkillType.Cooldown, }, + excludeSkillTypes = { SkillType.Trapped, SkillType.RemoteMined, SkillType.SummonsTotem, SkillType.Aura, SkillType.InbuiltTrigger, }, + isTrigger = true, + statDescriptionScope = "gem_stat_descriptions", + fromItem = true, + statMap = { + ["spell_is_triggered_on_hit"] = { + skill("triggeredBySettlersEnchantTrigger", true) + } + }, + stats = { + "spell_is_triggered_on_hit", + }, + levels = { + [1] = { storedUses = 1, levelRequirement = 1, cooldown = 0.25, }, + }, +} skills["EnemyExplode"] = { name = "On Kill Monster Explosion", hidden = true, diff --git a/src/Data/Skills/spectre.lua b/src/Data/Skills/spectre.lua index 3ef7e781a4..ef741ebc9a 100644 --- a/src/Data/Skills/spectre.lua +++ b/src/Data/Skills/spectre.lua @@ -10547,4 +10547,35 @@ skills["AzmeriGolemRotateZap"] = { levels = { [1] = { 0.80000001192093, 1.2000000476837, critChance = 5, levelRequirement = 0, statInterpolation = { 3, 3, }, }, }, +} +skills["RevenantBossSpellProjectile"] = { + name = "Lightning Projectile", + hidden = true, + color = 4, + baseEffectiveness = 3.125, + incrementalEffectiveness = 0.046000000089407, + skillTypes = { [SkillType.Spell] = true, [SkillType.Projectile] = true, [SkillType.ProjectilesFromUser] = true, [SkillType.Triggerable] = true, }, + statDescriptionScope = "skill_stat_descriptions", + castTime = 1, + baseFlags = { + spell = true, + projectile = true, + triggerable = true, + }, + constantStats = { + { "monster_projectile_variation", 7 }, + { "base_number_of_projectiles_in_spiral_nova", 9 }, + { "projectile_spiral_nova_time_ms", 750 }, + { "projectile_spiral_nova_angle", 50 }, + { "projectile_spiral_nova_starting_angle_offset", -20 }, + { "monster_reverse_point_blank_damage_-%_at_minimum_range", 80 }, + }, + stats = { + "spell_minimum_base_lightning_damage", + "spell_maximum_base_lightning_damage", + "base_is_projectile", + }, + levels = { + [1] = { 0.60000002384186, 1.3999999761581, levelRequirement = 3, statInterpolation = { 3, 3, }, }, + }, } \ No newline at end of file diff --git a/src/Data/Skills/sup_dex.lua b/src/Data/Skills/sup_dex.lua index 086aa82210..8b9f5a53f1 100644 --- a/src/Data/Skills/sup_dex.lua +++ b/src/Data/Skills/sup_dex.lua @@ -3134,10 +3134,10 @@ skills["SupportRupture"] = { statDescriptionScope = "gem_stat_descriptions", statMap = { ["support_rupture_bleeding_damage_taken_+%_final"] = { - mod("DamageTaken", "MORE", nil, 0, KeywordFlag.Bleed, { type = "GlobalEffect", effectType = "Debuff" }, { type = "Multiplier", var = "RuptureStack", limit = 3 }) + mod("DamageTaken", "MORE", nil, 0, KeywordFlag.Bleed, { type = "GlobalEffect", effectType = "Debuff", effectName = "Rupture" }, { type = "Multiplier", var = "RuptureStack", limit = 3 }) }, ["support_rupture_bleeding_time_passed_+%_final"] = { - mod("BleedExpireRate", "MORE", nil, 0, KeywordFlag.Bleed, { type = "GlobalEffect", effectType = "Debuff" }, { type = "Multiplier", var = "RuptureStack", limit = 3 }) + mod("BleedExpireRate", "MORE", nil, 0, KeywordFlag.Bleed, { type = "GlobalEffect", effectType = "Debuff", effectName = "Rupture" }, { type = "Multiplier", var = "RuptureStack", limit = 3 }) }, ["critical_strikes_that_inflict_bleeding_also_rupture"] = { flag("Condition:CanInflictRupture", { type = "GlobalEffect", effectType = "Buff" }), diff --git a/src/Data/Spectres.lua b/src/Data/Spectres.lua index 073ce0a4c7..fc55c0cb18 100644 --- a/src/Data/Spectres.lua +++ b/src/Data/Spectres.lua @@ -4140,7 +4140,6 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/RobotArgusHigh__"] = { mod("Damage", "INC", 8, 1, 0, { div = 450, stat = "Armour", type = "PerStat" }), -- AzmeriRobotArgusAttackDamagePerArmour2 [attack_damage_+%_per_450_physical_damage_reduction_rating = 8] mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", 30, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "HulkingMiscreation", unscaleable = true }, { type = "MonsterTag", monsterTag = "Construct" })}), mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 100, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "HulkingMiscreation", unscaleable = true }, { type = "MonsterTag", monsterTag = "Construct" })}), - mod("AllyModifier", "LIST", { mod = mod("PhysicalDamageGainAsLightning", "BASE", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "HulkingMiscreation", unscaleable = true })}), }, } -- Spirit of Fortune @@ -4328,7 +4327,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AdmiralHigh_"] = { "GSAzmeriAdmiralCannonball", }, modList = { - mod("AllyModifier", "LIST", { mod = mod("MinimumFortification", "BASE", 10, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "PerfectNavalOfficer", unscaleable = true })}), + mod("AllyModifier", "LIST", { mod = mod("ColdDamageTaken", "INC", -5, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "PerfectNavalOfficer", unscaleable = true })}), }, } -- Dancing Sword @@ -4378,7 +4377,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AnimatedSwordMid"] = { "AzmeriSwordStormCascade", }, modList = { - mod("AllyModifier", "LIST", { mod = mod("ImpaleEffect", "INC", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}), + mod("AllyModifier", "LIST", { mod = mod("ImpaleChance", "BASE", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}), }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AnimatedSwordHigh_"] = { @@ -4403,8 +4402,8 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AnimatedSwordHigh_"] = { "AzmeriSwordStormCascade", }, modList = { - mod("AllyModifier", "LIST", { mod = mod("ImpaleEffect", "INC", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}), - mod("AllyModifier", "LIST", { mod = mod("ImpaleStacksMax", "BASE", 1, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}), + mod("AllyModifier", "LIST", { mod = mod("ImpaleChance", "BASE", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}), + mod("AllyModifier", "LIST", { mod = mod("ImpaleEffect", "INC", 30, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}), }, } -- Needle Horror @@ -4901,9 +4900,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DualstrikeDemonMid"] = { "AzmeriDualStrikeDemonDualStrike", }, modList = { - mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "Rage" }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }), - mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "Rage", div = 2 }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }), - mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1, 0, 0, { type = "Multiplier", actor = "parent", var = "Rage", div = 5 }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }), + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }), }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DualstrikeDemonHigh"] = { @@ -4931,9 +4928,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DualstrikeDemonHigh"] = { }, modList = { mod("PlayerModifier", "LIST", { mod = mod("PhysicalDamageGainAsFire", "BASE", 5, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "SlashingHorror", unscaleable = true })}), - mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "Rage" }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }), - mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "Rage", div = 2 }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }), - mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1, 0, 0, { type = "Multiplier", actor = "parent", var = "Rage", div = 5 }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }), + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }), }, } -- Druidic Alchemist @@ -5863,7 +5858,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SpiderLeaderHigh_"] = { "ABTTAzmeriSpiderLeaderAura", }, modList = { - mod("PlayerModifier", "LIST", { mod = mod("WitherEffect", "INC", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "SpiderMatriarch", unscaleable = true })}) --Does not work, + mod("PlayerModifier", "LIST", { mod = mod("WitherEffect", "INC", 10, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "SpiderMatriarch", unscaleable = true })}) --Does not work, }, } -- Meatsack @@ -6153,7 +6148,7 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/TurtleMid_"] = { "ABTTAzmeriTurtleInvulnerability", }, modList = { - mod("PlayerModifier", "LIST", { mod = mod("PhysicalDamageReduction", "BASE", 5, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "GuardianTurtle", unscaleable = true })}), + mod("PlayerModifier", "LIST", { mod = mod("PhysicalDamageReduction", "BASE", 3, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "GuardianTurtle", unscaleable = true })}), }, } minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/TurtleHigh"] = { @@ -6763,6 +6758,31 @@ minions["Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SynthesisGolemHigh"] = { }, modList = { mod("LinkEffectOnSelf", "INC", 100, 0, 0), -- AzmeriGolemLinkEffectOnSelf2 [link_buff_effect_on_self_+% = 100] - mod("PlayerModifier", "LIST", { mod = mod("Duration", "INC", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "HalfRememberedGoliath", unscaleable = true })}), + }, +} +-- Wretched Defiler +minions["Metadata/Monsters/Revenant/RevenantMapBossStandalone_AtlasUber"] = { + name = "Wretched Defiler", + monsterTags = { "caster", "demon", "fast_movement", "flesh_armour", "is_unarmed", "large_model", "lightning_affinity", "melee", "not_int", "not_str", "physical_affinity", "raises_dead", "ranged", "red_blood", "slashing_weapon", "small_height", "standalone_map_boss", }, + baseDamageIgnoresAttackSpeed = true, + life = 3.9, + evasion = 0.5, + fireResist = 40, + coldResist = 40, + lightningResist = 40, + chaosResist = 25, + damage = 3, + damageSpread = 0.2, + attackTime = 1.5, + attackRange = 10, + accuracy = 1, + skillList = { + "RevenantReviveUndead", + "RevenantBossSpellProjectile", + "MeleeAtAnimationSpeed", + "RevenantMapBossSummon1", + "RevenantMapBossSummon2", + }, + modList = { }, } diff --git a/src/Data/TimelessJewelData/LegionPassives.lua b/src/Data/TimelessJewelData/LegionPassives.lua index d236902258..bbcb916e8c 100644 --- a/src/Data/TimelessJewelData/LegionPassives.lua +++ b/src/Data/TimelessJewelData/LegionPassives.lua @@ -259,7 +259,7 @@ return { [1] = "Energy Shield starts at zero", [2] = "Cannot Recharge or Regenerate Energy Shield", [3] = "Lose 5% of Energy Shield per second", - [4] = "Life Leech effects are not removed at Full Life", + [4] = "Life Leech effects are not removed when Unreserved Life is Filled", [5] = "Life Leech effects Recover Energy Shield instead while on Full Life", }, ["isMultipleChoiceOption"] = false, diff --git a/src/Data/Uniques/boots.lua b/src/Data/Uniques/boots.lua index bf2bb35390..443d9798c3 100644 --- a/src/Data/Uniques/boots.lua +++ b/src/Data/Uniques/boots.lua @@ -640,10 +640,13 @@ Implicits: 3 {variant:3}+(8-12)% to Cold and Lightning Resistances Grants Level 1 Embrace Madness Skill 30% increased Movement Speed +{variant:1}(150-300)% increased Armour and Evasion {variant:1}+15 to maximum Fortification while affected by Glorious Madness {variant:1}20% chance to deal Double Damage while affected by Glorious Madness +{variant:2}(20-40)% increased Effect of Non-Damaging Ailments {variant:2}You have Igniting, Chilling and Shocking Conflux while affected by Glorious Madness {variant:2}Immune to Elemental Ailments while affected by Glorious Madness +{variant:3}(20-40)% increased Chaos Damage {variant:3}Enemies you Kill while affected by Glorious Madness have a 40% chance to Explode, dealing a quarter of their Life as Chaos Damage {variant:3}All Damage inflicts Poison while affected by Glorious Madness ]],[[ diff --git a/src/Data/Uniques/gloves.lua b/src/Data/Uniques/gloves.lua index 2bd6aaafa6..25696708f2 100644 --- a/src/Data/Uniques/gloves.lua +++ b/src/Data/Uniques/gloves.lua @@ -702,7 +702,7 @@ Requires Level 57, 44 Str, 44 Int 50% reduced Maximum Recovery per Life Leech (6-10)% increased Attack and Cast Speed (15-25)% increased Damage while Leeching -Life Leech effects are not removed at Full Life +Life Leech effects are not removed when Unreserved Life is Filled ]],[[ Repentance Crusader Gloves diff --git a/src/Data/Uniques/helmet.lua b/src/Data/Uniques/helmet.lua index 7253f96629..c348a1165e 100644 --- a/src/Data/Uniques/helmet.lua +++ b/src/Data/Uniques/helmet.lua @@ -1562,7 +1562,6 @@ League: Expedition Source: Drops from unique{Olroth, Origin of the Fall} in normal{Expedition Logbook} Requires Level 68, 66 Str, 66 Dex, 66 Int Never deal Critical Strikes -Nearby Enemies cannot deal Critical Strikes Battlemage ]], } diff --git a/src/Export/Bases/Rares.txt b/src/Export/Bases/Rares.txt new file mode 100644 index 0000000000..6aa385262e --- /dev/null +++ b/src/Export/Bases/Rares.txt @@ -0,0 +1,371 @@ +-- Item data (c) Grinding Gear Games + +return { +-- Helmet +#setBestBase Helmet, Armour, [ Prefix: LocalIncreasedPhysicalDamageReductionRating3, Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife7] +#setBestBase Helmet, Evasion, [ Prefix: LocalIncreasedEvasionRating3, Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife7, Suffix: ChanceToSuppressSpells2] +#setBestBase Helmet, Energy Shield, [ Prefix: IncreasedLife7, Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: LocalIncreasedEnergyShield7] +#setBestBase Helmet, Armour/Evasion, [ Prefix: LocalBaseArmourAndEvasionRating3, Prefix: LocalIncreasedArmourAndEvasion5, Prefix: IncreasedLife7, Suffix: ChanceToSuppressSpells2] +#setBase Penitent Mask, [ Prefix: LocalBaseArmourAndEvasionRating3, Prefix: LocalIncreasedArmourAndEvasion5, Prefix: IncreasedLife7, Suffix: ChanceToSuppressSpells2] +#setBestBase Helmet, Armour/Energy Shield, [ Prefix: LocalBaseArmourAndEnergyShield3, Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife7] +#setBase Bone Helmet, Minion Helm, [ Prefix: GlobalIncreaseMinionSpellSkillGemLevel2, Prefix: IncreasedLife7] +#setBase Archdemon Crown, [ Prefix: LocalBaseArmourAndEnergyShield3, Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife7] +#setBestBase Helmet, Evasion/Energy Shield, [ Prefix: LocalBaseEvasionRatingAndEnergyShield3, Prefix: LocalIncreasedEvasionAndEnergyShield5_, Prefix: IncreasedLife7, Suffix: ChanceToSuppressSpells2] +#setBase Blizzard Crown, [ Prefix: LocalBaseEvasionRatingAndEnergyShield3, Prefix: LocalIncreasedEvasionAndEnergyShield5_, Prefix: IncreasedLife7, Suffix: ChanceToSuppressSpells2] +#setBestBase Helmet, Ward, [ Prefix: LocalIncreasedWardPercent3, Prefix: LocalIncreasedWard5___, Prefix: IncreasedLife7] + +-- Gloves +#setBestBase Gloves, Armour, [ Prefix: LocalIncreasedPhysicalDamageReductionRating2, Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife6] +#setBase Spiked Gloves, [ Prefix: LocalIncreasedPhysicalDamageReductionRating2, Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife6] +#setBase Thwarting Gauntlets, [ Prefix: LocalIncreasedPhysicalDamageReductionRating2, Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife6] +#setBestBase Gloves, Evasion, [ Prefix: LocalIncreasedEvasionRating2, Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife6, Suffix: ChanceToSuppressSpells2] +#setBase Gripped Gloves, [ Prefix: LocalIncreasedEvasionRating2, Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife6, Suffix: ChanceToSuppressSpells2] +#setBase Trapsetter Gloves, [ Prefix: LocalIncreasedEvasionRating2, Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife6, Suffix: ChanceToSuppressSpells2] +#setBestBase Gloves, Energy Shield, [ Prefix: IncreasedLife6, Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: LocalIncreasedEnergyShield6] +#setBase Fingerless Silk Gloves, [ Prefix: IncreasedLife6, Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: LocalIncreasedEnergyShield6] +#setBase Nexus Gloves, [ Prefix: IncreasedLife6, Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: LocalIncreasedEnergyShield6] +#setBestBase Gloves, Armour/Evasion, [ Prefix: LocalBaseArmourAndEvasionRating2, Prefix: LocalIncreasedArmourAndEvasion5, Prefix: IncreasedLife6, Suffix: ChanceToSuppressSpells2] +#setBestBase Gloves, Armour/Energy Shield, [ Prefix: LocalBaseArmourAndEnergyShield2_, Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife6] +#setBase Apothecary's Gloves, [ Prefix: LocalBaseArmourAndEnergyShield2_, Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife6] +#setBestBase Gloves, Evasion/Energy Shield, [ Prefix: LocalBaseEvasionRatingAndEnergyShield2, Prefix: LocalIncreasedEvasionAndEnergyShield5_, Prefix: IncreasedLife6, Suffix: ChanceToSuppressSpells2] +#setBestBase Gloves, Ward, [ Prefix: LocalIncreasedWardPercent3, Prefix: LocalIncreasedWard5___, Prefix: IncreasedLife7] + +-- Body Armour +#setBestBase Body Armour, Armour, Armour Chest, [ Prefix: LocalIncreasedPhysicalDamageReductionRating5, Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife9] +#setBase Astral Plate, Armour Chest, [ Prefix: LocalIncreasedPhysicalDamageReductionRating5, Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife9] +#setBase Royal Plate, Additional Curse Hunter Chest, [ Hunter Item, Crafted: true, Prefix: AdditionalCurseOnEnemiesInfluence1, Prefix: IncreasedLife9] +#setBestBase Body Armour, Evasion, Evasion Chest, [ Prefix: LocalIncreasedEvasionRating5, Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife9, Suffix: ChanceToSuppressSpellsHigh2__] +#setBase Assassin's Garb, Evasion Chest, [ Prefix: LocalIncreasedEvasionRating5, Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife9, Suffix: ChanceToSuppressSpellsHigh2__] +#setBestBase Body Armour, Energy Shield, Energy Shield Chest, [ Prefix: IncreasedLife9, Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: LocalIncreasedEnergyShield10] +#setBestBase Body Armour, Armour/Evasion, Armour/Evasion Chest, [ Prefix: LocalBaseArmourAndEvasionRating5, Prefix: LocalIncreasedArmourAndEvasion5, Prefix: IncreasedLife9, Suffix: ChanceToSuppressSpellsHigh2__] +#setBestBase Body Armour, Armour/Energy Shield, Armour/Energy Shield Chest, [ Prefix: LocalBaseArmourAndEnergyShield5, Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife9] +#setBestBase Body Armour, Evasion/Energy Shield, Evasion/Energy Shield Chest, [ Prefix: LocalBaseEvasionRatingAndEnergyShield5_, Prefix: LocalIncreasedEvasionAndEnergyShield5_, Prefix: IncreasedLife9, Suffix: ChanceToSuppressSpellsHigh2__] + +-- Boots +#setBestBase Boots, Armour, [ Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife6, Prefix: MovementVelocity5] +#setBase Brimstone Treads, [ Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife6, Prefix: MovementVelocity5] +#setBestBase Boots, Evasion, [ Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife6, Prefix: MovementVelocity5, Suffix: ChanceToSuppressSpells2] +#setBase Stormrider Boots, [ Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife6, Prefix: MovementVelocity5, Suffix: ChanceToSuppressSpells2] +#setBestBase Boots, Energy Shield, [ Prefix: IncreasedLife6, Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: MovementVelocity5] +#setBase Dreamquest Slippers, [ Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: IncreasedLife6, Prefix: MovementVelocity5] +#setBestBase Boots, Armour/Evasion, [ Prefix: LocalIncreasedArmourAndEvasion5, Prefix: IncreasedLife6, Prefix: MovementVelocity5, Suffix: ChanceToSuppressSpells2] +#setBase Two-Toned Boots (Armour/Evasion), [ Prefix: LocalIncreasedArmourAndEvasion5, Prefix: IncreasedLife6, Prefix: MovementVelocity5, Suffix: ChanceToSuppressSpells2] +#setBestBase Boots, Armour/Energy Shield, [ Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife6, Prefix: MovementVelocity5] +#setBase Two-Toned Boots (Armour/Energy Shield), [ Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife6, Prefix: MovementVelocity5] +#setBestBase Boots, Evasion/Energy Shield, [ Prefix: LocalIncreasedEvasionAndEnergyShield5_, Prefix: IncreasedLife6, Prefix: MovementVelocity5, Suffix: ChanceToSuppressSpells2] +#setBase Two-Toned Boots (Evasion/Energy Shield), [ Prefix: LocalIncreasedEvasionAndEnergyShield5_, Prefix: IncreasedLife6, Prefix: MovementVelocity5, Suffix: ChanceToSuppressSpells2] +#setBase Fugitive Boots, [ Prefix: LocalIncreasedEvasionAndEnergyShield5_, Prefix: IncreasedLife6, Prefix: MovementVelocity5, Suffix: ChaosResist4] +#setBestBase Boots, Ward, [ Prefix: LocalIncreasedWardPercent3, Prefix: LocalIncreasedWard5___, Prefix: IncreasedLife7] + +-- Shields +#setBestBase Shield, Armour, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife8] +#setBase Heat-attuned Tower Shield, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedPhysicalDamageReductionRatingPercent5, Prefix: IncreasedLife8] +#setBase Ezomyte Tower Shield, Shaper Gain On Block Shield, [ Shaper Item, Crafted: true, Prefix: LocalIncreasedBlockPercentage5, Prefix: IncreasedLife8, Suffix: RecoverLifePercentOnBlockUber1_] +#setBestBase Shield, Evasion, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife8, Suffix: ChanceToSuppressSpellsHigh2__] +#setBase Cold-attuned Buckler, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedEvasionRatingPercent5, Prefix: IncreasedLife8, Suffix: ChanceToSuppressSpellsHigh2__] +#setBestBase Shield, Energy Shield, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: LocalIncreasedEnergyShield9] +#setBase Transfer-attuned Spirit Shield, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedEnergyShieldPercent5, Prefix: LocalIncreasedEnergyShield9] +#setBase Titanium Spirit Shield, +Physical Shield, [ Prefix: GlobalPhysicalSpellGemsLevel1, Prefix: SpellDamageOnWeapon5, Suffix: SpellCriticalStrikeChance3] +#setBase Titanium Spirit Shield, +Fire Shield, [ Prefix: GlobalFireSpellGemsLevel1_, Prefix: FireDamagePrefixOnWeapon5_, Suffix: SpellCriticalStrikeChance3] +#setBase Titanium Spirit Shield, +Cold Shield, [ Prefix: GlobalColdSpellGemsLevel1_, Prefix: ColdDamagePrefixOnWeapon5_, Suffix: SpellCriticalStrikeChance3] +#setBase Titanium Spirit Shield, +Lightning Shield, [ Prefix: GlobalLightningSpellGemsLevel1, Prefix: LightningDamagePrefixOnWeapon5, Suffix: SpellCriticalStrikeChance3] +#setBase Titanium Spirit Shield, +Chaos Shield, [ Prefix: GlobalChaosSpellGemsLevel1, Prefix: SpellDamageOnWeapon5, Suffix: SpellCriticalStrikeChance3] +#setBase Fossilised Spirit Shield, +Minion Shield, [ Prefix: MinionGemLevel1h1, Prefix: MinionDamageOnWeapon5, Suffix: MinionCriticalStrikeChanceIncrease3] +#setBestBase Shield, Armour/Evasion, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedArmourAndEvasion5, Prefix: IncreasedLife8, Suffix: ChanceToSuppressSpellsHigh2__] +#setBestBase Shield, Armour/Energy Shield, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife8] +#setBase Archon Kite Shield, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedArmourAndEnergyShield5, Prefix: IncreasedLife8] +#setBestBase Shield, Evasion/Energy Shield, [ Prefix: LocalIncreasedBlockPercentage5, Prefix: LocalIncreasedEvasionAndEnergyShield5_, Prefix: IncreasedLife8, Suffix: ChanceToSuppressSpellsHigh2__] + +-- Amulets +#setBase Amber Amulet, [ Suffix: Strength5] +#setBase Jade Amulet, [ Suffix: Dexterity5] +#setBase Lapis Amulet, [ Suffix: Intelligence5] +#setBase Onyx Amulet, [ Suffix: AllAttributes5] +#setBase Agate Amulet, [ Suffix: Strength5, Suffix: Intelligence5] +#setBase Turquoise Amulet, [ Suffix: Dexterity5, Suffix: Intelligence5] +#setBase Citrine Amulet, [ Suffix: Dexterity5, Suffix: Strength5] +#setBase Marble Amulet, [ ] +#setBase Paua Amulet, Mana Amulet, [ Prefix: IncreasedMana7, Suffix: Intelligence5, Suffix: ManaRegeneration4] +#setBase Blue Pearl Amulet, Mana Amulet, [ Prefix: IncreasedMana7, Suffix: Intelligence5, Suffix: ManaRegeneration4] +#setBase Seaglass Amulet, Energy Shield Amulet, [ Prefix: IncreasedEnergyShield7, Prefix: IncreasedEnergyShieldPercent5, Suffix: Intelligence5] +#setBase Astrolabe Amulet, Influence Amulet, [ ] +#setBase Simplex Amulet, [ ] + +-- Rings +#baseGroup Resistance Ring, [ Suffix: FireResist4, Suffix: ColdResist4, Suffix: LightningResist4] +#setBase Coral Ring, Life Ring, [ Prefix: IncreasedLife4, Suffix: Strength6] +#setBase Vermillion Ring, Life Ring, [ Prefix: IncreasedLife4, Suffix: Strength6 ] +#setBase Paua Ring, Mana Ring, [ Prefix: IncreasedMana7, Suffix: Intelligence5, Suffix: ManaRegeneration4] +#setBase Cerulean Ring, Mana Ring, [ Prefix: IncreasedMana7, Suffix: Intelligence5, Suffix: ManaRegeneration4] +#setBase Moonstone Ring, Energy Shield Ring, [ Prefix: IncreasedEnergyShield6, Suffix: Intelligence5] +#setBase Ruby Ring, Resistance Ring, [ ] +#setBase Sapphire Ring, Resistance Ring, [ ] +#setBase Topaz Ring, Resistance Ring, [ ] +#setBase Two-Stone Ring, Resistance Ring, [ Variant: Fire and Cold, Variant: Cold and Lightning, Variant: Fire and Lightning, Crafted: true, Suffix: FireResist4, Suffix: ColdResist4, Suffix: LightningResist4, Implicits: 3, {variant:1}+(12-16)% to Fire and Cold Resistances, {variant:2}+(12-16)% to Cold and Lightning Resistances, {variant:3}+(12-16)% to Fire and Lightning Resistances] +#setBase Prismatic Ring, Resistance Ring, [ ] +#setBase Cogwork Ring, Resistance Ring, [ ] +#setBase Amethyst Ring, Chaos Resistance Ring, [ Suffix: ChaosResist4] +#setBase Unset Ring, [ Prefix: LocalIncreaseSocketedGemUnsetRing2] +#setBase Diamond Ring, [ ] +#setBase Steel Ring, [ Prefix: AddedPhysicalDamage4, Suffix: IncreasedAccuracyNew3, Suffix: IncreasedAttackSpeed1] +#setBase Bone Ring, Minion Ring, [ Prefix: MinionDamagePercent3, Suffix: MinionAttackAndCastSpeed2] +#setBase Iolite Ring, [ ] +#setBase Opal Ring, [ ] +#setBase Geodesic Ring, [ ] +#setBase Helical Ring, [ ] +#setBase Manifold Ring, [ ] +#setBase Iron Ring, Synthesised Charge Ring, [ Variant: Endurance Charge, Variant: Frenzy Charge, Variant: Power Charge, Crafted: true, Implicits: 3, {variant:1}+1 to Maximum Endurance Charges, {variant:2}+1 to Maximum Frenzy Charges, {variant:3}+1 to Maximum Power Charges] +#setBase Iron Ring, Synthesised Curse Ring, [ Variant: Vulnerability, Variant: Flammability, Variant: Frostbite, Variant: Conductivity, Variant: Elemental Weakness, Crafted: true, Implicits: 5, {variant:1}Curse Enemies with Vulnerability on Hit, {variant:2}Curse Enemies with Flammability on Hit, {variant:3}Curse Enemies with Frostbite on Hit, {variant:4}Curse Enemies with Conductivity on Hit, {variant:5}Curse Enemies with Elemental Weakness on Hit] + + +-- Belts +#setBase Heavy Belt, [ Prefix: IncreasedLife7, Suffix: Strength7] +#setBase Leather Belt, [ Prefix: IncreasedLife7, Suffix: Strength7] +#setBase Chain Belt, Energy Shield Belt, [ Prefix: IncreasedEnergyShield10] +#setBase Crystal Belt, Energy Shield Belt, [ Prefix: IncreasedEnergyShield10] +#setBase Vanguard Belt, [ Prefix: IncreasedPhysicalDamageReductionRating5, Prefix: IncreasedLife7] +#setBase Rustic Sash, [ ] +#setBase Stygian Vise, [ ] +#setBase Micro-Distillery Belt, Flask Belt, [ Suffix: BeltReducedFlaskChargesUsed1, Suffix: BeltIncreasedFlaskDuration1] +#setBase Mechanical Belt, [ ] + +-- Quivers +#setBase Spike-Point Arrow Quiver, [ Prefix: AddedPhysicalDamage3, Prefix: IncreasedLife7, Prefix: WeaponElementalDamage3, Suffix: IncreasedAttackSpeed1, Suffix: CriticalStrikeChanceWithBows4, Suffix: CriticalMultiplierWithBows3] +#setBase Artillery Quiver, [ Prefix: AddedPhysicalDamage3, Prefix: IncreasedLife7, Prefix: WeaponElementalDamage3, Suffix: IncreasedAttackSpeed1, Suffix: CriticalStrikeChanceWithBows4, Suffix: CriticalMultiplierWithBows3] + +-- Weapons +#baseGroup Spell One Handed, [ Prefix: SpellDamageOnWeapon5, Prefix: SpellDamageAndManaOnWeapon4, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#baseGroup Physical One Handed, [ Prefix: LocalIncreasedPhysicalDamagePercent5, Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5, Prefix: LocalAddedPhysicalDamage6, Suffix: LocalIncreasedAttackSpeed3, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#baseGroup Elemental One Handed, [ Prefix: LocalAddedFireDamage8, Prefix: LocalAddedColdDamage8, Prefix: LocalAddedLightningDamage8, Suffix: LocalIncreasedAttackSpeed3, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#baseGroup Physical Two Handed, [ Prefix: LocalIncreasedPhysicalDamagePercent5, Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5, Prefix: LocalAddedPhysicalDamageTwoHand6, Suffix: LocalIncreasedAttackSpeed3, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#baseGroup Elemental Two Handed, [ Prefix: LocalAddedFireDamageTwoHand8_, Prefix: LocalAddedColdDamageTwoHand8, Prefix: LocalAddedLightningDamageTwoHand8, Suffix: LocalIncreasedAttackSpeed3, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Runic Hatchet, Physical %s, [ ] +#setBase Vaal Hatchet, Elemental %s, [ ] +#setBase Psychotic Axe, Physical %s, [ ] +#setBase Psychotic Axe, Elemental %s, [ ] +#setBase Fleshripper, Physical %s, [ ] +#setBase Despot Axe, Elemental %s, [ ] +#setBase Apex Cleaver, Physical %s, [ ] +#setBase Apex Cleaver, Elemental %s, [ ] +#setBase Harbinger Bow, Physical %s, [ Prefix: LocalIncreasedPhysicalDamagePercent5, Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5, Prefix: LocalAddedPhysicalDamageTwoHand6, Suffix: LocalIncreasedAttackSpeed2, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Thicket Bow, Elemental %s, [ Prefix: LocalAddedFireDamageTwoHand8_, Prefix: LocalAddedColdDamageTwoHand8, Prefix: LocalAddedLightningDamageTwoHand8, Suffix: LocalIncreasedAttackSpeed2, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Solarine Bow, Fire %s, [ Prefix: LocalAddedFireDamageRanged6, Prefix: WeaponElementalDamageOnWeapons4, Suffix: LocalIncreasedAttackSpeed2, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Thicket Bow, +3 %s, [ Prefix: LocalIncreaseSocketedGemLevel1, Prefix: LocalIncreaseSocketedBowGemLevel2, Suffix: LocalIncreasedAttackSpeed2] +#setBase Gemini Claw, Physical %s, [ ] +#setBase Imperial Claw, Elemental %s, [ ] +#setBase Void Fangs, Chaos %s, [ Prefix: LocalIncreasedPhysicalDamagePercent5, Prefix: LocalAddedChaosDamage1, Prefix: LocalAddedPhysicalDamage6, Suffix: LocalIncreasedAttackSpeed3, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Ambusher, Physical %s, [ ] +#setBase Ambusher, Elemental %s, [ ] +#setBase Platinum Kris, Spell %s, [ Prefix: SpellDamageOnWeapon5, Prefix: SpellDamageAndManaOnWeapon4, Suffix: LocalIncreasedAttackSpeed3, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Pneumatic Dagger, Physical %s, [ ] +#setBase Pneumatic Dagger, Elemental %s, [ ] +#setBase Infernal Blade, Spell %s, [ Prefix: SpellDamageOnWeapon5, Prefix: SpellDamageAndManaOnWeapon4, Suffix: LocalIncreasedAttackSpeed3, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Royal Skean, Vagan %s, [ Prefix: SpellDamageOnWeapon5, Suffix: LocalIncreasedAttackSpeed3, Suffix: LocalCriticalStrikeChance3, {custom}Hits can't be Evaded] +#setBase Void Sceptre, Spell %s, [ ] +#setBase Void Sceptre, Physical %s, [ ] +#setBase Void Sceptre, Elemental %s, [ ] +#setBase Oscillating Sceptre, Spell %s, [ ] +#setBase Oscillating Sceptre, Elemental %s, [ ] +#setBase Stabilising Sceptre, Spell %s, [ ] +#setBase Stabilising Sceptre, Elemental %s, [ ] +#setBase Alternating Sceptre, Spell %s, [ ] +#setBase Alternating Sceptre, Physical %s, [ ] +#setBase Alternating Sceptre, Elemental %s, [ ] +#setBase Behemoth Mace, Physical %s, [ ] +#setBase Behemoth Mace, Elemental %s, [ ] +#setBase Boom Mace, Physical %s, [ ] +#setBase Boom Mace, Elemental %s, [ ] +#setBase Coronal Maul, Physical %s, [ ] +#setBase Coronal Maul, Elemental %s, [ ] +#setBase Impact Force Propagator, Physical %s, [ ] +#setBase Impact Force Propagator, Elemental %s, [ ] +#setBase Maelstrom Staff, Physical %s, [ ] +#setBase Maelstrom Staff, Elemental %s, [ ] +#setBase Eventuality Rod, Physical %s, [ ] +#setBase Eventuality Rod, Elemental %s, [ ] +#setBase Eclipse Staff, Spell %s, [ Prefix: SpellDamageOnTwoHandWeapon5, Prefix: SpellDamageAndManaOnTwoHandWeapon4, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Eclipse Staff, +5 Physical %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalPhysicalSpellGemsLevelTwoHand2_, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Eclipse Staff, +5 Fire %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalFireSpellGemsLevelTwoHand2, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Eclipse Staff, +5 Cold %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalColdSpellGemsLevelTwoHand2, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Eclipse Staff, +5 Lightning %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalLightningSpellGemsLevelTwoHand2, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Eclipse Staff, +5 Chaos %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalChaosSpellGemsLevelTwoHand2, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Battery Staff, Spell %s, [ Prefix: SpellDamageOnTwoHandWeapon5, Prefix: SpellDamageAndManaOnTwoHandWeapon4, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Battery Staff, +5 Physical %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalPhysicalSpellGemsLevelTwoHand2_, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Battery Staff, +5 Fire %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalFireSpellGemsLevelTwoHand2, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Battery Staff, +5 Cold %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalColdSpellGemsLevelTwoHand2, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Battery Staff, +5 Lightning %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalLightningSpellGemsLevelTwoHand2, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Battery Staff, +5 Chaos %s, [ Prefix: GlobalSpellGemsLevelTwoHand1, Prefix: GlobalChaosSpellGemsLevelTwoHand2, Prefix: SpellDamageOnTwoHandWeapon5, Suffix: SpellCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Tiger Hook, Physical %s, [ ] +#setBase Jewelled Foil, Physical %s, [ ] +#setBase Eternal Sword, Elemental %s, [ ] +#setBase Anarchic Spiritblade, Physical %s, [ ] +#setBase Anarchic Spiritblade, Elemental %s, [ ] +#setBase Jewelled Foil, Elemental %s, [ ] +#setBase Exquisite Blade, Physical %s, [ ] +#setBase Reaver Sword, Elemental %s, [ ] +#setBase Banishing Blade, Elemental %s, [ ] +#setBase Imbued Wand, Physical %s, [ Prefix: LocalIncreasedPhysicalDamagePercent5, Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5, Prefix: LocalAddedPhysicalDamage6, Suffix: LocalIncreasedAttackSpeed2, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Imbued Wand, Elemental %s, [ Prefix: LocalAddedFireDamage8, Prefix: LocalAddedColdDamage8, Prefix: LocalAddedLightningDamage8, Suffix: LocalIncreasedAttackSpeed2, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Prophecy Wand, Spell %s, [ ] +#setBase Accumulator Wand, Spell %s, [ ] +#setBase Accumulator Wand, Physical %s, [ Prefix: LocalIncreasedPhysicalDamagePercent5, Prefix: LocalIncreasedPhysicalDamagePercentAndAccuracyRating5, Prefix: LocalAddedPhysicalDamage6, Suffix: LocalIncreasedAttackSpeed2, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Accumulator Wand, Elemental %s, [ Prefix: LocalAddedFireDamage8, Prefix: LocalAddedColdDamage8, Prefix: LocalAddedLightningDamage8, Suffix: LocalIncreasedAttackSpeed2, Suffix: LocalCriticalStrikeChance3, Suffix: LocalCriticalMultiplier4] +#setBase Convoking Wand, Minion %s, [ Prefix: MinionGemLevel1h1, Prefix: MinionDamageOnWeapon6] + +-- Jewels +#setBase Crimson Jewel, [ ] +#setBase Viridian Jewel, [ ] +#setBase Cobalt Jewel, [ ] +#setBase Large Cluster Jewel, [ ] +#setBase Medium Cluster Jewel, [ ] +#setBase Small Cluster Jewel, [ ] +#setBase Ghastly Eye Jewel, [ ] +#setBase Hypnotic Eye Jewel, [ ] +#setBase Murderous Eye Jewel, [ ] +#setBase Searching Eye Jewel, [ ] + +-- Flasks +-- Instant CB/Bleed immune Divine Life Flask +[[ +Rarity: MAGIC +Seething Divine Life Flask of Allaying +Crafted: true +Prefix: {range:0.5}FlaskFullInstantRecovery1 +Suffix: {range:0.028}FlaskBleedCorruptingBloodImmunity3______ +Quality: 20 +LevelReq: 60 +Implicits: 0 +66% reduced Amount Recovered +Instant Recovery +Grants Immunity to Bleeding for 12 seconds if used while Bleeding +Grants Immunity to Corrupted Blood for 12 seconds if used while affected by Corrupted Blood +]], +-- Mageblood Flasks +[[ +Rarity: MAGIC +Alchemist's Diamond Flask +Crafted: true +Prefix: {range:0}FlaskEffectReducedDuration3 +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 2 +{crafted}{range:1}(60-70)% increased effect +{crafted}Gains no Charges during Effect +23% reduced Duration +25% increased effect +]],[[ +Rarity: MAGIC +Alchemist's Granite Flask +Crafted: true +Prefix: {range:0}FlaskEffectReducedDuration3 +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 2 +{crafted}{range:1}(60-70)% increased effect +{crafted}Gains no Charges during Effect +23% reduced Duration +25% increased effect +]],[[ +Rarity: MAGIC +Alchemist's Basalt Flask +Crafted: true +Prefix: {range:0}FlaskEffectReducedDuration3 +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 3 +{crafted}{range:1}(60-70)% increased effect +{crafted}Gains no Charges during Effect +{tags:flask}Taunts nearby Enemies on use +23% reduced Duration +25% increased effect +]],[[ +Rarity: MAGIC +Alchemist's Jade Flask +Crafted: true +Prefix: {range:0}FlaskEffectReducedDuration3 +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 2 +{crafted}{range:1}(60-70)% increased effect +{crafted}Gains no Charges during Effect +23% reduced Duration +25% increased effect +]],[[ +Rarity: MAGIC +Alchemist's Stibnite Flask +Crafted: true +Prefix: {range:0}FlaskEffectReducedDuration3 +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 3 +{crafted}{range:1}(60-70)% increased effect +{crafted}Gains no Charges during Effect +{tags:flask}Creates a Smoke Cloud on Use +23% reduced Duration +25% increased effect +]], +-- Auto-use gain on hit Utility Flasks +[[ +Rarity: MAGIC +Flagellant's Basalt Flask +Crafted: true +Prefix: {range:1}FlaskFullRechargeOnHit5___ +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 2 +{crafted}Used when Charges reach full +{tags:flask}Taunts nearby Enemies on use +Gain 3 Charges when you are Hit by an Enemy +]],[[ +Rarity: MAGIC +Flagellant's Granite Flask +Crafted: true +Prefix: {range:1}FlaskFullRechargeOnHit5___ +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 1 +{crafted}Used when Charges reach full +Gain 3 Charges when you are Hit by an Enemy +]],[[ +Rarity: MAGIC +Flagellant's Jade Flask +Crafted: true +Prefix: {range:1}FlaskFullRechargeOnHit5___ +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 1 +{crafted}Used when Charges reach full +Gain 3 Charges when you are Hit by an Enemy +]],[[ +Rarity: MAGIC +Flagellant's Stibnite Flask +Crafted: true +Prefix: {range:1}FlaskFullRechargeOnHit5___ +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 2 +{crafted}Used when Charges reach full +{tags:flask}Creates a Smoke Cloud on Use +Gain 3 Charges when you are Hit by an Enemy +]],[[ +Rarity: MAGIC +Flagellant's Quicksilver Flask +Crafted: true +Prefix: {range:1}FlaskFullRechargeOnHit5___ +Suffix: None +Quality: 20 +LevelReq: 64 +Implicits: 1 +{crafted}Used when Charges reach full +Gain 3 Charges when you are Hit by an Enemy +]] +} \ No newline at end of file diff --git a/src/Export/Classes/Dat64File.lua b/src/Export/Classes/Dat64File.lua index 4c52187fb6..927b2a8963 100644 --- a/src/Export/Classes/Dat64File.lua +++ b/src/Export/Classes/Dat64File.lua @@ -21,6 +21,13 @@ local dataTypes = { return bytesToInt(b, o) end, }, + UInt16 = { + size = 2, + read = function(b, o, d) + if o > #b - 1 then return 1337 end + return bytesToUInt(b, o) + end, + }, UInt = { size = 4, read = function(b, o, d) diff --git a/src/Export/Classes/DatFile.lua b/src/Export/Classes/DatFile.lua index 77b2de9d90..a4426e9e39 100644 --- a/src/Export/Classes/DatFile.lua +++ b/src/Export/Classes/DatFile.lua @@ -21,8 +21,15 @@ local dataTypes = { return bytesToInt(b, o) end, }, - UInt = { - size = 4, + UInt16 = { + size = 2, + read = function(b, o, d) + if o > #b - 1 then return 1337 end + return bytesToUInt(b, o) + end, + }, + UInt = { + size = 4, read = function(b, o, d) if o > #b - 3 then return 1337 end return bytesToUInt(b, o) diff --git a/src/Export/Classes/DatListControl.lua b/src/Export/Classes/DatListControl.lua index 5109a5af58..57ceafe00f 100644 --- a/src/Export/Classes/DatListControl.lua +++ b/src/Export/Classes/DatListControl.lua @@ -3,8 +3,8 @@ -- Class: Dat List -- Dat list control. -- -local DatListClass = newClass("DatListControl", "ListControl", function(self, anchor, x, y, width, height) - self.ListControl(anchor, x, y, width, height, 14, "VERTICAL", false, main.datFileList) +local DatListClass = newClass("DatListControl", "ListControl", function(self, anchor, rect) + self.ListControl(anchor, rect, 14, "VERTICAL", false, main.datFileList) end) function DatListClass:GetRowValue(column, index, datFile) diff --git a/src/Export/Classes/GGPKData.lua b/src/Export/Classes/GGPKData.lua index 41c19c28b1..d571dcc975 100644 --- a/src/Export/Classes/GGPKData.lua +++ b/src/Export/Classes/GGPKData.lua @@ -138,7 +138,6 @@ end function GGPKClass:GetNeededFiles() local datFiles = { "Data/Stats.dat", - "Data/StatSemantics.dat", "Data/VirtualStatContextFlags.dat", "Data/BaseItemTypes.dat", "Data/WeaponTypes.dat", @@ -148,7 +147,6 @@ function GGPKClass:GetNeededFiles() "Data/ComponentCharges.dat", "Data/ComponentAttributeRequirements.dat", "Data/PassiveSkills.dat", - "Data/PassiveSkillTypes.dat", "Data/PassiveSkillStatCategories.dat", "Data/PassiveSkillMasteryGroups.dat", "Data/PassiveSkillMasteryEffects.dat", @@ -159,14 +157,10 @@ function GGPKClass:GetNeededFiles() "Data/PassiveTreeExpansionSpecialSkills.dat", "Data/Mods.dat", "Data/ModType.dat", - "Data/ModDomains.dat", - "Data/ModGenerationType.dat", "Data/ModFamily.dat", - "Data/ModAuraFlags.dat", "Data/ModSellPriceTypes.dat", "Data/ModEffectStats.dat", "Data/ActiveSkills.dat", - "Data/ActiveSkillTargetTypes.dat", "Data/ActiveSkillType.dat", "Data/AlternateSkillTargetingBehaviours.dat", "Data/Ascendancy.dat", @@ -174,17 +168,13 @@ function GGPKClass:GetNeededFiles() "Data/FlavourText.dat", "Data/Words.dat", "Data/ItemClasses.dat", - "Data/SkillTotems.dat", "Data/SkillTotemVariations.dat", - "Data/SkillMines.dat", "Data/Essences.dat", "Data/EssenceType.dat", "Data/Characters.dat", "Data/BuffDefinitions.dat", - "Data/BuffCategories.dat", "Data/BuffTemplates.dat", "Data/BuffVisuals.dat", - "Data/BuffVisualSets.dat", "Data/BuffVisualSetEntries.dat", "Data/BuffVisualsArtVariations.dat", "Data/BuffVisualOrbs.dat", @@ -207,7 +197,6 @@ function GGPKClass:GetNeededFiles() "Data/GrantedEffectsPerLevel.dat", "Data/ItemExperiencePerLevel.dat", "Data/EffectivenessCostConstants.dat", - "Data/StatInterpolationTypes.dat", "Data/Tags.dat", "Data/GemTags.dat", "Data/ItemVisualIdentity.dat", @@ -218,7 +207,6 @@ function GGPKClass:GetNeededFiles() "Data/AlternatePassiveSkills.dat", "Data/AlternateTreeVersions.dat", "Data/GrantedEffectQualityStats.dat", - "Data/GrantedEffectGroups.dat", "Data/AegisVariations.dat", "Data/CostTypes.dat", "Data/PassiveJewelRadii.dat", @@ -273,7 +261,6 @@ function GGPKClass:GetNeededFiles() "Data/Commands.dat", "Data/ModEquivalencies.dat", "Data/InfluenceTags.dat", - "Data/InfluenceTypes.dat", "Data/leaguenames.dat" } local txtFiles = { diff --git a/src/Export/Classes/GGPKSourceListControl.lua b/src/Export/Classes/GGPKSourceListControl.lua index 045a306202..307e505879 100644 --- a/src/Export/Classes/GGPKSourceListControl.lua +++ b/src/Export/Classes/GGPKSourceListControl.lua @@ -3,18 +3,18 @@ -- Class: GGPK Source List -- GGPK source list control. -- -local GGPKSourceListClass = newClass("GGPKSourceListControl", "ListControl", function(self, anchor, x, y, width, height) - self.ListControl(anchor, x, y, width, height, 16, false, false, main.datSources) +local GGPKSourceListClass = newClass("GGPKSourceListControl", "ListControl", function(self, anchor, rect) + self.ListControl(anchor, rect, 16, false, false, main.datSources) self.colList = { - { width = width * 0.25, label = "Name", sortable = true }, - { width = width * 0.75, label = "Spec File Path" }, + { width = self.width * 0.25, label = "Name", sortable = true }, + { width = self.width * 0.75, label = "Spec File Path" }, } self.colLabels = true - self.controls.new = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, -62, -4, 60, 18, "New", function() + self.controls.new = new("ButtonControl", {"BOTTOMLEFT",self,"TOP"}, {-62, -4, 60, 18}, "New", function() local datSource = {} self:EditDATSource(datSource, true) end) - self.controls.delete = new("ButtonControl", {"LEFT",self.controls.new,"RIGHT"}, 4, 0, 60, 18, "Delete", function() + self.controls.delete = new("ButtonControl", {"LEFT",self.controls.new,"RIGHT"}, {4, 0, 60, 18}, "Delete", function() self:OnSelDelete(self.selIndex) end) self.controls.delete.enabled = function() @@ -24,25 +24,25 @@ end) function GGPKSourceListClass:EditDATSource(datSource, newSource) local controls = { } - controls.labelLabel = new("LabelControl", nil, -30, 20, 0, 16, "^7Name:") - controls.label = new("EditControl", nil, 85, 20, 180, 20, datSource.label, nil, nil, nil, function(buf) + controls.labelLabel = new("LabelControl", nil, {-30, 20, 0, 16}, "^7Name:") + controls.label = new("EditControl", nil, {85, 20, 180, 20}, datSource.label, nil, nil, nil, function(buf) controls.save.enabled = (controls.dat.buf:match("%S") or controls.ggpk.buf:match("%S")) and buf:match("%S") end) - controls.ggpkLabel = new("LabelControl", nil, 0, 40, 0, 16, "^7Source from GGPK/Steam PoE path:") - controls.ggpk = new("EditControl", {"TOP",controls.ggpkLabel,"TOP"}, 0, 20, 350, 20, datSource.ggpkPath, nil, nil, nil, function(buf) + controls.ggpkLabel = new("LabelControl", nil, {0, 40, 0, 16}, "^7Source from GGPK/Steam PoE path:") + controls.ggpk = new("EditControl", {"TOP",controls.ggpkLabel,"TOP"}, {0, 20, 350, 20}, datSource.ggpkPath, nil, nil, nil, function(buf) controls.save.enabled = (buf:match("%S") or controls.dat.buf:match("%S")) and controls.label.buf:match("%S") and controls.spec.buf:match("%S") end) controls.ggpk.enabled = function() return not controls.dat.buf:match("%S") end - controls.datLabel = new("LabelControl", {"TOP",controls.ggpk,"TOP"}, 0, 22, 0, 16, "^7Source from DAT files:") - controls.dat = new("EditControl", {"TOP",controls.datLabel,"TOP"}, 0, 20, 350, 20, datSource.datFilePath, nil, nil, nil, function(buf) + controls.datLabel = new("LabelControl", {"TOP",controls.ggpk,"TOP"}, {0, 22, 0, 16}, "^7Source from DAT files:") + controls.dat = new("EditControl", {"TOP",controls.datLabel,"TOP"}, {0, 20, 350, 20}, datSource.datFilePath, nil, nil, nil, function(buf) controls.save.enabled = (buf:match("%S") or controls.ggpk.buf:match("%S")) and controls.label.buf:match("%S") and controls.spec.buf:match("%S") end) controls.dat.enabled = function() return not controls.ggpk.buf:match("%S") end - controls.specLabel = new("LabelControl", {"TOP",controls.dat,"TOP"}, 0, 22, 0, 16, "^7Spec File location:") - controls.spec = new("EditControl", {"TOP",controls.specLabel,"TOP"}, 0, 20, 350, 20, datSource.spec or "spec.lua", nil, nil, nil, function(buf) + controls.specLabel = new("LabelControl", {"TOP",controls.dat,"TOP"}, {0, 22, 0, 16}, "^7Spec File location:") + controls.spec = new("EditControl", {"TOP",controls.specLabel,"TOP"}, {0, 20, 350, 20}, datSource.spec or "spec.lua", nil, nil, nil, function(buf) controls.save.enabled = (controls.dat.buf:match("%S") or controls.ggpk.buf:match("%S")) and controls.label.buf:match("%S") and buf:match("%S") end) - controls.save = new("ButtonControl", {"TOP",controls.spec,"TOP"}, -45, 22, 80, 20, "Save", function() + controls.save = new("ButtonControl", {"TOP",controls.spec,"TOP"}, {-45, 22, 80, 20}, "Save", function() local reload = datSource.label == main.datSource.label datSource.label = controls.label.buf datSource.ggpkPath = controls.ggpk.buf or "" @@ -59,7 +59,7 @@ function GGPKSourceListClass:EditDATSource(datSource, newSource) main:ClosePopup() end) controls.save.enabled = false - controls.cancel = new("ButtonControl", {"TOP",controls.spec,"TOP"}, 45, 22, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", {"TOP",controls.spec,"TOP"}, {45, 22, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(370, 200, datSource[1] and "Edit DAT Source" or "New DAT Source", controls, "save", "edit") diff --git a/src/Export/Classes/RowListControl.lua b/src/Export/Classes/RowListControl.lua index 639cdf20fa..fe443a6f91 100644 --- a/src/Export/Classes/RowListControl.lua +++ b/src/Export/Classes/RowListControl.lua @@ -6,8 +6,8 @@ local ipairs = ipairs local t_insert = table.insert -local RowListClass = newClass("RowListControl", "ListControl", function(self, anchor, x, y, width, height) - self.ListControl(anchor, x, y, width, height, 14, "HORIZONTAL", false, { }) +local RowListClass = newClass("RowListControl", "ListControl", function(self, anchor, rect) + self.ListControl(anchor, rect, 14, "HORIZONTAL", false, { }) self.colLabels = true end) diff --git a/src/Export/Classes/ScriptListControl.lua b/src/Export/Classes/ScriptListControl.lua index 2cf1a88d7e..d31b9da997 100644 --- a/src/Export/Classes/ScriptListControl.lua +++ b/src/Export/Classes/ScriptListControl.lua @@ -3,8 +3,8 @@ -- Class: Script List -- Script list control. -- -local ScriptListClass = newClass("ScriptListControl", "ListControl", function(self, anchor, x, y, width, height) - self.ListControl(anchor, x, y, width, height, 16, "VERTICAL", false, main.scriptList) +local ScriptListClass = newClass("ScriptListControl", "ListControl", function(self, anchor, rect) + self.ListControl(anchor, rect, 16, "VERTICAL", false, main.scriptList) end) function ScriptListClass:GetRowValue(column, index, script) diff --git a/src/Export/Classes/SpecColListControl.lua b/src/Export/Classes/SpecColListControl.lua index 6612262a8a..9371234e68 100644 --- a/src/Export/Classes/SpecColListControl.lua +++ b/src/Export/Classes/SpecColListControl.lua @@ -5,8 +5,8 @@ -- local t_remove = table.remove -local SpecColListClass = newClass("SpecColListControl", "ListControl", function(self, anchor, x, y, width, height) - self.ListControl(anchor, x, y, width, height, 14, "VERTICAL", true) +local SpecColListClass = newClass("SpecColListControl", "ListControl", function(self, anchor, rect) + self.ListControl(anchor, rect, 14, "VERTICAL", true) end) function SpecColListClass:GetRowValue(column, index, specCol) diff --git a/src/Export/Main.lua b/src/Export/Main.lua index f7e401ebe3..61e652c1ff 100644 --- a/src/Export/Main.lua +++ b/src/Export/Main.lua @@ -151,18 +151,18 @@ function main:Init() return self.ggpk.txt[name] end - self.typeDrop = { "Bool", "Int", "UInt", "Interval", "Float", "String", "Enum", "ShortKey", "Key" } + self.typeDrop = { "Bool", "Int", "UInt16", "UInt", "Interval", "Float", "String", "Enum", "ShortKey", "Key" } self.colList = { } - self.controls.shownLeagueLabel = new("LabelControl", nil, 10, 10, 100, 16, "^7Data from:") - self.controls.leagueLabel = new("LabelControl", { "LEFT", self.controls.shownLeagueLabel, "RIGHT"}, 10, 0, 100, 16, function() return "^7" .. (self.leagueLabel or "Unknown") end) - self.controls.addSource = new("ButtonControl", nil, 10, 30, 100, 18, "Edit Sources...", function() + self.controls.shownLeagueLabel = new("LabelControl", nil, {10, 10, 100, 16}, "^7Data from:") + self.controls.leagueLabel = new("LabelControl", {"LEFT", self.controls.shownLeagueLabel, "RIGHT"}, {10, 0, 100, 16}, function() return "^7" .. (self.leagueLabel or "Unknown") end) + self.controls.addSource = new("ButtonControl", nil, {10, 30, 100, 18}, "Edit Sources...", function() self.OpenPathPopup() end) self.datSources = self.datSources or { } - self.controls.datSource = new("DropDownControl", nil, 10, 50, 250, 18, self.datSources, function(_, value) + self.controls.datSource = new("DropDownControl", nil, {10, 50, 250, 18}, self.datSources, function(_, value) self:LoadDatSource(value) end, nil) @@ -170,11 +170,11 @@ function main:Init() self.controls.datSource:SelByValue(self.datSource.label, "label") end - self.controls.scripts = new("ButtonControl", nil, 160, 30, 100, 18, "Scripts >>", function() + self.controls.scripts = new("ButtonControl", nil, {160, 30, 100, 18}, "Scripts >>", function() self:SetCurrentDat() end) - self.controls.scriptAll = new("ButtonControl", nil, 270, 10, 100, 18, "Run All", function() + self.controls.scriptAll = new("ButtonControl", nil, {270, 10, 100, 18}, "Run All", function() do -- run stat desc first local errMsg = PLoadModule("Scripts/".."statdesc"..".lua") if errMsg then @@ -192,20 +192,20 @@ function main:Init() end } - self.controls.scriptList = new("ScriptListControl", nil, 270, 35, 100, 300) { + self.controls.scriptList = new("ScriptListControl", nil, {270, 35, 100, 300}) { shown = function() return not self.curDatFile end } - self.controls.scriptOutput = new("TextListControl", nil, 380, 10, 800, 600, nil, self.scriptOutput) { + self.controls.scriptOutput = new("TextListControl", nil, {380, 10, 800, 600}, nil, self.scriptOutput) { shown = function() return not self.curDatFile end } - self.controls.datList = new("DatListControl", nil, 10, 70, 250, function() return self.screenH - 70 end) + self.controls.datList = new("DatListControl", nil, {10, 70, 250, function() return self.screenH - 70 end}) - self.controls.specEditToggle = new("ButtonControl", nil, 270, 10, 100, 18, function() return self.editSpec and "Done <<" or "Edit >>" end, function() + self.controls.specEditToggle = new("ButtonControl", nil, {270, 10, 100, 18}, function() return self.editSpec and "Done <<" or "Edit >>" end, function() self.editSpec = not self.editSpec if self.editSpec then self:SetCurrentCol(1) @@ -215,13 +215,13 @@ function main:Init() return self.curDatFile end } - self.controls.specColList = new("SpecColListControl", {"TOPLEFT",self.controls.specEditToggle,"BOTTOMLEFT"}, 0, 2, 200, 200) { + self.controls.specColList = new("SpecColListControl", {"TOPLEFT",self.controls.specEditToggle,"BOTTOMLEFT"}, {0, 2, 200, 200}) { shown = function() return self.editSpec end } - self.controls.colName = new("EditControl", {"TOPLEFT",self.controls.specColList,"TOPRIGHT"}, 10, 0, 150, 18, nil, nil, nil, nil, function(buf) + self.controls.colName = new("EditControl", {"TOPLEFT",self.controls.specColList,"TOPRIGHT"}, {10, 0, 150, 18}, nil, nil, nil, nil, function(buf) self.curSpecCol.name = buf self.curDatFile:OnSpecChanged() self.controls.rowList:BuildColumns() @@ -235,19 +235,19 @@ function main:Init() end } - self.controls.colType = new("DropDownControl", {"TOPLEFT",self.controls.colName,"BOTTOMLEFT"}, 0, 4, 90, 18, self.typeDrop, function(_, value) + self.controls.colType = new("DropDownControl", {"TOPLEFT",self.controls.colName,"BOTTOMLEFT"}, {0, 4, 90, 18}, self.typeDrop, function(_, value) self.curSpecCol.type = value self.curDatFile:OnSpecChanged() self:UpdateCol() end, "^7Field type in the dat file") - self.controls.colIsList = new("CheckBoxControl", {"TOPLEFT",self.controls.colType,"BOTTOMLEFT"}, 30, 4, 18, "List:", function(state) + self.controls.colIsList = new("CheckBoxControl", {"TOPLEFT",self.controls.colType,"BOTTOMLEFT"}, {30, 4, 18}, "List:", function(state) self.curSpecCol.list = state self.curDatFile:OnSpecChanged() self.controls.rowList:BuildColumns() end) - self.controls.colRefTo = new("EditControl", {"TOPLEFT",self.controls.colType,"BOTTOMLEFT"}, 0, 26, 150, 18, nil, nil, nil, nil, function(buf) + self.controls.colRefTo = new("EditControl", {"TOPLEFT",self.controls.colType,"BOTTOMLEFT"}, {0, 26, 150, 18}, nil, nil, nil, nil, function(buf) self.curSpecCol.refTo = buf self.curDatFile:OnSpecChanged() end) { @@ -257,7 +257,7 @@ function main:Init() end } - self.controls.colWidth = new("EditControl", {"TOPLEFT",self.controls.colRefTo,"BOTTOMLEFT"}, 0, 4, 100, 18, nil, nil, "%D", nil, function(buf) + self.controls.colWidth = new("EditControl", {"TOPLEFT",self.controls.colRefTo,"BOTTOMLEFT"}, {0, 4, 100, 18}, nil, nil, "%D", nil, function(buf) self.curSpecCol.width = m_max(tonumber(buf) or 150, 20) self.controls.rowList:BuildColumns() end) { @@ -268,7 +268,7 @@ function main:Init() end } - self.controls.enumBase = new("EditControl", {"TOPLEFT",self.controls.colWidth,"BOTTOMLEFT"}, 0, 4, 100, 18, nil, nil, "%D", nil, function(buf) + self.controls.enumBase = new("EditControl", {"TOPLEFT",self.controls.colWidth,"BOTTOMLEFT"}, {0, 4, 100, 18}, nil, nil, "%D", nil, function(buf) self.curSpecCol.enumBase = tonumber(buf) or 0 self.curDatFile:OnSpecChanged() end) { @@ -279,14 +279,14 @@ function main:Init() end } - self.controls.colDelete = new("ButtonControl", {"BOTTOMRIGHT",self.controls.colName,"TOPRIGHT"}, 0, -4, 18, 18, "x", function() + self.controls.colDelete = new("ButtonControl", {"BOTTOMRIGHT",self.controls.colName,"TOPRIGHT"}, {0, -4, 18, 18}, "x", function() t_remove(self.curDatFile.spec, self.curSpecColIndex) self.curDatFile:OnSpecChanged() self.controls.rowList:BuildColumns() self:SetCurrentCol() end) - self.controls.filter = new("EditControl", nil, 270, 0, 800, 18, nil, "^8Filter") { + self.controls.filter = new("EditControl", nil, {270, 0, 800, 18}, nil, "^8Filter") { y = function() return self.editSpec and 240 or 30 end, @@ -299,9 +299,9 @@ function main:Init() end, } self.controls.filter.tooltipText = "Takes a Lua expression that returns true or false for a row.\nE.g. `Id:match(\"test\")` or for a key column, `Col and Col.Id:match(\"test\")`" - self.controls.filterError = new("LabelControl", {"LEFT",self.controls.filter,"RIGHT"}, 4, 2, 0, 14, "") + self.controls.filterError = new("LabelControl", {"LEFT",self.controls.filter,"RIGHT"}, {4, 2, 0, 14}, "") - self.controls.rowList = new("RowListControl", nil, 270, 0, 0, 0) { + self.controls.rowList = new("RowListControl", nil, {270, 0, 0, 0}) { y = function() return self.editSpec and 260 or 50 end, @@ -316,7 +316,7 @@ function main:Init() end } - self.controls.addCol = new("ButtonControl", {"LEFT",self.controls.specEditToggle,"RIGHT"}, 10, 0, 80, 18, "Add", function() + self.controls.addCol = new("ButtonControl", {"LEFT",self.controls.specEditToggle,"RIGHT"}, {10, 0, 80, 18}, "Add", function() self:AddSpecCol() end) { shown = function() @@ -353,8 +353,8 @@ end function main:OpenPathPopup() main:OpenPopup(370, 290, "Manage GGPK versions", { - new("GGPKSourceListControl", nil, 0, 50, 350, 200, self), - new("ButtonControl", nil, 0, 260, 90, 20, "Done", function() + new("GGPKSourceListControl", nil, {0, 50, 350, 200}, self), + new("ButtonControl", nil, {0, 260, 90, 20}, "Done", function() main:ClosePopup() end), }) @@ -730,10 +730,10 @@ function main:OpenMessagePopup(title, msg) local controls = { } local numMsgLines = 0 for line in string.gmatch(msg .. "\n", "([^\n]*)\n") do - t_insert(controls, new("LabelControl", nil, 0, 20 + numMsgLines * 16, 0, 16, line)) + t_insert(controls, new("LabelControl", nil, {0, 20 + numMsgLines * 16, 0, 16}, line)) numMsgLines = numMsgLines + 1 end - controls.close = new("ButtonControl", nil, 0, 40 + numMsgLines * 16, 80, 20, "Ok", function() + controls.close = new("ButtonControl", nil, {0, 40 + numMsgLines * 16, 80, 20}, "Ok", function() main:ClosePopup() end) return self:OpenPopup(m_max(DrawStringWidth(16, "VAR", msg) + 30, 190), 70 + numMsgLines * 16, title, controls, "close") @@ -743,15 +743,15 @@ function main:OpenConfirmPopup(title, msg, confirmLabel, onConfirm) local controls = { } local numMsgLines = 0 for line in string.gmatch(msg .. "\n", "([^\n]*)\n") do - t_insert(controls, new("LabelControl", nil, 0, 20 + numMsgLines * 16, 0, 16, line)) + t_insert(controls, new("LabelControl", nil, {0, 20 + numMsgLines * 16, 0, 16}, line)) numMsgLines = numMsgLines + 1 end local confirmWidth = m_max(80, DrawStringWidth(16, "VAR", confirmLabel) + 10) - controls.confirm = new("ButtonControl", nil, -5 - m_ceil(confirmWidth/2), 40 + numMsgLines * 16, confirmWidth, 20, confirmLabel, function() + controls.confirm = new("ButtonControl", nil, {-5 - m_ceil(confirmWidth/2), 40 + numMsgLines * 16, confirmWidth, 20}, confirmLabel, function() main:ClosePopup() onConfirm() end) - t_insert(controls, new("ButtonControl", nil, 5 + m_ceil(confirmWidth/2), 40 + numMsgLines * 16, confirmWidth, 20, "Cancel", function() + t_insert(controls, new("ButtonControl", nil, {5 + m_ceil(confirmWidth/2), 40 + numMsgLines * 16, confirmWidth, 20}, "Cancel", function() main:ClosePopup() end)) return self:OpenPopup(m_max(DrawStringWidth(16, "VAR", msg) + 30, 190), 70 + numMsgLines * 16, title, controls, "confirm") @@ -759,11 +759,11 @@ end function main:OpenNewFolderPopup(path, onClose) local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter folder name:") - controls.edit = new("EditControl", nil, 0, 40, 350, 20, nil, nil, "\\/:%*%?\"<>|%c", 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter folder name:") + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, nil, nil, "\\/:%*%?\"<>|%c", 100, function(buf) controls.create.enabled = buf:match("%S") end) - controls.create = new("ButtonControl", nil, -45, 70, 80, 20, "Create", function() + controls.create = new("ButtonControl", nil, {-45, 70, 80, 20}, "Create", function() local newFolderName = controls.edit.buf local res, msg = MakeDir(path..newFolderName) if not res then @@ -776,7 +776,7 @@ function main:OpenNewFolderPopup(path, onClose) main:ClosePopup() end) controls.create.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() if onClose then onClose() end diff --git a/src/Export/Minions/Spectres.txt b/src/Export/Minions/Spectres.txt index 249c2bee7e..b43fcdd95b 100644 --- a/src/Export/Minions/Spectres.txt +++ b/src/Export/Minions/Spectres.txt @@ -255,7 +255,6 @@ local minions, mod, flag = ... #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/RobotArgusHigh__ #mod mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", 30, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "HulkingMiscreation", unscaleable = true }, { type = "MonsterTag", monsterTag = "Construct" })}) #mod mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 100, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "HulkingMiscreation", unscaleable = true }, { type = "MonsterTag", monsterTag = "Construct" })}) -#mod mod("AllyModifier", "LIST", { mod = mod("PhysicalDamageGainAsLightning", "BASE", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "HulkingMiscreation", unscaleable = true })}) #emit -- Spirit of Fortune #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/KudukuLow @@ -267,16 +266,16 @@ local minions, mod, flag = ... #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AdmiralLow #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AdmiralMid__ #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AdmiralHigh_ -#mod mod("AllyModifier", "LIST", { mod = mod("MinimumFortification", "BASE", 10, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "PerfectNavalOfficer", unscaleable = true })}) +#mod mod("AllyModifier", "LIST", { mod = mod("ColdDamageTaken", "INC", -5, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "PerfectNavalOfficer", unscaleable = true })}) #emit -- Dancing Sword #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AnimatedSwordLow #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AnimatedSwordMid -#mod mod("AllyModifier", "LIST", { mod = mod("ImpaleEffect", "INC", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}) +#mod mod("AllyModifier", "LIST", { mod = mod("ImpaleChance", "BASE", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}) #emit #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/AnimatedSwordHigh_ -#mod mod("AllyModifier", "LIST", { mod = mod("ImpaleEffect", "INC", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}) -#mod mod("AllyModifier", "LIST", { mod = mod("ImpaleStacksMax", "BASE", 1, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}) +#mod mod("AllyModifier", "LIST", { mod = mod("ImpaleChance", "BASE", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}) +#mod mod("AllyModifier", "LIST", { mod = mod("ImpaleEffect", "INC", 30, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "DancingSword", unscaleable = true })}) #emit -- Needle Horror #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/BarrageDemonLow @@ -311,15 +310,11 @@ local minions, mod, flag = ... -- Slashing Horror #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DualstrikeDemonLow #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DualstrikeDemonMid -#mod mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "Rage" }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }) -#mod mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "Rage", div = 2 }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }) -#mod mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1, 0, 0, { type = "Multiplier", actor = "parent", var = "Rage", div = 5 }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }) +#mod mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }) #emit #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/DualstrikeDemonHigh #mod mod("PlayerModifier", "LIST", { mod = mod("PhysicalDamageGainAsFire", "BASE", 5, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "SlashingHorror", unscaleable = true })}) -#mod mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "Rage" }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }) -#mod mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "Rage", div = 2 }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }) -#mod mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1, 0, 0, { type = "Multiplier", actor = "parent", var = "Rage", div = 5 }, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }) +#mod mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 1, ModFlag.Attack, 0, { type = "Multiplier", actor = "parent", var = "RageEffect" }) }) #emit -- Druidic Alchemist #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/FlaskloverLow__ @@ -377,7 +372,7 @@ local minions, mod, flag = ... #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SpiderLeaderLow #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SpiderLeaderMid #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SpiderLeaderHigh_ -#mod mod("PlayerModifier", "LIST", { mod = mod("WitherEffect", "INC", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "SpiderMatriarch", unscaleable = true })}) --Does not work +#mod mod("PlayerModifier", "LIST", { mod = mod("WitherEffect", "INC", 10, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "SpiderMatriarch", unscaleable = true })}) --Does not work #emit -- Meatsack #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/TankyZombieLow @@ -396,7 +391,7 @@ local minions, mod, flag = ... -- Guardian Turtle #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/TurtleLow #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/TurtleMid_ -#mod mod("PlayerModifier", "LIST", { mod = mod("PhysicalDamageReduction", "BASE", 5, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "GuardianTurtle", unscaleable = true })}) +#mod mod("PlayerModifier", "LIST", { mod = mod("PhysicalDamageReduction", "BASE", 3, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "GuardianTurtle", unscaleable = true })}) #emit #monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/TurtleHigh #mod mod("PlayerModifier", "LIST", { mod = mod("PhysicalDamageReduction", "BASE", 5, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "GuardianTurtle", unscaleable = true })}) @@ -426,6 +421,6 @@ local minions, mod, flag = ... -- Half-remembered Goliath #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SynthesisGolemLow #spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SynthesisGolemMid -#monster Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SynthesisGolemHigh -#mod mod("PlayerModifier", "LIST", { mod = mod("Duration", "INC", 20, 0, 0, { type = "GlobalEffect", effectType = "Buff", effectName = "HalfRememberedGoliath", unscaleable = true })}) -#emit \ No newline at end of file +#spectre Metadata/Monsters/LeagueAzmeri/SpecialCorpses/SynthesisGolemHigh +-- Wretched Defiler +#spectre Metadata/Monsters/Revenant/RevenantMapBossStandalone_AtlasUber \ No newline at end of file diff --git a/src/Export/Scripts/bases.lua b/src/Export/Scripts/bases.lua index 79a8113905..5e020700d2 100644 --- a/src/Export/Scripts/bases.lua +++ b/src/Export/Scripts/bases.lua @@ -3,7 +3,10 @@ if not loadStatFile then end loadStatFile("tincture_stat_descriptions.txt") +local s_format = string.format + local directiveTable = { } +local bases = { All = { } } directiveTable.type = function(state, args, out) state.type = args @@ -120,6 +123,7 @@ directiveTable.base = function(state, args, out) out:write('{ ', implicitModTypes[i], ' }, ') end out:write('},\n') + local itemValueSum = 0 local weaponType = dat("WeaponTypes"):GetRow("BaseItemType", baseItemType) if weaponType then out:write('\tweapon = { ') @@ -128,6 +132,7 @@ directiveTable.base = function(state, args, out) out:write('AttackRateBase = ', round(1000 / weaponType.Speed, 2), ', ') out:write('Range = ', weaponType.Range, ', ') out:write('},\n') + itemValueSum = weaponType.DamageMin + weaponType.DamageMax end local armourType = dat("ArmourTypes"):GetRow("BaseItemType", baseItemType) if armourType then @@ -139,14 +144,17 @@ directiveTable.base = function(state, args, out) if armourType.ArmourMin > 0 then out:write('ArmourBaseMin = ', armourType.ArmourMin, ', ') out:write('ArmourBaseMax = ', armourType.ArmourMax, ', ') + itemValueSum = itemValueSum + armourType.ArmourMin + armourType.ArmourMax end if armourType.EvasionMin > 0 then out:write('EvasionBaseMin = ', armourType.EvasionMin, ', ') out:write('EvasionBaseMax = ', armourType.EvasionMax, ', ') + itemValueSum = itemValueSum + armourType.EvasionMin + armourType.EvasionMax end if armourType.EnergyShieldMin > 0 then out:write('EnergyShieldBaseMin = ', armourType.EnergyShieldMin, ', ') out:write('EnergyShieldBaseMax = ', armourType.EnergyShieldMax, ', ') + itemValueSum = itemValueSum + armourType.EnergyShieldMin + armourType.EnergyShieldMax end if armourType.MovementPenalty ~= 0 then out:write('MovementPenalty = ', -armourType.MovementPenalty, ', ') @@ -154,6 +162,7 @@ directiveTable.base = function(state, args, out) if armourType.WardMin > 0 then out:write('WardBaseMin = ', armourType.WardMin, ', ') out:write('WardBaseMax = ', armourType.WardMax, ', ') + itemValueSum = itemValueSum + armourType.WardMin + armourType.WardMax end out:write('},\n') end @@ -217,6 +226,15 @@ directiveTable.base = function(state, args, out) end end out:write('},\n}\n') + + if not ((baseItemType.Hidden == 0 or state.forceHide) and not baseTypeId:match("Talisman") and not state.forceShow) then + bases[state.type] = bases[state.type] or {} + local subtype = state.subType and #state.subType and state.subType or "" + if not bases[state.type][subtype] or itemValueSum > bases[state.type][subtype][2] then + bases[state.type][subtype] = { displayName, itemValueSum } + end + bases["All"][displayName] = { state.type, state.subType } + end end directiveTable.baseMatch = function(state, argstr, out) @@ -239,6 +257,77 @@ directiveTable.baseMatch = function(state, argstr, out) end end +local baseMods = { } +directiveTable.baseGroup = function(state, args, out) + local baseGroup, values = args:match("^([^%)]+), %[ ([^%)]+)%]") + baseMods[baseGroup] = values +end + +directiveTable.setBestBase = function(state, args, out) + local baseClass, baseSubType, itemNameOverride, values = args:match("^([^,]+), ([^,]+), ([^,]+), %[([^%]]+)%]") + if not baseClass then + baseClass, baseSubType, values = args:match("^([^%)]+), ([^%)]+), %[ ([^%)]+)%]") + end + local itemName = itemNameOverride and itemNameOverride or (baseSubType..' '..baseClass) + local base = bases[baseClass][baseSubType][1] + out:write('[[\n') + out:write(itemName,'\n') + out:write(base,'\n') + if not values:match("Crafted: true") then + out:write('Crafted: true\n') + end + if values ~= " " then + for line in values:gmatch('([^,]+)') do + out:write(line:gsub("^ ", ""),'\n') + end + elseif baseMods[itemName] then + for line in values:gmatch('([^,]+)') do + out:write(line:gsub("^ ", ""),'\n') + end + end + out:write(']],') +end + +directiveTable.setBase = function(state, args, out) + local baseName, itemName, values = args:match("^([^,]+), ([^,]+), %[([^%]]+)%]") + if not baseName then + baseName, values = args:match("([^,]+), %[([^%]]+)%]") + end + if baseName and not bases["All"][baseName] then + print("Missing base") + print(baseName) + return + end + out:write('[[\n') + local baseClass, baseSubType = unpack(bases["All"][baseName]) + local groupName = baseClass + if itemName then + out:write(s_format(itemName, baseClass):gsub("One Handed", "1H"):gsub("Two Handed", "2H"),'\n') + groupName = s_format(itemName, (baseClass:match("One Handed") or baseClass:match("Claw") or baseClass:match("Dagger") or baseClass:match("Sceptre") or baseClass:match("Wand")) and "One Handed" or (baseClass:match("Two Handed") or baseClass:match("Staff")) and "Two Handed" or "") + else + if baseSubType then + groupName = baseSubType..' '..baseClass + out:write(groupName,'\n') + else + out:write(baseClass,'\n') + end + end + out:write(baseName,'\n') + if not values:match("Crafted: true") then + out:write('Crafted: true\n') + end + if values ~= " " then + for line in values:gmatch('([^,]+)') do + out:write(line:gsub("^ ", ""),'\n') + end + elseif baseMods[groupName] then + for line in baseMods[groupName]:gmatch('([^,]+)') do + out:write(line:gsub("^ ", ""),'\n') + end + end + out:write(']],') +end + local itemTypes = { "axe", "bow", @@ -267,3 +356,7 @@ for _, name in pairs(itemTypes) do end print("Item bases exported.") + +processTemplateFile("Rares", "Bases/", "../Data/", directiveTable) + +print("Rare Item Templates Generated and Verified") diff --git a/src/Export/Scripts/crucible.lua b/src/Export/Scripts/crucible.lua index 59da6818e1..c3278b2c60 100644 --- a/src/Export/Scripts/crucible.lua +++ b/src/Export/Scripts/crucible.lua @@ -29,6 +29,21 @@ for crucible in dat("WeaponPassiveSkills"):Rows() do end out:write('}, ') out:write('weightVal = { ', table.concat(crucible.Mod.SpawnWeights, ', '), ' }, ') + if crucible.Mod.GenerationWeightTags[1] then + out:write('weightMultiplierKey = { ') + for _, tag in ipairs(crucible.Mod.GenerationWeightTags) do + out:write('"', tag.Id, '", ') + end + out:write('}, ') + out:write('weightMultiplierVal = { ', table.concat(crucible.Mod.GenerationWeightValues, ', '), ' }, ') + if crucible.Mod.Tags[1] then + out:write('tags = { ') + for _, tag in ipairs(crucible.Mod.Tags) do + out:write('"', tag.Id, '", ') + end + out:write('}, ') + end + end out:write('modTags = { ', stats.modTags, ' }, ') out:write('},\n') else diff --git a/src/Export/Scripts/enchant.lua b/src/Export/Scripts/enchant.lua index e84005899b..7874fc308c 100644 --- a/src/Export/Scripts/enchant.lua +++ b/src/Export/Scripts/enchant.lua @@ -3,6 +3,41 @@ if not loadStatFile then end loadStatFile("stat_descriptions.txt") +local itemClassMap = { + ["LifeFlask"] = "Flask", + ["ManaFlask"] = "Flask", + ["HybridFlask"] = "Flask", + ["Amulet"] = "Amulet", + ["Ring"] = "Ring", + ["Claw"] = "Claw", + ["Dagger"] = "Dagger", + ["Rune Dagger"] = "Dagger", + ["Wand"] = "Wand", + ["One Hand Sword"] = "One Handed Sword", + ["Thrusting One Hand Sword"] = "Thrusting One Handed Sword", + ["One Hand Axe"] = "One Handed Axe", + ["One Hand Mace"] = "One Handed Mace", + ["Bow"] = "Bow", + ["Fishing Rod"] = "Fishing Rod", + ["Staff"] = "Staff", + ["Warstaff"] = "Staff", + ["Two Hand Sword"] = "Two Handed Sword", + ["Two Hand Axe"] = "Two Handed Axe", + ["Two Hand Mace"] = "Two Handed Mace", + ["Quiver"] = "Quiver", + ["Belt"] = "Belt", + ["Gloves"] = "Gloves", + ["Boots"] = "Boots", + ["Body Armour"] = "Body Armour", + ["Helmet"] = "Helmet", + ["Shield"] = "Shield", + ["Sceptre"] = "Sceptre", + ["UtilityFlask"] = "Flask", + ["UtilityFlaskCritical"] = "Flask", + ["Map"] = "Map", + ["Jewel"] = "Jewel", +} + local lab = { [32] = "NORMAL", [53] = "CRUEL", @@ -10,7 +45,7 @@ local lab = { [75] = "ENDGAME", [83] = "DEDICATION", } -local sourceOrder = { "NORMAL", "CRUEL", "MERCILESS", "ENDGAME", "DEDICATION", "ENKINDLING", "INSTILLING", "HARVEST", "HEIST" } +local sourceOrder = { "NORMAL", "CRUEL", "MERCILESS", "ENDGAME", "DEDICATION", "ENKINDLING", "INSTILLING", "HARVEST", "HEIST", "RUNESMITH" } local function doLabEnchantment(fileName, group) local byDiff = { } @@ -44,13 +79,24 @@ doLabEnchantment("../Data/EnchantmentBelt.lua", "BuffEnchantment") local function doOtherEnchantment(fileName, groupsList) local byDiff = { } + local byDiffFullMods = { } for generation in pairs(groupsList) do - for _, mod in ipairs(dat("Mods"):GetRowList("GenerationType", generation)) do - if groupsList[generation][mod.Family[1].Id] then - local stats, orders = describeMod(mod) - local diff = groupsList[generation][mod.Family[1].Id] - byDiff[diff] = byDiff[diff] or { } - table.insert(byDiff[diff], stats) + if type(generation) == "string" and generation == "Craft" then + for _, craft in ipairs(dat("CraftingBenchOptions"):GetRowList("IsDisabled", false)) do + if groupsList[generation][craft.SortCategory.Id] then + local diff = groupsList[generation][craft.SortCategory.Id] + byDiffFullMods[diff] = byDiffFullMods[diff] or { } + table.insert(byDiffFullMods[diff], craft) + end + end + else + for _, mod in ipairs(dat("Mods"):GetRowList("GenerationType", generation)) do + if groupsList[generation][mod.Family[1].Id] then + local stats, orders = describeMod(mod) + local diff = groupsList[generation][mod.Family[1].Id] + byDiff[diff] = byDiff[diff] or { } + table.insert(byDiff[diff], stats) + end end end end @@ -64,6 +110,29 @@ local function doOtherEnchantment(fileName, groupsList) out:write('\t\t"'..table.concat(stats, '/')..'",\n') end out:write('\t},\n') + elseif byDiffFullMods[diff] then + out:write('\t["'..diff..'"] = {\n') + for _, mod in ipairs(byDiffFullMods[diff]) do + out:write('\t\t{ ') + out:write('type = "Runecraft", ') + local stats, orders = describeMod(mod.AddEnchantment) + out:write('modTags = { ', stats.modTags, ' }, ') + out:write('"', table.concat(stats, '", "'), '", ') + out:write('statOrder = { ', table.concat(orders, ', '), ' }, ') + out:write('types = { ') + local uniqueTypes = { } + for _, category in ipairs(mod.ItemCategories) do + for _, itemClass in ipairs(category.ItemClasses) do + if uniqueTypes[itemClassMap[itemClass.Id]] ~= itemClassMap[itemClass.Id] then + uniqueTypes[itemClassMap[itemClass.Id]] = itemClassMap[itemClass.Id] + out:write('["', itemClassMap[itemClass.Id], '"] = true, ') + end + end + end + out:write('}, ') + out:write('},\n') + end + out:write('\t},\n') end end out:write('}') @@ -75,7 +144,7 @@ doOtherEnchantment("../Data/EnchantmentFlask.lua", { --[3] = { ["FlaskEnchantmen [21] = { ["FlaskEnchantment"] = "ENKINDLING" }, [22] = { ["FlaskEnchantment"] = "INSTILLING" } }) doOtherEnchantment("../Data/EnchantmentBody.lua", { [3] = { ["AlternateArmourQuality"] = "HARVEST", ["EnchantmentHeistArmour"] = "HEIST" } }) -doOtherEnchantment("../Data/EnchantmentWeapon.lua", { [3] = { ["AlternateWeaponQuality"] = "HARVEST", ["EnchantmentHeistWeapon"] = "HEIST" } }) +doOtherEnchantment("../Data/EnchantmentWeapon.lua", { [3] = { ["AlternateWeaponQuality"] = "HARVEST", ["EnchantmentHeistWeapon"] = "HEIST" }, ["Craft"] = { ["Runecrafting"] = "RUNESMITH" } }) local skillMap = { ["Summone?d?RagingSpirit"] = "Summon Raging Spirit", diff --git a/src/Export/Scripts/legionPassives.lua b/src/Export/Scripts/legionPassives.lua index 598463d04c..dd24b40e9b 100644 --- a/src/Export/Scripts/legionPassives.lua +++ b/src/Export/Scripts/legionPassives.lua @@ -189,7 +189,7 @@ for i=1, alternatePassiveSkillDat.rowCount do [1] = "Energy Shield starts at zero", [2] = "Cannot Recharge or Regenerate Energy Shield", [3] = "Lose 5% of Energy Shield per second", - [4] = "Life Leech effects are not removed at Full Life", + [4] = "Life Leech effects are not removed when Unreserved Life is Filled", [5] = "Life Leech effects Recover Energy Shield instead while on Full Life" } end diff --git a/src/Export/Scripts/masters.lua b/src/Export/Scripts/masters.lua index 6619ecf101..06a31d03f1 100644 --- a/src/Export/Scripts/masters.lua +++ b/src/Export/Scripts/masters.lua @@ -11,6 +11,7 @@ local itemClassMap = { ["Ring"] = "Ring", ["Claw"] = "Claw", ["Dagger"] = "Dagger", + ["Rune Dagger"] = "Dagger", ["Wand"] = "Wand", ["One Hand Sword"] = "One Handed Sword", ["Thrusting One Hand Sword"] = "Thrusting One Handed Sword", @@ -19,6 +20,7 @@ local itemClassMap = { ["Bow"] = "Bow", ["Fishing Rod"] = "Fishing Rod", ["Staff"] = "Staff", + ["Warstaff"] = "Staff", ["Two Hand Sword"] = "Two Handed Sword", ["Two Hand Axe"] = "Two Handed Axe", ["Two Hand Mace"] = "Two Handed Mace", @@ -34,8 +36,6 @@ local itemClassMap = { ["UtilityFlaskCritical"] = "Flask", ["Map"] = "Map", ["Jewel"] = "Jewel", - ["Rune Dagger"] = "Dagger", - ["Warstaff"] = "Staff", } local out = io.open("../Data/ModMaster.lua", "w") out:write('-- This file is automatically generated, do not edit!\n') @@ -67,26 +67,6 @@ for _, craft in ipairs(dat("CraftingBenchOptions"):GetRowList("IsDisabled", fals out:write('}, ') out:write('},\n') end - if craft.SortCategory.Id == "Runecrafting" then - out:write('\t{ ') - out:write('type = "Runecraft", ') - local stats, orders = describeMod(craft.AddEnchantment) - out:write('modTags = { ', stats.modTags, ' }, ') - out:write('"', table.concat(stats, '", "'), '", ') - out:write('statOrder = { ', table.concat(orders, ', '), ' }, ') - out:write('types = { ') - local uniqueTypes = { } - for _, category in ipairs(craft.ItemCategories) do - for _, itemClass in ipairs(category.ItemClasses) do - if uniqueTypes[itemClassMap[itemClass.Id]] ~= itemClassMap[itemClass.Id] then - uniqueTypes[itemClassMap[itemClass.Id]] = itemClassMap[itemClass.Id] - out:write('["', itemClassMap[itemClass.Id], '"] = true, ') - end - end - end - out:write('}, ') - out:write('},\n') - end end out:write('}') out:close() diff --git a/src/Export/Scripts/mods.lua b/src/Export/Scripts/mods.lua index 5234c5057b..d789602ce0 100644 --- a/src/Export/Scripts/mods.lua +++ b/src/Export/Scripts/mods.lua @@ -88,6 +88,38 @@ local function writeMods(outName, condFunc) end out:write('}, ') out:write('weightVal = { ', table.concat(mod.SpawnWeights, ', '), ' }, ') + if mod.GenerationWeightTags[1] then + -- make large clusters only have 1 notable suffix + if mod.GenerationType == 2 and mod.Tags[1] and outName == "../Data/ModJewelCluster.lua" and mod.Tags[1].Id == "has_affliction_notable" then + out:write('weightMultiplierKey = { "has_affliction_notable2", ') + for _, tag in ipairs(mod.GenerationWeightTags) do + out:write('"', tag.Id, '", ') + end + out:write('}, ') + out:write('weightMultiplierVal = { 0, ', table.concat(mod.GenerationWeightValues, ', '), ' }, ') + if mod.Tags[1] then + out:write('tags = { "has_affliction_notable2", ') + for _, tag in ipairs(mod.Tags) do + out:write('"', tag.Id, '", ') + end + out:write('}, ') + end + else + out:write('weightMultiplierKey = { ') + for _, tag in ipairs(mod.GenerationWeightTags) do + out:write('"', tag.Id, '", ') + end + out:write('}, ') + out:write('weightMultiplierVal = { ', table.concat(mod.GenerationWeightValues, ', '), ' }, ') + if mod.Tags[1] then + out:write('tags = { ') + for _, tag in ipairs(mod.Tags) do + out:write('"', tag.Id, '", ') + end + out:write('}, ') + end + end + end out:write('modTags = { ', stats.modTags, ' }, ') out:write('},\n') else diff --git a/src/Export/Scripts/skills.lua b/src/Export/Scripts/skills.lua index c63661df93..e340203078 100644 --- a/src/Export/Scripts/skills.lua +++ b/src/Export/Scripts/skills.lua @@ -341,7 +341,7 @@ directiveTable.skill = function(state, args, out) out:write('\t},\n') end out:write('\tstatDescriptionScope = "', skillStatScope[granted.ActiveSkill.Id] or "skill_stat_descriptions", '",\n') - if granted.ActiveSkill.SkillTotem <= dat("SkillTotems").rowCount then + if granted.ActiveSkill.SkillTotem <= 21 then out:write('\tskillTotemId = ', granted.ActiveSkill.SkillTotem, ',\n') end out:write('\tcastTime = ', granted.CastTime / 1000, ',\n') diff --git a/src/Export/Skills/act_dex.txt b/src/Export/Skills/act_dex.txt index c6d9ec3650..9098f37122 100644 --- a/src/Export/Skills/act_dex.txt +++ b/src/Export/Skills/act_dex.txt @@ -1626,7 +1626,7 @@ local skills, mod, flag, skill = ... #mods #skill FrostBladesAltX -#flags attack melee projectile area +#flags attack melee projectile area dotFromAttack parts = { { name = "Melee Hit", @@ -1638,6 +1638,7 @@ local skills, mod, flag, skill = ... { name = "Ground DoT", attack = false, + hit = false, melee = false, projectile = false, area = true, diff --git a/src/Export/Skills/act_str.txt b/src/Export/Skills/act_str.txt index f3c620b3f1..5f442ef4e7 100644 --- a/src/Export/Skills/act_str.txt +++ b/src/Export/Skills/act_str.txt @@ -960,6 +960,7 @@ local skills, mod, flag, skill = ... }, }, #baseMod skill("radius", 10) +#baseMod flag("dotIsHeraldOfAsh") #mods #skill HeraldOfPurity diff --git a/src/Export/Skills/other.txt b/src/Export/Skills/other.txt index ce71a86798..8f4d05c5e2 100644 --- a/src/Export/Skills/other.txt +++ b/src/Export/Skills/other.txt @@ -1044,6 +1044,15 @@ local skills, mod, flag, skill = ... fromItem = true, #mods +#skill SupportTriggerFireSpellOnHit + fromItem = true, + statMap = { + ["spell_is_triggered_on_hit"] = { + skill("triggeredBySettlersEnchantTrigger", true) + } + }, +#mods + skills["EnemyExplode"] = { name = "On Kill Monster Explosion", hidden = true, diff --git a/src/Export/Skills/spectre.txt b/src/Export/Skills/spectre.txt index 86d49535f4..5fb8b60d3a 100644 --- a/src/Export/Skills/spectre.txt +++ b/src/Export/Skills/spectre.txt @@ -2166,4 +2166,8 @@ skills["DarkMarionetteExplodePerfect"] = { #skill AzmeriGolemRotateZap Spinning Zap #flags spell area hit +#mods + +#skill RevenantBossSpellProjectile Lightning Projectile +#flags spell projectile triggerable #mods \ No newline at end of file diff --git a/src/Export/Skills/sup_dex.txt b/src/Export/Skills/sup_dex.txt index 23a2986523..9cb0a4d8dc 100644 --- a/src/Export/Skills/sup_dex.txt +++ b/src/Export/Skills/sup_dex.txt @@ -377,10 +377,10 @@ local skills, mod, flag, skill = ... #skill SupportRupture statMap = { ["support_rupture_bleeding_damage_taken_+%_final"] = { - mod("DamageTaken", "MORE", nil, 0, KeywordFlag.Bleed, { type = "GlobalEffect", effectType = "Debuff" }, { type = "Multiplier", var = "RuptureStack", limit = 3 }) + mod("DamageTaken", "MORE", nil, 0, KeywordFlag.Bleed, { type = "GlobalEffect", effectType = "Debuff", effectName = "Rupture" }, { type = "Multiplier", var = "RuptureStack", limit = 3 }) }, ["support_rupture_bleeding_time_passed_+%_final"] = { - mod("BleedExpireRate", "MORE", nil, 0, KeywordFlag.Bleed, { type = "GlobalEffect", effectType = "Debuff" }, { type = "Multiplier", var = "RuptureStack", limit = 3 }) + mod("BleedExpireRate", "MORE", nil, 0, KeywordFlag.Bleed, { type = "GlobalEffect", effectType = "Debuff", effectName = "Rupture" }, { type = "Multiplier", var = "RuptureStack", limit = 3 }) }, ["critical_strikes_that_inflict_bleeding_also_rupture"] = { flag("Condition:CanInflictRupture", { type = "GlobalEffect", effectType = "Buff" }), diff --git a/src/Export/spec.lua b/src/Export/spec.lua index 47341472d6..8bd07afb61 100644 --- a/src/Export/spec.lua +++ b/src/Export/spec.lua @@ -218,7 +218,7 @@ return { [14]={ list=false, name="SkillTotem", - refTo="SkillTotems", + refTo="", type="Int", width=80 }, @@ -335,8 +335,6 @@ return { width=150 } }, - activeskilltargettypes={ - }, activeskilltype={ [1]={ list=false, @@ -572,9 +570,9 @@ return { [4]={ list=true, name="StatsKeys", - refTo="", - type="UInt", - width=80 + refTo="Stats", + type="Key", + width=200 }, [5]={ list=false, @@ -701,7 +699,7 @@ return { list=false, name="ConquerorIndex", refTo="", - type="UInt", + type="Int", width=90 }, [14]={ @@ -729,21 +727,21 @@ return { list=true, name="AchievementItemsKeys", refTo="", - type="UInt", + type="Key", width=150 }, [18]={ list=false, name="ConquerorVersion", refTo="", - type="UInt", + type="Int", width=150 }, [19]={ list=false, name="ConquerorSpawnWeight", refTo="", - type="UInt", + type="Int", width=150 } }, @@ -874,7 +872,7 @@ return { list=false, name="NotableReplacementSpawnWeight ", refTo="", - type="UInt", + type="Int", width=200 } }, @@ -1959,8 +1957,6 @@ return { }, breachstoneupgrades={ }, - buffcategories={ - }, buffdefinitions={ [1]={ list=false, @@ -2818,8 +2814,6 @@ return { width=80 } }, - buffvisualsets={ - }, characteraudioevents={ }, charactereventtextaudio={ @@ -4120,7 +4114,7 @@ return { list=false, name="Unknown23", refTo="", - type="UInt", + type="Int", width=100 }, [25]={ @@ -4824,8 +4818,6 @@ return { }, grandmasters={ }, - grantedeffectgroups={ - }, grantedeffectqualitystats={ [1]={ list=false, @@ -4927,7 +4919,7 @@ return { name="Hash", refTo="", type="UInt", - width=50 + width=80 }, [10]={ list=true, @@ -5165,28 +5157,28 @@ return { list=false, name="ManaReservationFlat", refTo="", - type="UInt", + type="Int", width=150 }, [18]={ list=false, name="ManaReservationPercent", refTo="", - type="UInt", + type="Int", width=150 }, [19]={ list=false, name="LifeReservationFlat", refTo="", - type="UInt", + type="Int", width=150 }, [20]={ list=false, name="LifeReservationPercent", refTo="", - type="UInt", + type="Int", width=150 }, [21]={ @@ -5658,16 +5650,6 @@ return { width=150 } }, - influencetypes={ - [1]={ - enumBase=0, - list=false, - name="Name", - refTo="", - type="String", - width=150 - } - }, invasionmonstergroups={ }, invasionmonsterrestrictions={ @@ -6811,10 +6793,6 @@ return { }, missiontransitiontiles={ }, - modauraflags={ - }, - moddomains={ - }, modeffectstats={ [1]={ list=false, @@ -6912,8 +6890,6 @@ return { width=200 } }, - modgenerationtype={ - }, mods={ [1]={ list=false, @@ -6926,7 +6902,7 @@ return { list=false, name="Hash", refTo="", - type="UInt", + type="UInt16", width=60 }, [3]={ @@ -9334,7 +9310,7 @@ return { list=false, name="PassiveSkillNodeId", refTo="", - type="Int", + type="UInt16", width=100 }, [9]={ @@ -9682,15 +9658,6 @@ return { }, passiveskilltreeuiart={ }, - passiveskilltypes={ - [1]={ - list=false, - name="Name", - refTo="", - type="String", - width=150 - } - }, passivetreeexpansionjewels={ [1]={ list=false, @@ -10635,8 +10602,6 @@ return { width=600 } }, - skillmines={ - }, skillminevariations={ }, skillmorphdisplay={ @@ -10647,14 +10612,12 @@ return { }, skillsurgeeffects={ }, - skilltotems={ - }, skilltotemvariations={ [1]={ list=false, name="SkillTotem", - refTo="SkillTotems", - type="Enum", + refTo="", + type="Int", width=60 }, [2]={ @@ -10753,8 +10716,6 @@ return { }, statdescriptionfunctions={ }, - statinterpolationtypes={ - }, stats={ [1]={ list=false, @@ -10906,8 +10867,6 @@ return { width=150 } }, - statsemantics={ - }, statsets={ }, statsfromskillstats={ diff --git a/src/Export/statdesc.lua b/src/Export/statdesc.lua index 4fea1cb1b8..d7550efa9a 100644 --- a/src/Export/statdesc.lua +++ b/src/Export/statdesc.lua @@ -153,9 +153,12 @@ function describeStats(stats) val[spec.v].max, val[spec.v].min = 100 - val[spec.v].min, 100 - val[spec.v].max elseif spec.k == "negate_and_double" then val[spec.v].max, val[spec.v].min = -2 * val[spec.v].min, -2 * val[spec.v].max - elseif spec.k == "passive_hash" and val[spec.v].min < 0 then - val[spec.v].min = val[spec.v].min + 65536 - val[spec.v].max = val[spec.v].max + 65536 + elseif spec.k == "passive_hash" then + -- handled elsewhere + if val[spec.v].min < 0 then + val[spec.v].min = val[spec.v].min + 65536 + val[spec.v].max = val[spec.v].max + 65536 + end elseif spec.k == "divide_by_two_0dp" then val[spec.v].min = val[spec.v].min / 2 val[spec.v].max = val[spec.v].max / 2 @@ -217,7 +220,7 @@ function describeStats(stats) elseif spec.k == "milliseconds_to_seconds_0dp" then val[spec.v].min = val[spec.v].min / 1000 val[spec.v].max = val[spec.v].max / 1000 - elseif spec.k == "milliseconds_to_seconds_2dp_if_required" then + elseif spec.k == "milliseconds_to_seconds_2dp_if_required" or spec.k == "milliseconds_to_seconds_2dp" then val[spec.v].min = round(val[spec.v].min / 1000, 2) val[spec.v].max = round(val[spec.v].max / 1000, 2) val[spec.v].fmt = "g" diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index dd7fde4696..88198f8557 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -77,15 +77,15 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin local miscTooltip = new("Tooltip") -- Controls: top bar, left side - self.anchorTopBarLeft = new("Control", nil, 4, 4, 0, 20) - self.controls.back = new("ButtonControl", {"LEFT",self.anchorTopBarLeft,"RIGHT"}, 0, 0, 60, 20, "<< Back", function() + self.anchorTopBarLeft = new("Control", nil, {4, 4, 0, 20}) + self.controls.back = new("ButtonControl", {"LEFT",self.anchorTopBarLeft,"RIGHT"}, {0, 0, 60, 20}, "<< Back", function() if self.unsaved then self:OpenSavePopup("LIST") else self:CloseBuild() end end) - self.controls.buildName = new("Control", {"LEFT",self.controls.back,"RIGHT"}, 8, 0, 0, 20) + self.controls.buildName = new("Control", {"LEFT",self.controls.back,"RIGHT"}, {8, 0, 0, 20}) self.controls.buildName.width = function(control) local limit = self.anchorTopBarRight:GetPos() - 98 - 40 - self.controls.back:GetSize() - self.controls.save:GetSize() - self.controls.saveAs:GetSize() local bnw = DrawStringWidth(16, "VAR", self.buildName) @@ -116,13 +116,13 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin SetDrawLayer(nil, 0) end end - self.controls.save = new("ButtonControl", {"LEFT",self.controls.buildName,"RIGHT"}, 8, 0, 50, 20, "Save", function() + self.controls.save = new("ButtonControl", {"LEFT",self.controls.buildName,"RIGHT"}, {8, 0, 50, 20}, "Save", function() self:SaveDBFile() end) self.controls.save.enabled = function() return not self.dbFileName or self.unsaved end - self.controls.saveAs = new("ButtonControl", {"LEFT",self.controls.save,"RIGHT"}, 8, 0, 70, 20, "Save As", function() + self.controls.saveAs = new("ButtonControl", {"LEFT",self.controls.save,"RIGHT"}, {8, 0, 70, 20}, "Save As", function() self:OpenSaveAsPopup() end) self.controls.saveAs.enabled = function() @@ -130,8 +130,8 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin end -- Controls: top bar, right side - self.anchorTopBarRight = new("Control", nil, function() return main.screenW / 2 + 6 end, 4, 0, 20) - self.controls.pointDisplay = new("Control", {"LEFT",self.anchorTopBarRight,"RIGHT"}, -12, 0, 0, 20) + self.anchorTopBarRight = new("Control", nil, {function() return main.screenW / 2 + 6 end, 4, 0, 20}) + self.controls.pointDisplay = new("Control", {"LEFT",self.anchorTopBarRight,"RIGHT"}, {-12, 0, 0, 20}) self.controls.pointDisplay.x = function(control) local width, height = control:GetSize() if self.controls.saveAs:GetPos() + self.controls.saveAs:GetSize() < self.anchorTopBarRight:GetPos() - width - 16 then @@ -161,14 +161,14 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin SetDrawLayer(nil, 0) end end - self.controls.levelScalingButton = new("ButtonControl", {"LEFT",self.controls.pointDisplay,"RIGHT"}, 12, 0, 50, 20, self.characterLevelAutoMode and "Auto" or "Manual", function() + self.controls.levelScalingButton = new("ButtonControl", {"LEFT",self.controls.pointDisplay,"RIGHT"}, {12, 0, 50, 20}, self.characterLevelAutoMode and "Auto" or "Manual", function() self.characterLevelAutoMode = not self.characterLevelAutoMode self.controls.levelScalingButton.label = self.characterLevelAutoMode and "Auto" or "Manual" self.configTab:BuildModList() self.modFlag = true self.buildFlag = true end) - self.controls.characterLevel = new("EditControl", {"LEFT",self.controls.levelScalingButton,"RIGHT"}, 8, 0, 106, 20, "", "Level", "%D", 3, function(buf) + self.controls.characterLevel = new("EditControl", {"LEFT",self.controls.levelScalingButton,"RIGHT"}, {8, 0, 106, 20}, "", "Level", "%D", 3, function(buf) self.characterLevel = m_min(m_max(tonumber(buf) or 1, 1), 100) self.configTab:BuildModList() self.modFlag = true @@ -191,7 +191,8 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin mult = ((playerLevel + 5) / (playerLevel + 5 + diff ^ 2.5)) ^ 1.5 end if playerLevel >= 95 then - mult = mult * (1 / (1 + 0.1 * (playerLevel - 94))) + local xpPenalty = ({0.935, 0.885, 0.813, 0.7175, 0.6})[playerLevel - 94] or 0 + mult = mult * (1 / (1 + 0.1 * (playerLevel - 94))) * xpPenalty end if mult > 0.01 then local line = level @@ -204,7 +205,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin end end end - self.controls.classDrop = new("DropDownControl", {"LEFT",self.controls.characterLevel,"RIGHT"}, 8, 0, 100, 20, nil, function(index, value) + self.controls.classDrop = new("DropDownControl", {"LEFT",self.controls.characterLevel,"RIGHT"}, {8, 0, 100, 20}, nil, function(index, value) if value.classId ~= self.spec.curClassId then if self.spec:CountAllocNodes() == 0 or self.spec:IsClassConnected(value.classId) then self.spec:SelectClass(value.classId) @@ -221,20 +222,20 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin end end end) - self.controls.ascendDrop = new("DropDownControl", {"LEFT",self.controls.classDrop,"RIGHT"}, 8, 0, 120, 20, nil, function(index, value) + self.controls.ascendDrop = new("DropDownControl", {"LEFT",self.controls.classDrop,"RIGHT"}, {8, 0, 120, 20}, nil, function(index, value) self.spec:SelectAscendClass(value.ascendClassId) self.spec:AddUndoState() self.spec:SetWindowTitleWithBuildClass() self.buildFlag = true end) -- // hiding away until we learn more, this dropdown and the Loadout dropdown conflict for UI space, will need to address if secondaryAscendancies come back - --self.controls.secondaryAscendDrop = new("DropDownControl", {"LEFT",self.controls.ascendDrop,"RIGHT"}, 8, 0, 120, 20, nil, function(index, value) + --self.controls.secondaryAscendDrop = new("DropDownControl", {"LEFT",self.controls.ascendDrop,"RIGHT"}, {8, 0, 120, 20}, nil, function(index, value) -- self.spec:SelectSecondaryAscendClass(value.ascendClassId) -- self.spec:AddUndoState() -- self.spec:SetWindowTitleWithBuildClass() -- self.buildFlag = true --end) - self.controls.buildLoadouts = new("DropDownControl", {"LEFT",self.controls.ascendDrop,"RIGHT"}, 8, 0, 190, 20, {}, function(index, value) + self.controls.buildLoadouts = new("DropDownControl", {"LEFT",self.controls.ascendDrop,"RIGHT"}, {8, 0, 190, 20}, {}, function(index, value) if value == "^7^7Loadouts:" or value == "^7^7-----" then self.controls.buildLoadouts:SetSel(1) return @@ -251,11 +252,11 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin end if value == "^7^7New Loadout" then local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter name for this loadout:") - controls.edit = new("EditControl", nil, 0, 40, 350, 20, "New Loadout", nil, nil, 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter name for this loadout:") + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, "New Loadout", nil, nil, 100, function(buf) controls.save.enabled = buf:match("%S") end) - controls.save = new("ButtonControl", nil, -45, 70, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, 70, 80, 20}, "Save", function() local loadout = controls.edit.buf local newSpec = new("PassiveSpec", self, latestTreeVersion) @@ -279,7 +280,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin main:ClosePopup() end) controls.save.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(370, 100, "Set Name", controls, "save", "edit", "cancel") @@ -350,7 +351,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin self.controls.buildLoadouts:SelByValue(value) end) - --self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.buildLoadouts,"RIGHT"}, 8, 0, 100, 20, "Similar Builds", function() + --self.controls.similarBuilds = new("ButtonControl", {"LEFT",self.controls.buildLoadouts,"RIGHT"}, {8, 0, 100, 20}, "Similar Builds", function() -- self:OpenSimilarPopup() --end) --self.controls.similarBuilds.tooltipFunc = function(tooltip) @@ -358,225 +359,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin -- tooltip:AddLine(16, "Search for builds similar to your current character.") -- tooltip:AddLine(16, "For best results, make sure to select your main item set, tree, and skills before opening the popup.") --end - - -- List of display stats - -- This defines the stats in the side bar, and also which stats show in node/item comparisons - -- This may be user-customisable in the future - self.displayStats = { - { stat = "ActiveMinionLimit", label = "Active Minion Limit", fmt = "d" }, - { stat = "AverageHit", label = "Average Hit", fmt = ".1f", compPercent = true }, - { stat = "PvpAverageHit", label = "PvP Average Hit", fmt = ".1f", compPercent = true, flag = "isPvP" }, - { stat = "AverageDamage", label = "Average Damage", fmt = ".1f", compPercent = true, flag = "attack" }, - { stat = "AverageDamage", label = "Average Damage", fmt = ".1f", compPercent = true, flag = "monsterExplode", condFunc = function(v,o) return o.HitChance ~= 100 end }, - { stat = "AverageBurstDamage", label = "Average Burst Damage", fmt = ".1f", compPercent = true, condFunc = function(v,o) return o.AverageBurstHits and o.AverageBurstHits > 1 and v > 0 end }, - { stat = "PvpAverageDamage", label = "PvP Average Damage", fmt = ".1f", compPercent = true, flag = "attackPvP" }, - { stat = "Speed", label = "Attack Rate", fmt = ".2f", compPercent = true, flag = "attack", condFunc = function(v,o) return v > 0 and (o.TriggerTime or 0) == 0 end }, - { stat = "Speed", label = "Cast Rate", fmt = ".2f", compPercent = true, flag = "spell", condFunc = function(v,o) return v > 0 and (o.TriggerTime or 0) == 0 end }, - { stat = "Speed", label = "Effective Trigger Rate", fmt = ".2f", compPercent = true, condFunc = function(v,o) return (o.TriggerTime or 0) ~= 0 end }, - { stat = "WarcryCastTime", label = "Cast Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, flag = "warcry" }, - { stat = "HitSpeed", label = "Hit Rate", fmt = ".2f", compPercent = true, condFunc = function(v,o) return not o.TriggerTime end }, - { stat = "HitTime", label = "Channel Time", fmt = ".2fs", compPercent = true, flag = "channelRelease", lowerIsBetter = true, condFunc = function(v,o) return not o.TriggerTime end }, - { stat = "ChannelTimeToTrigger", label = "Channel Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, }, - { stat = "TrapThrowingTime", label = "Trap Throwing Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, }, - { stat = "TrapCooldown", label = "Trap Cooldown", fmt = ".3fs", lowerIsBetter = true }, - { stat = "MineLayingTime", label = "Mine Throwing Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, }, - { stat = "TrapThrowCount", label = "Avg. Traps per Throw", fmt = ".2f"}, - { stat = "MineThrowCount", label = "Avg. Mines per Throw", fmt = ".2f"}, - { stat = "TotemPlacementTime", label = "Totem Placement Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return not o.TriggerTime end }, - { stat = "PreEffectiveCritChance", label = "Crit Chance", fmt = ".2f%%" }, - { stat = "CritChance", label = "Effective Crit Chance", fmt = ".2f%%", condFunc = function(v,o) return v ~= o.PreEffectiveCritChance end }, - { stat = "CritMultiplier", label = "Crit Multiplier", fmt = "d%%", pc = true, condFunc = function(v,o) return (o.CritChance or 0) > 0 end }, - { stat = "HitChance", label = "Hit Chance", fmt = ".0f%%", flag = "attack" }, - { stat = "HitChance", label = "Hit Chance", fmt = ".0f%%", condFunc = function(v,o) return o.enemyHasSpellBlock end }, - { stat = "TotalDPS", label = "Hit DPS", fmt = ".1f", compPercent = true, flag = "notAverage" }, - { stat = "PvpTotalDPS", label = "PvP Hit DPS", fmt = ".1f", compPercent = true, flag = "notAveragePvP" }, - { stat = "TotalDPS", label = "Hit DPS", fmt = ".1f", compPercent = true, flag = "showAverage", condFunc = function(v,o) return (o.TriggerTime or 0) ~= 0 end }, - { stat = "TotalDot", label = "DoT DPS", fmt = ".1f", compPercent = true }, - { stat = "WithDotDPS", label = "Total DPS inc. DoT", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.PoisonDPS or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "BleedDPS", label = "Bleed DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Bleed DPS exceeds in game limit" end }, - { stat = "CorruptingBloodDPS", label = "Corrupting Blood DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Corrupting Blood DPS exceeds in game limit" end }, - { stat = "BleedDamage", label = "Total Damage per Bleed", fmt = ".1f", compPercent = true, flag = "showAverage" }, - { stat = "WithBleedDPS", label = "Total DPS inc. Bleed", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.IgniteDPS or 0) == 0 end }, - { stat = "IgniteDPS", label = "Ignite DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Ignite DPS exceeds in game limit" end }, - { stat = "IgniteDamage", label = "Total Damage per Ignite", fmt = ".1f", compPercent = true, flag = "showAverage" }, - { stat = "BurningGroundDPS", label = "Burning Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Burning Ground DPS exceeds in game limit" end }, - { stat = "MirageBurningGroundDPS", label = "Mirage Burning Ground DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.BurningGroundDPS end, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Mirage Burning Ground DPS exceeds in game limit" end }, - { stat = "WithIgniteDPS", label = "Total DPS inc. Ignite", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "WithIgniteAverageDamage", label = "Average Dmg. inc. Ignite", fmt = ".1f", compPercent = true }, - { stat = "PoisonDPS", label = "Poison DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Poison DPS exceeds in game limit" end }, - { stat = "CausticGroundDPS", label = "Caustic Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Caustic Ground DPS exceeds in game limit" end }, - { stat = "MirageCausticGroundDPS", label = "Mirage Caustic Ground DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.CausticGroundDPS end, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Mirage Caustic Ground DPS exceeds in game limit" end }, - { stat = "PoisonDamage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true }, - { stat = "WithPoisonDPS", label = "Total DPS inc. Poison", fmt = ".1f", compPercent = true, flag = "poison", flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "DecayDPS", label = "Decay DPS", fmt = ".1f", compPercent = true }, - { stat = "TotalDotDPS", label = "Total DoT DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return o.showTotalDotDPS or ( v ~= o.TotalDot and v ~= o.TotalPoisonDPS and v ~= o.CausticGroundDPS and v ~= (o.TotalIgniteDPS or o.IgniteDPS) and v ~= o.BurningGroundDPS and v ~= o.BleedDPS and v~= o.CorruptingBloodDPS and v ~= o.MirageCausticGroundDPS and v ~= o.MirageBurningGroundDPS) end, warnFunc = function(v) return v >= data.misc.DotDpsCap and "DoT DPS exceeds in game limit" end }, - { stat = "ImpaleDPS", label = "Impale Damage", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage" }, - { stat = "WithImpaleDPS", label = "Damage inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "ImpaleDPS", label = "Impale DPS", fmt = ".1f", compPercent = true, flag = "impale", flag = "notAverage" }, - { stat = "WithImpaleDPS", label = "Total DPS inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "MirageDPS", label = "Total Mirage DPS", fmt = ".1f", compPercent = true, flag = "mirageArcher", condFunc = function(v,o) return v > 0 end }, - { stat = "MirageDPS", label = "Total Wisp DPS", fmt = ".1f", compPercent = true, flag = "wisp", condFunc = function(v,o) return v > 0 end }, - { stat = "CullingDPS", label = "Culling DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return (o.CullingDPS or 0) > 0 end }, - { stat = "ReservationDPS", label = "Reservation DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return (o.ReservationDPS or 0) > 0 end }, - { stat = "CombinedDPS", label = "Combined DPS", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= ((o.TotalDPS or 0) + (o.TotalDot or 0)) and v ~= o.WithImpaleDPS and ( o.showTotalDotDPS or ( v ~= o.WithPoisonDPS and v ~= o.WithIgniteDPS and v ~= o.WithBleedDPS ) ) end }, - { stat = "CombinedAvg", label = "Combined Total Damage", fmt = ".1f", compPercent = true, flag = "showAverage", condFunc = function(v,o) return (v ~= o.AverageDamage and (o.TotalDot or 0) == 0) and (v ~= o.WithPoisonDPS or v ~= o.WithIgniteDPS or v ~= o.WithBleedDPS) end }, - { stat = "ExplodeChance", label = "Total Explode Chance", fmt = ".0f%%" }, - { stat = "CombinedAvgToMonsterLife", label = "Enemy Life Equivalent", fmt = ".1f%%" }, - { stat = "Cooldown", label = "Skill Cooldown", fmt = ".3fs", lowerIsBetter = true }, - { stat = "SealCooldown", label = "Seal Gain Frequency", fmt = ".2fs", lowerIsBetter = true }, - { stat = "SealMax", label = "Max Number of Seals", fmt = "d" }, - { stat = "TimeMaxSeals", label = "Time to Gain Max Seals", fmt = ".2fs", lowerIsBetter = true }, - { stat = "AreaOfEffectRadiusMetres", label = "AoE Radius", fmt = ".1fm" }, - { stat = "BrandAttachmentRangeMetre", label = "Attachment Range", fmt = ".1fm", flag = "brand" }, - { stat = "BrandTicks", label = "Activations per Brand", fmt = "d", flag = "brand" }, - { stat = "ManaCost", label = "Mana Cost", fmt = "d", color = colorCodes.MANA, pool = "ManaUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaHasCost end }, - { stat = "ManaPercentCost", label = "Mana Cost", fmt = "d%%", color = colorCodes.MANA, pool = "ManaUnreservedPercent", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaPercentHasCost end }, - { stat = "ManaPerSecondCost", label = "Mana Cost per second", fmt = ".2f", color = colorCodes.MANA, pool = "ManaUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaPerSecondHasCost end }, - { stat = "ManaPercentPerSecondCost", label = "Mana Cost per second", fmt = ".2f%%", color = colorCodes.MANA, pool = "ManaUnreservedPercent", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaPercentPerSecondHasCost end }, - { stat = "LifeCost", label = "Life Cost", fmt = "d", color = colorCodes.LIFE, pool = "LifeUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.LifeHasCost end }, - { stat = "LifePercentCost", label = "Life Cost", fmt = "d%%", color = colorCodes.LIFE, pool = "LifeUnreservedPercent", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.LifePercentHasCost end }, - { stat = "LifePerSecondCost", label = "Life Cost per second", fmt = ".2f", color = colorCodes.LIFE, pool = "LifeUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.LifePerSecondHasCost end }, - { stat = "LifePercentPerSecondCost", label = "Life Cost per second", fmt = ".2f%%", color = colorCodes.LIFE, pool = "LifeUnreservedPercent", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.LifePercentPerSecondHasCost end }, - { stat = "ESCost", label = "Energy Shield Cost", fmt = "d", color = colorCodes.ES, pool = "EnergyShield", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ESHasCost end }, - { stat = "ESPerSecondCost", label = "ES Cost per second", fmt = ".2f", color = colorCodes.ES, pool = "EnergyShield", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ESPerSecondHasCost end }, - { stat = "ESPercentPerSecondCost", label = "ES Cost per second", fmt = ".2f%%", color = colorCodes.ES, compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ESPercentPerSecondHasCost end }, - { stat = "RageCost", label = "Rage Cost", fmt = "d", color = colorCodes.RAGE, pool = "Rage", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.RageHasCost end }, - { stat = "RagePerSecondCost", label = "Rage Cost per second", fmt = ".2f", color = colorCodes.RAGE, pool = "Rage", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.RagePerSecondHasCost end }, - { stat = "SoulCost", label = "Soul Cost", fmt = "d", color = colorCodes.RAGE, pool = "Soul", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.SoulHasCost end }, - { }, - { stat = "Str", label = "Strength", color = colorCodes.STRENGTH, fmt = "d" }, - { stat = "ReqStr", label = "Strength Required", color = colorCodes.STRENGTH, fmt = "d", lowerIsBetter = true, condFunc = function(v,o) return v > o.Str end, warnFunc = function(v) return "You do not meet the Strength requirement" end }, - { stat = "Dex", label = "Dexterity", color = colorCodes.DEXTERITY, fmt = "d" }, - { stat = "ReqDex", label = "Dexterity Required", color = colorCodes.DEXTERITY, fmt = "d", lowerIsBetter = true, condFunc = function(v,o) return v > o.Dex end, warnFunc = function(v) return "You do not meet the Dexterity requirement" end }, - { stat = "Int", label = "Intelligence", color = colorCodes.INTELLIGENCE, fmt = "d" }, - { stat = "ReqInt", label = "Intelligence Required", color = colorCodes.INTELLIGENCE, fmt = "d", lowerIsBetter = true, condFunc = function(v,o) return v > o.Int end, warnFunc = function(v) return "You do not meet the Intelligence requirement" end }, - { stat = "Omni", label = "Omniscience", color = colorCodes.RARE, fmt = "d" }, - { stat = "ReqOmni", label = "Omniscience Required", color = colorCodes.RARE, fmt = "d", lowerIsBetter = true, condFunc = function(v,o) return v > (o.Omni or 0) end, warnFunc = function(v) return "You do not meet the Omniscience requirement" end }, - { }, - { stat = "Devotion", label = "Devotion", color = colorCodes.RARE, fmt = "d" }, - { }, - { stat = "TotalEHP", label = "Effective Hit Pool", fmt = ".0f", compPercent = true }, - { stat = "PvPTotalTakenHit", label = "PvP Hit Taken", fmt = ".1f", flag = "isPvP", lowerIsBetter = true }, - { stat = "PhysicalMaximumHitTaken", label = "Phys Max Hit", fmt = ".0f", color = colorCodes.PHYS, compPercent = true, }, - { stat = "LightningMaximumHitTaken", label = "Elemental Max Hit", fmt = ".0f", color = colorCodes.LIGHTNING, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken == o.ColdMaximumHitTaken and o.LightningMaximumHitTaken == o.FireMaximumHitTaken end }, - { stat = "FireMaximumHitTaken", label = "Fire Max Hit", fmt = ".0f", color = colorCodes.FIRE, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken ~= o.ColdMaximumHitTaken or o.LightningMaximumHitTaken ~= o.FireMaximumHitTaken end }, - { stat = "ColdMaximumHitTaken", label = "Cold Max Hit", fmt = ".0f", color = colorCodes.COLD, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken ~= o.ColdMaximumHitTaken or o.LightningMaximumHitTaken ~= o.FireMaximumHitTaken end }, - { stat = "LightningMaximumHitTaken", label = "Lightning Max Hit", fmt = ".0f", color = colorCodes.LIGHTNING, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken ~= o.ColdMaximumHitTaken or o.LightningMaximumHitTaken ~= o.FireMaximumHitTaken end }, - { stat = "ChaosMaximumHitTaken", label = "Chaos Max Hit", fmt = ".0f", color = colorCodes.CHAOS, compPercent = true }, - { }, - { stat = "MainHand", childStat = "Accuracy", label = "MH Accuracy", fmt = "d", condFunc = function(v,o) return o.PreciseTechnique end, warnFunc = function(v,o) return v < o.Life and "You do not have enough Accuracy for Precise Technique" end, warnColor = true }, - { stat = "OffHand", childStat = "Accuracy", label = "OH Accuracy", fmt = "d", condFunc = function(v,o) return o.PreciseTechnique end, warnFunc = function(v,o) return v < o.Life and "You do not have enough Accuracy for Precise Technique" end, warnColor = true }, - { stat = "Life", label = "Total Life", fmt = "d", color = colorCodes.LIFE, compPercent = true }, - { stat = "Spec:LifeInc", label = "%Inc Life from Tree", fmt = "d%%", color = colorCodes.LIFE, condFunc = function(v,o) return v > 0 and o.Life > 1 end }, - { stat = "LifeUnreserved", label = "Unreserved Life", fmt = "d", color = colorCodes.LIFE, condFunc = function(v,o) return v < o.Life end, compPercent = true, warnFunc = function(v) return v <= 0 and "Your unreserved Life is below 1" end }, - { stat = "LifeRecoverable", label = "Life Recoverable", fmt = "d", color = colorCodes.LIFE, condFunc = function(v,o) return v < o.LifeUnreserved end, }, - { stat = "LifeUnreservedPercent", label = "Unreserved Life", fmt = "d%%", color = colorCodes.LIFE, condFunc = function(v,o) return v < 100 end }, - { stat = "LifeRegenRecovery", label = "Life Regen", fmt = ".1f", color = colorCodes.LIFE, condFunc = function(v,o) return o.LifeRecovery <= 0 and o.LifeRegenRecovery ~= 0 end }, - { stat = "LifeRegenRecovery", label = "Life Recovery", fmt = ".1f", color = colorCodes.LIFE, condFunc = function(v,o) return o.LifeRecovery > 0 and o.LifeRegenRecovery ~= 0 end }, - { stat = "LifeLeechGainRate", label = "Life Leech/On Hit Rate", fmt = ".1f", color = colorCodes.LIFE, compPercent = true }, - { stat = "LifeLeechGainPerHit", label = "Life Leech/Gain per Hit", fmt = ".1f", color = colorCodes.LIFE, compPercent = true }, - { }, - { stat = "Mana", label = "Total Mana", fmt = "d", color = colorCodes.MANA, compPercent = true }, - { stat = "Spec:ManaInc", label = "%Inc Mana from Tree", color = colorCodes.MANA, fmt = "d%%" }, - { stat = "ManaUnreserved", label = "Unreserved Mana", fmt = "d", color = colorCodes.MANA, condFunc = function(v,o) return v < o.Mana end, compPercent = true, warnFunc = function(v) return v < 0 and "Your unreserved Mana is negative" end }, - { stat = "ManaUnreservedPercent", label = "Unreserved Mana", fmt = "d%%", color = colorCodes.MANA, condFunc = function(v,o) return v < 100 end }, - { stat = "ManaRegenRecovery", label = "Mana Regen", fmt = ".1f", color = colorCodes.MANA, condFunc = function(v,o) return o.ManaRecovery <= 0 and o.ManaRegenRecovery ~= 0 end }, - { stat = "ManaRegenRecovery", label = "Mana Recovery", fmt = ".1f", color = colorCodes.MANA, condFunc = function(v,o) return o.ManaRecovery > 0 and o.ManaRegenRecovery ~= 0 end }, - { stat = "ManaLeechGainRate", label = "Mana Leech/On Hit Rate", fmt = ".1f", color = colorCodes.MANA, compPercent = true }, - { stat = "ManaLeechGainPerHit", label = "Mana Leech/Gain per Hit", fmt = ".1f", color = colorCodes.MANA, compPercent = true }, - { }, - { stat = "EnergyShield", label = "Energy Shield", fmt = "d", color = colorCodes.ES, compPercent = true }, - { stat = "EnergyShieldRecoveryCap", label = "Recoverable ES", color = colorCodes.ES, fmt = "d", condFunc = function(v,o) return o.CappingES end }, - { stat = "Spec:EnergyShieldInc", label = "%Inc ES from Tree", color = colorCodes.ES, fmt = "d%%" }, - { stat = "EnergyShieldRegenRecovery", label = "ES Regen", color = colorCodes.ES, fmt = ".1f", condFunc = function(v,o) return o.EnergyShieldRecovery <= 0 and o.EnergyShieldRegenRecovery ~= 0 end }, - { stat = "EnergyShieldRegenRecovery", label = "ES Recovery", color = colorCodes.ES, fmt = ".1f", condFunc = function(v,o) return o.EnergyShieldRecovery > 0 and o.EnergyShieldRegenRecovery ~= 0 end }, - { stat = "EnergyShieldLeechGainRate", label = "ES Leech/On Hit Rate", color = colorCodes.ES, fmt = ".1f", compPercent = true }, - { stat = "EnergyShieldLeechGainPerHit", label = "ES Leech/Gain per Hit", color = colorCodes.ES, fmt = ".1f", compPercent = true }, - { }, - { stat = "Ward", label = "Ward", fmt = "d", color = colorCodes.WARD, compPercent = true }, - { }, - { stat = "Rage", label = "Rage", fmt = "d", color = colorCodes.RAGE, compPercent = true }, - { stat = "RageRegenRecovery", label = "Rage Regen", fmt = ".1f", color = colorCodes.RAGE, compPercent = true }, - { }, - { stat = "TotalBuildDegen", label = "Total Degen", fmt = ".1f", lowerIsBetter = true }, - { stat = "TotalNetRegen", label = "Total Net Recovery", fmt = "+.1f" }, - { stat = "NetLifeRegen", label = "Net Life Recovery", fmt = "+.1f", color = colorCodes.LIFE }, - { stat = "NetManaRegen", label = "Net Mana Recovery", fmt = "+.1f", color = colorCodes.MANA }, - { stat = "NetEnergyShieldRegen", label = "Net ES Recovery", fmt = "+.1f", color = colorCodes.ES }, - { }, - { stat = "Evasion", label = "Evasion rating", fmt = "d", color = colorCodes.EVASION, compPercent = true }, - { stat = "Spec:EvasionInc", label = "%Inc Evasion from Tree", color = colorCodes.EVASION, fmt = "d%%" }, - { stat = "MeleeEvadeChance", label = "Evade Chance", fmt = "d%%", color = colorCodes.EVASION, condFunc = function(v,o) return v > 0 and o.MeleeEvadeChance == o.ProjectileEvadeChance end }, - { stat = "MeleeEvadeChance", label = "Melee Evade Chance", fmt = "d%%", color = colorCodes.EVASION, condFunc = function(v,o) return v > 0 and o.MeleeEvadeChance ~= o.ProjectileEvadeChance end }, - { stat = "ProjectileEvadeChance", label = "Projectile Evade Chance", fmt = "d%%", color = colorCodes.EVASION, condFunc = function(v,o) return v > 0 and o.MeleeEvadeChance ~= o.ProjectileEvadeChance end }, - { }, - { stat = "Armour", label = "Armour", fmt = "d", compPercent = true }, - { stat = "Spec:ArmourInc", label = "%Inc Armour from Tree", fmt = "d%%" }, - { stat = "PhysicalDamageReduction", label = "Phys. Damage Reduction", fmt = "d%%", condFunc = function() return true end }, - { }, - { stat = "EffectiveBlockChance", label = "Block Chance", fmt = "d%%", overCapStat = "BlockChanceOverCap" }, - { stat = "EffectiveSpellBlockChance", label = "Spell Block Chance", fmt = "d%%", overCapStat = "SpellBlockChanceOverCap" }, - { stat = "AttackDodgeChance", label = "Attack Dodge Chance", fmt = "d%%", overCapStat = "AttackDodgeChanceOverCap" }, - { stat = "SpellDodgeChance", label = "Spell Dodge Chance", fmt = "d%%", overCapStat = "SpellDodgeChanceOverCap" }, - { stat = "EffectiveSpellSuppressionChance", label = "Spell Suppression Chance", fmt = "d%%", overCapStat = "SpellSuppressionChanceOverCap" }, - { }, - { stat = "FireResist", label = "Fire Resistance", fmt = "d%%", color = colorCodes.FIRE, condFunc = function() return true end, overCapStat = "FireResistOverCap"}, - { stat = "FireResistOverCap", label = "Fire Res. Over Max", fmt = "d%%", hideStat = true }, - { stat = "ColdResist", label = "Cold Resistance", fmt = "d%%", color = colorCodes.COLD, condFunc = function() return true end, overCapStat = "ColdResistOverCap" }, - { stat = "ColdResistOverCap", label = "Cold Res. Over Max", fmt = "d%%", hideStat = true }, - { stat = "LightningResist", label = "Lightning Resistance", fmt = "d%%", color = colorCodes.LIGHTNING, condFunc = function() return true end, overCapStat = "LightningResistOverCap" }, - { stat = "LightningResistOverCap", label = "Lightning Res. Over Max", fmt = "d%%", hideStat = true }, - { stat = "ChaosResist", label = "Chaos Resistance", fmt = "d%%", color = colorCodes.CHAOS, condFunc = function(v,o) return not o.ChaosInoculation end, overCapStat = "ChaosResistOverCap" }, - { stat = "ChaosResistOverCap", label = "Chaos Res. Over Max", fmt = "d%%", hideStat = true }, - { label = "Chaos Resistance", val = "Immune", labelStat = "ChaosResist", color = colorCodes.CHAOS, condFunc = function(o) return o.ChaosInoculation end }, - { }, - { stat = "EffectiveMovementSpeedMod", label = "Movement Speed Modifier", fmt = "+d%%", mod = true, condFunc = function() return true end }, - { }, - { stat = "FullDPS", label = "Full DPS", fmt = ".1f", color = colorCodes.CURRENCY, compPercent = true }, - { stat = "FullDotDPS", label = "Full Dot DPS", fmt = ".1f", color = colorCodes.CURRENCY, compPercent = true, condFunc = function (v) return v >= data.misc.DotDpsCap end, warnFunc = function (v) return "Full Dot DPS exceeds in game limit" end }, - { }, - { stat = "SkillDPS", label = "Skill DPS", condFunc = function() return true end }, - } - self.minionDisplayStats = { - { stat = "AverageDamage", label = "Average Damage", fmt = ".1f", compPercent = true }, - { stat = "Speed", label = "Attack/Cast Rate", fmt = ".2f", compPercent = true, condFunc = function(v,o) return v > 0 and (o.TriggerTime or 0) == 0 end }, - { stat = "HitSpeed", label = "Hit Rate", fmt = ".2f" }, - { stat = "Speed", label = "Effective Trigger Rate", fmt = ".2f", compPercent = true, condFunc = function(v,o) return (o.TriggerTime or 0) ~= 0 end }, - { stat = "TotalDPS", label = "Hit DPS", fmt = ".1f", compPercent = true }, - { stat = "TotalDot", label = "DoT DPS", fmt = ".1f", compPercent = true }, - { stat = "WithDotDPS", label = "Total DPS inc. DoT", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDPS and (o.PoisonDPS or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "BleedDPS", label = "Bleed DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Minion Bleed DPS exceeds in game limit" end }, - { stat = "WithBleedDPS", label = "Total DPS inc. Bleed", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.IgniteDPS or 0) == 0 end }, - { stat = "IgniteDPS", label = "Ignite DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Minion Ignite DPS exceeds in game limit" end }, - { stat = "WithIgniteDPS", label = "Total DPS inc. Ignite", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "PoisonDPS", label = "Poison DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Minion Poison dps exceeds in game limit" end }, - { stat = "PoisonDamage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true }, - { stat = "WithPoisonDPS", label = "Total DPS inc. Poison", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "DecayDPS", label = "Decay DPS", fmt = ".1f", compPercent = true }, - { stat = "TotalDotDPS", label = "Total DoT DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDot and v ~= o.ImpaleDPS and v ~= o.TotalPoisonDPS and v ~= (o.TotalIgniteDPS or o.IgniteDPS) and v ~= o.BleedDPS end, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Minion DoT DPS exceeds in game limit" end }, - { stat = "ImpaleDPS", label = "Impale DPS", fmt = ".1f", compPercent = true, flag = "impale" }, - { stat = "WithImpaleDPS", label = "Total DPS inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, - { stat = "CullingDPS", label = "Culling DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return (o.CullingDPS or 0) > 0 end }, - { stat = "ReservationDPS", label = "Reservation DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return (o.ReservationDPS or 0) > 0 end }, - { stat = "CombinedDPS", label = "Combined DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= ((o.TotalDPS or 0) + (o.TotalDot or 0)) and v ~= o.WithImpaleDPS and v ~= o.WithPoisonDPS and v ~= o.WithIgniteDPS and v ~= o.WithBleedDPS end}, - { stat = "Cooldown", label = "Skill Cooldown", fmt = ".3fs", lowerIsBetter = true }, - { stat = "Life", label = "Total Life", fmt = ".1f", color = colorCodes.LIFE, compPercent = true }, - { stat = "LifeRegenRecovery", label = "Life Recovery", fmt = ".1f", color = colorCodes.LIFE }, - { stat = "LifeLeechGainRate", label = "Life Leech/On Hit Rate", fmt = ".1f", color = colorCodes.LIFE, compPercent = true }, - { stat = "EnergyShield", label = "Energy Shield", fmt = "d", color = colorCodes.ES, compPercent = true }, - { stat = "EnergyShieldRegenRecovery", label = "ES Recovery", fmt = ".1f", color = colorCodes.ES }, - { stat = "EnergyShieldLeechGainRate", label = "ES Leech/On Hit Rate", fmt = ".1f", color = colorCodes.ES, compPercent = true }, - } - self.extraSaveStats = { - "PowerCharges", - "PowerChargesMax", - "FrenzyCharges", - "FrenzyChargesMax", - "EnduranceCharges", - "EnduranceChargesMax", - "ActiveTotemLimit", - "ActiveMinionLimit", - } + if buildName == "~~temp~~" then -- Remove temporary build file os.remove(self.dbFileName) @@ -586,43 +369,46 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin self.modFlag = true end + -- List of display stats + self.displayStats, self.minionDisplayStats, self.extraSaveStats = LoadModule("Modules/BuildDisplayStats") + -- Controls: Side bar - self.anchorSideBar = new("Control", nil, 4, 36, 0, 0) - self.controls.modeImport = new("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 0, 134, 20, "Import/Export Build", function() + self.anchorSideBar = new("Control", nil, {4, 36, 0, 0}) + self.controls.modeImport = new("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, {0, 0, 134, 20}, "Import/Export Build", function() self.viewMode = "IMPORT" end) self.controls.modeImport.locked = function() return self.viewMode == "IMPORT" end - self.controls.modeNotes = new("ButtonControl", {"LEFT",self.controls.modeImport,"RIGHT"}, 4, 0, 58, 20, "Notes", function() + self.controls.modeNotes = new("ButtonControl", {"LEFT",self.controls.modeImport,"RIGHT"}, {4, 0, 58, 20}, "Notes", function() self.viewMode = "NOTES" end) self.controls.modeNotes.locked = function() return self.viewMode == "NOTES" end - self.controls.modeConfig = new("ButtonControl", {"TOPRIGHT",self.anchorSideBar,"TOPLEFT"}, 300, 0, 100, 20, "Configuration", function() + self.controls.modeConfig = new("ButtonControl", {"TOPRIGHT",self.anchorSideBar,"TOPLEFT"}, {300, 0, 100, 20}, "Configuration", function() self.viewMode = "CONFIG" end) self.controls.modeConfig.locked = function() return self.viewMode == "CONFIG" end - self.controls.modeTree = new("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 26, 72, 20, "Tree", function() + self.controls.modeTree = new("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, {0, 26, 72, 20}, "Tree", function() self.viewMode = "TREE" end) self.controls.modeTree.locked = function() return self.viewMode == "TREE" end - self.controls.modeSkills = new("ButtonControl", {"LEFT",self.controls.modeTree,"RIGHT"}, 4, 0, 72, 20, "Skills", function() + self.controls.modeSkills = new("ButtonControl", {"LEFT",self.controls.modeTree,"RIGHT"}, {4, 0, 72, 20}, "Skills", function() self.viewMode = "SKILLS" end) self.controls.modeSkills.locked = function() return self.viewMode == "SKILLS" end - self.controls.modeItems = new("ButtonControl", {"LEFT",self.controls.modeSkills,"RIGHT"}, 4, 0, 72, 20, "Items", function() + self.controls.modeItems = new("ButtonControl", {"LEFT",self.controls.modeSkills,"RIGHT"}, {4, 0, 72, 20}, "Items", function() self.viewMode = "ITEMS" end) self.controls.modeItems.locked = function() return self.viewMode == "ITEMS" end - self.controls.modeCalcs = new("ButtonControl", {"LEFT",self.controls.modeItems,"RIGHT"}, 4, 0, 72, 20, "Calcs", function() + self.controls.modeCalcs = new("ButtonControl", {"LEFT",self.controls.modeItems,"RIGHT"}, {4, 0, 72, 20}, "Calcs", function() self.viewMode = "CALCS" end) self.controls.modeCalcs.locked = function() return self.viewMode == "CALCS" end - self.controls.modeParty = new("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 52, 72, 20, "Party", function() + self.controls.modeParty = new("ButtonControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, {0, 52, 72, 20}, "Party", function() self.viewMode = "PARTY" end) self.controls.modeParty.locked = function() return self.viewMode == "PARTY" end -- Skills - self.controls.mainSkillLabel = new("LabelControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, 0, 80, 300, 16, "^7Main Skill:") - self.controls.mainSocketGroup = new("DropDownControl", {"TOPLEFT",self.controls.mainSkillLabel,"BOTTOMLEFT"}, 0, 2, 300, 18, nil, function(index, value) + self.controls.mainSkillLabel = new("LabelControl", {"TOPLEFT",self.anchorSideBar,"TOPLEFT"}, {0, 80, 300, 16}, "^7Main Skill:") + self.controls.mainSocketGroup = new("DropDownControl", {"TOPLEFT",self.controls.mainSkillLabel,"BOTTOMLEFT"}, {0, 2, 300, 18}, nil, function(index, value) self.mainSocketGroup = index self.modFlag = true self.buildFlag = true @@ -634,44 +420,44 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin self.skillsTab:AddSocketGroupTooltip(tooltip, socketGroup) end end - self.controls.mainSkill = new("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, 0, 2, 300, 18, nil, function(index, value) + self.controls.mainSkill = new("DropDownControl", {"TOPLEFT",self.controls.mainSocketGroup,"BOTTOMLEFT"}, {0, 2, 300, 18}, nil, function(index, value) local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] mainSocketGroup.mainActiveSkill = index self.modFlag = true self.buildFlag = true end) - self.controls.mainSkillPart = new("DropDownControl", {"TOPLEFT",self.controls.mainSkill,"BOTTOMLEFT",true}, 0, 2, 300, 18, nil, function(index, value) + self.controls.mainSkillPart = new("DropDownControl", {"TOPLEFT",self.controls.mainSkill,"BOTTOMLEFT",true}, {0, 2, 300, 18}, nil, function(index, value) local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] local srcInstance = mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeEffect.srcInstance srcInstance.skillPart = index self.modFlag = true self.buildFlag = true end) - self.controls.mainSkillStageCountLabel = new("LabelControl", {"TOPLEFT",self.controls.mainSkillPart,"BOTTOMLEFT",true}, 0, 3, 0, 16, "^7Stages:") { + self.controls.mainSkillStageCountLabel = new("LabelControl", {"TOPLEFT",self.controls.mainSkillPart,"BOTTOMLEFT",true}, {0, 3, 0, 16}, "^7Stages:") { shown = function() return self.controls.mainSkillStageCount:IsShown() end, } - self.controls.mainSkillStageCount = new("EditControl", {"LEFT",self.controls.mainSkillStageCountLabel,"RIGHT",true}, 2, 0, 60, 18, nil, nil, "%D", nil, function(buf) + self.controls.mainSkillStageCount = new("EditControl", {"LEFT",self.controls.mainSkillStageCountLabel,"RIGHT",true}, {2, 0, 60, 18}, nil, nil, "%D", nil, function(buf) local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] local srcInstance = mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeEffect.srcInstance srcInstance.skillStageCount = tonumber(buf) self.modFlag = true self.buildFlag = true end) - self.controls.mainSkillMineCountLabel = new("LabelControl", {"TOPLEFT",self.controls.mainSkillStageCountLabel,"BOTTOMLEFT",true}, 0, 3, 0, 16, "^7Active Mines:") { + self.controls.mainSkillMineCountLabel = new("LabelControl", {"TOPLEFT",self.controls.mainSkillStageCountLabel,"BOTTOMLEFT",true}, {0, 3, 0, 16}, "^7Active Mines:") { shown = function() return self.controls.mainSkillMineCount:IsShown() end, } - self.controls.mainSkillMineCount = new("EditControl", {"LEFT",self.controls.mainSkillMineCountLabel,"RIGHT",true}, 2, 0, 60, 18, nil, nil, "%D", nil, function(buf) + self.controls.mainSkillMineCount = new("EditControl", {"LEFT",self.controls.mainSkillMineCountLabel,"RIGHT",true}, {2, 0, 60, 18}, nil, nil, "%D", nil, function(buf) local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] local srcInstance = mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeEffect.srcInstance srcInstance.skillMineCount = tonumber(buf) self.modFlag = true self.buildFlag = true end) - self.controls.mainSkillMinion = new("DropDownControl", {"TOPLEFT",self.controls.mainSkillMineCountLabel,"BOTTOMLEFT",true}, 0, 3, 178, 18, nil, function(index, value) + self.controls.mainSkillMinion = new("DropDownControl", {"TOPLEFT",self.controls.mainSkillMineCountLabel,"BOTTOMLEFT",true}, {0, 3, 178, 18}, nil, function(index, value) local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] local srcInstance = mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeEffect.srcInstance if value.itemSetId then @@ -700,24 +486,24 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin tooltip:AddLine(14, colorCodes.TIP.."Tip: You can drag items from the Items tab onto this dropdown to equip them onto the minion.") end end - self.controls.mainSkillMinionLibrary = new("ButtonControl", {"LEFT",self.controls.mainSkillMinion,"RIGHT"}, 2, 0, 120, 18, "Manage Spectres...", function() + self.controls.mainSkillMinionLibrary = new("ButtonControl", {"LEFT",self.controls.mainSkillMinion,"RIGHT"}, {2, 0, 120, 18}, "Manage Spectres...", function() self:OpenSpectreLibrary() end) - self.controls.mainSkillMinionSkill = new("DropDownControl", {"TOPLEFT",self.controls.mainSkillMinion,"BOTTOMLEFT",true}, 0, 2, 200, 16, nil, function(index, value) + self.controls.mainSkillMinionSkill = new("DropDownControl", {"TOPLEFT",self.controls.mainSkillMinion,"BOTTOMLEFT",true}, {0, 2, 200, 16}, nil, function(index, value) local mainSocketGroup = self.skillsTab.socketGroupList[self.mainSocketGroup] local srcInstance = mainSocketGroup.displaySkillList[mainSocketGroup.mainActiveSkill].activeEffect.srcInstance srcInstance.skillMinionSkill = index self.modFlag = true self.buildFlag = true end) - self.controls.statBoxAnchor = new("Control", {"TOPLEFT",self.controls.mainSkillMinionSkill,"BOTTOMLEFT",true}, 0, 2, 0, 0) - self.controls.statBox = new("TextListControl", {"TOPLEFT",self.controls.statBoxAnchor,"BOTTOMLEFT"}, 0, 2, 300, 0, {{x=170,align="RIGHT_X"},{x=174,align="LEFT"}}) + self.controls.statBoxAnchor = new("Control", {"TOPLEFT",self.controls.mainSkillMinionSkill,"BOTTOMLEFT",true}, {0, 2, 0, 0}) + self.controls.statBox = new("TextListControl", {"TOPLEFT",self.controls.statBoxAnchor,"BOTTOMLEFT"}, {0, 2, 300, 0}, {{x=170,align="RIGHT_X"},{x=174,align="LEFT"}}) self.controls.statBox.height = function(control) local x, y = control:GetPos() local warnHeight = main.showWarnings and #self.controls.warnings.lines > 0 and 18 or 0 return main.screenH - main.mainBarHeight - 4 - y - warnHeight end - self.controls.warnings = new("Control",{"TOPLEFT",self.controls.statBox,"BOTTOMLEFT",true}, 0, 0, 0, 18) + self.controls.warnings = new("Control",{"TOPLEFT",self.controls.statBox,"BOTTOMLEFT",true}, {0, 0, 0, 18}) self.controls.warnings.lines = {} self.controls.warnings.width = function(control) return control.str and DrawStringWidth(16, "FIXED", control.str) + 8 or 0 @@ -1020,11 +806,11 @@ function buildMode:SyncLoadouts() local linkMatch = string.match(treeName, "%{(%w+)%}") or treeName if linkMatch then local skillName = self.skillsTab.skillSets[self.skillsTab.activeSkillSetId].title or "Default" - local skillMatch = oneSkill or skillName:find(linkMatch) + local skillMatch = oneSkill or skillName:find(linkMatch, 1, true) local itemName = self.itemsTab.itemSets[self.itemsTab.activeItemSetId].title or "Default" - local itemMatch = oneItem or itemName:find(linkMatch) + local itemMatch = oneItem or itemName:find(linkMatch, 1, true) local configName = self.configTab.configSets[self.configTab.activeConfigSetId].title or "Default" - local configMatch = oneConfig or configName:find(linkMatch) + local configMatch = oneConfig or configName:find(linkMatch, 1, true) if skillMatch and itemMatch and configMatch then self.controls.buildLoadouts:SetSel(i) @@ -1378,24 +1164,24 @@ end function buildMode:OpenConversionPopup() local controls = { } local currentVersion = treeVersions[latestTreeVersion].display - controls.note = new("LabelControl", nil, 0, 20, 0, 16, colorCodes.TIP..[[ + controls.note = new("LabelControl", nil, {0, 20, 0, 16}, colorCodes.TIP..[[ Info:^7 You are trying to load a build created for a version of Path of Exile that is not supported by us. You will have to convert it to the current game version to load it. To use a build newer than the current supported game version, you may have to update. To use a build older than the current supported game version, we recommend loading it in an older version of Path of Building Community instead. ]]) - controls.label = new("LabelControl", nil, 0, 110, 0, 16, colorCodes.WARNING..[[ + controls.label = new("LabelControl", nil, {0, 110, 0, 16}, colorCodes.WARNING..[[ Warning:^7 Converting a build to a different game version may have side effects. For example, if the passive tree has changed, then some passives may be deallocated. You should create a backup copy of the build before proceeding. ]]) - controls.convert = new("ButtonControl", nil, -40, 170, 120, 20, "Convert to ".. currentVersion, function() + controls.convert = new("ButtonControl", nil, {-40, 170, 120, 20}, "Convert to ".. currentVersion, function() main:ClosePopup() self:Shutdown() self:Init(self.dbFileName, self.buildName, nil, true) end) - controls.cancel = new("ButtonControl", nil, 60, 170, 70, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {60, 170, 70, 20}, "Cancel", function() main:ClosePopup() self:CloseBuild() end) @@ -1409,13 +1195,13 @@ function buildMode:OpenSavePopup(mode) ["UPDATE"] = "before updating?", } local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7This build has unsaved changes.\nDo you want to save them "..modeDesc[mode]) - controls.save = new("ButtonControl", nil, -90, 70, 80, 20, "Save", function() + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7This build has unsaved changes.\nDo you want to save them "..modeDesc[mode]) + controls.save = new("ButtonControl", nil, {-90, 70, 80, 20}, "Save", function() main:ClosePopup() self.actionOnSave = mode self:SaveDBFile() end) - controls.noSave = new("ButtonControl", nil, 0, 70, 80, 20, "Don't Save", function() + controls.noSave = new("ButtonControl", nil, {0, 70, 80, 20}, "Don't Save", function() main:ClosePopup() if mode == "LIST" then self:CloseBuild() @@ -1425,7 +1211,7 @@ function buildMode:OpenSavePopup(mode) launch:ApplyUpdate(launch.updateAvailable) end end) - controls.close = new("ButtonControl", nil, 90, 70, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {90, 70, 80, 20}, "Cancel", function() main:ClosePopup() end) main:OpenPopup(300, 100, "Save Changes", controls) @@ -1448,23 +1234,23 @@ function buildMode:OpenSaveAsPopup() end end end - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter new build name:") - controls.edit = new("EditControl", nil, 0, 40, 450, 20, + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter new build name:") + controls.edit = new("EditControl", nil, {0, 40, 450, 20}, (self.buildName or self.dbFileName):gsub("[\\/:%*%?\"<>|%c]", "-"), nil, "\\/:%*%?\"<>|%c", 100, function(buf) updateBuildName() end) - controls.folderLabel = new("LabelControl", {"TOPLEFT",nil,"TOPLEFT"}, 10, 70, 0, 16, "^7Folder:") - controls.newFolder = new("ButtonControl", {"TOPLEFT",nil,"TOPLEFT"}, 100, 67, 94, 20, "New Folder...", function() + controls.folderLabel = new("LabelControl", {"TOPLEFT",nil,"TOPLEFT"}, {10, 70, 0, 16}, "^7Folder:") + controls.newFolder = new("ButtonControl", {"TOPLEFT",nil,"TOPLEFT"}, {100, 67, 94, 20}, "New Folder...", function() main:OpenNewFolderPopup(main.buildPath..controls.folder.subPath, function(newFolderName) if newFolderName then controls.folder:OpenFolder(newFolderName) end end) end) - controls.folder = new("FolderListControl", nil, 0, 115, 450, 100, self.dbFileSubPath, function(subPath) + controls.folder = new("FolderListControl", nil, {0, 115, 450, 100}, self.dbFileSubPath, function(subPath) updateBuildName() end) - controls.save = new("ButtonControl", nil, -45, 225, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, 225, 80, 20}, "Save", function() main:ClosePopup() self.dbFileName = newFileName self.buildName = newBuildName @@ -1472,7 +1258,7 @@ function buildMode:OpenSaveAsPopup() self:SaveDBFile() self.spec:SetWindowTitleWithBuildClass() end) - controls.close = new("ButtonControl", nil, 45, 225, 80, 20, "Cancel", function() + controls.close = new("ButtonControl", nil, {45, 225, 80, 20}, "Cancel", function() main:ClosePopup() self.actionOnSave = nil end) @@ -1502,19 +1288,19 @@ function buildMode:OpenSpectreLibrary() end end) local controls = { } - controls.list = new("MinionListControl", nil, -100, 40, 190, 250, self.data, destList) - controls.source = new("MinionSearchListControl", nil, 100, 60, 190, 230, self.data, sourceList, controls.list) - controls.save = new("ButtonControl", nil, -45, 330, 80, 20, "Save", function() + controls.list = new("MinionListControl", nil, {-100, 40, 190, 250}, self.data, destList) + controls.source = new("MinionSearchListControl", nil, {100, 60, 190, 230}, self.data, sourceList, controls.list) + controls.save = new("ButtonControl", nil, {-45, 330, 80, 20}, "Save", function() self.spectreList = destList self.modFlag = true self.buildFlag = true main:ClosePopup() end) - controls.cancel = new("ButtonControl", nil, 45, 330, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 330, 80, 20}, "Cancel", function() main:ClosePopup() end) - controls.noteLine1 = new("LabelControl", {"TOPLEFT",controls.list,"BOTTOMLEFT"}, 24, 2, 0, 16, "Spectres in your Library must be assigned to an active") - controls.noteLine2 = new("LabelControl", {"TOPLEFT",controls.list,"BOTTOMLEFT"}, 20, 18, 0, 16, "Raise Spectre gem for their buffs and curses to activate") + controls.noteLine1 = new("LabelControl", {"TOPLEFT",controls.list,"BOTTOMLEFT"}, {24, 2, 0, 16}, "Spectres in your Library must be assigned to an active") + controls.noteLine2 = new("LabelControl", {"TOPLEFT",controls.list,"BOTTOMLEFT"}, {20, 18, 0, 16}, "Raise Spectre gem for their buffs and curses to activate") local spectrePopup = main:OpenPopup(410, 360, "Spectre Library", controls) spectrePopup:SelectControl(spectrePopup.controls.source.controls.searchText) end @@ -1533,7 +1319,7 @@ function buildMode:OpenSimilarPopup() return main.screenH * 0.8 end local padding = 50 - controls.similarBuildList = new("ExtBuildListControl", nil, 0, padding, width, height() - 2 * padding, buildProviders) + controls.similarBuildList = new("ExtBuildListControl", nil, {0, padding, width, height() - 2 * padding}, buildProviders) controls.similarBuildList.shown = true controls.similarBuildList.height = function() return height() - 2 * padding @@ -1546,7 +1332,7 @@ function buildMode:OpenSimilarPopup() -- controls.similarBuildList.shown = not controls.similarBuildList:IsShown() - controls.close = new("ButtonControl", nil, 0, height() - (padding + 20) / 2, 80, 20, "Close", function() + controls.close = new("ButtonControl", nil, {0, height() - (padding + 20) / 2, 80, 20}, "Close", function() main:ClosePopup() end) -- used in PopupDialog to dynamically size the popup @@ -1734,19 +1520,8 @@ function buildMode:AddDisplayStatList(statList, actor) end elseif not (statData.hideStat) then -- Change the color of the stat label to red if cost exceeds pool - local output = actor.output - local poolVal = output[statData.pool] local colorOverride = nil - if statData.stat:match("Cost$") and not statData.stat:match("PerSecondCost$") and statVal and poolVal then - if statData.stat == "ManaCost" and output.EnergyShieldProtectsMana then - if statVal > output.ManaUnreserved + output.EnergyShield then - colorOverride = colorCodes.NEGATIVE - end - elseif statVal > poolVal then - colorOverride = colorCodes.NEGATIVE - end - end - if statData.warnFunc and statData.warnFunc(statVal, actor.output) and statData.warnColor then + if actor.output[statData.stat.."Warning"] or (statData.warnFunc and statData.warnFunc(statVal, actor.output) and statData.warnColor) then colorOverride = colorCodes.NEGATIVE end t_insert(statBoxList, { @@ -1862,7 +1637,7 @@ function buildMode:CompareStatList(tooltip, statList, actor, baseOutput, compare local statVal1 = compareOutput[statData.stat] or 0 local statVal2 = baseOutput[statData.stat] or 0 local diff = statVal1 - statVal2 - if statData.stat == "FullDPS" and not GlobalCache.useFullDPS and self.viewMode ~= "TREE" then + if statData.stat == "FullDPS" and not compareOutput[statData.stat] then diff = 0 end if (diff > 0.001 or diff < -0.001) and (not statData.condFunc or statData.condFunc(statVal1,compareOutput) or statData.condFunc(statVal2,baseOutput)) then diff --git a/src/Modules/BuildDisplayStats.lua b/src/Modules/BuildDisplayStats.lua new file mode 100644 index 0000000000..67e037e0b6 --- /dev/null +++ b/src/Modules/BuildDisplayStats.lua @@ -0,0 +1,248 @@ +-- Path of Building +-- +-- Module: Build Display Stats +-- Loads the displayStats and extraSaveStats. +-- +-- This defines the stats in the side bar, and also which stats show in node/item comparisons +-- This may be user-customisable in the future + + +local displayStats = { + { stat = "ActiveMinionLimit", label = "Active Minion Limit", fmt = "d" }, + { stat = "AverageHit", label = "Average Hit", fmt = ".1f", compPercent = true }, + { stat = "PvpAverageHit", label = "PvP Average Hit", fmt = ".1f", compPercent = true, flag = "isPvP" }, + { stat = "AverageDamage", label = "Average Damage", fmt = ".1f", compPercent = true, flag = "attack" }, + { stat = "AverageDamage", label = "Average Damage", fmt = ".1f", compPercent = true, flag = "monsterExplode", condFunc = function(v,o) return o.HitChance ~= 100 end }, + { stat = "AverageBurstDamage", label = "Average Burst Damage", fmt = ".1f", compPercent = true, condFunc = function(v,o) return o.AverageBurstHits and o.AverageBurstHits > 1 and v > 0 end }, + { stat = "PvpAverageDamage", label = "PvP Average Damage", fmt = ".1f", compPercent = true, flag = "attackPvP" }, + { stat = "Speed", label = "Attack Rate", fmt = ".2f", compPercent = true, flag = "attack", condFunc = function(v,o) return v > 0 and (o.TriggerTime or 0) == 0 end }, + { stat = "Speed", label = "Cast Rate", fmt = ".2f", compPercent = true, flag = "spell", condFunc = function(v,o) return v > 0 and (o.TriggerTime or 0) == 0 end }, + { stat = "Speed", label = "Effective Trigger Rate", fmt = ".2f", compPercent = true, condFunc = function(v,o) return (o.TriggerTime or 0) ~= 0 end }, + { stat = "WarcryCastTime", label = "Cast Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, flag = "warcry" }, + { stat = "HitSpeed", label = "Hit Rate", fmt = ".2f", compPercent = true, condFunc = function(v,o) return not o.TriggerTime end }, + { stat = "HitTime", label = "Channel Time", fmt = ".2fs", compPercent = true, flag = "channelRelease", lowerIsBetter = true, condFunc = function(v,o) return not o.TriggerTime end }, + { stat = "ChannelTimeToTrigger", label = "Channel Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, }, + { stat = "TrapThrowingTime", label = "Trap Throwing Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, }, + { stat = "TrapCooldown", label = "Trap Cooldown", fmt = ".3fs", lowerIsBetter = true }, + { stat = "MineLayingTime", label = "Mine Throwing Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, }, + { stat = "TrapThrowCount", label = "Avg. Traps per Throw", fmt = ".2f"}, + { stat = "MineThrowCount", label = "Avg. Mines per Throw", fmt = ".2f"}, + { stat = "TotemPlacementTime", label = "Totem Placement Time", fmt = ".2fs", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return not o.TriggerTime end }, + { stat = "PreEffectiveCritChance", label = "Crit Chance", fmt = ".2f%%", flag = "hit" }, + { stat = "CritChance", label = "Effective Crit Chance", fmt = ".2f%%", flag = "hit", condFunc = function(v,o) return v ~= o.PreEffectiveCritChance end }, + { stat = "CritMultiplier", label = "Crit Multiplier", fmt = "d%%", pc = true, condFunc = function(v,o) return (o.CritChance or 0) > 0 end }, + { stat = "HitChance", label = "Hit Chance", fmt = ".0f%%", flag = "attack" }, + { stat = "HitChance", label = "Hit Chance", fmt = ".0f%%", condFunc = function(v,o) return o.enemyHasSpellBlock end }, + { stat = "TotalDPS", label = "Hit DPS", fmt = ".1f", compPercent = true, flag = "notAverage" }, + { stat = "PvpTotalDPS", label = "PvP Hit DPS", fmt = ".1f", compPercent = true, flag = "notAveragePvP" }, + { stat = "TotalDPS", label = "Hit DPS", fmt = ".1f", compPercent = true, flag = "showAverage", condFunc = function(v,o) return (o.TriggerTime or 0) ~= 0 end }, + { stat = "TotalDot", label = "DoT DPS", fmt = ".1f", compPercent = true }, + { stat = "WithDotDPS", label = "Total DPS inc. DoT", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.PoisonDPS or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "BleedDPS", label = "Bleed DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Bleed DPS exceeds in game limit" end }, + { stat = "CorruptingBloodDPS", label = "Corrupting Blood DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Corrupting Blood DPS exceeds in game limit" end }, + { stat = "BleedDamage", label = "Total Damage per Bleed", fmt = ".1f", compPercent = true, flag = "showAverage" }, + { stat = "WithBleedDPS", label = "Total DPS inc. Bleed", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.IgniteDPS or 0) == 0 end }, + { stat = "IgniteDPS", label = "Ignite DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Ignite DPS exceeds in game limit" end }, + { stat = "IgniteDamage", label = "Total Damage per Ignite", fmt = ".1f", compPercent = true, flag = "showAverage" }, + { stat = "BurningGroundDPS", label = "Burning Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Burning Ground DPS exceeds in game limit" end }, + { stat = "MirageBurningGroundDPS", label = "Mirage Burning Ground DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.BurningGroundDPS end, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Mirage Burning Ground DPS exceeds in game limit" end }, + { stat = "WithIgniteDPS", label = "Total DPS inc. Ignite", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "WithIgniteAverageDamage", label = "Average Dmg. inc. Ignite", fmt = ".1f", compPercent = true }, + { stat = "PoisonDPS", label = "Poison DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Poison DPS exceeds in game limit" end }, + { stat = "CausticGroundDPS", label = "Caustic Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Caustic Ground DPS exceeds in game limit" end }, + { stat = "MirageCausticGroundDPS", label = "Mirage Caustic Ground DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.CausticGroundDPS end, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Mirage Caustic Ground DPS exceeds in game limit" end }, + { stat = "PoisonDamage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true }, + { stat = "WithPoisonDPS", label = "Total DPS inc. Poison", fmt = ".1f", compPercent = true, flag = "poison", flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "DecayDPS", label = "Decay DPS", fmt = ".1f", compPercent = true }, + { stat = "TotalDotDPS", label = "Total DoT DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return o.showTotalDotDPS or ( v ~= o.TotalDot and v ~= o.TotalPoisonDPS and v ~= o.CausticGroundDPS and v ~= (o.TotalIgniteDPS or o.IgniteDPS) and v ~= o.BurningGroundDPS and v ~= o.BleedDPS and v~= o.CorruptingBloodDPS and v ~= o.MirageCausticGroundDPS and v ~= o.MirageBurningGroundDPS) end, warnFunc = function(v) return v >= data.misc.DotDpsCap and "DoT DPS exceeds in game limit" end }, + { stat = "ImpaleDPS", label = "Impale Damage", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage" }, + { stat = "WithImpaleDPS", label = "Damage inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "ImpaleDPS", label = "Impale DPS", fmt = ".1f", compPercent = true, flag = "impale", flag = "notAverage" }, + { stat = "WithImpaleDPS", label = "Total DPS inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "MirageDPS", label = "Total Mirage DPS", fmt = ".1f", compPercent = true, flag = "mirageArcher", condFunc = function(v,o) return v > 0 end }, + { stat = "MirageDPS", label = "Total Wisp DPS", fmt = ".1f", compPercent = true, flag = "wisp", condFunc = function(v,o) return v > 0 end }, + { stat = "CullingDPS", label = "Culling DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return (o.CullingDPS or 0) > 0 end }, + { stat = "ReservationDPS", label = "Reservation DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return (o.ReservationDPS or 0) > 0 end }, + { stat = "CombinedDPS", label = "Combined DPS", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= ((o.TotalDPS or 0) + (o.TotalDot or 0)) and v ~= o.WithImpaleDPS and ( o.showTotalDotDPS or ( v ~= o.WithPoisonDPS and v ~= o.WithIgniteDPS and v ~= o.WithBleedDPS ) ) end }, + { stat = "CombinedAvg", label = "Combined Total Damage", fmt = ".1f", compPercent = true, flag = "showAverage", condFunc = function(v,o) return (v ~= o.AverageDamage and (o.TotalDot or 0) == 0) and (v ~= o.WithPoisonDPS or v ~= o.WithIgniteDPS or v ~= o.WithBleedDPS) end }, + { stat = "ExplodeChance", label = "Total Explode Chance", fmt = ".0f%%" }, + { stat = "CombinedAvgToMonsterLife", label = "Enemy Life Equivalent", fmt = ".1f%%" }, + { stat = "Cooldown", label = "Skill Cooldown", fmt = ".3fs", lowerIsBetter = true }, + { stat = "SealCooldown", label = "Seal Gain Frequency", fmt = ".2fs", lowerIsBetter = true }, + { stat = "SealMax", label = "Max Number of Seals", fmt = "d" }, + { stat = "TimeMaxSeals", label = "Time to Gain Max Seals", fmt = ".2fs", lowerIsBetter = true }, + { stat = "AreaOfEffectRadiusMetres", label = "AoE Radius", fmt = ".1fm" }, + { stat = "BrandAttachmentRangeMetre", label = "Attachment Range", fmt = ".1fm", flag = "brand" }, + { stat = "BrandTicks", label = "Activations per Brand", fmt = "d", flag = "brand" }, + { stat = "ManaCost", label = "Mana Cost", fmt = "d", color = colorCodes.MANA, pool = "ManaUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaHasCost end }, + { stat = "ManaPercentCost", label = "Mana Cost", fmt = "d%%", color = colorCodes.MANA, pool = "ManaUnreservedPercent", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaPercentHasCost end }, + { stat = "ManaPerSecondCost", label = "Mana Cost per second", fmt = ".2f", color = colorCodes.MANA, pool = "ManaUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaPerSecondHasCost end }, + { stat = "ManaPercentPerSecondCost", label = "Mana Cost per second", fmt = ".2f%%", color = colorCodes.MANA, pool = "ManaUnreservedPercent", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ManaPercentPerSecondHasCost end }, + { stat = "LifeCost", label = "Life Cost", fmt = "d", color = colorCodes.LIFE, pool = "LifeUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.LifeHasCost end }, + { stat = "LifePercentCost", label = "Life Cost", fmt = "d%%", color = colorCodes.LIFE, pool = "LifeUnreservedPercent", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.LifePercentHasCost end }, + { stat = "LifePerSecondCost", label = "Life Cost per second", fmt = ".2f", color = colorCodes.LIFE, pool = "LifeUnreserved", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.LifePerSecondHasCost end }, + { stat = "LifePercentPerSecondCost", label = "Life Cost per second", fmt = ".2f%%", color = colorCodes.LIFE, pool = "LifeUnreservedPercent", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.LifePercentPerSecondHasCost end }, + { stat = "ESCost", label = "Energy Shield Cost", fmt = "d", color = colorCodes.ES, pool = "EnergyShield", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ESHasCost end }, + { stat = "ESPerSecondCost", label = "ES Cost per second", fmt = ".2f", color = colorCodes.ES, pool = "EnergyShield", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ESPerSecondHasCost end }, + { stat = "ESPercentPerSecondCost", label = "ES Cost per second", fmt = ".2f%%", color = colorCodes.ES, compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.ESPercentPerSecondHasCost end }, + { stat = "RageCost", label = "Rage Cost", fmt = "d", color = colorCodes.RAGE, pool = "Rage", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.RageHasCost end }, + { stat = "RagePerSecondCost", label = "Rage Cost per second", fmt = ".2f", color = colorCodes.RAGE, pool = "Rage", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.RagePerSecondHasCost end }, + { stat = "SoulCost", label = "Soul Cost", fmt = "d", color = colorCodes.RAGE, pool = "Soul", compPercent = true, lowerIsBetter = true, condFunc = function(v,o) return o.SoulHasCost end }, + { }, + { stat = "Str", label = "Strength", color = colorCodes.STRENGTH, fmt = "d" }, + { stat = "ReqStr", label = "Strength Required", color = colorCodes.STRENGTH, fmt = "d", lowerIsBetter = true, condFunc = function(v,o) return v > o.Str end, warnFunc = function(v,o) return "You do not meet the Strength requirement of " .. (o.ReqStrItem.source == "Item" and o.ReqStrItem.sourceItem.name or o.ReqStrItem.source == "Gem" and o.ReqStrItem.sourceGem.nameSpec) end }, + { stat = "Dex", label = "Dexterity", color = colorCodes.DEXTERITY, fmt = "d" }, + { stat = "ReqDex", label = "Dexterity Required", color = colorCodes.DEXTERITY, fmt = "d", lowerIsBetter = true, condFunc = function(v,o) return v > o.Dex end, warnFunc = function(v,o) return "You do not meet the Dexterity requirement of " .. (o.ReqDexItem.source == "Item" and o.ReqDexItem.sourceItem.name or o.ReqDexItem.source == "Gem" and o.ReqDexItem.sourceGem.nameSpec) end }, + { stat = "Int", label = "Intelligence", color = colorCodes.INTELLIGENCE, fmt = "d" }, + { stat = "ReqInt", label = "Intelligence Required", color = colorCodes.INTELLIGENCE, fmt = "d", lowerIsBetter = true, condFunc = function(v,o) return v > o.Int end, warnFunc = function(v,o) return "You do not meet the Intelligence requirement of " .. (o.ReqIntItem.source == "Item" and o.ReqIntItem.sourceItem.name or o.ReqIntItem.source == "Gem" and o.ReqIntItem.sourceGem.nameSpec) end }, + { stat = "Omni", label = "Omniscience", color = colorCodes.RARE, fmt = "d" }, + { stat = "ReqOmni", label = "Omniscience Required", color = colorCodes.RARE, fmt = "d", lowerIsBetter = true, condFunc = function(v,o) return v > (o.Omni or 0) end, warnFunc = function(v,o) return "You do not meet the Omniscience requirement of " .. (o.ReqOmniItem.source == "Item" and o.ReqOmniItem.sourceItem.name or o.ReqOmniItem.source == "Gem" and o.ReqOmniItem.sourceGem.nameSpec) end }, + { }, + { stat = "Devotion", label = "Devotion", color = colorCodes.RARE, fmt = "d" }, + { }, + { stat = "TotalEHP", label = "Effective Hit Pool", fmt = ".0f", compPercent = true }, + { stat = "PvPTotalTakenHit", label = "PvP Hit Taken", fmt = ".1f", flag = "isPvP", lowerIsBetter = true }, + { stat = "PhysicalMaximumHitTaken", label = "Phys Max Hit", fmt = ".0f", color = colorCodes.PHYS, compPercent = true, }, + { stat = "LightningMaximumHitTaken", label = "Elemental Max Hit", fmt = ".0f", color = colorCodes.LIGHTNING, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken == o.ColdMaximumHitTaken and o.LightningMaximumHitTaken == o.FireMaximumHitTaken end }, + { stat = "FireMaximumHitTaken", label = "Fire Max Hit", fmt = ".0f", color = colorCodes.FIRE, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken ~= o.ColdMaximumHitTaken or o.LightningMaximumHitTaken ~= o.FireMaximumHitTaken end }, + { stat = "ColdMaximumHitTaken", label = "Cold Max Hit", fmt = ".0f", color = colorCodes.COLD, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken ~= o.ColdMaximumHitTaken or o.LightningMaximumHitTaken ~= o.FireMaximumHitTaken end }, + { stat = "LightningMaximumHitTaken", label = "Lightning Max Hit", fmt = ".0f", color = colorCodes.LIGHTNING, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken ~= o.ColdMaximumHitTaken or o.LightningMaximumHitTaken ~= o.FireMaximumHitTaken end }, + { stat = "ChaosMaximumHitTaken", label = "Chaos Max Hit", fmt = ".0f", color = colorCodes.CHAOS, compPercent = true }, + { }, + { stat = "MainHand", childStat = "Accuracy", label = "MH Accuracy", fmt = "d", condFunc = function(v,o) return o.PreciseTechnique end, warnFunc = function(v,o) return v < o.Life and "You do not have enough Accuracy for Precise Technique" end, warnColor = true }, + { stat = "OffHand", childStat = "Accuracy", label = "OH Accuracy", fmt = "d", condFunc = function(v,o) return o.PreciseTechnique end, warnFunc = function(v,o) return v < o.Life and "You do not have enough Accuracy for Precise Technique" end, warnColor = true }, + { stat = "Life", label = "Total Life", fmt = "d", color = colorCodes.LIFE, compPercent = true }, + { stat = "Spec:LifeInc", label = "%Inc Life from Tree", fmt = "d%%", color = colorCodes.LIFE, condFunc = function(v,o) return v > 0 and o.Life > 1 end }, + { stat = "LifeUnreserved", label = "Unreserved Life", fmt = "d", color = colorCodes.LIFE, condFunc = function(v,o) return v < o.Life end, compPercent = true, warnFunc = function(v) return v <= 0 and "Your unreserved Life is below 1" end }, + { stat = "LifeRecoverable", label = "Life Recoverable", fmt = "d", color = colorCodes.LIFE, condFunc = function(v,o) return v < o.LifeUnreserved end, }, + { stat = "LifeUnreservedPercent", label = "Unreserved Life", fmt = "d%%", color = colorCodes.LIFE, condFunc = function(v,o) return v < 100 end }, + { stat = "LifeRegenRecovery", label = "Life Regen", fmt = ".1f", color = colorCodes.LIFE, condFunc = function(v,o) return o.LifeRecovery <= 0 and o.LifeRegenRecovery ~= 0 end }, + { stat = "LifeRegenRecovery", label = "Life Recovery", fmt = ".1f", color = colorCodes.LIFE, condFunc = function(v,o) return o.LifeRecovery > 0 and o.LifeRegenRecovery ~= 0 end }, + { stat = "LifeLeechGainRate", label = "Life Leech/On Hit Rate", fmt = ".1f", color = colorCodes.LIFE, compPercent = true }, + { stat = "LifeLeechGainPerHit", label = "Life Leech/Gain per Hit", fmt = ".1f", color = colorCodes.LIFE, compPercent = true }, + { }, + { stat = "Mana", label = "Total Mana", fmt = "d", color = colorCodes.MANA, compPercent = true }, + { stat = "Spec:ManaInc", label = "%Inc Mana from Tree", color = colorCodes.MANA, fmt = "d%%" }, + { stat = "ManaUnreserved", label = "Unreserved Mana", fmt = "d", color = colorCodes.MANA, condFunc = function(v,o) return v < o.Mana end, compPercent = true, warnFunc = function(v) return v < 0 and "Your unreserved Mana is negative" end }, + { stat = "ManaUnreservedPercent", label = "Unreserved Mana", fmt = "d%%", color = colorCodes.MANA, condFunc = function(v,o) return v < 100 end }, + { stat = "ManaRegenRecovery", label = "Mana Regen", fmt = ".1f", color = colorCodes.MANA, condFunc = function(v,o) return o.ManaRecovery <= 0 and o.ManaRegenRecovery ~= 0 end }, + { stat = "ManaRegenRecovery", label = "Mana Recovery", fmt = ".1f", color = colorCodes.MANA, condFunc = function(v,o) return o.ManaRecovery > 0 and o.ManaRegenRecovery ~= 0 end }, + { stat = "ManaLeechGainRate", label = "Mana Leech/On Hit Rate", fmt = ".1f", color = colorCodes.MANA, compPercent = true }, + { stat = "ManaLeechGainPerHit", label = "Mana Leech/Gain per Hit", fmt = ".1f", color = colorCodes.MANA, compPercent = true }, + { }, + { stat = "EnergyShield", label = "Energy Shield", fmt = "d", color = colorCodes.ES, compPercent = true }, + { stat = "EnergyShieldRecoveryCap", label = "Recoverable ES", color = colorCodes.ES, fmt = "d", condFunc = function(v,o) return o.CappingES end }, + { stat = "Spec:EnergyShieldInc", label = "%Inc ES from Tree", color = colorCodes.ES, fmt = "d%%" }, + { stat = "EnergyShieldRegenRecovery", label = "ES Regen", color = colorCodes.ES, fmt = ".1f", condFunc = function(v,o) return o.EnergyShieldRecovery <= 0 and o.EnergyShieldRegenRecovery ~= 0 end }, + { stat = "EnergyShieldRegenRecovery", label = "ES Recovery", color = colorCodes.ES, fmt = ".1f", condFunc = function(v,o) return o.EnergyShieldRecovery > 0 and o.EnergyShieldRegenRecovery ~= 0 end }, + { stat = "EnergyShieldLeechGainRate", label = "ES Leech/On Hit Rate", color = colorCodes.ES, fmt = ".1f", compPercent = true }, + { stat = "EnergyShieldLeechGainPerHit", label = "ES Leech/Gain per Hit", color = colorCodes.ES, fmt = ".1f", compPercent = true }, + { }, + { stat = "Ward", label = "Ward", fmt = "d", color = colorCodes.WARD, compPercent = true }, + { }, + { stat = "Rage", label = "Rage", fmt = "d", color = colorCodes.RAGE, compPercent = true }, + { stat = "RageRegenRecovery", label = "Rage Regen", fmt = ".1f", color = colorCodes.RAGE, compPercent = true }, + { }, + { stat = "TotalBuildDegen", label = "Total Degen", fmt = ".1f", lowerIsBetter = true }, + { stat = "TotalNetRegen", label = "Total Net Recovery", fmt = "+.1f" }, + { stat = "NetLifeRegen", label = "Net Life Recovery", fmt = "+.1f", color = colorCodes.LIFE }, + { stat = "NetManaRegen", label = "Net Mana Recovery", fmt = "+.1f", color = colorCodes.MANA }, + { stat = "NetEnergyShieldRegen", label = "Net ES Recovery", fmt = "+.1f", color = colorCodes.ES }, + { }, + { stat = "Evasion", label = "Evasion rating", fmt = "d", color = colorCodes.EVASION, compPercent = true }, + { stat = "Spec:EvasionInc", label = "%Inc Evasion from Tree", color = colorCodes.EVASION, fmt = "d%%" }, + { stat = "MeleeEvadeChance", label = "Evade Chance", fmt = "d%%", color = colorCodes.EVASION, condFunc = function(v,o) return v > 0 and o.MeleeEvadeChance == o.ProjectileEvadeChance end }, + { stat = "MeleeEvadeChance", label = "Melee Evade Chance", fmt = "d%%", color = colorCodes.EVASION, condFunc = function(v,o) return v > 0 and o.MeleeEvadeChance ~= o.ProjectileEvadeChance end }, + { stat = "ProjectileEvadeChance", label = "Projectile Evade Chance", fmt = "d%%", color = colorCodes.EVASION, condFunc = function(v,o) return v > 0 and o.MeleeEvadeChance ~= o.ProjectileEvadeChance end }, + { }, + { stat = "Armour", label = "Armour", fmt = "d", compPercent = true }, + { stat = "Spec:ArmourInc", label = "%Inc Armour from Tree", fmt = "d%%" }, + { stat = "PhysicalDamageReduction", label = "Phys. Damage Reduction", fmt = "d%%", condFunc = function() return true end }, + { }, + { stat = "EffectiveBlockChance", label = "Block Chance", fmt = "d%%", overCapStat = "BlockChanceOverCap" }, + { stat = "EffectiveSpellBlockChance", label = "Spell Block Chance", fmt = "d%%", overCapStat = "SpellBlockChanceOverCap" }, + { stat = "AttackDodgeChance", label = "Attack Dodge Chance", fmt = "d%%", overCapStat = "AttackDodgeChanceOverCap" }, + { stat = "SpellDodgeChance", label = "Spell Dodge Chance", fmt = "d%%", overCapStat = "SpellDodgeChanceOverCap" }, + { stat = "EffectiveSpellSuppressionChance", label = "Spell Suppression Chance", fmt = "d%%", overCapStat = "SpellSuppressionChanceOverCap" }, + { }, + { stat = "FireResist", label = "Fire Resistance", fmt = "d%%", color = colorCodes.FIRE, condFunc = function() return true end, overCapStat = "FireResistOverCap"}, + { stat = "FireResistOverCap", label = "Fire Res. Over Max", fmt = "d%%", hideStat = true }, + { stat = "ColdResist", label = "Cold Resistance", fmt = "d%%", color = colorCodes.COLD, condFunc = function() return true end, overCapStat = "ColdResistOverCap" }, + { stat = "ColdResistOverCap", label = "Cold Res. Over Max", fmt = "d%%", hideStat = true }, + { stat = "LightningResist", label = "Lightning Resistance", fmt = "d%%", color = colorCodes.LIGHTNING, condFunc = function() return true end, overCapStat = "LightningResistOverCap" }, + { stat = "LightningResistOverCap", label = "Lightning Res. Over Max", fmt = "d%%", hideStat = true }, + { stat = "ChaosResist", label = "Chaos Resistance", fmt = "d%%", color = colorCodes.CHAOS, condFunc = function(v,o) return not o.ChaosInoculation end, overCapStat = "ChaosResistOverCap" }, + { stat = "ChaosResistOverCap", label = "Chaos Res. Over Max", fmt = "d%%", hideStat = true }, + { label = "Chaos Resistance", val = "Immune", labelStat = "ChaosResist", color = colorCodes.CHAOS, condFunc = function(o) return o.ChaosInoculation end }, + { }, + { stat = "EffectiveMovementSpeedMod", label = "Movement Speed Modifier", fmt = "+d%%", mod = true, condFunc = function() return true end }, + --[[ potentially useful mods + { stat = "QuantityMultiplier", label = "Quantity Multiplier", fmt = "+d%%" }, + { stat = "StoredUses", label = "Stored Uses", fmt = "d" }, + { stat = "Duration", label = "Skill Duration", fmt = ".2f", flag = "duration" }, + { stat = "DurationSecondary", label = "Secondary Duration", fmt = ".2f", flag = "duration" }, + { stat = "AuraDuration", label = "Aura Duration", fmt = ".2f" }, + { stat = "ReserveDuration", label = "Reserve Duration", fmt = ".2f" }, + { stat = "SoulGainPreventionDuration", label = "Soul Gain Prevent.", fmt = ".2f" }, + { stat = "SustainableTrauma", label = "Sustainable Trauma", fmt = "d" }, + { stat = "ProjectileCount", label = "Projectile Count", fmt = "d", flag = "projectile" }, + { stat = "PierceCountString", label = "Pierce Count", fmt = "d" }, + { stat = "ForkCountString", label = "Fork Count", fmt = "d" }, + { stat = "ChainMaxString", label = "Max Chain Count", fmt = "d" }, + { stat = "SplitCountString", label = "Proj, Split Count", fmt = "d", flag = "projectile" }, + { stat = "ProjectileSpeedMod", label = "Proj. Speed Mod", fmt = ".2f", flag = "projectile" }, + { stat = "BounceCount", label = "Bounces Count", fmt = "d", flag = "bounce" }, + { stat = "AuraEffectMod", label = "Aura Effect Mod", fmt = ".2f" }, + { stat = "CurseEffectMod", label = "Curse Effect Mod", fmt = ".2f" }, + { stat = "LootQuantity", label = "Item Quantity", fmt = "+d%%" }, + { stat = "LootRarity", label = "Item Rarity", fmt = "+d%%" }, + --]] + { }, + { stat = "FullDPS", label = "Full DPS", fmt = ".1f", color = colorCodes.CURRENCY, compPercent = true }, + { stat = "FullDotDPS", label = "Full Dot DPS", fmt = ".1f", color = colorCodes.CURRENCY, compPercent = true, condFunc = function (v) return v >= data.misc.DotDpsCap end, warnFunc = function (v) return "Full Dot DPS exceeds in game limit" end }, + { }, + { stat = "SkillDPS", label = "Skill DPS", condFunc = function() return true end }, +} +local minionDisplayStats = { + { stat = "AverageDamage", label = "Average Damage", fmt = ".1f", compPercent = true }, + { stat = "Speed", label = "Attack/Cast Rate", fmt = ".2f", compPercent = true, condFunc = function(v,o) return v > 0 and (o.TriggerTime or 0) == 0 end }, + { stat = "HitSpeed", label = "Hit Rate", fmt = ".2f" }, + { stat = "Speed", label = "Effective Trigger Rate", fmt = ".2f", compPercent = true, condFunc = function(v,o) return (o.TriggerTime or 0) ~= 0 end }, + { stat = "TotalDPS", label = "Hit DPS", fmt = ".1f", compPercent = true }, + { stat = "TotalDot", label = "DoT DPS", fmt = ".1f", compPercent = true }, + { stat = "WithDotDPS", label = "Total DPS inc. DoT", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDPS and (o.PoisonDPS or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "BleedDPS", label = "Bleed DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Minion Bleed DPS exceeds in game limit" end }, + { stat = "WithBleedDPS", label = "Total DPS inc. Bleed", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.IgniteDPS or 0) == 0 end }, + { stat = "IgniteDPS", label = "Ignite DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Minion Ignite DPS exceeds in game limit" end }, + { stat = "WithIgniteDPS", label = "Total DPS inc. Ignite", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "PoisonDPS", label = "Poison DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Minion Poison dps exceeds in game limit" end }, + { stat = "PoisonDamage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true }, + { stat = "WithPoisonDPS", label = "Total DPS inc. Poison", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "DecayDPS", label = "Decay DPS", fmt = ".1f", compPercent = true }, + { stat = "TotalDotDPS", label = "Total DoT DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.TotalDot and v ~= o.ImpaleDPS and v ~= o.TotalPoisonDPS and v ~= (o.TotalIgniteDPS or o.IgniteDPS) and v ~= o.BleedDPS end, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Minion DoT DPS exceeds in game limit" end }, + { stat = "ImpaleDPS", label = "Impale DPS", fmt = ".1f", compPercent = true, flag = "impale" }, + { stat = "WithImpaleDPS", label = "Total DPS inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end }, + { stat = "CullingDPS", label = "Culling DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return (o.CullingDPS or 0) > 0 end }, + { stat = "ReservationDPS", label = "Reservation DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return (o.ReservationDPS or 0) > 0 end }, + { stat = "CombinedDPS", label = "Combined DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= ((o.TotalDPS or 0) + (o.TotalDot or 0)) and v ~= o.WithImpaleDPS and v ~= o.WithPoisonDPS and v ~= o.WithIgniteDPS and v ~= o.WithBleedDPS end}, + { stat = "Cooldown", label = "Skill Cooldown", fmt = ".3fs", lowerIsBetter = true }, + { stat = "Life", label = "Total Life", fmt = ".1f", color = colorCodes.LIFE, compPercent = true }, + { stat = "LifeRegenRecovery", label = "Life Recovery", fmt = ".1f", color = colorCodes.LIFE }, + { stat = "LifeLeechGainRate", label = "Life Leech/On Hit Rate", fmt = ".1f", color = colorCodes.LIFE, compPercent = true }, + { stat = "EnergyShield", label = "Energy Shield", fmt = "d", color = colorCodes.ES, compPercent = true }, + { stat = "EnergyShieldRegenRecovery", label = "ES Recovery", fmt = ".1f", color = colorCodes.ES }, + { stat = "EnergyShieldLeechGainRate", label = "ES Leech/On Hit Rate", fmt = ".1f", color = colorCodes.ES, compPercent = true }, +} +-- Extra stats saved to the xml if not already saved there, mostly for 3rd party tools +local extraSaveStats = { + "PowerCharges", + "PowerChargesMax", + "FrenzyCharges", + "FrenzyChargesMax", + "EnduranceCharges", + "EnduranceChargesMax", + "ActiveTotemLimit", + "ActiveMinionLimit", +} + +return displayStats, minionDisplayStats, extraSaveStats \ No newline at end of file diff --git a/src/Modules/BuildList.lua b/src/Modules/BuildList.lua index 83fac2dd57..cd60417822 100644 --- a/src/Modules/BuildList.lua +++ b/src/Modules/BuildList.lua @@ -32,7 +32,7 @@ function listMode:Init(selBuildName, subPath) return end - self.anchor = new("Control", nil, 0, 4, 0, 0) + self.anchor = new("Control", nil, {0, 4, 0, 0}) self.anchor.x = function() return main.screenW / 2 end @@ -40,34 +40,34 @@ function listMode:Init(selBuildName, subPath) self.subPath = subPath or "" self.list = { } - self.controls.new = new("ButtonControl", {"TOP",self.anchor,"TOP"}, -259, 0, 60, 20, "New", function() + self.controls.new = new("ButtonControl", {"TOP",self.anchor,"TOP"}, {-259, 0, 60, 20}, "New", function() main:SetMode("BUILD", false, "Unnamed build") end) - self.controls.newFolder = new("ButtonControl", {"LEFT",self.controls.new,"RIGHT"}, 8, 0, 90, 20, "New Folder", function() + self.controls.newFolder = new("ButtonControl", {"LEFT",self.controls.new,"RIGHT"}, {8, 0, 90, 20}, "New Folder", function() self.controls.buildList:NewFolder() end) - self.controls.open = new("ButtonControl", {"LEFT",self.controls.newFolder,"RIGHT"}, 8, 0, 60, 20, "Open", function() + self.controls.open = new("ButtonControl", {"LEFT",self.controls.newFolder,"RIGHT"}, {8, 0, 60, 20}, "Open", function() self.controls.buildList:LoadBuild(self.controls.buildList.selValue) end) self.controls.open.enabled = function() return self.controls.buildList.selValue ~= nil end - self.controls.copy = new("ButtonControl", {"LEFT",self.controls.open,"RIGHT"}, 8, 0, 60, 20, "Copy", function() + self.controls.copy = new("ButtonControl", {"LEFT",self.controls.open,"RIGHT"}, {8, 0, 60, 20}, "Copy", function() self.controls.buildList:RenameBuild(self.controls.buildList.selValue, true) end) self.controls.copy.enabled = function() return self.controls.buildList.selValue ~= nil end - self.controls.rename = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, 8, 0, 60, 20, "Rename", function() + self.controls.rename = new("ButtonControl", {"LEFT",self.controls.copy,"RIGHT"}, {8, 0, 60, 20}, "Rename", function() self.controls.buildList:RenameBuild(self.controls.buildList.selValue) end) self.controls.rename.enabled = function() return self.controls.buildList.selValue ~= nil end - self.controls.delete = new("ButtonControl", {"LEFT",self.controls.rename,"RIGHT"}, 8, 0, 60, 20, "Delete", function() + self.controls.delete = new("ButtonControl", {"LEFT",self.controls.rename,"RIGHT"}, {8, 0, 60, 20}, "Delete", function() self.controls.buildList:DeleteBuild(self.controls.buildList.selValue) end) self.controls.delete.enabled = function() return self.controls.buildList.selValue ~= nil end - self.controls.sort = new("DropDownControl", {"LEFT",self.controls.delete,"RIGHT"}, 8, 0, 140, 20, buildSortDropList, function(index, value) + self.controls.sort = new("DropDownControl", {"LEFT",self.controls.delete,"RIGHT"}, {8, 0, 140, 20}, buildSortDropList, function(index, value) main.buildSortMode = value.sortMode self:SortList() end) self.controls.sort:SelByValue(main.buildSortMode, "sortMode") - self.controls.buildList = new("BuildListControl", {"TOP",self.anchor,"TOP"}, 0, 75, 900, 0, self) + self.controls.buildList = new("BuildListControl", {"TOP",self.anchor,"TOP"}, {0, 75, 900, 0}, self) self.controls.buildList.height = function() return main.screenH - 80 end @@ -97,7 +97,7 @@ function listMode:Init(selBuildName, subPath) self.controls.ExtBuildList = self:getPublicBuilds() end - self.controls.searchText = new("EditControl", {"TOP",self.anchor,"TOP"}, 0, 25, 640, 20, self.filterBuildList, "Search", "%c%(%)", 100, function(buf) + self.controls.searchText = new("EditControl", {"TOP",self.anchor,"TOP"}, {0, 25, 640, 20}, self.filterBuildList, "Search", "%c%(%)", 100, function(buf) main.filterBuildList = buf self:BuildList() end, nil, nil, true) @@ -118,7 +118,7 @@ function listMode:getPublicBuilds() impl = new("PoBArchivesProvider", "builds") } } - local extBuildList = new("ExtBuildListControl", {"LEFT",self.controls.buildList,"RIGHT"}, 25, 0, main.screenW * 1 / 4 - 50, 0, buildProviders) + local extBuildList = new("ExtBuildListControl", {"LEFT",self.controls.buildList,"RIGHT"}, {25, 0, main.screenW * 1 / 4 - 50, 0}, buildProviders) extBuildList:Init("PoB Archives") extBuildList.height = function() return main.screenH - 80 diff --git a/src/Modules/CalcActiveSkill.lua b/src/Modules/CalcActiveSkill.lua index 33133057f5..1d37f142cb 100644 --- a/src/Modules/CalcActiveSkill.lua +++ b/src/Modules/CalcActiveSkill.lua @@ -279,7 +279,7 @@ function calcs.buildActiveSkillModList(env, activeSkill) weapon1Flags, weapon1Info = ModFlag[env.data.weaponTypeInfo["None"].flag], env.data.weaponTypeInfo["None"] end if weapon1Flags then - if skillFlags.attack then + if skillFlags.attack or skillFlags.dotFromAttack then activeSkill.weapon1Flags = weapon1Flags skillFlags.weapon1Attack = true if weapon1Info.melee and skillFlags.melee then @@ -296,7 +296,11 @@ function calcs.buildActiveSkillModList(env, activeSkill) if not skillTypes[SkillType.MainHandOnly] and not skillFlags.forceMainHand then local weapon2Flags, weapon2Info = getWeaponFlags(env, activeSkill.actor.weaponData2, weaponTypes) if weapon2Flags then - if skillFlags.attack then + if skillTypes[SkillType.DualWieldRequiresDifferentTypes] and (activeSkill.actor.weaponData1.type == activeSkill.actor.weaponData2.type) then + -- Skill requires a different compatible off hand weapon to main hand weapon + skillFlags.disable = true + activeSkill.disableReason = activeSkill.disableReason or "Weapon Types Need to be Different" + elseif skillFlags.attack or skillFlags.dotFromAttack then activeSkill.weapon2Flags = weapon2Flags skillFlags.weapon2Attack = true end diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index ec3b60e203..2eb2e9e7b8 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -2420,12 +2420,14 @@ function calcs.buildDefenceEstimations(env, actor) local iterationMultiplier = 1 local damageTotal = 0 + local lastPositiveLife = poolTable.Life local maxDamage = data.misc.ehpCalcMaxDamage local maxIterations = data.misc.ehpCalcMaxIterationsToCalc while poolTable.Life > 0 and DamageIn["iterations"] < maxIterations do DamageIn["iterations"] = DamageIn["iterations"] + 1 local Damage = { } damageTotal = 0 + lastPositiveLife = poolTable.Life local VaalArcticArmourMultiplier = VaalArcticArmourHitsLeft > 0 and (( 1 - output["VaalArcticArmourMitigation"] * m_min(VaalArcticArmourHitsLeft / iterationMultiplier, 1))) or 1 VaalArcticArmourHitsLeft = VaalArcticArmourHitsLeft - iterationMultiplier for _, damageType in ipairs(dmgTypeList) do @@ -2486,7 +2488,7 @@ function calcs.buildDefenceEstimations(env, actor) end if poolTable.Life < 0 and DamageIn["cycles"] == 1 then -- Don't count overkill damage and only on final pass as to not break speedup. - numHits = numHits + poolTable.Life / damageTotal + numHits = numHits + poolTable.Life / (lastPositiveLife - poolTable.Life) poolTable.Life = 0 end -- Recalculate total hit damage diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index fc430b091d..a051e27a44 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -1608,8 +1608,9 @@ function calcs.offence(env, actor, activeSkill) val.baseCostNoMult = val.baseCostNoMult + costs[manaType].baseCostNoMult val.finalBaseCost = val.finalBaseCost + costs[manaType].finalBaseCost costs[manaType].baseCost = 0 - costs[manaType].baseCostNoMult = 0 + costs[manaType].baseCostRaw = 0 costs[manaType].finalBaseCost = 0 + costs[manaType].baseCostNoMult = 0 elseif additionalLifeCost > 0 or hybridLifeCost > 0 then val.baseCost = costs[manaType].baseCost val.finalBaseCost = val.finalBaseCost + round(costs[manaType].finalBaseCost * (hybridLifeCost + additionalLifeCost)) @@ -2966,6 +2967,7 @@ function calcs.offence(env, actor, activeSkill) or (pass == 2 and damageType == "Lightning" and skillModList:Flag(skillCfg, "LightningNoCritLucky")) or (pass == 1 and skillModList:Flag(skillCfg, "CritLucky")) or (damageType == "Lightning" and modDB:Flag(nil, "LightningLuckHits")) + or (damageType == "Chaos" and modDB:Flag(nil, "ChaosLuckyHits")) or ((damageType == "Lightning" or damageType == "Cold" or damageType == "Fire") and skillModList:Flag(skillCfg, "ElementalLuckHits")) then damageTypeLuckyChance = 1 else @@ -5142,6 +5144,7 @@ function calcs.offence(env, actor, activeSkill) runSkillFunc("preDotFunc") + ---Section Handles Generic Damage over time [DOT] for _, damageType in ipairs(dmgTypeList) do local dotTypeCfg = copyTable(dotCfg, true) dotTypeCfg.keywordFlags = bor(dotTypeCfg.keywordFlags, KeywordFlag[damageType.."Dot"]) @@ -5155,6 +5158,7 @@ function calcs.offence(env, actor, activeSkill) if baseVal > 0 or (output[damageType.."Dot"] or 0) > 0 then skillFlags.dot = true local effMult = 1 + --Section handles Enemy Damage Taken based on Configs if env.mode_effective then local resist = 0 local takenInc = enemyDB:Sum("INC", dotTakenCfg, "DamageTaken", "DamageTakenOverTime", damageType.."DamageTaken", damageType.."DamageTakenOverTime") + (isElemental[damageType] and enemyDB:Sum("INC", dotTakenCfg, "ElementalDamageTaken") or 0) @@ -5171,7 +5175,11 @@ function calcs.offence(env, actor, activeSkill) breakdown[damageType.."DotEffMult"] = breakdown.effMult(damageType, resist, 0, takenInc, effMult, takenMore, sourceRes, true) end end + --Variables below calculate DOT damage local inc = skillModList:Sum("INC", dotTypeCfg, "Damage", damageType.."Damage", isElemental[damageType] and "ElementalDamage" or nil) + if skillModList:Flag(nil, "dotIsHeraldOfAsh") then + inc = inc - skillModList:Sum("INC", skillCfg, "Damage", damageType.."Damage", isElemental[damageType] and "ElementalDamage" or nil) + end local more = skillModList:More(dotTypeCfg, "Damage", damageType.."Damage", isElemental[damageType] and "ElementalDamage" or nil) local mult = skillModList:Override(dotTypeCfg, "DotMultiplier") or skillModList:Sum("BASE", dotTypeCfg, "DotMultiplier") + skillModList:Sum("BASE", dotTypeCfg, damageType.."DotMultiplier") local aura = activeSkill.skillTypes[SkillType.Aura] and not activeSkill.skillTypes[SkillType.RemoteMined] and calcLib.mod(skillModList, dotTypeCfg, "AuraEffect") @@ -5188,6 +5196,7 @@ function calcs.offence(env, actor, activeSkill) end end end + if skillModList:Flag(nil, "DotCanStack") then skillFlags.DotCanStack = true local speed = output.Speed @@ -5288,17 +5297,35 @@ function calcs.offence(env, actor, activeSkill) -- Handler functions for self hit sources local nameToHandler = { ["Heartbound Loop"] = function(activeSkill, output, breakdown) - local dmgType, dmgVal - for _, value in ipairs(activeSkill.skillModList:List(nil, "HeartboundLoopSelfDamage")) do -- Combines dmg taken from both ring accounting for catalysts - dmgVal = (dmgVal or 0) + value.baseDamage - dmgType = string.gsub(" "..value.damageType, "%W%l", string.upper):sub(2) -- This assumes both rings deal the same damage type + if activeSkill.activeEffect.grantedEffect.name == "Summon Skeletons" then + local dmgType, dmgVal + for _, value in ipairs(activeSkill.skillModList:List(nil, "HeartboundLoopSelfDamage")) do -- Combines dmg taken from both ring accounting for catalysts + dmgVal = (dmgVal or 0) + value.baseDamage + dmgType = string.gsub(" "..value.damageType, "%W%l", string.upper):sub(2) -- This assumes both rings deal the same damage type + end + if dmgType and dmgVal then + local dmgBreakdown, totalDmgTaken = calcs.applyDmgTakenConversion(activeSkill, output, breakdown, dmgType, dmgVal) + t_insert(dmgBreakdown, 1, s_format("Heartbound Loop base damage: %d", dmgVal)) + t_insert(dmgBreakdown, 2, s_format("")) + t_insert(dmgBreakdown, s_format("Total Heartbound Loop damage taken per cast/attack: %.2f * %d ^8(minions per cast)^7 = %.2f",totalDmgTaken, output.SummonedMinionsPerCast, totalDmgTaken * output.SummonedMinionsPerCast)) + return dmgBreakdown, totalDmgTaken * output.SummonedMinionsPerCast + end end - if activeSkill.activeEffect.grantedEffect.name == "Summon Skeletons" and dmgType and dmgVal then - local dmgBreakdown, totalDmgTaken = calcs.applyDmgTakenConversion(activeSkill, output, breakdown, dmgType, dmgVal) - t_insert(dmgBreakdown, 1, s_format("Heartbound Loop base damage: %d", dmgVal)) - t_insert(dmgBreakdown, 2, s_format("")) - t_insert(dmgBreakdown, s_format("Total Heartbound Loop damage taken per cast/attack: %.2f * %d ^8(minions per cast)^7 = %.2f",totalDmgTaken, output.SummonedMinionsPerCast, totalDmgTaken * output.SummonedMinionsPerCast)) - return dmgBreakdown, totalDmgTaken * output.SummonedMinionsPerCast + end, + ["Storm Secret"] = function(activeSkill, output, breakdown) + if activeSkill.activeEffect.grantedEffect.name == "Herald of Thunder" then + local dmgType, dmgVal + for _, value in ipairs(activeSkill.skillModList:List(nil, "StormSecretSelfDamage")) do -- Combines dmg taken from both rings accounting for catalysts + dmgVal = (dmgVal or 0) + value.baseDamage + dmgType = string.gsub(" "..value.damageType, "%W%l", string.upper):sub(2) -- This assumes both rings deal the same damage type + end + if dmgType and dmgVal then + local dmgBreakdown, totalDmgTaken = calcs.applyDmgTakenConversion(activeSkill, output, breakdown, dmgType, dmgVal) + t_insert(dmgBreakdown, 1, s_format("Storm Secret base damage: %d", dmgVal)) + t_insert(dmgBreakdown, 2, s_format("")) + t_insert(dmgBreakdown, s_format("Total Storm Secret damage taken per Herald of Thunder Hit: %.2f",totalDmgTaken)) + return dmgBreakdown, totalDmgTaken + end end end, ["Eye of Innocence"] = function(activeSkill, output, breakdown) diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index 8fba4c7c53..b5bf3a9078 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -153,8 +153,7 @@ local function doActorAttribsConditions(env, actor) -- Set conditions if (actor.itemList["Weapon 2"] and actor.itemList["Weapon 2"].type == "Shield") or (actor == env.player and env.aegisModList) then condList["UsingShield"] = true - end - if not actor.itemList["Weapon 2"] then + elseif not actor.itemList["Weapon 2"] then condList["OffHandIsEmpty"] = true end if actor.weaponData1.type == "None" then @@ -706,7 +705,7 @@ local function doActorMisc(env, actor) local effect = m_max(m_floor(70 * calcLib.mod(modDB, nil, "SelfChillEffect")), 0) modDB:NewMod("ActionSpeed", "INC", -effect, "Freeze") end - if modDB:Flag(nil, "CanLeechLifeOnFullLife") then + if modDB:Flag(nil, "CanLeechLifeOnFullLife") and not modDB:Flag(nil, "GhostReaver") then condList["Leeching"] = true condList["LeechingLife"] = true end @@ -1649,12 +1648,11 @@ function calcs.perform(env, skipEHP) -- Process attribute requirements do local reqMult = calcLib.mod(modDB, nil, "GlobalAttributeRequirements") - local attrTable = modDB:Flag(nil, "OmniscienceRequirements") and {"Omni","Str","Dex","Int"} or {"Str","Dex","Int"} + local omniRequirements = modDB:Flag(nil, "OmniscienceRequirements") and calcLib.mod(modDB, nil, "OmniAttributeRequirements") + local ignoreAttrReq = modDB:Flag(nil, "IgnoreAttributeRequirements") + local attrTable = omniRequirements and {"Omni","Str","Dex","Int"} or {"Str","Dex","Int"} for _, attr in ipairs(attrTable) do - local breakdownAttr = attr - if modDB:Flag(nil, "OmniscienceRequirements") then - breakdownAttr = "Omni" - end + local breakdownAttr = omniRequirements and "Omni" or attr if breakdown then breakdown["Req"..attr] = { rowList = { }, @@ -1665,16 +1663,19 @@ function calcs.perform(env, skipEHP) } } end - local out = 0 + local out = {val = 0, source = nil} for _, reqSource in ipairs(env.requirementsTable) do if reqSource[attr] and reqSource[attr] > 0 then local req = m_floor(reqSource[attr] * reqMult) - if modDB:Flag(nil, "OmniscienceRequirements") then - local omniReqMult = 1 / (calcLib.mod(modDB, nil, "OmniAttributeRequirements") - 1) + if omniRequirements then + local omniReqMult = 1 / (omniRequirements - 1) local attributereq = m_floor(reqSource[attr] * reqMult) req = m_floor(attributereq * omniReqMult) end - out = m_max(out, req) + if req > out.val then + out.val = req + out.source = reqSource + end if breakdown then local row = { req = req > output[breakdownAttr] and colorCodes.NEGATIVE..req or req, @@ -1694,15 +1695,16 @@ function calcs.perform(env, skipEHP) end end end - if modDB:Flag(nil, "IgnoreAttributeRequirements") then - out = 0 + if ignoreAttrReq then + out.val = 0 end output["Req"..attr.."String"] = 0 - if out > (output["Req"..breakdownAttr] or 0) then - output["Req"..breakdownAttr.."String"] = out - output["Req"..breakdownAttr] = out + if out.val > (output["Req"..breakdownAttr] or 0) then + output["Req"..breakdownAttr.."String"] = out.val + output["Req"..breakdownAttr] = out.val + output["Req"..breakdownAttr.."Item"] = out.source if breakdown then - output["Req"..breakdownAttr.."String"] = out > (output[breakdownAttr] or 0) and colorCodes.NEGATIVE..out or out + output["Req"..breakdownAttr.."String"] = out.val > (output[breakdownAttr] or 0) and colorCodes.NEGATIVE..(out.val) or out.val end end end @@ -2211,7 +2213,7 @@ function calcs.perform(env, skipEHP) elseif buff.type == "Link" then local linksApplyToMinions = env.minion and modDB:Flag(nil, "Condition:CanLinkToMinions") and modDB:Flag(nil, "Condition:LinkedToMinion") and not env.minion.modDB:Flag(nil, "Condition:CannotBeDamaged") and not env.minion.mainSkill.summonSkill.skillTypes[SkillType.MinionsAreUndamageable] - if env.mode_buffs and (#linkSkills < 1) and (env.build.partyTab.enableExportBuffs or linksApplyToMinions) then + if env.mode_buffs and (#linkSkills < 1) and (partyTabEnableExportBuffs or linksApplyToMinions) then -- Check for extra modifiers to apply to link skills local extraLinkModList = { } for _, value in ipairs(modDB:List(skillCfg, "ExtraLinkEffect")) do @@ -2234,7 +2236,7 @@ function calcs.perform(env, skipEHP) local inc = skillModList:Sum("INC", skillCfg, "LinkEffect", "BuffEffect") local more = skillModList:More(skillCfg, "LinkEffect", "BuffEffect") local mult = (1 + inc / 100) * more - if env.build.partyTab.enableExportBuffs then + if partyTabEnableExportBuffs then local newModList = new("ModList") newModList:AddList(buff.modList) newModList:AddList(extraLinkModList) @@ -2261,7 +2263,7 @@ function calcs.perform(env, skipEHP) modDB:NewMod("WitherEffectStack", "MAX", effect) end --Handle combustion - if (activeSkill.skillTypes[SkillType.Damage] or activeSkill.skillTypes[SkillType.Attack]) and not appliedCombustion then + if enemyDB:Flag(nil, "Condition:Ignited") and (activeSkill.skillTypes[SkillType.Damage] or activeSkill.skillTypes[SkillType.Attack]) and not appliedCombustion then for _, support in ipairs(activeSkill.supportList) do if support.grantedEffect.name == "Combustion" then if not activeSkill.skillModList:Flag(activeSkill.skillCfg, "CannotIgnite") then @@ -2965,6 +2967,7 @@ function calcs.perform(env, skipEHP) local mods = { } if modDB:Flag(nil, "ShockCanStack") then t_insert(mods, modLib.createMod("DamageTaken", "INC", num, "Shock", { type = "Condition", var = "Shocked" }, { type = "Multiplier", var = "ShockStacks", limit = modDB:Override(nil, "ShockStacksMax") or modDB:Sum("BASE", nil, "ShockStacksMax")})) + output["CurrentShock"] = num * m_min(enemyDB:Sum("BASE", nil, "Multiplier:ShockStacks"), modDB:Override(nil, "ShockStacksMax") or modDB:Sum("BASE", nil, "ShockStacksMax")) if breakdown then t_insert(mods, modLib.createMod("DamageTakenByShock", "INC", num, "Shock Stacks", { type = "Condition", var = "Shocked" }, { type = "Multiplier", var = "ShockStacks", limit = modDB:Override(nil, "ShockStacksMax") or modDB:Sum("BASE", nil, "ShockStacksMax")})) end @@ -2980,8 +2983,9 @@ function calcs.perform(env, skipEHP) local mods = { } if modDB:Flag(nil, "ScorchCanStack") then t_insert(mods, modLib.createMod("ElementalResist", "BASE", -num, "Scorch", { type = "Condition", var = "Scorched" }, { type = "Multiplier", var = "ScorchStacks", limit = modDB:Override(nil, "ScorchStacksMax") or modDB:Sum("BASE", nil, "ScorchStacksMax")})) + output["CurrentScorch"] = num * m_min(enemyDB:Sum("BASE", nil, "Multiplier:ScorchStacks"), modDB:Override(nil, "ScorchStacksMax") or modDB:Sum("BASE", nil, "ScorchStacksMax")) if breakdown then - t_insert(mods, modLib.createMod("TotalScorchValue", "BASE", -num, "Scorch Stacks", { type = "Condition", var = "Scorched" }, { type = "Multiplier", var = "ScorchStacks", limit = modDB:Override(nil, "ScorchStacksMax") or modDB:Sum("BASE", nil, "ScorchStacksMax")})) + t_insert(mods, modLib.createMod("ElementalResistByScorch", "BASE", -num, "Scorch Stacks", { type = "Condition", var = "Scorched" }, { type = "Multiplier", var = "ScorchStacks", limit = modDB:Override(nil, "ScorchStacksMax") or modDB:Sum("BASE", nil, "ScorchStacksMax")})) end else t_insert(mods, modLib.createMod("ElementalResist", "BASE", -num, "Scorch", { type = "Condition", var = "Scorched" })) diff --git a/src/Modules/CalcSections.lua b/src/Modules/CalcSections.lua index af359bcb5e..a7f6045c7a 100644 --- a/src/Modules/CalcSections.lua +++ b/src/Modules/CalcSections.lua @@ -678,6 +678,10 @@ return { { breakdown = "CurseEffectMod" }, { modName = "CurseEffect", cfg = "skill" }, }, }, + { label = "Curse Limit", haveOutput = "CurseEffectMod", { format = "{0:output:EnemyCurseLimit}", + { breakdown = "EnemyCurseLimit" }, + { modName = { "CurseLimitIsMaximumPowerCharges", "EnemyCurseLimit" } }, + }, }, { label = "Warcry Effect Mod", haveOutput = "WarcryEffectMod", { format = "x {2:output:WarcryEffectMod}", { breakdown = "WarcryEffectMod" }, { modName = { "WarcryEffect", "BuffEffect" }, cfg = "skill" }, @@ -1147,7 +1151,7 @@ return { { label = "Current Scorch", bgCol = colorCodes.SCORCHBG, haveOutput = "CurrentScorch", { format = "{0:output:CurrentScorch}%", { label = "Configured Scorch", modName = "ScorchVal", enemy = true, modType = "BASE" }, { label = "Guaranteed Scorches", modName = "ScorchOverride", modType = "BASE" }, - { label = "Total Scorch", modName = "TotalScorchValue", enemy = true, cfg = "skill" }, + { label = "Total Scorch", modName = "ElementalResistByScorch", enemy = true, cfg = "skill" }, }, }, { label = "Effect of Chill", bgCol = colorCodes.CHILLBG, flag = "chill", haveOutput = "ChillSourceEffect", { format = "{0:output:ChillSourceEffect}%", { breakdown = "DotChill" }, }, }, { label = "Chill Effect Mod", bgCol = colorCodes.CHILLBG, flag = "chill", { format = "x {2:output:ChillEffectMod}", diff --git a/src/Modules/CalcSetup.lua b/src/Modules/CalcSetup.lua index b50eb21364..fba8c3bab9 100644 --- a/src/Modules/CalcSetup.lua +++ b/src/Modules/CalcSetup.lua @@ -54,8 +54,8 @@ function calcs.initModDB(env, modDB) modDB:NewMod("TotemPlacementTime", "BASE", 0.6, "Base") modDB:NewMod("BallistaPlacementTime", "BASE", 0.35, "Base") modDB:NewMod("ActiveTotemLimit", "BASE", 1, "Base") - modDB:NewMod("ShockStacksMax", "BASE", 0, "Base") - modDB:NewMod("ScorchStacksMax", "BASE", 0, "Base") + modDB:NewMod("ShockStacksMax", "BASE", 1, "Base") + modDB:NewMod("ScorchStacksMax", "BASE", 1, "Base") modDB:NewMod("MovementSpeed", "INC", -30, "Base", { type = "Condition", var = "Maimed" }) modDB:NewMod("DamageTaken", "INC", 10, "Base", ModFlag.Attack, { type = "Condition", var = "Intimidated"}) modDB:NewMod("DamageTaken", "INC", 10, "Base", ModFlag.Attack, { type = "Condition", var = "Intimidated", neg = true}, { type = "Condition", var = "Party:Intimidated"}) @@ -983,19 +983,22 @@ function calcs.initEnv(build, mode, override, specEnv) if item.shaper or item.elder then env.itemModDB.multipliers.ShaperOrElderItem = (env.itemModDB.multipliers.ShaperOrElderItem or 0) - 1 end - local otherRing = (slotName == "Ring 1" and build.itemsTab.items[build.itemsTab.orderedSlots[59].selItemId]) or (slotName == "Ring 2" and build.itemsTab.items[build.itemsTab.orderedSlots[58].selItemId]) + local otherRing = items[(slotName == "Ring 1" and "Ring 2") or (slotName == "Ring 2" and "Ring 1")] if otherRing and not otherRing.name:match("Kalandra's Touch") then - local otherRingList = otherRing and copyTable(otherRing.modList or otherRing.slotModList[slot.slotNum]) or {} - for index, mod in ipairs(otherRingList) do - modLib.setSource(mod, item.modSource) + for _, mod in ipairs(otherRing.modList or otherRing.slotModList[slot.slotNum] or {}) do + -- Filter out SocketedIn type mods for _, tag in ipairs(mod) do if tag.type == "SocketedIn" then - otherRingList[index] = nil - break + goto skip_mod end end + + local modCopy = copyTable(mod) + modLib.setSource(modCopy, item.modSource) + env.itemModDB:ScaleAddMod(modCopy, scale) + + ::skip_mod:: end - env.itemModDB:ScaleAddList(otherRingList, scale) -- Adjust multipliers based on other ring for mult, property in pairs({["CorruptedItem"] = "corrupted", ["ShaperItem"] = "shaper", ["ElderItem"] = "elder"}) do if otherRing[property] then @@ -1300,8 +1303,19 @@ function calcs.initEnv(build, mode, override, specEnv) env.player.weaponData1 = env.player.itemList["Weapon 1"] and env.player.itemList["Weapon 1"].weaponData and env.player.itemList["Weapon 1"].weaponData[1] or copyTable(env.data.unarmedWeaponData[env.classId]) if env.player.weaponData1.countsAsDualWielding then env.player.weaponData2 = env.player.itemList["Weapon 1"].weaponData[2] + elseif not env.player.itemList["Weapon 2"] then + -- Hollow Palm Technique + if (not env.player.itemList["Weapon 1"]) and (not env.player.itemList["Gloves"]) and env.modDB.mods.Keystone then + for _, keystone in ipairs(env.modDB.mods.Keystone) do + if keystone.value == "Hollow Palm Technique" then + env.player.weaponData2 = copyTable(env.data.unarmedWeaponData[env.classId]) + break + end + end + end + env.player.weaponData2 = env.player.weaponData2 or { } else - env.player.weaponData2 = env.player.itemList["Weapon 2"] and env.player.itemList["Weapon 2"].weaponData and env.player.itemList["Weapon 2"].weaponData[2] or { } + env.player.weaponData2 = env.player.itemList["Weapon 2"].weaponData and env.player.itemList["Weapon 2"].weaponData[2] or { } end -- Determine main skill group diff --git a/src/Modules/CalcTriggers.lua b/src/Modules/CalcTriggers.lua index 4bcfd86730..9ce1f97275 100644 --- a/src/Modules/CalcTriggers.lua +++ b/src/Modules/CalcTriggers.lua @@ -535,6 +535,9 @@ local function defaultTriggerHandler(env, config) end trigRate = trigRate / m_ceil(manaSpentThreshold / sourceManaCost) else + if breakdown then + t_insert(breakdown.EffectiveSourceRate, s_format("Source skill has no mana cost", output.EffectiveSourceRate)) + end trigRate = 0 end end @@ -1399,6 +1402,15 @@ local configTable = { return slotMatch(env, skill) and skill.triggeredBy and calcLib.canGrantedEffectSupportActiveSkill(skill.triggeredBy.grantedEffect, skill) end} end, + ["supporttriggerfirespellonhit"] = function(env) + return {triggerSkillCond = function(env, skill) + -- Skill is triggered only when the weapon with the enchant on it hits + return skill.skillTypes[SkillType.Melee] + end, + triggeredSkillCond = function(env, skill) + return skill.skillData.triggeredBySettlersEnchantTrigger and slotMatch(env, skill) + end} + end, } -- Find unique item trigger name diff --git a/src/Modules/Calcs.lua b/src/Modules/Calcs.lua index 68f46b9189..a92162ebd0 100644 --- a/src/Modules/Calcs.lua +++ b/src/Modules/Calcs.lua @@ -8,6 +8,7 @@ local ipairs = ipairs local t_insert = table.insert local s_format = string.format local m_min = math.min +local m_ceil = math.ceil local calcs = { } calcs.breakdownModule = "Modules/CalcBreakdown" @@ -101,7 +102,7 @@ local function getCalculator(build, fullInit, modFunc) -- Run calculation pass calcs.perform(env) - fullDPS = calcs.calcFullDPS(build, "CALCULATOR", {}, { cachedPlayerDB = cachedPlayerDB, cachedEnemyDB = cachedEnemyDB, cachedMinionDB = cachedMinionDB, env = env}) + fullDPS = calcs.calcFullDPS(build, "CALCULATOR", {}, { cachedPlayerDB = cachedPlayerDB, cachedEnemyDB = cachedEnemyDB, cachedMinionDB = cachedMinionDB, env = nil}) env.player.output.SkillDPS = fullDPS.skills env.player.output.FullDPS = fullDPS.combinedDPS env.player.output.FullDotDPS = fullDPS.TotalDotDPS @@ -123,30 +124,29 @@ function calcs.getMiscCalculator(build) -- Run base calculation pass local env, cachedPlayerDB, cachedEnemyDB, cachedMinionDB = calcs.initEnv(build, "CALCULATOR") calcs.perform(env) - local fullDPS = calcs.calcFullDPS(build, "CALCULATOR", {}, { cachedPlayerDB = cachedPlayerDB, cachedEnemyDB = cachedEnemyDB, cachedMinionDB = cachedMinionDB, env = env}) - env.player.output.SkillDPS = fullDPS.skills - env.player.output.FullDPS = fullDPS.combinedDPS - env.player.output.FullDotDPS = fullDPS.TotalDotDPS - - local baseOutput = env.player.output - - return function(override, accelerate) + local fullDPS = calcs.calcFullDPS(build, "CALCULATOR", {}, { cachedPlayerDB = cachedPlayerDB, cachedEnemyDB = cachedEnemyDB, cachedMinionDB = cachedMinionDB, env = nil}) + local usedFullDPS = #fullDPS.skills > 0 + if usedFullDPS then + env.player.output.SkillDPS = fullDPS.skills + env.player.output.FullDPS = fullDPS.combinedDPS + env.player.output.FullDotDPS = fullDPS.TotalDotDPS + end + return function(override, useFullDPS) local env, cachedPlayerDB, cachedEnemyDB, cachedMinionDB = calcs.initEnv(build, "CALCULATOR", override) -- we need to preserve the override somewhere for use by possible trigger-based build-outs with overrides env.override = override calcs.perform(env) - if GlobalCache.useFullDPS or build.viewMode == "TREE" then + if (useFullDPS ~= false or build.viewMode == "TREE") and usedFullDPS then -- prevent upcoming calculation from using Cached Data and thus forcing it to re-calculate new FullDPS roll-up -- without this, FullDPS increase/decrease when for node/item/gem comparison would be all 0 as it would be comparing -- A with A (due to cache reuse) instead of A with B - local fullDPS = calcs.calcFullDPS(build, "CALCULATOR", override, { cachedPlayerDB = cachedPlayerDB, cachedEnemyDB = cachedEnemyDB, cachedMinionDB = cachedMinionDB, env = env, accelerate = accelerate }) - -- reset cache usage + local fullDPS = calcs.calcFullDPS(build, "CALCULATOR", override, { cachedPlayerDB = cachedPlayerDB, cachedEnemyDB = cachedEnemyDB, cachedMinionDB = cachedMinionDB, env = nil}) env.player.output.SkillDPS = fullDPS.skills env.player.output.FullDPS = fullDPS.combinedDPS env.player.output.FullDotDPS = fullDPS.TotalDotDPS end return env.player.output - end, baseOutput + end, env.player.output end local function getActiveSkillCount(activeSkill) @@ -201,25 +201,12 @@ function calcs.calcFullDPS(build, mode, override, specEnv) local burningGroundSource = "" local causticGroundSource = "" - -- calc defences extra part should only run on the last skill of FullDPS - local numActiveSkillInFullDPS = 0 - for _, activeSkill in ipairs(fullEnv.player.activeSkillList) do - if activeSkill.socketGroup and activeSkill.socketGroup.includeInFullDPS then - local activeSkillCount, enabled = getActiveSkillCount(activeSkill) - if enabled then - numActiveSkillInFullDPS = numActiveSkillInFullDPS + 1 - end - end - end - - GlobalCache.numActiveSkillInFullDPS = 0 for _, activeSkill in ipairs(fullEnv.player.activeSkillList) do if activeSkill.socketGroup and activeSkill.socketGroup.includeInFullDPS then local activeSkillCount, enabled = getActiveSkillCount(activeSkill) if enabled then - GlobalCache.numActiveSkillInFullDPS = GlobalCache.numActiveSkillInFullDPS + 1 fullEnv.player.mainSkill = activeSkill - calcs.perform(fullEnv, (GlobalCache.numActiveSkillInFullDPS ~= numActiveSkillInFullDPS)) + calcs.perform(fullEnv, true) usedEnv = fullEnv local minionName = nil if activeSkill.minion or usedEnv.minion then @@ -455,8 +442,13 @@ function calcs.buildOutput(build, mode) if cachedCost then local totalPool = (output.EnergyShieldProtectsMana and costResource == "ManaCost" and output["EnergyShield"] or 0) + (output[pool] or 0) if totalPool < cachedCost then - output[costResource.."Warning"] = output[costResource.."Warning"] or {} - t_insert(output[costResource.."Warning"], skill.activeEffect.grantedEffect.name) + local rawPool = pool:gsub("Unreserved$", "") + local reservation = GlobalCache.cachedData[mode][uuid].Env.player.mainSkill and GlobalCache.cachedData[mode][uuid].Env.player.mainSkill.skillData[rawPool .. "ReservedPercent"] + -- Skill has both cost and reservation check if there's available pool for raw cost before reservation + if not reservation or (reservation and (totalPool + m_ceil((output[rawPool] or 0) * reservation / 100)) < cachedCost) then + output[costResource.."Warning"] = output[costResource.."Warning"] or {} + t_insert(output[costResource.."Warning"], skill.activeEffect.grantedEffect.name) + end end end end diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 902dabc18f..0957924717 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -32,7 +32,7 @@ end local function banditTooltip(tooltip, mode, index, value) local banditBenefits = { ["None"] = "Grants 1 Passive Skill Point", - ["Oak"] = "+40 to Maximum Life", + ["Oak"] = "+40 to Maximum ^xE05030Life", ["Kraityn"] = "8% increased Movement Speed", ["Alira"] = "+15% to all Elemental Resistances", } @@ -375,6 +375,15 @@ return { { var = "embraceMadnessActive", type = "check", label = "Is Embrace Madness active?", ifSkill = "Embrace Madness", apply = function(val, modList, enemyModList) modList:NewMod("Condition:AffectedByGloriousMadness", "FLAG", true, "Config") end }, + { var = "touchedDebuffsCount", type = "countAllowZero", label = "Glorious Madness Stacks", ifOption = "embraceMadnessActive", defaultState = 10, tooltip = "Glorious Madness Stacks grants:\n\tEroding Touch: 6% inc Damage Taken per stack\n\tParalysing Touch: 6% reduced Action Speed per stack\n\tDiluting Touch: 9% reduced Flask charges gained and 9% reduced Flask Effect per stack\n\tWasting Touch: 9% reduced ^xE05030Life ^7and ^x88FFFFEnergy Shield ^7recovery rate per stack", apply = function(val, modList, enemyModList) + val = m_min(val, 10) + modList:NewMod("DamageTaken", "INC", val * 6, val.." Eroding Touch Stacks", { type = "GlobalEffect", effectType = "Debuff" }, { type = "Condition", var = "AffectedByGloriousMadness" }) + modList:NewMod("ActionSpeed", "INC", -val * 6, val.." Paralysing Touch Stacks", { type = "GlobalEffect", effectType = "Debuff" }, { type = "Condition", var = "AffectedByGloriousMadness" }) + modList:NewMod("FlaskChargesGained", "INC", -val * 9, val.." Diluting Touch Stacks", { type = "GlobalEffect", effectType = "Debuff" }, { type = "Condition", var = "AffectedByGloriousMadness" }) + modList:NewMod("FlaskEffect", "INC", -val * 9, val.." Diluting Touch Stacks", { type = "GlobalEffect", effectType = "Debuff" }, { type = "Condition", var = "AffectedByGloriousMadness" }) + modList:NewMod("LifeRecoveryRate", "INC", -val * 9, val.." Wasting Touch Stacks", { type = "GlobalEffect", effectType = "Debuff" }, { type = "Condition", var = "AffectedByGloriousMadness" }) + modList:NewMod("EnergyShieldRecoveryRate", "INC", -val * 9, val.." Wasting Touch Stacks", { type = "GlobalEffect", effectType = "Debuff" }, { type = "Condition", var = "AffectedByGloriousMadness" }) + end }, { label = "Feeding Frenzy:", ifSkill = "Feeding Frenzy" }, { var = "feedingFrenzyFeedingFrenzyActive", type = "check", label = "Is Feeding Frenzy active?", ifSkill = "Feeding Frenzy", tooltip = "Feeding Frenzy grants:\n\t10% more Minion Damage\n\t10% increased Minion Movement Speed\n\t10% increased Minion Attack and Cast Speed", apply = function(val, modList, enemyModList) modList:NewMod("Condition:FeedingFrenzyActive", "FLAG", true, "Config") @@ -1369,7 +1378,7 @@ Huge sets the radius to 11. { var = "conditionSoulGainPrevention", type = "check", label = "Do you have Soul Gain Prevention?", ifCond = "SoulGainPrevention", apply = function(val, modList, enemyModList) modList:NewMod("Condition:SoulGainPrevention", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "conditionUsedWarcryRecently", type = "check", label = "Have you used a Warcry Recently?", ifFlag = "warcry", implyCondList = {"UsedWarcryInPast8Seconds", "UsedSkillRecently"}, tooltip = "This also implies that you have used a Skill Recently.", apply = function(val, modList, enemyModList) + { var = "conditionUsedWarcryRecently", type = "check", label = "Have you used a Warcry Recently?", {ifFlag = "warcry", ifCond = "UsedWarcryRecently"}, implyCondList = {"UsedWarcryInPast8Seconds", "UsedSkillRecently"}, tooltip = "This also implies that you have used a Skill Recently.", apply = function(val, modList, enemyModList) modList:NewMod("Condition:UsedWarcryRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) modList:NewMod("Condition:UsedWarcryInPast8Seconds", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) modList:NewMod("Condition:UsedSkillRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) @@ -1423,7 +1432,7 @@ Huge sets the radius to 11. { var = "conditionRavenousCorpseConsumed", type = "check", label = "Has Ravenous consumed a corpse?", ifSkill = "Ravenous", implyCond = "ConsumedCorpseRecently", tooltip = "Corpse must be the same type as the monster you're fighting.\nThis also implies you have 'Consumed a corpse Recently'", apply = function(val, modList, enemyModList) modList:NewMod("Condition:RavenousCorpseConsumed", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, - { var = "multiplierWarcryUsedRecently", type = "count", label = "# of Warcries Used Recently:", ifFlag = "warcry", implyCondList = {"UsedWarcryRecently", "UsedWarcryInPast8Seconds", "UsedSkillRecently"}, tooltip = "This also implies you have 'Used a Warcry Recently', 'Used a Warcry in the past 8 seconds', and 'Used a Skill Recently'", apply = function(val, modList, enemyModList) + { var = "multiplierWarcryUsedRecently", type = "count", label = "# of Warcries Used Recently:", {ifFlag = "warcry", ifMult = "WarcryUsedRecently"}, implyCondList = {"UsedWarcryRecently", "UsedWarcryInPast8Seconds", "UsedSkillRecently"}, tooltip = "This also implies you have 'Used a Warcry Recently', 'Used a Warcry in the past 8 seconds', and 'Used a Skill Recently'", apply = function(val, modList, enemyModList) modList:NewMod("Multiplier:WarcryUsedRecently", "BASE", m_min(val, 100), "Config", { type = "Condition", var = "Combat" }) modList:NewMod("Condition:UsedWarcryRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) modList:NewMod("Condition:UsedWarcryInPast8Seconds", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) @@ -1767,7 +1776,7 @@ Huge sets the radius to 11. { var = "conditionEnemyRareOrUnique", type = "check", label = "Is the enemy Rare or Unique?", ifEnemyCond = "EnemyRareOrUnique", tooltip = "The enemy will automatically be considered to be Unique if they are a Boss,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) enemyModList:NewMod("Condition:RareOrUnique", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, - { var = "enemyIsBoss", type = "list", label = "Is the enemy a Boss?", defaultIndex = 1, tooltip = data.enemyIsBossTooltip, list = {{val="None",label="No"},{val="Boss",label="Standard Boss"},{val="Pinnacle",label="Guardian/Pinnacle Boss"},{val="Uber",label="Uber Pinnacle Boss"}}, apply = function(val, modList, enemyModList, build) + { var = "enemyIsBoss", type = "list", label = "Is the enemy a Boss?", defaultIndex = 3, tooltip = data.enemyIsBossTooltip, list = {{val="None",label="No"},{val="Boss",label="Standard Boss"},{val="Pinnacle",label="Guardian/Pinnacle Boss"},{val="Uber",label="Uber Pinnacle Boss"}}, apply = function(val, modList, enemyModList, build) -- These defaults are here so that the placeholders get reset correctly build.configTab.varControls['enemySpeed']:SetPlaceholder(700, true) build.configTab.varControls['enemyCritChance']:SetPlaceholder(5, true) @@ -1944,13 +1953,13 @@ Huge sets the radius to 11. { var = "enemyMaxResist", type = "check", label = "Enemy Max Resistance is always 75%", tooltip = "Enemy Maximum resistance is increased by the resistance configurations \nThis locks it at the default value", apply = function(val, modList, enemyModList) enemyModList:NewMod("DoNotChangeMaxResFromConfig", "FLAG", true, "EnemyConfig") end }, - { var = "enemyBlockChance", type = "integer", label = "Enemy Block Chance:", apply = function(val, modList, enemyModList) + { var = "enemyBlockChance", type = "countAllowZero", label = "Enemy Block Chance:", apply = function(val, modList, enemyModList) enemyModList:NewMod("BlockChance", "BASE", val, "Config") end }, - { var = "enemyEvasion", type = "count", label = "Enemy Base ^x33FF77Evasion:", apply = function(val, modList, enemyModList) + { var = "enemyEvasion", type = "countAllowZero", label = "Enemy Base ^x33FF77Evasion:", apply = function(val, modList, enemyModList) enemyModList:NewMod("Evasion", "BASE", val, "Config") end }, - { var = "enemyArmour", type = "count", label = "Enemy Base Armour:", apply = function(val, modList, enemyModList) + { var = "enemyArmour", type = "countAllowZero", label = "Enemy Base Armour:", apply = function(val, modList, enemyModList) enemyModList:NewMod("Armour", "BASE", val, "Config") end }, { var = "presetBossSkills", type = "list", defaultIndex = 1, label = "Boss Skill Preset", tooltipFunc = bossSkillsTooltip, list = data.bossSkillsList, apply = function(val, modList, enemyModList, build) @@ -2026,6 +2035,10 @@ Huge sets the radius to 11. end end else + if build.configTab.varControls['enemyDamageType'].enabled == false then + build.configTab.input['enemyDamageType'] = "Average" + build.configTab.varControls['enemyDamageType']:SelByValue("Average", "val") + end build.configTab.varControls['enemyDamageType'].enabled = true end end }, @@ -2039,21 +2052,21 @@ Huge sets the radius to 11. {val="Spell",label="Spell"}, {val="SpellProjectile",label="Projectile Spell"} } }, - { var = "enemySpeed", type = "integer", label = "Enemy attack / cast time in ms:", defaultPlaceholderState = 700 }, + { var = "enemySpeed", type = "countAllowZero", label = "Enemy attack / cast time in ms:", defaultPlaceholderState = 700 }, { var = "enemyMultiplierPvpDamage", type = "count", label = "Custom PvP Damage multiplier percent:", ifFlag = "isPvP", tooltip = "This multiplies the damage of a given skill in pvp, for instance any with damage multiplier specific to pvp (from skill or support or item like sire of shards)", apply = function(val, modList, enemyModList) enemyModList:NewMod("MultiplierPvpDamage", "BASE", val, "Config") end }, - { var = "enemyCritChance", type = "integer", label = "Enemy critical strike chance:", defaultPlaceholderState = 5 }, - { var = "enemyCritDamage", type = "integer", label = "Enemy critical strike multiplier:", defaultPlaceholderState = 30 }, - { var = "enemyPhysicalDamage", type = "integer", label = "Enemy Skill Physical Damage:", tooltip = "This overrides the default damage amount used to estimate your damage reduction from armour.\nThe default is 1.5 times the enemy's base damage, which is the same value\nused in-game to calculate the estimate shown on the character sheet.", defaultPlaceholderState = 7 }, - { var = "enemyPhysicalOverwhelm", type = "integer", label = "Enemy Skill Physical Overwhelm:"}, - { var = "enemyLightningDamage", type = "integer", label = "Enemy Skill ^xADAA47Lightning Damage:"}, - { var = "enemyLightningPen", type = "integer", label = "Enemy Skill ^xADAA47Lightning Pen:"}, - { var = "enemyColdDamage", type = "integer", label = "Enemy Skill ^x3F6DB3Cold Damage:"}, - { var = "enemyColdPen", type = "integer", label = "Enemy Skill ^x3F6DB3Cold Pen:"}, - { var = "enemyFireDamage", type = "integer", label = "Enemy Skill ^xB97123Fire Damage:"}, - { var = "enemyFirePen", type = "integer", label = "Enemy Skill ^xB97123Fire Pen:"}, - { var = "enemyChaosDamage", type = "integer", label = "Enemy Skill ^xD02090Chaos Damage:"}, + { var = "enemyCritChance", type = "countAllowZero", label = "Enemy critical strike chance:", defaultPlaceholderState = 5 }, + { var = "enemyCritDamage", type = "countAllowZero", label = "Enemy critical strike multiplier:", defaultPlaceholderState = 30 }, + { var = "enemyPhysicalDamage", type = "countAllowZero", label = "Enemy Skill Physical Damage:", tooltip = "This overrides the default damage amount used to estimate your damage reduction from armour.\nThe default is 1.5 times the enemy's base damage, which is the same value\nused in-game to calculate the estimate shown on the character sheet.", defaultPlaceholderState = 7 }, + { var = "enemyPhysicalOverwhelm", type = "countAllowZero", label = "Enemy Skill Physical Overwhelm:"}, + { var = "enemyLightningDamage", type = "countAllowZero", label = "Enemy Skill ^xADAA47Lightning Damage:"}, + { var = "enemyLightningPen", type = "countAllowZero", label = "Enemy Skill ^xADAA47Lightning Pen:"}, + { var = "enemyColdDamage", type = "countAllowZero", label = "Enemy Skill ^x3F6DB3Cold Damage:"}, + { var = "enemyColdPen", type = "countAllowZero", label = "Enemy Skill ^x3F6DB3Cold Pen:"}, + { var = "enemyFireDamage", type = "countAllowZero", label = "Enemy Skill ^xB97123Fire Damage:"}, + { var = "enemyFirePen", type = "countAllowZero", label = "Enemy Skill ^xB97123Fire Pen:"}, + { var = "enemyChaosDamage", type = "countAllowZero", label = "Enemy Skill ^xD02090Chaos Damage:"}, -- Section: Custom mods { section = "Custom Modifiers", col = 1 }, diff --git a/src/Modules/Data.lua b/src/Modules/Data.lua index 7a35d045c9..c379846060 100644 --- a/src/Modules/Data.lua +++ b/src/Modules/Data.lua @@ -522,6 +522,7 @@ data.jewelRadius = data.setJewelRadiiGlobally(latestTreeVersion) data.enchantmentSource = { { name = "ENKINDLING", label = "Enkindling Orb" }, { name = "INSTILLING", label = "Instilling Orb" }, + { name = "RUNESMITH", label = "Runecraft Bench" }, { name = "HEIST", label = "Heist" }, { name = "HARVEST", label = "Harvest" }, { name = "DEDICATION", label = "Dedication to the Goddess" }, @@ -555,8 +556,26 @@ data.enchantments = { ["Belt"] = LoadModule("Data/EnchantmentBelt"), ["Body Armour"] = LoadModule("Data/EnchantmentBody"), ["Weapon"] = LoadModule("Data/EnchantmentWeapon"), - ["Flask"] = LoadModule("Data/EnchantmentFlask"), + ["UtilityFlask"] = LoadModule("Data/EnchantmentFlask"), } +do + data.enchantments["Flask"] = data.enchantments["UtilityFlask"]--["HARVEST"] + for baseType, _ in pairs(data.weaponTypeInfo) do + data.enchantments[baseType] = { } + for enchantmentType, enchantmentList in pairs(data.enchantments["Weapon"]) do + if type(enchantmentList[1]) == "string" then + data.enchantments[baseType][enchantmentType] = enchantmentList + elseif type(enchantmentList[1]) == "table" then + data.enchantments[baseType][enchantmentType] = {} + for _, enchantment in ipairs(enchantmentList) do + if enchantment.types[baseType] then + t_insert(data.enchantments[baseType][enchantmentType], table.concat(enchantment, "/")) + end + end + end + end + end +end data.essences = LoadModule("Data/Essence") data.veiledMods = LoadModule("Data/ModVeiled") data.necropolisMods = LoadModule("Data/ModNecropolis") diff --git a/src/Modules/Main.lua b/src/Modules/Main.lua index 7549c65a48..a3c93a0bea 100644 --- a/src/Modules/Main.lua +++ b/src/Modules/Main.lua @@ -179,23 +179,23 @@ function main:Init() self.defaultItemAffixQuality = saved end - self.anchorMain = new("Control", nil, 4, 0, 0, 0) + self.anchorMain = new("Control", nil, {4, 0, 0, 0}) self.anchorMain.y = function() return self.screenH - 4 end - self.controls.options = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, 0, 0, 68, 20, "Options", function() + self.controls.options = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, {0, 0, 68, 20}, "Options", function() self:OpenOptionsPopup() end) - self.controls.about = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, 72, 0, 68, 20, "About", function() + self.controls.about = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, {72, 0, 68, 20}, "About", function() self:OpenAboutPopup() end) - self.controls.applyUpdate = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, 0, -24, 140, 20, "^x50E050Update Ready", function() + self.controls.applyUpdate = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, {0, -24, 140, 20}, "^x50E050Update Ready", function() self:OpenUpdatePopup() end) self.controls.applyUpdate.shown = function() return launch.updateAvailable and launch.updateAvailable ~= "none" end - self.controls.checkUpdate = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, 0, -24, 140, 20, "", function() + self.controls.checkUpdate = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, {0, -24, 140, 20}, "", function() launch:CheckForUpdate() end) self.controls.checkUpdate.shown = function() @@ -207,19 +207,19 @@ function main:Init() self.controls.checkUpdate.enabled = function() return not launch.updateCheckRunning end - self.controls.forkLabel = new("LabelControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, 148, -26, 0, 16, "") + self.controls.forkLabel = new("LabelControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, {148, -26, 0, 16}, "") self.controls.forkLabel.label = function() return "^8PoB Community Fork" end - self.controls.versionLabel = new("LabelControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, 148, -2, 0, 16, "") + self.controls.versionLabel = new("LabelControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, {148, -2, 0, 16}, "") self.controls.versionLabel.label = function() return "^8Version: "..launch.versionNumber..(launch.versionBranch == "dev" and " (Dev)" or launch.versionBranch == "beta" and " (Beta)" or "") end - self.controls.devMode = new("LabelControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, 0, -26, 0, 20, colorCodes.NEGATIVE.."Dev Mode") + self.controls.devMode = new("LabelControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, {0, -26, 0, 20}, colorCodes.NEGATIVE.."Dev Mode") self.controls.devMode.shown = function() return launch.devMode end - self.controls.dismissToast = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, 0, function() return -self.mainBarHeight + self.toastHeight end, 80, 20, "Dismiss", function() + self.controls.dismissToast = new("ButtonControl", {"BOTTOMLEFT",self.anchorMain,"BOTTOMLEFT"}, {0, function() return -self.mainBarHeight + self.toastHeight end, 80, 20}, "Dismiss", function() self.toastMode = "HIDING" self.toastStart = GetTime() end) @@ -679,6 +679,12 @@ function main:SaveSettings() end t_insert(mode, child) end + + -- if setting save is attempted and mode is nil something has gone very wrong + if not mode.attrib.mode or not mode[1] then + launch:ShowErrMsg("^1Error saving 'Settings.xml': mode element is invalid") + return true + end t_insert(setXML, mode) local accounts = { elem = "Accounts", attrib = { lastAccountName = self.lastAccountName, lastRealm = self.lastRealm } } for accountName, account in pairs(self.gameAccounts) do @@ -734,15 +740,15 @@ function main:OpenPathPopup(invalidPath, ignoreBuild) local controls = { } local defaultLabelPlacementX = 8 - controls.label = new("LabelControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, 20, 206, 16, function() + controls.label = new("LabelControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, 20, 206, 16 }, function() return "^7User settings path contains unicode characters and cannot be loaded.".. "\nCurrent Path: "..invalidPath:gsub("?", "^1?^7").."/Path of Building/".. "\nSpecify a new location for your Settings.xml:" end) - controls.explainButton = new("ButtonControl", { "LEFT", controls.label, "RIGHT" }, 4, 0, 20, 20, "?", function() + controls.explainButton = new("ButtonControl", { "LEFT", controls.label, "RIGHT" }, { 4, 0, 20, 20 }, "?", function() OpenURL("https://github.com/PathOfBuildingCommunity/PathOfBuilding/wiki/Why-do-I-have-to-change-my-Settings-path%3F") end) - controls.userPath = new("EditControl", { "TOPLEFT", controls.label, "TOPLEFT" }, 0, 60, 206, 20, invalidPath, nil, nil, nil, function(buf) + controls.userPath = new("EditControl", { "TOPLEFT", controls.label, "TOPLEFT" }, { 0, 60, 206, 20 }, invalidPath, nil, nil, nil, function(buf) invalidPath = sanitiseText(buf) if not invalidPath:match("?") then controls.save.enabled = true @@ -750,7 +756,7 @@ function main:OpenPathPopup(invalidPath, ignoreBuild) controls.save.enabled = false end end) - controls.save = new("ButtonControl", { "TOPLEFT", controls.userPath, "TOPLEFT" }, 0, 26, 206, 20, "Save", function() + controls.save = new("ButtonControl", { "TOPLEFT", controls.userPath, "TOPLEFT" }, { 0, 26, 206, 20 }, "Save", function() local res, msg = MakeDir(controls.userPath.buf) if not res and msg ~= "No error" then self:OpenMessagePopup("Error", "Couldn't create '"..controls.userPath.buf.."' : "..msg) @@ -760,7 +766,7 @@ function main:OpenPathPopup(invalidPath, ignoreBuild) end end) controls.save.enabled = false - controls.cancel = new("ButtonControl", nil, 0, 0, 0, 0, "Cancel", function() + controls.cancel = new("ButtonControl", nil, { 0, 0, 0, 0 }, "Cancel", function() -- Do nothing, require user to enter a location end) self:OpenPopup(600, 150, "Change Settings Path", controls, "save", nil, "cancel") @@ -792,9 +798,9 @@ function main:OpenOptionsPopup() -- local func to make a new section header local function drawSectionHeader(id, title, omitHorizontalLine) local headerBGColor ={ .6, .6, .6} - controls["section-"..id .. "-bg"] = new("RectangleOutlineControl", { "TOPLEFT", nil, "TOPLEFT" }, 8, currentY, popupWidth - 17, 26, headerBGColor, 1) + controls["section-"..id .. "-bg"] = new("RectangleOutlineControl", { "TOPLEFT", nil, "TOPLEFT" }, { 8, currentY, popupWidth - 17, 26 }, headerBGColor, 1) nextRow(.2) - controls["section-"..id .. "-label"] = new("LabelControl", { "TOPLEFT", nil, "TOPLEFT" }, popupWidth / 2 - 60, currentY, 0, 16, "^7" .. title) + controls["section-"..id .. "-label"] = new("LabelControl", { "TOPLEFT", nil, "TOPLEFT" }, { popupWidth / 2 - 60, currentY, 0, 16 }, "^7" .. title) nextRow(1.5) end @@ -803,25 +809,25 @@ function main:OpenOptionsPopup() drawSectionHeader("app", "Application options") - controls.connectionProtocol = new("DropDownControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 100, 18, { + controls.connectionProtocol = new("DropDownControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 100, 18 }, { { label = "Auto", protocol = 0 }, { label = "IPv4", protocol = 1 }, { label = "IPv6", protocol = 2 }, }, function(index, value) self.connectionProtocol = value.protocol end) - controls.connectionProtocolLabel = new("LabelControl", { "RIGHT", controls.connectionProtocol, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Connection Protocol:") + controls.connectionProtocolLabel = new("LabelControl", { "RIGHT", controls.connectionProtocol, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Connection Protocol:") controls.connectionProtocol.tooltipText = "Changes which protocol is used when downloading updates and importing builds." controls.connectionProtocol:SelByValue(launch.connectionProtocol, "protocol") nextRow() - controls.proxyType = new("DropDownControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 80, 18, { + controls.proxyType = new("DropDownControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 80, 18 }, { { label = "HTTP", scheme = "http" }, { label = "SOCKS", scheme = "socks5" }, { label = "SOCKS5H", scheme = "socks5h" }, }) - controls.proxyLabel = new("LabelControl", { "RIGHT", controls.proxyType, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Proxy server:") - controls.proxyURL = new("EditControl", { "LEFT", controls.proxyType, "RIGHT" }, 4, 0, 206, 18) + controls.proxyLabel = new("LabelControl", { "RIGHT", controls.proxyType, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Proxy server:") + controls.proxyURL = new("EditControl", { "LEFT", controls.proxyType, "RIGHT" }, { 4, 0, 206, 18 }) if launch.proxyURL then local scheme, url = launch.proxyURL:match("(%w+)://(.+)") @@ -830,139 +836,140 @@ function main:OpenOptionsPopup() end nextRow() - controls.buildPath = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 290, 18) - controls.buildPathLabel = new("LabelControl", { "RIGHT", controls.buildPath, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Build save path:") + controls.buildPath = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 290, 18 }) + controls.buildPathLabel = new("LabelControl", { "RIGHT", controls.buildPath, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Build save path:") if self.buildPath ~= self.defaultBuildPath then controls.buildPath:SetText(self.buildPath) end controls.buildPath.tooltipText = "Overrides the default save location for builds.\nThe default location is: '"..self.defaultBuildPath.."'" nextRow() - controls.nodePowerTheme = new("DropDownControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 100, 18, { + controls.nodePowerTheme = new("DropDownControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 100, 18 }, { { label = "Red & Blue", theme = "RED/BLUE" }, { label = "Red & Green", theme = "RED/GREEN" }, { label = "Green & Blue", theme = "GREEN/BLUE" }, }, function(index, value) self.nodePowerTheme = value.theme end) - controls.nodePowerThemeLabel = new("LabelControl", { "RIGHT", controls.nodePowerTheme, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Node Power colours:") + controls.nodePowerThemeLabel = new("LabelControl", { "RIGHT", controls.nodePowerTheme, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Node Power colours:") controls.nodePowerTheme.tooltipText = "Changes the colour scheme used for the node power display on the passive tree." controls.nodePowerTheme:SelByValue(self.nodePowerTheme, "theme") nextRow() - controls.colorPositive = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 100, 18, tostring(self.colorPositive:gsub('^(^)', '0')), nil, nil, 8, function(buf) + controls.colorPositive = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 100, 18 }, tostring(self.colorPositive:gsub('^(^)', '0')), nil, nil, 8, function(buf) local match = string.match(buf, "0x%x+") if match and #match == 8 then updateColorCode("POSITIVE", buf) self.colorPositive = buf end end) - controls.colorPositiveLabel = new("LabelControl", { "RIGHT", controls.colorPositive, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Hex colour for positive values:") + controls.colorPositiveLabel = new("LabelControl", { "RIGHT", controls.colorPositive, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Hex colour for positive values:") controls.colorPositive.tooltipText = "Overrides the default hex colour for positive values in breakdowns. \nExpected format is 0x000000. " .. "The default value is " .. tostring(defaultColorCodes.POSITIVE:gsub('^(^)', '0')) .. ".\nIf updating while inside a build, please re-load the build after saving." nextRow() - controls.colorNegative = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 100, 18, tostring(self.colorNegative:gsub('^(^)', '0')), nil, nil, 8, function(buf) + controls.colorNegative = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 100, 18 }, tostring(self.colorNegative:gsub('^(^)', '0')), nil, nil, 8, function(buf) local match = string.match(buf, "0x%x+") if match and #match == 8 then updateColorCode("NEGATIVE", buf) self.colorNegative = buf end end) - controls.colorNegativeLabel = new("LabelControl", { "RIGHT", controls.colorNegative, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Hex colour for negative values:") + controls.colorNegativeLabel = new("LabelControl", { "RIGHT", controls.colorNegative, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Hex colour for negative values:") controls.colorNegative.tooltipText = "Overrides the default hex colour for negative values in breakdowns. \nExpected format is 0x000000. " .. "The default value is " .. tostring(defaultColorCodes.NEGATIVE:gsub('^(^)', '0')) .. ".\nIf updating while inside a build, please re-load the build after saving." nextRow() - controls.colorHighlight = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 100, 18, tostring(self.colorHighlight:gsub('^(^)', '0')), nil, nil, 8, function(buf) + + controls.colorHighlight = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 100, 18 }, tostring(self.colorHighlight:gsub('^(^)', '0')), nil, nil, 8, function(buf) local match = string.match(buf, "0x%x+") if match and #match == 8 then updateColorCode("HIGHLIGHT", buf) self.colorHighlight = buf end end) - controls.colorHighlightLabel = new("LabelControl", { "RIGHT", controls.colorHighlight, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Hex colour for highlight nodes:") + controls.colorHighlightLabel = new("LabelControl", { "RIGHT", controls.colorHighlight, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Hex colour for highlight nodes:") controls.colorHighlight.tooltipText = "Overrides the default hex colour for highlighting nodes in passive tree search. \nExpected format is 0x000000. " .. "The default value is " .. tostring(defaultColorCodes.HIGHLIGHT:gsub('^(^)', '0')) .."\nIf updating while inside a build, please re-load the build after saving." nextRow() - controls.betaTest = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Opt-in to weekly beta test builds:", function(state) + controls.betaTest = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20 }, "^7Opt-in to weekly beta test builds:", function(state) self.betaTest = state end) nextRow() - controls.edgeSearchHighlight = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Show search circles at viewport edge", function(state) + controls.edgeSearchHighlight = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20}, "^7Show search circles at viewport edge", function(state) self.edgeSearchHighlight = state end) nextRow() - controls.showPublicBuilds = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Show Latest/Trending builds:", function(state) + controls.showPublicBuilds = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20 }, "^7Show Latest/Trending builds:", function(state) self.showPublicBuilds = state end) nextRow() drawSectionHeader("build", "Build-related options") - controls.showThousandsSeparators = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT"}, defaultLabelPlacementX, currentY, 20, "^7Show thousands separators:", function(state) + controls.showThousandsSeparators = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT"}, { defaultLabelPlacementX, currentY, 20 }, "^7Show thousands separators:", function(state) self.showThousandsSeparators = state end) controls.showThousandsSeparators.state = self.showThousandsSeparators nextRow() - controls.thousandsSeparator = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 30, 20, self.thousandsSeparator, nil, "%w", 1, function(buf) + controls.thousandsSeparator = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 30, 20 }, self.thousandsSeparator, nil, "%w", 1, function(buf) self.thousandsSeparator = buf end) - controls.thousandsSeparatorLabel = new("LabelControl", { "RIGHT", controls.thousandsSeparator, "LEFT" }, defaultLabelSpacingPx, 0, 92, 16, "^7Thousands separator:") + controls.thousandsSeparatorLabel = new("LabelControl", { "RIGHT", controls.thousandsSeparator, "LEFT" }, { defaultLabelSpacingPx, 0, 92, 16 }, "^7Thousands separator:") nextRow() - controls.decimalSeparator = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 30, 20, self.decimalSeparator, nil, "%w", 1, function(buf) + controls.decimalSeparator = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 30, 20 }, self.decimalSeparator, nil, "%w", 1, function(buf) self.decimalSeparator = buf end) - controls.decimalSeparatorLabel = new("LabelControl", { "RIGHT", controls.decimalSeparator, "LEFT" }, defaultLabelSpacingPx, 0, 92, 16, "^7Decimal separator:") + controls.decimalSeparatorLabel = new("LabelControl", { "RIGHT", controls.decimalSeparator, "LEFT" }, { defaultLabelSpacingPx, 0, 92, 16 }, "^7Decimal separator:") nextRow() - controls.titlebarName = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Show build name in window title:", function(state) + controls.titlebarName = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20 }, "^7Show build name in window title:", function(state) self.showTitlebarName = state end) nextRow() - controls.defaultGemQuality = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 80, 20, self.defaultGemQuality, nil, "%D", 2, function(gemQuality) + controls.defaultGemQuality = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 80, 20 }, self.defaultGemQuality, nil, "%D", 2, function(gemQuality) self.defaultGemQuality = m_min(tonumber(gemQuality) or 0, 23) end) controls.defaultGemQuality.tooltipText = "Set the default quality that can be overwritten by build-related quality settings in the skill panel." - controls.defaultGemQualityLabel = new("LabelControl", { "RIGHT", controls.defaultGemQuality, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Default gem quality:") + controls.defaultGemQualityLabel = new("LabelControl", { "RIGHT", controls.defaultGemQuality, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Default gem quality:") nextRow() - controls.defaultCharLevel = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 80, 20, self.defaultCharLevel, nil, "%D", 3, function(charLevel) + controls.defaultCharLevel = new("EditControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 80, 20 }, self.defaultCharLevel, nil, "%D", 3, function(charLevel) self.defaultCharLevel = m_min(m_max(tonumber(charLevel) or 1, 1), 100) end) controls.defaultCharLevel.tooltipText = "Set the default level of your builds. If this is higher than 1, manual level mode will be enabled by default in new builds." - controls.defaultCharLevelLabel = new("LabelControl", { "RIGHT", controls.defaultCharLevel, "LEFT" }, defaultLabelSpacingPx, 0, 0, 16, "^7Default character level:") + controls.defaultCharLevelLabel = new("LabelControl", { "RIGHT", controls.defaultCharLevel, "LEFT" }, { defaultLabelSpacingPx, 0, 0, 16 }, "^7Default character level:") nextRow() - controls.defaultItemAffixQualitySlider = new("SliderControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 200, 20, function(value) + controls.defaultItemAffixQualitySlider = new("SliderControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 200, 20 }, function(value) self.defaultItemAffixQuality = round(value, 2) controls.defaultItemAffixQualityValue.label = (self.defaultItemAffixQuality * 100) .. "%" end) - controls.defaultItemAffixQualityLabel = new("LabelControl", { "RIGHT", controls.defaultItemAffixQualitySlider, "LEFT" }, defaultLabelSpacingPx, 0, 92, 16, "^7Default item affix quality:") - controls.defaultItemAffixQualityValue = new("LabelControl", { "LEFT", controls.defaultItemAffixQualitySlider, "RIGHT" }, -defaultLabelSpacingPx, 0, 92, 16, "50%") + controls.defaultItemAffixQualityLabel = new("LabelControl", { "RIGHT", controls.defaultItemAffixQualitySlider, "LEFT" }, { defaultLabelSpacingPx, 0, 92, 16 }, "^7Default item affix quality:") + controls.defaultItemAffixQualityValue = new("LabelControl", { "LEFT", controls.defaultItemAffixQualitySlider, "RIGHT" }, { -defaultLabelSpacingPx, 0, 92, 16 }, "50%") controls.defaultItemAffixQualitySlider.val = self.defaultItemAffixQuality controls.defaultItemAffixQualityValue.label = (self.defaultItemAffixQuality * 100) .. "%" nextRow() - controls.showWarnings = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Show build warnings:", function(state) + controls.showWarnings = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20 }, "^7Show build warnings:", function(state) self.showWarnings = state end) controls.showWarnings.state = self.showWarnings nextRow() - controls.slotOnlyTooltips = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Show tooltips only for affected slots:", function(state) + controls.slotOnlyTooltips = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20 }, "^7Show tooltips only for affected slots:", function(state) self.slotOnlyTooltips = state end) controls.slotOnlyTooltips.state = self.slotOnlyTooltips nextRow() - controls.invertSliderScrollDirection = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Invert slider scroll direction:", function(state) + controls.invertSliderScrollDirection = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20 }, "^7Invert slider scroll direction:", function(state) self.invertSliderScrollDirection = state end) controls.invertSliderScrollDirection.tooltipText = "Default scroll direction is:\nScroll Up = Move right\nScroll Down = Move left" @@ -970,7 +977,7 @@ function main:OpenOptionsPopup() if launch.devMode then nextRow() - controls.disableDevAutoSave = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, defaultLabelPlacementX, currentY, 20, "^7Disable Dev AutoSave:", function(state) + controls.disableDevAutoSave = new("CheckBoxControl", { "TOPLEFT", nil, "TOPLEFT" }, { defaultLabelPlacementX, currentY, 20 }, "^7Disable Dev AutoSave:", function(state) self.disableDevAutoSave = state end) controls.disableDevAutoSave.tooltipText = "Do not Autosave builds while on Dev branch" @@ -1003,7 +1010,7 @@ function main:OpenOptionsPopup() -- last line with buttons has more spacing nextRow(1.5) - controls.save = new("ButtonControl", nil, -45, currentY, 80, 20, "Save", function() + controls.save = new("ButtonControl", nil, {-45, currentY, 80, 20}, "Save", function() launch.connectionProtocol = tonumber(self.connectionProtocol) if controls.proxyURL.buf:match("%w") then launch.proxyURL = controls.proxyType.list[controls.proxyType.selIndex].scheme .. "://" .. controls.proxyURL.buf @@ -1027,7 +1034,7 @@ function main:OpenOptionsPopup() main:ClosePopup() main:SaveSettings() end) - controls.cancel = new("ButtonControl", nil, 45, currentY, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, currentY, 80, 20}, "Cancel", function() self.nodePowerTheme = initialNodePowerTheme self.colorPositive = initialColorPositive updateColorCode("POSITIVE", self.colorPositive) @@ -1097,15 +1104,15 @@ function main:OpenUpdatePopup() end end local controls = { } - controls.changeLog = new("TextListControl", nil, 0, 20, 780, 542, nil, changeList) - controls.update = new("ButtonControl", nil, -45, 570, 80, 20, "Update", function() + controls.changeLog = new("TextListControl", nil, {0, 20, 780, 542}, nil, changeList) + controls.update = new("ButtonControl", nil, {-45, 570, 80, 20}, "Update", function() self:ClosePopup() local ret = self:CallMode("CanExit", "UPDATE") if ret == nil or ret == true then launch:ApplyUpdate(launch.updateAvailable) end end) - controls.cancel = new("ButtonControl", nil, 45, 570, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 570, 80, 20}, "Cancel", function() self:ClosePopup() end) self:OpenPopup(800, 600, "Update Available", controls) @@ -1199,23 +1206,23 @@ function main:OpenAboutPopup(helpSectionIndex) helpSectionIndex = newIndex end local controls = { } - controls.close = new("ButtonControl", {"TOPRIGHT",nil,"TOPRIGHT"}, -10, 10, 50, 20, "Close", function() + controls.close = new("ButtonControl", {"TOPRIGHT",nil,"TOPRIGHT"}, {-10, 10, 50, 20}, "Close", function() self:ClosePopup() end) - controls.version = new("LabelControl", nil, 0, 18, 0, 18, "^7Path of Building Community Fork v"..launch.versionNumber) - controls.forum = new("LabelControl", nil, 0, 36, 0, 18, "^7Based on Openarl's Path of Building") - controls.github = new("ButtonControl", nil, 0, 62, 438, 18, "^7GitHub page: ^x4040FFhttps://github.com/PathOfBuildingCommunity/PathOfBuilding", function(control) + controls.version = new("LabelControl", nil, {0, 18, 0, 18}, "^7Path of Building Community Fork v"..launch.versionNumber) + controls.forum = new("LabelControl", nil, {0, 36, 0, 18}, "^7Based on Openarl's Path of Building") + controls.github = new("ButtonControl", nil, {0, 62, 438, 18}, "^7GitHub page: ^x4040FFhttps://github.com/PathOfBuildingCommunity/PathOfBuilding", function(control) OpenURL("https://github.com/PathOfBuildingCommunity/PathOfBuilding") end) - controls.verLabel = new("ButtonControl", { "TOPLEFT", nil, "TOPLEFT" }, 10, 85, 100, 18, "^7Version history:", function() + controls.verLabel = new("ButtonControl", {"TOPLEFT", nil, "TOPLEFT"}, {10, 85, 100, 18}, "^7Version history:", function() controls.changelog.list = changeList controls.changelog.sectionHeights = changeVersionHeights end) - controls.helpLabel = new("ButtonControl", { "TOPRIGHT", nil, "TOPRIGHT" }, -10, 85, 40, 18, "^7Help:", function() + controls.helpLabel = new("ButtonControl", {"TOPRIGHT", nil, "TOPRIGHT"}, {-10, 85, 40, 18}, "^7Help:", function() controls.changelog.list = helpList controls.changelog.sectionHeights = helpSectionHeights end) - controls.changelog = new("TextListControl", nil, 0, 103, popupWidth - 20, 515, {{ x = 1, align = "LEFT" }, { x = 135, align = "LEFT" }}, helpSectionIndex and helpList or changeList, helpSectionIndex and helpSectionHeights or changeVersionHeights) + controls.changelog = new("TextListControl", nil, {0, 103, popupWidth - 20, 515}, {{ x = 1, align = "LEFT" }, { x = 135, align = "LEFT" }}, helpSectionIndex and helpList or changeList, helpSectionIndex and helpSectionHeights or changeVersionHeights) if helpSectionIndex then controls.changelog.controls.scrollBar.offset = helpSections[helpSectionIndex].height * textSize end @@ -1410,10 +1417,10 @@ function main:OpenMessagePopup(title, msg) local controls = { } local numMsgLines = 0 for line in string.gmatch(msg .. "\n", "([^\n]*)\n") do - t_insert(controls, new("LabelControl", nil, 0, 20 + numMsgLines * 16, 0, 16, line)) + t_insert(controls, new("LabelControl", nil, {0, 20 + numMsgLines * 16, 0, 16}, line)) numMsgLines = numMsgLines + 1 end - controls.close = new("ButtonControl", nil, 0, 40 + numMsgLines * 16, 80, 20, "Ok", function() + controls.close = new("ButtonControl", nil, {0, 40 + numMsgLines * 16, 80, 20}, "Ok", function() main:ClosePopup() end) return self:OpenPopup(m_max(DrawStringWidth(16, "VAR", msg) + 30, 190), 70 + numMsgLines * 16, title, controls, "close") @@ -1423,15 +1430,15 @@ function main:OpenConfirmPopup(title, msg, confirmLabel, onConfirm) local controls = { } local numMsgLines = 0 for line in string.gmatch(msg .. "\n", "([^\n]*)\n") do - t_insert(controls, new("LabelControl", nil, 0, 20 + numMsgLines * 16, 0, 16, line)) + t_insert(controls, new("LabelControl", nil, {0, 20 + numMsgLines * 16, 0, 16}, line)) numMsgLines = numMsgLines + 1 end local confirmWidth = m_max(80, DrawStringWidth(16, "VAR", confirmLabel) + 10) - controls.confirm = new("ButtonControl", nil, -5 - m_ceil(confirmWidth/2), 40 + numMsgLines * 16, confirmWidth, 20, confirmLabel, function() + controls.confirm = new("ButtonControl", nil, {-5 - m_ceil(confirmWidth/2), 40 + numMsgLines * 16, confirmWidth, 20}, confirmLabel, function() main:ClosePopup() onConfirm() end) - t_insert(controls, new("ButtonControl", nil, 5 + m_ceil(confirmWidth/2), 40 + numMsgLines * 16, confirmWidth, 20, "Cancel", function() + t_insert(controls, new("ButtonControl", nil, {5 + m_ceil(confirmWidth/2), 40 + numMsgLines * 16, confirmWidth, 20}, "Cancel", function() main:ClosePopup() end)) return self:OpenPopup(m_max(DrawStringWidth(16, "VAR", msg) + 30, 190), 70 + numMsgLines * 16, title, controls, "confirm") @@ -1439,11 +1446,11 @@ end function main:OpenNewFolderPopup(path, onClose) local controls = { } - controls.label = new("LabelControl", nil, 0, 20, 0, 16, "^7Enter folder name:") - controls.edit = new("EditControl", nil, 0, 40, 350, 20, nil, nil, "\\/:%*%?\"<>|%c", 100, function(buf) + controls.label = new("LabelControl", nil, {0, 20, 0, 16}, "^7Enter folder name:") + controls.edit = new("EditControl", nil, {0, 40, 350, 20}, nil, nil, "\\/:%*%?\"<>|%c", 100, function(buf) controls.create.enabled = buf:match("%S") end) - controls.create = new("ButtonControl", nil, -45, 70, 80, 20, "Create", function() + controls.create = new("ButtonControl", nil, {-45, 70, 80, 20}, "Create", function() local newFolderName = controls.edit.buf local res, msg = MakeDir(path..newFolderName) if not res then @@ -1456,7 +1463,7 @@ function main:OpenNewFolderPopup(path, onClose) main:ClosePopup() end) controls.create.enabled = false - controls.cancel = new("ButtonControl", nil, 45, 70, 80, 20, "Cancel", function() + controls.cancel = new("ButtonControl", nil, {45, 70, 80, 20}, "Cancel", function() if onClose then onClose() end diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 96e0f84a3a..4b72266b20 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -855,7 +855,7 @@ local modFlagList = { ["to unarmed attacks"] = { flags = bor(ModFlag.Unarmed, ModFlag.Hit) }, ["to unarmed melee hits"] = { flags = bor(ModFlag.Unarmed, ModFlag.Melee, ModFlag.Hit) }, ["with melee weapons"] = { flags = ModFlag.WeaponMelee }, - ["with melee weapon attacks"] = { flags = bor(ModFlag.WeaponMelee, ModFlag.Hit) }, + ["with melee weapon attacks"] = { flags = ModFlag.WeaponMelee }, --Tincture mod doesn't care about it being a Hit ["from melee weapons"] = { flags = ModFlag.WeaponMelee }, ["from melee weapon attacks"] = { flags = bor(ModFlag.WeaponMelee, ModFlag.Hit) }, ["melee weapon"] = { flags = ModFlag.WeaponMelee }, @@ -1379,6 +1379,7 @@ local modTagList = { ["per (%d+)%% chaos resistance"] = function(num) return { tag = { type = "PerStat", stat = "ChaosResist", div = num } } end, ["per (%d+)%% cold resistance above 75%%"] = function(num) return { tag = { type = "PerStat", stat = "ColdResistOver75", div = num } } end, ["per (%d+)%% lightning resistance above 75%%"] = function(num) return { tag = { type = "PerStat", stat = "LightningResistOver75", div = num } } end, + ["per (%d+)%% fire resistance above 75%%"] = function(num) return { tag = { type = "PerStat", stat = "FireResistOver75", div = num } } end, ["per (%d+) devotion"] = function(num) return { tag = { type = "PerStat", stat = "Devotion", actor = "parent", div = num } } end, ["per (%d+)%% missing fire resistance, up to a maximum of (%d+)%%"] = function(num, _, limit) return { tag = { type = "PerStat", stat = "MissingFireResist", div = num, globalLimit = tonumber(limit), globalLimitKey = "ReplicaNebulisFire" } } end, ["per (%d+)%% missing cold resistance, up to a maximum of (%d+)%%"] = function(num, _, limit) return { tag = { type = "PerStat", stat = "MissingColdResist", div = num, globalLimit = tonumber(limit), globalLimitKey = "ReplicaNebulisCold" } } end, @@ -2272,6 +2273,9 @@ local specialModList = { ["gain %d+ rage on attack hit"] = { flag("Condition:CanGainRage"), }, + ["gain %d+ rage on hit with axes or swords"] = { + flag("Condition:CanGainRage"), + }, ["gain %d+ rage on melee hit"] = { flag("Condition:CanGainRage"), }, @@ -2532,6 +2536,7 @@ local specialModList = { } end, ["retaliation skills have (%d+)%% increased speed"] = function(num) return { mod("Speed", "INC", num, { type = "SkillType", skillType = SkillType.Retaliation }), + mod("WarcrySpeed", "INC", num, nil, 0, KeywordFlag.Warcry, { type = "SkillType", skillType = SkillType.Retaliation }), } end, -- Guardian ["grants armour equal to (%d+)%% of your reserved life to you and nearby allies"] = function(num) return { mod("GrantReservedLifeAsAura", "LIST", { mod = mod("Armour", "BASE", num / 100) }) } end, @@ -2696,9 +2701,9 @@ local specialModList = { mod("SpellSuppressionEffect", "BASE", num, { type = "Multiplier", var = "MissingBarkskinStacks" }) } end, ["hits that would ignite instead scorch"] = { flag("IgniteCanScorch"), flag("CannotIgnite") }, - ["you can inflict an additional scorch on each enemy"] = { flag("ScorchCanStack"), mod("ScorchStacksMax", "BASE", 2) }, + ["you can inflict an additional scorch on each enemy"] = { flag("ScorchCanStack"), mod("ScorchStacksMax", "BASE", 1) }, ["maximum effect of shock is (%d+)%% increased damage taken"] = function (num) return { mod("ShockMax", "OVERRIDE", num) } end, - ["you can apply up to (%d+) shocks to each enemy"] = function(num) return { flag("ShockCanStack"), mod("ShockStacksMax", "BASE", num) } end, + ["you can apply up to (%d+) shocks to each enemy"] = function(num) return { flag("ShockCanStack"), mod("ShockStacksMax", "OVERRIDE", num) } end, ["hits that fail to freeze due to insufficient freeze duration inflict hoarfrost"] = { flag("HitsCanInflictHoarfrost") }, ["your hits always inflict freeze, shock and ignite while unbound"] = { mod("EnemyFreezeChance", "BASE", 100, { type = "Condition", var = "Unbound"}), @@ -2725,6 +2730,7 @@ local specialModList = { ["has (%d+) sockets?"] = function(num) return { mod("SocketCount", "BASE", num) } end, ["has (%d+) abyssal sockets?"] = function(num) return { mod("AbyssalSocketCount", "BASE", num) } end, ["no physical damage"] = { mod("WeaponData", "LIST", { key = "PhysicalMin" }), mod("WeaponData", "LIST", { key = "PhysicalMax" }), mod("WeaponData", "LIST", { key = "PhysicalDPS" }) }, + ["has (%d+)%% increased elemental damage"] = function(num) return { mod("LocalElementalDamage", "INC", num) } end, ["all attacks with this weapon are critical strikes"] = { mod("WeaponData", "LIST", { key = "CritChance", value = 100 }) }, ["this weapon's critical strike chance is (%d+)%%"] = function(num) return { mod("WeaponData", "LIST", { key = "CritChance", value = num }) } end, ["counts as dual wielding"] = { mod("WeaponData", "LIST", { key = "countsAsDualWielding", value = true }) }, @@ -2753,6 +2759,7 @@ local specialModList = { ["attacks with this weapon deal double damage to chilled enemies"] = { mod("DoubleDamageChance", "BASE", 100, nil, ModFlag.Hit, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }, { type = "ActorCondition", actor = "enemy", var = "Chilled" }) }, ["life leech from hits with this weapon applies instantly"] = { mod("InstantLifeLeech", "BASE", 100, { type = "Condition", var = "{Hand}Attack" }) }, ["life leech from hits with this weapon is instant"] = { mod("InstantLifeLeech", "BASE", 100, { type = "Condition", var = "{Hand}Attack" }) }, + ["mana leech from hits with this weapon is instant"] = { mod("InstantManaLeech", "BASE", 100, { type = "Condition", var = "{Hand}Attack" }) }, ["life leech from melee damage is instant"] = { mod("InstantLifeLeech", "BASE", 100, nil, ModFlag.Melee) }, ["gain life from leech instantly from hits with this weapon"] = { mod("InstantLifeLeech", "BASE", 100, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }) }, ["(%d+)%% of leech from hits with this weapon is instant per enemy power"] = function(num) return { mod("InstantLifeLeech", "BASE", num, nil, ModFlag.Hit, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }, { type = "Multiplier", var = "EnemyPower"}) } end, @@ -2783,6 +2790,7 @@ local specialModList = { mod("KitavaRequiredManaCost", "BASE", tonumber(amount), "Kitava's Thirst"), mod("ExtraSupport", "LIST", { skillId = "SupportCastOnManaSpent", level = 1 }, { type = "SocketedIn", slotName = "{SlotName}" }), } end, + ["trigger a socketed fire spell on hit, with a ([%d%.]+) second cooldown"] = { mod("ExtraSupport", "LIST", { skillId = "SupportTriggerFireSpellOnHit", level = 1 }, { type = "SocketedIn", slotName = "{SlotName}" }) }, -- Socketed gem modifiers ["([%+%-]%d+) to level of socketed gems"] = function(num) return { mod("GemProperty", "LIST", { keyword = "all", key = "level", value = num }, { type = "SocketedIn", slotName = "{SlotName}" }) } end, ["([%+%-]%d+)%%? to (%a+) of socketed ?([%a%- ]*) gems"] = function(num, _, property, type) @@ -2860,6 +2868,9 @@ local specialModList = { ["(%d+) (.+) damage taken on minion death"] = function(dmg, _, dmgType) return { mod("HeartboundLoopSelfDamage", "LIST", {baseDamage = dmg, damageType = dmgType}) }end, + ["take (%d+) (.+) damage when herald of thunder hits an enemy"] = function(dmg, _, dmgType) return { + mod("StormSecretSelfDamage", "LIST", {baseDamage = dmg, damageType = dmgType}) + }end, ["your skills deal you (%d+)%% of mana cost as (.+) damage"] = function(dmgMult, _, dmgType) return { mod("ScoldsBridleSelfDamage", "LIST", {dmgMult = dmgMult, damageType = dmgType}) }end, @@ -3102,13 +3113,13 @@ local specialModList = { } end, -- Elemental Ailments ["(%d+)%% increased elemental damage with hits and ailments for each type of elemental ailment on enemy"] = function(num) return { - mod("ElementalDamage", "INC", num, { type = "ActorCondition", actor = "enemy", var = "Frozen" }), - mod("ElementalDamage", "INC", num, { type = "ActorCondition", actor = "enemy", var = "Chilled" }), - mod("ElementalDamage", "INC", num, { type = "ActorCondition", actor = "enemy", var = "Ignited" }), - mod("ElementalDamage", "INC", num, { type = "ActorCondition", actor = "enemy", var = "Shocked" }), - mod("ElementalDamage", "INC", num, { type = "ActorCondition", actor = "enemy", var = "Scorched" }), - mod("ElementalDamage", "INC", num, { type = "ActorCondition", actor = "enemy", var = "Brittle" }), - mod("ElementalDamage", "INC", num, { type = "ActorCondition", actor = "enemy", var = "Sapped" }), + mod("ElementalDamage", "INC", num, nil, 0, bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "ActorCondition", actor = "enemy", var = "Frozen" }), + mod("ElementalDamage", "INC", num, nil, 0, bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "ActorCondition", actor = "enemy", var = "Chilled" }), + mod("ElementalDamage", "INC", num, nil, 0, bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "ActorCondition", actor = "enemy", var = "Ignited" }), + mod("ElementalDamage", "INC", num, nil, 0, bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "ActorCondition", actor = "enemy", var = "Shocked" }), + mod("ElementalDamage", "INC", num, nil, 0, bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "ActorCondition", actor = "enemy", var = "Scorched" }), + mod("ElementalDamage", "INC", num, nil, 0, bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "ActorCondition", actor = "enemy", var = "Brittle" }), + mod("ElementalDamage", "INC", num, nil, 0, bor(KeywordFlag.Hit, KeywordFlag.Ailment), { type = "ActorCondition", actor = "enemy", var = "Sapped" }), } end, ["your shocks can increase damage taken by up to a maximum of (%d+)%%"] = function(num) return { mod("ShockMax", "OVERRIDE", num) } end, ["%+(%d+)%% to maximum effect of shock"] = function(num) return { mod("ShockMax", "BASE", num) } end, @@ -3494,6 +3505,7 @@ local specialModList = { } end, ["nearby allies' damage with hits is lucky"] = { mod("ExtraAura", "LIST", { onlyAllies = true, mod = flag("LuckyHits") }) }, ["your damage with hits is lucky"] = { flag("LuckyHits") }, + ["chaos damage with hits is lucky"] = { flag("ChaosLuckyHits") }, ["elemental damage with hits is lucky while you are shocked"] = { flag("ElementalLuckHits", { type = "Condition", var = "Shocked" }) }, ["allies' aura buffs do not affect you"] = { flag("AlliesAurasCannotAffectSelf") }, ["(%d+)%% increased effect of non%-curse auras from your skills on enemies"] = function(num) return { @@ -3589,6 +3601,9 @@ local specialModList = { ["gain arcane surge after spending a total of (%d+) mana"] = function(num) return { mod("ExtraAura", "LIST", { mod = flag("Condition:ArcaneSurge")}, { type = "MultiplierThreshold", var = "ManaSpentRecently", threshold = num }), } end, + ["gain arcane surge after spending a total of (%d+) life"] = function(num) return { + mod("ExtraAura", "LIST", { mod = flag("Condition:ArcaneSurge")}, { type = "MultiplierThreshold", var = "LifeSpentRecently", threshold = num }), + } end, ["gain onslaught for (%d+) seconds on hit while at maximum frenzy charges"] = { flag("Onslaught", { type = "StatThreshold", stat = "FrenzyCharges", thresholdStat = "FrenzyChargesMax" }, { type = "Condition", var = "HitRecently" }) }, ["enemies in your chilling areas take (%d+)%% increased lightning damage"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("LightningDamageTaken", "INC", num) }, { type = "ActorCondition", actor = "enemy", var = "InChillingArea" }) } end, ["warcries count as having (%d+) additional nearby enemies"] = function(num) return { @@ -4116,6 +4131,9 @@ local specialModList = { mod("ReflectedDamageTaken", "INC", -tonumber(num), { type = "GlobalEffect", effectType = "Global", unscalable = true }), mod("MinionModifier", "LIST", { mod = mod("ReflectedDamageTaken", "INC", -tonumber(num), { type = "GlobalEffect", effectType = "Global", unscalable = true }) }), } end, + ["damage cannot be reflected"] = function(num) return { + mod("ReflectedDamageTaken", "MORE", -100, { type = "GlobalEffect", effectType = "Global", unscalable = true }), + } end, ["you have mind over matter while at maximum power charges"] = { mod("Keystone", "LIST", "Mind Over Matter", { type = "StatThreshold", stat = "PowerCharges", thresholdStat = "PowerChargesMax" }) }, ["cannot evade enemy attacks"] = { flag("CannotEvade") }, ["attacks cannot hit you"] = { flag("AlwaysEvade") }, @@ -4703,9 +4721,17 @@ local specialModList = { ["attacks with this weapon have added maximum lightning damage equal to (%d+)%% of your maximum energy shield"] = function(num) return { mod("LightningMax", "BASE", 1, { type = "PercentStat", stat = "EnergyShield" , percent = num }, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }), } end, + ["adds (%d+)%% of your maximum energy shield as cold damage to attacks with this weapon"] = function(num) return { + mod("ColdMin", "BASE", 1, { type = "PercentStat", stat = "EnergyShield" , percent = num }, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }), + mod("ColdMax", "BASE", 1, { type = "PercentStat", stat = "EnergyShield" , percent = num }, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }), + } end, ["attacks with this weapon have added maximum lightning damage equal to (%d+)%% of player'?s? maximum energy shield"] = function(num) return { mod("LightningMax", "BASE", 1, { type = "PercentStat", stat = "EnergyShield" , percent = num, actor = "parent" }, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }), } end, + ["adds (%d+)%% of your maximum mana as fire damage to attacks with this weapon"] = function(num) return { + mod("FireMin", "BASE", 1, { type = "PercentStat", stat = "Mana" , percent = num }, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }), + mod("FireMax", "BASE", 1, { type = "PercentStat", stat = "Mana" , percent = num }, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }), + } end, ["gain added chaos damage equal to (%d+)%% of ward"] = function(num) return { mod("ChaosMin", "BASE", 1, { type = "PercentStat", stat = "Ward", percent = num }), mod("ChaosMax", "BASE", 1, { type = "PercentStat", stat = "Ward", percent = num }), @@ -4895,6 +4921,7 @@ local specialModList = { ["gain elusive on critical strike"] = { flag("Condition:CanBeElusive"), }, + ["(%d+)%% chance to gain elusive when you block while dual wielding"] = { flag("Condition:CanBeElusive", { type = "Condition", var = "DualWielding" }) }, ["elusive is removed from you at (%d+)%% effect"] = function(num) return { mod("ElusiveEffectMinThreshold", "OVERRIDE", num) } end, ["nearby enemies have (%a+) resistance equal to yours"] = function(_, res) return { flag("Enemy"..(res:gsub("^%l", string.upper)).."ResistEqualToYours") } end, ["for each nearby corpse, regenerate ([%d%.]+)%% life per second, up to ([%d%.]+)%%"] = function(num, _, limit) return { mod("LifeRegenPercent", "BASE", num, { type = "Multiplier", var = "NearbyCorpse", limit = tonumber(limit), limitTotal = true }) } end, @@ -5085,9 +5112,12 @@ local specialModList = { ["manifeste?d? dancing dervishe?s? dies? when rampage ends"] = { }, ["survival"] = { }, ["you can have two different banners at the same time"] = { }, + ["[%+%-](%d+) prefix modifiers? allowed"] = { }, + ["[%+%-](%d+) suffix modifiers? allowed"] = { }, ["can have a second enchantment modifier"] = { }, ["can have (%d+) additional enchantment modifiers"] = { }, ["this item can be anointed by cassia"] = { }, + ["implicit modifiers cannot be changed"] = { }, ["has a crucible passive skill tree"] = { }, ["has a two handed sword crucible passive skill tree"] = { }, ["has a crucible passive skill tree with only support passive skills"] = { }, diff --git a/src/Modules/ModTools.lua b/src/Modules/ModTools.lua index 834749797e..a7810bc9fb 100644 --- a/src/Modules/ModTools.lua +++ b/src/Modules/ModTools.lua @@ -59,6 +59,10 @@ function modLib.parseTags(line) if tag ~= "" then local tagName, tagValue = tag:match("^(%a+)=(.+)") if tagName then + -- list of all the tag parts that should be numbers + if ({threshold = true})[tagName] then + tagValue = tonumber(tagValue) + end tagSet[tagName] = tagValue == "true" and true or tagValue else ConPrintf("Error tag invalid: "..tag)