From 09f860a0a90a0ef66002e932d2ba73f5e4ccc6ad Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Fri, 27 May 2011 07:19:48 +0000
Subject: [PATCH] Frozen now splits damage 40/60 instead of 25/75. Also while
 frozen you can not get any new detrimental status effects (the existing ones
 are kept however)

git-svn-id: http://svn.net-core.org/repos/t-engine4@3443 51575b47-30f0-44d4-a5cc-537603b46e54
---
 .../default/engine/interface/ActorTemporaryEffects.lua     | 1 +
 game/modules/tome/class/Actor.lua                          | 7 +++++--
 game/modules/tome/data/timed_effects.lua                   | 4 +++-
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/game/engines/default/engine/interface/ActorTemporaryEffects.lua b/game/engines/default/engine/interface/ActorTemporaryEffects.lua
index d6d39441d5..ecdf821150 100644
--- a/game/engines/default/engine/interface/ActorTemporaryEffects.lua
+++ b/game/engines/default/engine/interface/ActorTemporaryEffects.lua
@@ -97,6 +97,7 @@ function _M:setEffect(eff_id, dur, p, silent)
 	end
 	p.dur = dur
 	self:check("on_set_temporary_effect", eff_id, _M.tempeffect_def[eff_id], p)
+	if p.dur <= 0 then return self:removeEffect(eff_id) end
 
 	-- If we already have it, we check if it knows how to "merge", or else we remove it and re-add it
 	if self:hasEffect(eff_id) then
diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index 0485e0de0c..65a41bb5cf 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -1098,8 +1098,8 @@ function _M:onTakeHit(value, src)
 	-- Frozen: absorb some damage into the iceblock
 	if self:attr("encased_in_ice") then
 		local eff = self:hasEffect(self.EFF_FROZEN)
-		eff.hp = eff.hp - value * 0.25
-		value = value * 0.75
+		eff.hp = eff.hp - value * 0.4
+		value = value * 0.6
 		if eff.hp < 0 then self:removeEffect(self.EFF_FROZEN) end
 	end
 
@@ -2497,6 +2497,9 @@ function _M:on_set_temporary_effect(eff_id, e, p)
 	if e.status == "detrimental" and self:knowTalent(self.T_RESILIENT_BONES) then
 		p.dur = math.ceil(p.dur * (1 - (self:getTalentLevel(self.T_RESILIENT_BONES) / 12)))
 	end
+	if e.status == "detrimental" and self:attr("negative_status_effect_immune") then
+		p.dur = 0
+	end
 end
 
 --- Called when we are projected upon
diff --git a/game/modules/tome/data/timed_effects.lua b/game/modules/tome/data/timed_effects.lua
index cded0c8c2d..19ea614da4 100644
--- a/game/modules/tome/data/timed_effects.lua
+++ b/game/modules/tome/data/timed_effects.lua
@@ -349,7 +349,7 @@ newEffect{
 newEffect{
 	name = "FROZEN",
 	desc = "Frozen",
-	long_desc = function(self, eff) return ("The target is encased in ice. All damage done to you will be split, 25%% absorbed by the ice and 75%% by yourself. Your defense is nullified while in the ice and you may only attack the ice. %d HP on the iceblock remaining."):format(eff.hp) end,
+	long_desc = function(self, eff) return ("The target is encased in ice. All damage done to you will be split, 40%% absorbed by the ice and 60%% by yourself. Your defense is nullified while in the ice and you may only attack the ice but you are also immune to any new detrimental status effects. %d HP on the iceblock remaining."):format(eff.hp) end,
 	type = "magical",
 	status = "detrimental",
 	parameters = {},
@@ -376,6 +376,7 @@ newEffect{
 		eff.frozid = self:addTemporaryValue("frozen", 1)
 		eff.defid = self:addTemporaryValue("combat_def", -1000)
 		eff.rdefid = self:addTemporaryValue("combat_def_ranged", -1000)
+		eff.sefid = self:addTemporaryValue("negative_status_effect_immune", 1)
 		eff.dur = self:updateEffectDuration(eff.dur, "freeze")
 
 		self:setTarget(self)
@@ -389,6 +390,7 @@ newEffect{
 		self:removeTemporaryValue("frozen", eff.frozid)
 		self:removeTemporaryValue("combat_def", eff.defid)
 		self:removeTemporaryValue("combat_def_ranged", eff.rdefid)
+		self:removeTemporaryValue("negative_status_effect_immune", eff.sefid)
 		self.color_r = eff.old_r
 		self.color_g = eff.old_g
 		self.color_b = eff.old_b
-- 
GitLab