diff --git a/game/engines/default/engine/interface/ActorTemporaryEffects.lua b/game/engines/default/engine/interface/ActorTemporaryEffects.lua index 63d38f7cc4b4ba9144ee5df49143be83076b6384..be6d0936277b27eeb0bae9cc568a496534dc6470 100644 --- a/game/engines/default/engine/interface/ActorTemporaryEffects.lua +++ b/game/engines/default/engine/interface/ActorTemporaryEffects.lua @@ -106,8 +106,8 @@ function _M:setEffect(eff_id, dur, p, silent) end p.dur = dur p.effect_id = eff_id - self:check("on_set_temporary_effect", eff_id, _M.tempeffect_def[eff_id], p) - if p.dur <= 0 then return end + if self:check("on_set_temporary_effect", eff_id, _M.tempeffect_def[eff_id], p) then return end + 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 a2d5507afd40218dcbac371c59b4fbdaa2a0ccc9..34683b4a818951e66953fb9be0237b787f1bbf0f 100644 --- a/game/modules/tome/class/Actor.lua +++ b/game/modules/tome/class/Actor.lua @@ -3158,11 +3158,11 @@ function _M:die(src, death_note) end end) end - + if self:hasEffect(self.EFF_TRIM_THREADS) then local p = self:hasEffect(self.EFF_TRIM_THREADS) p.src:incParadox(-p.reduction) - end + end if self:hasEffect(self.EFF_GHOUL_ROT) then local p = self:hasEffect(self.EFF_GHOUL_ROT) @@ -5838,12 +5838,17 @@ function _M:on_set_temporary_effect(eff_id, e, p) if not p.no_ct_effect and not e.no_ct_effect and e.status == "detrimental" then self:crossTierEffect(eff_id, p.apply_power, p.apply_save or save_for_effects[e.type]) end p.total_dur = p.dur - if e.status == "detrimental" and self:checkHit(save, p.apply_power, 0, 95) and p.dur > 0 then - game.logSeen(self, "#ORANGE#%s shrugs off the effect '%s'!", self.name:capitalize(), e.desc) - p.dur = 0 + if p.dur > 0 and e.status == "detrimental" then + local saved = self:checkHit(save, p.apply_power, 0, 95) + local hd = {"Actor:effectSave", saved = saved, save_type = save_type, eff_id = eff_id, e = e, p = p,} + self:triggerHook(hd) + self:fireTalentCheck("callbackOnEffectSave", hd) + saved, eff_id, e, p = hd.saved, hd.eff_id, hd.e, hd.p + if saved then + game.logSeen(self, "#ORANGE#%s shrugs off the effect '%s'!", self.name:capitalize(), e.desc) + return true + end end - - p.apply_power = nil end if e.status == "detrimental" and self:knowTalent(self.T_RESILIENT_BONES) then