Name | Type | is_array | initial_value |
Hash_Parry | hashtable | No | |
Parry__Ability | abilcode | No | |
Parry__AnimLength | real | No | |
Parry__AnimName | string | No | |
Parry__Attacker | unit | No | |
Parry__AttackLength | real | No | |
Parry__AttackMaxPhase | integer | No | |
Parry__AttackPoint | location | No | |
Parry__Caster | unit | No | |
Parry__CastLength | real | No | |
Parry__CastPoint | location | No | |
Parry__CKey_AnimLength | integer | No | |
Parry__CKey_AnimName | integer | No | |
Parry__CKey_Attacker | integer | No | |
Parry__CKey_AttackMaxPhase | integer | No | |
Parry__CKey_Caster | integer | No | |
Parry__CKey_EffectDamage | integer | No | |
Parry__CKey_EffectDamageAT | integer | No | |
Parry__CKey_EffectDamageDT | integer | No | |
Parry__CKey_EffectName | integer | No | |
Parry__CKey_EffectStun | integer | No | |
Parry__CKey_EnableAnim | integer | No | |
Parry__CKey_EnableFaceback | integer | No | |
Parry__CKey_Range | integer | No | |
Parry__CKey_UserEffect | integer | No | |
Parry__DummyType | unitcode | No | |
Parry__EffectDamage | real | No | |
Parry__EffectDamageAT | attacktype | No | |
Parry__EffectDamageDT | damagetype | No | |
Parry__EffectName | string | No | |
Parry__EffectStun | real | No | |
Parry__EnableAnim | boolean | No | |
Parry__EnableFaceback | boolean | No | |
Parry__LoopInterval | real | No | |
Parry__Range | real | No | |
Parry__UserEffect | trigger | No | |
Samuro | unit | No |
function ParryCastTimerEnd takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer tid = GetHandleId(t)
local unit u = LoadUnitHandle(udg_Hash_Parry,tid,tid)
local integer uid = GetHandleId(u)
call RemoveSavedHandle(udg_Hash_Parry,uid,uid)
call FlushChildHashtable(udg_Hash_Parry,tid)
call PauseTimer(t)
call DestroyTimer(t)
set u = null
set t = null
endfunction
function ParryAnimTimerEnd takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer tid = GetHandleId(t)
local unit u = LoadUnitHandle(udg_Hash_Parry,tid,tid)
call BlzPauseUnitEx(u,false)
call SetUnitInvulnerable(u,false)
call FlushChildHashtable(udg_Hash_Parry,tid)
call PauseTimer(t)
call DestroyTimer(t)
set u = null
set t = null
endfunction
function ParryEffectAction takes unit source, unit target, attacktype AT, damagetype DT, real dmg, real stunDur, string effectName, boolean backFlag, boolean animFlag, real animLength, string animName, trigger toexec returns nothing
local timer t = null
local integer tid
local real uX = GetUnitX(target)
local real uY = GetUnitY(target)
local real vX = GetUnitX(source)
local real vY = GetUnitY(source)
local real sign = 1
local unit u = null
local ability bolt = null
if backFlag then
set sign = -1
endif
if stunDur != 0 then
set u = CreateUnit(GetOwningPlayer(target),udg_Parry__DummyType,vX,vY,0)
call UnitApplyTimedLife( u, 'BTLF', 1 )
call UnitAddAbility(u,'AHtb')
set bolt = BlzGetUnitAbility(u, 'AHtb')
call BlzSetAbilityRealLevelField( bolt, ConvertAbilityRealLevelField('Htb1'), 0, 0 )
call BlzSetAbilityRealLevelField( bolt, ConvertAbilityRealLevelField('ahdu'), 0, stunDur )
call BlzSetAbilityRealLevelField( bolt, ConvertAbilityRealLevelField('adur'), 0, stunDur )
call IssueTargetOrder(u,"thunderbolt",source)
set bolt = null
set u = null
else
set udg_Parry__Caster = target
set udg_Parry__Attacker = source
call MoveLocation(udg_Parry__CastPoint,uX,uY)
call MoveLocation(udg_Parry__AttackPoint,vX,vY)
call TriggerExecuteBJ(toexec,true)
set udg_Parry__Caster = null
set udg_Parry__Attacker = null
endif
if dmg != 0 and UnitDamageTarget(target,source,dmg,true,false,AT,DT,WEAPON_TYPE_WHOKNOWS) then
endif
call ShowUnit(target,false)
call SetUnitPosition(source,uX,uY)
call ShowUnit(target,true)
call SetUnitPosition(target,vX,vY)
call SetUnitX(target,vX)
call SetUnitY(target,vY)
call BlzSetUnitFacingEx(target,Atan2BJ((vY-uY)*sign,(vX-uX)*sign))
call DestroyEffect(AddSpecialEffect(effectName,(uX+vX)/2,(uY+vY)/2))
call SelectUnitAddForPlayer(target,GetOwningPlayer(target))
if animFlag then
set t = CreateTimer()
set tid = GetHandleId(t)
call TimerStart(t,animLength,false,function ParryAnimTimerEnd)
call SaveUnitHandle(udg_Hash_Parry,tid,tid,target)
call SetUnitAnimation(target,animName)
call SetUnitInvulnerable(target,true)
call BlzPauseUnitEx(target,true)
set t = null
endif
endfunction
function ParryAttackTimerLoop takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer timerid = GetHandleId(t)
local integer phase = LoadInteger(udg_Hash_Parry,timerid,udg_Parry__CKey_AttackMaxPhase) - 1
local unit usource = LoadUnitHandle(udg_Hash_Parry,timerid,udg_Parry__CKey_Attacker)
local integer sourceid = GetHandleId(usource)
local unit utarget = LoadUnitHandle(udg_Hash_Parry,timerid,udg_Parry__CKey_Caster)
local integer targetid = GetHandleId(utarget)
local boolean isEnable = LoadBoolean(udg_Hash_Parry,targetid,udg_Parry__CKey_EnableAnim)
local real animDur = LoadReal(udg_Hash_Parry,targetid,udg_Parry__CKey_AnimLength)
local string animString = LoadStr(udg_Hash_Parry,targetid,udg_Parry__CKey_AnimName)
local real range = LoadReal(udg_Hash_Parry,targetid,udg_Parry__CKey_Range)
local real damage = LoadReal(udg_Hash_Parry,targetid,udg_Parry__CKey_EffectDamage)
local real stun = LoadReal(udg_Hash_Parry,targetid,udg_Parry__CKey_EffectStun)
local string fxString = LoadStr(udg_Hash_Parry,targetid,udg_Parry__CKey_EffectName)
local attacktype DAT = ConvertAttackType(LoadInteger(udg_Hash_Parry,targetid,udg_Parry__CKey_EffectDamageAT))
local damagetype DDT = ConvertDamageType(LoadInteger(udg_Hash_Parry,targetid,udg_Parry__CKey_EffectDamageDT))
local boolean isBackstab = LoadBoolean(udg_Hash_Parry,targetid,udg_Parry__CKey_EnableFaceback)
local trigger usertrig = LoadTriggerHandle(udg_Hash_Parry,targetid,udg_Parry__CKey_UserEffect)
if phase == 0 then
call RemoveSavedHandle(udg_Hash_Parry,sourceid,-sourceid)
call FlushChildHashtable(udg_Hash_Parry,timerid)
call PauseTimer(t)
call DestroyTimer(t)
else
call SaveInteger(udg_Hash_Parry,timerid,udg_Parry__CKey_AttackMaxPhase,phase)
endif
if IsUnitInRange(utarget,usource,range) and HaveSavedHandle(udg_Hash_Parry,targetid,targetid) then
call RemoveSavedHandle(udg_Hash_Parry,targetid,targetid)
call ParryEffectAction(usource,utarget,DAT,DDT,damage,stun,fxString,isBackstab,isEnable,animDur,animString,usertrig)
endif
set usource = null
set utarget = null
set usertrig = null
set t = null
endfunction