From 9ad3e3e3e17a116cf21f112908d0c21cb90db6db Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 28 Jun 2026 21:01:21 -0500 Subject: [PATCH 1/2] Remove item requirements from granted skills --- src/Classes/Item.lua | 57 ++---------------------------------- src/Data/Uniques/staff.lua | 1 + src/Export/Uniques/staff.lua | 1 + 3 files changed, 4 insertions(+), 55 deletions(-) diff --git a/src/Classes/Item.lua b/src/Classes/Item.lua index c9e091b69d..91920aef4d 100644 --- a/src/Classes/Item.lua +++ b/src/Classes/Item.lua @@ -604,10 +604,8 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) end self.armourData = self.armourData or { } self.armourData[specName] = specToNumber(specVal) - elseif specName == "Requires Level" then + 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) @@ -1210,19 +1208,6 @@ 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 @@ -1651,7 +1636,7 @@ function ItemClass:Craft() elseif mod.type == "Suffix" then self.nameSuffix = self.nameSuffix .. " " .. mod.affix end - self.requirements.level = m_max(self.requirements.level or 0, m_floor(mod.level * 0.8)) + self.requirements.level = m_max(self.requirements.level or 0, m_floor(mod.level * 0.8), self.requirements.runeLevel or 0) local rangeScalar = getCatalystScalar(self.catalyst, mod, self.catalystQuality) for i, line in ipairs(mod) do line = itemLib.applyRange(line, affix.range or 0.5, rangeScalar) @@ -2153,44 +2138,6 @@ function ItemClass:BuildModList() self.canSocketJewelBase["Ruby"] = calcLocal(baseList, "CanSocketJewelBaseRuby", "FLAG", 0) end - local reqLevel = 0 - local minReqLevel - - for _, entry in ipairs(minimumReqLevel) do - if entry.name == self.title then - minReqLevel = tonumber(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 }) diff --git a/src/Data/Uniques/staff.lua b/src/Data/Uniques/staff.lua index e31e14a144..d4276211a5 100644 --- a/src/Data/Uniques/staff.lua +++ b/src/Data/Uniques/staff.lua @@ -55,6 +55,7 @@ Trigger Spark Skill on killing a Shocked Enemy The Raven's Flock Perching Staff League: Runes of Aldur +LevelReq: 65 Implicits: 1 Grants Skill: Level (1-20) Spiraling Conspiracy (8-16)% increased Cast Speed diff --git a/src/Export/Uniques/staff.lua b/src/Export/Uniques/staff.lua index 1639401c25..de284400bc 100644 --- a/src/Export/Uniques/staff.lua +++ b/src/Export/Uniques/staff.lua @@ -54,6 +54,7 @@ UniqueTriggerSparkOnKillingShockedEnemy1 ]],[[ The Raven's Flock Perching Staff +LevelReq: 65 League: Runes of Aldur Implicits: 1 Grants Skill: Level (1-20) Spiraling Conspiracy From 18144da2ef3c6e23f3a538cf66a5afe35003e598 Mon Sep 17 00:00:00 2001 From: Blitz54 Date: Sun, 28 Jun 2026 23:08:35 -0500 Subject: [PATCH 2/2] Initial commit, level reqs fixed --- src/Classes/ImportTab.lua | 13 ++++++----- src/Classes/Item.lua | 12 +++++----- src/Data/Bases/amulet.lua | 2 +- src/Data/Bases/sceptre.lua | 40 +++++++++++++++++----------------- src/Data/Bases/staff.lua | 28 ++++++++++++------------ src/Data/Bases/wand.lua | 22 +++++++++---------- src/Data/Uniques/sceptre.lua | 1 + src/Data/Uniques/staff.lua | 1 - src/Export/Scripts/bases.lua | 5 +++-- src/Export/Uniques/sceptre.lua | 1 + src/Export/Uniques/staff.lua | 1 - 11 files changed, 66 insertions(+), 60 deletions(-) diff --git a/src/Classes/ImportTab.lua b/src/Classes/ImportTab.lua index 6fa5dc5d0e..096ec6e4df 100644 --- a/src/Classes/ImportTab.lua +++ b/src/Classes/ImportTab.lua @@ -48,7 +48,7 @@ local ImportTabClass = newClass("ImportTab", "ControlHost", "Control", function( self.controls.logoutApiButton.shown = function() return (self.charImportMode == "SELECTCHAR" or self.charImportMode == "GETACCOUNTNAME") and main.api.authToken ~= nil end - + self.controls.characterImportAnchor = new("Control", {"TOPLEFT",self.controls.sectionCharImport,"TOPLEFT"}, {6, 40, 200, 16}) self.controls.sectionCharImport.height = function() return self.charImportMode == "AUTHENTICATION" and 60 or 200 end @@ -442,7 +442,7 @@ function ImportTabClass:DownloadCharacterList() return "Standard" end end - + self.charImportMode = "DOWNLOADCHARLIST" self.charImportStatus = "Retrieving character list..." local realm = realmList[self.controls.accountRealm.selIndex] @@ -954,10 +954,10 @@ function ImportTabClass:ImportItemsAndSkills(charData) local funcGetGemInstance = function(skillData) local typeLine = sanitiseText(skillData.typeLine) .. (skillData.support and " Support" or "") local gemId = self.build.data.gemForBaseName[typeLine:lower()] - + if typeLine:match("^Spectre:") then gemId = "Metadata/Items/Gems/SkillGemSummonSpectre" - end + end if typeLine:match("^Companion:") then gemId = "Metadata/Items/Gems/SkillGemSummonBeast" end @@ -1061,7 +1061,7 @@ function ImportTabClass:ImportItemsAndSkills(charData) end for _, skillData in pairs(charData.skills) do local gemInstance = funcGetGemInstance(skillData) - + if gemInstance then local group = { label = "", enabled = true, gemList = { } } t_insert(group.gemList, gemInstance ) @@ -1291,6 +1291,9 @@ function ImportTabClass:ImportItem(itemData, slotName) end if itemData.requirements and (not itemData.socketedItems or not itemData.socketedItems[1]) then -- Requirements cannot be trusted if there are socketed gems, as they may override the item's natural requirements + -- This means some uniques will not import Level requirement properly for now. We probably need to compare the level to the equipped rune levels, + -- and only accept the imported level if it's higher than the runes. Problem with that, when we remove the runes, the required level will drop back + -- to the base item level. Which is sometimes incorrect for uniques (they can be higher than the base, like Sylvan's Effigy) item.requirements = { } for _, req in ipairs(itemData.requirements) do if req.name == "Level" then diff --git a/src/Classes/Item.lua b/src/Classes/Item.lua index 91920aef4d..ffbed18d28 100644 --- a/src/Classes/Item.lua +++ b/src/Classes/Item.lua @@ -506,6 +506,11 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) end self.checkSection = false end + local levelReq = line:match("^Requires:? Level (%d+)") + if levelReq then + self.requirements.level = tonumber(levelReq) + goto continue + end local specName, specVal = line:match("^([%a %(%)]+:?): (.+)$") if specName then if specName == "Class:" then @@ -604,11 +609,11 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) end self.armourData = self.armourData or { } self.armourData[specName] = specToNumber(specVal) - elseif specName == "Requires: Level" then - self.requirements.level = specToNumber(specVal) elseif specName == "Level" then -- Requirements from imported items can't always be trusted importedLevelReq = specToNumber(specVal) + elseif specName == "Requires Level" then + self.requirements.level = specToNumber(specVal) elseif specName == "LevelReq" then self.requirements.level = specToNumber(specVal) elseif specName == "Has Alt Variant" then @@ -688,9 +693,6 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) self.catalystQuality = specToNumber(specVal) elseif specName == "Note" then self.note = specVal - elseif specName == "Str" or specName == "Strength" or specName == "Dex" or specName == "Dexterity" or - specName == "Int" or specName == "Intelligence" then - self.requirements[specName:sub(1,3):lower()] = specToNumber(specVal) elseif specName == "Critical Hit Range" or specName == "Attacks per Second" or specName == "Weapon Range" or specName == "Critical Hit Chance" or specName == "Physical Damage" or specName == "Elemental Damage" or specName == "Chaos Damage" or specName == "Fire Damage" or specName == "Cold Damage" or specName == "Lightning Damage" or diff --git a/src/Data/Bases/amulet.lua b/src/Data/Bases/amulet.lua index be1b2ba358..9c2a4d1446 100644 --- a/src/Data/Bases/amulet.lua +++ b/src/Data/Bases/amulet.lua @@ -133,7 +133,7 @@ itemBases["Absent Amulet"] = { variantList = { "Cast on Elemental Ailment", "Cast on Critical", "Cast on Dodge", "Rhoa Mount", "Archmage", "Trinity", "Eternal Rage", }, implicit = "-1 Prefix Modifier allowed\n-1 Suffix Modifier allowed\n{variant:1}Grants Skill: Level (1-20) Cast on Elemental Ailment\n{variant:2}Grants Skill: Level (1-20) Cast on Critical\n{variant:3}Grants Skill: Level (1-20) Cast on Dodge\n{variant:4}Grants Skill: Level (1-20) Rhoa Mount\n{variant:5}Grants Skill: Level (1-20) Archmage\n{variant:6}Grants Skill: Level (1-20) Trinity\n{variant:7}Grants Skill: Level (1-20) Eternal Rage", implicitModTypes = { { }, { }, }, - req = { level = 49, }, + req = { level = 50, }, } itemBases["Corona Amulet"] = { type = "Amulet", diff --git a/src/Data/Bases/sceptre.lua b/src/Data/Bases/sceptre.lua index bb5835a368..e8a7884bb4 100644 --- a/src/Data/Bases/sceptre.lua +++ b/src/Data/Bases/sceptre.lua @@ -20,7 +20,7 @@ itemBases["Stoic Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Discipline", implicitModTypes = { }, - req = { int = 12, }, + req = { level = 6, int = 12, }, } itemBases["Lupine Sceptre"] = { type = "Sceptre", @@ -30,7 +30,7 @@ itemBases["Lupine Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, - req = { int = 24, }, + req = { level = 12, int = 24, }, } itemBases["Omen Sceptre"] = { type = "Sceptre", @@ -40,7 +40,7 @@ itemBases["Omen Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Malice", implicitModTypes = { }, - req = { str = 12, int = 25, }, + req = { level = 16, str = 12, int = 25, }, } itemBases["Ochre Sceptre"] = { type = "Sceptre", @@ -50,7 +50,7 @@ itemBases["Ochre Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, - req = { int = 40, }, + req = { level = 21, int = 40, }, } itemBases["Shrine Sceptre"] = { type = "Sceptre", @@ -60,7 +60,7 @@ itemBases["Shrine Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Fire", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } itemBases["Shrine Sceptre"] = { type = "Sceptre", @@ -70,7 +70,7 @@ itemBases["Shrine Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Ice", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } itemBases["Shrine Sceptre"] = { type = "Sceptre", @@ -80,7 +80,7 @@ itemBases["Shrine Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Lightning", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } itemBases["Devouring Sceptre"] = { type = "Sceptre", @@ -90,7 +90,7 @@ itemBases["Devouring Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, - req = { int = 60, }, + req = { level = 33, int = 60, }, } itemBases["Clasped Sceptre"] = { type = "Sceptre", @@ -100,7 +100,7 @@ itemBases["Clasped Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Heart of Ice", implicitModTypes = { }, - req = { int = 65, }, + req = { level = 36, int = 65, }, } itemBases["Devotional Sceptre"] = { type = "Sceptre", @@ -110,7 +110,7 @@ itemBases["Devotional Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, - req = { str = 26, int = 63, }, + req = { level = 45, str = 26, int = 63, }, } itemBases["Wrath Sceptre"] = { type = "Sceptre", @@ -120,7 +120,7 @@ itemBases["Wrath Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Fulmination", implicitModTypes = { }, - req = { int = 87, }, + req = { level = 49, int = 87, }, } itemBases["Aromatic Sceptre"] = { type = "Sceptre", @@ -130,7 +130,7 @@ itemBases["Aromatic Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, - req = { int = 92, }, + req = { level = 52, int = 92, }, } itemBases["Pious Sceptre"] = { type = "Sceptre", @@ -140,7 +140,7 @@ itemBases["Pious Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, - req = { int = 102, }, + req = { level = 58, int = 102, }, } itemBases["Hallowed Sceptre"] = { type = "Sceptre", @@ -150,7 +150,7 @@ itemBases["Hallowed Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, - req = { int = 114, }, + req = { level = 65, int = 114, }, } itemBases["Shrine Sceptre"] = { @@ -162,7 +162,7 @@ itemBases["Shrine Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Fire", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } itemBases["Shrine Sceptre"] = { type = "Sceptre", @@ -173,7 +173,7 @@ itemBases["Shrine Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Ice", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } itemBases["Shrine Sceptre"] = { type = "Sceptre", @@ -184,7 +184,7 @@ itemBases["Shrine Sceptre"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Lightning", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } itemBases["Shrine Sceptre (Purity of Fire)"] = { @@ -195,7 +195,7 @@ itemBases["Shrine Sceptre (Purity of Fire)"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Fire", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } itemBases["Shrine Sceptre (Purity of Cold)"] = { type = "Sceptre", @@ -205,7 +205,7 @@ itemBases["Shrine Sceptre (Purity of Cold)"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Ice", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } itemBases["Shrine Sceptre (Purity of Lighting)"] = { type = "Sceptre", @@ -215,5 +215,5 @@ itemBases["Shrine Sceptre (Purity of Lighting)"] = { tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Lightning", implicitModTypes = { }, - req = { str = 17, int = 38, }, + req = { level = 26, str = 17, int = 38, }, } diff --git a/src/Data/Bases/staff.lua b/src/Data/Bases/staff.lua index 9051d2f27a..724df0c379 100644 --- a/src/Data/Bases/staff.lua +++ b/src/Data/Bases/staff.lua @@ -36,7 +36,7 @@ itemBases["Spriggan Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Firebolt", implicitModTypes = { }, - req = { int = 23, }, + req = { level = 11, int = 23, }, } itemBases["Pyrophyte Staff"] = { type = "Staff", @@ -45,7 +45,7 @@ itemBases["Pyrophyte Staff"] = { tags = { default = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, no_lightning_spell_mods = true, no_physical_spell_mods = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Solar Orb", implicitModTypes = { }, - req = { int = 31, }, + req = { level = 16, int = 31, }, } itemBases["Chiming Staff"] = { type = "Staff", @@ -54,7 +54,7 @@ itemBases["Chiming Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Sigil of Power", implicitModTypes = { }, - req = { int = 46, }, + req = { level = 25, int = 46, }, } itemBases["Rending Staff"] = { type = "Staff", @@ -63,7 +63,7 @@ itemBases["Rending Staff"] = { tags = { default = true, no_cold_spell_mods = true, no_fire_spell_mods = true, no_lightning_spell_mods = true, no_physical_spell_mods = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Soulrend", implicitModTypes = { }, - req = { int = 60, }, + req = { level = 33, int = 60, }, } itemBases["Reaping Staff"] = { type = "Staff", @@ -72,7 +72,7 @@ itemBases["Reaping Staff"] = { tags = { default = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, no_fire_spell_mods = true, no_lightning_spell_mods = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Reap", implicitModTypes = { }, - req = { int = 68, }, + req = { level = 38, int = 68, }, } itemBases["Icicle Staff"] = { type = "Staff", @@ -81,7 +81,7 @@ itemBases["Icicle Staff"] = { tags = { default = true, no_chaos_spell_mods = true, no_fire_spell_mods = true, no_lightning_spell_mods = true, no_physical_spell_mods = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Firebolt", implicitModTypes = { }, - req = { int = 80, }, + req = { level = 45, int = 80, }, } itemBases["Roaring Staff"] = { type = "Staff", @@ -90,7 +90,7 @@ itemBases["Roaring Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Unleash", implicitModTypes = { }, - req = { int = 87, }, + req = { level = 49, int = 87, }, } itemBases["Paralysing Staff"] = { type = "Staff", @@ -99,7 +99,7 @@ itemBases["Paralysing Staff"] = { tags = { default = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, no_fire_spell_mods = true, no_physical_spell_mods = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Enervating Nova", implicitModTypes = { }, - req = { int = 92, }, + req = { level = 52, int = 92, }, } itemBases["Sanctified Staff"] = { type = "Staff", @@ -108,7 +108,7 @@ itemBases["Sanctified Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Consecrate", implicitModTypes = { }, - req = { int = 99, }, + req = { level = 56, int = 99, }, } itemBases["Dark Staff"] = { type = "Staff", @@ -117,7 +117,7 @@ itemBases["Dark Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Dark Pact", implicitModTypes = { }, - req = { int = 114, }, + req = { level = 65, int = 114, }, } itemBases["Ravenous Staff"] = { type = "Staff", @@ -126,7 +126,7 @@ itemBases["Ravenous Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Feast of Flesh", implicitModTypes = { }, - req = { int = 114, }, + req = { level = 65, int = 114, }, } itemBases["Permafrost Staff"] = { type = "Staff", @@ -136,7 +136,7 @@ itemBases["Permafrost Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Heart of Ice", implicitModTypes = { }, - req = { int = 114, }, + req = { level = 75, int = 114, }, } itemBases["Reflecting Staff"] = { type = "Staff", @@ -146,7 +146,7 @@ itemBases["Reflecting Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Mirror of Refraction", implicitModTypes = { }, - req = { int = 114, }, + req = { level = 70, int = 114, }, } itemBases["Perching Staff"] = { type = "Staff", @@ -156,7 +156,7 @@ itemBases["Perching Staff"] = { tags = { default = true, staff = true, twohand = true, }, implicit = "Grants Skill: Level (1-20) Spiraling Conspiracy", implicitModTypes = { }, - req = { int = 114, }, + req = { level = 65, int = 114, }, } itemBases["Wrapped Quarterstaff"] = { diff --git a/src/Data/Bases/wand.lua b/src/Data/Bases/wand.lua index ff7ae7a977..0895a8955e 100644 --- a/src/Data/Bases/wand.lua +++ b/src/Data/Bases/wand.lua @@ -36,7 +36,7 @@ itemBases["Siphoning Wand"] = { tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Power Siphon", implicitModTypes = { }, - req = { int = 23, }, + req = { level = 11, int = 23, }, } itemBases["Volatile Wand"] = { type = "Wand", @@ -45,7 +45,7 @@ itemBases["Volatile Wand"] = { tags = { default = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, no_lightning_spell_mods = true, no_physical_spell_mods = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Volatile Dead", implicitModTypes = { }, - req = { int = 31, }, + req = { level = 16, int = 31, }, } itemBases["Galvanic Wand"] = { type = "Wand", @@ -54,7 +54,7 @@ itemBases["Galvanic Wand"] = { tags = { default = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, no_fire_spell_mods = true, no_physical_spell_mods = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Galvanic Field", implicitModTypes = { }, - req = { int = 46, }, + req = { level = 25, int = 46, }, } itemBases["Acrid Wand"] = { type = "Wand", @@ -63,7 +63,7 @@ itemBases["Acrid Wand"] = { tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Decompose", implicitModTypes = { }, - req = { int = 60, }, + req = { level = 33, int = 60, }, } itemBases["Offering Wand"] = { type = "Wand", @@ -72,7 +72,7 @@ itemBases["Offering Wand"] = { tags = { default = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, no_fire_spell_mods = true, no_lightning_spell_mods = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Exsanguinate", implicitModTypes = { }, - req = { int = 68, }, + req = { level = 38, int = 68, }, } itemBases["Frigid Wand"] = { type = "Wand", @@ -81,7 +81,7 @@ itemBases["Frigid Wand"] = { tags = { default = true, no_chaos_spell_mods = true, no_fire_spell_mods = true, no_lightning_spell_mods = true, no_physical_spell_mods = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Chaos Bolt", implicitModTypes = { }, - req = { int = 80, }, + req = { level = 45, int = 80, }, } itemBases["Torture Wand"] = { type = "Wand", @@ -90,7 +90,7 @@ itemBases["Torture Wand"] = { tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Chaos Bolt", implicitModTypes = { }, - req = { int = 87, }, + req = { level = 49, int = 87, }, } itemBases["Critical Wand"] = { type = "Wand", @@ -99,7 +99,7 @@ itemBases["Critical Wand"] = { tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Chaos Bolt", implicitModTypes = { }, - req = { int = 92, }, + req = { level = 52, int = 92, }, } itemBases["Primordial Wand"] = { type = "Wand", @@ -108,7 +108,7 @@ itemBases["Primordial Wand"] = { tags = { default = true, no_cold_spell_mods = true, no_fire_spell_mods = true, no_lightning_spell_mods = true, no_physical_spell_mods = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Wither", implicitModTypes = { }, - req = { int = 99, }, + req = { level = 56, int = 99, }, } itemBases["Dueling Wand"] = { type = "Wand", @@ -117,7 +117,7 @@ itemBases["Dueling Wand"] = { tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Spellslinger", implicitModTypes = { }, - req = { int = 114, }, + req = { level = 65, int = 114, }, } itemBases["Twisted Wand"] = { type = "Wand", @@ -127,7 +127,7 @@ itemBases["Twisted Wand"] = { tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Coiling Bolts", implicitModTypes = { }, - req = { int = 114, }, + req = { level = 65, int = 114, }, } itemBases["Runic Fork"] = { type = "Wand", diff --git a/src/Data/Uniques/sceptre.lua b/src/Data/Uniques/sceptre.lua index 0c0eb3f4ac..7f6e3cab14 100644 --- a/src/Data/Uniques/sceptre.lua +++ b/src/Data/Uniques/sceptre.lua @@ -112,6 +112,7 @@ Enemies in your Presence Resist Elemental Damage based on their Lowest Resistanc Sylvan's Effigy Stoic Sceptre League: Runes of Aldur +Requires Level 62 Implicits: 2 Grants Skill: Level (1-20) Discipline Grants Skill: Level (1-20) Azmerian Wolf diff --git a/src/Data/Uniques/staff.lua b/src/Data/Uniques/staff.lua index d4276211a5..e31e14a144 100644 --- a/src/Data/Uniques/staff.lua +++ b/src/Data/Uniques/staff.lua @@ -55,7 +55,6 @@ Trigger Spark Skill on killing a Shocked Enemy The Raven's Flock Perching Staff League: Runes of Aldur -LevelReq: 65 Implicits: 1 Grants Skill: Level (1-20) Spiraling Conspiracy (8-16)% increased Cast Speed diff --git a/src/Export/Scripts/bases.lua b/src/Export/Scripts/bases.lua index ccf804458c..139768ba8b 100644 --- a/src/Export/Scripts/bases.lua +++ b/src/Export/Scripts/bases.lua @@ -333,9 +333,10 @@ directiveTable.base = function(state, args, out) out:write('},\n') end end + local inherentSkillsType = dat("ItemInherentSkills"):GetRow("BaseItemType", baseItemType) out:write('\treq = { ') local reqLevel = 1 - if weaponType or armourType then + if weaponType or armourType or inherentSkillsType then if baseItemType.DropLevel > 4 then reqLevel = baseItemType.DropLevel end @@ -364,7 +365,7 @@ directiveTable.base = function(state, args, out) end end out:write('},\n}\n') - + if not hidden then bases[state.type] = bases[state.type] or {} local subtype = state.subType and #state.subType and state.subType or "" diff --git a/src/Export/Uniques/sceptre.lua b/src/Export/Uniques/sceptre.lua index bde571b9d4..d83c921b19 100644 --- a/src/Export/Uniques/sceptre.lua +++ b/src/Export/Uniques/sceptre.lua @@ -111,6 +111,7 @@ UniqueEnemiesInPresenceLowestResistance1 Sylvan's Effigy Stoic Sceptre League: Runes of Aldur +Requires Level 62 Implicits: 2 Grants Skill: Level (1-20) Discipline Grants Skill: Level (1-20) Azmerian Wolf diff --git a/src/Export/Uniques/staff.lua b/src/Export/Uniques/staff.lua index de284400bc..1639401c25 100644 --- a/src/Export/Uniques/staff.lua +++ b/src/Export/Uniques/staff.lua @@ -54,7 +54,6 @@ UniqueTriggerSparkOnKillingShockedEnemy1 ]],[[ The Raven's Flock Perching Staff -LevelReq: 65 League: Runes of Aldur Implicits: 1 Grants Skill: Level (1-20) Spiraling Conspiracy