Yes you will needa damage detection system.
Depending on what you want to do, it will be simple or complex. If you want a critical strike system where all damage has a chance to crit (like in WoW), it would be pretty simple. But if you want to distinguish between physical/magical attacks, yeah that will take alot more work.
spell crit
Events
Unit - A unit Starts the effect of an ability
Conditions
Actions
For each (Integer A) from 1 to x, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(Ability being cast) Equal to Spells[(Integer A)]
Then - Actions
-------- create dummy, give it spell and order it to cast the spell --------
Else - Actions
you probably need to add orb skill to every unit and monitor for its buff.
if buff is presend, damage done by hand.
Events
Game - GDD_Event becomes equal to 0.00
Conditions
GDD_DamageSource equal to [your hero]
Actions
Trigger - Turn off (This Trigger)
Set Crit_Integer = Random number between 1 and 100
If/Then/Else Multiple Functions
If - Conditions
Crit_Integer Less Than or Equal To CritChance \\CritChance is an Integer, whatever you want the chance to be
Then - Actions
Unit - Cause GDD_DamageSource to damage GDD_DamagedUnit, dealing GDD_Damage of attack type Spells and damage type Normal
Trigger - Turn on (This Trigger)
ofc creating twin for every spell is fast and effective.It's much more effective to use a dummy unit to cast all abilities.