diff --git a/game/modules/tome/class/Actor.lua b/game/modules/tome/class/Actor.lua
index ae2af2258e78224e5f513a3571ff54a3e888d94c..3c8ebdb01ffcd9e1ad66e1470703b8233767890e 100644
--- a/game/modules/tome/class/Actor.lua
+++ b/game/modules/tome/class/Actor.lua
@@ -5852,6 +5852,7 @@ local sustainCallbackCheck = {
 	callbackOnSummonDeath = "talents_on_summon_death",
 	callbackOnDie = "talents_on_die",
 	callbackOnKill = "talents_on_kill",
+	callbackOnCombatAttack = "talents_on_combat_attack",
 	callbackOMeleeAttackBonuses = "talents_on_melee_attack_bonus",
 	callbackOnMeleeAttack = "talents_on_melee_attack",
 	callbackOnMeleeHit = "talents_on_melee_hit",
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 7efdbee361782160d270204df85caac235e7c142..72d2b50d0cdc5a0dce47315fa6c59feeb9ccf3b6 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -1344,7 +1344,11 @@ function _M:combatAttack(weapon, ammo)
 	local stats
 	if self:attr("use_psi_combat") then stats = (self:getCun(100, true) - 10) * (0.6 + self:callTalent(self.T_RESONANT_FOCUS, "bonus")/100)
 	elseif weapon and weapon.wil_attack then stats = self:getWil(100, true) - 10
-	else stats = self:getDex(100, true) - 10
+	elseif weapon and weapon.mag_attack then stats = self:getMag(100, true) - 10
+	else
+		local ret = self:fireTalentCheck("callbackOnCombatAttack", weapon, ammo)
+		if ret then stats = ret
+		else stats = self:getDex(100, true) - 10 end
 	end
 	local d = self:combatAttackBase(weapon, ammo) + stats
 	if self:attr("dazed") then d = d / 2 end