function Persistent_Beam_Attack_Actions takes nothing returns boolean
local real xA = .0
local real yA = .0
local real xB = .0
local real yB = .0
local real xC = .0
local real yC = .0
local real dx = .0
local real dy = .0
local real distance = .0
local real angle = .0
local integer SOURCE_ID = GetUnitUserData(udg_DamageEventSource)
if BeamConfig_Beam_IsABeamer[SOURCE_ID] and udg_DamageEventType == 0 and not udg_IsDamageSpell then
set udg_DamageEventAmount = 0.00
set udg_DamageEventType = udg_DamageTypeBlocked
set PB_Beam_HitStack[SOURCE_ID] = (PB_Beam_HitStack[SOURCE_ID] + 1)
set PB_Beam_DamageStack[SOURCE_ID] = (PB_Beam_DamageStack[SOURCE_ID] + udg_DamageEventPrevAmt)
if not IsUnitInGroup(udg_DamageEventSource, PB_Beam_MainGroup) then
set PB_Beam_IntervalDMGTrigger[SOURCE_ID] = (33 / BeamConfig_HitsPerSecond[SOURCE_ID])
set PB_BeamOwner[SOURCE_ID] = GetOwningPlayer(udg_DamageEventSource)
if BeamConfig_AttackType[SOURCE_ID] == ATTACK_TYPE_MAGIC then
set PB_Beam_CannotHitMagicImmune[SOURCE_ID] = true
endif
// -------- -------- -------- -------- -------- -------- -------- --------
set xA = GetUnitX(udg_DamageEventSource)
set yA = GetUnitY(udg_DamageEventSource)
set xB = GetUnitX(udg_DamageEventTarget)
set yB = GetUnitY(udg_DamageEventTarget)
set dx = xB-xA
set dy = yB-yA
set distance = SquareRoot(dx*dx+dy*dy)
set angle = Atan2(yA-yB, xA-xB)
// -------- -------- -------- -------- -------- -------- -------- --------
if BeamConfig_CasterOffset[SOURCE_ID] > 0.00 then
set xC = xA + Cos(angle) * BeamConfig_CasterOffset[SOURCE_ID]
set yC = yA + Sin(angle) * BeamConfig_CasterOffset[SOURCE_ID]
set PB_BeamCaster[SOURCE_ID] = CreateUnit(PB_BeamOwner[SOURCE_ID], BeamConfig_DummyType[SOURCE_ID], xC, yC, angle * bj_RADTODEG)
else
set PB_BeamCaster[SOURCE_ID] = CreateUnit(PB_BeamOwner[SOURCE_ID], BeamConfig_DummyType[SOURCE_ID], xA, yA, angle * bj_RADTODEG)
endif
call PauseUnit(PB_BeamCaster[SOURCE_ID], true)
call SetUnitFlyHeight(PB_BeamCaster[SOURCE_ID], (GetUnitFlyHeight(udg_DamageEventSource) + BeamConfig_CasterHeight[SOURCE_ID] ), 0.00)
call SetUnitScale(PB_BeamCaster[SOURCE_ID], BeamConfig_CasterScale[SOURCE_ID]*.01, 0., 0. )
// -------- -------- -------- -------- -------- -------- -------- --------
set PB_BeamMover[SOURCE_ID] = CreateUnit(PB_BeamOwner[SOURCE_ID], BeamConfig_DummyType[SOURCE_ID], xB, yB, angle * bj_RADTODEG)
call PauseUnit(PB_BeamMover[SOURCE_ID], true)
if BeamConfig_IsMoverGrounded[SOURCE_ID] then
call SetUnitFlyHeight(PB_BeamMover[SOURCE_ID], 0.00, 0.00)
else
call SetUnitFlyHeight(PB_BeamMover[SOURCE_ID], (GetUnitFlyHeight(udg_DamageEventTarget) + 50.00 ), 0.00)
endif
call SetUnitScale(PB_BeamMover[SOURCE_ID], BeamConfig_MoverScale[SOURCE_ID]*.01, 0., 0.)
// -------- -------- -------- -------- -------- -------- -------- --------
if BeamConfig_BeamTypeCharge[SOURCE_ID] != null then
set PB_BeamLightning[SOURCE_ID] = AddLightningEx(BeamConfig_BeamTypeCharge[SOURCE_ID], true, /*
*/ GetUnitX(PB_BeamCaster[SOURCE_ID]), GetUnitY(PB_BeamCaster[SOURCE_ID]), GetUnitZ(PB_BeamCaster[SOURCE_ID]), /*
*/ GetUnitX(PB_BeamMover[SOURCE_ID]), GetUnitY(PB_BeamMover[SOURCE_ID]), GetUnitZ(PB_BeamMover[SOURCE_ID]))
call SetLightningColor(PB_BeamLightning[SOURCE_ID], BeamConfig_RED[SOURCE_ID], BeamConfig_GREEN[SOURCE_ID], BeamConfig_BLUE[SOURCE_ID], BeamConfig_ALPHA[SOURCE_ID])
endif
set PB_BeamTarget[SOURCE_ID] = udg_DamageEventTarget
call GroupAddUnit(PB_Beam_MainGroup, udg_DamageEventSource)
set PB_ActiveBeams = PB_ActiveBeams + 1
set PB_ActiveBeamer[PB_ActiveBeams] = udg_DamageEventSource
if not IsTriggerEnabled(PB_Persistent_Beam_Tracking_Trigger) then
call BJDebugMsg("Tracking is DISabled")
call EnableTrigger(gg_trg_Persistent_Beam_Cancel)
call EnableTrigger(gg_trg_Persistent_Beam_Cancel_B)
call EnableTrigger(PB_Persistent_Beam_Tracking_Trigger)
else
call BJDebugMsg("Tracking is Enabled")
endif
set udg_BeamEvent_Source = udg_DamageEventSource
set udg_BeamEvent_Target = udg_DamageEventTarget
set udg_BeamEvent_Caster = PB_BeamCaster[SOURCE_ID]
set udg_BeamEvent_Mover = PB_BeamMover[SOURCE_ID]
set udg_BeamEvent_Damage = udg_DamageEventPrevAmt
set udg_BeamEvent = 1.00
set udg_BeamEvent = 0.00
set udg_BeamEvent_Source = null
set udg_BeamEvent_Target = null
set udg_BeamEvent_Caster = null
set udg_BeamEvent_Mover = null
set udg_BeamEvent_Damage = 0.00
else
if udg_DamageEventTarget != PB_BeamTarget[SOURCE_ID] then
set PB_BeamTarget[SOURCE_ID] = udg_DamageEventTarget
endif
endif
endif
return false
endfunction
//===========================================================================
function InitTrig_Persistent_Beam_Attack takes nothing returns nothing
set gg_trg_Persistent_Beam_Attack = CreateTrigger()
call TriggerRegisterVariableEvent( gg_trg_Persistent_Beam_Attack, "udg_DamageModifierEvent", EQUAL, 1.00 )
call TriggerAddCondition( gg_trg_Persistent_Beam_Attack, function Persistent_Beam_Attack_Actions )
endfunction