- Joined
- Jan 9, 2005
- Messages
- 2,126
The system has been uploaded: Persistent Beam
So sc2 has some pretty neat stuff when it comes to custom attacks... so I wanted to try recreating it in wc3. This system uses a DDS to create a fake chargeup sequence. Once that sequence is over, a beam is created until the target is dead, the attacker is dead, or the attacker is given an order other than attacking the target. I wanted to replicate the colossus's attack in alpha, but initial attempts have resulted in... not so good results, not to mention than a AoE attack with a DDS means that you are applying the damage that a unit will take, so if there are two units with two different armor types next to one another, attacking the unit that is most vulnerable will damage the other one more than should be damaged. I haven't actively tried to circumvent that, so keep an eye out, I guess.
That being said, I'm sure this can be improved. Anyone care to pitch in?
Using Unit Indexer and Damage Engine v3.5.1.0, both by Bribe, Lightning System v1.03 by Adiktuz, and GetUnitCollisionSize for GUI v1.4 by Almia.
Added sweeping beam attack. This one mimics the Colossus's attack in sc2 alpha. The only issue is that the Beamer (unit channelling the beam) will not disengage its beam is its target is slow enough when it moves out of range, meaning the Beamer than just constantly keep the pressure on. Now this may be a desirable feature, but I'd like to be able to remove it as well - so I slow the Beamer down when it's channelling by adding a custom Tornado Slow to it. This can be toggled on and off by setting BeamConfig_IsImmobilised to TRUE or FALSE. Setting it to TRUE will apply the debuff.
Be warned: something is leaking and I can't identify what because it doesn't happen all the time.
So sc2 has some pretty neat stuff when it comes to custom attacks... so I wanted to try recreating it in wc3. This system uses a DDS to create a fake chargeup sequence. Once that sequence is over, a beam is created until the target is dead, the attacker is dead, or the attacker is given an order other than attacking the target. I wanted to replicate the colossus's attack in alpha, but initial attempts have resulted in... not so good results, not to mention than a AoE attack with a DDS means that you are applying the damage that a unit will take, so if there are two units with two different armor types next to one another, attacking the unit that is most vulnerable will damage the other one more than should be damaged. I haven't actively tried to circumvent that, so keep an eye out, I guess.
That being said, I'm sure this can be improved. Anyone care to pitch in?
Using Unit Indexer and Damage Engine v3.5.1.0, both by Bribe, Lightning System v1.03 by Adiktuz, and GetUnitCollisionSize for GUI v1.4 by Almia.
-
Beam Auto Attack
-
Events
-
Game - DamageModifierEvent becomes Equal to 1.00
-
-
Conditions
-
(Unit-type of DamageEventSource) Equal to Arcane Tower
-
-
Actions
-
Set BeamID = (Custom value of DamageEventSource)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(DamageEventSource is in Beam_group) Equal to True
-
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Beam_IsChargingDone[BeamID] Equal to True
-
-
Then - Actions
-
Set DamageEventType = DamageTypeBeam
-
-
Else - Actions
-
Set DamageEventAmount = 0.00
-
-
-
-
Else - Actions
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
-------- CONFIGURE HERE --------
-
Set BeamConfig_AbilityCasterFX[BeamID] = FX - BeamCaster
-
Set BeamConfig_AbilityMoverFX[BeamID] = FX - BeamTarget
-
Set BeamConfig_BeamType[BeamID] = SLSB
-
Set BeamConfig_ImpactPeriodicFX[BeamID] = Abilities\Weapons\PriestMissile\PriestMissile.mdl
-
Set BeamConfig_CasterPeriodicFX[BeamID] = Abilities\Weapons\PriestMissile\PriestMissile.mdl
-
Set BeamConfig_ChargeUpFX[BeamID] = Abilities\Weapons\BlackKeeperMissile\BlackKeeperMissile.mdl
-
Set BeamConfig_ChargeLimit[BeamID] = 66
-
Set BeamConfig_CasterOffset[BeamID] = 0.00
-
Set BeamConfig_CasterHeight[BeamID] = 260.00
-
Set BeamConfig_Range[BeamID] = 800.00
-
-------- END CONFIGURATION --------
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Set BeamOwner[BeamID] = (Owner of DamageEventSource)
-
Set Beam_interval[BeamID] = 0
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Set Beam_loc1 = (Position of DamageEventSource)
-
Set Beam_loc2 = (Position of DamageEventTarget)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
BeamConfig_CasterOffset[BeamID] Greater than 0.00
-
-
Then - Actions
-
Set Beam_loc3 = (Beam_loc1 offset by BeamConfig_CasterOffset[BeamID] towards (Angle from Beam_loc1 to Beam_loc2) degrees)
-
Unit - Create 1 Dummy Unit (0 Collision) for BeamOwner[BeamID] at Beam_loc3 facing Beam_loc2
-
Custom script: call RemoveLocation(udg_Beam_loc3)
-
-
Else - Actions
-
Unit - Create 1 Dummy Unit (0 Collision) for BeamOwner[BeamID] at Beam_loc1 facing Beam_loc2
-
-
-
Set BeamCaster[BeamID] = (Last created unit)
-
Animation - Change BeamCaster[BeamID] flying height to ((Current flying height of DamageEventSource) + BeamConfig_CasterHeight[BeamID]) at 0.00
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Unit - Create 1 Dummy Unit (0 Collision) for BeamOwner[BeamID] at Beam_loc2 facing (Angle from Beam_loc1 to Beam_loc2) degrees
-
Set BeamMover[BeamID] = (Last created unit)
-
Animation - Change BeamMover[BeamID] flying height to ((Current flying height of DamageEventTarget) + 50.00) at 0.00
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Custom script: call RemoveLocation(udg_Beam_loc2)
-
Custom script: call RemoveLocation(udg_Beam_loc1)
-
Set BeamTarget[BeamID] = DamageEventTarget
-
Set DamageEventAmount = 0.00
-
Unit Group - Add DamageEventSource to Beam_group
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Beam Move <gen> is on) Equal to False
-
-
Then - Actions
-
Trigger - Turn on Beam Move <gen>
-
Trigger - Turn on Beam Stop <gen>
-
-
Else - Actions
-
-
-
-
-
-
Beam Move
-
Events
-
Time - Every (1.00 / 32.00) seconds of game time
-
-
Conditions
-
Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Beam_group is empty) Equal to True
-
-
Then - Actions
-
Trigger - Turn off (This trigger)
-
Trigger - Turn off Beam Stop <gen>
-
-
Else - Actions
-
Unit Group - Pick every unit in Beam_group and do (Actions)
-
Loop - Actions
-
Custom script: local Lightning beam
-
Custom script: local real h1
-
Custom script: local real h2
-
Set Beamer = (Picked unit)
-
Set BeamID = (Custom value of Beamer)
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Set Beam_loc1 = (Position of Beamer)
-
Set Beam_loc2 = (Position of BeamTarget[BeamID])
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
BeamConfig_CasterOffset[BeamID] Greater than 0.00
-
-
Then - Actions
-
Set Beam_loc3 = (Beam_loc1 offset by BeamConfig_CasterOffset[BeamID] towards (Angle from Beam_loc1 to Beam_loc2) degrees)
-
Unit - Move BeamCaster[BeamID] instantly to Beam_loc3, facing Beam_loc2
-
Custom script: call RemoveLocation(udg_Beam_loc3)
-
-
Else - Actions
-
Unit - Move BeamCaster[BeamID] instantly to Beam_loc1, facing Beam_loc2
-
-
-
Unit - Move BeamMover[BeamID] instantly to Beam_loc2, facing (Angle from Beam_loc1 to Beam_loc2) degrees
-
Animation - Change BeamCaster[BeamID] flying height to ((Current flying height of Beamer) + BeamConfig_CasterHeight[BeamID]) at 0.00
-
Animation - Change BeamMover[BeamID] flying height to ((Current flying height of BeamTarget[BeamID]) + 50.00) at 0.00
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Beam_IsChargingDone[BeamID] Equal to False
-
-
Then - Actions
-
Special Effect - Create a special effect attached to the origin of BeamCaster[BeamID] using BeamConfig_ChargeUpFX[BeamID]
-
Special Effect - Destroy (Last created special effect)
-
Set Beam_interval[BeamID] = (Beam_interval[BeamID] + 1)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Beam_interval[BeamID] Greater than or equal to BeamConfig_ChargeLimit[BeamID]
-
-
Then - Actions
-
Set Beam_IsChargingDone[BeamID] = True
-
Unit - Add BeamConfig_AbilityCasterFX[BeamID] to BeamCaster[BeamID]
-
Unit - Add BeamConfig_AbilityMoverFX[BeamID] to BeamMover[BeamID]
-
Custom script: set h1 = 0 - GetUnitFlyHeight(udg_BeamCaster[udg_BeamID])
-
Custom script: set h2 = 0 - GetUnitFlyHeight(udg_BeamMover[udg_BeamID])
-
Custom script: set udg_Beam_beam[udg_BeamID] = Lightning.unitToUnit(udg_BeamCaster[udg_BeamID], udg_BeamMover[udg_BeamID], h1, h2, false, 0, udg_BeamConfig_BeamType[udg_BeamID], 1)
-
-
Else - Actions
-
-
-
Else - Actions
-
Special Effect - Create a special effect attached to the origin of BeamCaster[BeamID] using BeamConfig_CasterPeriodicFX[BeamID]
-
Special Effect - Destroy (Last created special effect)
-
Special Effect - Create a special effect attached to the origin of BeamMover[BeamID] using BeamConfig_ImpactPeriodicFX[BeamID]
-
Special Effect - Destroy (Last created special effect)
-
-
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
-
Beam_TerminateBeam[BeamID] Equal to True
-
(Distance between Beam_loc1 and Beam_loc2) Greater than or equal to BeamConfig_Range[BeamID]
-
(BeamTarget[BeamID] is dead) Equal to True
-
(Beamer is alive) Equal to False
-
-
-
-
Then - Actions
-
Set Beam_IsInBeamCycle[BeamID] = False
-
Set Beam_IsChargingDone[BeamID] = False
-
Set Beam_interval[BeamID] = 0
-
Unit - Add a 0.01 second Generic expiration timer to BeamCaster[BeamID]
-
Unit - Add a 0.01 second Generic expiration timer to BeamMover[BeamID]
-
Set BeamCaster[BeamID] = No unit
-
Set BeamMover[BeamID] = No unit
-
Set BeamTarget[BeamID] = No unit
-
Custom script: set beam = udg_Beam_beam[udg_BeamID]
-
Custom script: call beam.remove()
-
Set Beam_TerminateBeam[BeamID] = False
-
Unit Group - Remove Beamer from Beam_group
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Custom script: set udg_BeamConfig_AbilityCasterFX[udg_BeamID] = 0
-
Custom script: set udg_BeamConfig_AbilityMoverFX[udg_BeamID] = 0
-
Set BeamConfig_BeamType[BeamID] = <Empty String>
-
Set BeamConfig_ImpactPeriodicFX[BeamID] = <Empty String>
-
Set BeamConfig_CasterPeriodicFX[BeamID] = <Empty String>
-
Set BeamConfig_ChargeUpFX[BeamID] = <Empty String>
-
-
Else - Actions
-
-
Custom script: call RemoveLocation(udg_Beam_loc2)
-
Custom script: call RemoveLocation(udg_Beam_loc1)
-
-
-
-
-
-
-
Beam Stop
-
Events
-
Unit - A unit Is issued an order targeting an object
-
Unit - A unit Is issued an order targeting a point
-
Unit - A unit Is issued an order with no target
-
-
Conditions
-
((Triggering unit) is in Beam_group) Equal to True
-
-
Actions
-
Set BeamID = (Custom value of (Triggering unit))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Target unit of issued order) Equal to BeamTarget[BeamID]
-
Or - Any (Conditions) are true
-
Conditions
-
(Issued order) Equal to (Order(attack))
-
(Issued order) Equal to (Order(smart))
-
-
-
-
Then - Actions
-
Else - Actions
-
Set Beam_TerminateBeam[BeamID] = True
-
-
-
-
Added sweeping beam attack. This one mimics the Colossus's attack in sc2 alpha. The only issue is that the Beamer (unit channelling the beam) will not disengage its beam is its target is slow enough when it moves out of range, meaning the Beamer than just constantly keep the pressure on. Now this may be a desirable feature, but I'd like to be able to remove it as well - so I slow the Beamer down when it's channelling by adding a custom Tornado Slow to it. This can be toggled on and off by setting BeamConfig_IsImmobilised to TRUE or FALSE. Setting it to TRUE will apply the debuff.
Be warned: something is leaking and I can't identify what because it doesn't happen all the time.
-
Sweeping Beam Attack
-
Events
-
Game - DamageModifierEvent becomes Equal to 1.00
-
-
Conditions
-
(Unit-type of DamageEventSource) Equal to Wisp
-
DamageEventType Equal to 0
-
-
Actions
-
Set DamageEventAmount = 0.00
-
Set BeamID = (Custom value of DamageEventSource)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(DamageEventSource is in Beam_SweepGroup) Equal to True
-
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Beam_IsChargingDone[BeamID] Equal to True
-
-
Then - Actions
-
Set Beam_damage[BeamID] = DamageEventPrevAmt
-
Set Beam_interval[BeamID] = 0
-
-
Else - Actions
-
-
-
Else - Actions
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
-------- CONFIGURE HERE --------
-
Set BeamConfig_AbilityCasterFX[BeamID] = FX - BeamCaster
-
Set BeamConfig_AbilityMoverFX[BeamID] = FX - BeamTarget
-
Set BeamConfig_BeamType[BeamID] = SLSB
-
Set BeamConfig_ImpactPeriodicFX[BeamID] = Abilities\Weapons\PriestMissile\PriestMissile.mdl
-
Set BeamConfig_CasterPeriodicFX[BeamID] = Abilities\Weapons\PriestMissile\PriestMissile.mdl
-
Set BeamConfig_ChargeUpFX[BeamID] = Abilities\Weapons\BlackKeeperMissile\BlackKeeperMissile.mdl
-
Set BeamConfig_ChargeLimit[BeamID] = 33
-
Set BeamConfig_GracePeriod[BeamID] = 44
-
Set BeamConfig_CasterOffset[BeamID] = 70.00
-
Set BeamConfig_CasterHeight[BeamID] = 60.00
-
Set BeamConfig_Range[BeamID] = 700.00
-
Set BeamConfig_SweepSpeed[BeamID] = 300.00
-
Set BeamConfig_DamageAOE[BeamID] = 100.00
-
Set BeamConfig_SweepAOE[BeamID] = 600.00
-
Set BeamConfig_IsImmobilised[BeamID] = True
-
-------- END CONFIGURATION --------
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Set BeamOwner[BeamID] = (Owner of DamageEventSource)
-
Set Beam_AttackType[BeamID] = Magic
-
Set Beam_interval[BeamID] = 0
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Set Beam_loc1 = (Position of DamageEventSource)
-
Set Beam_loc2 = (Position of DamageEventTarget)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
BeamConfig_CasterOffset[BeamID] Greater than 0.00
-
-
Then - Actions
-
Set Beam_loc3 = (Beam_loc1 offset by BeamConfig_CasterOffset[BeamID] towards (Angle from Beam_loc1 to Beam_loc2) degrees)
-
Unit - Create 1 Dummy Unit (0 Collision) for BeamOwner[BeamID] at Beam_loc3 facing Beam_loc2
-
Custom script: call RemoveLocation(udg_Beam_loc3)
-
-
Else - Actions
-
Unit - Create 1 Dummy Unit (0 Collision) for BeamOwner[BeamID] at Beam_loc1 facing Beam_loc2
-
-
-
Set BeamCaster[BeamID] = (Last created unit)
-
Animation - Change BeamCaster[BeamID] flying height to ((Current flying height of DamageEventSource) + BeamConfig_CasterHeight[BeamID]) at 0.00
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Unit - Create 1 Dummy Unit (0 Collision) for BeamOwner[BeamID] at Beam_loc2 facing (Angle from Beam_loc1 to Beam_loc2) degrees
-
Set BeamMover[BeamID] = (Last created unit)
-
Animation - Change BeamMover[BeamID] flying height to ((Current flying height of DamageEventTarget) + 50.00) at 0.00
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Custom script: call RemoveLocation(udg_Beam_loc2)
-
Custom script: call RemoveLocation(udg_Beam_loc1)
-
Set BeamTarget[BeamID] = DamageEventTarget
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
BeamConfig_IsImmobilised[BeamID] Equal to True
-
-
Then - Actions
-
Trigger - Turn off DamageEventTrigger
-
Unit - Add Max Slow to DamageEventSource
-
Trigger - Turn on DamageEventTrigger
-
-
Else - Actions
-
-
Unit Group - Add DamageEventSource to Beam_SweepGroup
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Beam Move <gen> is on) Equal to False
-
-
Then - Actions
-
Trigger - Turn on Sweeping Beam Tracking <gen>
-
Trigger - Turn on Sweeping Beam Cancel A <gen>
-
Trigger - Turn on Sweeping Beam Cancel B <gen>
-
-
Else - Actions
-
-
-
-
-
-
Sweeping Beam Tracking
-
Events
-
Time - Every (1.00 / 32.00) seconds of game time
-
-
Conditions
-
Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Beam_SweepGroup is empty) Equal to True
-
-
Then - Actions
-
Trigger - Turn off (This trigger)
-
Trigger - Turn off Sweeping Beam Cancel A <gen>
-
Trigger - Turn off Sweeping Beam Cancel B <gen>
-
-
Else - Actions
-
Unit Group - Pick every unit in Beam_SweepGroup and do (Actions)
-
Loop - Actions
-
Custom script: local Lightning beam
-
Custom script: local real h1
-
Custom script: local real h2
-
Set Beamer = (Picked unit)
-
Set BeamID = (Custom value of Beamer)
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Set Beam_loc1 = (Position of Beamer)
-
Set Beam_loc2 = (Position of BeamTarget[BeamID])
-
Set GUCS_U = BeamTarget[BeamID]
-
Trigger - Run GetUnitCollisionSize <gen> (ignoring conditions)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
GUCS_Size Greater than or equal to 144
-
-
Then - Actions
-
Set GUCS_Size = (GUCS_Size + (GUCS_Size / 2))
-
-
Else - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
GUCS_Size Less than or equal to 2
-
-
Then - Actions
-
Set GUCS_Size = 12
-
-
Else - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
GUCS_Size Less than or equal to 8
-
-
Then - Actions
-
Set GUCS_Size = (GUCS_Size x 6)
-
-
Else - Actions
-
-
-
-
-
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Distance between Beam_loc1 and Beam_loc2) Greater than (BeamConfig_Range[BeamID] + ((Real(GUCS_Size)) x 2.00))
-
-
Then - Actions
-
Set Beam_TerminateBeam[BeamID] = True
-
-
Else - Actions
-
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Set Beam_loc3 = (Position of BeamMover[BeamID])
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Distance between Beam_loc3 and Beam_loc2) Greater than (BeamConfig_SweepSpeed[BeamID] / 33.00)
-
-
Then - Actions
-
Set Beam_loc4 = (Beam_loc3 offset by (BeamConfig_SweepSpeed[BeamID] / 33.00) towards (Angle from Beam_loc3 to Beam_loc2) degrees)
-
-
Else - Actions
-
Set Beam_loc4 = Beam_loc2
-
-
-
Unit - Move BeamMover[BeamID] instantly to Beam_loc4, facing (Angle from Beam_loc1 to Beam_loc2) degrees
-
Animation - Change BeamCaster[BeamID] flying height to ((Current flying height of Beamer) + BeamConfig_CasterHeight[BeamID]) at 0.00
-
Animation - Change BeamMover[BeamID] flying height to ((Current flying height of BeamTarget[BeamID]) + 50.00) at 0.00
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Custom script: call RemoveLocation(udg_Beam_loc3)
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
BeamConfig_CasterOffset[BeamID] Greater than 0.00
-
-
Then - Actions
-
Set Beam_loc3 = (Beam_loc1 offset by BeamConfig_CasterOffset[BeamID] towards (Angle from Beam_loc1 to Beam_loc4) degrees)
-
Unit - Move BeamCaster[BeamID] instantly to Beam_loc3, facing Beam_loc2
-
Custom script: call RemoveLocation(udg_Beam_loc3)
-
-
Else - Actions
-
Unit - Move BeamCaster[BeamID] instantly to Beam_loc1, facing Beam_loc2
-
-
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(BeamTarget[BeamID] is dead) Equal to True
-
-
Then - Actions
-
Set Beam_group1 = (Units within BeamConfig_SweepAOE[BeamID] of Beam_loc4 matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is A ground unit) Equal to True) and (((Matching unit) belongs to an enemy of BeamOwner[BeamID]) Equal to True))))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Beam_group1 is empty) Equal to True
-
-
Then - Actions
-
Set Beam_TerminateBeam[BeamID] = True
-
-
Else - Actions
-
Set Beam_group2 = (Units within BeamConfig_Range[BeamID] of Beam_loc1 matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is A ground unit) Equal to True) and (((Matching unit) belongs to an enemy of BeamOwner[BeamID]) Equal to True))))
-
Unit Group - Pick every unit in (Random 1 units from Beam_group2) and do (Actions)
-
Loop - Actions
-
Set BeamerPick = (Picked unit)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(BeamerPick is in Beam_group1) Equal to True
-
-
Then - Actions
-
Unit - Order Beamer to Attack BeamerPick
-
Set BeamTarget[BeamID] = BeamerPick
-
-
Else - Actions
-
Set Beam_TerminateBeam[BeamID] = True
-
-
-
-
-
Custom script: call DestroyGroup(udg_Beam_group2)
-
-
-
Custom script: call DestroyGroup(udg_Beam_group1)
-
-
Else - Actions
-
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Custom script: call RemoveLocation(udg_Beam_loc4)
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Beam_IsChargingDone[BeamID] Equal to False
-
-
Then - Actions
-
Special Effect - Create a special effect attached to the origin of BeamCaster[BeamID] using BeamConfig_ChargeUpFX[BeamID]
-
Special Effect - Destroy (Last created special effect)
-
Set Beam_interval[BeamID] = (Beam_interval[BeamID] + 1)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Beam_interval[BeamID] Greater than or equal to BeamConfig_ChargeLimit[BeamID]
-
-
Then - Actions
-
Set Beam_interval[BeamID] = 0
-
Set Beam_IsChargingDone[BeamID] = True
-
Unit - Add BeamConfig_AbilityCasterFX[BeamID] to BeamCaster[BeamID]
-
Unit - Add BeamConfig_AbilityMoverFX[BeamID] to BeamMover[BeamID]
-
Custom script: set h1 = 0 - GetUnitFlyHeight(udg_BeamCaster[udg_BeamID])
-
Custom script: set h2 = 0 - GetUnitFlyHeight(udg_BeamMover[udg_BeamID])
-
Custom script: set udg_Beam_beam[udg_BeamID] = Lightning.unitToUnit(udg_BeamCaster[udg_BeamID], udg_BeamMover[udg_BeamID], h1, h2, false, 0, udg_BeamConfig_BeamType[udg_BeamID], 1)
-
-
Else - Actions
-
-
-
Else - Actions
-
Set Beam_loc3 = (Position of BeamMover[BeamID])
-
Set Beam_loc4 = (Position of BeamTarget[BeamID])
-
Set Beam_group1 = (Units within BeamConfig_DamageAOE[BeamID] of Beam_loc3 matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is A ground unit) Equal to True) and (((Matching unit) belongs to an enemy of BeamOwner[BeamID]) Equal to True))))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Distance between Beam_loc3 and Beam_loc4) Less than or equal to BeamConfig_DamageAOE[BeamID]
-
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(BeamTarget[BeamID] is in Beam_group1) Equal to False
-
-
Then - Actions
-
Unit Group - Add BeamTarget[BeamID] to Beam_group1
-
-
Else - Actions
-
-
-
Else - Actions
-
-
Unit Group - Pick every unit in Beam_group1 and do (Actions)
-
Loop - Actions
-
Set BeamerPick = (Picked unit)
-
Set NextDamageType = DamageTypeBeam
-
Unit - Cause Beamer to damage BeamerPick, dealing (Beam_damage[BeamID] / 33.00) damage of attack type Beam_AttackType[BeamID] and damage type Universal
-
Trigger - Run ClearDamageEvent (checking conditions)
-
-
-
Custom script: call DestroyGroup(udg_Beam_group1)
-
Custom script: call RemoveLocation(udg_Beam_loc4)
-
Custom script: call RemoveLocation(udg_Beam_loc3)
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Special Effect - Create a special effect attached to the origin of BeamCaster[BeamID] using BeamConfig_CasterPeriodicFX[BeamID]
-
Special Effect - Destroy (Last created special effect)
-
Special Effect - Create a special effect attached to the origin of BeamMover[BeamID] using BeamConfig_ImpactPeriodicFX[BeamID]
-
Special Effect - Destroy (Last created special effect)
-
Set Beam_interval[BeamID] = (Beam_interval[BeamID] + 1)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Beam_interval[BeamID] Greater than or equal to BeamConfig_GracePeriod[BeamID]
-
-
Then - Actions
-
Set Beam_TerminateBeam[BeamID] = True
-
-
Else - Actions
-
-
-
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
-
Beam_TerminateBeam[BeamID] Equal to True
-
(Beamer is alive) Equal to False
-
-
-
-
Then - Actions
-
Set Beam_IsChargingDone[BeamID] = False
-
Set Beam_interval[BeamID] = 0
-
Unit - Add a 0.01 second Generic expiration timer to BeamCaster[BeamID]
-
Unit - Add a 0.01 second Generic expiration timer to BeamMover[BeamID]
-
Set BeamCaster[BeamID] = No unit
-
Set BeamMover[BeamID] = No unit
-
Set BeamTarget[BeamID] = No unit
-
Custom script: set beam = udg_Beam_beam[udg_BeamID]
-
Custom script: call beam.remove()
-
Set Beam_TerminateBeam[BeamID] = False
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
BeamConfig_IsImmobilised[BeamID] Equal to True
-
-
Then - Actions
-
Trigger - Turn off DamageEventTrigger
-
Unit - Remove Max Slow from Beamer
-
Unit - Remove Channelling buff from Beamer
-
Trigger - Turn on DamageEventTrigger
-
Set BeamConfig_IsImmobilised[BeamID] = False
-
-
Else - Actions
-
-
Unit Group - Remove Beamer from Beam_SweepGroup
-
-------- -------- -------- -------- -------- -------- -------- -------- -------- --------
-
Custom script: set udg_BeamConfig_AbilityCasterFX[udg_BeamID] = 0
-
Custom script: set udg_BeamConfig_AbilityMoverFX[udg_BeamID] = 0
-
Set BeamConfig_BeamType[BeamID] = <Empty String>
-
Set BeamConfig_ImpactPeriodicFX[BeamID] = <Empty String>
-
Set BeamConfig_CasterPeriodicFX[BeamID] = <Empty String>
-
Set BeamConfig_ChargeUpFX[BeamID] = <Empty String>
-
-
Else - Actions
-
-
Custom script: call RemoveLocation(udg_Beam_loc2)
-
Custom script: call RemoveLocation(udg_Beam_loc1)
-
-
-
-
-
-
-
Sweeping Beam Cancel A
-
Events
-
Unit - A unit Is issued an order targeting a point
-
Unit - A unit Is issued an order with no target
-
-
Conditions
-
((Triggering unit) is in Beam_SweepGroup) Equal to True
-
-
Actions
-
Set BeamID = (Custom value of (Triggering unit))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
-
(Issued order) Equal to (Order(smart))
-
(Issued order) Equal to (Order(stop))
-
(Issued order) Equal to (Order(move))
-
(Issued order) Equal to (Order(patrol))
-
-
-
-
Then - Actions
-
Set Beam_TerminateBeam[BeamID] = True
-
-
Else - Actions
-
-
-
-
Sweeping Beam Cancel B
-
Events
-
Unit - A unit Is issued an order targeting an object
-
-
Conditions
-
((Triggering unit) is in Beam_SweepGroup) Equal to True
-
-
Actions
-
Set BeamID = (Custom value of (Triggering unit))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Target unit of issued order) Not equal to BeamTarget[BeamID]
-
Or - Any (Conditions) are true
-
Conditions
-
(Issued order) Equal to (Order(smart))
-
(Issued order) Equal to (Order(attack))
-
-
-
-
Then - Actions
-
Set BeamCancel_loc1 = (Position of BeamTarget[BeamID])
-
Set BeamCancel_loc2 = (Position of (Target unit of issued order))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Distance between BeamCancel_loc1 and BeamCancel_loc2) Greater than BeamConfig_SweepAOE[BeamID]
-
-
Then - Actions
-
Set Beam_TerminateBeam[BeamID] = True
-
-
Else - Actions
-
-
Custom script: call RemoveLocation(udg_BeamCancel_loc2)
-
Custom script: call RemoveLocation(udg_BeamCancel_loc1)
-
-
Else - Actions
-
-
-
Last edited: