diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua index e9e4f6450dec2b4e4068dce2feb829ba9afd9796..c78b76985fc5958370fe2634ef76feaf30fc6781 100644 --- a/game/modules/tome/class/interface/Combat.lua +++ b/game/modules/tome/class/interface/Combat.lua @@ -1774,6 +1774,32 @@ function _M:combatGetResist(type) return r * power / 100 end +--- Returns the damage increase +function _M:combatHasDamageIncrease(type) + if self.inc_damage[type] and self.inc_damage[type] ~= 0 then return true else return false end +end + +--- Returns the damage increase +function _M:combatGetDamageIncrease(type, straight) + local a = self.inc_damage.all or 0 + local b = self.inc_damage[type] or 0 + local inc = a + b + if straight then return inc end + + if self.auto_highest_inc_damage and self.auto_highest_inc_damage[type] then + local highest = self.inc_damage.all or 0 + for kind, v in pairs(self.inc_damage) do + if kind ~= "all" then + local inc = self:combatGetDamageIncrease(kind, true) + highest = math.max(highest, inc) + end + end + return highest + self.auto_highest_inc_damage[type] + end + + return inc +end + --- Computes movement speed function _M:combatMovementSpeed(x, y) local mult = 1 diff --git a/game/modules/tome/class/interface/PlayerDumpJSON.lua b/game/modules/tome/class/interface/PlayerDumpJSON.lua index 10b1dc23ea8ec5b76ce7bad30a4e04f376435909..9a76dd58326f7d8a1a7a049265dc930a35a1a646 100644 --- a/game/modules/tome/class/interface/PlayerDumpJSON.lua +++ b/game/modules/tome/class/interface/PlayerDumpJSON.lua @@ -241,8 +241,8 @@ function _M:dumpToJSON(js, bypass, nosub) if self.inc_damage.all then c.damage.all = string.format("%d%%", self.inc_damage.all) end for i, t in ipairs(DamageType.dam_def) do - if self.inc_damage[DamageType[t.type]] and self.inc_damage[DamageType[t.type]] ~= 0 then - c.damage[t.name] = string.format("%d%%", self.inc_damage[DamageType[t.type]] + (self.inc_damage.all or 0)) + if self:combatHasDamageIncrease(DamageType[t.type]) then + c.damage[t.name] = string.format("%d%%", self:combatGetDamageIncrease(DamageType[t.type])) end end diff --git a/game/modules/tome/data/damage_types.lua b/game/modules/tome/data/damage_types.lua index 03966350ecdecdfe16f8bad9464fd1d893cb2ef7..f103ce6a14da9220d0c23baac0a4a8472fe0a153 100644 --- a/game/modules/tome/data/damage_types.lua +++ b/game/modules/tome/data/damage_types.lua @@ -100,7 +100,7 @@ setDefaultProjector(function(src, x, y, type, dam, tmp, no_martyr) -- Increases damage local mind_linked = false if src.inc_damage then - local inc = (src.inc_damage.all or 0) + (src.inc_damage[type] or 0) + local inc = src:combatGetDamageIncrease(type) -- Increases damage for the entity type (Demon, Undead, etc) if target.type and src.inc_damage_actor_type then diff --git a/game/modules/tome/data/talents.lua b/game/modules/tome/data/talents.lua index ec9fa7c73ebe3c087af2058c33c86520d9e571a1..5eaddd1c99979d71f1c8f8c1b4eaf67a20e552b6 100644 --- a/game/modules/tome/data/talents.lua +++ b/game/modules/tome/data/talents.lua @@ -53,7 +53,7 @@ end damDesc = function(self, type, dam) -- Increases damage if self.inc_damage then - local inc = (self.inc_damage.all or 0) + (self.inc_damage[type] or 0) + local inc = self:combatGetDamageIncrease(type) dam = dam + (dam * inc / 100) end return dam diff --git a/game/modules/tome/data/timed_effects/magical.lua b/game/modules/tome/data/timed_effects/magical.lua index 66e152b1eb6197ee5f24d1bfb60e918fe10eb7d2..5f8669f5c8b5d25c9a4741d4481bc2fdf734d857 100644 --- a/game/modules/tome/data/timed_effects/magical.lua +++ b/game/modules/tome/data/timed_effects/magical.lua @@ -2080,7 +2080,9 @@ newEffect{ highest = math.max(highest, inc) end end - self:effectTemporaryValue(eff, "inc_damage", {[DamageType.TEMPORAL] = 30 + highest - (self.inc_damage[DamageType.TEMPORAL] or 0) - (self.inc_damage.all or 0)}) + self.auto_highest_inc_damage = self.auto_highest_inc_damage or {} + self:effectTemporaryValue(eff, "auto_highest_inc_damage", {[DamageType.TEMPORAL] = 30}) + self:effectTemporaryValue(eff, "inc_damage", {[DamageType.TEMPORAL] = 0.00001}) -- 0 so that it shows up in the UI self:effectTemporaryValue(eff, "resists", {[DamageType.TEMPORAL] = 30}) self:effectTemporaryValue(eff, "resists_pen", {[DamageType.TEMPORAL] = 20}) self:effectTemporaryValue(eff, "talent_cd_reduction", {[self.T_ANOMALY_REARRANGE] = -4, [self.T_ANOMALY_TEMPORAL_STORM] = -4}) diff --git a/game/modules/tome/dialogs/CharacterSheet.lua b/game/modules/tome/dialogs/CharacterSheet.lua index 22aa5fd763223618f9e074fc7b518b58f117ce98..ca2d1fd7d6d35e22513b2ca93dc398c63f50c336 100644 --- a/game/modules/tome/dialogs/CharacterSheet.lua +++ b/game/modules/tome/dialogs/CharacterSheet.lua @@ -671,26 +671,26 @@ function _M:drawDialog(kind, actor_to_compare) local inc_damages = {} for i, t in ipairs(DamageType.dam_def) do - if player.inc_damage[DamageType[t.type]] and player.inc_damage[DamageType[t.type]] ~= 0 then + if player:combatHasDamageIncrease(DamageType[t.type]) then inc_damages[t] = inc_damages[t] or {} - inc_damages[t][1] = player.inc_damage[DamageType[t.type]] + inc_damages[t][1] = player:combatGetDamageIncrease(DamageType[t.type]) end - if actor_to_compare and actor_to_compare.inc_damage[DamageType[t.type]] and actor_to_compare.inc_damage[DamageType[t.type]] ~= 0 then + if actor_to_compare and actor_to_compare:combatHasDamageIncrease(DamageType[t.type]) then inc_damages[t] = inc_damages[t] or {} - inc_damages[t][2] = actor_to_compare.inc_damage[DamageType[t.type]] + inc_damages[t][2] = actor_to_compare:combatGetDamageIncrease(DamageType[t.type]) end end for i, ts in pairs(inc_damages) do if ts[1] then if ts[2] and ts[2] ~= ts[1] then - self:mouseTooltip(self.TOOLTIP_INC_DAMAGE, s:drawColorStringBlended(self.font, ("%s%-20s: #00ff00#%+d%%%s(%+.0f%%)"):format((i.text_color or "#WHITE#"), i.name:capitalize().."#LAST# damage", ts[1] + (player.inc_damage.all or 0), ts[2] > ts[1] and "#ff0000#" or "#00ff00#", ts[1] - ts[2] ), w, h, 255, 255, 255, true)) h = h + self.font_h + self:mouseTooltip(self.TOOLTIP_INC_DAMAGE, s:drawColorStringBlended(self.font, ("%s%-20s: #00ff00#%+d%%%s(%+.0f%%)"):format((i.text_color or "#WHITE#"), i.name:capitalize().."#LAST# damage", ts[1], ts[2] > ts[1] and "#ff0000#" or "#00ff00#", ts[1] - ts[2] ), w, h, 255, 255, 255, true)) h = h + self.font_h else - self:mouseTooltip(self.TOOLTIP_INC_DAMAGE, s:drawColorStringBlended(self.font, ("%s%-20s: #00ff00#%+d%%"):format((i.text_color or "#WHITE#"), i.name:capitalize().."#LAST# damage", ts[1] + (player.inc_damage.all or 0)), w, h, 255, 255, 255, true)) h = h + self.font_h + self:mouseTooltip(self.TOOLTIP_INC_DAMAGE, s:drawColorStringBlended(self.font, ("%s%-20s: #00ff00#%+d%%"):format((i.text_color or "#WHITE#"), i.name:capitalize().."#LAST# damage", ts[1]), w, h, 255, 255, 255, true)) h = h + self.font_h end else if ts[2] then - self:mouseTooltip(self.TOOLTIP_INC_DAMAGE, s:drawColorStringBlended(self.font, ("%s%-20s: #00ff00#%+d%%(%+.0f%%)"):format((i.text_color or "#WHITE#"), i.name:capitalize().."#LAST# damage", (player.inc_damage.all or 0),-ts[2] ), w, h, 255, 255, 255, true)) h = h + self.font_h + self:mouseTooltip(self.TOOLTIP_INC_DAMAGE, s:drawColorStringBlended(self.font, ("%s%-20s: #00ff00#%+d%%(%+.0f%%)"):format((i.text_color or "#WHITE#"), i.name:capitalize().."#LAST# damage", (player.inc_damage.all or 0),(player.inc_damage.all or 0)-ts[2] ), w, h, 255, 255, 255, true)) h = h + self.font_h end end end