diff --git a/game/engines/default/engine/interface/ActorTemporaryEffects.lua b/game/engines/default/engine/interface/ActorTemporaryEffects.lua index 08da07ba604d5b8c5cc97932942243cbdeb2f168..be6d0936277b27eeb0bae9cc568a496534dc6470 100644 --- a/game/engines/default/engine/interface/ActorTemporaryEffects.lua +++ b/game/engines/default/engine/interface/ActorTemporaryEffects.lua @@ -106,7 +106,7 @@ 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 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 @@ -182,7 +182,7 @@ function _M:copyEffect(eff_id) param.__tmpvals = nil return param -end +end --- Removes the effect function _M:removeAllEffects() diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua index 4b9fd321d45c9b08d1f5f8d8bf3484cb6b2320da..c53f7925bfa2de1c4ad699192a54df5850eba7ea 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) @@ -5850,12 +5850,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