From 46cfabb6727e8159301ec13394fb146f779761e3 Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Sun, 30 Jun 2013 22:36:06 +0200
Subject: [PATCH] Temporal Form prodigy temporal damage is now always *current*
 highest +30%

---
 game/modules/tome/class/interface/Combat.lua  | 26 +++++++++++++++++++
 .../tome/class/interface/PlayerDumpJSON.lua   |  4 +--
 game/modules/tome/data/damage_types.lua       |  2 +-
 game/modules/tome/data/talents.lua            |  2 +-
 .../tome/data/timed_effects/magical.lua       |  4 ++-
 game/modules/tome/dialogs/CharacterSheet.lua  | 14 +++++-----
 6 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index e9e4f6450d..c78b76985f 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 10b1dc23ea..9a76dd5832 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 03966350ec..f103ce6a14 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 ec9fa7c73e..5eaddd1c99 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 66e152b1eb..5f8669f5c8 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 22aa5fd763..ca2d1fd7d6 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
-- 
GitLab