scope CriticalStrike initializer Init
private function Actions_onDamage takes nothing returns nothing
local unit source = GetEventDamageSource()
local unit target = BlzGetEventDamageTarget()
local real damage = GetEventDamage() * udg_CriticalStrikeMultiplier[GetUnitUserData(source)]
call BlzSetEventDamage(damage)
//Critical Strike Event Units
set udg_CSSource = source
set udg_CSTarget = target
set udg_CriticalStrikeEvent = 0.0
set udg_CriticalStrikeEvent = 1.0
set udg_CriticalStrikeEvent = 0.0
call CreateTextOnUnit(udg_CSTarget, (I2S(R2I(damage)) + "!"), 1.5, 255, 0, 0, 255)
set udg_CriticalBoolean[GetUnitUserData(source)] = false
set source = null
set target = null
endfunction
private function Actions_onAttack takes nothing returns nothing
local unit source = GetAttacker()
set udg_CriticalBoolean[GetUnitUserData(source)] = true
call SetUnitAnimation(source, "Attack Slam")
call QueueUnitAnimation(source, "Stand Ready")
set source = null
endfunction
private function Conditions_OnDamage takes nothing returns boolean
local unit source = GetEventDamageSource()
local unit target = BlzGetEventDamageTarget()
if(BlzGetEventDamageType() == DAMAGE_TYPE_NORMAL and UnitAlive(target) and IsUnitType(target, UNIT_TYPE_STRUCTURE) == false and udg_CriticalBoolean[GetUnitUserData(source)] == true) then
call Actions_onDamage()
endif
set target = null
set source = null
return false
endfunction
private function Conditions_OnAttack takes nothing returns boolean
if GetRandomInt(1,100) <= udg_CriticalStrikeChance[GetUnitUserData(GetAttacker())] then
call Actions_onAttack()
endif
return false
endfunction
//===========================================================================
private function Init takes nothing returns nothing
set gg_trg_CriticalStrike = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_CriticalStrike, EVENT_PLAYER_UNIT_ATTACKED)
call TriggerAddCondition(gg_trg_CriticalStrike, Condition(function Conditions_OnAttack))
call TriggerRegisterAnyUnitEventBJ(gg_trg_CriticalStrike, EVENT_PLAYER_UNIT_DAMAGED)
call TriggerAddCondition(gg_trg_CriticalStrike, Condition(function Conditions_OnDamage))
endfunction
endscope