diff --git a/src/Classes/ConfigTab.lua b/src/Classes/ConfigTab.lua index 619de6d4c5..43049b1ce0 100644 --- a/src/Classes/ConfigTab.lua +++ b/src/Classes/ConfigTab.lua @@ -151,7 +151,7 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont local height = 20 for _, varControl in pairs(self.varControlList) do if varControl:IsShown() then - height = height + m_max(varControl.height, 16) + 4 + height = height + m_max((type(varControl.height) == "function" and varControl.height() or varControl.height), 16) + 4 end end return m_max(height, 32) @@ -185,6 +185,170 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont self:BuildModList() self.build.buildFlag = true end) + elseif varData.type == "multiList" then + control = new("Control", {"TOPLEFT",lastSection,"TOPLEFT"}, 234, 0, 16, 16) + control.varControlList = { {}, {} } + control.varData = varData + control.height = function() + local height = 20 + for i, varControl in ipairs(control.varControlList[1]) do + if varControl:IsShown() then + if varData.extraTypes and control.varControlList[2][i * (#varData.extraTypes)]:IsShown() then + height = varControl.y + control.varControlList[2][i * (#varData.extraTypes)].y + m_max(control.varControlList[2][i * (#varData.extraTypes)].height, 18) + 4 + else + height = varControl.y + m_max(varControl.height, 18) + 4 + end + end + end + return height + end + control.newLists = function() + local input = self.configSets[self.activeConfigSetId].input + local excludeValue = {} + local newValues = {} + for i, varControl in ipairs(control.varControlList[1]) do + excludeValue[input[varData.var.."_"..i] or varControl:GetSelValue().val] = true + newValues[i] = input[varData.var.."_"..i] or varControl:GetSelValue().val + end + if not varData.showAll then + for i, varControl in ipairs(control.varControlList[1]) do + if newValues[i] == "NONE" and self.configSets[self.activeConfigSetId].input[varData.var.."_"..i] == "NONE" then + if i < #control.varControlList[1] and newValues[i+1] ~= "NONE" then + newValues[i] = newValues[i+1] + newValues[i+1] = "NONE" + local index1, index2 = varData.var.."_"..i, varData.var.."_"..(i+1) + input[index1] = input[index2] + input[index2] = "NONE" + for j, varExtra in ipairs(varData.extraTypes or {}) do + local index1, index2 = index1.."_"..j, index2.."_"..j + local old = input[index1] + input[index1] = input[index2] + input[index2] = old + if varExtra[1] == "integer" then + control.varControlList[2][i*(#varData.extraTypes)+j-1]:SetText(tostring(input[index1] or "")) + control.varControlList[2][(i+1)*(#varData.extraTypes)+j-1]:SetText(tostring(input[index2] or "")) + elseif varExtra[1] == "slider" then + control.varControlList[2][i*(#varData.extraTypes)+j-1].val = input[index1] / 100 + control.varControlList[2][(i+1)*(#varData.extraTypes)+j-1].val = input[index1] / 100 + end + end + else + break + end + end + end + end + local firstNone = false + for i, varControl in ipairs(control.varControlList[1]) do + varControl.selIndex = 1 + varControl.list = { { val = "NONE", label = "None" } } + if i == 1 and not varData.showAll then + t_insert(varControl.list, { val = "ALL", label = "All Options" }) + end + varControl.shown = true + for j, element in ipairs(varData.list) do + if not excludeValue[element.val] or element.val == newValues[i] then + t_insert(varControl.list, element) + end + if element.val == newValues[i] then + varControl.selIndex = #varControl.list + end + end + if not varData.showAll then + if i == 1 and newValues[i] == "ALL" then + varControl.selIndex = 2 + for j, varControl2 in ipairs(control.varControlList[1]) do + if j ~= i then + varControl2.shown = false + end + end + break + elseif newValues[i] == "NONE" then + if firstNone then + varControl.shown = false + else + firstNone = true + end + end + end + end + for i, varControl in ipairs(control.varControlList[1]) do + if i ~= #control.varControlList[1] and varControl:IsShown() then + if varData.extraTypes and control.varControlList[2][i * (#varData.extraTypes)]:IsShown() then + control.varControlList[1][i+1].y = varControl.y + control.varControlList[2][i * (#varData.extraTypes)].y + m_max(control.varControlList[2][i * (#varData.extraTypes)].height, 18) + 4 + else + control.varControlList[1][i+1].y = varControl.y + m_max(varControl.height, 18) + 4 + end + else + break + end + end + end + local extraHeight = 20 + if varData.listFunc then + varData.list = varData.listFunc(self.build) + end + for i=1,(varData.maxElements or #varData.list) do + local dropDownControl = new("DropDownControl", {"TOPLEFT",control,"TOPLEFT"}, -225, extraHeight, 343, 18, { { val = "NONE", label = "None" } }, function(index, value) + self.configSets[self.activeConfigSetId].input[varData.var.."_"..i] = value.val + control.newLists() + self:AddUndoState() + self:BuildModList() + self.build.buildFlag = true + end) + dropDownControl.shown = varData.showAll or i == 1 + dropDownControl.newLists = control.newLists + self.varControls[varData.var.."_"..i] = dropDownControl + t_insert(control.varControlList[1], dropDownControl) + local extraTypesExtraHeight = 0 + for j, varExtra in ipairs(varData.extraTypes or {}) do + if varExtra[1] == "integer" then + local editControl = new("EditControl", {"TOPLEFT",dropDownControl,"TOPLEFT"}, 225, 0, 90, 18, "", nil, "^%-%d", 7, function(buf, placeholder) + if placeholder then + self.configSets[self.activeConfigSetId].placeholder[varData.var.."_"..i.."_"..j] = tonumber(buf) + else + self.configSets[self.activeConfigSetId].input[varData.var.."_"..i.."_"..j] = tonumber(buf) + self:AddUndoState() + self:BuildModList() + end + self.build.buildFlag = true + end) + if #varData.extraTypes == 1 then -- sameLine + dropDownControl.width = function() return 220 + ((not editControl:IsShown()) and 123 or 0) end + else + local xs = { 0, 112, 225 } + editControl.x = xs[(j-1)%3 + 1] + editControl.y = 22 * (1 + m_floor((j-1)/3)) + editControl.height = 16 + extraTypesExtraHeight = 20 * (1 + m_floor((j-1)/3)) + end + editControl.tooltipText = varExtra[2] + if varExtra[3] then + editControl.shown = function() return dropDownControl:GetSelValue()[varExtra[3]] end + end + editControl.placeholder = varExtra[4] + self.varControls[varData.var.."_"..i.."_"..j] = editControl + t_insert(control.varControlList[2], editControl) + elseif varExtra[1] == "slider" then + extraTypesExtraHeight = extraTypesExtraHeight + 22 + slider = new("SliderControl", {"TOPLEFT",dropDownControl,"TOPLEFT"}, 0, extraTypesExtraHeight, 118 + 225, 18, function(val) + self.configSets[self.activeConfigSetId].input[varData.var.."_"..i.."_"..j] = m_floor(val * 100) + self:AddUndoState() + self:BuildModList() + self.build.buildFlag = true + end) + slider.tooltipText = varExtra[2] + if varExtra[3] then + slider.shown = function() return dropDownControl:GetSelValue()[varExtra[3]] end + end + slider.val = varExtra[4] / 100 + self.varControls[varData.var.."_"..i.."_"..j] = slider + t_insert(control.varControlList[2], slider) + end + end + extraHeight = extraHeight + 22 + end + control.newLists() elseif varData.type == "text" and not varData.resizable then control = new("EditControl", {"TOPLEFT",lastSection,"TOPLEFT"}, 8, 0, 344, 118, "", nil, "^%C\t\n", nil, function(buf, placeholder) if placeholder then @@ -517,10 +681,15 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont if varData.tooltipFunc then control.tooltipFunc = varData.tooltipFunc + if control.varControlList then + for _, varControl in ipairs(control.varControlList[1]) do + varControl.tooltipFunc = varData.tooltipFunc + end + end end local labelControl = control if varData.label and varData.type ~= "check" then - labelControl = new("LabelControl", {"RIGHT",control,"LEFT"}, -4, 0, 0, DrawStringWidth(14, "VAR", varData.label) > 228 and 12 or 14, "^7"..varData.label) + labelControl = new("LabelControl", {"TOPRIGHT",control,"TOPLEFT"}, -4, 0, 0, DrawStringWidth(14, "VAR", varData.label) > 228 and 12 or 14, "^7"..varData.label) t_insert(self.controls, labelControl) end if varData.var then @@ -539,6 +708,10 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont self.defaultState[varData.var] = varData.defaultState or 0 elseif varData.type == "list" then self.defaultState[varData.var] = varData.list[varData.defaultIndex or 1].val + elseif varData.type == "multiList" then + for i, _ in ipairs(control.varControlList[1]) do + self.defaultState[varData.var.."_"..i] = "NONE" + end elseif varData.type == "text" then self.defaultState[varData.var] = varData.defaultState or "" else @@ -606,6 +779,13 @@ local ConfigTabClass = newClass("ConfigTab", "UndoHandler", "ControlHost", "Cont t_insert(self.controls, control) t_insert(lastSection.varControlList, control) + if control.varControlList then + for _, varControlList in pairs(control.varControlList) do + for _, varControl in pairs(varControlList) do + t_insert(self.controls, varControl) + end + end + end end end self.controls.scrollBar = new("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, 0, 0, 18, 0, 50, "VERTICAL", true) @@ -745,6 +925,9 @@ function ConfigTabClass:UpdateControls() control.state = self.configSets[self.activeConfigSetId].input[var] elseif control._className == "DropDownControl" then control:SelByValue(self.configSets[self.activeConfigSetId].input[var] or self:GetDefaultState(var), "val") + if control.newLists then + control.newLists() + end end end end @@ -874,6 +1057,22 @@ function ConfigTabClass:BuildModList() if input[varData.var] then varData.apply(input[varData.var], modList, enemyModList, self.build) end + elseif varData.type == "multiList" then + for i, varControl in ipairs(self.varControls[varData.var].varControlList[1]) do + if not varControl:IsShown() then + break + elseif input[varData.var.."_"..i] then + local extraData = {} + for j, _ in ipairs(varData.extraTypes or {}) do + if not input[varData.var.."_"..i.."_"..j] and placeholder[varData.var.."_"..i.."_"..j] then + extraData[j] = placeholder[varData.var.."_"..i.."_"..j] + else + extraData[j] = input[varData.var.."_"..i.."_"..j] + end + end + varData.apply(input[varData.var.."_"..i], extraData, modList, enemyModList, self.build) + end + end elseif varData.type == "text" then if input[varData.var] then varData.apply(input[varData.var], modList, enemyModList, self.build) diff --git a/src/Data/ModMap.lua b/src/Data/ModMap.lua index 363ce29247..2384a65983 100644 --- a/src/Data/ModMap.lua +++ b/src/Data/ModMap.lua @@ -403,40 +403,38 @@ return { ["of Power"] = { }, -- Monsters gain a Power Charge on Hit }, Prefix = { - { val = "NONE", label = "None" }, - { val = "Armoured", label = "Enemy Phys D R" .. " Physical Damage reduction".."Armoured" }, - { val = "Hexproof", label = "Enemy is Hexproof?" .. " ".."Hexproof" }, - { val = "Hexwarded", label = "Less Curse effect" .. " of Curses on enemy".."Hexwarded" }, - { val = "Resistant", label = "Enemy Resist" .. " has Elemental / Chaos".."Resistant" }, - { val = "Unstoppable", label = "Enemy Cannot Be Slowed Monsters Taunted Action Speed modified below base value".."Unstoppable" }, - { val = "Impervious", label = "avoid Poison and Bleed:" .. " Enemy ".."Impervious" }, - { val = "Savage", label = "Enemy Inc Damage" .. " has increased Damage".."Savage" }, - { val = "Burning", label = "Enemy Phys As Fire Monsters deal to extra Physical Damage".."Burning" }, - { val = "Freezing", label = "Enemy Phys As Cold Monsters deal to extra Physical Damage".."Freezing" }, - { val = "Shocking", label = "Enemy Phys As Lightning Monsters deal to extra Physical Damage".."Shocking" }, - { val = "Profane", label = "Enemy Phys As Chaos Monsters deal to extra Physical Damage Inflict Withered for seconds on Hit Profane" }, - { val = "Fleet", label = "Enemy Inc Speed to increased Monster Movement Attack Cast".."Fleet" }, - { val = "Impaling", label = "Enemy Impale Monsters have chance to with Attacks Impaling" }, - { val = "Conflagrating", label = "Hits always Ignites All Monster Damage from Conflagrating" }, - { val = "Empowered", label = "Elemental Ailments on Hit Monsters have chance to cause Empowered" }, - { val = "Overlord's", label = "Boss Inc Damage / Speed Unique deals increased has Attack and Cast".."Overlord's" }, + { val = "Armoured", label = "Enemy Physical Damage Reduction" .. " ".."Armoured" }, + { val = "Hexproof", label = "Enemy is Hexproof?" .. " ".."Hexproof" }, + { val = "Hexwarded", label = "Less effect of Curses on enemy" .. " ".."Hexwarded" }, + { val = "Resistant", label = "Enemy has Elemental / Chaos Resistances" .. " ".."Resistant" }, + { val = "Unstoppable", label = "Enemy Cannot Be Slowed Monsters Taunted Action Speed modified below base value".."Unstoppable" }, + { val = "Impervious", label = "Enemy chance to avoid Poison and Bleed:" .. " ".."Impervious" }, + { val = "Savage", label = "Enemy increased Damage" .. " ".."Savage", range = true }, + { val = "Burning", label = "Enemy Physical As Extra Fire Monsters deal to Damage".."Burning", range = true }, + { val = "Freezing", label = "Enemy Physical As Extra Cold Monsters deal to Damage".."Freezing", range = true }, + { val = "Shocking", label = "Enemy Physical As Extra Lightning Monsters deal to Damage".."Shocking", range = true }, + { val = "Profane", label = "Enemy Physical As Extra Chaos Monsters deal to Damage Inflict Withered for seconds on Hit Profane", range = true }, + { val = "Fleet", label = "Enemy increased Speed to Monster Movement Attack Cast".."Fleet", range = true }, + { val = "Impaling", label = "Enemy chance to Impale Monsters have with Attacks Impaling" }, + { val = "Conflagrating", label = "Hits always Ignites All Monster Damage from Conflagrating" }, + { val = "Empowered", label = "Elemental Ailments on Hit Monsters have chance to cause Empowered" }, + { val = "Overlord's", label = "Boss increased Damage / Speed Unique deals has Attack and Cast".."Overlord's" }, }, Suffix = { - { val = "NONE", label = "None" }, - { val = "of Congealment", label = "Cannot Leech" .." Life / Mana".."of Congealment" }, - { val = "of Drought", label = "reduced Flask Charges" .. " Gains".."of Drought" }, - { val = "of Exposure", label = "-X% maximum Res" .. " Resistances".."of Exposure" }, - { val = "of Impotence", label = "Less Area of Effect:" .. " ".."of Impotence" }, - { val = "of Insulation", label = "avoid Elemental Ailments:" .. " Enemy".."of Impotence" }, + { val = "of Congealment", label = "Cannot Leech Life / Mana" .." ".."of Congealment" }, + { val = "of Drought", label = "reduced Flask Charges" .. " Gains".."of Drought" }, + { val = "of Exposure", label = "-X% maximum Resistances" .. " ".."of Exposure", range = true }, + { val = "of Impotence", label = "Less Area of Effect:" .. " ".."of Impotence" }, + { val = "of Insulation", label = "Enemy chance to avoid Elemental Ailments:" .. " ".."of Impotence" }, { val = "of Miring", label = "Enemy has inc. Accuracy: / Players have to amount of Suppressed Spell Damage Prevented" .. " ".."of Miring" }, - { val = "of Rust", label = "Reduced Block Chance / less Armour:" .. " ".."of Rust" }, - { val = "of Smothering", label = "Less Recovery Rate of ^xE05030Life ^7and ^x88FFFFEnergy Shield:" .. " ".."of Smothering" }, - { val = "of Stasis", label = "Cannot Regen" .. " Life, Mana or ES".."of Stasis" }, - { val = "of Toughness", label = "Enemy takes red. Extra Crit Damage:" .. " ".."of Toughness" }, - { val = "of Fatigue", label = "Less Cooldown Recovery Players have Rate".."of Fatigue" }, - { val = "of Doubt", label = "Reduced Aura Effect Players have Non-Curse Auras from Skills".."of Doubt" }, - { val = "of Imprecision", label = "Less Accuracy Players have Rating".."of Imprecision" }, - { val = "of Venom", label = "Poison On Hit Monsters of Venom" }, - { val = "of Deadliness", label = "Enemy Critical Strike Monsters have to increased Chance Monster Multiplier".."of Deadliness" }, + { val = "of Rust", label = "Reduced Block Chance / less Armour:" .. " ".."of Rust" }, + { val = "of Smothering", label = "Less Recovery Rate of ^xE05030Life ^7and ^x88FFFFEnergy Shield:" .. " ".."of Smothering" }, + { val = "of Stasis", label = "Cannot Regenerate Life, Mana or ES" .. " ".."of Stasis" }, + { val = "of Toughness", label = "Enemy takes red. Extra Crit Damage:" .. " ".."of Toughness", range = true }, + { val = "of Fatigue", label = "Less Cooldown Recovery Players have Rate".."of Fatigue" }, + { val = "of Doubt", label = "Reduced Non-Curse Aura Effect Players have Auras from Skills".."of Doubt" }, + { val = "of Imprecision", label = "Less Accuracy Rating Players have".."of Imprecision" }, + { val = "of Venom", label = "Poison On Hit Monsters of Venom" }, + { val = "of Deadliness", label = "Enemy Critical Strike Monsters have to increased Chance Monster Multiplier".."of Deadliness", range = true }, }, } \ No newline at end of file diff --git a/src/Modules/ConfigOptions.lua b/src/Modules/ConfigOptions.lua index 902dabc18f..8d14d980b3 100644 --- a/src/Modules/ConfigOptions.lua +++ b/src/Modules/ConfigOptions.lua @@ -114,21 +114,38 @@ local function mapAffixTooltip(tooltip, mode, index, value) end end -local function mapAffixDropDownFunction(val, modList, enemyModList, build) +local function mapAffixDropDownFunction(val, extraData, modList, enemyModList, build) if val ~= "NONE" then + local effect = (1 + (build.configTab.input['multiplierMapModEffect'] or 0)/100) + local tier = (build.configTab.varControls['multiplierMapModTier'].selIndex or 1) local affixData = data.mapMods.AffixData[val] or {} if affixData.apply then if affixData.type == "check" then - affixData.apply(var, (1 + (build.configTab.input['multiplierMapModEffect'] or 0)/100), modList, enemyModList) + affixData.apply(var, effect, modList, enemyModList) elseif affixData.type == "list" then - affixData.apply(4 - (build.configTab.varControls['multiplierMapModTier'].selIndex or 1), (1 + (build.configTab.input['multiplierMapModEffect'] or 0)/100), affixData.values, modList, enemyModList) + affixData.apply(tier, effect, affixData.values, modList, enemyModList) elseif affixData.type == "count" then - affixData.apply(4 - (build.configTab.varControls['multiplierMapModTier'].selIndex or 1), 100, (1 + (build.configTab.input['multiplierMapModEffect'] or 0)/100), affixData.values, modList, enemyModList) + affixData.apply(tier, extraData[1] or 100, effect, affixData.values, modList, enemyModList) end end end end +local function ShrineTooltip(tooltip, mode, index, value) + tooltip:Clear() + if value.val == "NONE" then + return + end + local applyModes = { BODY = true, HOVER = true } + if applyModes[mode] then + if value.val == "ALL" then + tooltip:AddLine(14, '^7'.."Applies all Shrine effects to the player.") + else + tooltip:AddLine(14, '^7'.."Applies a "..value.label.." effect to the player.") + end + end +end + return { -- Section: General options { section = "General", col = 1 }, @@ -704,22 +721,28 @@ Huge sets the radius to 11. { var = "multiplierSextant", type = "count", label = "# of Sextants affecting the area", ifMult = "Sextant", apply = function(val, modList, enemyModList) modList:NewMod("Multiplier:Sextant", "BASE", m_min(val, 5), "Config") end }, + --{ subsection = "Map Mods", { var = "multiplierMapModEffect", type = "count", label = "% increased effect of map mods" }, - { var = "multiplierMapModTier", type = "list", label = "Map Tier", list = { {val = "HIGH", label = "Red"}, {val = "MED", label = "Yellow"}, {val = "LOW", label = "White"} } }, - { label = "Map Prefix Modifiers:" }, - { var = "MapPrefix1", type = "list", label = "Prefix", tooltipFunc = mapAffixTooltip, list = data.mapMods.Prefix, apply = mapAffixDropDownFunction }, - { var = "MapPrefix2", type = "list", label = "Prefix", tooltipFunc = mapAffixTooltip, list = data.mapMods.Prefix, apply = mapAffixDropDownFunction }, - { var = "MapPrefix3", type = "list", label = "Prefix", tooltipFunc = mapAffixTooltip, list = data.mapMods.Prefix, apply = mapAffixDropDownFunction }, - { var = "MapPrefix4", type = "list", label = "Prefix", tooltipFunc = mapAffixTooltip, list = data.mapMods.Prefix, apply = mapAffixDropDownFunction }, - { label = "Map Suffix Modifiers:" }, - { var = "MapSuffix1", type = "list", label = "Suffix", tooltipFunc = mapAffixTooltip, list = data.mapMods.Suffix, apply = mapAffixDropDownFunction }, - { var = "MapSuffix2", type = "list", label = "Suffix", tooltipFunc = mapAffixTooltip, list = data.mapMods.Suffix, apply = mapAffixDropDownFunction }, - { var = "MapSuffix3", type = "list", label = "Suffix", tooltipFunc = mapAffixTooltip, list = data.mapMods.Suffix, apply = mapAffixDropDownFunction }, - { var = "MapSuffix4", type = "list", label = "Suffix", tooltipFunc = mapAffixTooltip, list = data.mapMods.Suffix, apply = mapAffixDropDownFunction }, + { var = "multiplierMapModTier", type = "list", defaultIndex = 3, label = "Map Tier", list = { {val = "LOW", label = "White"}, {val = "MED", label = "Yellow"}, {val = "HIGH", label = "Red"}, {val = "UBER", label = "T17"} } }, + { var = "MapPrefixes", type = "multiList", maxElements = 4, extraTypes = { { "slider", "range of the map mod", "range", 100 } }, showAll = true, label = "Map Prefix Modifiers:" , tooltipFunc = mapAffixTooltip, list = data.mapMods.Prefix, apply = mapAffixDropDownFunction }, + { var = "MapSuffixes", type = "multiList", maxElements = 4, extraTypes = { { "slider", "range of the map mod", "range", 100 } }, showAll = true, label = "Map Suffix Modifiers:" , tooltipFunc = mapAffixTooltip, list = data.mapMods.Suffix, apply = mapAffixDropDownFunction }, { label = "Unique Map Modifiers:" }, { var = "PvpScaling", type = "check", label = "PvP damage scaling in effect", tooltip = "'Hall of Grandmasters'", apply = function(val, modList, enemyModList) modList:NewMod("HasPvpScaling", "FLAG", true, "Config") end }, + --} + { var = "atlasShrineEffect", type = "count", label = "Other % Increased Effect of Shrines", tooltip = "Sets the amount of increased shrine effect you are getting from other sources like the atlas tree", apply = function(val, modList, enemyModList) + modList:NewMod("ShrineBuffEffect", "INC", val, "Config") + end}, + { var = "Shrines", type = "multiList", label = "Shrines:" , tooltipFunc = ShrineTooltip, list = data.shrines.List, apply = function(val, extra, modList, enemyModList) + if val == "ALL" then + for _, shrine in ipairs(data.shrines.List) do + modList:NewMod(shrine.val, "FLAG", true, "Config", { type = "Condition", var = "Combat" }) + end + elseif val ~= "NONE" then + modList:NewMod(val, "FLAG", true, "Config", { type = "Condition", var = "Combat" }) + end + end}, { label = "Player is cursed by:" }, { var = "playerCursedWithAssassinsMark", type = "count", label = "Assassin's Mark:", tooltip = "Sets the level of Assassin's Mark to apply to the player.", apply = function(val, modList, enemyModList) modList:NewMod("ExtraCurse", "LIST", { skillId = "AssassinsMark", level = val, applyToPlayer = true }) diff --git a/src/Modules/Data.lua b/src/Modules/Data.lua index 7a35d045c9..85c8a8cf5a 100644 --- a/src/Modules/Data.lua +++ b/src/Modules/Data.lua @@ -571,6 +571,37 @@ do setmetatable(data.costs, { __index = function(t, k) return t[map[k]] end }) end data.mapMods = LoadModule("Data/ModMap") +data.shrines = { List = { + --{ val = "AccelerationShrine", label = "Acceleration Shrine" }, + --{ val = "BrutalShrine", label = "Brutal Shrine" }, + { val = "DiamondShrine", label = "Diamond Shrine" }, + --{ val = "DivineShrine", label = "Divine Shrine" }, + --{ val = "EchoingShrine", label = "Echoing Shrine" }, + --{ val = "FreezingShrine", label = "Freezing Shrine" }, + --{ val = "GloomShrine", label = "Gloom Shrine" }, + --{ val = "ImpenetrableShrine", label = "Impenetrable Shrine" }, + --{ val = "LightningShrine", label = "Lightning Shrine" }, + { val = "MassiveShrine", label = "Massive Shrine" }, + --{ val = "ReplenishingShrine", label = "Replenishing Shrine" }, + --{ val = "ResonatingShrine", label = "Resonating Shrine" }, + --{ val = "ResistanceShrine", label = "Resistance Shrine" }, + --{ val = "LesserAccelerationShrine", label = "Lesser Acceleration Shrine" }, + { val = "LesserBrutalShrine", label = "Lesser Brutal Shrine" }, + --{ val = "LesserImpenetrableShrine", label = "Lesser Impenetrable Shrine" }, + { val = "LesserMassiveShrine", label = "Lesser Massive Shrine" }, + --{ val = "LesserReplenishingShrine", label = "Lesser Replenishing Shrine" }, + --{ val = "LesserResistanceShrine", label = "Lesser Resistance Shrine" }, + --{ val = "EvolvingShrine", label = "Evolving Shrine" }, + --{ val = "WarlordsShrine", label = "Warlord's Shrine" }, + --{ val = "CrusadersShrine", label = "Crusader's Shrine" }, + --{ val = "RedeemersShrine", label = "Redeemer's Shrine" }, + --{ val = "HuntersShrine", label = "Hunter's Shrine" }, + --{ val = "CovetousShrine", label = "Covetous Shrine" }, + --{ val = "TsoagothShrine", label = "Tsoagoth Shrine" }, + --{ val = "LunarisShrine", label = "Lunaris Shrine" }, + --{ val = "SolarisShrine", label = "Solaris Shrine" }, + --{ val = "ArakaaliShrine", label = "Arakaali Shrine" }, +}} -- Manually seeded modifier tag against item slot table for Mastery Item Condition based modifiers -- Data is informed by getTagBasedModifiers() located in Item.lua