diff --git a/src/Classes/Item.lua b/src/Classes/Item.lua index 06e0a574ea..226dd02867 100644 --- a/src/Classes/Item.lua +++ b/src/Classes/Item.lua @@ -27,6 +27,8 @@ local catalystTags = { { "attribute" }, } +local minimumReqLevel = { } + local function getCatalystScalar(catalystId, tags, quality) if not catalystId or type(catalystId) ~= "number" or not catalystTags[catalystId] or not tags or type(tags) ~= "table" or #tags == 0 then return 1 @@ -358,6 +360,7 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) self.prefixes = { } self.suffixes = { } self.requirements = { } + self.requirements.runeLevel = 0 self.requirements.str = 0 self.requirements.dex = 0 self.requirements.int = 0 @@ -436,6 +439,16 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) self.itemSocketCount = #self.sockets elseif specName == "Rune" then t_insert(self.runes, specVal) + local runeLevel = 0 + local runeData = data.itemMods.Runes[specVal] + if runeData then + for _, slotData in pairs(runeData) do + runeLevel = math.max(runeLevel, slotData.rank[1]) + end + end + if runeLevel > 0 and (not self.requirements.runeLevel or runeLevel > self.requirements.runeLevel) then + self.requirements.runeLevel = runeLevel + end elseif specName == "Radius" and self.type == "Jewel" then self.jewelRadiusLabel = specVal:match("^[%a ]+") if specVal:match("^%a+") == "Variable" then @@ -484,6 +497,8 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) self.armourData[specName] = specToNumber(specVal) elseif specName == "Requires Level" then self.requirements.level = specToNumber(specVal) + minimumReqLevel = minimumReqLevel or {} + table.insert(minimumReqLevel, { name = self.name, level = specVal }) elseif specName == "Level" then -- Requirements from imported items can't always be trusted importedLevelReq = specToNumber(specVal) @@ -975,6 +990,19 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) self.requirements.level = self.base.req.level end end + if self.base and not self.requirements.baseLevel then + -- Add only if not already present, to prevent overwriting original value. + local exists = false + for _, entry in ipairs(minimumReqLevel) do + if entry.name == self.title then + exists = true + break + end + end + if not exists then + self.requirements.baseLevel = self.base.req.level + end + end self.affixLimit = 0 if self.crafted then if not self.affixes then @@ -1765,6 +1793,58 @@ function ItemClass:BuildModList() for _, modLine in ipairs(self.explicitModLines) do processModLine(modLine) end + self.grantedSkills = { } + for _, skill in ipairs(baseList:List(nil, "ExtraSkill")) do + if skill.name ~= "Unknown" then + t_insert(self.grantedSkills, { + skillId = skill.skillId, + level = skill.level, + noSupports = skill.noSupports, + source = self.modSource, + triggered = skill.triggered, + triggerChance = skill.triggerChance, + }) + end + end + + local reqLevel = 0 + local minReqLevel + + for _, entry in ipairs(minimumReqLevel) do + if entry.name == self.title then + minReqLevel = entry.level + break + end + end + + if #self.grantedSkills >= 1 then + local skillDef = data.skills[self.grantedSkills[1].skillId] + local gemId = data.gemForSkill[skillDef] + local gem = data.gems[gemId] + + local skillLevel = self.grantedSkills[1].level or #skillDef.levels + local chosenLevel = skillDef.levels[skillLevel] or skillDef.levels[#skillDef.levels] + local gemLevelReq = chosenLevel.levelRequirement + + reqLevel = m_max(gemLevelReq, minReqLevel or 0, self.requirements.runeLevel or 0, self.requirements.baseLevel or 0) + + -- Rune level and unique base level don't scale attribute requirements. Example, Cursecarver has 33 minimum required level + -- but the intelligence requirement will be 21 at level 4 skill. + local attrLevel = m_max(gemLevelReq, self.requirements.baseLevel or 0) + + if self.base.type == "Sceptre" or self.base.type == "Wand" or self.base.type == "Staff" then + self.requirements.int = calcLib.getGemStatRequirement(attrLevel, gem.reqInt) + self.requirements.dex = calcLib.getGemStatRequirement(attrLevel, gem.reqDex) + self.requirements.str = calcLib.getGemStatRequirement(attrLevel, gem.reqStr) + end + else + -- If no granted skills, we want to use the "Requires Level" from the unique instead of the base armour type level requirement. + -- Currently there are no Uniques that use a lower level than the base, but maybe in the future. + reqLevel = m_max(minReqLevel or 0, self.requirements.runeLevel or 0, self.requirements.baseLevel or 0) + end + + self.requirements.level = reqLevel + if self.name == "Tabula Rasa, Simple Robe" or self.name == "Skin of the Loyal, Simple Robe" or self.name == "Skin of the Lords, Simple Robe" or self.name == "The Apostate, Cabalist Regalia" then -- Hack to remove the energy shield and base int requirement baseList:NewMod("ArmourData", "LIST", { key = "EnergyShield", value = 0 }) @@ -1789,20 +1869,6 @@ function ItemClass:BuildModList() self.requirements.dexMod = m_floor((self.requirements.dex + calcLocal(baseList, "DexRequirement", "BASE", 0)) * (1 + calcLocal(baseList, "DexRequirement", "INC", 0) / 100)) self.requirements.intMod = m_floor((self.requirements.int + calcLocal(baseList, "IntRequirement", "BASE", 0)) * (1 + calcLocal(baseList, "IntRequirement", "INC", 0) / 100)) end - self.grantedSkills = { } - for _, skill in ipairs(baseList:List(nil, "ExtraSkill")) do - if skill.name ~= "Unknown" then - t_insert(self.grantedSkills, { - skillId = skill.skillId, - level = skill.level, - noSupports = skill.noSupports, - source = self.modSource, - triggered = skill.triggered, - triggerChance = skill.triggerChance, - }) - end - end - if self.itemSocketCount > 0 then -- Ensure that there are the correct number of abyssal sockets present local newSockets = { } diff --git a/src/Data/Bases/soulcore.lua b/src/Data/Bases/soulcore.lua index 7f2929b1ee..fa808ad621 100644 --- a/src/Data/Bases/soulcore.lua +++ b/src/Data/Bases/soulcore.lua @@ -27,7 +27,7 @@ itemBases["Atmohua's Soul Core of Retreat"] = { type = "SoulCore", tags = { soul_core = true, soul_core_tier3 = true, default = true, }, implicitModTypes = { }, - implicit = "Body Armour: 30% faster start of Energy Shield Recharge", + implicit = "Body Armour: 30% faster start of Energy Shield Recharge\nFocus: 30% faster start of Energy Shield Recharge", req = { level = 65, }, } itemBases["Quipolatl's Soul Core of Flow"] = { @@ -76,7 +76,7 @@ itemBases["Estazunti's Soul Core of Convalescence"] = { type = "SoulCore", tags = { soul_core = true, soul_core_tier3 = true, default = true, }, implicitModTypes = { }, - implicit = "Boots: 10% increased speed of Recoup Effects", + implicit = "Boots: 10% increased speed of Recoup Effects\nHelmet: 6% of Damage taken Recouped as Life", req = { level = 65, }, } itemBases["Tacati's Soul Core of Affliction"] = { @@ -188,7 +188,7 @@ itemBases["Soul Core of Ticaba"] = { type = "SoulCore", tags = { soul_core = true, soul_core_tier2 = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +5% to Critical Damage Bonus\nBody Armour: Hits against you have 20% reduced Critical Damage Bonus", + implicit = "Martial Weapons: +5% to Critical Damage Bonus\nBody Armour: Hits against you have 20% reduced Critical Damage Bonus\nShield: Hits against you have 20% reduced Critical Damage Bonus", req = { level = 35, }, } itemBases["Soul Core of Atmohua"] = { @@ -212,6 +212,34 @@ itemBases["Soul Core of Zantipi"] = { implicit = "Martial Weapons: Convert 20% of Requirements to Intelligence\nArmour: Convert 20% of Requirements to Intelligence", req = { level = 35, }, } +itemBases["Amanamu's Gaze"] = { + type = "SoulCore", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Helmet: Remove a Damaging Ailment when you use a Command Skill\nBody Armour: +2 to Armour per 1 Spirit\nBoots: 1% increased Movement Speed per 15 Spirit, up to a maximum of 40%\nOther Modifiers to Movement Speed do not apply", + req = { level = 65, }, +} +itemBases["Kurgal's Gaze"] = { + type = "SoulCore", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Helmet: Increases and Reductions to Life Regeneration Rate also apply to Mana Regeneration Rate\nGloves: 40% increased effect of Arcane Surge on you\nBoots: 15% increased Mana Cost Efficiency if you haven't Dodge Rolled Recently", + req = { level = 65, }, +} +itemBases["Tecrod's Gaze"] = { + type = "SoulCore", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: Regenerate 1.5% of maximum Life per second\nGloves: 25% increased Life Cost Efficiency\nBoots: 10% increased Movement Speed when on Low Life", + req = { level = 65, }, +} +itemBases["Ulaman's Gaze"] = { + type = "SoulCore", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Helmet: +1 to Accuracy Rating per 1 Item Evasion Rating on Equipped Helmet\nGloves: Critical Hit chance is Lucky against Parried enemies\nBody Armour: Prevent +3% of Damage from Deflected Hits", + req = { level = 65, }, +} itemBases["Desert Rune"] = { type = "Rune", @@ -736,76 +764,76 @@ itemBases["Serpent Talisman"] = { type = "Talisman", tags = { primal_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Gloves: 5% increased Curse Magnitudes", + implicit = "Gloves: 5% increased Curse Magnitudes\nSceptre: Allies in your Presence have 8% increased Attack Speed", req = { }, } itemBases["Primate Talisman"] = { type = "Talisman", tags = { primal_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Helmet: Minions have 12% increased maximum Life", + implicit = "Helmet: Minions have 12% increased maximum Life\nSceptre: Allies in your Presence deal 30% increased Damage", req = { }, } itemBases["Owl Talisman"] = { type = "Talisman", tags = { primal_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Focus: 10% increased Cooldown Recovery Rate", + implicit = "Focus: 10% increased Cooldown Recovery Rate\nSceptre: Allies in your Presence have 8% increased Cast Speed", req = { }, } itemBases["Cat Talisman"] = { type = "Talisman", tags = { vivid_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Gloves: 15% increased Accuracy Rating", + implicit = "Gloves: 15% increased Accuracy Rating\nSceptre: Allies in your Presence have 14% increased Critical Hit Chance", req = { }, } itemBases["Wolf Talisman"] = { type = "Talisman", tags = { vivid_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Gloves: 10% increased Magnitude of Bleeding you inflict", + implicit = "Gloves: 10% increased Magnitude of Bleeding you inflict\nSceptre: Allies in your Presence have 14% increased Critical Damage Bonus", req = { }, } itemBases["Stag Talisman"] = { type = "Talisman", tags = { vivid_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Helmet: 50% increased Thorns Critical Hit Chance", + implicit = "Helmet: 50% increased Thorns Critical Hit Chance\nSceptre: Allies in your Presence deal 1 to 40 added Attack Lightning Damage", req = { }, } itemBases["Boar Talisman"] = { type = "Talisman", tags = { wild_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Gloves: Gain 1 Rage on Melee Hit", + implicit = "Gloves: Gain 1 Rage on Melee Hit\nSceptre: Allies in your Presence Regenerate 8 Life per second", req = { }, } itemBases["Bear Talisman"] = { type = "Talisman", tags = { wild_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Helmet: 8% increased Area of Effect", + implicit = "Helmet: 8% increased Area of Effect\nSceptre: Allies in your Presence deal 12 to 18 added Attack Physical Damage", req = { }, } itemBases["Ox Talisman"] = { type = "Talisman", tags = { wild_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Shield: 10% increased Block chance", + implicit = "Shield: 10% increased Block chance\nSceptre: Allies in your Presence have +8% to all Elemental Resistances", req = { }, } itemBases["Rabbit Talisman"] = { type = "Talisman", tags = { sacred_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Body Armour: 8% increased Rarity of Items found", + implicit = "Body Armour: 8% increased Rarity of Items found\nSceptre: 10% increased Spirit", req = { }, } itemBases["Fox Talisman"] = { type = "Talisman", tags = { sacred_talisman = true, talisman = true, default = true, }, implicitModTypes = { }, - implicit = "Body Armour: +2% to Quality of all Skills", + implicit = "Body Armour: +2% to Quality of all Skills\nSceptre: 30% increased Presence Area of Effect", req = { }, } diff --git a/src/Data/ModRunes.lua b/src/Data/ModRunes.lua index 099b9f70aa..20ebee951f 100644 --- a/src/Data/ModRunes.lua +++ b/src/Data/ModRunes.lua @@ -7,6 +7,7 @@ return { type = "Rune", "+30% of Armour also applies to Cold Damage", statOrder = { 4483 }, + rank = { 50 }, }, }, ["Zalatl's Soul Core of Insulation"] = { @@ -14,6 +15,7 @@ return { type = "Rune", "+30% of Armour also applies to Lightning Damage", statOrder = { 4485 }, + rank = { 50 }, }, }, ["Topotante's Soul Core of Dampening"] = { @@ -21,6 +23,7 @@ return { type = "Rune", "+30% of Armour also applies to Fire Damage", statOrder = { 4484 }, + rank = { 50 }, }, }, ["Atmohua's Soul Core of Retreat"] = { @@ -28,6 +31,13 @@ return { type = "Rune", "30% faster start of Energy Shield Recharge", statOrder = { 963 }, + rank = { 50 }, + }, + ["focus"] = { + type = "Rune", + "30% faster start of Energy Shield Recharge", + statOrder = { 963 }, + rank = { 50 }, }, }, ["Quipolatl's Soul Core of Flow"] = { @@ -36,6 +46,7 @@ return { "8% increased Skill Effect Duration", "8% increased Cooldown Recovery Rate", statOrder = { 1569, 4509 }, + rank = { 50 }, }, }, ["Tzamoto's Soul Core of Ferocity"] = { @@ -43,6 +54,7 @@ return { type = "Rune", "+4 to Maximum Rage", statOrder = { 8890 }, + rank = { 50 }, }, }, ["Uromoti's Soul Core of Attenuation"] = { @@ -51,6 +63,7 @@ return { "15% increased Curse Duration", "15% increased Poison Duration", statOrder = { 1463, 2777 }, + rank = { 50 }, }, }, ["Opiloti's Soul Core of Assault"] = { @@ -58,11 +71,13 @@ return { type = "Rune", "50% chance when you gain a Frenzy Charge to gain an additional Frenzy Charge", statOrder = { 5099 }, + rank = { 50 }, }, ["caster"] = { type = "Rune", "50% chance when you gain a Frenzy Charge to gain an additional Frenzy Charge", statOrder = { 5099 }, + rank = { 50 }, }, }, ["Guatelitzi's Soul Core of Endurance"] = { @@ -70,11 +85,13 @@ return { type = "Rune", "50% chance when you gain an Endurance Charge to gain an additional Endurance Charge", statOrder = { 5098 }, + rank = { 50 }, }, ["caster"] = { type = "Rune", "50% chance when you gain an Endurance Charge to gain an additional Endurance Charge", statOrder = { 5098 }, + rank = { 50 }, }, }, ["Xopec's Soul Core of Power"] = { @@ -82,18 +99,27 @@ return { type = "Rune", "50% chance when you gain a Power Charge to gain an additional Power Charge", statOrder = { 5100 }, + rank = { 50 }, }, ["caster"] = { type = "Rune", "50% chance when you gain a Power Charge to gain an additional Power Charge", statOrder = { 5100 }, + rank = { 50 }, }, }, ["Estazunti's Soul Core of Convalescence"] = { + ["helmet"] = { + type = "Rune", + "6% of Damage taken Recouped as Life", + statOrder = { 966 }, + rank = { 50 }, + }, ["boots"] = { type = "Rune", "10% increased speed of Recoup Effects", statOrder = { 8941 }, + rank = { 50 }, }, }, ["Tacati's Soul Core of Affliction"] = { @@ -101,6 +127,7 @@ return { type = "Rune", "Enemies you Curse have -4% to Chaos Resistance", statOrder = { 3608 }, + rank = { 50 }, }, }, ["Cholotl's Soul Core of War"] = { @@ -108,6 +135,7 @@ return { type = "Rune", "20% increased Projectile Speed", statOrder = { 872 }, + rank = { 50 }, }, }, ["Citaqualotl's Soul Core of Foulness"] = { @@ -115,6 +143,7 @@ return { type = "Rune", "Adds 19 to 29 Chaos damage", statOrder = { 1223 }, + rank = { 50 }, }, }, ["Xipocado's Soul Core of Dominion"] = { @@ -122,11 +151,13 @@ return { type = "Rune", "Minions deal 40% increased Damage with Command Skills", statOrder = { 8351 }, + rank = { 50 }, }, ["sceptre"] = { type = "Rune", "Minions deal 40% increased Damage with Command Skills", statOrder = { 8351 }, + rank = { 50 }, }, }, ["Soul Core of Tacati"] = { @@ -134,11 +165,13 @@ return { type = "Rune", "15% chance to Poison on Hit with this weapon", statOrder = { 7228 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+11% to Chaos Resistance", statOrder = { 957 }, + rank = { 0 }, }, }, ["Soul Core of Opiloti"] = { @@ -146,11 +179,13 @@ return { type = "Rune", "15% chance to cause Bleeding on Hit", statOrder = { 2149 }, + rank = { 0 }, }, ["helmet"] = { type = "Rune", "20% increased Charm Charges gained", statOrder = { 5179 }, + rank = { 0 }, }, }, ["Soul Core of Jiquani"] = { @@ -158,11 +193,13 @@ return { type = "Rune", "Recover 2% of maximum Life on Kill", statOrder = { 1434 }, + rank = { 0 }, }, ["body armour"] = { type = "Rune", "3% increased maximum Life", statOrder = { 867 }, + rank = { 0 }, }, }, ["Soul Core of Zalatl"] = { @@ -170,11 +207,13 @@ return { type = "Rune", "Recover 2% of maximum Mana on Kill", statOrder = { 1436 }, + rank = { 0 }, }, ["helmet"] = { type = "Rune", "3% increased maximum Mana", statOrder = { 869 }, + rank = { 0 }, }, }, ["Soul Core of Citaqualotl"] = { @@ -182,11 +221,13 @@ return { type = "Rune", "30% increased Elemental Damage with Attacks", statOrder = { 856 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+5% to all Elemental Resistances", statOrder = { 953 }, + rank = { 0 }, }, }, ["Soul Core of Puhuarte"] = { @@ -194,11 +235,13 @@ return { type = "Rune", "30% increased Flammability Magnitude", statOrder = { 984 }, + rank = { 0 }, }, ["gloves"] = { type = "Rune", "+1% to Maximum Fire Resistance", statOrder = { 949 }, + rank = { 0 }, }, }, ["Soul Core of Tzamoto"] = { @@ -206,11 +249,13 @@ return { type = "Rune", "30% increased Freeze Buildup", statOrder = { 986 }, + rank = { 0 }, }, ["helmet"] = { type = "Rune", "+1% to Maximum Cold Resistance", statOrder = { 950 }, + rank = { 0 }, }, }, ["Soul Core of Xopec"] = { @@ -218,11 +263,13 @@ return { type = "Rune", "30% increased chance to Shock", statOrder = { 988 }, + rank = { 0 }, }, ["boots"] = { type = "Rune", "+1% to Maximum Lightning Resistance", statOrder = { 951 }, + rank = { 0 }, }, }, ["Soul Core of Azcapa"] = { @@ -230,11 +277,13 @@ return { type = "Rune", "+15 to Spirit", statOrder = { 871 }, + rank = { 0 }, }, ["gloves"] = { type = "Rune", "10% increased Quantity of Gold Dropped by Slain Enemies", statOrder = { 6384 }, + rank = { 0 }, }, }, ["Soul Core of Topotante"] = { @@ -242,11 +291,13 @@ return { type = "Rune", "Attacks with this Weapon Penetrate 15% Elemental Resistances", statOrder = { 3321 }, + rank = { 0 }, }, ["boots"] = { type = "Rune", "25% increased Elemental Ailment Threshold", statOrder = { 4132 }, + rank = { 0 }, }, }, ["Soul Core of Quipolatl"] = { @@ -254,11 +305,13 @@ return { type = "Rune", "5% increased Attack Speed", statOrder = { 916 }, + rank = { 0 }, }, ["boots"] = { type = "Rune", "15% reduced Slowing Potency of Debuffs on You", statOrder = { 4574 }, + rank = { 0 }, }, }, ["Soul Core of Ticaba"] = { @@ -266,11 +319,19 @@ return { type = "Rune", "+5% to Critical Damage Bonus", statOrder = { 915 }, + rank = { 0 }, }, ["body armour"] = { type = "Rune", "Hits against you have 20% reduced Critical Damage Bonus", statOrder = { 946 }, + rank = { 0 }, + }, + ["shield"] = { + type = "Rune", + "Hits against you have 20% reduced Critical Damage Bonus", + statOrder = { 946 }, + rank = { 0 }, }, }, ["Soul Core of Atmohua"] = { @@ -278,11 +339,13 @@ return { type = "Rune", "Convert 20% of Requirements to Strength", statOrder = { 7232 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "Convert 20% of Requirements to Strength", statOrder = { 7232 }, + rank = { 0 }, }, }, ["Soul Core of Cholotl"] = { @@ -290,11 +353,13 @@ return { type = "Rune", "Convert 20% of Requirements to Dexterity", statOrder = { 7230 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "Convert 20% of Requirements to Dexterity", statOrder = { 7230 }, + rank = { 0 }, }, }, ["Soul Core of Zantipi"] = { @@ -302,11 +367,94 @@ return { type = "Rune", "Convert 20% of Requirements to Intelligence", statOrder = { 7231 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "Convert 20% of Requirements to Intelligence", statOrder = { 7231 }, + rank = { 0 }, + }, + }, + ["Amanamu's Gaze"] = { + ["helmet"] = { + type = "Rune", + "Remove a Damaging Ailment when you use a Command Skill", + statOrder = { 9016 }, + rank = { 60 }, + }, + ["boots"] = { + type = "Rune", + "1% increased Movement Speed per 15 Spirit, up to a maximum of 40%", + "Other Modifiers to Movement Speed do not apply", + statOrder = { 8470, 8470.1 }, + rank = { 60 }, + }, + ["body armour"] = { + type = "Rune", + "+2 to Armour per 1 Spirit", + statOrder = { 4253 }, + rank = { 60 }, + }, + }, + ["Kurgal's Gaze"] = { + ["helmet"] = { + type = "Rune", + "Increases and Reductions to Life Regeneration Rate also apply to Mana Regeneration Rate", + statOrder = { 4101 }, + rank = { 60 }, + }, + ["gloves"] = { + type = "Rune", + "40% increased effect of Arcane Surge on you", + statOrder = { 2882 }, + rank = { 60 }, + }, + ["boots"] = { + type = "Rune", + "15% increased Mana Cost Efficiency if you haven't Dodge Rolled Recently", + statOrder = { 7376 }, + rank = { 60 }, + }, + }, + ["Tecrod's Gaze"] = { + ["body armour"] = { + type = "Rune", + "Regenerate 1.5% of maximum Life per second", + statOrder = { 1614 }, + rank = { 60 }, + }, + ["gloves"] = { + type = "Rune", + "25% increased Life Cost Efficiency", + statOrder = { 4539 }, + rank = { 60 }, + }, + ["boots"] = { + type = "Rune", + "10% increased Movement Speed when on Low Life", + statOrder = { 1478 }, + rank = { 60 }, + }, + }, + ["Ulaman's Gaze"] = { + ["helmet"] = { + type = "Rune", + "+1 to Accuracy Rating per 1 Item Evasion Rating on Equipped Helmet", + statOrder = { 4013 }, + rank = { 60 }, + }, + ["gloves"] = { + type = "Rune", + "Critical Hit chance is Lucky against Parried enemies", + statOrder = { 5359 }, + rank = { 60 }, + }, + ["body armour"] = { + type = "Rune", + "Prevent +3% of Damage from Deflected Hits", + statOrder = { 4511 }, + rank = { 60 }, }, }, ["Desert Rune"] = { @@ -314,16 +462,19 @@ return { type = "Rune", "Adds 7 to 11 Fire Damage", statOrder = { 821 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+12% to Fire Resistance", statOrder = { 954 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "Gain 8% of Damage as Extra Fire Damage", statOrder = { 844 }, + rank = { 15 }, }, }, ["Glacial Rune"] = { @@ -331,16 +482,19 @@ return { type = "Rune", "Adds 6 to 10 Cold Damage", statOrder = { 822 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+12% to Cold Resistance", statOrder = { 955 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "Gain 8% of Damage as Extra Cold Damage", statOrder = { 846 }, + rank = { 15 }, }, }, ["Storm Rune"] = { @@ -348,16 +502,19 @@ return { type = "Rune", "Adds 1 to 20 Lightning Damage", statOrder = { 823 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+12% to Lightning Resistance", statOrder = { 956 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "Gain 8% of Damage as Extra Lightning Damage", statOrder = { 848 }, + rank = { 15 }, }, }, ["Iron Rune"] = { @@ -365,16 +522,19 @@ return { type = "Rune", "16% increased Physical Damage", statOrder = { 819 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "16% increased Armour, Evasion and Energy Shield", statOrder = { 1361 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "25% increased Spell Damage", statOrder = { 850 }, + rank = { 15 }, }, }, ["Body Rune"] = { @@ -382,16 +542,19 @@ return { type = "Rune", "Leeches 2.5% of Physical Damage as Life", statOrder = { 968 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+30 to maximum Life", statOrder = { 866 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "+30 to maximum Energy Shield", statOrder = { 864 }, + rank = { 15 }, }, }, ["Mind Rune"] = { @@ -399,16 +562,19 @@ return { type = "Rune", "Leeches 2% of Physical Damage as Mana", statOrder = { 974 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+25 to maximum Mana", statOrder = { 868 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "+40 to maximum Mana", statOrder = { 868 }, + rank = { 15 }, }, }, ["Rebirth Rune"] = { @@ -416,16 +582,19 @@ return { type = "Rune", "Gain 20 Life per Enemy Killed", statOrder = { 971 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "Regenerate 0.3% of maximum Life per second", statOrder = { 1614 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "15% increased Energy Shield Recharge Rate", statOrder = { 962 }, + rank = { 15 }, }, }, ["Inspiration Rune"] = { @@ -433,16 +602,19 @@ return { type = "Rune", "Gain 16 Mana per Enemy Killed", statOrder = { 976 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "15% increased Mana Regeneration Rate", statOrder = { 972 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "20% increased Mana Regeneration Rate", statOrder = { 972 }, + rank = { 15 }, }, }, ["Stone Rune"] = { @@ -450,16 +622,19 @@ return { type = "Rune", "Causes 25% increased Stun Buildup", statOrder = { 981 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+60 to Stun Threshold", statOrder = { 990 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "Gain additional Stun Threshold equal to 12% of maximum Energy Shield", statOrder = { 9367 }, + rank = { 15 }, }, }, ["Vision Rune"] = { @@ -467,16 +642,19 @@ return { type = "Rune", "+80 to Accuracy Rating", statOrder = { 824 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "10% increased Life and Mana Recovery from Flasks", statOrder = { 6145 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "20% increased Critical Hit Chance for Spells", statOrder = { 931 }, + rank = { 15 }, }, }, ["Lesser Desert Rune"] = { @@ -484,16 +662,19 @@ return { type = "Rune", "Adds 4 to 6 Fire Damage", statOrder = { 821 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+10% to Fire Resistance", statOrder = { 954 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "Gain 6% of Damage as Extra Fire Damage", statOrder = { 844 }, + rank = { 0 }, }, }, ["Lesser Glacial Rune"] = { @@ -501,16 +682,19 @@ return { type = "Rune", "Adds 3 to 5 Cold Damage", statOrder = { 822 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+10% to Cold Resistance", statOrder = { 955 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "Gain 6% of Damage as Extra Cold Damage", statOrder = { 846 }, + rank = { 0 }, }, }, ["Lesser Storm Rune"] = { @@ -518,16 +702,19 @@ return { type = "Rune", "Adds 1 to 10 Lightning Damage", statOrder = { 823 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+10% to Lightning Resistance", statOrder = { 956 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "Gain 6% of Damage as Extra Lightning Damage", statOrder = { 848 }, + rank = { 0 }, }, }, ["Lesser Iron Rune"] = { @@ -535,16 +722,19 @@ return { type = "Rune", "14% increased Physical Damage", statOrder = { 819 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "14% increased Armour, Evasion and Energy Shield", statOrder = { 1361 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "20% increased Spell Damage", statOrder = { 850 }, + rank = { 0 }, }, }, ["Lesser Body Rune"] = { @@ -552,16 +742,19 @@ return { type = "Rune", "Leeches 2% of Physical Damage as Life", statOrder = { 968 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+20 to maximum Life", statOrder = { 866 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "+25 to maximum Energy Shield", statOrder = { 864 }, + rank = { 0 }, }, }, ["Lesser Mind Rune"] = { @@ -569,16 +762,19 @@ return { type = "Rune", "Leeches 1.5% of Physical Damage as Mana", statOrder = { 974 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+15 to maximum Mana", statOrder = { 868 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "+30 to maximum Mana", statOrder = { 868 }, + rank = { 0 }, }, }, ["Lesser Rebirth Rune"] = { @@ -586,16 +782,19 @@ return { type = "Rune", "Gain 10 Life per Enemy Killed", statOrder = { 971 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "Regenerate 0.25% of maximum Life per second", statOrder = { 1614 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "12% increased Energy Shield Recharge Rate", statOrder = { 962 }, + rank = { 0 }, }, }, ["Lesser Inspiration Rune"] = { @@ -603,16 +802,19 @@ return { type = "Rune", "Gain 8 Mana per Enemy Killed", statOrder = { 976 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "12% increased Mana Regeneration Rate", statOrder = { 972 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "16% increased Mana Regeneration Rate", statOrder = { 972 }, + rank = { 0 }, }, }, ["Lesser Stone Rune"] = { @@ -620,16 +822,19 @@ return { type = "Rune", "Causes 20% increased Stun Buildup", statOrder = { 981 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+40 to Stun Threshold", statOrder = { 990 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "Gain additional Stun Threshold equal to 10% of maximum Energy Shield", statOrder = { 9367 }, + rank = { 0 }, }, }, ["Lesser Vision Rune"] = { @@ -637,16 +842,19 @@ return { type = "Rune", "+50 to Accuracy Rating", statOrder = { 824 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "8% increased Life and Mana Recovery from Flasks", statOrder = { 6145 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "16% increased Critical Hit Chance for Spells", statOrder = { 931 }, + rank = { 0 }, }, }, ["Greater Desert Rune"] = { @@ -654,16 +862,19 @@ return { type = "Rune", "Adds 13 to 16 Fire Damage", statOrder = { 821 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+14% to Fire Resistance", statOrder = { 954 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "Gain 10% of Damage as Extra Fire Damage", statOrder = { 844 }, + rank = { 30 }, }, }, ["Greater Glacial Rune"] = { @@ -671,16 +882,19 @@ return { type = "Rune", "Adds 9 to 15 Cold Damage", statOrder = { 822 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+14% to Cold Resistance", statOrder = { 955 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "Gain 10% of Damage as Extra Cold Damage", statOrder = { 846 }, + rank = { 30 }, }, }, ["Greater Storm Rune"] = { @@ -688,16 +902,19 @@ return { type = "Rune", "Adds 1 to 30 Lightning Damage", statOrder = { 823 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+14% to Lightning Resistance", statOrder = { 956 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "Gain 10% of Damage as Extra Lightning Damage", statOrder = { 848 }, + rank = { 30 }, }, }, ["Greater Iron Rune"] = { @@ -705,16 +922,19 @@ return { type = "Rune", "18% increased Physical Damage", statOrder = { 819 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "18% increased Armour, Evasion and Energy Shield", statOrder = { 1361 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "30% increased Spell Damage", statOrder = { 850 }, + rank = { 30 }, }, }, ["Greater Body Rune"] = { @@ -722,16 +942,19 @@ return { type = "Rune", "Leeches 3% of Physical Damage as Life", statOrder = { 968 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+40 to maximum Life", statOrder = { 866 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "+35 to maximum Energy Shield", statOrder = { 864 }, + rank = { 30 }, }, }, ["Greater Mind Rune"] = { @@ -739,16 +962,19 @@ return { type = "Rune", "Leeches 2.5% of Physical Damage as Mana", statOrder = { 974 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+35 to maximum Mana", statOrder = { 868 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "+50 to maximum Mana", statOrder = { 868 }, + rank = { 30 }, }, }, ["Greater Rebirth Rune"] = { @@ -756,16 +982,19 @@ return { type = "Rune", "Gain 30 Life per Enemy Killed", statOrder = { 971 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "Regenerate 0.35% of maximum Life per second", statOrder = { 1614 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "18% increased Energy Shield Recharge Rate", statOrder = { 962 }, + rank = { 30 }, }, }, ["Greater Inspiration Rune"] = { @@ -773,16 +1002,19 @@ return { type = "Rune", "Gain 24 Mana per Enemy Killed", statOrder = { 976 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "18% increased Mana Regeneration Rate", statOrder = { 972 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "24% increased Mana Regeneration Rate", statOrder = { 972 }, + rank = { 30 }, }, }, ["Greater Stone Rune"] = { @@ -790,16 +1022,19 @@ return { type = "Rune", "Causes 30% increased Stun Buildup", statOrder = { 981 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+80 to Stun Threshold", statOrder = { 990 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "Gain additional Stun Threshold equal to 14% of maximum Energy Shield", statOrder = { 9367 }, + rank = { 30 }, }, }, ["Greater Vision Rune"] = { @@ -807,16 +1042,19 @@ return { type = "Rune", "+110 to Accuracy Rating", statOrder = { 824 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "12% increased Life and Mana Recovery from Flasks", statOrder = { 6145 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "24% increased Critical Hit Chance for Spells", statOrder = { 931 }, + rank = { 30 }, }, }, ["Lesser Robust Rune"] = { @@ -824,16 +1062,19 @@ return { type = "Rune", "+6 to Strength", statOrder = { 943 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+6 to Strength", statOrder = { 943 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "+6 to Strength", statOrder = { 943 }, + rank = { 0 }, }, }, ["Robust Rune"] = { @@ -841,16 +1082,19 @@ return { type = "Rune", "+8 to Strength", statOrder = { 943 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+8 to Strength", statOrder = { 943 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "+8 to Strength", statOrder = { 943 }, + rank = { 15 }, }, }, ["Greater Robust Rune"] = { @@ -858,16 +1102,19 @@ return { type = "Rune", "+10 to Strength", statOrder = { 943 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+10 to Strength", statOrder = { 943 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "+10 to Strength", statOrder = { 943 }, + rank = { 30 }, }, }, ["Lesser Adept Rune"] = { @@ -875,16 +1122,19 @@ return { type = "Rune", "+6 to Dexterity", statOrder = { 944 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+6 to Dexterity", statOrder = { 944 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "+6 to Dexterity", statOrder = { 944 }, + rank = { 0 }, }, }, ["Adept Rune"] = { @@ -892,16 +1142,19 @@ return { type = "Rune", "+8 to Dexterity", statOrder = { 944 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+8 to Dexterity", statOrder = { 944 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "+8 to Dexterity", statOrder = { 944 }, + rank = { 15 }, }, }, ["Greater Adept Rune"] = { @@ -909,16 +1162,19 @@ return { type = "Rune", "+10 to Dexterity", statOrder = { 944 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+10 to Dexterity", statOrder = { 944 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "+10 to Dexterity", statOrder = { 944 }, + rank = { 30 }, }, }, ["Lesser Resolve Rune"] = { @@ -926,16 +1182,19 @@ return { type = "Rune", "+6 to Intelligence", statOrder = { 945 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "+6 to Intelligence", statOrder = { 945 }, + rank = { 0 }, }, ["caster"] = { type = "Rune", "+6 to Intelligence", statOrder = { 945 }, + rank = { 0 }, }, }, ["Resolve Rune"] = { @@ -943,16 +1202,19 @@ return { type = "Rune", "+8 to Intelligence", statOrder = { 945 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "+8 to Intelligence", statOrder = { 945 }, + rank = { 15 }, }, ["caster"] = { type = "Rune", "+8 to Intelligence", statOrder = { 945 }, + rank = { 15 }, }, }, ["Greater Resolve Rune"] = { @@ -960,16 +1222,19 @@ return { type = "Rune", "+10 to Intelligence", statOrder = { 945 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "+10 to Intelligence", statOrder = { 945 }, + rank = { 30 }, }, ["caster"] = { type = "Rune", "+10 to Intelligence", statOrder = { 945 }, + rank = { 30 }, }, }, ["Lesser Tempered Rune"] = { @@ -977,11 +1242,13 @@ return { type = "Rune", "Adds 3 to 4 Physical Damage", statOrder = { 820 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "6 to 9 Physical Thorns damage", statOrder = { 9486 }, + rank = { 0 }, }, }, ["Tempered Rune"] = { @@ -989,11 +1256,13 @@ return { type = "Rune", "Adds 6 to 9 Physical Damage", statOrder = { 820 }, + rank = { 15 }, }, ["armour"] = { type = "Rune", "14 to 21 Physical Thorns damage", statOrder = { 9486 }, + rank = { 15 }, }, }, ["Greater Tempered Rune"] = { @@ -1001,11 +1270,13 @@ return { type = "Rune", "Adds 9 to 12 Physical Damage", statOrder = { 820 }, + rank = { 30 }, }, ["armour"] = { type = "Rune", "31 to 52 Physical Thorns damage", statOrder = { 9486 }, + rank = { 30 }, }, }, ["Greater Rune of Leadership"] = { @@ -1013,11 +1284,13 @@ return { type = "Rune", "Minions gain 10% of their Physical Damage as Extra Lightning Damage", statOrder = { 8395 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "Minions take 10% of Physical Damage as Lightning Damage", statOrder = { 8396 }, + rank = { 0 }, }, }, ["Greater Rune of Tithing"] = { @@ -1025,11 +1298,13 @@ return { type = "Rune", "Meta Skills gain 10% increased Energy", statOrder = { 5919 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "1 to 100 Lightning Thorns damage", statOrder = { 9485 }, + rank = { 0 }, }, }, ["Greater Rune of Alacrity"] = { @@ -1037,11 +1312,13 @@ return { type = "Rune", "8% increased Skill Speed", statOrder = { 826 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "Debuffs on you expire 8% faster", statOrder = { 5638 }, + rank = { 0 }, }, }, ["Greater Rune of Nobility"] = { @@ -1049,11 +1326,13 @@ return { type = "Rune", "Attacks with this Weapon have 10% chance to inflict Lightning Exposure", statOrder = { 7163 }, + rank = { 0 }, }, ["armour"] = { type = "Rune", "10% reduced effect of Shock on you", statOrder = { 9111 }, + rank = { 0 }, }, }, ["Hedgewitch Assandra's Rune of Wisdom"] = { @@ -1061,6 +1340,7 @@ return { type = "Rune", "+1 to Level of all Spell Skills", statOrder = { 919 }, + rank = { 50 }, }, }, ["Saqawal's Rune of the Sky"] = { @@ -1068,11 +1348,13 @@ return { type = "Rune", "Gain 5% of Damage as Extra Damage of all Elements", statOrder = { 8556 }, + rank = { 50 }, }, ["caster"] = { type = "Rune", "Gain 5% of Damage as Extra Damage of all Elements", statOrder = { 8556 }, + rank = { 50 }, }, }, ["Fenumus' Rune of Agony"] = { @@ -1080,11 +1362,13 @@ return { type = "Rune", "Gain 13% of Damage as Extra Chaos Damage", statOrder = { 1599 }, + rank = { 50 }, }, ["caster"] = { type = "Rune", "Gain 13% of Damage as Extra Chaos Damage", statOrder = { 1599 }, + rank = { 50 }, }, }, ["Farrul's Rune of Grace"] = { @@ -1092,6 +1376,7 @@ return { type = "Rune", "6% reduced Movement Speed Penalty from using Skills while moving", statOrder = { 8471 }, + rank = { 50 }, }, }, ["Farrul's Rune of the Chase"] = { @@ -1099,6 +1384,7 @@ return { type = "Rune", "5% increased Movement Speed", statOrder = { 825 }, + rank = { 50 }, }, }, ["Craiceann's Rune of Warding"] = { @@ -1106,6 +1392,7 @@ return { type = "Rune", "40% reduced effect of Curses on you", statOrder = { 1832 }, + rank = { 50 }, }, }, ["Saqawal's Rune of Memory"] = { @@ -1113,6 +1400,7 @@ return { type = "Rune", "2% increased Experience gain", statOrder = { 1394 }, + rank = { 50 }, }, }, ["Saqawal's Rune of Erosion"] = { @@ -1120,6 +1408,7 @@ return { type = "Rune", "20% increased Exposure Effect", statOrder = { 6032 }, + rank = { 50 }, }, }, ["Farrul's Rune of the Hunt"] = { @@ -1127,6 +1416,7 @@ return { type = "Rune", "50% increased Attack Damage against Rare or Unique Enemies", statOrder = { 4354 }, + rank = { 50 }, }, }, ["Craiceann's Rune of Recovery"] = { @@ -1134,6 +1424,7 @@ return { type = "Rune", "50% increased Energy Shield Recharge Rate", statOrder = { 962 }, + rank = { 50 }, }, }, ["Courtesan Mannan's Rune of Cruelty"] = { @@ -1141,6 +1432,7 @@ return { type = "Rune", "15% increased Magnitude of Damaging Ailments you inflict", statOrder = { 5605 }, + rank = { 50 }, }, }, ["Thane Grannell's Rune of Mastery"] = { @@ -1148,6 +1440,7 @@ return { type = "Rune", "20% increased Magnitude of Non-Damaging Ailments you inflict", statOrder = { 8536 }, + rank = { 50 }, }, }, ["Fenumus' Rune of Spinning"] = { @@ -1155,6 +1448,7 @@ return { type = "Rune", "8% increased Cast Speed", statOrder = { 938 }, + rank = { 50 }, }, }, ["Countess Seske's Rune of Archery"] = { @@ -1162,6 +1456,7 @@ return { type = "Rune", "Bow Attacks fire an additional Arrow", statOrder = { 941 }, + rank = { 50 }, }, }, ["Thane Girt's Rune of Wildness"] = { @@ -1169,6 +1464,7 @@ return { type = "Rune", "25% chance for Spell Skills to fire 2 additional Projectiles", statOrder = { 9270 }, + rank = { 50 }, }, }, ["Fenumus' Rune of Draining"] = { @@ -1176,6 +1472,7 @@ return { type = "Rune", "20% increased Withered Magnitude", statOrder = { 9737 }, + rank = { 50 }, }, }, ["Thane Myrk's Rune of Summer"] = { @@ -1183,6 +1480,7 @@ return { type = "Rune", "Adds 23 to 34 Fire Damage", statOrder = { 821 }, + rank = { 50 }, }, }, ["Lady Hestra's Rune of Winter"] = { @@ -1190,6 +1488,7 @@ return { type = "Rune", "Adds 19 to 28 Cold Damage", statOrder = { 822 }, + rank = { 50 }, }, }, ["Thane Leld's Rune of Spring"] = { @@ -1197,6 +1496,7 @@ return { type = "Rune", "Adds 1 to 60 Lightning Damage", statOrder = { 823 }, + rank = { 50 }, }, }, ["The Greatwolf's Rune of Claws"] = { @@ -1204,6 +1504,7 @@ return { type = "Rune", "Adds 5 to 12 Physical Damage to Attacks", statOrder = { 840 }, + rank = { 50 }, }, }, ["The Greatwolf's Rune of Willpower"] = { @@ -1211,6 +1512,7 @@ return { type = "Rune", "10% of Damage is taken from Mana before Life", statOrder = { 2354 }, + rank = { 50 }, }, }, ["Talisman of Sirrius"] = { @@ -1218,6 +1520,7 @@ return { type = "Rune", "8% increased Attack Speed", statOrder = { 937 }, + rank = { 50 }, }, }, ["Talisman of Thruldana"] = { @@ -1226,6 +1529,7 @@ return { "25% reduced Poison Duration", "Targets can be affected by +1 of your Poisons at the same time", statOrder = { 2777, 8616 }, + rank = { 50 }, }, }, ["Talisman of Grold"] = { @@ -1233,6 +1537,7 @@ return { type = "Rune", "15% increased total Power counted by Warcries", statOrder = { 9711 }, + rank = { 50 }, }, }, ["Talisman of Eeshta"] = { @@ -1240,6 +1545,7 @@ return { type = "Rune", "10% increased Cost Efficiency", statOrder = { 4570 }, + rank = { 50 }, }, }, ["Talisman of Egrin"] = { @@ -1247,6 +1553,7 @@ return { type = "Rune", "Enemies you Curse take 5% increased Damage", statOrder = { 3318 }, + rank = { 50 }, }, }, ["Talisman of Maxarius"] = { @@ -1254,6 +1561,7 @@ return { type = "Rune", "+1 Charm Slot", statOrder = { 8606 }, + rank = { 50 }, }, }, ["Talisman of Ralakesh"] = { @@ -1261,13 +1569,21 @@ return { type = "Rune", "6% increased Reservation Efficiency of Minion Skills", statOrder = { 8401 }, + rank = { 50 }, }, }, ["Serpent Talisman"] = { + ["sceptre"] = { + type = "Rune", + "Allies in your Presence have 8% increased Attack Speed", + statOrder = { 890 }, + rank = { 0 }, + }, ["gloves"] = { type = "Rune", "5% increased Curse Magnitudes", statOrder = { 2258 }, + rank = { 0 }, }, }, ["Primate Talisman"] = { @@ -1275,27 +1591,55 @@ return { type = "Rune", "Minions have 12% increased maximum Life", statOrder = { 958 }, + rank = { 0 }, + }, + ["sceptre"] = { + type = "Rune", + "Allies in your Presence deal 30% increased Damage", + statOrder = { 878 }, + rank = { 0 }, }, }, ["Owl Talisman"] = { + ["sceptre"] = { + type = "Rune", + "Allies in your Presence have 8% increased Cast Speed", + statOrder = { 891 }, + rank = { 0 }, + }, ["focus"] = { type = "Rune", "10% increased Cooldown Recovery Rate", statOrder = { 4509 }, + rank = { 0 }, }, }, ["Cat Talisman"] = { + ["sceptre"] = { + type = "Rune", + "Allies in your Presence have 14% increased Critical Hit Chance", + statOrder = { 888 }, + rank = { 0 }, + }, ["gloves"] = { type = "Rune", "15% increased Accuracy Rating", statOrder = { 1264 }, + rank = { 0 }, }, }, ["Wolf Talisman"] = { + ["sceptre"] = { + type = "Rune", + "Allies in your Presence have 14% increased Critical Damage Bonus", + statOrder = { 889 }, + rank = { 0 }, + }, ["gloves"] = { type = "Rune", "10% increased Magnitude of Bleeding you inflict", statOrder = { 4628 }, + rank = { 0 }, }, }, ["Stag Talisman"] = { @@ -1303,13 +1647,27 @@ return { type = "Rune", "50% increased Thorns Critical Hit Chance", statOrder = { 9475 }, + rank = { 0 }, + }, + ["sceptre"] = { + type = "Rune", + "Allies in your Presence deal 1 to 40 added Attack Lightning Damage", + statOrder = { 882 }, + rank = { 0 }, }, }, ["Boar Talisman"] = { + ["sceptre"] = { + type = "Rune", + "Allies in your Presence Regenerate 8 Life per second", + statOrder = { 893 }, + rank = { 0 }, + }, ["gloves"] = { type = "Rune", "Gain 1 Rage on Melee Hit", statOrder = { 6339 }, + rank = { 0 }, }, }, ["Bear Talisman"] = { @@ -1317,13 +1675,27 @@ return { type = "Rune", "8% increased Area of Effect", statOrder = { 1554 }, + rank = { 0 }, + }, + ["sceptre"] = { + type = "Rune", + "Allies in your Presence deal 12 to 18 added Attack Physical Damage", + statOrder = { 879 }, + rank = { 0 }, }, }, ["Ox Talisman"] = { + ["sceptre"] = { + type = "Rune", + "Allies in your Presence have +8% to all Elemental Resistances", + statOrder = { 892 }, + rank = { 0 }, + }, ["shield"] = { type = "Rune", "10% increased Block chance", statOrder = { 828 }, + rank = { 0 }, }, }, ["Rabbit Talisman"] = { @@ -1331,6 +1703,13 @@ return { type = "Rune", "8% increased Rarity of Items found", statOrder = { 913 }, + rank = { 0 }, + }, + ["sceptre"] = { + type = "Rune", + "10% increased Spirit", + statOrder = { 839 }, + rank = { 0 }, }, }, ["Fox Talisman"] = { @@ -1338,6 +1717,13 @@ return { type = "Rune", "+2% to Quality of all Skills", statOrder = { 4152 }, + rank = { 0 }, + }, + ["sceptre"] = { + type = "Rune", + "30% increased Presence Area of Effect", + statOrder = { 998 }, + rank = { 0 }, }, }, } \ No newline at end of file diff --git a/src/Data/Uniques/sceptre.lua b/src/Data/Uniques/sceptre.lua index 7b1ae66443..f11456dd65 100644 --- a/src/Data/Uniques/sceptre.lua +++ b/src/Data/Uniques/sceptre.lua @@ -49,6 +49,7 @@ Implicits: 3 ]],[[ Guiding Palm of the Eye Shrine Sceptre +Requires Level 65 League: Dawn of the Hunt Implicits: 1 Grants Skill: Level (1-20) Purity of Ice @@ -61,6 +62,7 @@ Grants effect of Guided Freezing Shrine ]],[[ Guiding Palm of the Heart Shrine Sceptre +Requires Level 65 League: Dawn of the Hunt Implicits: 1 Grants Skill: Level (1-20) Purity of Fire @@ -73,6 +75,7 @@ Grants effect of Guided Meteoric Shrine ]],[[ Guiding Palm of the Mind Shrine Sceptre +Requires Level 65 League: Dawn of the Hunt Implicits: 1 Grants Skill: Level (1-20) Purity of Lightning @@ -85,6 +88,7 @@ Grants effect of Guided Tempest Shrine ]],[[ Palm of the Dreamer Shrine Sceptre +Requires Level 65 League: Dawn of the Hunt Implicits: 1 Grants Skill: Level (1-20) Impurity diff --git a/src/Data/Uniques/shield.lua b/src/Data/Uniques/shield.lua index ff36529a60..338070c050 100644 --- a/src/Data/Uniques/shield.lua +++ b/src/Data/Uniques/shield.lua @@ -364,6 +364,7 @@ Grants Skill: Raise Shield ]],[[ Prism Guardian Sectarian Crest Shield +Requires Level 65 League: Dawn of the Hunt Variant: Pre 0.2.1 Variant: Current @@ -387,6 +388,7 @@ Regenerate 3% of maximum Life per second while on Low Life ]],[[ Saffell's Frame Emblem Crest Shield +Requires Level 16 Implicits: 1 Grants Skill: Raise Shield +(15-25)% to Fire Resistance diff --git a/src/Data/Uniques/wand.lua b/src/Data/Uniques/wand.lua index ddf1d786a3..406bd4fb28 100644 --- a/src/Data/Uniques/wand.lua +++ b/src/Data/Uniques/wand.lua @@ -6,6 +6,7 @@ return { Adonia's Ego Siphoning Wand League: Dawn of the Hunt +Requires Level 65 Implicits: 2 Grants Skill: Level (1-20) Power Siphon Grants Skill: Level 20 Pinnacle of Power @@ -17,6 +18,7 @@ Grants Skill: Level 20 Pinnacle of Power ]],[[ Cursecarver Acrid Wand +Requires Level 33 League: Dawn of the Hunt Variant: Elemental Weakness Variant: Vulnerability diff --git a/src/Export/Bases/soulcore.txt b/src/Export/Bases/soulcore.txt index 255be8bc07..b93ad48f29 100644 --- a/src/Export/Bases/soulcore.txt +++ b/src/Export/Bases/soulcore.txt @@ -3,6 +3,10 @@ local itemBases = ... #type SoulCore #baseMatch Metadata/Items/SoulCores/SoulCore +#baseMatch Metadata/Items/SoulCores/AmanamusGaze +#baseMatch Metadata/Items/SoulCores/KurgalsGaze +#baseMatch Metadata/Items/SoulCores/TecrodsGaze +#baseMatch Metadata/Items/SoulCores/UlamansGaze #type Rune #baseMatch Metadata/Items/SoulCores/Rune diff --git a/src/Export/Scripts/bases.lua b/src/Export/Scripts/bases.lua index 61fc5115bb..7af2dedd00 100644 --- a/src/Export/Scripts/bases.lua +++ b/src/Export/Scripts/bases.lua @@ -305,14 +305,17 @@ directiveTable.base = function(state, args, out) end end -- Check for more slot specific Soulcores/Runes/Talismans - if soulCoresPerClass then - stats = { } - for i, statKey in ipairs(soulCoresPerClass.Stats) do - local statValue = soulCoresPerClass["StatsValues"][i] + local soulCoresPerClassList = dat("SoulCoresPerClass"):GetRowList("BaseItemType", baseItemType) or {} + for _, row in ipairs(soulCoresPerClassList) do + stats = {} + for i, statKey in ipairs(row.Stats or {}) do + local statValue = row.StatsValues[i] stats[statKey.Id] = { min = statValue, max = statValue } end - local coreItemClass = soulCoresPerClass.ItemClass.Id - table.insert(outLines, coreItemClass..': ' .. table.concat(describeStats(stats), '\\n')) + if next(stats) then + local coreItemClass = row.ItemClass and row.ItemClass.Id or "unknown" + table.insert(outLines, coreItemClass .. ': ' .. table.concat(describeStats(stats), '\\n')) + end end out:write('\timplicit = "'..table.concat(outLines, '\\n')..'",\n') end diff --git a/src/Export/Scripts/soulcores.lua b/src/Export/Scripts/soulcores.lua index ad37f822e0..caa7fad645 100644 --- a/src/Export/Scripts/soulcores.lua +++ b/src/Export/Scripts/soulcores.lua @@ -37,7 +37,7 @@ directiveTable.base = function(state, args, out) displayName = displayName:gsub("^%s*(.-)%s*$", "%1") -- trim spaces GGG might leave in by accident -- Special handling of Runes and SoulCores - local function addRuneStats(stats, slotType, modLines) + local function addRuneStats(stats, slotType, modLines, rank) local stats, orders = describeStats(stats) if #orders > 0 then local out = { @@ -45,6 +45,7 @@ directiveTable.base = function(state, args, out) slotType = slotType, label = stats, statOrder = orders, + rank = rank, } table.insert(modLines, out) end @@ -54,20 +55,25 @@ directiveTable.base = function(state, args, out) for _, modLine in ipairs(modLines) do out:write('\t\t["'..modLine.slotType..'"] = {\n') out:write('\t\t\t\ttype = "Rune",\n') - -- for j, label in ipairs(modLine.label) do - out:write('\t\t\t\t"'..table.concat(modLine.label, '",\n\t\t\t\t"')..'",\n') - out:write('\t\t\t\tstatOrder = { '..table.concat(modLine.statOrder, ', ')..' },\n') - -- end + -- only write labels/statOrder if present + if modLine.label and #modLine.label > 0 then + out:write('\t\t\t\t"'..table.concat(modLine.label, '",\n\t\t\t\t"')..'",\n') + local statOrder = modLine.statOrder or {} + out:write('\t\t\t\tstatOrder = { '..table.concat(statOrder, ', ')..' },\n') + end + out:write('\t\t\t\trank = { '..(modLine.rank or 0)..' },\n') out:write('\t\t},\n') end end -- Check for Standard Weapon, Armour, Caster Runes local soulCores = dat("SoulCores"):GetRow("BaseItemTypes", baseItemType) - local soulCoresPerClass = dat("SoulCoresPerClass"):GetRow("BaseItemType", baseItemType) out:write('\t["', displayName, '"] = {\n') local modLines = { } + local rank = 0 if soulCores then + rank = soulCores.Rank or 0 + -- weapons local stats = { } for i, statKey in ipairs(soulCores.StatsKeysWeapon) do @@ -75,7 +81,7 @@ directiveTable.base = function(state, args, out) stats[statKey.Id] = { min = statValue, max = statValue } end if next(stats) then - addRuneStats(stats, "weapon", modLines) + addRuneStats(stats, "weapon", modLines, rank) end -- armour @@ -85,7 +91,7 @@ directiveTable.base = function(state, args, out) stats[statKey.Id] = { min = statValue, max = statValue } end if next(stats) then - addRuneStats(stats, "armour", modLines) + addRuneStats(stats, "armour", modLines, rank) end -- caster check (wand & staff) @@ -95,7 +101,7 @@ directiveTable.base = function(state, args, out) stats[statKey.Id] = { min = statValue, max = statValue } end if next(stats) then - addRuneStats(stats, "caster", modLines) + addRuneStats(stats, "caster", modLines, rank) end -- Check if the row is an Attribute rune which can go in all slots @@ -106,25 +112,43 @@ directiveTable.base = function(state, args, out) stats[statKey.Id] = { min = statValue, max = statValue } end if next(stats) then - addRuneStats(stats, "weapon", modLines) - addRuneStats(stats, "armour", modLines) - addRuneStats(stats, "caster", modLines) + addRuneStats(stats, "weapon", modLines, rank) + addRuneStats(stats, "armour", modLines, rank) + addRuneStats(stats, "caster", modLines, rank) end end end -- Handle special case of new runes on specific item types - if soulCoresPerClass then - local stats = { } -- reset stats to empty - for i, statKey in ipairs(soulCoresPerClass.Stats) do - local statValue = soulCoresPerClass["StatsValues"][i] + local soulCoresPerClassList = dat("SoulCoresPerClass"):GetRowList("BaseItemType", baseItemType) or {} + local mergedSlotStats = {} + + for _, row in ipairs(soulCoresPerClassList) do + local stats = {} -- reset stats to empty + for i, statKey in ipairs(row.Stats or {}) do + local statValue = row.StatsValues[i] stats[statKey.Id] = { min = statValue, max = statValue } end - local itemClassId = soulCoresPerClass.ItemClass.Id + local slotType = (row.ItemClass and row.ItemClass.Id or "unknown"):lower() if next(stats) then - addRuneStats(stats, itemClassId:lower(), modLines) + mergedSlotStats[slotType] = mergedSlotStats[slotType] or {} + for k,v in pairs(stats) do + mergedSlotStats[slotType][k] = v + end end end + + for slotType, stats in pairs(mergedSlotStats) do + -- use the soulCores.Rank (if present) for per-class slots too + addRuneStats(stats, slotType, modLines, rank) + end + + -- If nothing produced stats but the soulCores row carries a Rank, export a rank-only entry + if #modLines == 0 and rank then + -- produce a rank-only entry (no labels/statOrder) so other code can read Rank + table.insert(modLines, { slotType = "weapon", label = {}, statOrder = {}, rank = rank }) + end + writeModLines(modLines, out) out:write('\t},\n') end @@ -166,4 +190,4 @@ end out:write("}") out:close() -print("Soul Cores exported.") \ No newline at end of file +print("Soul Cores exported.") diff --git a/src/Export/Uniques/sceptre.lua b/src/Export/Uniques/sceptre.lua index ead4fdf5e9..4279d6d72b 100644 --- a/src/Export/Uniques/sceptre.lua +++ b/src/Export/Uniques/sceptre.lua @@ -48,6 +48,7 @@ UniqueBaseLifeRegenToAllies1 ]],[[ Guiding Palm of the Eye Shrine Sceptre +Requires Level 65 League: Dawn of the Hunt Implicits: 1 Grants Skill: Level (1-20) Purity of Ice @@ -60,6 +61,7 @@ UniqueColdShrine1 ]],[[ Guiding Palm of the Heart Shrine Sceptre +Requires Level 65 League: Dawn of the Hunt Implicits: 1 Grants Skill: Level (1-20) Purity of Fire @@ -72,6 +74,7 @@ UniqueFireShrine1 ]],[[ Guiding Palm of the Mind Shrine Sceptre +Requires Level 65 League: Dawn of the Hunt Implicits: 1 Grants Skill: Level (1-20) Purity of Lightning @@ -84,6 +87,7 @@ UniqueLightningShrine1 ]],[[ Palm of the Dreamer Shrine Sceptre +Requires Level 65 League: Dawn of the Hunt Implicits: 1 Grants Skill: Level (1-20) Impurity diff --git a/src/Export/Uniques/shield.lua b/src/Export/Uniques/shield.lua index 3f66ff7262..106ffced50 100644 --- a/src/Export/Uniques/shield.lua +++ b/src/Export/Uniques/shield.lua @@ -338,6 +338,7 @@ UniqueChaosResist1 ]],[[ Prism Guardian Sectarian Crest Shield +Requires Level 65 League: Dawn of the Hunt Variant: Pre 0.2.1 Variant: Current @@ -361,6 +362,7 @@ UniqueLifeRegenerationPercentOnLowLife1 ]],[[ Saffell's Frame Emblem Crest Shield +Requires Level 16 Implicits: 1 Grants Skill: Raise Shield UniqueFireResist6 diff --git a/src/Export/Uniques/wand.lua b/src/Export/Uniques/wand.lua index 43e956fc3d..2414dbe927 100644 --- a/src/Export/Uniques/wand.lua +++ b/src/Export/Uniques/wand.lua @@ -6,6 +6,7 @@ return { Adonia's Ego Siphoning Wand League: Dawn of the Hunt +Requires Level 65 Implicits: 2 Grants Skill: Level (1-20) Power Siphon Grants Skill: Level 20 Pinnacle of Power @@ -17,6 +18,7 @@ UniqueMaximumPowerChargesWand_1 ]],[[ Cursecarver Acrid Wand +Requires Level 33 League: Dawn of the Hunt Variant: Elemental Weakness Variant: Vulnerability diff --git a/src/Export/spec.lua b/src/Export/spec.lua index d5755c7146..a39dae172f 100644 --- a/src/Export/spec.lua +++ b/src/Export/spec.lua @@ -17458,6 +17458,20 @@ return { refTo="", type="Int", width=150 + }, + [11]={ + list=false, + name="Limit", + refTo="SoulCoreLimits", + type="Key", + width=150 + }, + [12]={ + list=false, + name="", + refTo="", + type="Key", + width=150 } }, soulcoresperclass={