diff --git a/Classes/ConfigTab.lua b/Classes/ConfigTab.lua index 375e6335..a8dc2696 100644 --- a/Classes/ConfigTab.lua +++ b/Classes/ConfigTab.lua @@ -12,13 +12,13 @@ local varList = { { section = "General" }, { 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("Misc", "LIST", { type = "Condition", var = "LowLife" }, "Config") + modList:NewMod("Condition:LowLife", "FLAG", true, "Config") end }, { var = "conditionFullLife", type = "check", label = "Are you always on Full Life?", ifCond = "FullLife", tooltip = "You will automatically be considered to be on Full Life if you have Chaos Innoculation,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "FullLife" }, "Config") + modList:NewMod("Condition:FullLife", "FLAG", true, "Config") end }, { var = "conditionFullEnergyShield", type = "check", label = "Are you always on Full Energy Shield?", ifCond = "FullES", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "FullEnergyShield" }, "Config") + 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" }, @@ -32,127 +32,127 @@ local varList = { modList:NewMod("UseEnduranceCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "minionsUsePowerCharges", type = "check", label = "Do your minions use Power Charges?", ifFlag = "haveMinion", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "MinionModifier", mod = modLib.createMod("UsePowerCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) }, "Config") + modList:NewMod("MinionModifier", "LIST", { mod = modLib.createMod("UsePowerCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) }, "Config") end }, { var = "minionsUseFrenzyCharges", type = "check", label = "Do your minions use Frenzy Charges?", ifFlag = "haveMinion", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "MinionModifier", mod = modLib.createMod("UseFrenzyCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) }, "Config") + modList:NewMod("MinionModifier", "LIST", { mod = modLib.createMod("UseFrenzyCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) }, "Config") end }, { var = "minionsUseEnduranceCharges", type = "check", label = "Do your minions use Endur. Charges?", ifFlag = "haveMinion", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "MinionModifier", mod = modLib.createMod("UseEnduranceCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) }, "Config") + modList:NewMod("MinionModifier", "LIST", { mod = modLib.createMod("UseEnduranceCharges", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) }, "Config") end }, { var = "buffOnslaught", type = "check", label = "Do you have Onslaught?", tooltip = "In addition to allowing any 'while you have Onslaught' modifiers to apply,\nthis will enable the Onslaught buff itself. (20% increased Attack/Cast/Movement Speed)", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "Onslaught" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:Onslaught", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "buffUnholyMight", type = "check", label = "Do you have Unholy Might?", tooltip = "This will enable the Unholy Might buff. (Gain 30% of Physical Damage as Extra Chaos Damage)", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "UnholyMight" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:UnholyMight", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "buffPhasing", type = "check", label = "Do you have Phasing?", ifCond = "Phasing", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "Phasing" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:Phasing", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "buffFortify", type = "check", label = "Do you have Fortify?", ifCond = "Fortify", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "Fortify" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:Fortify", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionLeeching", type = "check", label = "Are you Leeching?", ifCond = "Leeching", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "Leeching" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:Leeching", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionUsingFlask", type = "check", label = "Do you have a Flask active?", ifCond = "UsingFlask", tooltip = "This is automatically enabled if you have a flask active,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "UsingFlask" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:UsingFlask", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionHaveTotem", type = "check", label = "Do you have a Totem summoned?", ifCond = "HaveTotem", tooltip = "You will automatically be considered to have a Totem if your main skill is a Totem,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "HaveTotem" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:HaveTotem", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionOnConsecratedGround", type = "check", label = "Are you on Consecrated Ground?", tooltip = "In addition to allowing any 'while on Consecrated Ground' modifiers to apply,\nthis will apply the 4% life regen modifier granted by Consecrated Ground.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "OnConsecratedGround" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:OnConsecratedGround", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionOnBurningGround", type = "check", label = "Are you on Burning Ground?", ifCond = "OnBurningGround", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "OnBurningGround" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:OnBurningGround", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionOnChilledGround", type = "check", label = "Are you on Chilled Ground?", ifCond = "OnChilledGround", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "OnChilledGround" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:OnChilledGround", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionOnShockedGround", type = "check", label = "Are you on Shocked Ground?", ifCond = "OnShockedGround", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "OnShockedGround" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:OnShockedGround", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionIgnited", type = "check", label = "Are you Ignited?", ifCond = "Ignited", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "Ignited" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:Ignited", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionFrozen", type = "check", label = "Are you Frozen?", ifCond = "Frozen", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "Frozen" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:Frozen", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionShocked", type = "check", label = "Are you Shocked?", ifCond = "Shocked", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "Shocked" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:Shocked", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionHitRecently", type = "check", label = "Have you Hit Recently?", ifCond = "HitRecently", tooltip = "You will automatically be considered to have Hit Recently if your main skill is self-cast,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "HitRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:HitRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionCritRecently", type = "check", label = "Have you Crit Recently?", ifCond = "CritRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "CritRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:CritRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionNonCritRecently", type = "check", label = "Have you dealt a Non-Crit Recently?", ifCond = "NonCritRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "NonCritRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:NonCritRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionKilledRecently", type = "check", label = "Have you Killed Recently?", ifCond = "KilledRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "KilledRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:KilledRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionTotemsKilledRecently", type = "check", label = "Have your Totems Killed Recently?", ifCond = "TotemsKilledRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "TotemsKilledRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:TotemsKilledRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionFrozenEnemyRecently", type = "check", label = "Have you Frozen an Enemy Recently?", ifCond = "FrozenEnemyRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "FrozenEnemyRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:FrozenEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionIgnitedEnemyRecently", type = "check", label = "Have you Ignited an Enemy Recently?", ifCond = "IgnitedEnemyRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "IgnitedEnemyRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:IgnitedEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionBeenHitRecently", type = "check", label = "Have you been Hit Recently?", ifCond = "BeenHitRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "BeenHitRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:BeenHitRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionBeenSavageHitRecently", type = "check", label = "Have you been Savage Hit Recently?", ifCond = "BeenSavageHitRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "BeenSavageHitRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:BeenSavageHitRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionHitByFireDamageRecently", type = "check", label = "Have you been hit by Fire Recently?", ifCond = "HitByFireDamageRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "HitByFireDamageRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:HitByFireDamageRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionHitByColdDamageRecently", type = "check", label = "Have you been hit by Cold Recently?", ifCond = "HitByColdDamageRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "HitByColdDamageRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:HitByColdDamageRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionHitByLightningDamageRecently", type = "check", label = "Have you been hit by Light. Recently?", ifCond = "HitByLightningDamageRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "HitByLightningDamageRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:HitByLightningDamageRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionBlockedAttackRecently", type = "check", label = "Have you Blocked an Attack Recently?", ifCond = "BlockedAttackRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "BlockedAttackRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:BlockedAttackRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionBlockedSpellRecently", type = "check", label = "Have you Blocked a Spell Recently?", ifCond = "BlockedSpellRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "BlockedSpellRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:BlockedSpellRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "buffPendulum", type = "check", label = "Is Pendulum of Destruction active?", ifNode = 57197, apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "PendulumOfDestruction" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:PendulumOfDestruction", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionAttackedRecently", type = "check", label = "Have you Attacked Recently?", ifNode = 3154, tooltip = "You will automatically be considered to have Attacked Recently if your main skill is an attack,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "AttackedRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:AttackedRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionCastSpellRecently", type = "check", label = "Have you Cast a Spell Recently?", ifNode = 3154, tooltip = "You will automatically be considered to have Cast a Spell Recently if your main skill is a spell,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "CastSpellRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:CastSpellRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionUsedWarcryRecently", type = "check", label = "Have you used a Warcry Recently?", ifCond = "UsedWarcryRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "UsedWarcryRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:UsedWarcryRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionConsumedCorpseRecently", type = "check", label = "Consumed a corpse Recently?", ifCond = "ConsumedCorpseRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "ConsumedCorpseRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:ConsumedCorpseRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionTauntedEnemyRecently", type = "check", label = "Taunted an Enemy Recently?", ifCond = "TauntedEnemyRecently", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "TauntedEnemyRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:TauntedEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionUsedFireSkillInPast10Sec", type = "check", label = "Used a Fire Skill in the past 10s?", ifNode = 61259, apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "UsedFireSkillInPast10Sec" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:UsedFireSkillInPast10Sec", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionUsedColdSkillInPast10Sec", type = "check", label = "Used a Cold Skill in the past 10s?", ifNode = 61259, apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "UsedColdSkillInPast10Sec" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:UsedColdSkillInPast10Sec", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionUsedLightningSkillInPast10Sec", type = "check", label = "Used a Light. Skill in the past 10s?", ifNode = 61259, apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "UsedLightningSkillInPast10Sec" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:UsedLightningSkillInPast10Sec", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { var = "conditionBlockedHitFromUniqueEnemyRecently", type = "check", label = "Blocked hit from a Unique Recently?", ifNode = 63490, apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "BlockedHitFromUniqueEnemyRecently" }, "Config", { type = "Condition", var = "Combat" }) + modList:NewMod("Condition:BlockedHitFromUniqueEnemyRecently", "FLAG", true, "Config", { type = "Condition", var = "Combat" }) end }, { section = "For Effective DPS" }, { var = "critChanceLucky", type = "check", label = "Is your Crit Chance Lucky?", apply = function(val, modList, enemyModList) @@ -163,49 +163,49 @@ local varList = { modList:NewMod("Damage", "MORE", 500, "Movement", 0, KeywordFlag.Bleed) end }, { var = "conditionEnemyFullLife", type = "check", label = "Is the enemy on Full Life?", ifEnemyCond = "FullLife", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "FullLife" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:FullLife", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyLowLife", type = "check", label = "Is the enemy on Low Life?", ifEnemyCond = "LowLife", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "LowLife" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:LowLife", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionAtCloseRange", type = "check", label = "Is the enemy at Close Range?", ifCond = "AtCloseRange", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "AtCloseRange" }, "Config", { type = "Condition", var = "Effective" }) + modList:NewMod("Condition:AtCloseRange", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyCursed", type = "check", label = "Is the enemy Cursed?", ifEnemyCond = "Cursed", tooltip = "Your enemy will automatically be considered to be Cursed if you have at least one curse enabled,\nbut you can use this option to force it if necessary.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Cursed" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Cursed", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyBleeding", type = "check", label = "Is the enemy Bleeding?", ifEnemyCond = "Bleeding", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Bleeding" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Bleeding", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyPoisoned", type = "check", label = "Is the enemy Poisoned?", ifEnemyCond = "Poisoned", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Poisoned" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Poisoned", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyMaimed", type = "check", label = "Is the enemy Maimed?", ifEnemyCond = "Maimed", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Maimed" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Maimed", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyHindered", type = "check", label = "Is the enemy Hindered?", ifEnemyCond = "Hindered", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Hindered" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Hindered", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyBlinded", type = "check", label = "Is the enemy Blinded?", tooltip = "In addition to allowing 'against Blinded Enemies' modifiers to apply,\nthis will lessen the enemy's chance to hit, and thereby increase your evade chance.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Blinded" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Blinded", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyTaunted", type = "check", label = "Is the enemy Taunted?", ifEnemyCond = "Taunted", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Taunted" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Taunted", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyBurning", type = "check", label = "Is the enemy Burning?", ifEnemyCond = "Burning", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Burning" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Burning", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyIgnited", type = "check", label = "Is the enemy Ignited?", ifEnemyCond = "Ignited", tooltip = "This also implies that the enemy is Burning.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Ignited" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Ignited", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyChilled", type = "check", label = "Is the enemy Chilled?", ifEnemyCond = "Chilled", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Chilled" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Chilled", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyFrozen", type = "check", label = "Is the enemy Frozen?", ifEnemyCond = "Frozen", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Frozen" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Frozen", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyShocked", type = "check", label = "Is the enemy Shocked?", tooltip = "In addition to allowing any 'against Shocked Enemies' modifiers to apply,\nthis will apply Shock's Damage Taken modifier to the enemy.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "Shocked" }, "Config", { type = "Condition", var = "Effective" }) + enemyModList:NewMod("Condition:Shocked", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "conditionEnemyIntimidated", type = "check", label = "Is the enemy Intimidated?", tooltip = "This adds the following modifiers:\n10% increased Damage Taken by enemy", apply = function(val, modList, enemyModList) enemyModList:NewMod("DamageTaken", "INC", 10, "Intimidate") @@ -214,16 +214,16 @@ local varList = { enemyModList:NewMod("FireDamageTaken", "INC", 20, "Ash") end }, { var = "conditionEnemyRareOrUnique", type = "check", label = "is the enemy Rare or Unique?", ifCond = "EnemyRareOrUnique", tooltip = "Your enemy will automatically be considered to be Unique if one of the Boss options is selected.", apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyRareOrUnique" }, "Config", { type = "Condition", var = "Effective" }) + modList:NewMod("Condition:EnemyRareOrUnique", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) end }, { var = "enemyIsBoss", type = "list", label = "Is the enemy a Boss?", tooltip = "Standard Boss adds the following modifiers:\n60% less Effect of your Curses\n+30% to enemy Elemental Resistances\n+15% to enemy Chaos Resistance\n\nShaper/Guardian adds the following modifiers:\n80% less Effect of your Curses\n+40% to enemy Elemental Resistances\n+25% to enemy Chaos Resistance\n50% less Duration of Bleed\n50% less Duration of Poison\n50% less Duration of Ignite", list = {{val="NONE",label="No"},{val=true,label="Standard Boss"},{val="SHAPER",label="Shaper/Guardian"}}, apply = function(val, modList, enemyModList) if val == true then - modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyRareOrUnique" }, "Config", { type = "Condition", var = "Effective" }) + modList:NewMod("Condition:EnemyRareOrUnique", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) enemyModList:NewMod("CurseEffectOnSelf", "MORE", -60, "Boss") enemyModList:NewMod("ElementalResist", "BASE", 30, "Boss") enemyModList:NewMod("ChaosResist", "BASE", 15, "Boss") elseif val == "SHAPER" then - modList:NewMod("Misc", "LIST", { type = "Condition", var = "EnemyRareOrUnique" }, "Config", { type = "Condition", var = "Effective" }) + modList:NewMod("Condition:EnemyRareOrUnique", "FLAG", true, "Config", { type = "Condition", var = "Effective" }) enemyModList:NewMod("CurseEffectOnSelf", "MORE", -80, "Boss") enemyModList:NewMod("ElementalResist", "BASE", 40, "Boss") enemyModList:NewMod("ChaosResist", "BASE", 25, "Boss") @@ -248,30 +248,30 @@ local varList = { enemyModList:NewMod("ChaosResist", "BASE", val, "Config") end }, { var = "enemyConditionHitByFireDamage", type = "check", label = "Enemy was Hit by Fire Damage?", ifNode = 39085, apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "HitByFireDamage" }, "Config") + enemyModList:NewMod("Condition:HitByFireDamage", "FLAG", true, "Config") end }, { var = "enemyConditionHitByColdDamage", type = "check", label = "Enemy was Hit by Cold Damage?", ifNode = 39085, apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "HitByColdDamage" }, "Config") + enemyModList:NewMod("Condition:HitByColdDamage", "FLAG", true, "Config") end }, { var = "enemyConditionHitByLightningDamage", type = "check", label = "Enemy was Hit by Light. Damage?", ifNode = 39085, apply = function(val, modList, enemyModList) - modList:NewMod("Misc", "LIST", { type = "EnemyCondition", var = "HitByLightningDamage" }, "Config") + 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("Misc", "LIST", { type = "SkillData", key = "minionLevel", value = val }, "Config", { type = "SkillName", skillName = "Raise Spectre" }) + 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("Misc", "LIST", { type = "SkillData", key = "enable", value = true }, "Config", { type = "SkillType", skillType = SkillType.Curse }, { type = "SkillName", skillName = "Raise Spectre", summonSkill = true }) + 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("Misc", "LIST", { type = "SkillData", key = "dpsMultiplier", value = val }, "Config", { type = "SkillId", skillId = "DemonModularBladeVortexSpectre" }) - modList:NewMod("Misc", "LIST", { type = "SkillData", key = "dpsMultiplier", value = val }, "Config", { type = "SkillId", skillId = "GhostPirateBladeVortexSpectre" }) + 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("Misc", "LIST", { type = "SkillData", key = "enable", value = true }, "Config", { type = "SkillId", skillId = "LightningGolemWrath" }) + modList:NewMod("SkillData", "LIST", { key = "enable", value = true }, "Config", { type = "SkillId", skillId = "LightningGolemWrath" }) end }, } diff --git a/Classes/ItemsTab.lua b/Classes/ItemsTab.lua index ad77e481..064ec740 100644 --- a/Classes/ItemsTab.lua +++ b/Classes/ItemsTab.lua @@ -31,12 +31,14 @@ local ItemsTabClass = common.NewClass("ItemsTab", "UndoHandler", "ControlHost", -- Build lists of item bases, separated by type self.baseLists = { } for name, base in pairs(data.itemBases) do - local type = base.type - if base.subType then - type = type .. ": " .. base.subType + if not base.hidden then + local type = base.type + if base.subType then + type = type .. ": " .. base.subType + end + self.baseLists[type] = self.baseLists[type] or { } + t_insert(self.baseLists[type], { label = name:gsub(" %(.+%)",""), name = name, base = base }) end - self.baseLists[type] = self.baseLists[type] or { } - t_insert(self.baseLists[type], { label = name:gsub(" %(.+%)",""), name = name, base = base }) end self.baseTypeList = { } for type, list in pairs(self.baseLists) do @@ -486,7 +488,6 @@ function ItemsTabClass:EnchantDisplayItem() for _, gem in ipairs(socketGroup.gemList) do if gem.data and not gem.data.support then skillsUsed[gem.name] = true - break end end end diff --git a/Classes/ModDB.lua b/Classes/ModDB.lua index 56f0de87..4d7a528f 100644 --- a/Classes/ModDB.lua +++ b/Classes/ModDB.lua @@ -14,7 +14,15 @@ local bor = bit.bor local mod_createMod = modLib.createMod -local hack = { } +-- Magic tables for caching multiplier/condition modifier names +local multiplierName = setmetatable({ }, { __index = function(t, var) + t[var] = "Multiplier:"..var + return t[var] +end }) +local conditionName = setmetatable({ }, { __index = function(t, var) + t[var] = "Condition:"..var + return t[var] +end }) local ModDBClass = common.NewClass("ModDB", function(self) self.actor = { output = { } } @@ -80,7 +88,7 @@ function ModDBClass:NewMod(...) self:AddMod(mod_createMod(...)) end -function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12]]) +function ModDBClass:Sum(modType, cfg, ...) local flags, keywordFlags = 0, 0 local source, tabulate if cfg then @@ -88,6 +96,10 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, keywordFlags = cfg.keywordFlags or 0 source = cfg.source tabulate = cfg.tabulate + if tabulate then + cfg = copyTable(cfg) + cfg.tabulate = false + end end local result local nullValue = 0 @@ -102,42 +114,8 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, else result = 0 end - --[[hack[1] = arg1 - if arg1 then - hack[2] = arg2 - if arg2 then - hack[3] = arg3 - if arg3 then - hack[4] = arg4 - if arg4 then - hack[5] = arg5 - if arg5 then - hack[6] = arg6 - if arg6 then - hack[7] = arg7 - if arg7 then - hack[8] = arg8 - if arg8 then - hack[9] = arg9 - if arg9 then - hack[10] = arg10 - if arg10 then - hack[11] = arg11 - if arg11 then - hack[12] = arg12 - end - end - end - end - end - end - end - end - end - end - end]] - for --[[i = 1, #hack do --]]i = 1, select('#', ...) do - local modName = --[[hack[i]--]]select(i, ...) + for i = 1, select('#', ...) do + local modName = select(i, ...) local modList = self.mods[modName] if modList then for i = 1, #modList do @@ -146,7 +124,7 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, local value = mod.value for _, tag in pairs(mod.tagList) do if tag.type == "Multiplier" then - local mult = (self.multipliers[tag.var] or 0) + self:Sum("BASE", nil, "Multiplier:"..tag.var) + local mult = (self.multipliers[tag.var] or 0) + self:Sum("BASE", cfg, multiplierName[tag.var]) if type(value) == "table" then value = copyTable(value) value.value = value.value * mult + (tag.base or 0) @@ -154,7 +132,7 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, value = value * mult + (tag.base or 0) end elseif tag.type == "MultiplierThreshold" then - local mult = (self.multipliers[tag.var] or 0) + self:Sum("BASE", nil, "Multiplier:"..tag.var) + local mult = (self.multipliers[tag.var] or 0) + self:Sum("BASE", cfg, multiplierName[tag.var]) if mult < tag.threshold then value = nullValue break @@ -194,13 +172,13 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, local match = false if tag.varList then for _, var in pairs(tag.varList) do - if self.conditions[var] or (cfg and cfg.skillCond and cfg.skillCond[var]) or self:Sum("FLAG", nil, "Condition:"..var) then + if self.conditions[var] or (cfg and cfg.skillCond and cfg.skillCond[var]) or self:Sum("FLAG", cfg, conditionName[var]) then match = true break end end else - match = self.conditions[tag.var] or (cfg and cfg.skillCond and cfg.skillCond[tag.var]) or self:Sum("FLAG", nil, "Condition:"..tag.var) + match = self.conditions[tag.var] or (cfg and cfg.skillCond and cfg.skillCond[tag.var]) or self:Sum("FLAG", cfg, conditionName[tag.var]) end if tag.neg then match = not match @@ -215,13 +193,13 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, if enemy then if tag.varList then for _, var in pairs(tag.varList) do - if enemy.modDB.conditions[var] or enemy.modDB:Sum("FLAG", nil, "Condition:"..var) then + if enemy.modDB.conditions[var] or enemy.modDB:Sum("FLAG", nil, conditionName[var]) then match = true break end end else - match = enemy.modDB.conditions[tag.var] or enemy.modDB:Sum("FLAG", nil, "Condition:"..tag.var) + match = enemy.modDB.conditions[tag.var] or enemy.modDB:Sum("FLAG", nil, conditionName[tag.var]) end if tag.neg then match = not match @@ -233,16 +211,17 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, end elseif tag.type == "ParentCondition" then local match = false - if self.actor.parent then + local parent = self.actor.parent + if parent then if tag.varList then for _, var in pairs(tag.varList) do - if self.actor.parent.modDB.conditions[var] then + if parent.modDB.conditions[var] or parent.modDB:Sum("FLAG", nil, conditionName[var]) then match = true break end end else - match = self.actor.parent.modDB.conditions[tag.var] + match = parent.modDB.conditions[tag.var] or parent.modDB:Sum("FLAG", nil, conditionName[tag.var]) end end if tag.neg then @@ -304,8 +283,7 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, result = result * (1 + value / 100) elseif modType == "FLAG" then if value then - result = true - break + return true end elseif modType == "LIST" then if value then @@ -317,7 +295,6 @@ function ModDBClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, end end end - --hack[i] = nil end return result end diff --git a/Classes/ModList.lua b/Classes/ModList.lua index a0c7837b..3892ffc0 100644 --- a/Classes/ModList.lua +++ b/Classes/ModList.lua @@ -14,7 +14,15 @@ local bor = bit.bor local mod_createMod = modLib.createMod -local hack = { } +-- Magic tables for caching multiplier/condition modifier names +local multiplierName = setmetatable({ }, { __index = function(t, var) + t[var] = "Multiplier:"..var + return t[var] +end }) +local conditionName = setmetatable({ }, { __index = function(t, var) + t[var] = "Condition:"..var + return t[var] +end }) local ModListClass = common.NewClass("ModList", function(self) self.actor = { output = { } } @@ -56,7 +64,7 @@ function ModListClass:NewMod(...) self:AddMod(mod_createMod(...)) end -function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12]]) +function ModListClass:Sum(modType, cfg, ...) local flags, keywordFlags = 0, 0 local source, tabulate if cfg then @@ -64,6 +72,10 @@ function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg keywordFlags = cfg.keywordFlags or 0 source = cfg.source tabulate = cfg.tabulate + if tabulate then + cfg = copyTable(cfg) + cfg.tabulate = false + end end local result local nullValue = 0 @@ -78,49 +90,15 @@ function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg else result = 0 end - --[[hack[1] = arg1 - if arg1 then - hack[2] = arg2 - if arg2 then - hack[3] = arg3 - if arg3 then - hack[4] = arg4 - if arg4 then - hack[5] = arg5 - if arg5 then - hack[6] = arg6 - if arg6 then - hack[7] = arg7 - if arg7 then - hack[8] = arg8 - if arg8 then - hack[9] = arg9 - if arg9 then - hack[10] = arg10 - if arg10 then - hack[11] = arg11 - if arg11 then - hack[12] = arg12 - end - end - end - end - end - end - end - end - end - end - end]] - for --[[i = 1, #hack do --]]i = 1, select('#', ...) do - local modName = --[[hack[i]--]]select(i, ...) + for i = 1, select('#', ...) do + local modName = select(i, ...) for i = 1, #self do local mod = self[i] if mod.name == modName and (not modType or mod.type == modType) and band(flags, mod.flags) == mod.flags and (mod.keywordFlags == 0 or band(keywordFlags, mod.keywordFlags) ~= 0) and (not source or mod.source:match("[^:]+") == source) then local value = mod.value for _, tag in pairs(mod.tagList) do if tag.type == "Multiplier" then - local mult = (self.multipliers[tag.var] or 0) + self:Sum("BASE", nil, "Multiplier:"..tag.var) + local mult = (self.multipliers[tag.var] or 0) + self:Sum("BASE", cfg, multiplierName[tag.var]) if type(value) == "table" then value = copyTable(value) value.value = value.value * mult + (tag.base or 0) @@ -128,7 +106,7 @@ function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg value = value * mult + (tag.base or 0) end elseif tag.type == "MultiplierThreshold" then - local mult = (self.multipliers[tag.var] or 0) + self:Sum("BASE", nil, "Multiplier:"..tag.var) + local mult = (self.multipliers[tag.var] or 0) + self:Sum("BASE", cfg, multiplierName[tag.var]) if mult < tag.threshold then value = nullValue break @@ -168,13 +146,13 @@ function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg local match = false if tag.varList then for _, var in pairs(tag.varList) do - if self.conditions[var] or (cfg and cfg.skillCond and cfg.skillCond[var]) or self:Sum("FLAG", nil, "Condition:"..var) then + if self.conditions[var] or (cfg and cfg.skillCond and cfg.skillCond[var]) or self:Sum("FLAG", cfg, conditionName[var]) then match = true break end end else - match = self.conditions[tag.var] or (cfg and cfg.skillCond and cfg.skillCond[tag.var]) or self:Sum("FLAG", nil, "Condition:"..tag.var) + match = self.conditions[tag.var] or (cfg and cfg.skillCond and cfg.skillCond[tag.var]) or self:Sum("FLAG", cfg, conditionName[tag.var]) end if tag.neg then match = not match @@ -189,13 +167,13 @@ function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg if enemy then if tag.varList then for _, var in pairs(tag.varList) do - if enemy.modDB.conditions[var] or enemy.modDB:Sum("FLAG", nil, "Condition:"..var) then + if enemy.modDB.conditions[var] or enemy.modDB:Sum("FLAG", nil, conditionName[var]) then match = true break end end else - match = enemy.modDB.conditions[tag.var] or enemy.modDB:Sum("FLAG", nil, "Condition:"..tag.var) + match = enemy.modDB.conditions[tag.var] or enemy.modDB:Sum("FLAG", nil, conditionName[tag.var]) end if tag.neg then match = not match @@ -207,16 +185,17 @@ function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg end elseif tag.type == "ParentCondition" then local match = false - if self.actor.parent then + local parent = self.actor.parent + if parent then if tag.varList then for _, var in pairs(tag.varList) do - if self.actor.parent.modDB.conditions[var] then + if parent.modDB.conditions[var] or parent.modDB:Sum("FLAG", nil, conditionName[var]) then match = true break end end else - match = self.actor.parent.modDB.conditions[tag.var] + match = parent.modDB.conditions[tag.var] or parent.modDB:Sum("FLAG", nil, conditionName[tag.var]) end end if tag.neg then @@ -278,8 +257,7 @@ function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg result = result * (1 + value / 100) elseif modType == "FLAG" then if value then - result = true - break + return true end elseif modType == "LIST" then if value then @@ -290,7 +268,6 @@ function ModListClass:Sum(modType, cfg, ...--[[arg1, arg2, arg3, arg4, arg5, arg end end end - --hack[i] = nil end return result end diff --git a/Data/Bases/amulet.lua b/Data/Bases/amulet.lua index b1c44921..31399ea8 100644 --- a/Data/Bases/amulet.lua +++ b/Data/Bases/amulet.lua @@ -202,4 +202,12 @@ itemBases["Greatwolf Talisman"] = { type = "Amulet", subType = "Talisman", implicit = "", +} + + +itemBases["Jet Amulet"] = { + hidden = true, + type = "Amulet", + implicit = "+(8-12)% to all Elemental Resistances", + req = { level = 12, }, } \ No newline at end of file diff --git a/Data/Bases/belt.lua b/Data/Bases/belt.lua index e247d71d..491578ab 100644 --- a/Data/Bases/belt.lua +++ b/Data/Bases/belt.lua @@ -41,3 +41,11 @@ itemBases["Crystal Belt"] = { implicit = "+(60-80) to maximum Energy Shield", req = { level = 79 }, } + + +itemBases["Golden Obi"] = { + hidden = true, + type = "Belt", + implicit = "(20-30)% increased Rarity of Items found", + req = { }, +} \ No newline at end of file diff --git a/Data/Bases/body.lua b/Data/Bases/body.lua index 538da33b..fc5a04cb 100644 --- a/Data/Bases/body.lua +++ b/Data/Bases/body.lua @@ -635,3 +635,13 @@ itemBases["Sacrificial Garb"] = { armour = { armourBase = 234, evasionBase = 234, energyShieldBase = 69, movementPenalty = 3 }, req = { level = 72, str = 66, dex = 66, int = 66, }, } + + +itemBases["Golden Mantle"] = { + hidden = true, + type = "Body Armour", + subType = "Armour/Evasion/Energy Shield", + implicit = "+(15-25)% to all Elemental Resistances", + armour = { armourBase = 53, evasionBase = 53, energyShieldBase = 16, }, + req = { level = 20, str = 8, dex = 8, int = 8, }, +} \ No newline at end of file diff --git a/Data/Bases/boots.lua b/Data/Bases/boots.lua index afc28cda..161d7949 100644 --- a/Data/Bases/boots.lua +++ b/Data/Bases/boots.lua @@ -343,4 +343,13 @@ itemBases["Two-Toned Boots (Evasion/Energy Shield)"] = { implicit = "+(15-20)% to Cold and Lightning Resistances", armour = { evasionBase = 109, energyShieldBase = 32 }, req = { level = 72, dex = 62, int = 62 }, +} + + +itemBases["Golden Caligae"] = { + hidden = true, + type = "Boots", + implicit = "+(8-16)% to all Elemental Resistances", + armour = { }, + req = { level = 12, }, } \ No newline at end of file diff --git a/Data/Bases/gloves.lua b/Data/Bases/gloves.lua index f3837699..61e4b942 100644 --- a/Data/Bases/gloves.lua +++ b/Data/Bases/gloves.lua @@ -337,4 +337,13 @@ itemBases["Murder Mitts"] = { subType = "Evasion/Energy Shield", armour = { evasionBase = 105, energyShieldBase = 31, }, req = { level = 67, dex = 51, int = 51, }, +} + + +itemBases["Golden Bracers"] = { + hidden = true, + type = "Gloves", + implicit = "(20-30) to maximum Life", + armour = { }, + req = { level = 12, }, } \ No newline at end of file diff --git a/Data/Bases/helmet.lua b/Data/Bases/helmet.lua index 4519ff18..88f3a71b 100644 --- a/Data/Bases/helmet.lua +++ b/Data/Bases/helmet.lua @@ -396,3 +396,12 @@ itemBases["Deicide Mask"] = { armour = { evasionBase = 166, energyShieldBase = 59, }, req = { level = 67, dex = 73, int = 88, }, } + + +itemBases["Golden Wreath"] = { + hidden = true, + type = "Helmet", + implicit = "+(16-24) to all Attributes", + armour = { }, + req = { level = 12, }, +} \ No newline at end of file diff --git a/Data/Bases/quiver.lua b/Data/Bases/quiver.lua index c47967ec..e399735c 100644 --- a/Data/Bases/quiver.lua +++ b/Data/Bases/quiver.lua @@ -41,3 +41,35 @@ itemBases["Spike-Point Arrow Quiver"] = { implicit = "(20-30)% increased Global Critical Strike Chance", req = { level = 45, }, } + + +itemBases["Conductive Quiver"] = { + hidden = true, + type = "Quiver", + implicit = "Adds 1 to 5 Lightning Damage to Attacks", + req = { }, +} +itemBases["Cured Quiver"] = { + hidden = true, + type = "Quiver", + implicit = "Adds 2 to 4 Fire Damage to Attacks", + req = { }, +} +itemBases["Rugged Quiver"] = { + hidden = true, + type = "Quiver", + implicit = "Adds 2 to 3 Cold Damage to Attacks", + req = { }, +} +itemBases["Heavy Quiver"] = { + hidden = true, + type = "Quiver", + implicit = "Adds 1 to 4 Physical Damage to Attacks", + req = { level = 5, }, +} +itemBases["Light Quiver"] = { + hidden = true, + type = "Quiver", + implicit = "+(30-40) to Dexterity", + req = { level = 12, }, +} \ No newline at end of file diff --git a/Data/Bases/ring.lua b/Data/Bases/ring.lua index da307055..e66d3103 100644 --- a/Data/Bases/ring.lua +++ b/Data/Bases/ring.lua @@ -94,3 +94,10 @@ itemBases["Breach Ring"] = { req = { }, } + +itemBases["Golden Hoop"] = { + hidden = true, + type = "Ring", + implicit = "+(8-12) to all Attributes", + req = { level = 12, }, +} \ No newline at end of file diff --git a/Data/Bases/shield.lua b/Data/Bases/shield.lua index c2742dc7..0de68150 100644 --- a/Data/Bases/shield.lua +++ b/Data/Bases/shield.lua @@ -584,4 +584,13 @@ itemBases["Supreme Spiked Shield"] = { implicit = "Reflects (221-260) Physical Damage to Melee Attackers", armour = { blockChance = 24, evasionBase = 210, energyShieldBase = 62, movementPenalty = 3, }, req = { level = 70, dex = 85, int = 85, }, +} + + +itemBases["Golden Flame"] = { + hidden = true, + type = "Shield", + implicit = "+(11-19)% to Chaos Resistance", + armour = { blockChance = 20, movementPenalty = 3, }, + req = { level = 15, }, } \ No newline at end of file diff --git a/Data/Minions.lua b/Data/Minions.lua index 46c1b7ee..cf086739 100644 --- a/Data/Minions.lua +++ b/Data/Minions.lua @@ -260,7 +260,7 @@ minions["Clone"] = { }, modList = { mod("EnergyShield", "BASE", 10), - mod("Misc", "LIST", { type = "SkillData", key = "attackRateCap", value = 1.84 }), + mod("SkillData", "LIST", { key = "attackRateCap", value = 1.84 }), }, } minions["SpiderMinion"] = { diff --git a/Data/Skills/act_dex.lua b/Data/Skills/act_dex.lua index c975ab92..df5db936 100644 --- a/Data/Skills/act_dex.lua +++ b/Data/Skills/act_dex.lua @@ -640,7 +640,7 @@ skills["BlinkArrow"] = { skill("cooldown", 3), skill("duration", 3), --"base_skill_effect_duration" = 3000 --"number_of_monsters_to_summon" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", 75) }), --"active_skill_minion_damage_+%_final" = 75 + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 75) }), --"active_skill_minion_damage_+%_final" = 75 --"display_minion_monster_type" = 4 --"base_is_projectile" = ? skill("minionUseBowAndQuiver", true), @@ -651,8 +651,8 @@ skills["BlinkArrow"] = { levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", nil) }), --"minion_damage_+%" - [4] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [3] = mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", nil) }), --"minion_damage_+%" + [4] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [5] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -3061,7 +3061,7 @@ skills["MirrorArrow"] = { skill("cooldown", 3), skill("duration", 3), --"base_skill_effect_duration" = 3000 --"number_of_monsters_to_summon" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", 75) }), --"active_skill_minion_damage_+%_final" = 75 + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 75) }), --"active_skill_minion_damage_+%_final" = 75 --"display_minion_monster_type" = 4 --"base_is_projectile" = ? skill("minionUseBowAndQuiver", true), @@ -3072,8 +3072,8 @@ skills["MirrorArrow"] = { levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", nil) }), --"minion_damage_+%" - [4] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [3] = mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", nil) }), --"minion_damage_+%" + [4] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [5] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -4271,11 +4271,11 @@ skills["SummonIceGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 6 - mod("Misc", "LIST", { type = "Condition", var = "HaveColdGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HaveColdGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), @@ -4283,7 +4283,7 @@ skills["SummonIceGolem"] = { --[3] = "base_actor_scale_+%" [4] = mod("CritChance", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"ice_golem_grants_critical_strike_chance_+%" [5] = mod("Accuracy", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"ice_golem_grants_accuracy_+%" - [6] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [6] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [7] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { diff --git a/Data/Skills/act_int.lua b/Data/Skills/act_int.lua index 9528895d..24221aea 100644 --- a/Data/Skills/act_int.lua +++ b/Data/Skills/act_int.lua @@ -3758,20 +3758,20 @@ skills["RaiseSpectre"] = { baseMods = { skill("castTime", 0.85), mod("ActiveSpectreLimit", "BASE", 1), --"base_number_of_spectres_allowed" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "MORE", 55) }), --"active_skill_minion_movement_velocity_+%_final" = 55 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "MORE", 55) }), --"active_skill_minion_movement_velocity_+%_final" = 55 --"movement_velocity_cap" = -89 --"damage_taken_+%_from_arrow_traps_final" = -90 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ElementalResist", "BASE", 30) }), --"minion_elemental_resistance_%" = 30 + mod("MinionModifier", "LIST", { mod = mod("ElementalResist", "BASE", 30) }), --"minion_elemental_resistance_%" = 30 }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", nil) }), --"active_skill_minion_damage_+%_final" - [4] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "MORE", nil) }), --"active_skill_minion_life_+%_final" - [5] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("EnergyShield", "MORE", nil) }), --"active_skill_minion_energy_shield_+%_final" + [3] = mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", nil) }), --"active_skill_minion_damage_+%_final" + [4] = mod("MinionModifier", "LIST", { mod = mod("Life", "MORE", nil) }), --"active_skill_minion_life_+%_final" + [5] = mod("MinionModifier", "LIST", { mod = mod("EnergyShield", "MORE", nil) }), --"active_skill_minion_energy_shield_+%_final" }, levels = { [1] = { 28, 21, -30, -20, -20, }, @@ -3827,12 +3827,12 @@ skills["RaiseZombie"] = { baseMods = { skill("castTime", 0.85), mod("ActiveZombieLimit", "BASE", 3), --"base_number_of_zombies_allowed" = 3 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", 0) }), --"active_skill_minion_damage_+%_final" = 0 + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 0) }), --"active_skill_minion_damage_+%_final" = 0 --"display_minion_monster_type" = 1 }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), @@ -4536,18 +4536,18 @@ skills["SummonChaosGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 5 - mod("Misc", "LIST", { type = "Condition", var = "HaveChaosGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HaveChaosGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), --[3] = "base_actor_scale_+%" --[4] = "chaos_golem_grants_additional_physical_damage_reduction_%" - [5] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [5] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [6] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -4610,18 +4610,18 @@ skills["SummonLightningGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 11 - mod("Misc", "LIST", { type = "Condition", var = "HaveLightningGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HaveLightningGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), --[3] = "base_actor_scale_+%" [4] = mod("Speed", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"lightning_golem_grants_attack_and_cast_speed_+%" - [5] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [5] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [6] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -4686,7 +4686,7 @@ skills["SummonRagingSpirit"] = { skill("minionDamageEffectiveness", -30), --"active_skill_minion_added_damage_+%_final" = -30 }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), diff --git a/Data/Skills/act_str.lua b/Data/Skills/act_str.lua index 7c8a5693..f5b8bbef 100644 --- a/Data/Skills/act_str.lua +++ b/Data/Skills/act_str.lua @@ -688,7 +688,7 @@ skills["DominatingBlow"] = { baseMods = { skill("castTime", 1), skill("duration", 20), --"base_skill_effect_duration" = 20000 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", -35) }), --"active_skill_minion_damage_+%_final" = -35 + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", -35) }), --"active_skill_minion_damage_+%_final" = -35 --"is_dominated" = ? }, qualityMods = { @@ -2648,18 +2648,18 @@ skills["SummonFireGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 7 - mod("Misc", "LIST", { type = "Condition", var = "HaveFireGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HaveFireGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), --[3] = "base_actor_scale_+%" [4] = mod("Damage", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"fire_golem_grants_damage_+%" - [5] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [5] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [6] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -2720,17 +2720,17 @@ skills["SummonRockGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 10 - mod("Misc", "LIST", { type = "Condition", var = "HavePhysicalGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HavePhysicalGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), --[3] = "base_actor_scale_+%" - [4] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [4] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [5] = mod("LifeRegen", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"stone_golem_grants_base_life_regeneration_rate_per_minute" [6] = skill("minionLevel", nil), --"display_minion_monster_level" }, diff --git a/Data/Skills/spectre.lua b/Data/Skills/spectre.lua index df69954a..ba4eef4a 100644 --- a/Data/Skills/spectre.lua +++ b/Data/Skills/spectre.lua @@ -680,6 +680,74 @@ skills["GhostPirateBladeVortexSpectre"] = { [35] = { 82, 276, 414, }, }, } +skills["GoatmanFireMagmaOrb"] = { + name = "Magma Orb", + hidden = true, + color = 3, + baseFlags = { + spell = true, + area = true, + projectile = true, + fire = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [19] = true, [18] = true, [36] = true, [33] = true, [3] = true, [26] = true, [23] = true, }, + baseMods = { + skill("castTime", 0.7), + skill("critChance", 5), + skill("cooldown", 3), + --"projectile_spread_radius" = 0 + mod("ProjectileCount", "BASE", 0), --"number_of_additional_projectiles" = 0 + --"fire_mortar_second_hit_damage_+%_final" = -60 + mod("Speed", "INC", 30, ModFlag.Cast), --"base_cast_speed_+%" = 30 + mod("ChainCount", "BASE", 2), --"number_of_additional_projectiles_in_chain" = 2 + --"is_area_damage" = ? + --"base_is_projectile" = ? + }, + qualityMods = { + }, + levelMods = { + [1] = skill("levelRequirement", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + }, + levels = { + [1] = { 3, 11, 16, }, + [2] = { 5, 14, 20, }, + [3] = { 8, 18, 27, }, + [4] = { 12, 26, 39, }, + [5] = { 15, 33, 49, }, + [6] = { 19, 44, 65, }, + [7] = { 20, 47, 70, }, + [8] = { 21, 50, 75, }, + [9] = { 26, 69, 104, }, + [10] = { 30, 89, 133, }, + [11] = { 34, 113, 169, }, + [12] = { 38, 142, 212, }, + [13] = { 43, 187, 280, }, + [14] = { 45, 208, 312, }, + [15] = { 53, 316, 474, }, + [16] = { 58, 407, 611, }, + [17] = { 62, 497, 746, }, + [18] = { 63, 522, 783, }, + [19] = { 66, 604, 907, }, + [20] = { 67, 634, 952, }, + [21] = { 68, 1149, 1531, }, + [22] = { 69, 1205, 1607, }, + [23] = { 70, 1265, 1686, }, + [24] = { 71, 1326, 1769, }, + [25] = { 72, 1391, 1855, }, + [26] = { 73, 1459, 1945, }, + [27] = { 74, 1530, 2040, }, + [28] = { 75, 1604, 2138, }, + [29] = { 76, 1681, 2241, }, + [30] = { 77, 1762, 2349, }, + [31] = { 78, 1846, 2462, }, + [32] = { 79, 1935, 2579, }, + [33] = { 80, 2027, 2702, }, + [34] = { 81, 2123, 2831, }, + [35] = { 82, 2224, 2965, }, + }, +} skills["GoatmanMoltenShell"] = { name = "Molten Shell", hidden = true, diff --git a/Data/Skills/sup_int.lua b/Data/Skills/sup_int.lua index d5943b38..b0ca1762 100644 --- a/Data/Skills/sup_int.lua +++ b/Data/Skills/sup_int.lua @@ -1107,10 +1107,10 @@ skills["SupportMinionDamage"] = { mod("ManaCost", "MORE", 30), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 0.75) }), --"minion_damage_+%" = 0.75 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 0.75) }), --"minion_damage_+%" = 0.75 }, levelMods = { - [1] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", nil) }), --"support_minion_damage_+%_final" + [1] = mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", nil) }), --"support_minion_damage_+%_final" }, levels = { [1] = { 30, }, @@ -1161,10 +1161,10 @@ skills["SupportMinionLife"] = { mod("ManaCost", "MORE", 40), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 0.75) }), --"minion_maximum_life_+%" = 0.75 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 0.75) }), --"minion_maximum_life_+%" = 0.75 }, levelMods = { - [1] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [1] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" }, levels = { [1] = { 30, }, @@ -1216,12 +1216,12 @@ skills["SupportMinionSpeed"] = { mod("ManaCost", "MORE", 40), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", 0.5) }), --"minion_movement_speed_+%" = 0.5 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 0.5) }), --"minion_movement_speed_+%" = 0.5 }, levelMods = { - [1] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", nil) }), --"minion_movement_speed_+%" - [2] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Speed", "INC", nil, ModFlag.Attack) }), --"minion_attack_speed_+%" - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Speed", "INC", nil, ModFlag.Cast) }), --"minion_cast_speed_+%" + [1] = mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", nil) }), --"minion_movement_speed_+%" + [2] = mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", nil, ModFlag.Attack) }), --"minion_attack_speed_+%" + [3] = mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", nil, ModFlag.Cast) }), --"minion_cast_speed_+%" }, levels = { [1] = { 25, 10, 10, }, @@ -1272,15 +1272,15 @@ skills["SupportSummonElementalResistances"] = { mod("ManaCost", "MORE", 40), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("FireResist", "BASE", 0.5) }), --"summon_fire_resistance_+" = 0.5 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ColdResist", "BASE", 0.5) }), --"summon_cold_resistance_+" = 0.5 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("LightningResist", "BASE", 0.5) }), --"summon_lightning_resistance_+" = 0.5 + mod("MinionModifier", "LIST", { mod = mod("FireResist", "BASE", 0.5) }), --"summon_fire_resistance_+" = 0.5 + mod("MinionModifier", "LIST", { mod = mod("ColdResist", "BASE", 0.5) }), --"summon_cold_resistance_+" = 0.5 + mod("MinionModifier", "LIST", { mod = mod("LightningResist", "BASE", 0.5) }), --"summon_lightning_resistance_+" = 0.5 }, levelMods = { - [1] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("FireResist", "BASE", nil) }), --"summon_fire_resistance_+" - [2] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ColdResist", "BASE", nil) }), --"summon_cold_resistance_+" - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("LightningResist", "BASE", nil) }), --"summon_lightning_resistance_+" - [4] = { mod("ElementalDamage", "MORE", nil, 0, KeywordFlag.Totem), mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ElementalDamage", "MORE", nil) }) }, --"support_minion_totem_resistance_elemental_damage_+%_final" + [1] = mod("MinionModifier", "LIST", { mod = mod("FireResist", "BASE", nil) }), --"summon_fire_resistance_+" + [2] = mod("MinionModifier", "LIST", { mod = mod("ColdResist", "BASE", nil) }), --"summon_cold_resistance_+" + [3] = mod("MinionModifier", "LIST", { mod = mod("LightningResist", "BASE", nil) }), --"summon_lightning_resistance_+" + [4] = { mod("ElementalDamage", "MORE", nil, 0, KeywordFlag.Totem), mod("MinionModifier", "LIST", { mod = mod("ElementalDamage", "MORE", nil) }) }, --"support_minion_totem_resistance_elemental_damage_+%_final" }, levels = { [1] = { 25, 25, 25, 10, }, diff --git a/Data/Skills/sup_str.lua b/Data/Skills/sup_str.lua index 6124d95b..005b27dd 100644 --- a/Data/Skills/sup_str.lua +++ b/Data/Skills/sup_str.lua @@ -71,7 +71,7 @@ skills["SupportBloodMagic"] = { addSkillTypes = { }, excludeSkillTypes = { }, baseMods = { - flag("SkillBloodMagic", true), --"base_use_life_in_place_of_mana" = ? + flag("SkillBloodMagic"), --"base_use_life_in_place_of_mana" = ? }, qualityMods = { mod("ManaCost", "INC", -0.5), --"base_mana_cost_-%" = 0.5 @@ -504,7 +504,7 @@ skills["SupportFortify"] = { excludeSkillTypes = { 47, }, baseMods = { mod("ManaCost", "MORE", 10), - mod("Misc", "LIST", { type = "Condition", var = "Fortify" }, 0, 0, { type = "Condition", var = "Combat" }), --"chance_to_fortify_on_melee_hit_+%" = 100 + flag("Condition:Fortify", { type = "Condition", var = "Combat" }), --"chance_to_fortify_on_melee_hit_+%" = 100 mod("FortifyDuration", "INC", 25), --"fortify_duration_+%" = 25 }, qualityMods = { diff --git a/Export/Skills/act_dex.lua b/Export/Skills/act_dex.lua index c975ab92..df5db936 100644 --- a/Export/Skills/act_dex.lua +++ b/Export/Skills/act_dex.lua @@ -640,7 +640,7 @@ skills["BlinkArrow"] = { skill("cooldown", 3), skill("duration", 3), --"base_skill_effect_duration" = 3000 --"number_of_monsters_to_summon" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", 75) }), --"active_skill_minion_damage_+%_final" = 75 + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 75) }), --"active_skill_minion_damage_+%_final" = 75 --"display_minion_monster_type" = 4 --"base_is_projectile" = ? skill("minionUseBowAndQuiver", true), @@ -651,8 +651,8 @@ skills["BlinkArrow"] = { levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", nil) }), --"minion_damage_+%" - [4] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [3] = mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", nil) }), --"minion_damage_+%" + [4] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [5] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -3061,7 +3061,7 @@ skills["MirrorArrow"] = { skill("cooldown", 3), skill("duration", 3), --"base_skill_effect_duration" = 3000 --"number_of_monsters_to_summon" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", 75) }), --"active_skill_minion_damage_+%_final" = 75 + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 75) }), --"active_skill_minion_damage_+%_final" = 75 --"display_minion_monster_type" = 4 --"base_is_projectile" = ? skill("minionUseBowAndQuiver", true), @@ -3072,8 +3072,8 @@ skills["MirrorArrow"] = { levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", nil) }), --"minion_damage_+%" - [4] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [3] = mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", nil) }), --"minion_damage_+%" + [4] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [5] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -4271,11 +4271,11 @@ skills["SummonIceGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 6 - mod("Misc", "LIST", { type = "Condition", var = "HaveColdGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HaveColdGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), @@ -4283,7 +4283,7 @@ skills["SummonIceGolem"] = { --[3] = "base_actor_scale_+%" [4] = mod("CritChance", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"ice_golem_grants_critical_strike_chance_+%" [5] = mod("Accuracy", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"ice_golem_grants_accuracy_+%" - [6] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [6] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [7] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { diff --git a/Export/Skills/act_dex.txt b/Export/Skills/act_dex.txt index 82db4612..cf165c65 100644 --- a/Export/Skills/act_dex.txt +++ b/Export/Skills/act_dex.txt @@ -406,7 +406,7 @@ local skills, mod, flag, skill = ... #skill SummonIceGolem #flags spell minion golem cold -#baseMod mod("Misc", "LIST", { type = "Condition", var = "HaveColdGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }) +#baseMod flag("Condition:HaveColdGolem", { type = "GlobalEffect", effectType = "Buff" }) minionList = { "SummonedIceGolem", }, diff --git a/Export/Skills/act_int.lua b/Export/Skills/act_int.lua index 9528895d..24221aea 100644 --- a/Export/Skills/act_int.lua +++ b/Export/Skills/act_int.lua @@ -3758,20 +3758,20 @@ skills["RaiseSpectre"] = { baseMods = { skill("castTime", 0.85), mod("ActiveSpectreLimit", "BASE", 1), --"base_number_of_spectres_allowed" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "MORE", 55) }), --"active_skill_minion_movement_velocity_+%_final" = 55 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "MORE", 55) }), --"active_skill_minion_movement_velocity_+%_final" = 55 --"movement_velocity_cap" = -89 --"damage_taken_+%_from_arrow_traps_final" = -90 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ElementalResist", "BASE", 30) }), --"minion_elemental_resistance_%" = 30 + mod("MinionModifier", "LIST", { mod = mod("ElementalResist", "BASE", 30) }), --"minion_elemental_resistance_%" = 30 }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", nil) }), --"active_skill_minion_damage_+%_final" - [4] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "MORE", nil) }), --"active_skill_minion_life_+%_final" - [5] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("EnergyShield", "MORE", nil) }), --"active_skill_minion_energy_shield_+%_final" + [3] = mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", nil) }), --"active_skill_minion_damage_+%_final" + [4] = mod("MinionModifier", "LIST", { mod = mod("Life", "MORE", nil) }), --"active_skill_minion_life_+%_final" + [5] = mod("MinionModifier", "LIST", { mod = mod("EnergyShield", "MORE", nil) }), --"active_skill_minion_energy_shield_+%_final" }, levels = { [1] = { 28, 21, -30, -20, -20, }, @@ -3827,12 +3827,12 @@ skills["RaiseZombie"] = { baseMods = { skill("castTime", 0.85), mod("ActiveZombieLimit", "BASE", 3), --"base_number_of_zombies_allowed" = 3 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", 0) }), --"active_skill_minion_damage_+%_final" = 0 + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", 0) }), --"active_skill_minion_damage_+%_final" = 0 --"display_minion_monster_type" = 1 }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), @@ -4536,18 +4536,18 @@ skills["SummonChaosGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 5 - mod("Misc", "LIST", { type = "Condition", var = "HaveChaosGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HaveChaosGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), --[3] = "base_actor_scale_+%" --[4] = "chaos_golem_grants_additional_physical_damage_reduction_%" - [5] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [5] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [6] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -4610,18 +4610,18 @@ skills["SummonLightningGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 11 - mod("Misc", "LIST", { type = "Condition", var = "HaveLightningGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HaveLightningGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), --[3] = "base_actor_scale_+%" [4] = mod("Speed", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"lightning_golem_grants_attack_and_cast_speed_+%" - [5] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [5] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [6] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -4686,7 +4686,7 @@ skills["SummonRagingSpirit"] = { skill("minionDamageEffectiveness", -30), --"active_skill_minion_added_damage_+%_final" = -30 }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 1) }), --"minion_movement_speed_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), diff --git a/Export/Skills/act_int.txt b/Export/Skills/act_int.txt index 6b23f88d..812cd0e1 100644 --- a/Export/Skills/act_int.txt +++ b/Export/Skills/act_int.txt @@ -386,7 +386,7 @@ local skills, mod, flag, skill = ... #skill SummonChaosGolem #flags spell minion golem chaos -#baseMod mod("Misc", "LIST", { type = "Condition", var = "HaveChaosGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }) +#baseMod flag("Condition:HaveChaosGolem", { type = "GlobalEffect", effectType = "Buff" }) minionList = { "SummonedChaosGolem", }, @@ -394,7 +394,7 @@ local skills, mod, flag, skill = ... #skill SummonLightningGolem #flags spell minion golem lightning -#baseMod mod("Misc", "LIST", { type = "Condition", var = "HaveLightningGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }) +#baseMod flag("Condition:HaveLightningGolem", { type = "GlobalEffect", effectType = "Buff" }) minionList = { "SummonedLightningGolem", }, diff --git a/Export/Skills/act_str.lua b/Export/Skills/act_str.lua index 7c8a5693..f5b8bbef 100644 --- a/Export/Skills/act_str.lua +++ b/Export/Skills/act_str.lua @@ -688,7 +688,7 @@ skills["DominatingBlow"] = { baseMods = { skill("castTime", 1), skill("duration", 20), --"base_skill_effect_duration" = 20000 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", -35) }), --"active_skill_minion_damage_+%_final" = -35 + mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", -35) }), --"active_skill_minion_damage_+%_final" = -35 --"is_dominated" = ? }, qualityMods = { @@ -2648,18 +2648,18 @@ skills["SummonFireGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 7 - mod("Misc", "LIST", { type = "Condition", var = "HaveFireGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HaveFireGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), --[3] = "base_actor_scale_+%" [4] = mod("Damage", "INC", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"fire_golem_grants_damage_+%" - [5] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [5] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [6] = skill("minionLevel", nil), --"display_minion_monster_level" }, levels = { @@ -2720,17 +2720,17 @@ skills["SummonRockGolem"] = { skill("cooldown", 6), mod("ActiveGolemLimit", "BASE", 1), --"base_number_of_golems_allowed" = 1 --"display_minion_monster_type" = 10 - mod("Misc", "LIST", { type = "Condition", var = "HavePhysicalGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), + flag("Condition:HavePhysicalGolem", { type = "GlobalEffect", effectType = "Buff" }), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 1) }), --"minion_maximum_life_+%" = 1 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 1) }), --"minion_damage_+%" = 1 }, levelMods = { [1] = skill("levelRequirement", nil), [2] = skill("manaCost", nil), --[3] = "base_actor_scale_+%" - [4] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [4] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" [5] = mod("LifeRegen", "BASE", nil, 0, 0, { type = "GlobalEffect", effectType = "Buff" }), --"stone_golem_grants_base_life_regeneration_rate_per_minute" [6] = skill("minionLevel", nil), --"display_minion_monster_level" }, diff --git a/Export/Skills/act_str.txt b/Export/Skills/act_str.txt index 0dd56d5f..d2f378c3 100644 --- a/Export/Skills/act_str.txt +++ b/Export/Skills/act_str.txt @@ -197,7 +197,7 @@ local skills, mod, flag, skill = ... #skill SummonFireGolem #flags spell minion golem fire -#baseMod mod("Misc", "LIST", { type = "Condition", var = "HaveFireGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }) +#baseMod flag("Condition:HaveFireGolem", { type = "GlobalEffect", effectType = "Buff" }) minionList = { "SummonedFlameGolem", }, @@ -205,7 +205,7 @@ local skills, mod, flag, skill = ... #skill SummonRockGolem #flags spell minion golem -#baseMod mod("Misc", "LIST", { type = "Condition", var = "HavePhysicalGolem" }, 0, 0, { type = "GlobalEffect", effectType = "Buff" }) +#baseMod flag("Condition:HavePhysicalGolem", { type = "GlobalEffect", effectType = "Buff" }) minionList = { "SummonedStoneGolem", }, diff --git a/Export/Skills/spectre.lua b/Export/Skills/spectre.lua index df69954a..ba4eef4a 100644 --- a/Export/Skills/spectre.lua +++ b/Export/Skills/spectre.lua @@ -680,6 +680,74 @@ skills["GhostPirateBladeVortexSpectre"] = { [35] = { 82, 276, 414, }, }, } +skills["GoatmanFireMagmaOrb"] = { + name = "Magma Orb", + hidden = true, + color = 3, + baseFlags = { + spell = true, + area = true, + projectile = true, + fire = true, + }, + skillTypes = { [2] = true, [10] = true, [11] = true, [17] = true, [19] = true, [18] = true, [36] = true, [33] = true, [3] = true, [26] = true, [23] = true, }, + baseMods = { + skill("castTime", 0.7), + skill("critChance", 5), + skill("cooldown", 3), + --"projectile_spread_radius" = 0 + mod("ProjectileCount", "BASE", 0), --"number_of_additional_projectiles" = 0 + --"fire_mortar_second_hit_damage_+%_final" = -60 + mod("Speed", "INC", 30, ModFlag.Cast), --"base_cast_speed_+%" = 30 + mod("ChainCount", "BASE", 2), --"number_of_additional_projectiles_in_chain" = 2 + --"is_area_damage" = ? + --"base_is_projectile" = ? + }, + qualityMods = { + }, + levelMods = { + [1] = skill("levelRequirement", nil), + [2] = skill("FireMin", nil), --"spell_minimum_base_fire_damage" + [3] = skill("FireMax", nil), --"spell_maximum_base_fire_damage" + }, + levels = { + [1] = { 3, 11, 16, }, + [2] = { 5, 14, 20, }, + [3] = { 8, 18, 27, }, + [4] = { 12, 26, 39, }, + [5] = { 15, 33, 49, }, + [6] = { 19, 44, 65, }, + [7] = { 20, 47, 70, }, + [8] = { 21, 50, 75, }, + [9] = { 26, 69, 104, }, + [10] = { 30, 89, 133, }, + [11] = { 34, 113, 169, }, + [12] = { 38, 142, 212, }, + [13] = { 43, 187, 280, }, + [14] = { 45, 208, 312, }, + [15] = { 53, 316, 474, }, + [16] = { 58, 407, 611, }, + [17] = { 62, 497, 746, }, + [18] = { 63, 522, 783, }, + [19] = { 66, 604, 907, }, + [20] = { 67, 634, 952, }, + [21] = { 68, 1149, 1531, }, + [22] = { 69, 1205, 1607, }, + [23] = { 70, 1265, 1686, }, + [24] = { 71, 1326, 1769, }, + [25] = { 72, 1391, 1855, }, + [26] = { 73, 1459, 1945, }, + [27] = { 74, 1530, 2040, }, + [28] = { 75, 1604, 2138, }, + [29] = { 76, 1681, 2241, }, + [30] = { 77, 1762, 2349, }, + [31] = { 78, 1846, 2462, }, + [32] = { 79, 1935, 2579, }, + [33] = { 80, 2027, 2702, }, + [34] = { 81, 2123, 2831, }, + [35] = { 82, 2224, 2965, }, + }, +} skills["GoatmanMoltenShell"] = { name = "Molten Shell", hidden = true, diff --git a/Export/Skills/spectre.txt b/Export/Skills/spectre.txt index 1f40a925..6b3c2563 100644 --- a/Export/Skills/spectre.txt +++ b/Export/Skills/spectre.txt @@ -60,6 +60,10 @@ local skills, mod, flag, skill = ... #baseMod skill("hitTimeOverride", 1) #mods +#skill GoatmanFireMagmaOrb Magma Orb +#flags spell area projectile fire +#mods + #skill GoatmanMoltenShell Molten Shell #flags spell area duration fire #mods diff --git a/Export/Skills/statmap.ini b/Export/Skills/statmap.ini index 7655ac21..c10483d9 100644 --- a/Export/Skills/statmap.ini +++ b/Export/Skills/statmap.ini @@ -70,7 +70,7 @@ mod = skill("poisonDurationIsSkillDuration", true) [spell_damage_modifiers_apply_to_damage_over_time] mod = skill("dotIsSpell", true) [base_use_life_in_place_of_mana] -mod = flag("SkillBloodMagic", true) +mod = flag("SkillBloodMagic") [base_active_skill_totem_level] [totem_support_gem_level] mod = skill("totemLevel", {val}) @@ -300,7 +300,7 @@ mod = mod("PoisonChance", "BASE", {val}) [global_poison_on_hit] mod = mod("PoisonChance", "BASE", 100) [chance_to_fortify_on_melee_hit_+%] -mod = mod("Misc", "LIST", { type = "Condition", var = "Fortify" }, 0, 0, { type = "Condition", var = "Combat" }) +mod = flag("Condition:Fortify", { type = "Condition", var = "Combat" }) [base_poison_damage_+%] mod = mod("Damage", "INC", {val}, 0, KeywordFlag.Poison) [base_poison_duration_+%] @@ -466,23 +466,23 @@ mod = mod("ActiveTotemLimit", "BASE", {val}) mod = mod("TotemPlacementSpeed", "INC", {val}) # Minion [minion_damage_+%] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", {val}) }) [minion_maximum_life_+%] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", {val}) }) [minion_movement_speed_+%] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", {val}) }) [minion_attack_speed_+%] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Speed", "INC", {val}, ModFlag.Attack) }) +mod = mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", {val}, ModFlag.Attack) }) [minion_cast_speed_+%] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Speed", "INC", {val}, ModFlag.Cast) }) +mod = mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", {val}, ModFlag.Cast) }) [minion_elemental_resistance_%] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ElementalResist", "BASE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("ElementalResist", "BASE", {val}) }) [summon_fire_resistance_+] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("FireResist", "BASE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("FireResist", "BASE", {val}) }) [summon_cold_resistance_+] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ColdResist", "BASE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("ColdResist", "BASE", {val}) }) [summon_lightning_resistance_+] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("LightningResist", "BASE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("LightningResist", "BASE", {val}) }) [base_number_of_zombies_allowed] mod = mod("ActiveZombieLimit", "BASE", {val}) [base_number_of_skeletons_allowed] @@ -498,13 +498,13 @@ mod = mod("ActiveWolfLimit", "BASE", {val}) [number_of_spider_minions_allowed] mod = mod("ActiveSpiderLimit", "BASE", {val}) [active_skill_minion_damage_+%_final] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", {val}) }) [active_skill_minion_life_+%_final] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "MORE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("Life", "MORE", {val}) }) [active_skill_minion_energy_shield_+%_final] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("EnergyShield", "MORE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("EnergyShield", "MORE", {val}) }) [active_skill_minion_movement_velocity_+%_final] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "MORE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "MORE", {val}) }) # Curse [curse_effect_+%] mod = mod("CurseEffect", "INC", {val}) @@ -718,10 +718,10 @@ mod = mod("AreaOfEffect", "MORE", {val}) mod = mod("Damage", "MORE", {val}) # Minion Damage [support_minion_damage_+%_final] -mod = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", {val}) }) +mod = mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", {val}) }) # Minion and Totem Elemental Resistance [support_minion_totem_resistance_elemental_damage_+%_final] -mod = { mod("ElementalDamage", "MORE", {val}, 0, KeywordFlag.Totem), mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ElementalDamage", "MORE", {val}) }) } +mod = { mod("ElementalDamage", "MORE", {val}, 0, KeywordFlag.Totem), mod("MinionModifier", "LIST", { mod = mod("ElementalDamage", "MORE", {val}) }) } # Multiple Traps [support_multithrow_damage_+%_final] mod = mod("Damage", "MORE", {val}) diff --git a/Export/Skills/sup_int.lua b/Export/Skills/sup_int.lua index d5943b38..b0ca1762 100644 --- a/Export/Skills/sup_int.lua +++ b/Export/Skills/sup_int.lua @@ -1107,10 +1107,10 @@ skills["SupportMinionDamage"] = { mod("ManaCost", "MORE", 30), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 0.75) }), --"minion_damage_+%" = 0.75 + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", 0.75) }), --"minion_damage_+%" = 0.75 }, levelMods = { - [1] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "MORE", nil) }), --"support_minion_damage_+%_final" + [1] = mod("MinionModifier", "LIST", { mod = mod("Damage", "MORE", nil) }), --"support_minion_damage_+%_final" }, levels = { [1] = { 30, }, @@ -1161,10 +1161,10 @@ skills["SupportMinionLife"] = { mod("ManaCost", "MORE", 40), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", 0.75) }), --"minion_maximum_life_+%" = 0.75 + mod("MinionModifier", "LIST", { mod = mod("Life", "INC", 0.75) }), --"minion_maximum_life_+%" = 0.75 }, levelMods = { - [1] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" + [1] = mod("MinionModifier", "LIST", { mod = mod("Life", "INC", nil) }), --"minion_maximum_life_+%" }, levels = { [1] = { 30, }, @@ -1216,12 +1216,12 @@ skills["SupportMinionSpeed"] = { mod("ManaCost", "MORE", 40), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", 0.5) }), --"minion_movement_speed_+%" = 0.5 + mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", 0.5) }), --"minion_movement_speed_+%" = 0.5 }, levelMods = { - [1] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("MovementSpeed", "INC", nil) }), --"minion_movement_speed_+%" - [2] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Speed", "INC", nil, ModFlag.Attack) }), --"minion_attack_speed_+%" - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Speed", "INC", nil, ModFlag.Cast) }), --"minion_cast_speed_+%" + [1] = mod("MinionModifier", "LIST", { mod = mod("MovementSpeed", "INC", nil) }), --"minion_movement_speed_+%" + [2] = mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", nil, ModFlag.Attack) }), --"minion_attack_speed_+%" + [3] = mod("MinionModifier", "LIST", { mod = mod("Speed", "INC", nil, ModFlag.Cast) }), --"minion_cast_speed_+%" }, levels = { [1] = { 25, 10, 10, }, @@ -1272,15 +1272,15 @@ skills["SupportSummonElementalResistances"] = { mod("ManaCost", "MORE", 40), }, qualityMods = { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("FireResist", "BASE", 0.5) }), --"summon_fire_resistance_+" = 0.5 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ColdResist", "BASE", 0.5) }), --"summon_cold_resistance_+" = 0.5 - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("LightningResist", "BASE", 0.5) }), --"summon_lightning_resistance_+" = 0.5 + mod("MinionModifier", "LIST", { mod = mod("FireResist", "BASE", 0.5) }), --"summon_fire_resistance_+" = 0.5 + mod("MinionModifier", "LIST", { mod = mod("ColdResist", "BASE", 0.5) }), --"summon_cold_resistance_+" = 0.5 + mod("MinionModifier", "LIST", { mod = mod("LightningResist", "BASE", 0.5) }), --"summon_lightning_resistance_+" = 0.5 }, levelMods = { - [1] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("FireResist", "BASE", nil) }), --"summon_fire_resistance_+" - [2] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ColdResist", "BASE", nil) }), --"summon_cold_resistance_+" - [3] = mod("Misc", "LIST", { type = "MinionModifier", mod = mod("LightningResist", "BASE", nil) }), --"summon_lightning_resistance_+" - [4] = { mod("ElementalDamage", "MORE", nil, 0, KeywordFlag.Totem), mod("Misc", "LIST", { type = "MinionModifier", mod = mod("ElementalDamage", "MORE", nil) }) }, --"support_minion_totem_resistance_elemental_damage_+%_final" + [1] = mod("MinionModifier", "LIST", { mod = mod("FireResist", "BASE", nil) }), --"summon_fire_resistance_+" + [2] = mod("MinionModifier", "LIST", { mod = mod("ColdResist", "BASE", nil) }), --"summon_cold_resistance_+" + [3] = mod("MinionModifier", "LIST", { mod = mod("LightningResist", "BASE", nil) }), --"summon_lightning_resistance_+" + [4] = { mod("ElementalDamage", "MORE", nil, 0, KeywordFlag.Totem), mod("MinionModifier", "LIST", { mod = mod("ElementalDamage", "MORE", nil) }) }, --"support_minion_totem_resistance_elemental_damage_+%_final" }, levels = { [1] = { 25, 25, 25, 10, }, diff --git a/Export/Skills/sup_str.lua b/Export/Skills/sup_str.lua index 6124d95b..005b27dd 100644 --- a/Export/Skills/sup_str.lua +++ b/Export/Skills/sup_str.lua @@ -71,7 +71,7 @@ skills["SupportBloodMagic"] = { addSkillTypes = { }, excludeSkillTypes = { }, baseMods = { - flag("SkillBloodMagic", true), --"base_use_life_in_place_of_mana" = ? + flag("SkillBloodMagic"), --"base_use_life_in_place_of_mana" = ? }, qualityMods = { mod("ManaCost", "INC", -0.5), --"base_mana_cost_-%" = 0.5 @@ -504,7 +504,7 @@ skills["SupportFortify"] = { excludeSkillTypes = { 47, }, baseMods = { mod("ManaCost", "MORE", 10), - mod("Misc", "LIST", { type = "Condition", var = "Fortify" }, 0, 0, { type = "Condition", var = "Combat" }), --"chance_to_fortify_on_melee_hit_+%" = 100 + flag("Condition:Fortify", { type = "Condition", var = "Combat" }), --"chance_to_fortify_on_melee_hit_+%" = 100 mod("FortifyDuration", "INC", 25), --"fortify_duration_+%" = 25 }, qualityMods = { diff --git a/Modules/CalcActiveSkill.lua b/Modules/CalcActiveSkill.lua index d5d4acdc..057a7f19 100644 --- a/Modules/CalcActiveSkill.lua +++ b/Modules/CalcActiveSkill.lua @@ -383,15 +383,11 @@ function calcs.buildActiveSkillModList(env, actor, activeSkill) end -- Extract skill data - for _, value in ipairs(env.modDB:Sum("LIST", activeSkill.skillCfg, "Misc")) do - if value.type == "SkillData" then - activeSkill.skillData[value.key] = value.value - end + for _, value in ipairs(env.modDB:Sum("LIST", activeSkill.skillCfg, "SkillData")) do + activeSkill.skillData[value.key] = value.value end - for _, value in ipairs(skillModList:Sum("LIST", activeSkill.skillCfg, "Misc")) do - if value.type == "SkillData" then - activeSkill.skillData[value.key] = value.value - end + for _, value in ipairs(skillModList:Sum("LIST", activeSkill.skillCfg, "SkillData")) do + activeSkill.skillData[value.key] = value.value end -- Create minion diff --git a/Modules/CalcOffence.lua b/Modules/CalcOffence.lua index 2af03e17..7ca44034 100644 --- a/Modules/CalcOffence.lua +++ b/Modules/CalcOffence.lua @@ -151,13 +151,11 @@ function calcs.offence(env, actor) modDB:AddList(mainSkill.skillModList) -- Update skill data - for _, value in ipairs(modDB:Sum("LIST", skillCfg, "Misc")) do - if value.type == "SkillData" then - if value.merge == "MAX" then - skillData[value.key] = m_max(value.value, skillData[value.key] or 0) - else - skillData[value.key] = value.value - end + for _, value in ipairs(modDB:Sum("LIST", skillCfg, "SkillData")) do + if value.merge == "MAX" then + skillData[value.key] = m_max(value.value, skillData[value.key] or 0) + else + skillData[value.key] = value.value end end @@ -173,8 +171,8 @@ function calcs.offence(env, actor) if modDB:Sum("FLAG", nil, "MinionDamageAppliesToPlayer") then -- Minion Damage conversion from The Scourge - for _, value in ipairs(modDB:Sum("LIST", env.player.mainSkill.skillCfg, "Misc")) do - if value.type == "MinionModifier" and value.mod.name == "Damage" then + for _, value in ipairs(modDB:Sum("LIST", env.player.mainSkill.skillCfg, "MinionModifier")) do + if value.mod.name == "Damage" then modDB:AddMod(value.mod) end end @@ -726,13 +724,13 @@ function calcs.offence(env, actor) end else if not modDB:Sum("FLAG", cfg, "CannotLeechLife") then - local lifeLeech = modDB:Sum("BASE", cfg, "DamageLifeLeech", damageType.."DamageLifeLeech", isElemental[damageType] and "ElementalDamageLifeLeech" or nil) + enemyDB:Sum("BASE", nil, "SelfDamageLifeLeech") / 100 + 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 - local manaLeech = modDB:Sum("BASE", cfg, "DamageManaLeech", damageType.."DamageManaLeech", isElemental[damageType] and "ElementalDamageManaLeech" or nil) + enemyDB:Sum("BASE", nil, "SelfDamageManaLeech") / 100 + 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 end diff --git a/Modules/CalcPerform.lua b/Modules/CalcPerform.lua index c0e244c5..31f7a30a 100644 --- a/Modules/CalcPerform.lua +++ b/Modules/CalcPerform.lua @@ -157,11 +157,7 @@ local function doActorAttribsPoolsConditions(env, actor) else condList["NotUsingCorruptedItem"] = true end - if env.mode_buffs then - condList["Buffed"] = true - end - if env.mode_combat then - condList["Combat"] = true + if env.mode_combat then if not modDB:Sum("FLAG", nil, "NeverCrit") then condList["CritInPast8Sec"] = true end @@ -186,17 +182,9 @@ local function doActorAttribsPoolsConditions(env, actor) condList["DetonatedMinesRecently"] = true end end - if env.mode_effective then - condList["Effective"] = true - end - for _, value in ipairs(modDB:Sum("LIST", nil, "Misc")) do - if value.type == "Condition" then - condList[value.var] = true - end - end end --- Process charges, misc modifiers, and other buffs +-- Process charges, enemy modifiers, and other buffs local function doActorMisc(env, actor) local modDB = actor.modDB local enemyDB = actor.enemy.modDB @@ -244,24 +232,9 @@ local function doActorMisc(env, actor) condList["AtMaxEnduranceCharges"] = true end - -- Process misc modifiers - for _, value in ipairs(modDB:Sum("LIST", nil, "Misc")) do - if value.type == "Condition" then - condList[value.var] = true - elseif value.type == "EnemyCondition" then - enemyDB.conditions[value.var] = true - end - end - -- Process enemy modifiers last in case they depend on conditions that were set by misc modifiers - for _, value in ipairs(modDB:Sum("LIST", nil, "Misc")) do - if value.type == "EnemyModifier" then - enemyDB:AddMod(value.mod) - end - end - - -- Process conditions that can depend on other conditions - if condList["Ignited"] then - condList["Burning"] = true + -- Process enemy modifiers + for _, value in ipairs(modDB:Sum("LIST", nil, "EnemyModifier")) do + enemyDB:AddMod(value.mod) end -- Add misc buffs @@ -314,7 +287,7 @@ function calcs.perform(env) env.minion.modDB = common.New("ModDB") env.minion.modDB.actor = env.minion env.minion.modDB.multipliers["Level"] = env.minion.level - calcs.initModDB(env.minion.modDB) + calcs.initModDB(env, env.minion.modDB) env.minion.modDB:NewMod("Life", "BASE", m_floor(data.monsterLifeTable[env.minion.level] * env.minion.minionData.life), "Base") if env.minion.minionData.energyShield then env.minion.modDB:NewMod("EnergyShield", "BASE", m_floor(data.monsterLifeTable[env.minion.level] * env.minion.minionData.life * env.minion.minionData.energyShield), "Base") @@ -363,13 +336,6 @@ function calcs.perform(env) end end - -- Set multipliers - for _, value in ipairs(modDB:Sum("LIST", nil, "Misc")) do - if value.type == "Multiplier" then - modDB.multipliers[value.var] = (modDB.multipliers[value.var] or 0) + value.value - end - end - -- Merge flask modifiers if env.mode_combat then local effectInc = modDB:Sum("INC", nil, "FlaskEffect") @@ -457,10 +423,8 @@ function calcs.perform(env) doActorAttribsPoolsConditions(env, env.player) if env.minion then for _, source in ipairs({modDB, env.player.mainSkill.skillModList}) do - for _, value in ipairs(source:Sum("LIST", env.player.mainSkill.skillCfg, "Misc")) do - if value.type == "MinionModifier" then - env.minion.modDB:AddMod(value.mod) - end + for _, value in ipairs(source:Sum("LIST", env.player.mainSkill.skillCfg, "MinionModifier")) do + env.minion.modDB:AddMod(value.mod) end end doActorAttribsPoolsConditions(env, env.minion) @@ -483,7 +447,7 @@ function calcs.perform(env) local minionCurses = { limit = 1, } - local affectedByAuras = { } + local affectedByAura = { } for _, activeSkill in ipairs(env.activeSkillList) do local skillModList = activeSkill.skillModList local skillCfg = activeSkill.skillCfg @@ -511,7 +475,7 @@ function calcs.perform(env) if activeSkill.auraModList then if not activeSkill.skillData.auraCannotAffectSelf then activeSkill.buffSkill = true - affectedByAuras[env.player] = true + affectedByAura[env.player] = true local srcList = common.New("ModList") local inc = modDB:Sum("INC", skillCfg, "AuraEffect", "BuffEffectOnSelf", "AuraEffectOnSelf") + skillModList:Sum("INC", skillCfg, "AuraEffect") local more = modDB:Sum("MORE", skillCfg, "AuraEffect", "BuffEffectOnSelf", "AuraEffectOnSelf") * skillModList:Sum("MORE", skillCfg, "AuraEffect") @@ -521,7 +485,7 @@ function calcs.perform(env) end if env.minion and not modDB:Sum("FLAG", nil, "YourAurasCannotAffectAllies") then activeSkill.minionBuffSkill = true - affectedByAuras[env.minion] = true + affectedByAura[env.minion] = true local srcList = common.New("ModList") local inc = modDB:Sum("INC", skillCfg, "AuraEffect") + env.minion.modDB:Sum("INC", nil, "BuffEffectOnSelf", "AuraEffectOnSelf") + skillModList:Sum("INC", skillCfg, "AuraEffect") local more = modDB:Sum("MORE", skillCfg, "AuraEffect") * env.minion.modDB:Sum("MORE", nil, "BuffEffectOnSelf", "AuraEffectOnSelf") * skillModList:Sum("MORE", skillCfg, "AuraEffect") @@ -563,6 +527,7 @@ function calcs.perform(env) if activeSkill.curseModList or (activeSkill.skillFlags.curse and activeSkill.buffModList) then local curse = { name = activeSkill.activeGem.name, + fromPlayer = true, priority = activeSkill.skillTypes[SkillType.Aura] and 3 or 1, } local inc = modDB:Sum("INC", skillCfg, "CurseEffect") + enemyDB:Sum("INC", nil, "CurseEffectOnSelf") + skillModList:Sum("INC", skillCfg, "CurseEffect") @@ -612,8 +577,8 @@ function calcs.perform(env) for _, value in ipairs(modDB:Sum("LIST", nil, "ExtraCurse")) do local curse = { name = value.name, + fromPlayer = true, priority = 2, - modList = common.New("ModList") } local gemModList = common.New("ModList") calcs.mergeGemMods(gemModList, { @@ -630,6 +595,7 @@ 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) end @@ -674,9 +640,12 @@ function calcs.perform(env) enemyDB:AddList(modList) end modDB.multipliers["CurseOnEnemy"] = #curseSlots + local affectedByCurse = { } for _, slot in ipairs(curseSlots) do - modDB.conditions["EnemyCursed"] = true enemyDB.conditions["Cursed"] = true + if slot.fromPlayer then + affectedByCurse[env.enemy] = true + end if slot.modList then enemyDB:AddList(slot.modList) end @@ -703,9 +672,14 @@ function calcs.perform(env) end end - -- Check for modifiers to apply to actors affected by player auras + -- Check for modifiers to apply to actors affected by player auras or curses for _, value in ipairs(modDB:Sum("LIST", nil, "AffectedByAuraMod")) do - for actor in pairs(affectedByAuras) do + for actor in pairs(affectedByAura) do + actor.modDB:AddMod(value.mod) + end + end + for _, value in ipairs(modDB:Sum("LIST", nil, "AffectedByCurseMod")) do + for actor in pairs(affectedByCurse) do actor.modDB:AddMod(value.mod) end end diff --git a/Modules/CalcSections.lua b/Modules/CalcSections.lua index 4c32d765..f48cdaed 100644 --- a/Modules/CalcSections.lua +++ b/Modules/CalcSections.lua @@ -515,17 +515,17 @@ return { }, }, { label = "Life Leech Rate", flag = "leechLife", notFlag = "showAverage", { format = "{1:output:LifeLeechRate}", { breakdown = "LifeLeech" }, - { label = "Player modifiers", notFlagList = { "totem", "attack" }, modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "skill" }, - { label = "Main Hand", notFlag = "totem", flag = "weapon1Attack", modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon1" }, - { label = "Off Hand", notFlag = "totem", flag = "weapon2Attack", modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon2" }, + { label = "Player modifiers", notFlagList = { "totem", "attack" }, modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "skill" }, + { label = "Main Hand", notFlag = "totem", flag = "weapon1Attack", modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon1" }, + { label = "Off Hand", notFlag = "totem", flag = "weapon2Attack", modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon2" }, { label = "Totem modifiers", flag = "totem", modName = { "DamageLifeLeechToPlayer" }, modType = "BASE", cfg = "skill" }, { label = "Enemy modifiers", modName = { "SelfDamageLifeLeech" }, modType = "BASE", enemy = true }, }, }, { label = "Life Leech per Hit", flagList = { "leechLife", "showAverage" }, { format = "{1:output:LifeLeechPerHit}", { breakdown = "LifeLeech" }, - { label = "Player modifiers", notFlagList = { "totem", "attack" }, modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "skill" }, - { label = "Main Hand", notFlag = "totem", flag = "weapon1Attack", modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon1" }, - { label = "Off Hand", notFlag = "totem", flag = "weapon2Attack", modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon2" }, + { label = "Player modifiers", notFlagList = { "totem", "attack" }, modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "skill" }, + { label = "Main Hand", notFlag = "totem", flag = "weapon1Attack", modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon1" }, + { label = "Off Hand", notFlag = "totem", flag = "weapon2Attack", modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon2" }, { label = "Totem modifiers", flag = "totem", modName = { "DamageLifeLeechToPlayer" }, modType = "BASE", cfg = "skill" }, { label = "Enemy modifiers", modName = { "SelfDamageLifeLeech" }, modType = "BASE", enemy = true }, }, }, @@ -547,17 +547,17 @@ return { }, }, { label = "ES Leech Rate", flag = "leechES", notFlag = "showAverage", { format = "{1:output:EnergyShieldLeechRate}", { breakdown = "EnergyShieldLeech" }, - { label = "Player modifiers", notFlagList = { "totem", "attack" }, modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "skill" }, - { label = "Main Hand", notFlag = "totem", flag = "weapon1Attack", modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon1" }, - { label = "Off Hand", notFlag = "totem", flag = "weapon2Attack", modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon2" }, + { label = "Player modifiers", notFlagList = { "totem", "attack" }, modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "skill" }, + { label = "Main Hand", notFlag = "totem", flag = "weapon1Attack", modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon1" }, + { label = "Off Hand", notFlag = "totem", flag = "weapon2Attack", modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon2" }, { label = "Totem modifiers", flag = "totem", modName = { "DamageLifeLeechToPlayer" }, modType = "BASE", cfg = "skill" }, { label = "Enemy modifiers", modName = { "SelfDamageLifeLeech" }, modType = "BASE", enemy = true }, }, }, { label = "ES Leech per Hit", flagList = { "leechES", "showAverage" }, { format = "{1:output:EnergyShieldLeechPerHit}", { breakdown = "EnergyShieldLeech" }, - { label = "Player modifiers", notFlagList = { "totem", "attack" }, modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "skill" }, - { label = "Main Hand", notFlag = "totem", flag = "weapon1Attack", modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon1" }, - { label = "Off Hand", notFlag = "totem", flag = "weapon2Attack", modName = { "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon2" }, + { label = "Player modifiers", notFlagList = { "totem", "attack" }, modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "skill" }, + { label = "Main Hand", notFlag = "totem", flag = "weapon1Attack", modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon1" }, + { label = "Off Hand", notFlag = "totem", flag = "weapon2Attack", modName = { "DamageLeech", "DamageLifeLeech", "PhysicalDamageLifeLeech", "LightningDamageLifeLeech", "ColdDamageLifeLeech", "FireDamageLifeLeech", "ChaosDamageLifeLeech", "ElementalDamageLifeLeech" }, modType = "BASE", cfg = "weapon2" }, { label = "Totem modifiers", flag = "totem", modName = { "DamageLifeLeechToPlayer" }, modType = "BASE", cfg = "skill" }, { label = "Enemy modifiers", modName = { "SelfDamageLifeLeech" }, modType = "BASE", enemy = true }, }, }, @@ -579,16 +579,16 @@ return { }, }, { label = "Mana Leech Rate", flag = "leechMana", notFlag = "showAverage", { format = "{1:output:ManaLeechRate}", { breakdown = "ManaLeech" }, - { label = "Player modifiers", notFlag = "attack", modName = { "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "skill" }, - { label = "Main Hand", flag = "weapon1Attack", modName = { "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "weapon1" }, - { label = "Off Hand", flag = "weapon2Attack", modName = { "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "weapon2" }, + { label = "Player modifiers", notFlag = "attack", modName = { "DamageLeech", "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "skill" }, + { label = "Main Hand", flag = "weapon1Attack", modName = { "DamageLeech", "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "weapon1" }, + { label = "Off Hand", flag = "weapon2Attack", modName = { "DamageLeech", "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "weapon2" }, { label = "Enemy modifiers", modName = { "SelfDamageManaLeech" }, modType = "BASE", cfg = "skill", enemy = true }, }, }, { label = "Mana Leech per Hit", flagList = { "leechMana", "showAverage" }, { format = "{1:output:ManaLeechPerHit}", { breakdown = "ManaLeech" }, - { label = "Player modifiers", notFlag = "attack", modName = { "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "skill" }, - { label = "Main Hand", flag = "weapon1Attack", modName = { "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "weapon1" }, - { label = "Off Hand", flag = "weapon2Attack", modName = { "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "weapon2" }, + { label = "Player modifiers", notFlag = "attack", modName = { "DamageLeech", "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "skill" }, + { label = "Main Hand", flag = "weapon1Attack", modName = { "DamageLeech", "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "weapon1" }, + { label = "Off Hand", flag = "weapon2Attack", modName = { "DamageLeech", "DamageManaLeech", "PhysicalDamageManaLeech", "LightningDamageManaLeech", "ColdDamageManaLeech", "FireDamageManaLeech", "ChaosDamageManaLeech", "ElementalDamageManaLeech" }, modType = "BASE", cfg = "weapon2" }, { label = "Enemy modifiers", modName = { "SelfDamageManaLeech" }, modType = "BASE", enemy = true }, }, }, { label = "Mana Gain Rate", notFlag = "showAverage", haveOutput = "ManaOnHitRate", { format = "{1:output:ManaOnHitRate}", diff --git a/Modules/CalcSetup.lua b/Modules/CalcSetup.lua index e2068140..315d71b8 100644 --- a/Modules/CalcSetup.lua +++ b/Modules/CalcSetup.lua @@ -14,8 +14,8 @@ local m_max = math.max local tempTable1 = { } --- Initialise modifier database with stats common to all actors -function calcs.initModDB(modDB) +-- Initialise modifier database with stats and conditions common to all actors +function calcs.initModDB(env, modDB) modDB:NewMod("FireResistMax", "BASE", 75, "Base") modDB:NewMod("ColdResistMax", "BASE", 75, "Base") modDB:NewMod("LightningResistMax", "BASE", 75, "Base") @@ -30,6 +30,10 @@ function calcs.initModDB(modDB) modDB:NewMod("DamageTaken", "INC", 50, "Base", { type = "Condition", var = "Shocked" }) 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.conditions["Buffed"] = env.mode_buffs + modDB.conditions["Combat"] = env.mode_combat + modDB.conditions["Effective"] = env.mode_effective end -- Build list of modifiers from the listed tree nodes @@ -124,7 +128,7 @@ function calcs.initEnv(build, mode, override) modDB:NewMod(stat, "BASE", classStats["base_"..stat:lower()], "Base") end modDB.multipliers["Level"] = m_max(1, m_min(100, build.characterLevel)) - calcs.initModDB(modDB) + calcs.initModDB(env, modDB) modDB:NewMod("Life", "BASE", 12, "Base", { type = "Multiplier", var = "Level", base = 38 }) modDB:NewMod("Mana", "BASE", 6, "Base", { type = "Multiplier", var = "Level", base = 34 }) modDB:NewMod("ManaRegen", "BASE", 0.0175, "Base", { type = "PerStat", stat = "Mana", div = 1 }) @@ -181,7 +185,7 @@ function calcs.initEnv(build, mode, override) local enemyDB = common.New("ModDB") env.enemyDB = enemyDB env.enemyLevel = m_max(1, m_min(100, env.configInput.enemyLevel and env.configInput.enemyLevel or m_min(env.build.characterLevel, 84))) - calcs.initModDB(enemyDB) + calcs.initModDB(env, enemyDB) enemyDB:NewMod("Accuracy", "BASE", data.monsterAccuracyTable[env.enemyLevel], "Base") enemyDB:NewMod("Evasion", "BASE", data.monsterEvasionTable[env.enemyLevel], "Base") diff --git a/Modules/Data.lua b/Modules/Data.lua index e1e8eb35..2514e01f 100644 --- a/Modules/Data.lua +++ b/Modules/Data.lua @@ -149,11 +149,11 @@ local function makeSkillMod(modName, modType, modVal, flags, keywordFlags, ...) tagList = { ... } } end -local function makeFlagMod(modName) - return makeSkillMod(modName, "FLAG", true) +local function makeFlagMod(modName, ...) + return makeSkillMod(modName, "FLAG", true, 0, 0, ...) end local function makeSkillDataMod(dataKey, dataValue, ...) - return makeSkillMod("Misc", "LIST", { type = "SkillData", key = dataKey, value = dataValue }, 0, 0, ...) + return makeSkillMod("SkillData", "LIST", { key = dataKey, value = dataValue }, 0, 0, ...) end local skillTypes = { "act_str", diff --git a/Modules/ItemTools.lua b/Modules/ItemTools.lua index 9650223e..4ccbabd8 100644 --- a/Modules/ItemTools.lua +++ b/Modules/ItemTools.lua @@ -522,10 +522,8 @@ function itemLib.buildItemModListForSlotNum(item, baseList, slotNum) end end weaponData.critChance = round(item.base.weapon.critChanceBase * (1 + sumLocal(modList, "CritChance", "INC", 0) / 100), 2) - for _, value in ipairs(modList:Sum("LIST", nil, "Misc")) do - if value.type == "WeaponData" then - weaponData[value.key] = value.value - end + for _, value in ipairs(modList:Sum("LIST", nil, "WeaponData")) do + weaponData[value.key] = value.value end weaponData.AccuracyInc = sumLocal(modList, "Accuracy", "INC", 0) if weaponData.AccuracyInc > 0 then @@ -566,10 +564,8 @@ function itemLib.buildItemModListForSlotNum(item, baseList, slotNum) if item.base.armour.movementPenalty then modList:NewMod("MovementSpeed", "INC", -item.base.armour.movementPenalty, item.modSource, { type = "Condition", var = "IgnoreMovementPenalties", neg = true }) end - for _, value in ipairs(modList:Sum("LIST", nil, "Misc")) do - if value.type == "ArmourData" then - armourData[value.key] = value.value - end + for _, value in ipairs(modList:Sum("LIST", nil, "ArmourData")) do + armourData[value.key] = value.value end elseif item.base.flask then local flaskData = item.flaskData @@ -600,20 +596,17 @@ function itemLib.buildItemModListForSlotNum(item, baseList, slotNum) flaskData.chargesUsed = m_floor(item.base.flask.chargesUsed * (1 + sumLocal(modList, "FlaskChargesUsed", "INC", 0) / 100)) flaskData.gainMod = 1 + sumLocal(modList, "FlaskChargeRecovery", "INC", 0) / 100 flaskData.effectInc = sumLocal(modList, "FlaskEffect", "INC", 0) - for _, value in ipairs(modList:Sum("LIST", nil, "Misc")) do - if value.type == "FlaskData" then - flaskData[value.key] = value.value - end + for _, value in ipairs(modList:Sum("LIST", nil, "FlaskData")) do + flaskData[value.key] = value.value end elseif item.type == "Jewel" then local jewelData = item.jewelData - for _, value in ipairs(modList:Sum("LIST", nil, "Misc")) do - if value.type == "JewelFunc" then - jewelData.funcList = jewelData.funcList or { } - t_insert(jewelData.funcList, value.func) - elseif value.type == "JewelData" then - jewelData[value.key] = value.value - end + for _, func in ipairs(modList:Sum("LIST", nil, "JewelFunc")) do + jewelData.funcList = jewelData.funcList or { } + t_insert(jewelData.funcList, func) + end + for _, value in ipairs(modList:Sum("LIST", nil, "JewelData")) do + jewelData[value.key] = value.value end end return { unpack(modList) } @@ -663,7 +656,7 @@ function itemLib.buildItemModList(item) end if item.name == "Tabula Rasa, Simple Robe" or item.name == "Skin of the Loyal, Simple Robe" or item.name == "Skin of the Lords, Simple Robe" then -- Hack to remove the energy shield - t_insert(baseList, { name = "Misc", type = "LIST", value = { type = "ArmourData", key = "EnergyShield" }, flags = 0, keywordFlags = 0, tagList = { } }) + t_insert(baseList, { name = "ArmourData", type = "LIST", value = { key = "EnergyShield" }, flags = 0, keywordFlags = 0, tagList = { } }) end if item.base.weapon or item.type == "Ring" then item.slotModList = { } diff --git a/Modules/ModParser.lua b/Modules/ModParser.lua index c539c0f2..3098aedb 100644 --- a/Modules/ModParser.lua +++ b/Modules/ModParser.lua @@ -34,6 +34,7 @@ local formList = { ["^regenerate ([%d%.]+) (.+) per second"] = "REGENFLAT", ["^regenerate ([%d%.]+)%% (.+) per second"] = "REGENPERCENT", ["^regenerate ([%d%.]+)%% of (.+) per second"] = "REGENPERCENT", + ["^regenerate ([%d%.]+)%% of your (.+) per second"] = "REGENPERCENT", ["(%d+) to (%d+) additional (%a+) damage"] = "DMG", ["adds (%d+)%-(%d+) (%a+) damage"] = "DMG", ["adds (%d+) to (%d+) (%a+) damage"] = "DMG", @@ -583,12 +584,12 @@ local specialModList = { minus = tonumber(minus) return { flag("ElementalEquilibrium"), - mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("FireResist", "BASE", plus, { type = "Condition", var = "HitByFireDamage" }) }), - mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("FireResist", "BASE", minus, { type = "Condition", var = "HitByFireDamage", neg = true }, { type = "Condition", varList={"HitByColdDamage","HitByLightningDamage"} }) }), - mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ColdResist", "BASE", plus, { type = "Condition", var = "HitByColdDamage" }) }), - mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ColdResist", "BASE", minus, { type = "Condition", var = "HitByColdDamage", neg = true }, { type = "Condition", varList={"HitByFireDamage","HitByLightningDamage"} }) }), - mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("LightningResist", "BASE", plus, { type = "Condition", var = "HitByLightningDamage" }) }), - mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("LightningResist", "BASE", minus, { type = "Condition", var = "HitByLightningDamage", neg = true }, { type = "Condition", varList={"HitByFireDamage","HitByColdDamage"} }) }), + mod("EnemyModifier", "LIST", { mod = mod("FireResist", "BASE", plus, { type = "Condition", var = "HitByFireDamage" }) }), + mod("EnemyModifier", "LIST", { mod = mod("FireResist", "BASE", minus, { type = "Condition", var = "HitByFireDamage", neg = true }, { type = "Condition", varList={"HitByColdDamage","HitByLightningDamage"} }) }), + mod("EnemyModifier", "LIST", { mod = mod("ColdResist", "BASE", plus, { type = "Condition", var = "HitByColdDamage" }) }), + mod("EnemyModifier", "LIST", { mod = mod("ColdResist", "BASE", minus, { type = "Condition", var = "HitByColdDamage", neg = true }, { type = "Condition", varList={"HitByFireDamage","HitByLightningDamage"} }) }), + mod("EnemyModifier", "LIST", { mod = mod("LightningResist", "BASE", plus, { type = "Condition", var = "HitByLightningDamage" }) }), + mod("EnemyModifier", "LIST", { mod = mod("LightningResist", "BASE", minus, { type = "Condition", var = "HitByLightningDamage", neg = true }, { type = "Condition", varList={"HitByFireDamage","HitByColdDamage"} }) }), } end, ["projectile attacks deal up to 50%% more damage to targets at the start of their movement, dealing less damage to targets as the projectile travels farther"] = { flag("PointBlank") }, @@ -602,7 +603,7 @@ local specialModList = { ["always poison on hit while using a flask"] = { mod("PoisonChance", "BASE", 100, { type = "Condition", var = "UsingFlask" }) }, ["armour received from body armour is doubled"] = { flag("Unbreakable") }, ["gain (%d+)%% of maximum mana as extra maximum energy shield"] = function(num) return { mod("ManaGainAsEnergyShield", "BASE", num) } end, - ["you have fortify"] = { mod("Misc", "LIST", { type = "Condition", var = "Fortify"}) }, + ["you have fortify"] = { flag("Condition:Fortify") }, ["(%d+)%% increased damage of each damage type for which you have a matching golem"] = function(num) return { mod("PhysicalDamage", "INC", num, { type = "Condition", var = "HavePhysicalGolem"}), mod("LightningDamage", "INC", num, { type = "Condition", var = "HaveLightningGolem"}), @@ -617,13 +618,13 @@ local specialModList = { } end, ["every 10 seconds, gain (%d+)%% increased elemental damage for 4 seconds"] = function(num) return { mod("ElementalDamage", "INC", num, { type = "Condition", var = "PendulumOfDestruction" }) } end, ["every 10 seconds, gain (%d+)%% increased area of effect of area skills for 4 seconds"] = function(num) return { mod("AreaOfEffect", "INC", num, { type = "Condition", var = "PendulumOfDestruction" }) } end, - ["enemies you curse take (%d+)%% increased damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("DamageTaken", "INC", num) }, { type = "Condition", var = "EnemyCursed" }) } end, - ["enemies you curse have (%-%d+)%% to chaos resistance"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ChaosResist", "BASE", num) }, { type = "Condition", var = "EnemyCursed" }) } end, - ["nearby enemies have (%-%d+)%% to chaos resistance"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ChaosResist", "BASE", num) }) } end, - ["nearby enemies take (%d+)%% increased elemental damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("ElementalDamageTaken", "INC", num) }) } end, + ["enemies you curse take (%d+)%% increased damage"] = function(num) return { mod("AffectedByCurseMod", "LIST", { mod = mod("DamageTaken", "INC", num) }) } end, + ["enemies you curse have (%-%d+)%% to chaos resistance"] = function(num) return { mod("AffectedByCurseMod", "LIST", { mod = mod("ChaosResist", "BASE", num) }) } end, + ["nearby enemies have (%-%d+)%% to chaos resistance"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("ChaosResist", "BASE", num) }) } end, + ["nearby enemies take (%d+)%% increased elemental damage"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("ElementalDamageTaken", "INC", num) }) } end, ["enemies near your totems take (%d+)%% increased physical and fire damage"] = function(num) return { - mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("PhysicalDamageTaken", "INC", num) }), - mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("FireDamageTaken", "INC", num) }) + mod("EnemyModifier", "LIST", { mod = mod("PhysicalDamageTaken", "INC", num) }), + mod("EnemyModifier", "LIST", { mod = mod("FireDamageTaken", "INC", num) }) } end, ["grants armour equal to (%d+)%% of your reserved life to you and nearby allies"] = function(num) return { mod("GrantReservedLifeAsAura", "LIST", { mod = mod("Armour", "BASE", num / 100) }) } end, ["grants maximum energy shield equal to (%d+)%% of your reserved mana to you and nearby allies"] = function(num) return { mod("GrantReservedManaAsAura", "LIST", { mod = mod("EnergyShield", "BASE", num / 100) }) } end, @@ -653,17 +654,18 @@ local specialModList = { mod("ElementalDamageGainAsChaos", "BASE", num, { type = "Condition", var = "KilledRecently" }, { type = "Multiplier", var = "CurseOnEnemy" }), } end, ["warcries cost no mana"] = { mod("ManaCost", "MORE", -100, nil, 0, KeywordFlag.Warcry) }, - ["enemies you taunt take (%d+)%% increased damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("DamageTaken", "INC", num, { type = "Condition", var = "Taunted" }) }) } end, - ["you have phasing while at maximum frenzy charges"] = { mod("Misc", "LIST", { type = "Condition", var = "Phasing" }, { type = "Condition", var = "AtMaxFrenzyCharges" }) }, + ["enemies you taunt take (%d+)%% increased damage"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("DamageTaken", "INC", num, { type = "Condition", var = "Taunted" }) }) } end, + ["you have phasing while at maximum frenzy charges"] = { flag("Condition:Phasing", { type = "Condition", var = "AtMaxFrenzyCharges" }) }, + ["you have phasing while you have onslaught"] = { flag("Condition:Phasing", { type = "Condition", var = "Onlaught" }) }, ["your minions spread caustic cloud on death, dealing 10%% of their maximum life as chaos damage per second"] = { flag("MinionCausticCloudOnDeath") }, -- Item local modifiers ["has no sockets"] = { }, ["has 1 socket"] = { }, - ["no physical damage"] = { mod("Misc", "LIST", { type = "WeaponData", key = "PhysicalMin" }), mod("Misc", "LIST", { type = "WeaponData", key = "PhysicalMax" }), mod("Misc", "LIST", { type = "WeaponData", key = "PhysicalDPS" }) }, - ["all attacks with this weapon are critical strikes"] = { mod("Misc", "LIST", { type = "WeaponData", key = "critChance", value = 100 }) }, - ["counts as dual wielding"] = { mod("Misc", "LIST", { type = "WeaponData", key = "countsAsDualWielding", value = true}) }, - ["counts as all one handed melee weapon types"] = { mod("Misc", "LIST", { type = "WeaponData", key = "countsAsAll1H", value = true }) }, - ["no block chance"] = { mod("Misc", "LIST", { type = "ArmourData", key = "BlockChance", value = 0 }) }, + ["no physical damage"] = { mod("WeaponData", "LIST", { key = "PhysicalMin" }), mod("WeaponData", "LIST", { key = "PhysicalMax" }), mod("WeaponData", "LIST", { key = "PhysicalDPS" }) }, + ["all attacks with this weapon are critical strikes"] = { mod("WeaponData", "LIST", { key = "critChance", value = 100 }) }, + ["counts as dual wielding"] = { mod("WeaponData", "LIST", { key = "countsAsDualWielding", value = true}) }, + ["counts as all one handed melee weapon types"] = { mod("WeaponData", "LIST", { key = "countsAsAll1H", value = true }) }, + ["no block chance"] = { mod("ArmourData", "LIST", { key = "BlockChance", value = 0 }) }, ["hits can't be evaded"] = { flag("CannotBeEvaded", { type = "Condition", var = "XHandAttack" }) }, ["causes bleeding on hit"] = { mod("BleedChance", "BASE", 100, { type = "Condition", var = "XHandAttack" }) }, ["poisonous hit"] = { mod("PoisonChance", "BASE", 100, { type = "Condition", var = "XHandAttack" }) }, @@ -718,7 +720,7 @@ local specialModList = { ["your physical damage can shock"] = { flag("PhysicalCanShock") }, ["critical strikes do not always freeze"] = { flag("CritsDontAlwaysFreeze") }, ["you can inflict up to (%d+) ignites on an enemy"] = { flag("IgniteCanStack") }, - ["enemies chilled by you take (%d+)%% increased burning damage"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("BurningDamageTaken", "INC", num) }, { type = "EnemyCondition", var = "Chilled" }) } end, + ["enemies chilled by you take (%d+)%% increased burning damage"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("BurningDamageTaken", "INC", num) }, { type = "EnemyCondition", var = "Chilled" }) } end, ["ignited enemies burn (%d+)%% faster"] = function(num) return { mod("IgniteBurnRate", "INC", num) } end, ["enemies ignited by an attack burn (%d+)%% faster"] = function(num) return { mod("IgniteBurnRate", "INC", num, nil, ModFlag.Attack) } end, -- Bleed @@ -736,13 +738,13 @@ local specialModList = { ["wh[ie][ln]e? at maximum frenzy charges, attacks poison enemies"] = { mod("PoisonChance", "BASE", 100, nil, ModFlag.Attack, { type = "Condition", var = "AtMaxFrenzyCharges" }) }, ["traps and mines have a (%d+)%% chance to poison on hit"] = function(num) return { mod("PoisonChance", "BASE", num, nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)) } end, -- Buffs/debuffs - ["phasing"] = { mod("Misc", "LIST", { type = "Condition", var = "Phasing" }) }, - ["onslaught"] = { mod("Misc", "LIST", { type = "Condition", var = "Onslaught" }) }, + ["phasing"] = { flag("Condition:Phasing") }, + ["onslaught"] = { flag("Condition:Onslaught") }, ["your aura buffs do not affect allies"] = { flag("SelfAurasCannotAffectAllies") }, ["allies' aura buffs do not affect you"] = { flag("AlliesAurasCannotAffectSelf") }, ["enemies can have 1 additional curse"] = { mod("EnemyCurseLimit", "BASE", 1) }, - ["nearby enemies have (%d+)%% increased effect of curses on them"] = function(num) return { mod("Misc", "LIST", { type = "EnemyModifier", mod = mod("CurseEffectOnSelf", "INC", num) }) } end, - ["your hits inflict decay, dealing (%d+) chaos damage per second for 10 seconds"] = function(num) return { mod("Misc", "LIST", { type = "SkillData", key = "decay", value = num, merge = "MAX" }) } end, + ["nearby enemies have (%d+)%% increased effect of curses on them"] = function(num) return { mod("EnemyModifier", "LIST", { mod = mod("CurseEffectOnSelf", "INC", num) }) } end, + ["your hits inflict decay, dealing (%d+) chaos damage per second for 10 seconds"] = function(num) return { mod("SkillData", "LIST", { key = "decay", value = num, merge = "MAX" }) } end, -- Traps, Mines and Totems ["traps and mines deal (%d+)%-(%d+) additional physical damage"] = function(_, min, max) return { mod("PhysicalMin", "BASE", tonumber(min), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)), mod("PhysicalMax", "BASE", tonumber(max), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)) } end, ["traps and mines deal (%d+) to (%d+) additional physical damage"] = function(_, min, max) return { mod("PhysicalMin", "BASE", tonumber(min), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)), mod("PhysicalMax", "BASE", tonumber(max), nil, 0, bor(KeywordFlag.Trap, KeywordFlag.Mine)) } end, @@ -754,18 +756,18 @@ local specialModList = { ["([%d%.]+)%% of damage dealt by y?o?u?r? ?totems is leeched to you as life"] = function(num) return { mod("DamageLifeLeechToPlayer", "BASE", num, nil, 0, KeywordFlag.Totem) } end, -- Minions ["your strength is added to your minions"] = { flag("StrengthAddedToMinions") }, - ["minions poison enemies on hit"] = { mod("Misc", "LIST", { type = "MinionModifier", mod = mod("PoisonChance", "BASE", 100) }) }, - ["(%d+)%% increased minion damage if you have hit recently"] = function(num) return { mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", num) }, { type = "Condition", var = "HitRecently" }) } end, + ["minions poison enemies on hit"] = { mod("MinionModifier", "LIST", { mod = mod("PoisonChance", "BASE", 100) }) }, + ["(%d+)%% increased minion damage if you have hit recently"] = function(num) return { mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num) }, { type = "Condition", var = "HitRecently" }) } end, ["(%d+)%% increased golem damage for each type of golem you have summoned"] = function(num) return { - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HavePhysicalGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HaveLightningGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HaveColdGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HaveFireGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), - mod("Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HaveChaosGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HavePhysicalGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HaveLightningGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HaveColdGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HaveFireGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), + mod("MinionModifier", "LIST", { mod = mod("Damage", "INC", num, { type = "ParentCondition", var = "HaveChaosGolem" }) }, { type = "SkillType", skillType = SkillType.Golem }), } end, ["can summon up to (%d) additional golems? at a time"] = function(num) return { mod("ActiveGolemLimit", "BASE", num) } end, ["if you have 3 primordial jewels, can summon up to (%d) additional golems? at a time"] = function(num) return { mod("ActiveGolemLimit", "BASE", num, { type = "MultiplierThreshold", var = "PrimordialJewel", threshold = 3 }) } end, - ["golems regenerate (%d)%% of their maximum life per second"] = function(num) return { mod("Misc", "LIST", { type = "MinionModifier", mod = mod("LifeRegenPercent", "BASE", num) }, { type = "SkillType", skillType = SkillType.Golem }) } end, + ["golems regenerate (%d)%% of their maximum life per second"] = function(num) return { mod("MinionModifier", "LIST", { mod = mod("LifeRegenPercent", "BASE", num) }, { type = "SkillType", skillType = SkillType.Golem }) } end, -- Projectiles ["skills chain %+(%d) times"] = function(num) return { mod("ChainCount", "BASE", num) } end, ["skills chain an additional time while at maximum frenzy charges"] = { mod("ChainCount", "BASE", 1, { type = "Condition", var = "AtMaxFrenzyCharges" }) }, @@ -793,7 +795,7 @@ local specialModList = { ["armour is increased by uncapped fire resistance"] = { mod("Armour", "INC", 1, { type = "PerStat", stat = "FireResistTotal", div = 1 }) }, ["evasion rating is increased by uncapped cold resistance"] = { mod("Evasion", "INC", 1, { type = "PerStat", stat = "ColdResistTotal", div = 1 }) }, ["reflects (%d+) physical damage to melee attackers"] = { }, - ["ignore all movement penalties from armour"] = { mod("Misc", "LIST", { type = "Condition", var = "IgnoreMovementPenalties" }) }, + ["ignore all movement penalties from armour"] = { flag("Condition:IgnoreMovementPenalties") }, ["cannot be stunned"] = { mod("AvoidStun", "BASE", 100) }, ["cannot be shocked"] = { mod("AvoidShock", "BASE", 100) }, ["cannot be frozen"] = { mod("AvoidFreeze", "BASE", 100) }, @@ -812,7 +814,7 @@ local specialModList = { ["creates a smoke cloud on use"] = { }, ["creates chilled ground on use"] = { }, ["creates consecrated ground on use"] = { }, - ["gain unholy might during flask effect"] = { mod("Misc", "LIST", { type = "Condition", var = "UnholyMight" }, { type = "Condition", var = "UsingFlask" }) }, + ["gain unholy might during flask effect"] = { flag("Condition:UnholyMight", { type = "Condition", var = "UsingFlask" }) }, ["zealot's oath during flask effect"] = { mod("ZealotsOath", "FLAG", true, { type = "Condition", var = "UsingFlask" }) }, ["grants level (%d+) (.+) curse aura during flask effect"] = function(num, _, skill) return { mod("ExtraCurse", "LIST", { name = gemNameLookup[skill:gsub(" skill","")] or "Unknown", level = num }, { type = "Condition", var = "UsingFlask" }) } end, ["during flask effect, (%d+)%% reduced damage taken of each element for which your uncapped elemental resistance is lowest"] = function(num) return { @@ -826,11 +828,11 @@ local specialModList = { mod("FirePenetration", "BASE", num, { type = "Condition", var = "UncappedFireResistIsHighest" }), } end, -- Jewels - ["passives in radius can be allocated without being connected to your tree"] = { mod("Misc", "LIST", { type = "JewelData", key = "intuitiveLeap", value = true }) }, - ["(%d+)%% increased elemental damage per grand spectrum"] = function(num) return { mod("ElementalDamage", "INC", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Misc", "LIST", { type = "Multiplier", var = "GrandSpectrum", value = 1}) } end, - ["gain (%d+) armour per grand spectrum"] = function(num) return { mod("Armour", "BASE", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Misc", "LIST", { type = "Multiplier", var = "GrandSpectrum", value = 1}) } end, - ["gain (%d+) mana per grand spectrum"] = function(num) return { mod("Mana", "BASE", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Misc", "LIST", { type = "Multiplier", var = "GrandSpectrum", value = 1}) } end, - ["primordial"] = { mod("Misc", "LIST", { type = "Multiplier", var = "PrimordialJewel", value = 1 }) }, + ["passives in radius can be allocated without being connected to your tree"] = { mod("JewelData", "LIST", { key = "intuitiveLeap", value = true }) }, + ["(%d+)%% increased elemental damage per grand spectrum"] = function(num) return { mod("ElementalDamage", "INC", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Multiplier:GrandSpectrum", "BASE", 1) } end, + ["gain (%d+) armour per grand spectrum"] = function(num) return { mod("Armour", "BASE", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Multiplier:GrandSpectrum", "BASE", 1) } end, + ["gain (%d+) mana per grand spectrum"] = function(num) return { mod("Mana", "BASE", num, { type = "Multiplier", var = "GrandSpectrum" }), mod("Multiplier:GrandSpectrum", "BASE", 1) } end, + ["primordial"] = { mod("Multiplier:PrimordialJewel", "BASE", 1) }, -- Misc ["iron will"] = { flag("IronWill") }, ["deal no physical damage"] = { flag("DealNoPhysical") }, @@ -1049,8 +1051,8 @@ local jewelFuncs = { ["With at least 40 Strength in Radius, Molten Strike fires 2 additional Projectiles"] = getThreshold("Str", "ProjectileCount", "BASE", 2, { type = "SkillName", skillName = "Molten Strike" }), ["With at least 40 Strength in Radius, Molten Strike has 25% increased Area of Effect"] = getThreshold("Str", "AreaOfEffect", "INC", 25, { type = "SkillName", skillName = "Molten Strike" }), ["With at least 40 Strength in Radius, 25% of Glacial Hammer Physical Damage converted to Cold Damage"] = getThreshold("Str", "PhysicalDamageConvertToCold", "BASE", 25, { type = "SkillName", skillName = "Glacial Hammer" }), - ["With at least 40 Intelligence in Radius, Raised Zombies' Slam Attack has 100% increased Cooldown Recovery Speed"] = getThreshold("Int", "Misc", "LIST", { type = "MinionModifier", mod = mod("CooldownRecovery", "INC", 100, { type = "SkillId", skillId = "ZombieSlam" }) }), - ["With at least 40 Intelligence in Radius, Raised Zombies' Slam Attack deals 30% increased Damage"] = getThreshold("Int", "Misc", "LIST", { type = "MinionModifier", mod = mod("Damage", "INC", 30, { type = "SkillId", skillId = "ZombieSlam" }) }), + ["With at least 40 Intelligence in Radius, Raised Zombies' Slam Attack has 100% increased Cooldown Recovery Speed"] = getThreshold("Int", "MinionModifier", "LIST", { mod = mod("CooldownRecovery", "INC", 100, { type = "SkillId", skillId = "ZombieSlam" }) }), + ["With at least 40 Intelligence in Radius, Raised Zombies' Slam Attack deals 30% increased Damage"] = getThreshold("Int", "MinionModifier", "LIST", { mod = mod("Damage", "INC", 30, { type = "SkillId", skillId = "ZombieSlam" }) }), --[""] = getThreshold("", "", "", , { type = "SkillName", skillName = "" }), } @@ -1084,7 +1086,7 @@ local function parseMod(line, order) end for desc, func in pairs(jewelFuncs) do if desc:lower() == line:lower() then - return { mod("Misc", "LIST", { type = "JewelFunc", func = func }) } + return { mod("JewelFunc", "LIST", func) } end end @@ -1258,7 +1260,7 @@ local function parseMod(line, order) elseif misc.addToMinion then -- Minion modifiers for i, effectMod in ipairs(modList) do - modList[i] = mod("Misc", "LIST", { type = "MinionModifier", mod = effectMod }, misc.addToMinionTag) + modList[i] = mod("MinionModifier", "LIST", { mod = effectMod }, misc.addToMinionTag) end elseif misc.addToSkill then -- Skill enchants that add additional effects diff --git a/README.md b/README.md index 50ff3df3..5dc0d05d 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,12 @@ Head over to the [Releases](https://github.com/Openarl/PathOfBuilding/releases) ![ss3](https://cloud.githubusercontent.com/assets/19189971/18089780/f0ff234a-6f04-11e6-8c88-6193fe59a5c4.png) ## Changelog +### 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 + * Fixed issue causing the enchanting UI to only show enchantments for the first skill in each socket group + * Fixed issue preventing the life/mana leech boot enchantment from working + ### 1.4.4 - 2017/04/17 This update fixes two issues affecting the damage calculations for minions. As a result, the calculated DPS for many minion skills will change to some degree: diff --git a/changelog.txt b/changelog.txt index 5db46dd8..67bd6cf6 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,8 @@ +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 + * Fixed issue causing the enchanting UI to only show enchantments for the first skill in each socket group + * Fixed issue preventing the life/mana leech boot enchantment from working VERSION[1.4.4][2017/04/17] This update fixes two issues affecting the damage calculations for minions. As a result, the calculated DPS for many minion skills will change to some degree: diff --git a/manifest.xml b/manifest.xml index 88f3878b..dd6024af 100644 --- a/manifest.xml +++ b/manifest.xml @@ -1,20 +1,20 @@ - + - + - + @@ -24,11 +24,11 @@ - + - - + + @@ -45,56 +45,56 @@ - + - - + + - - + + - - + + - + - + - - - + + + - + - - - + + + - - - + + + - - + + - - - + + +