diff --git a/spec/System/TestItemParse_spec.lua b/spec/System/TestItemParse_spec.lua index 2429a872ff..80db03147c 100644 --- a/spec/System/TestItemParse_spec.lua +++ b/spec/System/TestItemParse_spec.lua @@ -248,4 +248,24 @@ describe("TestItemParse", function() assert.are.equals(71, item.requirements.intMod) end) + + it("multi-line rune mod", function() + -- Thruldana is Bow-only as well + local item = new("Item", [[ + Test Item + Crude Bow + Quality: 20 + Sockets: S S + Rune: Talisman of Thruldana + Rune: Talisman of Thruldana + Implicits: 2 + {enchant}{rune}50% reduced Poison Duration + {enchant}{rune}Targets can be affected by +2 of your Poisons at the same time + ]]) + item:BuildAndParseRaw() + + assert.are.equals(2, #item.sockets) + assert.are.equals(2, #item.runeModLines) + + end) end) diff --git a/spec/System/TestSocketables_spec.lua b/spec/System/TestSocketables_spec.lua new file mode 100644 index 0000000000..06bb8a815e --- /dev/null +++ b/spec/System/TestSocketables_spec.lua @@ -0,0 +1,128 @@ +describe("TestSocketables", function() + before_each(function() + newBuild() + end) + + it("ModRunes matches Data/Soulcores", function() + local modRunes = LoadModule("../src/Data/ModRunes") + local soulcores = {} + LoadModule("../src/Data/Bases/soulcore", soulcores) + local soulCoreCount = 0 + for name, _ in pairs(soulcores) do + assert.is_not.equals(modRunes[name], nil) + soulCoreCount = soulCoreCount + 1 + end + + local modRunesCount = 0 + for name, _ in pairs(modRunes) do + assert.is_not.equals(soulcores[name], nil) + modRunesCount = modRunesCount + 1 + end + -- Final check that Bases/soulcore has same number of entries as ModRunes + assert.are.equals(modRunesCount, soulCoreCount) + end) + + -- Item Tab display Tests + -- Also checks slot type runes + + local extractNamesFromModRunes = function(slotType) + local modRunes = LoadModule("../src/Data/ModRunes") + local names = { } + for name, rune in pairs(modRunes) do + for runeSlotType, mods in pairs(rune) do + if runeSlotType == slotType then + -- Need to add an entry of the name for each mod line for tests + for _, _ in ipairs(mods) do + table.insert(names, name) + end + end + end + end + return names + end + + local slotTypeTest = function(slotType, itemBase) + -- ConPrintf("Testing: %s", slotType) + local itemRaw = "Test\n" .. itemBase .. "\nSockets: S" + + local modRunes = extractNamesFromModRunes(slotType) + + -- Create an ItemTab and add a socketable item to it + local item = new("Item", itemRaw) + + build.itemsTab:AddItem(item) + build.itemsTab:SetDisplayItem(item) + runCallback("OnFrame") + + -- Extract the proper slot type runes from the list + local itemTabRunes = { } + for _, rune in ipairs(build.itemsTab.controls["displayItemRune1"].list) do + if rune.slot == slotType then + table.insert(itemTabRunes, rune.name) + end + end + -- To keep the test fast, only check that the lengths match + -- This should also catch issues with multi-mod line runes since the rune name will appear + -- for the number of mod lines that the rune has. + assert.are.equals(#itemTabRunes, #modRunes) + end + + -- Note: Except for weapon/armour/caster, + -- "slotType" references the dat file ItemClasses.Id value as this is what dat file SoulCoresPerClass.ItemClass refs + -- Not all item classes have runes yet + it("'Weapon' runes appear in Items tab", slotTypeTest("weapon", "Massive Greathammer")) + + it("'Armour' runes appear in Items tab", slotTypeTest("armour", "Slayer Armour")) + + it("'Caster' runes appear in Items tab", slotTypeTest("caster", "Bone Wand")) + + it("'Body Armour' runes appear in Items tab", slotTypeTest("body armour", "Slayer Armour")) + + it("'Helmets' runes appear in Items tab", slotTypeTest("helmet", "Kamasan Tiara")) + + it("'Gloves' runes appear in Items tab", slotTypeTest("gloves", "Vaal Gloves")) + + it("'Boots' runes appear in Items tab", slotTypeTest("boots", "Vaal Greaves")) + + it("'Shield' runes appear in Items tab", slotTypeTest("shield", "Vaal Tower Shield")) + + it("'Focus' runes appear in Items tab", slotTypeTest("focus", "Hallowed Focus")) + + -- Weapons + it("'Bow' runes appear in Items tab", slotTypeTest("bow", "Gemini Bow")) + + it("'Crossbow' runes appear in Items tab", slotTypeTest("crossbow", "Siege Crossbow")) + + it("'Wand' runes appear in Items tab", slotTypeTest("wand", "Bone Wand")) + + it("'Sceptre' runes appear in Items tab", slotTypeTest("sceptre", "Omen Sceptre")) + + it("'(Caster) Staff' runes appear in Items tab", slotTypeTest("staff", "Voltaic Staff")) + + it("'(Quarterstaff) War Staff' runes appear in Items tab", slotTypeTest("warstaff", "Striking Quarterstaff")) + + it("'Spear' runes appear in Items tab", slotTypeTest("spear", "Flying Spear")) + + it("'One Hand Mace' runes appear in Items tab", slotTypeTest("one hand mace", "Marauding Mace")) + + it("'Two Hand Mace' runes appear in Items tab", slotTypeTest("two hand mace", "Massive Greathammer")) + + -- Not Yet Added + -- it("'One Hand Sword' runes appear in Items tab", slotTypeTest("one hand sword", "")) + + -- it("'Two Hand Sword' runes appear in Items tab", slotTypeTest("two hand sword", "")) + + -- it("'One Hand Axe' runes appear in Items tab", slotTypeTest("one hand axe", "")) + + -- it("'Two Hand Axe' runes appear in Items tab", slotTypeTest("two hand axe", "")) + + -- it("'Flail' runes appear in Items tab", slotTypeTest("flail", "")) + + -- Future note: Once traps are added, verify that GGG stayed with "traptool" + -- it("'Trap' runes appear in Items tab", slotTypeTest("traptool", "")) + + -- it("'Claw' runes appear in Items tab", slotTypeTest("claw", "")) + + -- it("'Dagger' runes appear in Items tab", slotTypeTest("dagger", "")) + +end) \ No newline at end of file diff --git a/src/Classes/Item.lua b/src/Classes/Item.lua index 03a32ab63f..3f77d07265 100644 --- a/src/Classes/Item.lua +++ b/src/Classes/Item.lua @@ -791,7 +791,7 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) end -- this will need more advanced logic for jewel sockets in items to work properly but could just be removed as items like this was only introduced during development. if self.base then - if self.base.weapon or self.base.armour then + if self.base.weapon or self.base.armour or self.base.tags.wand or self.base.tags.staff or self.base.tags.sceptre then local shouldFixRunesOnItem = #self.runes == 0 -- Form a key value table with the following format @@ -799,18 +799,27 @@ function ItemClass:ParseRaw(raw, rarity, highQuality) -- This will be used to more easily grab the relevant runes that combinations will need to be of. -- This could be refactored to only needs to be called once. local statGroupedRunes = { } - local type = self.base.weapon and "weapon" or "armour" -- minor optimisation + local broadItemType = self.base.weapon and "weapon" or (self.base.tags.wand or self.base.tags.staff) and "caster" or "armour" -- minor optimisation + local specificItemType = self.base.type:lower() for runeName, runeMods in pairs(data.itemMods.Runes) do - -- gets the first value in the mod and its stripped line. - local runeValue - local runeStrippedModeLine = runeMods[type][1]:gsub("(%d%.?%d*)", function(val) - runeValue = val - return "#" - end) - if statGroupedRunes[runeStrippedModeLine] == nil then - statGroupedRunes[runeStrippedModeLine] = { } + local addModToGroupedRunes = function (modLine) + local runeValue + local runeStrippedModLine = modLine:gsub("(%d%.?%d*)", function(val) + runeValue = val + return "#" + end) + if statGroupedRunes[runeStrippedModLine] == nil then + statGroupedRunes[runeStrippedModLine] = { } + end + t_insert(statGroupedRunes[runeStrippedModLine], { runeName, runeValue }); + end + for slotType, slotMod in pairs(runeMods) do + if slotType == broadItemType or slotType == specificItemType then + for _, mod in ipairs(slotMod) do + addModToGroupedRunes(mod) + end + end end - t_insert(statGroupedRunes[runeStrippedModeLine], { runeName, runeValue }); end -- Sort table to ensure first entries are always largest. @@ -1192,7 +1201,7 @@ function ItemClass:BuildRaw() if self.quality then t_insert(rawLines, "Quality: " .. self.quality) end - if self.itemSocketCount and self.itemSocketCount > 0 and (self.base.weapon or self.base.armour) then + if self.itemSocketCount and self.itemSocketCount > 0 then local socketString = "" for _ = 1, self.itemSocketCount do socketString = socketString .. "S " @@ -1248,31 +1257,53 @@ end -- Rebuild rune modifiers using the item's runes function ItemClass:UpdateRunes() wipeTable(self.runeModLines) + local getModRunesForTypes = function(runeName, baseType, specificType) + local rune = data.itemMods.Runes[runeName] + local gatheredRuneMods = { } + if rune then + if rune[baseType] then + -- for _, mod in pairs(rune[baseType]) do + t_insert(gatheredRuneMods, rune[baseType]) + -- end + end + if rune[specificType] then + -- for _, mod in pairs(rune[specificType]) do + t_insert(gatheredRuneMods, rune[specificType]) + -- end + end + end + return gatheredRuneMods + end + local statOrder = {} for i = 1, self.itemSocketCount do local name = self.runes[i] if name and name ~= "None" then - local mod = self.base.weapon and data.itemMods.Runes[name].weapon or self.base.armour and data.itemMods.Runes[name].armour or { } - for i, line in ipairs(mod) do - local order = mod.statOrder[i] - if statOrder[order] then - -- Combine stats - local start = 1 - statOrder[order].line = statOrder[order].line:gsub("(%d%.?%d*)", function(num) - local s, e, other = line:find("(%d%.?%d*)", start) - start = e + 1 - return tonumber(num) + tonumber(other) - end) - else - local modLine = { line = line, order = order, rune = true, enchant = true } - for l = 1, #self.runeModLines + 1 do - if not self.runeModLines[l] or self.runeModLines[l].order > order then - t_insert(self.runeModLines, l, modLine) - break + local baseType = self.base.weapon and "weapon" or self.base.armour and "armour" or (self.base.tags.wand or self.base.tags.staff) and "caster" + local specificType = self.base.type:lower() + local gatheredMods = getModRunesForTypes(name, baseType, specificType) + for _, mod in ipairs(gatheredMods) do + for i, modLine in ipairs(mod) do + local order = mod.statOrder[i] + if statOrder[order] then + -- Combine stats + local start = 1 + statOrder[order].line = statOrder[order].line:gsub("(%d%.?%d*)", function(num) + local s, e, other = mod[i]:find("(%d%.?%d*)", start) + start = e + 1 + return tonumber(num) + tonumber(other) + end) + else + local modLine = { line = modLine, order = order, rune = true, enchant = true } + for l = 1, #self.runeModLines + 1 do + if not self.runeModLines[l] or self.runeModLines[l].order > order then + t_insert(self.runeModLines, l, modLine) + break + end end - end - statOrder[order] = modLine - end + statOrder[order] = modLine + end + end end end end diff --git a/src/Classes/ItemsTab.lua b/src/Classes/ItemsTab.lua index cc200e275e..01ecf04a23 100644 --- a/src/Classes/ItemsTab.lua +++ b/src/Classes/ItemsTab.lua @@ -366,11 +366,11 @@ holding Shift will put it in the second.]]) -- Section: Sockets and Links self.controls.displayItemSectionSockets = new("Control", {"TOPLEFT",self.controls.displayItemSectionVariant,"BOTTOMLEFT"}, {0, 0, 0, function() - return self.displayItem and (self.displayItem.base.weapon or self.displayItem.base.armour) and 28 or 0 + return self.displayItem and (self.displayItem.base.weapon or self.displayItem.base.armour or self.displayItem.base.tags.wand or self.displayItem.base.tags.staff or self.displayItem.base.tags.sceptre) and 28 or 0 end}) self.controls.displayItemSocketRune = new("LabelControl", {"TOPLEFT",self.controls.displayItemSectionSockets,"TOPLEFT"}, {0, 0, 36, 20}, "^x7F7F7FS") self.controls.displayItemSocketRune.shown = function() - return self.displayItem.base.weapon or self.displayItem.base.armour + return self.displayItem.base.weapon or self.displayItem.base.armour or self.displayItem.base.tags.wand or self.displayItem.base.tags.staff or self.displayItem.base.tags.sceptre end self.controls.displayItemSocketRuneEdit = new("EditControl", {"LEFT",self.controls.displayItemSocketRune,"RIGHT"}, {2, 0, 50, 20}, nil, nil, "%D", 1, function(buf) if tonumber(buf) > 6 then @@ -501,7 +501,7 @@ holding Shift will put it in the second.]]) -- Section: Rune Selection self.controls.displayItemSectionRune = new("Control", {"TOPLEFT",self.controls.displayItemSectionClusterJewel,"BOTTOMLEFT"}, {0, 0, 0, function() - if not self.displayItem or self.displayItem.itemSocketCount == 0 or not (self.displayItem.base.weapon or self.displayItem.base.armour) then + if not self.displayItem or self.displayItem.itemSocketCount == 0 or not (self.displayItem.base.weapon or self.displayItem.base.armour or self.displayItem.base.tags.wand or self.displayItem.base.tags.staff or self.displayItem.base.tags.sceptre) then return 0 end local h = 6 @@ -534,7 +534,7 @@ holding Shift will put it in the second.]]) end end drop.shown = function() - return self.displayItem and i <= self.displayItem.itemSocketCount and (self.displayItem.base.weapon or self.displayItem.base.armour) + return self.displayItem and i <= self.displayItem.itemSocketCount and (self.displayItem.base.weapon or self.displayItem.base.armour or self.displayItem.base.tags.wand or self.displayItem.base.tags.staff or self.displayItem.base.tags.sceptre) end self.controls["displayItemRune"..i] = drop @@ -1560,28 +1560,42 @@ function ItemsTabClass:UpdateAffixControls() self:UpdateCustomControls() end --- build rune mod list for armour and weapons -local runeArmourModLines = { { name = "None", label = "None", order = -1 } } -local runeWeaponModLines = { { name = "None", label = "None", order = -1 } } -for name, modLines in pairs(data.itemMods.Runes) do - t_insert(runeArmourModLines, { name = name, label = modLines.armour[1], order = modLines.armour.statOrder[1]}) - t_insert(runeWeaponModLines, { name = name, label = modLines.weapon[1], order = modLines.weapon.statOrder[1]}) +local runeModLines = { { name = "None", label = "None", order = -1, slot = "None", group = -1 } } +for name, runeMods in pairs(data.itemMods.Runes) do + -- Some runes have multiple mod lines; insert each as separate entry + for slotType, runeMod in pairs(runeMods) do + for i, mod in ipairs(runeMod) do + t_insert(runeModLines, { name = name, label = mod, order = runeMod.statOrder[1], slot = slotType, group = #runeMod }) + end + end end -table.sort(runeArmourModLines, function(a, b) - return a.order < b.order -end) -table.sort(runeWeaponModLines, function(a, b) - return a.order < b.order +table.sort(runeModLines, function(a, b) + if a.order == b.order then + return a.label < b.label + elseif a.group == b.group then + return a.order < b.order + else + return a.group < b.group + end end) -- Update rune selection controls function ItemsTabClass:UpdateRuneControls() local item = self.displayItem - for i = 1, item.itemSocketCount do - if item.base.armour then - self.controls["displayItemRune"..i].list = runeArmourModLines - elseif item.base.weapon then - self.controls["displayItemRune"..i].list = runeWeaponModLines + -- Build rune selection for item + local runes = { } + for _, rune in pairs(runeModLines) do + if rune.slot == "None" or -- Needed "None" for Items Tab + item.base.type:lower() == rune.slot or + item.base.type == rune.slot or + item.base.weapon and rune.slot == "weapon" or + item.base.armour and rune.slot == "armour" or + (item.base.tags.wand or item.base.tags.staff) and rune.slot == "caster" then + table.insert(runes, rune) end + end + + for i = 1, item.itemSocketCount do + self.controls["displayItemRune"..i].list = runes if item.runes[i] then for j, modLine in ipairs(self.controls["displayItemRune"..i].list) do if item.runes[i] == modLine.name then @@ -1902,7 +1916,7 @@ function ItemsTabClass:CraftItem() else item.quality = nil end - if base.base.socketLimit and (base.base.weapon or base.base.armour) then -- must be a martial weapon/armour + if base.base.socketLimit and (base.base.weapon or base.base.armour or base.base.tags.wand or base.base.tags.staff or base.base.tags.sceptre) then -- must be a martial weapon/armour if #item.sockets == 0 then for i = 1, base.base.socketLimit do t_insert(item.sockets, { group = 0 }) diff --git a/src/Classes/TradeQueryGenerator.lua b/src/Classes/TradeQueryGenerator.lua index e22ea861da..194e761963 100644 --- a/src/Classes/TradeQueryGenerator.lua +++ b/src/Classes/TradeQueryGenerator.lua @@ -416,9 +416,35 @@ function TradeQueryGeneratorClass:InitMods() end -- rune mods - for name, modLines in pairs(data.itemMods.Runes) do - self:ProcessMod(modLines.armour, tradeQueryStatsParsed, regularItemMask, { ["Shield"] = true, ["Chest"] = true, ["Helmet"] = true, ["Gloves"] = true, ["Boots"] = true, ["Focus"] = true }) - self:ProcessMod(modLines.weapon, tradeQueryStatsParsed, regularItemMask, { ["1HWeapon"] = true, ["2HWeapon"] = true, ["1HMace"] = true, ["Claw"] = true, ["Quarterstaff"] = true, ["Bow"] = true, ["2HMace"] = true, ["Crossbow"] = true, ["Spear"] = true, ["Flail"] = true }) + for name, runeMods in pairs(data.itemMods.Runes) do + for slotType, mods in pairs(runeMods) do + if slotType == "weapon" then + self:ProcessMod(mods, tradeQueryStatsParsed, regularItemMask, { ["1HWeapon"] = true, ["2HWeapon"] = true, ["1HMace"] = true, ["Claw"] = true, ["Quarterstaff"] = true, ["Bow"] = true, ["2HMace"] = true, ["Crossbow"] = true, ["Spear"] = true, ["Flail"] = true }) + elseif slotType == "armour" then + self:ProcessMod(mods, tradeQueryStatsParsed, regularItemMask, { ["Shield"] = true, ["Chest"] = true, ["Helmet"] = true, ["Gloves"] = true, ["Boots"] = true, ["Focus"] = true }) + elseif slotType == "caster" then + self:ProcessMod(mods, tradeQueryStatsParsed, regularItemMask, { ["Wand"] = true, ["Staff"] = true }) + else + -- Mod is slot specific, try to match against a value in tradeCategoryNames + local matchedCategory = nil + for category, categoryOptions in pairs(tradeCategoryNames) do + for i, opt in pairs(categoryOptions) do + if opt:lower():match(slotType) then + matchedCategory = category + break + end + end + if matchedCategory then + break + end + end + if matchedCategory then + self:ProcessMod(mods, tradeQueryStatsParsed, regularItemMask, { [matchedCategory] = true }) + else + ConPrintf("TradeQuery: Unmatched category for modifier. Slot type: %s Modifier: %s", mods.slotType, mods.name) + end + end + end end local queryModsFile = io.open(queryModFilePath, 'w') diff --git a/src/Data/Bases/sceptre.lua b/src/Data/Bases/sceptre.lua index ed6946f47d..2e1c7118ef 100644 --- a/src/Data/Bases/sceptre.lua +++ b/src/Data/Bases/sceptre.lua @@ -6,6 +6,7 @@ itemBases["Rattling Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -15,6 +16,7 @@ itemBases["Stoic Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Discipline", implicitModTypes = { }, @@ -24,6 +26,7 @@ itemBases["Lupine Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -33,6 +36,7 @@ itemBases["Omen Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Malice", implicitModTypes = { }, @@ -42,6 +46,7 @@ itemBases["Ochre Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -51,6 +56,7 @@ itemBases["Shrine Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Fire", implicitModTypes = { }, @@ -60,6 +66,7 @@ itemBases["Shrine Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Ice", implicitModTypes = { }, @@ -69,6 +76,7 @@ itemBases["Shrine Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Lightning", implicitModTypes = { }, @@ -78,6 +86,7 @@ itemBases["Devouring Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -87,6 +96,7 @@ itemBases["Clasped Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -96,6 +106,7 @@ itemBases["Devotional Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -105,6 +116,7 @@ itemBases["Wrath Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -114,6 +126,7 @@ itemBases["Aromatic Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -123,6 +136,7 @@ itemBases["Pious Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -132,6 +146,7 @@ itemBases["Hallowed Sceptre"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Skeletal Warrior Minion", implicitModTypes = { }, @@ -143,6 +158,7 @@ itemBases["Shrine Sceptre"] = { quality = 20, spirit = 100, hidden = true, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Fire", implicitModTypes = { }, @@ -153,6 +169,7 @@ itemBases["Shrine Sceptre"] = { quality = 20, spirit = 100, hidden = true, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Ice", implicitModTypes = { }, @@ -163,6 +180,7 @@ itemBases["Shrine Sceptre"] = { quality = 20, spirit = 100, hidden = true, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Lightning", implicitModTypes = { }, @@ -173,6 +191,7 @@ itemBases["Shrine Sceptre (Purity of Fire)"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Fire", implicitModTypes = { }, @@ -182,6 +201,7 @@ itemBases["Shrine Sceptre (Purity of Cold)"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Ice", implicitModTypes = { }, @@ -191,6 +211,7 @@ itemBases["Shrine Sceptre (Purity of Lighting)"] = { type = "Sceptre", quality = 20, spirit = 100, + socketLimit = 2, tags = { default = true, onehand = true, sceptre = true, }, implicit = "Grants Skill: Level (1-20) Purity of Lightning", implicitModTypes = { }, diff --git a/src/Data/Bases/soulcore.lua b/src/Data/Bases/soulcore.lua index 6ae4987823..4668d84b47 100644 --- a/src/Data/Bases/soulcore.lua +++ b/src/Data/Bases/soulcore.lua @@ -2,12 +2,132 @@ -- Item data (c) Grinding Gear Games local itemBases = ... +itemBases["Hayoxi's Soul Core of Heatproofing"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: 20% of Armour also applies to Cold Damage taken from Hits", + req = { level = 65, }, +} +itemBases["Zalatl's Soul Core of Insulation"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: 20% of Armour also applies to Lightning Damage taken from Hits", + req = { level = 65, }, +} +itemBases["Topotante's Soul Core of Dampening"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: 20% of Armour also applies to Fire Damage taken from Hits", + req = { level = 65, }, +} +itemBases["Atmohua's Soul Core of Retreat"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: 30% faster start of Energy Shield Recharge", + req = { level = 65, }, +} +itemBases["Quipolatl's Soul Core of Flow"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: 8% increased Skill Effect Duration\n8% increased Cooldown Recovery Rate", + req = { level = 65, }, +} +itemBases["Tzamoto's Soul Core of Ferocity"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: +4 to Maximum Rage", + req = { level = 65, }, +} +itemBases["Uromoti's Soul Core of Attenuation"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Boots: 15% increased Curse Duration\n15% increased Poison Duration", + req = { level = 65, }, +} +itemBases["Opiloti's Soul Core of Assault"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: 50% chance when you gain a Frenzy Charge to gain an additional Frenzy Charge\nCaster: 50% chance when you gain a Frenzy Charge to gain an additional Frenzy Charge", + req = { level = 65, }, +} +itemBases["Guatelitzi's Soul Core of Endurance"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: 50% chance when you gain an Endurance Charge to gain an additional Endurance Charge\nCaster: 50% chance when you gain an Endurance Charge to gain an additional Endurance Charge", + req = { level = 65, }, +} +itemBases["Xopec's Soul Core of Power"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: 50% chance when you gain a Power Charge to gain an additional Power Charge\nCaster: 50% chance when you gain a Power Charge to gain an additional Power Charge", + req = { level = 65, }, +} +itemBases["Estazunti's Soul Core of Convalescence"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Boots: 10% increased speed of Recoup Effects", + req = { level = 65, }, +} +itemBases["Tacati's Soul Core of Affliction"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: Enemies you Curse have -4% to Chaos Resistance", + req = { level = 65, }, +} +itemBases["Cholotl's Soul Core of War"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Bow: 20% increased Projectile Speed", + req = { level = 65, }, +} +itemBases["Citaqualotl's Soul Core of Foulness"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: Adds 13 to 19 Chaos damage", + req = { level = 65, }, +} +itemBases["Xipocado's Soul Core of Dominion"] = { + type = "SoulCore", + hidden = true, + tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + implicitModTypes = { }, + implicit = "Caster: Minions deal 40% increased Damage with Command Skills\nSceptre: Minions deal 40% increased Damage with Command Skills", + req = { level = 65, }, +} itemBases["Soul Core of Tacati"] = { type = "SoulCore", hidden = true, tags = { soul_core = true, soul_core_tier1 = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: 15% chance to Poison on Hit with this weapon\nArmour: +7% to Chaos Resistance", + implicit = "Martial Weapons: 15% chance to Poison on Hit with this weapon\nArmour: +11% to Chaos Resistance", req = { level = 35, }, } itemBases["Soul Core of Opiloti"] = { @@ -45,7 +165,7 @@ itemBases["Soul Core of Citaqualotl"] = { itemBases["Soul Core of Puhuarte"] = { type = "SoulCore", hidden = true, - tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + tags = { soul_core = true, soul_core_tier2 = true, default = true, }, implicitModTypes = { }, implicit = "Martial Weapons: 30% increased chance to Ignite\nArmour: +1% to Maximum Fire Resistance", req = { level = 35, }, @@ -53,7 +173,7 @@ itemBases["Soul Core of Puhuarte"] = { itemBases["Soul Core of Tzamoto"] = { type = "SoulCore", hidden = true, - tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + tags = { soul_core = true, soul_core_tier2 = true, default = true, }, implicitModTypes = { }, implicit = "Martial Weapons: 20% increased Freeze Buildup\nArmour: +1% to Maximum Cold Resistance", req = { level = 35, }, @@ -61,7 +181,7 @@ itemBases["Soul Core of Tzamoto"] = { itemBases["Soul Core of Xopec"] = { type = "SoulCore", hidden = true, - tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + tags = { soul_core = true, soul_core_tier2 = true, default = true, }, implicitModTypes = { }, implicit = "Martial Weapons: 30% increased chance to Shock\nArmour: +1% to Maximum Lightning Resistance", req = { level = 35, }, @@ -69,7 +189,7 @@ itemBases["Soul Core of Xopec"] = { itemBases["Soul Core of Azcapa"] = { type = "SoulCore", hidden = true, - tags = { soul_core = true, soul_core_tier3 = true, default = true, }, + tags = { soul_core = true, soul_core_tier2 = true, default = true, }, implicitModTypes = { }, implicit = "Martial Weapons: +15 to Spirit\nArmour: 5% increased Quantity of Gold Dropped by Slain Enemies", req = { level = 35, }, @@ -128,7 +248,7 @@ itemBases["Desert Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 7 to 11 Fire Damage\nArmour: +12% to Fire Resistance", + implicit = "Martial Weapons: Adds 7 to 11 Fire Damage\nArmour: +12% to Fire Resistance\nCaster: Gain 10% of Damage as Extra Fire Damage", req = { level = 31, }, } itemBases["Glacial Rune"] = { @@ -136,7 +256,7 @@ itemBases["Glacial Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 6 to 10 Cold Damage\nArmour: +12% to Cold Resistance", + implicit = "Martial Weapons: Adds 6 to 10 Cold Damage\nArmour: +12% to Cold Resistance\nCaster: Gain 10% of Damage as Extra Cold Damage", req = { level = 31, }, } itemBases["Storm Rune"] = { @@ -144,7 +264,7 @@ itemBases["Storm Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 1 to 20 Lightning Damage\nArmour: +12% to Lightning Resistance", + implicit = "Martial Weapons: Adds 1 to 20 Lightning Damage\nArmour: +12% to Lightning Resistance\nCaster: Gain 10% of Damage as Extra Lightning Damage", req = { level = 31, }, } itemBases["Iron Rune"] = { @@ -152,7 +272,7 @@ itemBases["Iron Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: 20% increased Physical Damage\nArmour: 20% increased Armour, Evasion and Energy Shield", + implicit = "Martial Weapons: 20% increased Physical Damage\nArmour: 20% increased Armour, Evasion and Energy Shield\nCaster: 25% increased Spell Damage", req = { level = 31, }, } itemBases["Body Rune"] = { @@ -160,7 +280,7 @@ itemBases["Body Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Leeches 2.5% of Physical Damage as Life\nArmour: +30 to maximum Life", + implicit = "Martial Weapons: Leeches 2.5% of Physical Damage as Life\nArmour: +30 to maximum Life\nCaster: +30 to maximum Energy Shield", req = { level = 37, }, } itemBases["Mind Rune"] = { @@ -168,7 +288,7 @@ itemBases["Mind Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Leeches 2% of Physical Damage as Mana\nArmour: +25 to maximum Mana", + implicit = "Martial Weapons: Leeches 2% of Physical Damage as Mana\nArmour: +25 to maximum Mana\nCaster: +30 to maximum Mana", req = { level = 37, }, } itemBases["Rebirth Rune"] = { @@ -176,7 +296,7 @@ itemBases["Rebirth Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Gain 20 Life per Enemy Killed\nArmour: Regenerate 0.3% of maximum Life per second", + implicit = "Martial Weapons: Gain 20 Life per Enemy Killed\nArmour: Regenerate 0.3% of maximum Life per second\nCaster: 15% increased Energy Shield Recharge Rate", req = { level = 45, }, } itemBases["Inspiration Rune"] = { @@ -184,7 +304,7 @@ itemBases["Inspiration Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Gain 16 Mana per Enemy Killed\nArmour: 15% increased Mana Regeneration Rate", + implicit = "Martial Weapons: Gain 16 Mana per Enemy Killed\nArmour: 15% increased Mana Regeneration Rate\nCaster: 20% increased Mana Regeneration Rate", req = { level = 45, }, } itemBases["Stone Rune"] = { @@ -192,7 +312,7 @@ itemBases["Stone Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Causes 25% increased Stun Buildup\nArmour: +40 to Stun Threshold", + implicit = "Martial Weapons: Causes 25% increased Stun Buildup\nArmour: +40 to Stun Threshold\nCaster: Gain additional Stun Threshold equal to 12% of maximum Energy Shield", req = { level = 41, }, } itemBases["Vision Rune"] = { @@ -200,7 +320,7 @@ itemBases["Vision Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +80 to Accuracy Rating\nArmour: 10% increased Life and Mana Recovery from Flasks", + implicit = "Martial Weapons: +80 to Accuracy Rating\nArmour: 10% increased Life and Mana Recovery from Flasks\nCaster: 20% increased Critical Hit Chance for Spells", req = { level = 41, }, } itemBases["Lesser Desert Rune"] = { @@ -208,7 +328,7 @@ itemBases["Lesser Desert Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 4 to 6 Fire Damage\nArmour: +10% to Fire Resistance", + implicit = "Martial Weapons: Adds 4 to 6 Fire Damage\nArmour: +10% to Fire Resistance\nCaster: Gain 8% of Damage as Extra Fire Damage", req = { level = 5, }, } itemBases["Lesser Glacial Rune"] = { @@ -216,7 +336,7 @@ itemBases["Lesser Glacial Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 3 to 5 Cold Damage\nArmour: +10% to Cold Resistance", + implicit = "Martial Weapons: Adds 3 to 5 Cold Damage\nArmour: +10% to Cold Resistance\nCaster: Gain 8% of Damage as Extra Cold Damage", req = { level = 5, }, } itemBases["Lesser Storm Rune"] = { @@ -224,7 +344,7 @@ itemBases["Lesser Storm Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 1 to 10 Lightning Damage\nArmour: +10% to Lightning Resistance", + implicit = "Martial Weapons: Adds 1 to 10 Lightning Damage\nArmour: +10% to Lightning Resistance\nCaster: Gain 8% of Damage as Extra Lightning Damage", req = { level = 5, }, } itemBases["Lesser Iron Rune"] = { @@ -232,7 +352,7 @@ itemBases["Lesser Iron Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: 15% increased Physical Damage\nArmour: 15% increased Armour, Evasion and Energy Shield", + implicit = "Martial Weapons: 15% increased Physical Damage\nArmour: 15% increased Armour, Evasion and Energy Shield\nCaster: 20% increased Spell Damage", req = { level = 5, }, } itemBases["Lesser Body Rune"] = { @@ -240,7 +360,7 @@ itemBases["Lesser Body Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Leeches 2% of Physical Damage as Life\nArmour: +20 to maximum Life", + implicit = "Martial Weapons: Leeches 2% of Physical Damage as Life\nArmour: +20 to maximum Life\nCaster: +25 to maximum Energy Shield", req = { level = 11, }, } itemBases["Lesser Mind Rune"] = { @@ -248,7 +368,7 @@ itemBases["Lesser Mind Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Leeches 1.5% of Physical Damage as Mana\nArmour: +15 to maximum Mana", + implicit = "Martial Weapons: Leeches 1.5% of Physical Damage as Mana\nArmour: +15 to maximum Mana\nCaster: +25 to maximum Mana", req = { level = 11, }, } itemBases["Lesser Rebirth Rune"] = { @@ -256,7 +376,7 @@ itemBases["Lesser Rebirth Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Gain 10 Life per Enemy Killed\nArmour: Regenerate 0.25% of maximum Life per second", + implicit = "Martial Weapons: Gain 10 Life per Enemy Killed\nArmour: Regenerate 0.25% of maximum Life per second\nCaster: 12% increased Energy Shield Recharge Rate", req = { level = 21, }, } itemBases["Lesser Inspiration Rune"] = { @@ -264,7 +384,7 @@ itemBases["Lesser Inspiration Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Gain 8 Mana per Enemy Killed\nArmour: 12% increased Mana Regeneration Rate", + implicit = "Martial Weapons: Gain 8 Mana per Enemy Killed\nArmour: 12% increased Mana Regeneration Rate\nCaster: 16% increased Mana Regeneration Rate", req = { level = 21, }, } itemBases["Lesser Stone Rune"] = { @@ -272,7 +392,7 @@ itemBases["Lesser Stone Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Causes 20% increased Stun Buildup\nArmour: +30 to Stun Threshold", + implicit = "Martial Weapons: Causes 20% increased Stun Buildup\nArmour: +30 to Stun Threshold\nCaster: Gain additional Stun Threshold equal to 10% of maximum Energy Shield", req = { level = 16, }, } itemBases["Lesser Vision Rune"] = { @@ -280,7 +400,7 @@ itemBases["Lesser Vision Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +50 to Accuracy Rating\nArmour: 8% increased Life and Mana Recovery from Flasks", + implicit = "Martial Weapons: +50 to Accuracy Rating\nArmour: 8% increased Life and Mana Recovery from Flasks\nCaster: 16% increased Critical Hit Chance for Spells", req = { level = 16, }, } itemBases["Greater Desert Rune"] = { @@ -288,7 +408,7 @@ itemBases["Greater Desert Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 13 to 16 Fire Damage\nArmour: +14% to Fire Resistance", + implicit = "Martial Weapons: Adds 13 to 16 Fire Damage\nArmour: +14% to Fire Resistance\nCaster: Gain 12% of Damage as Extra Fire Damage", req = { level = 52, }, } itemBases["Greater Glacial Rune"] = { @@ -296,7 +416,7 @@ itemBases["Greater Glacial Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 9 to 15 Cold Damage\nArmour: +14% to Cold Resistance", + implicit = "Martial Weapons: Adds 9 to 15 Cold Damage\nArmour: +14% to Cold Resistance\nCaster: Gain 12% of Damage as Extra Cold Damage", req = { level = 52, }, } itemBases["Greater Storm Rune"] = { @@ -304,7 +424,7 @@ itemBases["Greater Storm Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Adds 1 to 30 Lightning Damage\nArmour: +14% to Lightning Resistance", + implicit = "Martial Weapons: Adds 1 to 30 Lightning Damage\nArmour: +14% to Lightning Resistance\nCaster: Gain 12% of Damage as Extra Lightning Damage", req = { level = 52, }, } itemBases["Greater Iron Rune"] = { @@ -312,7 +432,7 @@ itemBases["Greater Iron Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: 25% increased Physical Damage\nArmour: 25% increased Armour, Evasion and Energy Shield", + implicit = "Martial Weapons: 25% increased Physical Damage\nArmour: 25% increased Armour, Evasion and Energy Shield\nCaster: 30% increased Spell Damage", req = { level = 52, }, } itemBases["Greater Body Rune"] = { @@ -320,7 +440,7 @@ itemBases["Greater Body Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Leeches 3% of Physical Damage as Life\nArmour: +40 to maximum Life", + implicit = "Martial Weapons: Leeches 3% of Physical Damage as Life\nArmour: +40 to maximum Life\nCaster: +35 to maximum Energy Shield", req = { level = 57, }, } itemBases["Greater Mind Rune"] = { @@ -328,7 +448,7 @@ itemBases["Greater Mind Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Leeches 2.5% of Physical Damage as Mana\nArmour: +35 to maximum Mana", + implicit = "Martial Weapons: Leeches 2.5% of Physical Damage as Mana\nArmour: +35 to maximum Mana\nCaster: +35 to maximum Mana", req = { level = 57, }, } itemBases["Greater Rebirth Rune"] = { @@ -336,7 +456,7 @@ itemBases["Greater Rebirth Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Gain 30 Life per Enemy Killed\nArmour: Regenerate 0.35% of maximum Life per second", + implicit = "Martial Weapons: Gain 30 Life per Enemy Killed\nArmour: Regenerate 0.35% of maximum Life per second\nCaster: 18% increased Energy Shield Recharge Rate", req = { level = 62, }, } itemBases["Greater Inspiration Rune"] = { @@ -344,7 +464,7 @@ itemBases["Greater Inspiration Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Gain 24 Mana per Enemy Killed\nArmour: 18% increased Mana Regeneration Rate", + implicit = "Martial Weapons: Gain 24 Mana per Enemy Killed\nArmour: 18% increased Mana Regeneration Rate\nCaster: 24% increased Mana Regeneration Rate", req = { level = 62, }, } itemBases["Greater Stone Rune"] = { @@ -352,7 +472,7 @@ itemBases["Greater Stone Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: Causes 30% increased Stun Buildup\nArmour: +50 to Stun Threshold", + implicit = "Martial Weapons: Causes 30% increased Stun Buildup\nArmour: +50 to Stun Threshold\nCaster: Gain additional Stun Threshold equal to 14% of maximum Energy Shield", req = { level = 59, }, } itemBases["Greater Vision Rune"] = { @@ -360,7 +480,7 @@ itemBases["Greater Vision Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +110 to Accuracy Rating\nArmour: 12% increased Life and Mana Recovery from Flasks", + implicit = "Martial Weapons: +110 to Accuracy Rating\nArmour: 12% increased Life and Mana Recovery from Flasks\nCaster: 24% increased Critical Hit Chance for Spells", req = { level = 59, }, } itemBases["Lesser Robust Rune"] = { @@ -368,7 +488,7 @@ itemBases["Lesser Robust Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +6 to Strength\nArmour: +6 to Strength", + implicit = "Martial Weapons: +6 to Strength\nArmour: +6 to Strength\nCaster: +6 to Strength\nSceptre: +6 to Strength", req = { level = 5, }, } itemBases["Robust Rune"] = { @@ -376,7 +496,7 @@ itemBases["Robust Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +8 to Strength\nArmour: +8 to Strength", + implicit = "Martial Weapons: +8 to Strength\nArmour: +8 to Strength\nCaster: +8 to Strength\nSceptre: +8 to Strength", req = { level = 31, }, } itemBases["Greater Robust Rune"] = { @@ -384,7 +504,7 @@ itemBases["Greater Robust Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +10 to Strength\nArmour: +10 to Strength", + implicit = "Martial Weapons: +10 to Strength\nArmour: +10 to Strength\nCaster: +10 to Strength\nSceptre: +10 to Strength", req = { level = 52, }, } itemBases["Lesser Adept Rune"] = { @@ -392,7 +512,7 @@ itemBases["Lesser Adept Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +5 to Dexterity\nArmour: +6 to Dexterity", + implicit = "Martial Weapons: +6 to Dexterity\nArmour: +6 to Dexterity\nCaster: +6 to Dexterity\nSceptre: +6 to Dexterity", req = { level = 5, }, } itemBases["Adept Rune"] = { @@ -400,7 +520,7 @@ itemBases["Adept Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +8 to Dexterity\nArmour: +8 to Dexterity", + implicit = "Martial Weapons: +8 to Dexterity\nArmour: +8 to Dexterity\nCaster: +8 to Dexterity\nSceptre: +8 to Dexterity", req = { level = 31, }, } itemBases["Greater Adept Rune"] = { @@ -408,7 +528,7 @@ itemBases["Greater Adept Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +10 to Dexterity\nArmour: +10 to Dexterity", + implicit = "Martial Weapons: +10 to Dexterity\nArmour: +10 to Dexterity\nCaster: +10 to Dexterity\nSceptre: +10 to Dexterity", req = { level = 52, }, } itemBases["Lesser Resolve Rune"] = { @@ -416,7 +536,7 @@ itemBases["Lesser Resolve Rune"] = { hidden = true, tags = { rune_lesser = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +6 to Intelligence\nArmour: +6 to Intelligence", + implicit = "Martial Weapons: +6 to Intelligence\nArmour: +6 to Intelligence\nCaster: +6 to Intelligence\nSceptre: +6 to Intelligence", req = { level = 5, }, } itemBases["Resolve Rune"] = { @@ -424,7 +544,7 @@ itemBases["Resolve Rune"] = { hidden = true, tags = { rune_normal = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +8 to Intelligence\nArmour: +8 to Intelligence", + implicit = "Martial Weapons: +8 to Intelligence\nArmour: +8 to Intelligence\nCaster: +8 to Intelligence\nSceptre: +8 to Intelligence", req = { level = 31, }, } itemBases["Greater Resolve Rune"] = { @@ -432,7 +552,7 @@ itemBases["Greater Resolve Rune"] = { hidden = true, tags = { rune_greater = true, default = true, }, implicitModTypes = { }, - implicit = "Martial Weapons: +10 to Intelligence\nArmour: +10 to Intelligence", + implicit = "Martial Weapons: +10 to Intelligence\nArmour: +10 to Intelligence\nCaster: +10 to Intelligence\nSceptre: +10 to Intelligence", req = { level = 52, }, } itemBases["Lesser Tempered Rune"] = { @@ -461,7 +581,6 @@ itemBases["Greater Tempered Rune"] = { } itemBases["Greater Rune of Leadership"] = { type = "Rune", - hidden = true, tags = { default = true, }, implicitModTypes = { }, implicit = "Martial Weapons: Minions gain 10% of their Physical Damage as Extra Lightning Damage\nArmour: Minions take 10% of Physical Damage as Lightning Damage", @@ -469,7 +588,6 @@ itemBases["Greater Rune of Leadership"] = { } itemBases["Greater Rune of Tithing"] = { type = "Rune", - hidden = true, tags = { default = true, }, implicitModTypes = { }, implicit = "Martial Weapons: Meta Skills gain 10% increased Energy\nArmour: 1 to 100 Lightning Thorns damage", @@ -477,7 +595,6 @@ itemBases["Greater Rune of Tithing"] = { } itemBases["Greater Rune of Alacrity"] = { type = "Rune", - hidden = true, tags = { default = true, }, implicitModTypes = { }, implicit = "Martial Weapons: 8% increased Skill Speed\nArmour: Debuffs on you expire 8% faster", @@ -485,9 +602,282 @@ itemBases["Greater Rune of Alacrity"] = { } itemBases["Greater Rune of Nobility"] = { type = "Rune", - hidden = true, tags = { default = true, }, implicitModTypes = { }, implicit = "Martial Weapons: Attacks with this Weapon have 10% chance to inflict Lightning Exposure\nArmour: 10% reduced effect of Shock on you", req = { level = 65, }, } +itemBases["Hedgewitch Assandra's Rune of Wisdom"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Caster: +1 to Level of all Spell Skills", + req = { level = 65, }, +} +itemBases["Saqawal's Rune of the Sky"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: Gain 6% of Damage as Extra Damage of all Elements\nCaster: Gain 6% of Damage as Extra Damage of all Elements", + req = { level = 65, }, +} +itemBases["Fenumus' Rune of Agony"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: Gain 13% of Damage as Extra Chaos Damage\nCaster: Gain 13% of Damage as Extra Chaos Damage", + req = { level = 65, }, +} +itemBases["Farrul's Rune of Grace"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Boots: 6% reduced Movement Speed Penalty from using Skills while moving", + req = { level = 65, }, +} +itemBases["Farrul's Rune of the Chase"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Boots: 5% increased Movement Speed", + req = { level = 65, }, +} +itemBases["Craiceann's Rune of Warding"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: 40% reduced effect of Curses on you", + req = { level = 65, }, +} +itemBases["Saqawal's Rune of Memory"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Helmet: 2% increased Experience gain", + req = { level = 65, }, +} +itemBases["Saqawal's Rune of Erosion"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Helmet: 20% increased Exposure Effect", + req = { level = 65, }, +} +itemBases["Farrul's Rune of the Hunt"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: 50% increased Attack Damage against Rare or Unique Enemies", + req = { level = 65, }, +} +itemBases["Craiceann's Rune of Recovery"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: 50% increased Energy Shield Recharge Rate", + req = { level = 65, }, +} +itemBases["Courtesan Mannan's Rune of Cruelty"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Gloves: 15% increased Magnitude of Damaging Ailments you inflict", + req = { level = 65, }, +} +itemBases["Thane Grannell's Rune of Mastery"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Gloves: 20% increased Magnitude of Non-Damaging Ailments you inflict", + req = { level = 65, }, +} +itemBases["Fenumus' Rune of Spinning"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Gloves: 8% increased Cast Speed", + req = { level = 65, }, +} +itemBases["Countess Seske's Rune of Archery"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Bow: Bow Attacks fire an additional Arrow", + req = { level = 65, }, +} +itemBases["Thane Girt's Rune of Wildness"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Caster: 25% chance for Spell Skills to fire 2 additional Projectiles", + req = { level = 65, }, +} +itemBases["Fenumus' Rune of Draining"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Gloves: 20% increased Effect of Withered", + req = { level = 65, }, +} +itemBases["Thane Myrk's Rune of Summer"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: Adds 23 to 34 Fire Damage", + req = { level = 65, }, +} +itemBases["Lady Hestra's Rune of Winter"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: Adds 19 to 28 Cold Damage", + req = { level = 65, }, +} +itemBases["Thane Leld's Rune of Spring"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: Adds 1 to 60 Lightning Damage", + req = { level = 65, }, +} +itemBases["The Greatwolf's Rune of Claws"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Gloves: Adds 5 to 12 Physical Damage to Attacks", + req = { level = 65, }, +} +itemBases["The Greatwolf's Rune of Willpower"] = { + type = "Rune", + tags = { default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: 10% of Damage is taken from Mana before Life", + req = { level = 65, }, +} + +itemBases["Talisman of Sirrius"] = { + type = "Talisman", + tags = { vivid_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Gloves: 8% increased Attack Speed", + req = { }, +} +itemBases["Talisman of Thruldana"] = { + type = "Talisman", + tags = { primal_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Martial Weapons: 25% reduced Poison Duration\nTargets can be affected by +1 of your Poisons at the same time", + req = { }, +} +itemBases["Talisman of Grold"] = { + type = "Talisman", + tags = { wild_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Gloves: Skills which Empower an Attack have 15% chance to not count that Attack", + req = { }, +} +itemBases["Talisman of Eeshta"] = { + type = "Talisman", + tags = { primal_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: 6% reduced Cost of Skills", + req = { }, +} +itemBases["Talisman of Egrin"] = { + type = "Talisman", + tags = { vivid_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: Enemies you Curse take 5% increased Damage", + req = { }, +} +itemBases["Talisman of Maxarius"] = { + type = "Talisman", + tags = { vivid_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: +1 Charm Slot", + req = { }, +} +itemBases["Talisman of Ralakesh"] = { + type = "Talisman", + tags = { primal_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: Minions have 5% reduced Reservation", + req = { }, +} +itemBases["Serpent Talisman"] = { + type = "Talisman", + tags = { primal_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Gloves: 5% increased Curse Magnitudes", + req = { }, +} +itemBases["Primate Talisman"] = { + type = "Talisman", + tags = { primal_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: Minions have 12% increased maximum Life", + req = { }, +} +itemBases["Owl Talisman"] = { + type = "Talisman", + tags = { primal_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Boots: 5% increased Cooldown Recovery Rate", + req = { }, +} +itemBases["Cat Talisman"] = { + type = "Talisman", + tags = { vivid_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Boots: Hits against you have 15% reduced Critical Damage Bonus", + req = { }, +} +itemBases["Wolf Talisman"] = { + type = "Talisman", + tags = { vivid_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Gloves: 10% increased Magnitude of Bleeding you inflict", + req = { }, +} +itemBases["Stag Talisman"] = { + type = "Talisman", + tags = { vivid_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: 8% increased Exposure Effect", + req = { }, +} +itemBases["Boar Talisman"] = { + type = "Talisman", + tags = { wild_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Gloves: Gain 1 Rage on Melee Hit", + req = { }, +} +itemBases["Bear Talisman"] = { + type = "Talisman", + tags = { wild_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Helmet: 8% increased Area of Effect", + req = { }, +} +itemBases["Ox Talisman"] = { + type = "Talisman", + tags = { wild_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Boots: 20% increased Presence Area of Effect", + req = { }, +} +itemBases["Rabbit Talisman"] = { + type = "Talisman", + tags = { sacred_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: 8% increased Rarity of Items found", + req = { }, +} +itemBases["Fox Talisman"] = { + type = "Talisman", + tags = { sacred_talisman = true, default = true, }, + implicitModTypes = { }, + implicit = "Body Armour: +2% to Quality of all Skills", + req = { }, +} diff --git a/src/Data/Bases/staff.lua b/src/Data/Bases/staff.lua index 1449dfbe74..58961eefe6 100644 --- a/src/Data/Bases/staff.lua +++ b/src/Data/Bases/staff.lua @@ -5,6 +5,7 @@ local itemBases = ... itemBases["Ashen Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { no_physical_spell_mods = true, no_lightning_spell_mods = true, no_cold_spell_mods = true, no_chaos_spell_mods = true, staff = true, twohand = true, default = true, }, implicit = "Grants Skill: Level (1-20) Firebolt", implicitModTypes = { }, @@ -13,6 +14,7 @@ itemBases["Ashen Staff"] = { itemBases["Gelid Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { no_fire_spell_mods = true, no_lightning_spell_mods = true, staff = true, no_physical_spell_mods = true, no_chaos_spell_mods = true, twohand = true, default = true, }, implicit = "Grants Skill: Level (1-20) Freezing Shards", implicitModTypes = { }, @@ -21,6 +23,7 @@ itemBases["Gelid Staff"] = { itemBases["Voltaic Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { no_fire_spell_mods = true, no_physical_spell_mods = true, staff = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, twohand = true, default = true, }, implicit = "Grants Skill: Level (1-20) Lightning Bolt", implicitModTypes = { }, @@ -29,6 +32,7 @@ itemBases["Voltaic Staff"] = { itemBases["Spriggan Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { default = true, twohand = true, staff = true, }, implicit = "Grants Skill: Level (1-20) Firebolt", implicitModTypes = { }, @@ -37,6 +41,7 @@ itemBases["Spriggan Staff"] = { itemBases["Pyrophyte Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { no_physical_spell_mods = true, no_lightning_spell_mods = true, no_cold_spell_mods = true, no_chaos_spell_mods = true, staff = true, twohand = true, default = true, }, implicit = "Grants Skill: Level (1-20) Living Bomb", implicitModTypes = { }, @@ -45,6 +50,7 @@ itemBases["Pyrophyte Staff"] = { itemBases["Chiming Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { default = true, twohand = true, staff = true, }, implicit = "Grants Skill: Level (1-20) Sigil of Power", implicitModTypes = { }, @@ -53,6 +59,7 @@ itemBases["Chiming Staff"] = { itemBases["Rending Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { no_fire_spell_mods = true, no_lightning_spell_mods = true, staff = true, no_physical_spell_mods = true, no_cold_spell_mods = true, twohand = true, default = true, }, implicit = "Grants Skill: Level (1-20) Soulrend", implicitModTypes = { }, @@ -61,6 +68,7 @@ itemBases["Rending Staff"] = { itemBases["Reaping Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { no_fire_spell_mods = true, no_lightning_spell_mods = true, staff = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, twohand = true, default = true, }, implicit = "Grants Skill: Level (1-20) Reap", implicitModTypes = { }, @@ -69,6 +77,7 @@ itemBases["Reaping Staff"] = { itemBases["Icicle Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { no_fire_spell_mods = true, no_lightning_spell_mods = true, staff = true, no_physical_spell_mods = true, no_chaos_spell_mods = true, twohand = true, default = true, }, implicit = "Grants Skill: Level (1-20) Firebolt", implicitModTypes = { }, @@ -77,6 +86,7 @@ itemBases["Icicle Staff"] = { itemBases["Roaring Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { default = true, twohand = true, staff = true, }, implicit = "Grants Skill: Level (1-20) Unleash", implicitModTypes = { }, @@ -85,6 +95,7 @@ itemBases["Roaring Staff"] = { itemBases["Paralysing Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { no_fire_spell_mods = true, no_physical_spell_mods = true, staff = true, no_chaos_spell_mods = true, no_cold_spell_mods = true, twohand = true, default = true, }, implicit = "Grants Skill: Level (1-20) Shock Nova", implicitModTypes = { }, @@ -93,6 +104,7 @@ itemBases["Paralysing Staff"] = { itemBases["Cleric Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { default = true, twohand = true, staff = true, }, implicit = "Grants Skill: Level (1-20) Consecrate", implicitModTypes = { }, @@ -101,6 +113,7 @@ itemBases["Cleric Staff"] = { itemBases["Dark Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { default = true, twohand = true, staff = true, }, implicit = "Grants Skill: Level (1-20) Dark Pact", implicitModTypes = { }, @@ -109,6 +122,7 @@ itemBases["Dark Staff"] = { itemBases["Permafrost Staff"] = { type = "Staff", quality = 20, + socketLimit = 3, tags = { default = true, twohand = true, staff = true, }, implicit = "Grants Skill: Level (1-20) Heart of Ice", implicitModTypes = { }, diff --git a/src/Data/Bases/wand.lua b/src/Data/Bases/wand.lua index 6b8058e3c4..8ad7a63a7c 100644 --- a/src/Data/Bases/wand.lua +++ b/src/Data/Bases/wand.lua @@ -5,6 +5,7 @@ local itemBases = ... itemBases["Withered Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { no_fire_spell_mods = true, onehand = true, wand = true, no_cold_spell_mods = true, no_lightning_spell_mods = true, no_physical_spell_mods = true, default = true, }, implicit = "Grants Skill: Level (1-20) Chaos Bolt", implicitModTypes = { }, @@ -13,6 +14,7 @@ itemBases["Withered Wand"] = { itemBases["Bone Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { no_fire_spell_mods = true, onehand = true, wand = true, no_cold_spell_mods = true, no_lightning_spell_mods = true, no_chaos_spell_mods = true, default = true, }, implicit = "Grants Skill: Level (1-20) Bone Blast", implicitModTypes = { }, @@ -21,6 +23,7 @@ itemBases["Bone Wand"] = { itemBases["Attuned Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Mana Drain", implicitModTypes = { }, @@ -29,6 +32,7 @@ itemBases["Attuned Wand"] = { itemBases["Siphoning Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Power Siphon", implicitModTypes = { }, @@ -37,6 +41,7 @@ itemBases["Siphoning Wand"] = { itemBases["Volatile Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { no_physical_spell_mods = true, onehand = true, no_cold_spell_mods = true, wand = true, no_lightning_spell_mods = true, no_chaos_spell_mods = true, default = true, }, implicit = "Grants Skill: Level (1-20) Volatile Dead", implicitModTypes = { }, @@ -45,6 +50,7 @@ itemBases["Volatile Wand"] = { itemBases["Galvanic Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { no_fire_spell_mods = true, onehand = true, wand = true, no_physical_spell_mods = true, no_cold_spell_mods = true, no_chaos_spell_mods = true, default = true, }, implicit = "Grants Skill: Level (1-20) Galvanic Field", implicitModTypes = { }, @@ -53,6 +59,7 @@ itemBases["Galvanic Wand"] = { itemBases["Acrid Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Decompose", implicitModTypes = { }, @@ -61,6 +68,7 @@ itemBases["Acrid Wand"] = { itemBases["Offering Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { no_fire_spell_mods = true, onehand = true, wand = true, no_cold_spell_mods = true, no_lightning_spell_mods = true, no_chaos_spell_mods = true, default = true, }, implicit = "Grants Skill: Level (1-20) Exsanguinate", implicitModTypes = { }, @@ -69,6 +77,7 @@ itemBases["Offering Wand"] = { itemBases["Frigid Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { no_fire_spell_mods = true, onehand = true, wand = true, no_physical_spell_mods = true, no_lightning_spell_mods = true, no_chaos_spell_mods = true, default = true, }, implicit = "Grants Skill: Level (1-20) Chaos Bolt", implicitModTypes = { }, @@ -77,6 +86,7 @@ itemBases["Frigid Wand"] = { itemBases["Torture Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Chaos Bolt", implicitModTypes = { }, @@ -85,6 +95,7 @@ itemBases["Torture Wand"] = { itemBases["Critical Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Chaos Bolt", implicitModTypes = { }, @@ -93,6 +104,7 @@ itemBases["Critical Wand"] = { itemBases["Primordial Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { no_fire_spell_mods = true, onehand = true, wand = true, no_cold_spell_mods = true, no_lightning_spell_mods = true, no_physical_spell_mods = true, default = true, }, implicit = "Grants Skill: Level (1-20) Wither", implicitModTypes = { }, @@ -101,6 +113,7 @@ itemBases["Primordial Wand"] = { itemBases["Dueling Wand"] = { type = "Wand", quality = 20, + socketLimit = 2, tags = { default = true, onehand = true, wand = true, }, implicit = "Grants Skill: Level (1-20) Chaos Bolt", implicitModTypes = { }, @@ -109,6 +122,7 @@ itemBases["Dueling Wand"] = { itemBases["Random Wand"] = { type = "Wand", hidden = true, + socketLimit = 2, tags = { wand = true, default = true, }, implicitModTypes = { }, req = { }, diff --git a/src/Data/ModRunes.lua b/src/Data/ModRunes.lua index b63fca478b..26443ebedb 100644 --- a/src/Data/ModRunes.lua +++ b/src/Data/ModRunes.lua @@ -2,248 +2,1387 @@ -- Item data (c) Grinding Gear Games return { + ["Hayoxi's Soul Core of Heatproofing"] = { + ["body armour"] = { + type = "Rune", + "20% of Armour also applies to Cold Damage taken from Hits", + statOrder = { 4481 }, + }, + }, + ["Zalatl's Soul Core of Insulation"] = { + ["body armour"] = { + type = "Rune", + "20% of Armour also applies to Lightning Damage taken from Hits", + statOrder = { 4483 }, + }, + }, + ["Topotante's Soul Core of Dampening"] = { + ["body armour"] = { + type = "Rune", + "20% of Armour also applies to Fire Damage taken from Hits", + statOrder = { 4482 }, + }, + }, + ["Atmohua's Soul Core of Retreat"] = { + ["body armour"] = { + type = "Rune", + "30% faster start of Energy Shield Recharge", + statOrder = { 1379 }, + }, + }, + ["Quipolatl's Soul Core of Flow"] = { + ["helmet"] = { + type = "Rune", + "8% increased Skill Effect Duration", + "8% increased Cooldown Recovery Rate", + statOrder = { 1586, 4504 }, + }, + }, + ["Tzamoto's Soul Core of Ferocity"] = { + ["helmet"] = { + type = "Rune", + "+4 to Maximum Rage", + statOrder = { 8640 }, + }, + }, + ["Uromoti's Soul Core of Attenuation"] = { + ["boots"] = { + type = "Rune", + "15% increased Curse Duration", + "15% increased Poison Duration", + statOrder = { 1480, 2820 }, + }, + }, + ["Opiloti's Soul Core of Assault"] = { + ["weapon"] = { + type = "Rune", + "50% chance when you gain a Frenzy Charge to gain an additional Frenzy Charge", + statOrder = { 5069 }, + }, + ["caster"] = { + type = "Rune", + "50% chance when you gain a Frenzy Charge to gain an additional Frenzy Charge", + statOrder = { 5069 }, + }, + }, + ["Guatelitzi's Soul Core of Endurance"] = { + ["weapon"] = { + type = "Rune", + "50% chance when you gain an Endurance Charge to gain an additional Endurance Charge", + statOrder = { 5068 }, + }, + ["caster"] = { + type = "Rune", + "50% chance when you gain an Endurance Charge to gain an additional Endurance Charge", + statOrder = { 5068 }, + }, + }, + ["Xopec's Soul Core of Power"] = { + ["weapon"] = { + type = "Rune", + "50% chance when you gain a Power Charge to gain an additional Power Charge", + statOrder = { 5070 }, + }, + ["caster"] = { + type = "Rune", + "50% chance when you gain a Power Charge to gain an additional Power Charge", + statOrder = { 5070 }, + }, + }, + ["Estazunti's Soul Core of Convalescence"] = { + ["boots"] = { + type = "Rune", + "10% increased speed of Recoup Effects", + statOrder = { 8689 }, + }, + }, + ["Tacati's Soul Core of Affliction"] = { + ["helmet"] = { + type = "Rune", + "Enemies you Curse have -4% to Chaos Resistance", + statOrder = { 3663 }, + }, + }, + ["Cholotl's Soul Core of War"] = { + ["bow"] = { + type = "Rune", + "20% increased Projectile Speed", + statOrder = { 878 }, + }, + }, + ["Citaqualotl's Soul Core of Foulness"] = { + ["weapon"] = { + type = "Rune", + "Adds 13 to 19 Chaos damage", + statOrder = { 1235 }, + }, + }, + ["Xipocado's Soul Core of Dominion"] = { + ["caster"] = { + type = "Rune", + "Minions deal 40% increased Damage with Command Skills", + statOrder = { 8147 }, + }, + ["sceptre"] = { + type = "Rune", + "Minions deal 40% increased Damage with Command Skills", + statOrder = { 8147 }, + }, + }, ["Soul Core of Tacati"] = { - weapon = { type = "Rune", "15% chance to Poison on Hit with this weapon", statOrder = { 7033 }, }, - armour = { type = "Rune", "+7% to Chaos Resistance", statOrder = { 954 }, }, + ["weapon"] = { + type = "Rune", + "15% chance to Poison on Hit with this weapon", + statOrder = { 7059 }, + }, + ["armour"] = { + type = "Rune", + "+11% to Chaos Resistance", + statOrder = { 959 }, + }, }, ["Soul Core of Opiloti"] = { - weapon = { type = "Rune", "15% chance to cause Bleeding on Hit", statOrder = { 2169 }, }, - armour = { type = "Rune", "10% increased Charm Charges gained", statOrder = { 5129 }, }, + ["weapon"] = { + type = "Rune", + "15% chance to cause Bleeding on Hit", + statOrder = { 2178 }, + }, + ["armour"] = { + type = "Rune", + "10% increased Charm Charges gained", + statOrder = { 5146 }, + }, }, ["Soul Core of Jiquani"] = { - weapon = { type = "Rune", "Recover 2% of maximum Life on Kill", statOrder = { 1445 }, }, - armour = { type = "Rune", "2% increased maximum Life", statOrder = { 873 }, }, + ["weapon"] = { + type = "Rune", + "Recover 2% of maximum Life on Kill", + statOrder = { 1451 }, + }, + ["armour"] = { + type = "Rune", + "2% increased maximum Life", + statOrder = { 873 }, + }, }, ["Soul Core of Zalatl"] = { - weapon = { type = "Rune", "Recover 2% of maximum Mana on Kill", statOrder = { 1447 }, }, - armour = { type = "Rune", "2% increased maximum Mana", statOrder = { 875 }, }, + ["weapon"] = { + type = "Rune", + "Recover 2% of maximum Mana on Kill", + statOrder = { 1453 }, + }, + ["armour"] = { + type = "Rune", + "2% increased maximum Mana", + statOrder = { 875 }, + }, }, ["Soul Core of Citaqualotl"] = { - weapon = { type = "Rune", "30% increased Elemental Damage with Attacks", statOrder = { 861 }, }, - armour = { type = "Rune", "+5% to all Elemental Resistances", statOrder = { 950 }, }, + ["weapon"] = { + type = "Rune", + "30% increased Elemental Damage with Attacks", + statOrder = { 861 }, + }, + ["armour"] = { + type = "Rune", + "+5% to all Elemental Resistances", + statOrder = { 955 }, + }, }, ["Soul Core of Puhuarte"] = { - weapon = { type = "Rune", "30% increased chance to Ignite", statOrder = { 979 }, }, - armour = { type = "Rune", "+1% to Maximum Fire Resistance", statOrder = { 946 }, }, + ["weapon"] = { + type = "Rune", + "30% increased chance to Ignite", + statOrder = { 984 }, + }, + ["armour"] = { + type = "Rune", + "+1% to Maximum Fire Resistance", + statOrder = { 951 }, + }, }, ["Soul Core of Tzamoto"] = { - weapon = { type = "Rune", "20% increased Freeze Buildup", statOrder = { 981 }, }, - armour = { type = "Rune", "+1% to Maximum Cold Resistance", statOrder = { 947 }, }, + ["weapon"] = { + type = "Rune", + "20% increased Freeze Buildup", + statOrder = { 986 }, + }, + ["armour"] = { + type = "Rune", + "+1% to Maximum Cold Resistance", + statOrder = { 952 }, + }, }, ["Soul Core of Xopec"] = { - weapon = { type = "Rune", "30% increased chance to Shock", statOrder = { 983 }, }, - armour = { type = "Rune", "+1% to Maximum Lightning Resistance", statOrder = { 948 }, }, + ["weapon"] = { + type = "Rune", + "30% increased chance to Shock", + statOrder = { 988 }, + }, + ["armour"] = { + type = "Rune", + "+1% to Maximum Lightning Resistance", + statOrder = { 953 }, + }, }, ["Soul Core of Azcapa"] = { - weapon = { type = "Rune", "+15 to Spirit", statOrder = { 877 }, }, - armour = { type = "Rune", "5% increased Quantity of Gold Dropped by Slain Enemies", statOrder = { 6259 }, }, + ["weapon"] = { + type = "Rune", + "+15 to Spirit", + statOrder = { 877 }, + }, + ["armour"] = { + type = "Rune", + "5% increased Quantity of Gold Dropped by Slain Enemies", + statOrder = { 6281 }, + }, }, ["Soul Core of Topotante"] = { - weapon = { type = "Rune", "Attacks with this Weapon Penetrate 15% Elemental Resistances", statOrder = { 3364 }, }, - armour = { type = "Rune", "15% increased Elemental Ailment Threshold", statOrder = { 4150 }, }, + ["weapon"] = { + type = "Rune", + "Attacks with this Weapon Penetrate 15% Elemental Resistances", + statOrder = { 3373 }, + }, + ["armour"] = { + type = "Rune", + "15% increased Elemental Ailment Threshold", + statOrder = { 4162 }, + }, }, ["Soul Core of Quipolatl"] = { - weapon = { type = "Rune", "5% increased Attack Speed", statOrder = { 915 }, }, - armour = { type = "Rune", "10% reduced Slowing Potency of Debuffs on You", statOrder = { 4535 }, }, + ["weapon"] = { + type = "Rune", + "5% increased Attack Speed", + statOrder = { 919 }, + }, + ["armour"] = { + type = "Rune", + "10% reduced Slowing Potency of Debuffs on You", + statOrder = { 4548 }, + }, }, ["Soul Core of Ticaba"] = { - weapon = { type = "Rune", "+12% to Critical Damage Bonus", statOrder = { 914 }, }, - armour = { type = "Rune", "Hits against you have 10% reduced Critical Damage Bonus", statOrder = { 943 }, }, + ["weapon"] = { + type = "Rune", + "+12% to Critical Damage Bonus", + statOrder = { 918 }, + }, + ["armour"] = { + type = "Rune", + "Hits against you have 10% reduced Critical Damage Bonus", + statOrder = { 948 }, + }, }, ["Soul Core of Atmohua"] = { - weapon = { type = "Rune", "Convert 20% of Requirements to Strength", statOrder = { 7038 }, }, - armour = { type = "Rune", "Convert 20% of Requirements to Strength", statOrder = { 7038 }, }, + ["weapon"] = { + type = "Rune", + "Convert 20% of Requirements to Strength", + statOrder = { 7063 }, + }, + ["armour"] = { + type = "Rune", + "Convert 20% of Requirements to Strength", + statOrder = { 7063 }, + }, }, ["Soul Core of Cholotl"] = { - weapon = { type = "Rune", "Convert 20% of Requirements to Dexterity", statOrder = { 7036 }, }, - armour = { type = "Rune", "Convert 20% of Requirements to Dexterity", statOrder = { 7036 }, }, + ["weapon"] = { + type = "Rune", + "Convert 20% of Requirements to Dexterity", + statOrder = { 7061 }, + }, + ["armour"] = { + type = "Rune", + "Convert 20% of Requirements to Dexterity", + statOrder = { 7061 }, + }, }, ["Soul Core of Zantipi"] = { - weapon = { type = "Rune", "Convert 20% of Requirements to Intelligence", statOrder = { 7037 }, }, - armour = { type = "Rune", "Convert 20% of Requirements to Intelligence", statOrder = { 7037 }, }, + ["weapon"] = { + type = "Rune", + "Convert 20% of Requirements to Intelligence", + statOrder = { 7062 }, + }, + ["armour"] = { + type = "Rune", + "Convert 20% of Requirements to Intelligence", + statOrder = { 7062 }, + }, }, ["Desert Rune"] = { - weapon = { type = "Rune", "Adds 7 to 11 Fire Damage", statOrder = { 825 }, }, - armour = { type = "Rune", "+12% to Fire Resistance", statOrder = { 951 }, }, + ["weapon"] = { + type = "Rune", + "Adds 7 to 11 Fire Damage", + statOrder = { 825 }, + }, + ["armour"] = { + type = "Rune", + "+12% to Fire Resistance", + statOrder = { 956 }, + }, + ["caster"] = { + type = "Rune", + "Gain 10% of Damage as Extra Fire Damage", + statOrder = { 849 }, + }, }, ["Glacial Rune"] = { - weapon = { type = "Rune", "Adds 6 to 10 Cold Damage", statOrder = { 826 }, }, - armour = { type = "Rune", "+12% to Cold Resistance", statOrder = { 952 }, }, + ["weapon"] = { + type = "Rune", + "Adds 6 to 10 Cold Damage", + statOrder = { 826 }, + }, + ["armour"] = { + type = "Rune", + "+12% to Cold Resistance", + statOrder = { 957 }, + }, + ["caster"] = { + type = "Rune", + "Gain 10% of Damage as Extra Cold Damage", + statOrder = { 851 }, + }, }, ["Storm Rune"] = { - weapon = { type = "Rune", "Adds 1 to 20 Lightning Damage", statOrder = { 827 }, }, - armour = { type = "Rune", "+12% to Lightning Resistance", statOrder = { 953 }, }, + ["weapon"] = { + type = "Rune", + "Adds 1 to 20 Lightning Damage", + statOrder = { 827 }, + }, + ["armour"] = { + type = "Rune", + "+12% to Lightning Resistance", + statOrder = { 958 }, + }, + ["caster"] = { + type = "Rune", + "Gain 10% of Damage as Extra Lightning Damage", + statOrder = { 853 }, + }, }, ["Iron Rune"] = { - weapon = { type = "Rune", "20% increased Physical Damage", statOrder = { 823 }, }, - armour = { type = "Rune", "20% increased Armour, Evasion and Energy Shield", statOrder = { 1372 }, }, + ["weapon"] = { + type = "Rune", + "20% increased Physical Damage", + statOrder = { 823 }, + }, + ["armour"] = { + type = "Rune", + "20% increased Armour, Evasion and Energy Shield", + statOrder = { 1377 }, + }, + ["caster"] = { + type = "Rune", + "25% increased Spell Damage", + statOrder = { 855 }, + }, }, ["Body Rune"] = { - weapon = { type = "Rune", "Leeches 2.5% of Physical Damage as Life", statOrder = { 962 }, }, - armour = { type = "Rune", "+30 to maximum Life", statOrder = { 872 }, }, + ["weapon"] = { + type = "Rune", + "Leeches 2.5% of Physical Damage as Life", + statOrder = { 967 }, + }, + ["armour"] = { + type = "Rune", + "+30 to maximum Life", + statOrder = { 872 }, + }, + ["caster"] = { + type = "Rune", + "+30 to maximum Energy Shield", + statOrder = { 870 }, + }, }, ["Mind Rune"] = { - weapon = { type = "Rune", "Leeches 2% of Physical Damage as Mana", statOrder = { 968 }, }, - armour = { type = "Rune", "+25 to maximum Mana", statOrder = { 874 }, }, + ["weapon"] = { + type = "Rune", + "Leeches 2% of Physical Damage as Mana", + statOrder = { 973 }, + }, + ["armour"] = { + type = "Rune", + "+25 to maximum Mana", + statOrder = { 874 }, + }, + ["caster"] = { + type = "Rune", + "+30 to maximum Mana", + statOrder = { 874 }, + }, }, ["Rebirth Rune"] = { - weapon = { type = "Rune", "Gain 20 Life per Enemy Killed", statOrder = { 965 }, }, - armour = { type = "Rune", "Regenerate 0.3% of maximum Life per second", statOrder = { 1629 }, }, + ["weapon"] = { + type = "Rune", + "Gain 20 Life per Enemy Killed", + statOrder = { 970 }, + }, + ["armour"] = { + type = "Rune", + "Regenerate 0.3% of maximum Life per second", + statOrder = { 1635 }, + }, + ["caster"] = { + type = "Rune", + "15% increased Energy Shield Recharge Rate", + statOrder = { 962 }, + }, }, ["Inspiration Rune"] = { - weapon = { type = "Rune", "Gain 16 Mana per Enemy Killed", statOrder = { 970 }, }, - armour = { type = "Rune", "15% increased Mana Regeneration Rate", statOrder = { 966 }, }, + ["weapon"] = { + type = "Rune", + "Gain 16 Mana per Enemy Killed", + statOrder = { 975 }, + }, + ["armour"] = { + type = "Rune", + "15% increased Mana Regeneration Rate", + statOrder = { 971 }, + }, + ["caster"] = { + type = "Rune", + "20% increased Mana Regeneration Rate", + statOrder = { 971 }, + }, }, ["Stone Rune"] = { - weapon = { type = "Rune", "Causes 25% increased Stun Buildup", statOrder = { 975 }, }, - armour = { type = "Rune", "+40 to Stun Threshold", statOrder = { 985 }, }, + ["weapon"] = { + type = "Rune", + "Causes 25% increased Stun Buildup", + statOrder = { 980 }, + }, + ["armour"] = { + type = "Rune", + "+40 to Stun Threshold", + statOrder = { 990 }, + }, + ["caster"] = { + type = "Rune", + "Gain additional Stun Threshold equal to 12% of maximum Energy Shield", + statOrder = { 9099 }, + }, }, ["Vision Rune"] = { - weapon = { type = "Rune", "+80 to Accuracy Rating", statOrder = { 828 }, }, - armour = { type = "Rune", "10% increased Life and Mana Recovery from Flasks", statOrder = { 6031 }, }, + ["weapon"] = { + type = "Rune", + "+80 to Accuracy Rating", + statOrder = { 828 }, + }, + ["armour"] = { + type = "Rune", + "10% increased Life and Mana Recovery from Flasks", + statOrder = { 6052 }, + }, + ["caster"] = { + type = "Rune", + "20% increased Critical Hit Chance for Spells", + statOrder = { 933 }, + }, }, ["Lesser Desert Rune"] = { - weapon = { type = "Rune", "Adds 4 to 6 Fire Damage", statOrder = { 825 }, }, - armour = { type = "Rune", "+10% to Fire Resistance", statOrder = { 951 }, }, + ["weapon"] = { + type = "Rune", + "Adds 4 to 6 Fire Damage", + statOrder = { 825 }, + }, + ["armour"] = { + type = "Rune", + "+10% to Fire Resistance", + statOrder = { 956 }, + }, + ["caster"] = { + type = "Rune", + "Gain 8% of Damage as Extra Fire Damage", + statOrder = { 849 }, + }, }, ["Lesser Glacial Rune"] = { - weapon = { type = "Rune", "Adds 3 to 5 Cold Damage", statOrder = { 826 }, }, - armour = { type = "Rune", "+10% to Cold Resistance", statOrder = { 952 }, }, + ["weapon"] = { + type = "Rune", + "Adds 3 to 5 Cold Damage", + statOrder = { 826 }, + }, + ["armour"] = { + type = "Rune", + "+10% to Cold Resistance", + statOrder = { 957 }, + }, + ["caster"] = { + type = "Rune", + "Gain 8% of Damage as Extra Cold Damage", + statOrder = { 851 }, + }, }, ["Lesser Storm Rune"] = { - weapon = { type = "Rune", "Adds 1 to 10 Lightning Damage", statOrder = { 827 }, }, - armour = { type = "Rune", "+10% to Lightning Resistance", statOrder = { 953 }, }, + ["weapon"] = { + type = "Rune", + "Adds 1 to 10 Lightning Damage", + statOrder = { 827 }, + }, + ["armour"] = { + type = "Rune", + "+10% to Lightning Resistance", + statOrder = { 958 }, + }, + ["caster"] = { + type = "Rune", + "Gain 8% of Damage as Extra Lightning Damage", + statOrder = { 853 }, + }, }, ["Lesser Iron Rune"] = { - weapon = { type = "Rune", "15% increased Physical Damage", statOrder = { 823 }, }, - armour = { type = "Rune", "15% increased Armour, Evasion and Energy Shield", statOrder = { 1372 }, }, + ["weapon"] = { + type = "Rune", + "15% increased Physical Damage", + statOrder = { 823 }, + }, + ["armour"] = { + type = "Rune", + "15% increased Armour, Evasion and Energy Shield", + statOrder = { 1377 }, + }, + ["caster"] = { + type = "Rune", + "20% increased Spell Damage", + statOrder = { 855 }, + }, }, ["Lesser Body Rune"] = { - weapon = { type = "Rune", "Leeches 2% of Physical Damage as Life", statOrder = { 962 }, }, - armour = { type = "Rune", "+20 to maximum Life", statOrder = { 872 }, }, + ["weapon"] = { + type = "Rune", + "Leeches 2% of Physical Damage as Life", + statOrder = { 967 }, + }, + ["armour"] = { + type = "Rune", + "+20 to maximum Life", + statOrder = { 872 }, + }, + ["caster"] = { + type = "Rune", + "+25 to maximum Energy Shield", + statOrder = { 870 }, + }, }, ["Lesser Mind Rune"] = { - weapon = { type = "Rune", "Leeches 1.5% of Physical Damage as Mana", statOrder = { 968 }, }, - armour = { type = "Rune", "+15 to maximum Mana", statOrder = { 874 }, }, + ["weapon"] = { + type = "Rune", + "Leeches 1.5% of Physical Damage as Mana", + statOrder = { 973 }, + }, + ["armour"] = { + type = "Rune", + "+15 to maximum Mana", + statOrder = { 874 }, + }, + ["caster"] = { + type = "Rune", + "+25 to maximum Mana", + statOrder = { 874 }, + }, }, ["Lesser Rebirth Rune"] = { - weapon = { type = "Rune", "Gain 10 Life per Enemy Killed", statOrder = { 965 }, }, - armour = { type = "Rune", "Regenerate 0.25% of maximum Life per second", statOrder = { 1629 }, }, + ["weapon"] = { + type = "Rune", + "Gain 10 Life per Enemy Killed", + statOrder = { 970 }, + }, + ["armour"] = { + type = "Rune", + "Regenerate 0.25% of maximum Life per second", + statOrder = { 1635 }, + }, + ["caster"] = { + type = "Rune", + "12% increased Energy Shield Recharge Rate", + statOrder = { 962 }, + }, }, ["Lesser Inspiration Rune"] = { - weapon = { type = "Rune", "Gain 8 Mana per Enemy Killed", statOrder = { 970 }, }, - armour = { type = "Rune", "12% increased Mana Regeneration Rate", statOrder = { 966 }, }, + ["weapon"] = { + type = "Rune", + "Gain 8 Mana per Enemy Killed", + statOrder = { 975 }, + }, + ["armour"] = { + type = "Rune", + "12% increased Mana Regeneration Rate", + statOrder = { 971 }, + }, + ["caster"] = { + type = "Rune", + "16% increased Mana Regeneration Rate", + statOrder = { 971 }, + }, }, ["Lesser Stone Rune"] = { - weapon = { type = "Rune", "Causes 20% increased Stun Buildup", statOrder = { 975 }, }, - armour = { type = "Rune", "+30 to Stun Threshold", statOrder = { 985 }, }, + ["weapon"] = { + type = "Rune", + "Causes 20% increased Stun Buildup", + statOrder = { 980 }, + }, + ["armour"] = { + type = "Rune", + "+30 to Stun Threshold", + statOrder = { 990 }, + }, + ["caster"] = { + type = "Rune", + "Gain additional Stun Threshold equal to 10% of maximum Energy Shield", + statOrder = { 9099 }, + }, }, ["Lesser Vision Rune"] = { - weapon = { type = "Rune", "+50 to Accuracy Rating", statOrder = { 828 }, }, - armour = { type = "Rune", "8% increased Life and Mana Recovery from Flasks", statOrder = { 6031 }, }, + ["weapon"] = { + type = "Rune", + "+50 to Accuracy Rating", + statOrder = { 828 }, + }, + ["armour"] = { + type = "Rune", + "8% increased Life and Mana Recovery from Flasks", + statOrder = { 6052 }, + }, + ["caster"] = { + type = "Rune", + "16% increased Critical Hit Chance for Spells", + statOrder = { 933 }, + }, }, ["Greater Desert Rune"] = { - weapon = { type = "Rune", "Adds 13 to 16 Fire Damage", statOrder = { 825 }, }, - armour = { type = "Rune", "+14% to Fire Resistance", statOrder = { 951 }, }, + ["weapon"] = { + type = "Rune", + "Adds 13 to 16 Fire Damage", + statOrder = { 825 }, + }, + ["armour"] = { + type = "Rune", + "+14% to Fire Resistance", + statOrder = { 956 }, + }, + ["caster"] = { + type = "Rune", + "Gain 12% of Damage as Extra Fire Damage", + statOrder = { 849 }, + }, }, ["Greater Glacial Rune"] = { - weapon = { type = "Rune", "Adds 9 to 15 Cold Damage", statOrder = { 826 }, }, - armour = { type = "Rune", "+14% to Cold Resistance", statOrder = { 952 }, }, + ["weapon"] = { + type = "Rune", + "Adds 9 to 15 Cold Damage", + statOrder = { 826 }, + }, + ["armour"] = { + type = "Rune", + "+14% to Cold Resistance", + statOrder = { 957 }, + }, + ["caster"] = { + type = "Rune", + "Gain 12% of Damage as Extra Cold Damage", + statOrder = { 851 }, + }, }, ["Greater Storm Rune"] = { - weapon = { type = "Rune", "Adds 1 to 30 Lightning Damage", statOrder = { 827 }, }, - armour = { type = "Rune", "+14% to Lightning Resistance", statOrder = { 953 }, }, + ["weapon"] = { + type = "Rune", + "Adds 1 to 30 Lightning Damage", + statOrder = { 827 }, + }, + ["armour"] = { + type = "Rune", + "+14% to Lightning Resistance", + statOrder = { 958 }, + }, + ["caster"] = { + type = "Rune", + "Gain 12% of Damage as Extra Lightning Damage", + statOrder = { 853 }, + }, }, ["Greater Iron Rune"] = { - weapon = { type = "Rune", "25% increased Physical Damage", statOrder = { 823 }, }, - armour = { type = "Rune", "25% increased Armour, Evasion and Energy Shield", statOrder = { 1372 }, }, + ["weapon"] = { + type = "Rune", + "25% increased Physical Damage", + statOrder = { 823 }, + }, + ["armour"] = { + type = "Rune", + "25% increased Armour, Evasion and Energy Shield", + statOrder = { 1377 }, + }, + ["caster"] = { + type = "Rune", + "30% increased Spell Damage", + statOrder = { 855 }, + }, }, ["Greater Body Rune"] = { - weapon = { type = "Rune", "Leeches 3% of Physical Damage as Life", statOrder = { 962 }, }, - armour = { type = "Rune", "+40 to maximum Life", statOrder = { 872 }, }, + ["weapon"] = { + type = "Rune", + "Leeches 3% of Physical Damage as Life", + statOrder = { 967 }, + }, + ["armour"] = { + type = "Rune", + "+40 to maximum Life", + statOrder = { 872 }, + }, + ["caster"] = { + type = "Rune", + "+35 to maximum Energy Shield", + statOrder = { 870 }, + }, }, ["Greater Mind Rune"] = { - weapon = { type = "Rune", "Leeches 2.5% of Physical Damage as Mana", statOrder = { 968 }, }, - armour = { type = "Rune", "+35 to maximum Mana", statOrder = { 874 }, }, + ["weapon"] = { + type = "Rune", + "Leeches 2.5% of Physical Damage as Mana", + statOrder = { 973 }, + }, + ["armour"] = { + type = "Rune", + "+35 to maximum Mana", + statOrder = { 874 }, + }, + ["caster"] = { + type = "Rune", + "+35 to maximum Mana", + statOrder = { 874 }, + }, }, ["Greater Rebirth Rune"] = { - weapon = { type = "Rune", "Gain 30 Life per Enemy Killed", statOrder = { 965 }, }, - armour = { type = "Rune", "Regenerate 0.35% of maximum Life per second", statOrder = { 1629 }, }, + ["weapon"] = { + type = "Rune", + "Gain 30 Life per Enemy Killed", + statOrder = { 970 }, + }, + ["armour"] = { + type = "Rune", + "Regenerate 0.35% of maximum Life per second", + statOrder = { 1635 }, + }, + ["caster"] = { + type = "Rune", + "18% increased Energy Shield Recharge Rate", + statOrder = { 962 }, + }, }, ["Greater Inspiration Rune"] = { - weapon = { type = "Rune", "Gain 24 Mana per Enemy Killed", statOrder = { 970 }, }, - armour = { type = "Rune", "18% increased Mana Regeneration Rate", statOrder = { 966 }, }, + ["weapon"] = { + type = "Rune", + "Gain 24 Mana per Enemy Killed", + statOrder = { 975 }, + }, + ["armour"] = { + type = "Rune", + "18% increased Mana Regeneration Rate", + statOrder = { 971 }, + }, + ["caster"] = { + type = "Rune", + "24% increased Mana Regeneration Rate", + statOrder = { 971 }, + }, }, ["Greater Stone Rune"] = { - weapon = { type = "Rune", "Causes 30% increased Stun Buildup", statOrder = { 975 }, }, - armour = { type = "Rune", "+50 to Stun Threshold", statOrder = { 985 }, }, + ["weapon"] = { + type = "Rune", + "Causes 30% increased Stun Buildup", + statOrder = { 980 }, + }, + ["armour"] = { + type = "Rune", + "+50 to Stun Threshold", + statOrder = { 990 }, + }, + ["caster"] = { + type = "Rune", + "Gain additional Stun Threshold equal to 14% of maximum Energy Shield", + statOrder = { 9099 }, + }, }, ["Greater Vision Rune"] = { - weapon = { type = "Rune", "+110 to Accuracy Rating", statOrder = { 828 }, }, - armour = { type = "Rune", "12% increased Life and Mana Recovery from Flasks", statOrder = { 6031 }, }, + ["weapon"] = { + type = "Rune", + "+110 to Accuracy Rating", + statOrder = { 828 }, + }, + ["armour"] = { + type = "Rune", + "12% increased Life and Mana Recovery from Flasks", + statOrder = { 6052 }, + }, + ["caster"] = { + type = "Rune", + "24% increased Critical Hit Chance for Spells", + statOrder = { 933 }, + }, }, ["Lesser Robust Rune"] = { - weapon = { type = "Rune", "+6 to Strength", statOrder = { 940 }, }, - armour = { type = "Rune", "+6 to Strength", statOrder = { 940 }, }, + ["weapon"] = { + type = "Rune", + "+6 to Strength", + statOrder = { 945 }, + }, + ["armour"] = { + type = "Rune", + "+6 to Strength", + statOrder = { 945 }, + }, + ["caster"] = { + type = "Rune", + "+6 to Strength", + statOrder = { 945 }, + }, + ["sceptre"] = { + type = "Rune", + "+6 to Strength", + statOrder = { 945 }, + }, }, ["Robust Rune"] = { - weapon = { type = "Rune", "+8 to Strength", statOrder = { 940 }, }, - armour = { type = "Rune", "+8 to Strength", statOrder = { 940 }, }, + ["weapon"] = { + type = "Rune", + "+8 to Strength", + statOrder = { 945 }, + }, + ["armour"] = { + type = "Rune", + "+8 to Strength", + statOrder = { 945 }, + }, + ["caster"] = { + type = "Rune", + "+8 to Strength", + statOrder = { 945 }, + }, + ["sceptre"] = { + type = "Rune", + "+8 to Strength", + statOrder = { 945 }, + }, }, ["Greater Robust Rune"] = { - weapon = { type = "Rune", "+10 to Strength", statOrder = { 940 }, }, - armour = { type = "Rune", "+10 to Strength", statOrder = { 940 }, }, + ["weapon"] = { + type = "Rune", + "+10 to Strength", + statOrder = { 945 }, + }, + ["armour"] = { + type = "Rune", + "+10 to Strength", + statOrder = { 945 }, + }, + ["caster"] = { + type = "Rune", + "+10 to Strength", + statOrder = { 945 }, + }, + ["sceptre"] = { + type = "Rune", + "+10 to Strength", + statOrder = { 945 }, + }, }, ["Lesser Adept Rune"] = { - weapon = { type = "Rune", "+5 to Dexterity", statOrder = { 941 }, }, - armour = { type = "Rune", "+6 to Dexterity", statOrder = { 941 }, }, + ["weapon"] = { + type = "Rune", + "+6 to Dexterity", + statOrder = { 946 }, + }, + ["armour"] = { + type = "Rune", + "+6 to Dexterity", + statOrder = { 946 }, + }, + ["caster"] = { + type = "Rune", + "+6 to Dexterity", + statOrder = { 946 }, + }, + ["sceptre"] = { + type = "Rune", + "+6 to Dexterity", + statOrder = { 946 }, + }, }, ["Adept Rune"] = { - weapon = { type = "Rune", "+8 to Dexterity", statOrder = { 941 }, }, - armour = { type = "Rune", "+8 to Dexterity", statOrder = { 941 }, }, + ["weapon"] = { + type = "Rune", + "+8 to Dexterity", + statOrder = { 946 }, + }, + ["armour"] = { + type = "Rune", + "+8 to Dexterity", + statOrder = { 946 }, + }, + ["caster"] = { + type = "Rune", + "+8 to Dexterity", + statOrder = { 946 }, + }, + ["sceptre"] = { + type = "Rune", + "+8 to Dexterity", + statOrder = { 946 }, + }, }, ["Greater Adept Rune"] = { - weapon = { type = "Rune", "+10 to Dexterity", statOrder = { 941 }, }, - armour = { type = "Rune", "+10 to Dexterity", statOrder = { 941 }, }, + ["weapon"] = { + type = "Rune", + "+10 to Dexterity", + statOrder = { 946 }, + }, + ["armour"] = { + type = "Rune", + "+10 to Dexterity", + statOrder = { 946 }, + }, + ["caster"] = { + type = "Rune", + "+10 to Dexterity", + statOrder = { 946 }, + }, + ["sceptre"] = { + type = "Rune", + "+10 to Dexterity", + statOrder = { 946 }, + }, }, ["Lesser Resolve Rune"] = { - weapon = { type = "Rune", "+6 to Intelligence", statOrder = { 942 }, }, - armour = { type = "Rune", "+6 to Intelligence", statOrder = { 942 }, }, + ["weapon"] = { + type = "Rune", + "+6 to Intelligence", + statOrder = { 947 }, + }, + ["armour"] = { + type = "Rune", + "+6 to Intelligence", + statOrder = { 947 }, + }, + ["caster"] = { + type = "Rune", + "+6 to Intelligence", + statOrder = { 947 }, + }, + ["sceptre"] = { + type = "Rune", + "+6 to Intelligence", + statOrder = { 947 }, + }, }, ["Resolve Rune"] = { - weapon = { type = "Rune", "+8 to Intelligence", statOrder = { 942 }, }, - armour = { type = "Rune", "+8 to Intelligence", statOrder = { 942 }, }, + ["weapon"] = { + type = "Rune", + "+8 to Intelligence", + statOrder = { 947 }, + }, + ["armour"] = { + type = "Rune", + "+8 to Intelligence", + statOrder = { 947 }, + }, + ["caster"] = { + type = "Rune", + "+8 to Intelligence", + statOrder = { 947 }, + }, + ["sceptre"] = { + type = "Rune", + "+8 to Intelligence", + statOrder = { 947 }, + }, }, ["Greater Resolve Rune"] = { - weapon = { type = "Rune", "+10 to Intelligence", statOrder = { 942 }, }, - armour = { type = "Rune", "+10 to Intelligence", statOrder = { 942 }, }, + ["weapon"] = { + type = "Rune", + "+10 to Intelligence", + statOrder = { 947 }, + }, + ["armour"] = { + type = "Rune", + "+10 to Intelligence", + statOrder = { 947 }, + }, + ["caster"] = { + type = "Rune", + "+10 to Intelligence", + statOrder = { 947 }, + }, + ["sceptre"] = { + type = "Rune", + "+10 to Intelligence", + statOrder = { 947 }, + }, }, ["Lesser Tempered Rune"] = { - weapon = { type = "Rune", "Adds 3 to 4 Physical Damage", statOrder = { 824 }, }, - armour = { type = "Rune", "6 to 9 Physical Thorns damage", statOrder = { 9190 }, }, + ["weapon"] = { + type = "Rune", + "Adds 3 to 4 Physical Damage", + statOrder = { 824 }, + }, + ["armour"] = { + type = "Rune", + "6 to 9 Physical Thorns damage", + statOrder = { 9217 }, + }, }, ["Tempered Rune"] = { - weapon = { type = "Rune", "Adds 6 to 9 Physical Damage", statOrder = { 824 }, }, - armour = { type = "Rune", "14 to 21 Physical Thorns damage", statOrder = { 9190 }, }, + ["weapon"] = { + type = "Rune", + "Adds 6 to 9 Physical Damage", + statOrder = { 824 }, + }, + ["armour"] = { + type = "Rune", + "14 to 21 Physical Thorns damage", + statOrder = { 9217 }, + }, }, ["Greater Tempered Rune"] = { - weapon = { type = "Rune", "Adds 9 to 12 Physical Damage", statOrder = { 824 }, }, - armour = { type = "Rune", "31 to 52 Physical Thorns damage", statOrder = { 9190 }, }, + ["weapon"] = { + type = "Rune", + "Adds 9 to 12 Physical Damage", + statOrder = { 824 }, + }, + ["armour"] = { + type = "Rune", + "31 to 52 Physical Thorns damage", + statOrder = { 9217 }, + }, }, ["Greater Rune of Leadership"] = { - weapon = { type = "Rune", "Minions gain 10% of their Physical Damage as Extra Lightning Damage", statOrder = { 8162 }, }, - armour = { type = "Rune", "Minions take 10% of Physical Damage as Lightning Damage", statOrder = { 8163 }, }, + ["weapon"] = { + type = "Rune", + "Minions gain 10% of their Physical Damage as Extra Lightning Damage", + statOrder = { 8188 }, + }, + ["armour"] = { + type = "Rune", + "Minions take 10% of Physical Damage as Lightning Damage", + statOrder = { 8189 }, + }, }, ["Greater Rune of Tithing"] = { - weapon = { type = "Rune", "Meta Skills gain 10% increased Energy", statOrder = { 5826 }, }, - armour = { type = "Rune", "1 to 100 Lightning Thorns damage", statOrder = { 9189 }, }, + ["weapon"] = { + type = "Rune", + "Meta Skills gain 10% increased Energy", + statOrder = { 5847 }, + }, + ["armour"] = { + type = "Rune", + "1 to 100 Lightning Thorns damage", + statOrder = { 9216 }, + }, }, ["Greater Rune of Alacrity"] = { - weapon = { type = "Rune", "8% increased Skill Speed", statOrder = { 830 }, }, - armour = { type = "Rune", "Debuffs on you expire 8% faster", statOrder = { 5565 }, }, + ["weapon"] = { + type = "Rune", + "8% increased Skill Speed", + statOrder = { 830 }, + }, + ["armour"] = { + type = "Rune", + "Debuffs on you expire 8% faster", + statOrder = { 5583 }, + }, }, ["Greater Rune of Nobility"] = { - weapon = { type = "Rune", "Attacks with this Weapon have 10% chance to inflict Lightning Exposure", statOrder = { 6972 }, }, - armour = { type = "Rune", "10% reduced effect of Shock on you", statOrder = { 8815 }, }, + ["weapon"] = { + type = "Rune", + "Attacks with this Weapon have 10% chance to inflict Lightning Exposure", + statOrder = { 6998 }, + }, + ["armour"] = { + type = "Rune", + "10% reduced effect of Shock on you", + statOrder = { 8842 }, + }, + }, + ["Hedgewitch Assandra's Rune of Wisdom"] = { + ["caster"] = { + type = "Rune", + "+1 to Level of all Spell Skills", + statOrder = { 922 }, + }, + }, + ["Saqawal's Rune of the Sky"] = { + ["weapon"] = { + type = "Rune", + "Gain 6% of Damage as Extra Damage of all Elements", + statOrder = { 8334 }, + }, + ["caster"] = { + type = "Rune", + "Gain 6% of Damage as Extra Damage of all Elements", + statOrder = { 8334 }, + }, + }, + ["Fenumus' Rune of Agony"] = { + ["weapon"] = { + type = "Rune", + "Gain 13% of Damage as Extra Chaos Damage", + statOrder = { 1620 }, + }, + ["caster"] = { + type = "Rune", + "Gain 13% of Damage as Extra Chaos Damage", + statOrder = { 1620 }, + }, + }, + ["Farrul's Rune of Grace"] = { + ["boots"] = { + type = "Rune", + "6% reduced Movement Speed Penalty from using Skills while moving", + statOrder = { 8258 }, + }, + }, + ["Farrul's Rune of the Chase"] = { + ["boots"] = { + type = "Rune", + "5% increased Movement Speed", + statOrder = { 829 }, + }, + }, + ["Craiceann's Rune of Warding"] = { + ["body armour"] = { + type = "Rune", + "40% reduced effect of Curses on you", + statOrder = { 1855 }, + }, + }, + ["Saqawal's Rune of Memory"] = { + ["helmet"] = { + type = "Rune", + "2% increased Experience gain", + statOrder = { 1411 }, + }, + }, + ["Saqawal's Rune of Erosion"] = { + ["helmet"] = { + type = "Rune", + "20% increased Exposure Effect", + statOrder = { 5943 }, + }, + }, + ["Farrul's Rune of the Hunt"] = { + ["weapon"] = { + type = "Rune", + "50% increased Attack Damage against Rare or Unique Enemies", + statOrder = { 4362 }, + }, + }, + ["Craiceann's Rune of Recovery"] = { + ["body armour"] = { + type = "Rune", + "50% increased Energy Shield Recharge Rate", + statOrder = { 962 }, + }, + }, + ["Courtesan Mannan's Rune of Cruelty"] = { + ["gloves"] = { + type = "Rune", + "15% increased Magnitude of Damaging Ailments you inflict", + statOrder = { 5551 }, + }, + }, + ["Thane Grannell's Rune of Mastery"] = { + ["gloves"] = { + type = "Rune", + "20% increased Magnitude of Non-Damaging Ailments you inflict", + statOrder = { 8322 }, + }, + }, + ["Fenumus' Rune of Spinning"] = { + ["gloves"] = { + type = "Rune", + "8% increased Cast Speed", + statOrder = { 940 }, + }, + }, + ["Countess Seske's Rune of Archery"] = { + ["bow"] = { + type = "Rune", + "Bow Attacks fire an additional Arrow", + statOrder = { 943 }, + }, + }, + ["Thane Girt's Rune of Wildness"] = { + ["caster"] = { + type = "Rune", + "25% chance for Spell Skills to fire 2 additional Projectiles", + statOrder = { 8997 }, + }, + }, + ["Fenumus' Rune of Draining"] = { + ["gloves"] = { + type = "Rune", + "20% increased Effect of Withered", + statOrder = { 9454 }, + }, + }, + ["Thane Myrk's Rune of Summer"] = { + ["weapon"] = { + type = "Rune", + "Adds 23 to 34 Fire Damage", + statOrder = { 825 }, + }, + }, + ["Lady Hestra's Rune of Winter"] = { + ["weapon"] = { + type = "Rune", + "Adds 19 to 28 Cold Damage", + statOrder = { 826 }, + }, + }, + ["Thane Leld's Rune of Spring"] = { + ["weapon"] = { + type = "Rune", + "Adds 1 to 60 Lightning Damage", + statOrder = { 827 }, + }, + }, + ["The Greatwolf's Rune of Claws"] = { + ["gloves"] = { + type = "Rune", + "Adds 5 to 12 Physical Damage to Attacks", + statOrder = { 845 }, + }, + }, + ["The Greatwolf's Rune of Willpower"] = { + ["body armour"] = { + type = "Rune", + "10% of Damage is taken from Mana before Life", + statOrder = { 2384 }, + }, + }, + ["Talisman of Sirrius"] = { + ["gloves"] = { + type = "Rune", + "8% increased Attack Speed", + statOrder = { 939 }, + }, + }, + ["Talisman of Thruldana"] = { + ["weapon"] = { + type = "Rune", + "25% reduced Poison Duration", + "Targets can be affected by +1 of your Poisons at the same time", + statOrder = { 2820, 8385 }, + }, + }, + ["Talisman of Grold"] = { + ["gloves"] = { + type = "Rune", + "Skills which Empower an Attack have 15% chance to not count that Attack", + statOrder = { 4951 }, + }, + }, + ["Talisman of Eeshta"] = { + ["helmet"] = { + type = "Rune", + "6% reduced Cost of Skills", + statOrder = { 1572 }, + }, + }, + ["Talisman of Egrin"] = { + ["helmet"] = { + type = "Rune", + "Enemies you Curse take 5% increased Damage", + statOrder = { 3370 }, + }, + }, + ["Talisman of Maxarius"] = { + ["body armour"] = { + type = "Rune", + "+1 Charm Slot", + statOrder = { 8377 }, + }, + }, + ["Talisman of Ralakesh"] = { + ["helmet"] = { + type = "Rune", + "Minions have 5% reduced Reservation", + statOrder = { 8194 }, + }, + }, + ["Serpent Talisman"] = { + ["gloves"] = { + type = "Rune", + "5% increased Curse Magnitudes", + statOrder = { 2288 }, + }, + }, + ["Primate Talisman"] = { + ["helmet"] = { + type = "Rune", + "Minions have 12% increased maximum Life", + statOrder = { 961 }, + }, + }, + ["Owl Talisman"] = { + ["boots"] = { + type = "Rune", + "5% increased Cooldown Recovery Rate", + statOrder = { 4504 }, + }, + }, + ["Cat Talisman"] = { + ["boots"] = { + type = "Rune", + "Hits against you have 15% reduced Critical Damage Bonus", + statOrder = { 948 }, + }, + }, + ["Wolf Talisman"] = { + ["gloves"] = { + type = "Rune", + "10% increased Magnitude of Bleeding you inflict", + statOrder = { 4598 }, + }, + }, + ["Stag Talisman"] = { + ["helmet"] = { + type = "Rune", + "8% increased Exposure Effect", + statOrder = { 5943 }, + }, + }, + ["Boar Talisman"] = { + ["gloves"] = { + type = "Rune", + "Gain 1 Rage on Melee Hit", + statOrder = { 6240 }, + }, + }, + ["Bear Talisman"] = { + ["helmet"] = { + type = "Rune", + "8% increased Area of Effect", + statOrder = { 1571 }, + }, + }, + ["Ox Talisman"] = { + ["boots"] = { + type = "Rune", + "20% increased Presence Area of Effect", + statOrder = { 998 }, + }, + }, + ["Rabbit Talisman"] = { + ["body armour"] = { + type = "Rune", + "8% increased Rarity of Items found", + statOrder = { 916 }, + }, + }, + ["Fox Talisman"] = { + ["body armour"] = { + type = "Rune", + "+2% to Quality of all Skills", + statOrder = { 4181 }, + }, }, } \ No newline at end of file diff --git a/src/Export/Bases/sceptre.txt b/src/Export/Bases/sceptre.txt index fd398e8ee4..dc39d6d231 100644 --- a/src/Export/Bases/sceptre.txt +++ b/src/Export/Bases/sceptre.txt @@ -2,15 +2,18 @@ local itemBases = ... #type Sceptre +#socketLimit 2 #baseMatch Metadata/Items/Weapons/OneHandWeapons/Sceptres/FourSceptre%d+ #forceHide true +#socketLimit 2 #baseMatch Metadata/Items/Weapons/OneHandWeapons/Sceptres/FourSceptre6a #baseMatch Metadata/Items/Weapons/OneHandWeapons/Sceptres/FourSceptre6b #baseMatch Metadata/Items/Weapons/OneHandWeapons/Sceptres/FourSceptre6c #forceHide false #forceShow true +#socketLimit 2 #base Metadata/Items/Weapons/OneHandWeapons/Sceptres/FourSceptre6a Shrine Sceptre (Purity of Fire) #base Metadata/Items/Weapons/OneHandWeapons/Sceptres/FourSceptre6b Shrine Sceptre (Purity of Cold) #base Metadata/Items/Weapons/OneHandWeapons/Sceptres/FourSceptre6c Shrine Sceptre (Purity of Lighting) diff --git a/src/Export/Bases/soulcore.txt b/src/Export/Bases/soulcore.txt index bfd33835af..255be8bc07 100644 --- a/src/Export/Bases/soulcore.txt +++ b/src/Export/Bases/soulcore.txt @@ -6,3 +6,6 @@ local itemBases = ... #type Rune #baseMatch Metadata/Items/SoulCores/Rune + +#type Talisman +#baseMatch Metadata/Items/SoulCores/Talisman \ No newline at end of file diff --git a/src/Export/Bases/staff.txt b/src/Export/Bases/staff.txt index 0e3bc030cf..27ddc82bdc 100644 --- a/src/Export/Bases/staff.txt +++ b/src/Export/Bases/staff.txt @@ -2,6 +2,7 @@ local itemBases = ... #type Staff +#socketLimit 3 #baseMatch BaseType Metadata/Items/Staves/AbstractStaff #type Staff diff --git a/src/Export/Bases/wand.txt b/src/Export/Bases/wand.txt index 969fbd1335..0f97e246c8 100644 --- a/src/Export/Bases/wand.txt +++ b/src/Export/Bases/wand.txt @@ -2,4 +2,5 @@ local itemBases = ... #type Wand +#socketLimit 2 #baseMatch Metadata/Items/Weapons/OneHandWeapons/Wands/FourWand diff --git a/src/Export/Scripts/bases.lua b/src/Export/Scripts/bases.lua index cc1ade3dfb..14607a47ca 100644 --- a/src/Export/Scripts/bases.lua +++ b/src/Export/Scripts/bases.lua @@ -261,24 +261,60 @@ directiveTable.base = function(state, args, out) end end -- Special handling of Runes and SoulCores - if state.type == "Rune" or state.type == "SoulCore" then + if state.type == "Rune" or state.type == "SoulCore" or state.type == "Talisman" then local soulcore = dat("SoulCores"):GetRow("BaseItemTypes", baseItemType) - if soulcore then - out:write('\timplicit = ') - local stats = { } - for i, statKey in ipairs(soulcore.StatsKeysWeapon) do - local statValue = soulcore["StatsValuesWeapon"][i] - stats[statKey.Id] = { min = statValue, max = statValue } + local soulcoresperclass = dat("SoulCoresPerClass"):GetRow("BaseItemType", baseItemType) + + local stats = { } + local outLines = { } + if soulcore then + if #soulcore.StatsKeysWeapon > 0 then + for i, statKey in ipairs(soulcore.StatsKeysWeapon) do + local statValue = soulcore["StatsValuesWeapon"][i] + stats[statKey.Id] = { min = statValue, max = statValue } + end + table.insert(outLines, 'Martial Weapons: ' .. table.concat(describeStats(stats), '\\n')) + end + if #soulcore.StatsKeysArmour > 0 then + stats = { } -- reset stats to empty + for i, statKey in ipairs(soulcore.StatsKeysArmour) do + local statValue = soulcore["StatsValuesArmour"][i] + stats[statKey.Id] = { min = statValue, max = statValue } + end + table.insert(outLines, 'Armour: ' .. table.concat(describeStats(stats), '\\n')) end - out:write('"Martial Weapons: ', table.concat(describeStats(stats), '", "'), '\\n') - stats = { } -- reset stats to empty - for i, statKey in ipairs(soulcore.StatsKeysArmour) do - local statValue = soulcore["StatsValuesArmour"][i] + if #soulcore.StatsKeysCaster > 0 then + stats = { } -- reset stats to empty + for i, statKey in ipairs(soulcore.StatsKeysCaster) do + local statValue = soulcore["StatsValuesCaster"][i] + stats[statKey.Id] = { min = statValue, max = statValue } + end + table.insert(outLines, 'Caster: ' .. table.concat(describeStats(stats), '\\n')) + end + -- Attribute runes are special case and can socket in everything + -- Sceptres are handled in "soulcoresperclass" + if #soulcore.StatsKeysAttributes > 0 then + stats = { } -- reset stats to empty + for i, statKey in ipairs(soulcore.StatsKeysAttributes) do + local statValue = soulcore["StatsValuesAttributes"][i] + stats[statKey.Id] = { min = statValue, max = statValue } + end + table.insert(outLines, 'Martial Weapons: ' .. table.concat(describeStats(stats), '\\n')) + table.insert(outLines, 'Armour: ' .. table.concat(describeStats(stats), '\\n')) + table.insert(outLines, 'Caster: ' .. table.concat(describeStats(stats), '\\n')) + 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] stats[statKey.Id] = { min = statValue, max = statValue } end - out:write('Armour: ', table.concat(describeStats(stats), '", "'), '"') - out:write(',\n') + local coreItemClass = soulcoresperclass.ItemClass.Id + table.insert(outLines, coreItemClass..': ' .. table.concat(describeStats(stats), '\\n')) end + out:write('\timplicit = "'..table.concat(outLines, '\\n')..'",\n') end out:write('\treq = { ') local reqLevel = 1 diff --git a/src/Export/Scripts/soulcores.lua b/src/Export/Scripts/soulcores.lua index 4c7b327135..6cae6fe9a6 100644 --- a/src/Export/Scripts/soulcores.lua +++ b/src/Export/Scripts/soulcores.lua @@ -37,37 +37,96 @@ 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 stats, orders = describeStats(stats) + if #orders > 0 then + local out = { + type = "Rune", + slotType = slotType, + label = stats, + statOrder = orders, + } + table.insert(modLines, out) + end + end + + local function writeModLines(modLines, 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 + out:write('\t\t},\n') + end + end + + -- Check for Standard Weapon, Armour, Caster Runes local soulcore = dat("SoulCores"):GetRow("BaseItemTypes", baseItemType) + local soulcoresperclass = dat("SoulCoresPerClass"):GetRow("BaseItemType", baseItemType) + out:write('\t["', displayName, '"] = {\n') + local modLines = { } if soulcore then - local function writeStats(stats, out) - local stats, orders = describeStats(stats) - if #orders > 0 then - out:write('{ ') - out:write('type = "Rune", ') - out:write('"'..table.concat(stats, '", "'), '", ') - out:write('statOrder = { ', table.concat(orders, ', '), ' }, ') - out:write('},\n') - end - end - out:write('\t["', displayName, '"] = {\n') -- weapons local stats = { } for i, statKey in ipairs(soulcore.StatsKeysWeapon) do local statValue = soulcore["StatsValuesWeapon"][i] stats[statKey.Id] = { min = statValue, max = statValue } end - out:write("\t\tweapon = ") - writeStats(stats, out) + if next(stats) then + addRuneStats(stats, "weapon", modLines) + end + + -- armour stats = { } -- reset stats to empty for i, statKey in ipairs(soulcore.StatsKeysArmour) do local statValue = soulcore["StatsValuesArmour"][i] stats[statKey.Id] = { min = statValue, max = statValue } end - out:write("\t\tarmour = ") - writeStats(stats, out) + if next(stats) then + addRuneStats(stats, "armour", modLines) + end - out:write('\t},\n') + -- caster check (wand & staff) + stats = { } -- reset stats to empty + for i, statKey in ipairs(soulcore.StatsKeysCaster) do + local statValue = soulcore["StatsValuesCaster"][i] + stats[statKey.Id] = { min = statValue, max = statValue } + end + if next(stats) then + addRuneStats(stats, "caster", modLines) + end + + -- Check if the row is an Attribute rune which can go in all slots + if soulcore.StatsKeysAttributes then + stats = { } -- reset stats to empty + for i, statKey in ipairs(soulcore.StatsKeysAttributes) do + local statValue = soulcore["StatsValuesAttributes"][i] + stats[statKey.Id] = { min = statValue, max = statValue } + end + if next(stats) then + addRuneStats(stats, "weapon", modLines) + addRuneStats(stats, "armour", modLines) + addRuneStats(stats, "caster", modLines) + 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] + stats[statKey.Id] = { min = statValue, max = statValue } + end + local itemClassId = soulcoresperclass.ItemClass.Id + if next(stats) then + addRuneStats(stats, itemClassId:lower(), modLines) + end end + writeModLines(modLines, out) + out:write('\t},\n') end directiveTable.baseMatch = function(state, argstr, out)