Release 1.4.6
- Fixed Onslaught/Unholy Might
This commit is contained in:
@@ -7,9 +7,10 @@ local launch, main = ...
|
||||
|
||||
local t_insert = table.insert
|
||||
local m_max = math.max
|
||||
local m_floor = math.floor
|
||||
|
||||
local varList = {
|
||||
{ section = "General" },
|
||||
{ section = "General", col = 1 },
|
||||
{ var = "enemyLevel", type = "number", label = "Enemy Level:", tooltip = "This overrides the default enemy level used to estimate your hit and evade chances.\nThe default level is your character level, capped at 84, which is the same value\nused in-game to calculate the stats on the character sheet." },
|
||||
{ var = "conditionLowLife", type = "check", label = "Are you always on Low Life?", ifCond = "LowLife", tooltip = "You will automatically be considered to be on Low Life if you have at least 65% life reserved,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("Condition:LowLife", "FLAG", true, "Config")
|
||||
@@ -21,7 +22,125 @@ local varList = {
|
||||
modList:NewMod("Condition:FullEnergyShield", "FLAG", true, "Config")
|
||||
end },
|
||||
{ var = "igniteMode", type = "list", label = "Ignite calculation mode:", tooltip = "Controls how the base damage for ignite is calculated:\nAverage Damage: Ignite is based on the average damage dealt, factoring in crits and non-crits.\nCrit Damage: Ignite is based on crit damage only.", list = {{val="AVERAGE",label="Average Damage"},{val="CRIT",label="Crit Damage"}} },
|
||||
{ section = "When In Combat" },
|
||||
{ section = "Skill Options", col = 2 },
|
||||
{ label = "Raise Spectre:", ifSkill = "Raise Spectre" },
|
||||
{ var = "raiseSpectreSpectreLevel", type = "number", label = "Spectre Level:", ifSkill = "Raise Spectre", tooltip = "Sets the level of the raised spectre.\nThe default level is the level requirement of the Raise Spectre skill.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("SkillData", "LIST", { key = "minionLevel", value = val }, "Config", { type = "SkillName", skillName = "Raise Spectre" })
|
||||
end },
|
||||
{ var = "raiseSpectreEnableCurses", type = "check", label = "Enable curses:", ifSkill = "Raise Spectre", tooltip = "Enable any curse skills that your spectres have.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("SkillData", "LIST", { key = "enable", value = true }, "Config", { type = "SkillType", skillType = SkillType.Curse }, { type = "SkillName", skillName = "Raise Spectre", summonSkill = true })
|
||||
end },
|
||||
{ var = "raiseSpectreBladeVortexBladeCount", type = "number", label = "Blade Vortex blade count:", ifSkillList = {"DemonModularBladeVortexSpectre","GhostPirateBladeVortexSpectre"}, tooltip = "Sets the blade count for Blade Vortex skills used by spectres.\nDefault is 1; maximum is 5.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("SkillData", "LIST", { key = "dpsMultiplier", value = val }, "Config", { type = "SkillId", skillId = "DemonModularBladeVortexSpectre" })
|
||||
modList:NewMod("SkillData", "LIST", { key = "dpsMultiplier", value = val }, "Config", { type = "SkillId", skillId = "GhostPirateBladeVortexSpectre" })
|
||||
end },
|
||||
{ label = "Summon Lightning Golem:", ifSkill = "Summon Lightning Golem" },
|
||||
{ var = "summonLightningGolemEnableWrath", type = "check", label = "Enable Wrath Aura:", ifSkill = "Summon Lightning Golem", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("SkillData", "LIST", { key = "enable", value = true }, "Config", { type = "SkillId", skillId = "LightningGolemWrath" })
|
||||
end },
|
||||
--[[ { section = "Map Modifiers and Player Debuffs", col = 2 },
|
||||
{ label = "Player is cursed by:" },
|
||||
{ var = "playerCursedWithAssassinsMark", type = "number", 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", { name = "Assassin's Mark", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithConductivity", type = "number", label = "Conductivity:", tooltip = "Sets the level of Conductivity to apply to the player.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Conductivity", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithElementalWeakness", type = "number", label = "Elemental Weakness:", tooltip = "Sets the level of Elemental Weakness to apply to the player.\nIn mid tier maps, 'of Elemental Weakness' applies level 10.\nIn high tier maps, 'of Elemental Weakness' applies level 15.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Elemental Weakness", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithEnfeeble", type = "number", label = "Enfeeble:", tooltip = "Sets the level of Enfeeble to apply to the player.\nIn mid tier maps, 'of Enfeeblement' applies level 10.\nIn high tier maps, 'of Enfeeblement' applies level 15.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Enfeeble", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithFlammability", type = "number", label = "Flammability:", tooltip = "Sets the level of Flammability to apply to the player.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Flammability", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithFrostbite", type = "number", label = "Frostbite:", tooltip = "Sets the level of Frostbite to apply to the player.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Frostbite", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithPoachersMark", type = "number", label = "Poacher's Mark:", tooltip = "Sets the level of Poacher's Mark to apply to the player.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Poacher's Mark", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithProjectileWeakness", type = "number", label = "Projectile Weakness:", tooltip = "Sets the level of Projectile Weakness to apply to the player.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Projectile Weakness", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithTemporalChains", type = "number", label = "Temporal Chains:", tooltip = "Sets the level of Temporal Chains to apply to the player.\nIn mid tier maps, 'of Temporal Chains' applies level 10.\nIn high tier maps, 'of Temporal Chains' applies level 15.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Temporal Chains", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithVulnerability", type = "number", label = "Vulnerability:", tooltip = "Sets the level of Vulnerability to apply to the player.\nIn mid tier maps, 'of Vulnerability' applies level 10.\nIn high tier maps, 'of Vulnerability' applies level 15.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Vulnerability", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ var = "playerCursedWithWarlordsMark", type = "number", label = "Warlord's Mark:", tooltip = "Sets the level of Warlord's Mark to apply to the player.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("ExtraCurse", "LIST", { name = "Warlord's Mark", level = val, applyToPlayer = true })
|
||||
end },
|
||||
{ label = "Map Prefix Modifiers:" },
|
||||
{ var = "enemyHasPhysicalReduction", type = "list", label = "Enemy Physical Damage reduction:", list = {{val=0,label="No"},{val=20,label="20% (Low tier)"},{val=30,label="30% (Mid tier)"},{val=40,label="40% (High tier)"}}, apply = function(val, modList, enemyModList)
|
||||
enemyModList:NewMod("PhysicalDamageReduction", "INC", val, "Config")
|
||||
end },
|
||||
{ var = "enemyHasLessCurseEffectOnSelf", type = "list", label = "Less effect of Curses on Enemy:", list = {{val=0,label="No"},{val=25,label="25% (Low tier)"},{val=40,label="40% (Mid tier)"},{val=60,label="60% (High tier)"}}, apply = function(val, modList, enemyModList)
|
||||
if val ~= 0 then
|
||||
enemyModList:NewMod("CurseEffectOnSelf", "MORE", -val, "Config")
|
||||
end
|
||||
end },
|
||||
{ label = "Map Suffix Modifiers:" },
|
||||
{ var = "playerHasElementalEquilibrium", type = "check", label = "Player has Elemental Equilibrium?", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("Keystone", "LIST", "Elemental Equilibrium", "Config")
|
||||
end },
|
||||
{ var = "playerHasPointBlank", type = "check", label = "Player has Point Blank?", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("Keystone", "LIST", "Point Blank", "Config")
|
||||
end },
|
||||
{ var = "playerGainsReducedFlaskCharges", type = "list", label = "Gains reduced Flask Charges:", list = {{val=0,label="No"},{val=30,label="30% (Low tier)"},{val=40,label="40% (Mid tier)"},{val=50,label="50% (High tier)"}}, apply = function(val, modList, enemyModList)
|
||||
if val ~= 0 then
|
||||
modList:NewMod("FlaskChargesGained", "INC", -val, "Config")
|
||||
end
|
||||
end },
|
||||
{ var = "playerHasLessAreaOfEffect", type = "list", label = "Less Area of Effect:", list = {{val=0,label="No"},{val=15,label="15% (Low tier)"},{val=20,label="20% (Mid tier)"},{val=25,label="25% (High tier)"}}, apply = function(val, modList, enemyModList)
|
||||
if val ~= 0 then
|
||||
modList:NewMod("AreaOfEffect", "MORE", -val, "Config")
|
||||
end
|
||||
end },
|
||||
{ var = "enemyHasIncreasedAccuracy", type = "list", label = "Unlucky Dodge/Enemy has inc. Acc.:", list = {{val=0,label="No"},{val=30,label="30% (Low tier)"},{val=40,label="40% (Mid tier)"},{val=50,label="50% (High tier)"}}, apply = function(val, modList, enemyModList)
|
||||
if val ~= 0 then
|
||||
modList:NewMod("DodgeChanceIsUnlucky", "FLAG", true, "Config")
|
||||
enemyModList:NewMod("Accuracy", "INC", val, "Config")
|
||||
end
|
||||
end },
|
||||
{ var = "playerHasLessArmourandBlock", type = "list", label = "Reduced Block Chance/less Armour:", list = {{val=0,label="No"},{val="LOW",label="20%/20% (Low tier)"},{val="MID",label="30%/25% (Mid tier)"},{val="HIGH",label="40%/30% (High tier)"}}, apply = function(val, modList, enemyModList)
|
||||
local map = { ["LOW"] = {20,20}, ["MID"] = {30,25}, ["HIGH"] = {40,30} }
|
||||
if map[val] then
|
||||
modList:NewMod("BlockChance", "INC", -map[val][1], "Config")
|
||||
modList:NewMod("Armour", "LESS", -map[val][2], "Config")
|
||||
end
|
||||
end },
|
||||
{ var = "playerHasLessLifeESRecovery", type = "list", label = "Less Recovery of Life & Energy Shield:", list = {{val=0,label="No"},{val=20,label="20% (Low tier)"},{val=40,label="40% (Mid tier)"},{val=60,label="60% (High tier)"}}, apply = function(val, modList, enemyModList)
|
||||
if val ~= 0 then
|
||||
modList:NewMod("LifeRecovery", "MORE", -val, "Config")
|
||||
modList:NewMod("EnergyShieldRecovery", "MORE", -val, "Config")
|
||||
end
|
||||
end },
|
||||
{ var = "enemyTakesReducedExtraCritDamage", type = "number", label = "Enemy takes red. Extra Crit Damage:", tooltip = "Low tier: 25-30%\nMid tier: 31-35%\nHigh tier: 36-40%" , apply = function(val, modList, enemyModList)
|
||||
if val ~= 0 then
|
||||
enemyModList:NewMod("SelfCritMultiplier", "INC", -val, "Config")
|
||||
end
|
||||
end },
|
||||
{ var = "playerHasMinusMaxResist", type = "number", label = "-X% maximum Resistances:", tooltip = "Mid tier: 5-8%\nHigh tier: 9-12%", apply = function(val, modList, enemyModList)
|
||||
if val ~= 0 then
|
||||
modList:NewMod("FireResistMax", "BASE", -val, "Config")
|
||||
modList:NewMod("ColdResistMax", "BASE", -val, "Config")
|
||||
modList:NewMod("LightningResistMax", "BASE", -val, "Config")
|
||||
modList:NewMod("ChaosResistMax", "BASE", -val, "Config")
|
||||
end
|
||||
end },
|
||||
{ var = "playerCannotRegenLifeManaEnergyShield", type = "check", label = "Cannot Regen Life/Mana/ES?", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("NoLifeRegen", "FLAG", true, "Config")
|
||||
modList:NewMod("NoEnergyShieldRegen", "FLAG", true, "Config")
|
||||
modList:NewMod("NoManaRegen", "FLAG", true, "Config")
|
||||
end },
|
||||
{ var = "playerCannotLeech", type = "check", label = "Cannot Leech Life/Mana?", apply = function(val, modList, enemyModList)
|
||||
enemyModList:NewMod("CannotLeechLifeFromSelf", "FLAG", true, "Config")
|
||||
enemyModList:NewMod("CannotLeechManaFromSelf", "FLAG", true, "Config")
|
||||
end },]]
|
||||
{ section = "When In Combat", col = 1 },
|
||||
{ var = "usePowerCharges", type = "check", label = "Do you use Power Charges?", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("UsePowerCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" })
|
||||
end },
|
||||
@@ -154,7 +273,7 @@ local varList = {
|
||||
{ var = "conditionBlockedHitFromUniqueEnemyRecently", type = "check", label = "Blocked hit from a Unique Recently?", ifNode = 63490, apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("Condition:BlockedHitFromUniqueEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" })
|
||||
end },
|
||||
{ section = "For Effective DPS" },
|
||||
{ section = "For Effective DPS", col = 1 },
|
||||
{ var = "critChanceLucky", type = "check", label = "Is your Crit Chance Lucky?", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("CritChanceLucky", "FLAG", true, "Config", { type = "Condition", var = "Effective" })
|
||||
end },
|
||||
@@ -257,22 +376,6 @@ local varList = {
|
||||
enemyModList:NewMod("Condition:HitByLightningDamage", "FLAG", true, "Config")
|
||||
end },
|
||||
{ var = "EEIgnoreHitDamage", type = "check", label = "Ignore Skill Hit Damage?", ifNode = 39085, tooltip = "This option prevents EE from being reset by the hit damage of your main skill." },
|
||||
{ section = "Skill Options" },
|
||||
{ label = "Raise Spectre:", ifSkill = "Raise Spectre" },
|
||||
{ var = "raiseSpectreSpectreLevel", type = "number", label = "Spectre Level:", ifSkill = "Raise Spectre", tooltip = "Sets the level of the raised spectre.\nThe default level is the level requirement of the Raise Spectre skill.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("SkillData", "LIST", { key = "minionLevel", value = val }, "Config", { type = "SkillName", skillName = "Raise Spectre" })
|
||||
end },
|
||||
{ var = "raiseSpectreEnableCurses", type = "check", label = "Enable curses:", ifSkill = "Raise Spectre", tooltip = "Enable any curse skills that your spectres have.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("SkillData", "LIST", { key = "enable", value = true }, "Config", { type = "SkillType", skillType = SkillType.Curse }, { type = "SkillName", skillName = "Raise Spectre", summonSkill = true })
|
||||
end },
|
||||
{ var = "raiseSpectreBladeVortexBladeCount", type = "number", label = "Blade Vortex blade count:", ifSkillList = {"DemonModularBladeVortexSpectre","GhostPirateBladeVortexSpectre"}, tooltip = "Sets the blade count for Blade Vortex skills used by spectres.\nDefault is 1; maximum is 5.", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("SkillData", "LIST", { key = "dpsMultiplier", value = val }, "Config", { type = "SkillId", skillId = "DemonModularBladeVortexSpectre" })
|
||||
modList:NewMod("SkillData", "LIST", { key = "dpsMultiplier", value = val }, "Config", { type = "SkillId", skillId = "GhostPirateBladeVortexSpectre" })
|
||||
end },
|
||||
{ label = "Summon Lightning Golem:", ifSkill = "Summon Lightning Golem" },
|
||||
{ var = "summonLightningGolemEnableWrath", type = "check", label = "Enable Wrath Aura:", ifSkill = "Summon Lightning Golem", apply = function(val, modList, enemyModList)
|
||||
modList:NewMod("SkillData", "LIST", { key = "enable", value = true }, "Config", { type = "SkillId", skillId = "LightningGolemWrath" })
|
||||
end },
|
||||
}
|
||||
|
||||
local ConfigTabClass = common.NewClass("ConfigTab", "UndoHandler", "ControlHost", "Control", function(self, build)
|
||||
@@ -294,6 +397,7 @@ local ConfigTabClass = common.NewClass("ConfigTab", "UndoHandler", "ControlHost"
|
||||
if varData.section then
|
||||
lastSection = common.New("SectionControl", {"TOPLEFT",self,"TOPLEFT"}, 0, 0, 360, 0, varData.section)
|
||||
lastSection.varControlList = { }
|
||||
lastSection.col = varData.col
|
||||
lastSection.height = function(self)
|
||||
local height = 20
|
||||
for _, varControl in pairs(self.varControlList) do
|
||||
@@ -392,6 +496,8 @@ local ConfigTabClass = common.NewClass("ConfigTab", "UndoHandler", "ControlHost"
|
||||
t_insert(lastSection.varControlList, control)
|
||||
end
|
||||
end
|
||||
|
||||
self.controls.scrollBar = common.New("ScrollBarControl", {"TOPRIGHT",self,"TOPRIGHT"}, 0, 0, 18, 0, 50, "VERTICAL", true)
|
||||
end)
|
||||
|
||||
function ConfigTabClass:Load(xml, fileName)
|
||||
@@ -464,7 +570,18 @@ function ConfigTabClass:Draw(viewPort, inputEvents)
|
||||
end
|
||||
|
||||
self:ProcessControlsInput(inputEvents, viewPort)
|
||||
for id, event in ipairs(inputEvents) do
|
||||
if event.type == "KeyUp" then
|
||||
if event.key == "WHEELDOWN" then
|
||||
self.controls.scrollBar:Scroll(1)
|
||||
elseif event.key == "WHEELUP" then
|
||||
self.controls.scrollBar:Scroll(-1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local maxCol = m_floor((viewPort.width - 10) / 370)
|
||||
local maxColY = 0
|
||||
local colY = { }
|
||||
for _, section in ipairs(self.sectionList) do
|
||||
local y = 14
|
||||
@@ -481,20 +598,32 @@ function ConfigTabClass:Draw(viewPort, inputEvents)
|
||||
section.shown = doShow
|
||||
if doShow then
|
||||
local width, height = section:GetSize()
|
||||
local col = 1
|
||||
while true do
|
||||
colY[col] = colY[col] or 18
|
||||
if colY[col] + height + 10 <= viewPort.height then
|
||||
break
|
||||
local col
|
||||
if section.col and (colY[section.col] or 0) + height + 28 <= viewPort.height then
|
||||
col = section.col
|
||||
else
|
||||
col = 1
|
||||
for c = 2, maxCol do
|
||||
colY[c] = colY[c] or 0
|
||||
if colY[c] < colY[col] then
|
||||
col = c
|
||||
end
|
||||
end
|
||||
col = col + 1
|
||||
end
|
||||
section.x = 10 + (col - 1) * 360
|
||||
section.y = colY[col]
|
||||
colY[col] = colY[col] or 0
|
||||
section.x = 10 + (col - 1) * 370
|
||||
section.y = colY[col] + 18
|
||||
colY[col] = colY[col] + height + 18
|
||||
maxColY = m_max(maxColY, colY[col])
|
||||
end
|
||||
end
|
||||
|
||||
self.controls.scrollBar.height = viewPort.height
|
||||
self.controls.scrollBar:SetContentDimension(maxColY + 10, viewPort.height)
|
||||
for _, section in ipairs(self.sectionList) do
|
||||
section.y = section.y - self.controls.scrollBar.offset
|
||||
end
|
||||
|
||||
main:DrawBackground(viewPort)
|
||||
|
||||
self:DrawControls(viewPort)
|
||||
|
||||
@@ -885,7 +885,7 @@ function ItemsTabClass:AddItemTooltip(item, slot, dbMode)
|
||||
for index, modLine in pairs(item.modLines) do
|
||||
if not modLine.buff and (not modLine.variantList or modLine.variantList[item.variant]) then
|
||||
local line = (not dbMode and modLine.range and itemLib.applyRange(modLine.line, modLine.range)) or modLine.line
|
||||
if not line:match("^%+?0[^%.]") and not line:match(" 0%-0 ") and not line:match(" 0 to 0 ") then -- Hack to hide 0-value modifiers
|
||||
if not line:match("^%+?0%%? ") and not line:match(" %+?0%%? ") and not line:match(" 0%-0 ") and not line:match(" 0 to 0 ") then -- Hack to hide 0-value modifiers
|
||||
local colorCode
|
||||
if modLine.extra then
|
||||
colorCode = data.colorCodes.UNSUPPORTED
|
||||
|
||||
@@ -198,36 +198,42 @@ function calcs.defence(env, actor)
|
||||
end
|
||||
|
||||
-- Mana, life and energy shield regen
|
||||
do
|
||||
if modDB:Sum("FLAG", nil, "NoManaRegen") then
|
||||
output.ManaRegen = 0
|
||||
else
|
||||
output.ManaRegen = round((modDB:Sum("BASE", nil, "ManaRegen") + output.Mana * modDB:Sum("BASE", nil, "ManaRegenPercent") / 100) * calcLib.mod(modDB, nil, "ManaRegen", "ManaRecovery"), 1)
|
||||
if breakdown then
|
||||
breakdown.ManaRegen = breakdown.simple(nil, nil, output.ManaRegen, "ManaRegen", "ManaRecovery")
|
||||
end
|
||||
if modDB:Sum("FLAG", nil, "NoLifeRegen") then
|
||||
output.LifeRegen = 0
|
||||
elseif modDB:Sum("FLAG", nil, "ZealotsOath") then
|
||||
output.LifeRegen = 0
|
||||
local lifeBase = modDB:Sum("BASE", nil, "LifeRegen")
|
||||
if lifeBase > 0 then
|
||||
modDB:NewMod("EnergyShieldRegen", "BASE", lifeBase, "Zealot's Oath")
|
||||
end
|
||||
local lifePercent = modDB:Sum("BASE", nil, "LifeRegenPercent")
|
||||
if lifePercent > 0 then
|
||||
modDB:NewMod("EnergyShieldRegenPercent", "BASE", lifePercent, "Zealot's Oath")
|
||||
end
|
||||
else
|
||||
local lifeBase = modDB:Sum("BASE", nil, "LifeRegen")
|
||||
local lifePercent = modDB:Sum("BASE", nil, "LifeRegenPercent")
|
||||
if lifePercent > 0 then
|
||||
lifeBase = lifeBase + output.Life * lifePercent / 100
|
||||
end
|
||||
if lifeBase > 0 then
|
||||
output.LifeRegen = lifeBase * calcLib.mod(modDB, nil, "LifeRecovery")
|
||||
output.LifeRegenPercent = round(output.LifeRegen / output.Life * 100, 1)
|
||||
else
|
||||
output.LifeRegen = 0
|
||||
end
|
||||
end
|
||||
if modDB:Sum("FLAG", nil, "NoLifeRegen") then
|
||||
output.LifeRegen = 0
|
||||
elseif modDB:Sum("FLAG", nil, "ZealotsOath") then
|
||||
output.LifeRegen = 0
|
||||
local lifeBase = modDB:Sum("BASE", nil, "LifeRegen")
|
||||
if lifeBase > 0 then
|
||||
modDB:NewMod("EnergyShieldRegen", "BASE", lifeBase, "Zealot's Oath")
|
||||
end
|
||||
local lifePercent = modDB:Sum("BASE", nil, "LifeRegenPercent")
|
||||
if lifePercent > 0 then
|
||||
modDB:NewMod("EnergyShieldRegenPercent", "BASE", lifePercent, "Zealot's Oath")
|
||||
end
|
||||
else
|
||||
local lifeBase = modDB:Sum("BASE", nil, "LifeRegen")
|
||||
local lifePercent = modDB:Sum("BASE", nil, "LifeRegenPercent")
|
||||
if lifePercent > 0 then
|
||||
lifeBase = lifeBase + output.Life * lifePercent / 100
|
||||
end
|
||||
if lifeBase > 0 then
|
||||
output.LifeRegen = lifeBase * calcLib.mod(modDB, nil, "LifeRecovery")
|
||||
output.LifeRegenPercent = round(output.LifeRegen / output.Life * 100, 1)
|
||||
else
|
||||
output.LifeRegen = 0
|
||||
end
|
||||
end
|
||||
if modDB:Sum("FLAG", nil, "NoEnergyShieldRegen") then
|
||||
output.EnergyShieldRegen = 0
|
||||
else
|
||||
local esBase = modDB:Sum("BASE", nil, "EnergyShieldRegen")
|
||||
local esPercent = modDB:Sum("BASE", nil, "EnergyShieldRegenPercent")
|
||||
if esPercent > 0 then
|
||||
@@ -289,6 +295,10 @@ function calcs.defence(env, actor)
|
||||
end
|
||||
output.AttackDodgeChance = m_min(modDB:Sum("BASE", nil, "AttackDodgeChance"), 75)
|
||||
output.SpellDodgeChance = m_min(modDB:Sum("BASE", nil, "SpellDodgeChance"), 75)
|
||||
if modDB:Sum("FLAG", nil, "DodgeChanceIsUnlucky") then
|
||||
output.AttackDodgeChance = output.AttackDodgeChance / 100 * output.AttackDodgeChance
|
||||
output.SpellDodgeChance = output.SpellDodgeChance / 100 * output.SpellDodgeChance
|
||||
end
|
||||
local stunChance = 100 - modDB:Sum("BASE", nil, "AvoidStun")
|
||||
if output.EnergyShield > output.Life * 2 then
|
||||
stunChance = stunChance * 0.5
|
||||
|
||||
@@ -716,20 +716,20 @@ function calcs.offence(env, actor)
|
||||
t_insert(breakdown[damageType], s_format("= %d to %d", min, max))
|
||||
end
|
||||
if skillFlags.mine or skillFlags.trap or skillFlags.totem then
|
||||
if not modDB:Sum("FLAG", cfg, "CannotLeechLife") then
|
||||
if not modDB:Sum("FLAG", cfg, "CannotLeechLife") and not enemyDB:Sum("FLAG", nil, "CannotLeechLifeFromSelf") then
|
||||
local lifeLeech = modDB:Sum("BASE", cfg, "DamageLifeLeechToPlayer")
|
||||
if lifeLeech > 0 then
|
||||
lifeLeechTotal = lifeLeechTotal + (min + max) / 2 * lifeLeech / 100
|
||||
end
|
||||
end
|
||||
else
|
||||
if not modDB:Sum("FLAG", cfg, "CannotLeechLife") then
|
||||
if not modDB:Sum("FLAG", cfg, "CannotLeechLife") and not enemyDB:Sum("FLAG", nil, "CannotLeechLifeFromSelf") then
|
||||
local lifeLeech = modDB:Sum("BASE", cfg, "DamageLeech", "DamageLifeLeech", damageType.."DamageLifeLeech", isElemental[damageType] and "ElementalDamageLifeLeech" or nil) + enemyDB:Sum("BASE", nil, "SelfDamageLifeLeech") / 100
|
||||
if lifeLeech > 0 then
|
||||
lifeLeechTotal = lifeLeechTotal + (min + max) / 2 * lifeLeech / 100
|
||||
end
|
||||
end
|
||||
if not modDB:Sum("FLAG", cfg, "CannotLeechMana") then
|
||||
if not modDB:Sum("FLAG", cfg, "CannotLeechMana") and not enemyDB:Sum("FLAG", nil, "CannotLeechManaFromSelf") then
|
||||
local manaLeech = modDB:Sum("BASE", cfg, "DamageLeech", "DamageManaLeech", damageType.."DamageManaLeech", isElemental[damageType] and "ElementalDamageManaLeech" or nil) + enemyDB:Sum("BASE", nil, "SelfDamageManaLeech") / 100
|
||||
if manaLeech > 0 then
|
||||
manaLeechTotal = manaLeechTotal + (min + max) / 2 * manaLeech / 100
|
||||
@@ -801,9 +801,9 @@ function calcs.offence(env, actor)
|
||||
output.EnergyShieldOnHit = 0
|
||||
output.ManaOnHit = 0
|
||||
else
|
||||
output.LifeOnHit = modDB:Sum("BASE", skillCfg, "LifeOnHit") + enemyDB:Sum("BASE", skillCfg, "SelfLifeOnHit")
|
||||
output.EnergyShieldOnHit = modDB:Sum("BASE", skillCfg, "EnergyShieldOnHit") + enemyDB:Sum("BASE", skillCfg, "SelfEnergyShieldOnHit")
|
||||
output.ManaOnHit = modDB:Sum("BASE", skillCfg, "ManaOnHit") + enemyDB:Sum("BASE", skillCfg, "SelfManaOnHit")
|
||||
output.LifeOnHit = (modDB:Sum("BASE", skillCfg, "LifeOnHit") + enemyDB:Sum("BASE", skillCfg, "SelfLifeOnHit")) * calcLib.mod(modDB, nil, "LifeRecovery")
|
||||
output.EnergyShieldOnHit = (modDB:Sum("BASE", skillCfg, "EnergyShieldOnHit") + enemyDB:Sum("BASE", skillCfg, "SelfEnergyShieldOnHit")) * calcLib.mod(modDB, nil, "EnergyShieldRecovery")
|
||||
output.ManaOnHit = (modDB:Sum("BASE", skillCfg, "ManaOnHit") + enemyDB:Sum("BASE", skillCfg, "SelfManaOnHit")) * calcLib.mod(modDB, nil, "ManaRecovery")
|
||||
end
|
||||
output.LifeOnHitRate = output.LifeOnHit * hitRate
|
||||
output.EnergyShieldOnHitRate = output.EnergyShieldOnHit * hitRate
|
||||
@@ -895,18 +895,18 @@ function calcs.offence(env, actor)
|
||||
output.LifeLeechRate = 0
|
||||
output.LifeLeechPerHit = 0
|
||||
output.EnergyShieldLeechInstanceRate = output.EnergyShield * 0.02 * calcLib.mod(modDB, skillCfg, "LifeLeechRate")
|
||||
output.EnergyShieldLeechRate = output.LifeLeechInstantRate + m_min(output.LifeLeechInstances * output.EnergyShieldLeechInstanceRate, output.MaxEnergyShieldLeechRate)
|
||||
output.EnergyShieldLeechPerHit = m_min(output.EnergyShieldLeechInstanceRate, output.MaxEnergyShieldLeechRate) * output.LifeLeechDuration + output.LifeLeechInstant
|
||||
output.EnergyShieldLeechRate = (output.LifeLeechInstantRate + m_min(output.LifeLeechInstances * output.EnergyShieldLeechInstanceRate, output.MaxEnergyShieldLeechRate)) * calcLib.mod(modDB, nil, "EnergyShieldRecovery")
|
||||
output.EnergyShieldLeechPerHit = (m_min(output.EnergyShieldLeechInstanceRate, output.MaxEnergyShieldLeechRate) * output.LifeLeechDuration + output.LifeLeechInstant) * calcLib.mod(modDB, nil, "EnergyShieldRecovery")
|
||||
else
|
||||
output.LifeLeechInstanceRate = output.Life * 0.02 * calcLib.mod(modDB, skillCfg, "LifeLeechRate")
|
||||
output.LifeLeechRate = output.LifeLeechInstantRate + m_min(output.LifeLeechInstances * output.LifeLeechInstanceRate, output.MaxLifeLeechRate)
|
||||
output.LifeLeechPerHit = m_min(output.LifeLeechInstanceRate, output.MaxLifeLeechRate) * output.LifeLeechDuration + output.LifeLeechInstant
|
||||
output.LifeLeechRate = (output.LifeLeechInstantRate + m_min(output.LifeLeechInstances * output.LifeLeechInstanceRate, output.MaxLifeLeechRate)) * calcLib.mod(modDB, nil, "LifeRecovery")
|
||||
output.LifeLeechPerHit = (m_min(output.LifeLeechInstanceRate, output.MaxLifeLeechRate) * output.LifeLeechDuration + output.LifeLeechInstant) * calcLib.mod(modDB, nil, "LifeRecovery")
|
||||
output.EnergyShieldLeechRate = 0
|
||||
output.EnergyShieldLeechPerHit = 0
|
||||
end
|
||||
output.ManaLeechInstanceRate = output.Mana * 0.02 * calcLib.mod(modDB, skillCfg, "ManaLeechRate")
|
||||
output.ManaLeechRate = output.ManaLeechInstantRate + m_min(output.ManaLeechInstances * output.ManaLeechInstanceRate, output.MaxManaLeechRate)
|
||||
output.ManaLeechPerHit = m_min(output.ManaLeechInstanceRate, output.MaxManaLeechRate) * output.ManaLeechDuration + output.ManaLeechInstant
|
||||
output.ManaLeechRate = (output.ManaLeechInstantRate + m_min(output.ManaLeechInstances * output.ManaLeechInstanceRate, output.MaxManaLeechRate)) * calcLib.mod(modDB, nil, "ManaRecovery")
|
||||
output.ManaLeechPerHit = (m_min(output.ManaLeechInstanceRate, output.MaxManaLeechRate) * output.ManaLeechDuration + output.ManaLeechInstant) * calcLib.mod(modDB, nil, "ManaRecovery")
|
||||
skillFlags.leechES = output.EnergyShieldLeechRate > 0
|
||||
skillFlags.leechLife = output.LifeLeechRate > 0
|
||||
skillFlags.leechMana = output.ManaLeechRate > 0
|
||||
|
||||
@@ -239,12 +239,12 @@ local function doActorMisc(env, actor)
|
||||
|
||||
-- Add misc buffs
|
||||
if env.mode_combat then
|
||||
if condList["Onslaught"] then
|
||||
if modDB:Sum("FLAG", nil, "Onslaught") then
|
||||
local effect = m_floor(20 * (1 + modDB:Sum("INC", nil, "OnslaughtEffect", "BuffEffect") / 100))
|
||||
modDB:NewMod("Speed", "INC", effect, "Onslaught")
|
||||
modDB:NewMod("MovementSpeed", "INC", effect, "Onslaught")
|
||||
end
|
||||
if condList["UnholyMight"] then
|
||||
if modDB:Sum("FLAG", nil, "UnholyMight") then
|
||||
local effect = m_floor(30 * (1 + modDB:Sum("INC", nil, "BuffEffect") / 100))
|
||||
modDB:NewMod("PhysicalDamageGainAsChaos", "BASE", effect, "Unholy Might")
|
||||
end
|
||||
@@ -575,11 +575,6 @@ function calcs.perform(env)
|
||||
|
||||
-- Check for extra curses
|
||||
for _, value in ipairs(modDB:Sum("LIST", nil, "ExtraCurse")) do
|
||||
local curse = {
|
||||
name = value.name,
|
||||
fromPlayer = true,
|
||||
priority = 2,
|
||||
}
|
||||
local gemModList = common.New("ModList")
|
||||
calcs.mergeGemMods(gemModList, {
|
||||
level = value.level,
|
||||
@@ -595,9 +590,20 @@ function calcs.perform(env)
|
||||
end
|
||||
end
|
||||
end
|
||||
curse.modList = common.New("ModList")
|
||||
curse.modList:ScaleAddList(curseModList, (1 + enemyDB:Sum("INC", nil, "CurseEffectOnSelf") / 100) * enemyDB:Sum("MORE", nil, "CurseEffectOnSelf"))
|
||||
t_insert(curses, curse)
|
||||
if value.applyToPlayer then
|
||||
-- Sources for curses on the player don't usually respect any kind of limit, so there's little point bothering with slots
|
||||
modDB.multipliers["CurseOnSelf"] = (modDB.multipliers["CurseOnSelf"] or 0) + 1
|
||||
modDB:ScaleAddList(curseModList, (1 + modDB:Sum("INC", nil, "CurseEffectOnSelf") / 100) * modDB:Sum("MORE", nil, "CurseEffectOnSelf"))
|
||||
else
|
||||
local curse = {
|
||||
name = value.name,
|
||||
fromPlayer = true,
|
||||
priority = 2,
|
||||
}
|
||||
curse.modList = common.New("ModList")
|
||||
curse.modList:ScaleAddList(curseModList, (1 + enemyDB:Sum("INC", nil, "CurseEffectOnSelf") / 100) * enemyDB:Sum("MORE", nil, "CurseEffectOnSelf"))
|
||||
t_insert(curses, curse)
|
||||
end
|
||||
end
|
||||
|
||||
-- Assign curses to slots
|
||||
|
||||
@@ -31,6 +31,8 @@ function calcs.initModDB(env, modDB)
|
||||
modDB:NewMod("HitChance", "MORE", -50, "Base", { type = "Condition", var = "Blinded" })
|
||||
modDB:NewMod("MovementSpeed", "INC", -30, "Base", { type = "Condition", var = "Maimed" })
|
||||
modDB:NewMod("Condition:Burning", "FLAG", true, "Base", { type = "Condition", var = "Ignited" })
|
||||
modDB:NewMod("Onslaught", "FLAG", true, "Base", { type = "Condition", var = "Onslaught" })
|
||||
modDB:NewMod("UnholyMight", "FLAG", true, "Base", { type = "Condition", var = "UnholyMight" })
|
||||
modDB.conditions["Buffed"] = env.mode_buffs
|
||||
modDB.conditions["Combat"] = env.mode_combat
|
||||
modDB.conditions["Effective"] = env.mode_effective
|
||||
|
||||
@@ -212,10 +212,10 @@ function calcs.buildOutput(build, mode)
|
||||
if output.EnduranceCharges > 0 then
|
||||
t_insert(combatList, s_format("%d Endurance Charges", output.EnduranceCharges))
|
||||
end
|
||||
if env.modDB.conditions.Onslaught then
|
||||
if env.modDB:Sum("FLAG", nil, "Onslaught") then
|
||||
t_insert(combatList, "Onslaught")
|
||||
end
|
||||
if env.modDB.conditions.UnholyMight then
|
||||
if env.modDB:Sum("FLAG", nil, "UnholyMight") then
|
||||
t_insert(combatList, "Unholy Might")
|
||||
end
|
||||
for _, activeSkill in ipairs(env.activeSkillList) do
|
||||
@@ -252,10 +252,10 @@ function calcs.buildOutput(build, mode)
|
||||
if output.Minion.EnduranceCharges > 0 then
|
||||
t_insert(combatList, s_format("%d Endurance Charges", output.Minion.EnduranceCharges))
|
||||
end
|
||||
if env.minion.modDB.conditions.Onslaught then
|
||||
if env.minion.modDB:Sum("FLAG", nil, "Onslaught") then
|
||||
t_insert(combatList, "Onslaught")
|
||||
end
|
||||
if env.minion.modDB.conditions.UnholyMight then
|
||||
if env.minion.modDB:Sum("FLAG", nil, "UnholyMight") then
|
||||
t_insert(combatList, "Unholy Might")
|
||||
end
|
||||
for _, activeSkill in ipairs(env.activeSkillList) do
|
||||
|
||||
@@ -129,6 +129,7 @@ local modNameList = {
|
||||
["to avoid being ignited"] = "AvoidIgnite",
|
||||
["to avoid elemental status ailments"] = { "AvoidShock", "AvoidFrozen", "AvoidChilled", "AvoidIgnite" },
|
||||
["damage is taken from mana before life"] = "DamageTakenFromManaBeforeLife",
|
||||
["effect of curses on you"] = "CurseEffectOnSelf",
|
||||
-- Stun modifiers
|
||||
["stun recovery"] = "StunRecovery",
|
||||
["stun and block recovery"] = "StunRecovery",
|
||||
@@ -428,6 +429,7 @@ local modTagList = {
|
||||
["for each rare item you have equipped"] = { tag = { type = "Multiplier", var = "RareItem" } },
|
||||
["for each unique item you have equipped"] = { tag = { type = "Multiplier", var = "UniqueItem" } },
|
||||
["per curse on enemy"] = { tag = { type = "Multiplier", var = "CurseOnEnemy" } },
|
||||
["per curse on you"] = { tag = { type = "Multiplier", var = "CurseOnPlayer" } },
|
||||
["to you and allies"] = { },
|
||||
-- Per stat
|
||||
["per (%d+) strength"] = function(num) return { tag = { type = "PerStat", stat = "Str", div = num } } end,
|
||||
|
||||
@@ -47,6 +47,10 @@ Head over to the [Releases](https://github.com/Openarl/PathOfBuilding/releases)
|
||||

|
||||
|
||||
## Changelog
|
||||
### 1.4.6 - 2017/04/20
|
||||
* Fixed bug introduced in 1.4.5 that prevented Onslaught and Unholy Might from applying correctly
|
||||
* The minion modifiers on the jewel templates are now correctly hidden when their value is set to 0
|
||||
|
||||
### 1.4.5 - 2017/04/19
|
||||
* Added support for Goatman Fire-raiser's Magma Orb skill
|
||||
* Demigod items and legacy (pre-1.2.0) quiver types can now be imported
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
VERSION[1.4.6][2017/04/20]
|
||||
* Fixed bug introduced in 1.4.5 that prevented Onslaught and Unholy Might from applying correctly
|
||||
* The minion modifiers on the jewel templates are now correctly hidden when their value is set to 0
|
||||
VERSION[1.4.5][2017/04/19]
|
||||
* Added support for Goatman Fire-raiser's Magma Orb skill
|
||||
* Demigod items and legacy (pre-1.2.0) quiver types can now be imported
|
||||
|
||||
20
manifest.xml
20
manifest.xml
@@ -1,20 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<PoBVersion>
|
||||
<Version number="1.4.5"/>
|
||||
<Version number="1.4.6"/>
|
||||
<Source part="program" url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/"/>
|
||||
<Source part="tree" url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/tree.zip"/>
|
||||
<Source url="https://raw.githubusercontent.com/Openarl/PathOfBuilding/{branch}/runtime-win32.zip" part="runtime" platform="win32"/>
|
||||
<File sha1="7912b22666567d5f0ff46378f5cb22e589e84efd" name="Launch.lua" part="program"/>
|
||||
<File sha1="d8e42beeb38baabcc197d658e4c0af33419eeff3" name="UpdateCheck.lua" part="program"/>
|
||||
<File sha1="4f17937f2b37784e169a3792b235f2a0a3961e61" name="UpdateApply.lua" part="program"/>
|
||||
<File sha1="d501123dc0c6d0573089df719d7813de7d9fa563" name="changelog.txt" part="program"/>
|
||||
<File sha1="9d709b9a4919f7d2c9e013a637977519b598835a" name="changelog.txt" part="program"/>
|
||||
<File sha1="74fff9f369b6e2c98cfdf978c251c9828bcf39dc" name="Classes/BuildListControl.lua" part="program"/>
|
||||
<File sha1="deffd663ba726d938fcbe2870aab8a4e982587fa" name="Classes/ButtonControl.lua" part="program"/>
|
||||
<File sha1="afd403ab0b4c766d5b1b1cfec402bd42e64175a4" name="Classes/CalcBreakdownControl.lua" part="program"/>
|
||||
<File sha1="f7bced0e554bd4d99ef56bd87cf43294957cd179" name="Classes/CalcSectionControl.lua" part="program"/>
|
||||
<File sha1="125e891b36ba51345662be93e53a10d2733e63c8" name="Classes/CalcsTab.lua" part="program"/>
|
||||
<File sha1="573b791867ada18da1e93de8fc33ce6cf9ec9ab3" name="Classes/CheckBoxControl.lua" part="program"/>
|
||||
<File sha1="2b30756ede658d500ffe8b477e5318569f3d7542" name="Classes/ConfigTab.lua" part="program"/>
|
||||
<File sha1="5d77101d0ee342de835353d2b6af3838b289bf99" name="Classes/ConfigTab.lua" part="program"/>
|
||||
<File sha1="bbb08f183746d6ec023e2bd08fb7a89d365381da" name="Classes/Control.lua" part="program"/>
|
||||
<File sha1="45be3d636d1eaff18bed7095478c22abfd0590ef" name="Classes/ControlHost.lua" part="program"/>
|
||||
<File sha1="9f05f72260f896eea09c1a8fb28f58973ce4d3ff" name="Classes/DropDownControl.lua" part="program"/>
|
||||
@@ -24,7 +24,7 @@
|
||||
<File sha1="973a8e8aef65bcaf71812707fb671ee090b67793" name="Classes/ItemDBControl.lua" part="program"/>
|
||||
<File sha1="5ecb01b4b82c19420b15a116027e00530f673045" name="Classes/ItemListControl.lua" part="program"/>
|
||||
<File sha1="bda86df3dca469c831eb6d0bc2721d73cf3096b1" name="Classes/ItemSlotControl.lua" part="program"/>
|
||||
<File sha1="dc01cabec47264e3a80f50c6964a5569f2f3a1ea" name="Classes/ItemsTab.lua" part="program"/>
|
||||
<File sha1="536d2a14e7cb3e588a54753e91b6dc7d0c7b16f8" name="Classes/ItemsTab.lua" part="program"/>
|
||||
<File sha1="62138c7db82d57d638a16610a26acd0de75d3486" name="Classes/LabelControl.lua" part="program"/>
|
||||
<File sha1="f1b5e6a85fff1677c6cdc27a431b9ddbea21f9b4" name="Classes/MinionListControl.lua" part="program"/>
|
||||
<File sha1="91a2c0ef3e7f097f5f9ff3fd6d849ab784fbf3c2" name="Classes/ModDB.lua" part="program"/>
|
||||
@@ -47,18 +47,18 @@
|
||||
<File sha1="8a07fe01c53b785ebb6256236e781fbaabd36c0e" name="Modules/BuildList.lua" part="program"/>
|
||||
<File sha1="5aa4d8544c1d1a2d6085696068bf02426986c517" name="Modules/CalcActiveSkill.lua" part="program"/>
|
||||
<File sha1="be5c20701be3c2cc39c4cc7201915abfb4af8a34" name="Modules/CalcBreakdown.lua" part="program"/>
|
||||
<File sha1="f73821449e252c41890e4d7e5e35fed77a650959" name="Modules/CalcDefence.lua" part="program"/>
|
||||
<File sha1="a9add9d070b28dbe6e0681d148bc86917e1ef156" name="Modules/CalcOffence.lua" part="program"/>
|
||||
<File sha1="40d6a30b7a8c7986d473500dee435910824b5a5e" name="Modules/CalcPerform.lua" part="program"/>
|
||||
<File sha1="53ab2d87639d1c8bab068797e13b47e83e98ffa6" name="Modules/Calcs.lua" part="program"/>
|
||||
<File sha1="9a2acecbe87d03a0ba046b3e736d651ed51c772b" name="Modules/CalcDefence.lua" part="program"/>
|
||||
<File sha1="166a1a4662c8bca351294a2e100a2070d7579d06" name="Modules/CalcOffence.lua" part="program"/>
|
||||
<File sha1="47b3fb2bac830b1f260c82ce0091d779024ac34b" name="Modules/CalcPerform.lua" part="program"/>
|
||||
<File sha1="92539a1d6f6188c028f630d62e224bd4d82d827c" name="Modules/Calcs.lua" part="program"/>
|
||||
<File sha1="d0804fb547c867851745cafb3fbd599847615372" name="Modules/CalcSections.lua" part="program"/>
|
||||
<File sha1="440adec682ef1e3097c0db3ce3169e6afdd8479f" name="Modules/CalcSetup.lua" part="program"/>
|
||||
<File sha1="46e9ebba2afe4a10998e470d98249d1f8307a150" name="Modules/CalcSetup.lua" part="program"/>
|
||||
<File sha1="a9b49d62ee81ab640997be668e4964a5361572c7" name="Modules/CalcTools.lua" part="program"/>
|
||||
<File sha1="1333f0be1dec8f99e971d4175574296f82691fac" name="Modules/Common.lua" part="program"/>
|
||||
<File sha1="ae86cb5a442699f3bf5ffe5b22195b7b49bb2fcd" name="Modules/Data.lua" part="program"/>
|
||||
<File sha1="157cee2eefb52a9a1804139a242266bc5774e483" name="Modules/ItemTools.lua" part="program"/>
|
||||
<File sha1="127e6e91fc340fa976d03591601038281045f45b" name="Modules/Main.lua" part="program"/>
|
||||
<File sha1="362856aac88030404c4a3c2e68a6fbc86e8d9069" name="Modules/ModParser.lua" part="program"/>
|
||||
<File sha1="156209a226bc871926f41ea9accdc80c12e8f1f6" name="Modules/ModParser.lua" part="program"/>
|
||||
<File sha1="08bfd94f291b10dbdc75c94d7f2928c8bbd1a1d7" name="Modules/ModTools.lua" part="program"/>
|
||||
<File sha1="e7ee7e5b6388facb7bf568517ecc401590757df7" name="Assets/ring.png" part="program"/>
|
||||
<File sha1="9a320bfe629b1cf3f14fc77fbbf2508d0a5b2841" name="Assets/small_ring.png" part="program"/>
|
||||
|
||||
Reference in New Issue
Block a user