diff --git a/game/engines/default/engine/Entity.lua b/game/engines/default/engine/Entity.lua index 68fdfbf56d7ed5390115b758959fa0a1cff4aab5..f7840c83e41b5f0d7d33aa748017e13904cd08e2 100644 --- a/game/engines/default/engine/Entity.lua +++ b/game/engines/default/engine/Entity.lua @@ -1113,6 +1113,7 @@ function _M:tableTemporaryValuesRemove(t) for i = 1, #t do self:removeTemporaryValue(t[i][1], t[i][2]) end + table.empty(t) end --- Called when a temporary value changes (added or deleted) diff --git a/game/modules/tome/data/talents/spells/eldritch-shield.lua b/game/modules/tome/data/talents/spells/eldritch-shield.lua index ee71e2899ad952124cbb9ad135f6e023d86084c0..be4c94694331ea18d351970b67c8477296313de1 100644 --- a/game/modules/tome/data/talents/spells/eldritch-shield.lua +++ b/game/modules/tome/data/talents/spells/eldritch-shield.lua @@ -74,31 +74,54 @@ newTalent{ cooldown = 30, tactical = { ATTACK = 3, BUFF = 2 }, getDamage = function(self, t) return self:combatTalentSpellDamage(t, 15, 40) end, + getPower = function(self, t) return self:combatTalentScale(t, 5, 10) end, + getPowerBonus = function(self, t) + local power = t:_getPower(self) + local tiers = 0 + local offshield, _, mainshield = self:hasShield() + if mainshield then tiers = tiers + mainshield.material_level or 1 end + if offshield then tiers = tiers + (offshield.material_level or 1) * 0.5 end + return power * tiers + end, getBlockCD = function(self, t) return math.floor(self:combatTalentLimit(t, 5, 0, 2)) end, on_pre_use = function(self, t, silent) if not self:hasShield() then if not silent then game.logPlayer(self, "You require a shield to use this talent.") end return false end return true end, + updatePowers = function(self, t, p) + if not p then return end + + self:tableTemporaryValuesRemove(p.powers) + self:tableTemporaryValue(p.powers, "combat_spellpower", t:_getPowerBonus(self)) + self:tableTemporaryValue(p.powers, "combat_mindpower", t:_getPowerBonus(self)) + end, + callbackOnQuickSwitchWeapons = function(self, t) t.updatePowers(self, t, self:isTalentActive(t.id)) end, + callbackOnWear = function(self, t) t.updatePowers(self, t, self:isTalentActive(t.id)) end, + callbackOnTakeoff = function(self, t) t.updatePowers(self, t, self:isTalentActive(t.id)) end, activate = function(self, t) local dam = t.getDamage(self, t) local block_cd = t.getBlockCD(self, t) - local ret = {} + local ret = {powers={}} self:talentTemporaryValue(ret, "allow_incomplete_blocks", 1) self:talentTemporaryValue(ret, "talent_cd_reduction", {[self.T_BLOCK]=block_cd}) self:talentTemporaryValue(ret, "melee_project", {[DamageType.ARCANE]=dam}) self:talentTemporaryValue(ret, "on_melee_hit", {[DamageType.ARCANE]=dam * 0.7}) + self:tableTemporaryValue(ret.powers, "combat_spellpower", t:_getPowerBonus(self)) + self:tableTemporaryValue(ret.powers, "combat_mindpower", t:_getPowerBonus(self)) return ret end, deactivate = function(self, t, p) + self:tableTemporaryValuesRemove(p.powers) return true end, info = function(self, t) local dam = t.getDamage(self, t) return ([[Imbues your shields with arcane power, dealing %0.2f arcane damage with each melee strike and %0.2f arcane damage when hit. + Your shields radiate with eldritch forces, imbuing you back with %d spellpower and mindpower per tier of your shields (offhand counts for half). Current bonus is %d. Allows counterstrikes after incomplete blocks and the cooldown of Block is reduced by %d turns. The damage will increase with Spellpower.]]): - tformat(damDesc(self, DamageType.ARCANE, dam), damDesc(self, DamageType.ARCANE, dam * 0.7), t.getBlockCD(self, t)) + tformat(damDesc(self, DamageType.ARCANE, dam), damDesc(self, DamageType.ARCANE, dam * 0.7), t:_getPower(self), t:_getPowerBonus(self), t.getBlockCD(self, t)) end, }