Moderator
M
Moderator
Frost Orb v1.1 | Reviewed by Maker | 29th Sep 2013 | ||||
| APPROVED | ||||
|
Frost Orb Init

Events


Map initialization

Conditions

Actions


-------- --------------------------- --------


-------- Configuration --------


-------- --------------------------- --------


-------- Determines the ability --------


Set FO_Ability = Frost Orb


-------- Determines the dummy unit-type --------


Set FO_DummyType = Frost Orb Dummy


-------- Determines the main orb model --------


Set FO_MainOrbModel = Abilities\Spells\Undead\FreezingBreath\FreezingBreathMissile.mdl


-------- Determines the main orb scale --------


Set FO_MainOrbScale = 1.00


-------- Determines the main orb height --------


Set FO_MainOrbHeight = 30.00


-------- Determines the main orb spawn offset from the caster position --------


Set FO_MainOrbSpawnOffset = 50.00


-------- Determines the main orb move speed --------


Set FO_MainOrbSpeed[1] = 20.00


Set FO_MainOrbSpeed[2] = 20.00


Set FO_MainOrbSpeed[3] = 20.00


-------- Determines the main orb collision --------


Set FO_MainOrbCollision[1] = 75.00


Set FO_MainOrbCollision[2] = 75.00


Set FO_MainOrbCollision[3] = 75.00


-------- Determines the small orbs model --------


Set FO_OrbModel = Abilities\Weapons\ZigguratFrostMissile\ZigguratFrostMissile.mdl


-------- Determines the small orbs scale --------


Set FO_OrbScale = 1.00


-------- Determines the small orbs start height --------


Set FO_OrbHeight = 30.00


-------- Determines the number of small orbs spawned --------


Set FO_OrbNumber[1] = 20


Set FO_OrbNumber[2] = 25


Set FO_OrbNumber[3] = 30


-------- Determines the small orbs move speed --------


Set FO_OrbSpeed[1] = 30.00


Set FO_OrbSpeed[2] = 30.00


Set FO_OrbSpeed[3] = 30.00


-------- Determines the small orbs spread range --------


Set FO_OrbAoE[1] = 800.00


Set FO_OrbAoE[2] = 900.00


Set FO_OrbAoE[3] = 1000.00


-------- Determines the small orbs arc height --------


Set FO_OrbArc[1] = 0.50


Set FO_OrbArc[2] = 0.50


Set FO_OrbArc[3] = 0.50


-------- Determines the main orb explosion model --------


Set FO_MainEXModel[1] = Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl


Set FO_MainEXModel[2] = Abilities\Spells\Undead\FreezingBreath\FreezingBreathMissile.mdl


Set FO_MainEXModel[3] = Units\NightElf\Wisp\WispExplode.mdl


-------- Determines the number of main orb explosion will be created --------


Set FO_MainEXNumber = 3


-------- Determines the main orb explosion range --------


Set FO_MainEXRange[1] = 200.00


Set FO_MainEXRange[2] = 200.00


Set FO_MainEXRange[3] = 200.00


-------- Determines the main orb explosion damage --------


Set FO_MainEXDamage[1] = 100.00


Set FO_MainEXDamage[2] = 150.00


Set FO_MainEXDamage[3] = 200.00


-------- Determines the small orbs explosion model --------


Set FO_EXModel[1] = Abilities\Spells\Undead\FrostNova\FrostNovaTarget.mdl


Set FO_EXModel[2] = Abilities\Spells\Undead\FrostArmor\FrostArmorTarget.mdl


-------- Determines the number of small orbs explosion will be created --------


Set FO_EXNumber = 2


-------- Determines the small orbs explosion range --------


Set FO_EXRange[1] = 100.00


Set FO_EXRange[2] = 100.00


Set FO_EXRange[3] = 100.00


-------- Determines the small orbs explosion damage --------


Set FO_EXDamage[1] = 50.00


Set FO_EXDamage[2] = 60.00


Set FO_EXDamage[3] = 70.00


-------- Determines the effect attached on frozen units --------


Set FO_FreezeSFX = Abilities\Spells\Undead\FreezingBreath\FreezingBreathTargetArt.mdl


-------- Determines the attachment point --------


Set FO_FreezeSFXAttachment = origin


-------- Determines the effect spawn every second that indicate a unit is taking damage because of freezing --------


Set FO_FreezeDPSSFX = Abilities\Spells\Undead\FrostArmor\FrostArmorDamage.mdl


-------- Determines the attachment point --------


Set FO_FreezeDPSSFXAttachment = origin


-------- Determines the freezing duration --------


Set FO_FreezeDuration[1] = 4.00


Set FO_FreezeDuration[2] = 4.00


Set FO_FreezeDuration[3] = 4.00


-------- Determines the freezing damage per second --------


Set FO_FreezeDPS[1] = 20.00


Set FO_FreezeDPS[2] = 20.00


Set FO_FreezeDPS[3] = 20.00


-------- Determines the attack-type --------


Set FO_AttackType = Spells


-------- Determines the damage-type --------


Set FO_DamageType = Cold


-------- If "True", will enable destroying trees --------


Set FO_DestroyTree = True


-------- --------------------------- --------


-------- End of Configuration --------


-------- =========================================================================== --------


-------- --------------------------- --------


-------- Note: This spell will start working if this trigger has been executed --------


-------- --------------------------- --------


-------- This is a configurable variable too, but this one isn't recommended to be changed --------


-------- This is the interval of the spell, default is 0.03. Don't change this to lower value, else the game will be laggy --------


Set FO_Interval = 0.03


-------- All actions below isn't configurable. Please don't change anything below this line --------


-------- I don't have ability to explain it all, sorry :D --------


-------- --------------------------- --------


Trigger - Turn off Frost Orb Loop <gen>


Trigger - Add to Frost Orb Loop <gen> the event (Time - Every FO_Interval seconds of game time)


Trigger - Add to Frost Orb Cast <gen> the event (Unit - A unit Starts the effect of an ability)


If (All Conditions are True) then do (Then Actions) else do (Else Actions)



If - Conditions




FO_DestroyTree Equal to True



Then - Actions




Custom script: set udg_FO_HarvestOrder = String2OrderIdBJ("harvest")




Custom script: set udg_FO_Harvester = CreateUnit(Player(15), 'hpea', 0, 0, 0)




Custom script: call UnitAddAbility(udg_FO_Harvester, 'Aloc')




Unit - Hide FO_Harvester



Else - Actions


Set FO_FreezeDPS[0] = (1.00 / FO_Interval)


For each (Integer FO_Index) from 1 to 3, do (Actions)



Loop - Actions




Custom script: set udg_FO_OrbGap[udg_FO_Index] = (360 / I2R(udg_FO_OrbNumber[udg_FO_Index])) * bj_DEGTORAD




Set FO_FreezeDPS[FO_Index] = (FO_FreezeDPS[FO_Index] / FO_FreezeDPS[0])


Custom script: set udg_FO_X[101] = GetRectMinX(bj_mapInitialPlayableArea)


Custom script: set udg_FO_X[102] = GetRectMaxX(bj_mapInitialPlayableArea)


Custom script: set udg_FO_Y[101] = GetRectMinY(bj_mapInitialPlayableArea)


Custom script: set udg_FO_Y[102] = GetRectMaxY(bj_mapInitialPlayableArea)
Frost Orb Cast

Events

Conditions


(Ability being cast) Equal to FO_Ability

Actions


Set FO_MaxIndex = (FO_MaxIndex + 1)


Set FO_Caster[FO_MaxIndex] = (Triggering unit)


Set FO_Owner[FO_MaxIndex] = (Triggering player)


Set FO_Level[FO_MaxIndex] = (Level of FO_Ability for FO_Caster[FO_MaxIndex])


Custom script: set udg_FO_X[1] = GetUnitX(udg_FO_Caster[udg_FO_MaxIndex])


Custom script: set udg_FO_Y[1] = GetUnitY(udg_FO_Caster[udg_FO_MaxIndex])


Custom script: set udg_FO_X[2] = GetSpellTargetX() - udg_FO_X[1]


Custom script: set udg_FO_Y[2] = GetSpellTargetY() - udg_FO_Y[1]


Custom script: set udg_FO_Angle[udg_FO_MaxIndex] = Atan2(udg_FO_Y[2], udg_FO_X[2])


Custom script: set udg_FO_X[3] = udg_FO_X[1] + udg_FO_MainOrbSpawnOffset * Cos(udg_FO_Angle[udg_FO_MaxIndex])


Custom script: set udg_FO_Y[3] = udg_FO_Y[1] + udg_FO_MainOrbSpawnOffset * Sin(udg_FO_Angle[udg_FO_MaxIndex])


Custom script: set udg_FO_Dummy[udg_FO_MaxIndex] = CreateUnit(udg_FO_Owner[udg_FO_MaxIndex], udg_FO_DummyType, udg_FO_X[3], udg_FO_Y[3], udg_FO_Angle[udg_FO_MaxIndex] * bj_RADTODEG)


Special Effect - Create a special effect attached to the origin of FO_Dummy[FO_MaxIndex] using FO_MainOrbModel


Set FO_Model[FO_MaxIndex] = (Last created special effect)


Custom script: call SetUnitScale(udg_FO_Dummy[udg_FO_MaxIndex], udg_FO_MainOrbScale, 0, 0)


Animation - Change FO_Dummy[FO_MaxIndex] flying height to FO_MainOrbHeight at 0.00


Custom script: set udg_FO_Distance[udg_FO_MaxIndex] = SquareRoot(udg_FO_X[2] * udg_FO_X[2] + udg_FO_Y[2] * udg_FO_Y[2]) - udg_FO_MainOrbSpawnOffset


Set FO_Stage[FO_MaxIndex] = 3


If (All Conditions are True) then do (Then Actions) else do (Else Actions)



If - Conditions




FO_MaxIndex Equal to 1



Then - Actions




Trigger - Turn on Frost Orb Loop <gen>



Else - Actions
Frost Orb Loop

Events

Conditions

Actions


For each (Integer FO_Index) from 1 to FO_MaxIndex, do (Actions)



Loop - Actions




If (All Conditions are True) then do (Then Actions) else do (Else Actions)





If - Conditions






FO_Stage[FO_Index] Equal to 1





Then - Actions






Custom script: set udg_FO_X[1] = GetUnitX(udg_FO_Dummy[udg_FO_Index])






Custom script: set udg_FO_Y[1] = GetUnitY(udg_FO_Dummy[udg_FO_Index])






If (All Conditions are True) then do (Then Actions) else do (Else Actions)







If - Conditions








FO_CurHeight[FO_Index] Greater than 0.00








FO_Distance[FO_Index] Less than FO_MaxDistance[FO_Index]







Then - Actions








Custom script: set udg_FO_CurHeight[udg_FO_Index] = (((4.00 * udg_FO_MaxHeight[udg_FO_Index]) / udg_FO_MaxDistance[udg_FO_Index]) * ((udg_FO_MaxDistance[udg_FO_Index] - udg_FO_Distance[udg_FO_Index]) * (udg_FO_Distance[udg_FO_Index] / udg_FO_MaxDistance[udg_FO_Index])))








Animation - Change FO_Dummy[FO_Index] flying height to FO_CurHeight[FO_Index] at 0.00








Custom script: set udg_FO_X[1] = udg_FO_X[1] + udg_FO_OrbSpeed[udg_FO_Level[udg_FO_Index]] * Cos(udg_FO_Angle[udg_FO_Index])








Custom script: set udg_FO_Y[1] = udg_FO_Y[1] + udg_FO_OrbSpeed[udg_FO_Level[udg_FO_Index]] * Sin(udg_FO_Angle[udg_FO_Index])








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










FO_X[1] Greater than FO_X[101]










FO_X[1] Less than FO_X[102]










FO_Y[1] Greater than FO_Y[101]










FO_Y[1] Less than FO_Y[102]









Then - Actions










Custom script: call SetUnitX(udg_FO_Dummy[udg_FO_Index], udg_FO_X[1])










Custom script: call SetUnitY(udg_FO_Dummy[udg_FO_Index], udg_FO_Y[1])









Else - Actions








Set FO_Distance[FO_Index] = (FO_Distance[FO_Index] + FO_OrbSpeed[FO_Level[FO_Index]])







Else - Actions








For each (Integer FO_Level[0]) from 1 to FO_EXNumber, do (Actions)









Loop - Actions










Custom script: call DestroyEffect(AddSpecialEffect(udg_FO_EXModel[udg_FO_Level[0]], udg_FO_X[1], udg_FO_Y[1]))








Custom script: set bj_wantDestroyGroup = true








Set FO_TempLoc = (Point(FO_X[1], FO_Y[1]))








Unit Group - Pick every unit in (Units within FO_EXRange[FO_Level[FO_Index]] of FO_TempLoc) and do (Actions)









Loop - Actions










Set FO_TempUnit = (Picked unit)










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












(FO_TempUnit is A flying unit) Equal to False












(FO_TempUnit is dead) Equal to False












(FO_TempUnit belongs to an ally of FO_Owner[FO_Index]) Equal to False











Then - Actions












Unit - Cause FO_Caster[FO_Index] to damage FO_TempUnit, dealing FO_EXDamage[FO_Level[FO_Index]] damage of attack type FO_AttackType and damage type FO_DamageType












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














(FO_TempUnit is dead) Equal to False













Then - Actions














Set FO_Stage[0] = 0














For each (Integer FO_Level[0]) from 1 to FO_MaxIndex, do (Actions)















Loop - Actions
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)

















If - Conditions


















FO_TempUnit Equal to FO_Target[FO_Level[0]]

















Then - Actions


















Set FO_Duration[FO_Level[0]] = FO_FreezeDuration[FO_Level[FO_Index]]


















Set FO_Stage[0] = 1


















Custom script: exitwhen udg_FO_Level[0] == udg_FO_Level[0]

















Else - Actions














If (All Conditions are True) then do (Then Actions) else do (Else Actions)















If - Conditions
















FO_Stage[0] Equal to 0















Then - Actions
















Set FO_MaxIndex = (FO_MaxIndex + 1)
















Set FO_Caster[FO_MaxIndex] = FO_Caster[FO_Index]
















Set FO_Target[FO_MaxIndex] = FO_TempUnit
















Set FO_Level[FO_MaxIndex] = FO_Level[FO_Index]
















Set FO_Duration[FO_MaxIndex] = FO_FreezeDuration[FO_Level[FO_MaxIndex]]
















Set FO_FXTimer[FO_MaxIndex] = 1.00
















Special Effect - Create a special effect attached to the FO_FreezeSFXAttachment of FO_Target[FO_MaxIndex] using FO_FreezeSFX
















Set FO_Model[FO_MaxIndex] = (Last created special effect)
















Animation - Change FO_Target[FO_MaxIndex]'s animation speed to 0.00% of its original speed
















Set FO_Stage[FO_MaxIndex] = 2















Else - Actions













Else - Actions











Else - Actions








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










FO_DestroyTree Equal to True









Then - Actions










Destructible - Pick every destructible within FO_EXRange[FO_Level[FO_Index]] of FO_TempLoc and do (Actions)











Loop - Actions












Set FO_TempDest = (Picked destructible)












Custom script: call IssueTargetOrderById(udg_FO_Harvester, udg_FO_HarvestOrder, udg_FO_TempDest)












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














(Current order of FO_Harvester) Equal to FO_HarvestOrder














(FO_TempDest is dead) Equal to False













Then - Actions














Destructible - Kill FO_TempDest













Else - Actions










Unit - Order FO_Harvester to Stop









Else - Actions








Custom script: call RemoveLocation(udg_FO_TempLoc)








Special Effect - Destroy FO_Model[FO_Index]








Unit - Kill FO_Dummy[FO_Index]








Set FO_Stage[FO_Index] = 4





Else - Actions






If (All Conditions are True) then do (Then Actions) else do (Else Actions)







If - Conditions








FO_Stage[FO_Index] Equal to 2







Then - Actions








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










(FO_Target[FO_Index] is dead) Equal to False










FO_Duration[FO_Index] Greater than 0.00









Then - Actions










Unit - Order FO_Target[FO_Index] to Stop










Set FO_FXTimer[FO_Index] = (FO_FXTimer[FO_Index] + FO_Interval)










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












FO_FXTimer[FO_Index] Greater than or equal to 1.00











Then - Actions












Set FO_FXTimer[FO_Index] = 0.00












Custom script: call DestroyEffect(AddSpecialEffectTarget(udg_FO_FreezeDPSSFX, udg_FO_Target[udg_FO_Index], udg_FO_FreezeDPSSFXAttachment))











Else - Actions










Unit - Cause FO_Caster[FO_Index] to damage FO_Target[FO_Index], dealing FO_FreezeDPS[FO_Level[FO_Index]] damage of attack type FO_AttackType and damage type FO_DamageType










Set FO_Duration[FO_Index] = (FO_Duration[FO_Index] - FO_Interval)









Else - Actions










Special Effect - Destroy FO_Model[FO_Index]










Animation - Change FO_Target[FO_Index]'s animation speed to 100.00% of its original speed










Set FO_Stage[FO_Index] = 4







Else - Actions








If (All Conditions are True) then do (Then Actions) else do (Else Actions)









If - Conditions










FO_Stage[FO_Index] Equal to 3









Then - Actions










Custom script: set udg_FO_X[1] = GetUnitX(udg_FO_Dummy[udg_FO_Index])










Custom script: set udg_FO_Y[1] = GetUnitY(udg_FO_Dummy[udg_FO_Index])










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












FO_Distance[FO_Index] Greater than 0.00











Then - Actions












Custom script: set udg_FO_X[1] = udg_FO_X[1] + udg_FO_MainOrbSpeed[udg_FO_Level[udg_FO_Index]] * Cos(udg_FO_Angle[udg_FO_Index])












Custom script: set udg_FO_Y[1] = udg_FO_Y[1] + udg_FO_MainOrbSpeed[udg_FO_Level[udg_FO_Index]] * Sin(udg_FO_Angle[udg_FO_Index])












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














FO_X[1] Greater than FO_X[101]














FO_X[1] Less than FO_X[102]














FO_Y[1] Greater than FO_Y[101]














FO_Y[1] Less than FO_Y[102]













Then - Actions














Custom script: call SetUnitX(udg_FO_Dummy[udg_FO_Index], udg_FO_X[1])














Custom script: call SetUnitY(udg_FO_Dummy[udg_FO_Index], udg_FO_Y[1])














Set FO_TempLoc = (Point(FO_X[1], FO_Y[1]))














Custom script: set bj_wantDestroyGroup = true














Unit Group - Pick every unit in (Units within FO_MainOrbCollision[FO_Level[FO_Index]] of FO_TempLoc) and do (Actions)















Loop - Actions
















Set FO_TempUnit = (Picked unit)
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)

















If - Conditions


















(FO_TempUnit is A flying unit) Equal to False


















(FO_TempUnit is dead) Equal to False


















(FO_TempUnit belongs to an ally of FO_Owner[FO_Index]) Equal to False

















Then - Actions


















Set FO_Distance[FO_Index] = 0.00

















Else - Actions














If (All Conditions are True) then do (Then Actions) else do (Else Actions)















If - Conditions
















FO_DestroyTree Equal to True















Then - Actions
















Destructible - Pick every destructible within FO_MainOrbCollision[FO_Level[FO_Index]] of FO_TempLoc and do (Actions)

















Loop - Actions


















Set FO_TempDest = (Picked destructible)


















Custom script: call IssueTargetOrderById(udg_FO_Harvester, udg_FO_HarvestOrder, udg_FO_TempDest)


















If (All Conditions are True) then do (Then Actions) else do (Else Actions)



















If - Conditions




















(Current order of FO_Harvester) Equal to FO_HarvestOrder




















(FO_TempDest is dead) Equal to False



















Then - Actions




















Set FO_Distance[FO_Index] = 0.00



















Else - Actions
















Unit - Order FO_Harvester to Stop















Else - Actions














Custom script: call RemoveLocation(udg_FO_TempLoc)














Set FO_Distance[FO_Index] = (FO_Distance[FO_Index] - FO_MainOrbSpeed[FO_Level[FO_Index]])













Else - Actions














Set FO_Distance[FO_Index] = 0.00











Else - Actions












For each (Integer FO_Level[0]) from 1 to FO_MainEXNumber, do (Actions)













Loop - Actions














Custom script: call DestroyEffect(AddSpecialEffect(udg_FO_MainEXModel[udg_FO_Level[0]], udg_FO_X[1], udg_FO_Y[1]))












Custom script: set bj_wantDestroyGroup = true












Set FO_TempLoc = (Point(FO_X[1], FO_Y[1]))












Unit Group - Pick every unit in (Units within FO_MainEXRange[FO_Level[FO_Index]] of FO_TempLoc) and do (Actions)













Loop - Actions














Set FO_TempUnit = (Picked unit)














If (All Conditions are True) then do (Then Actions) else do (Else Actions)















If - Conditions
















(FO_TempUnit is A flying unit) Equal to False
















(FO_TempUnit is dead) Equal to False
















(FO_TempUnit belongs to an ally of FO_Owner[FO_Index]) Equal to False















Then - Actions
















Unit - Cause FO_Caster[FO_Index] to damage FO_TempUnit, dealing FO_MainEXDamage[FO_Level[FO_Index]] damage of attack type FO_AttackType and damage type FO_DamageType
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)

















If - Conditions


















(FO_TempUnit is dead) Equal to False

















Then - Actions


















Set FO_Stage[0] = 0


















For each (Integer FO_Level[0]) from 1 to FO_MaxIndex, do (Actions)



















Loop - Actions




















If (All Conditions are True) then do (Then Actions) else do (Else Actions)





















If - Conditions






















FO_TempUnit Equal to FO_Target[FO_Level[0]]





















Then - Actions






















Set FO_Duration[FO_Level[0]] = FO_FreezeDuration[FO_Level[FO_Index]]






















Set FO_Stage[0] = 1






















Custom script: exitwhen udg_FO_Stage[0] == 1





















Else - Actions


















If (All Conditions are True) then do (Then Actions) else do (Else Actions)



















If - Conditions




















FO_Stage[0] Equal to 0



















Then - Actions




















Set FO_MaxIndex = (FO_MaxIndex + 1)




















Set FO_Caster[FO_MaxIndex] = FO_Caster[FO_Index]




















Set FO_Target[FO_MaxIndex] = FO_TempUnit




















Set FO_Level[FO_MaxIndex] = FO_Level[FO_Index]




















Set FO_Duration[FO_MaxIndex] = FO_FreezeDuration[FO_Level[FO_MaxIndex]]




















Set FO_FXTimer[FO_MaxIndex] = 1.00




















Special Effect - Create a special effect attached to the FO_FreezeSFXAttachment of FO_Target[FO_MaxIndex] using FO_FreezeSFX




















Set FO_Model[FO_MaxIndex] = (Last created special effect)




















Animation - Change FO_Target[FO_MaxIndex]'s animation speed to 0.00% of its original speed




















Set FO_Stage[FO_MaxIndex] = 2



















Else - Actions

















Else - Actions















Else - Actions












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














FO_DestroyTree Equal to True













Then - Actions














Destructible - Pick every destructible within FO_MainEXRange[FO_Level[FO_Index]] of FO_TempLoc and do (Actions)















Loop - Actions
















Set FO_TempDest = (Picked destructible)
















Custom script: call IssueTargetOrderById(udg_FO_Harvester, udg_FO_HarvestOrder, udg_FO_TempDest)
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)

















If - Conditions


















(Current order of FO_Harvester) Equal to FO_HarvestOrder


















(FO_TempDest is dead) Equal to False

















Then - Actions


















Destructible - Kill FO_TempDest

















Else - Actions














Unit - Order FO_Harvester to Stop













Else - Actions












Custom script: call RemoveLocation(udg_FO_TempLoc)












Special Effect - Destroy FO_Model[FO_Index]












Unit - Kill FO_Dummy[FO_Index]












Set FO_Stage[FO_Index] = 4












Custom script: set udg_FO_Angle[0] = GetRandomReal(0, 360) * bj_DEGTORAD












For each (Integer FO_Level[0]) from 1 to FO_OrbNumber[FO_Level[FO_Index]], do (Actions)













Loop - Actions














Set FO_Angle[0] = (FO_Angle[0] + FO_OrbGap[FO_Level[FO_Level[0]]])














Set FO_MaxIndex = (FO_MaxIndex + 1)














Custom script: set udg_FO_Dummy[udg_FO_MaxIndex] = CreateUnit(udg_FO_Owner[udg_FO_Index], udg_FO_DummyType, udg_FO_X[1], udg_FO_Y[1], udg_FO_Angle[0] * bj_RADTODEG)














Special Effect - Create a special effect attached to the origin of FO_Dummy[FO_MaxIndex] using FO_OrbModel














Set FO_Model[FO_MaxIndex] = (Last created special effect)














Custom script: call SetUnitScale(udg_FO_Dummy[udg_FO_MaxIndex], udg_FO_OrbScale, 0, 0)














Animation - Change FO_Dummy[FO_MaxIndex] flying height to FO_OrbHeight at 0.00














Set FO_Angle[FO_MaxIndex] = FO_Angle[0]














Set FO_Distance[FO_MaxIndex] = FO_OrbHeight














Set FO_CurHeight[FO_MaxIndex] = FO_OrbHeight














Set FO_MaxDistance[FO_MaxIndex] = (Random real number between FO_MainEXRange[FO_Level[FO_Index]] and FO_OrbAoE[FO_Level[FO_Index]])














Set FO_MaxHeight[FO_MaxIndex] = (FO_MaxDistance[FO_MaxIndex] x FO_OrbArc[FO_Level[FO_Index]])














Set FO_Caster[FO_MaxIndex] = FO_Caster[FO_Index]














Set FO_Owner[FO_MaxIndex] = FO_Owner[FO_Index]














Set FO_Level[FO_MaxIndex] = FO_Level[FO_Index]














Set FO_Stage[FO_MaxIndex] = 1









Else - Actions










If (All Conditions are True) then do (Then Actions) else do (Else Actions)











If - Conditions












FO_Stage[FO_Index] Equal to 4











Then - Actions












Set FO_Angle[FO_Index] = FO_Angle[FO_MaxIndex]












Set FO_Caster[FO_Index] = FO_Caster[FO_MaxIndex]












Set FO_CurHeight[FO_Index] = FO_CurHeight[FO_MaxIndex]












Set FO_Distance[FO_Index] = FO_Distance[FO_MaxIndex]












Set FO_Dummy[FO_Index] = FO_Dummy[FO_MaxIndex]












Set FO_Duration[FO_Index] = FO_Duration[FO_MaxIndex]












Set FO_FXTimer[FO_Index] = FO_FXTimer[FO_MaxIndex]












Set FO_Level[FO_Index] = FO_Level[FO_MaxIndex]












Set FO_MaxDistance[FO_Index] = FO_MaxDistance[FO_MaxIndex]












Set FO_MaxHeight[FO_Index] = FO_MaxHeight[FO_MaxIndex]












Set FO_Model[FO_Index] = FO_Model[FO_MaxIndex]












Set FO_Owner[FO_Index] = FO_Owner[FO_MaxIndex]












Set FO_Stage[FO_Index] = FO_Stage[FO_MaxIndex]












Set FO_Target[FO_Index] = FO_Target[FO_MaxIndex]












Set FO_Index = (FO_Index - 1)












Set FO_MaxIndex = (FO_MaxIndex - 1)












If (All Conditions are True) then do (Then Actions) else do (Else Actions)













If - Conditions














FO_MaxIndex Equal to 0













Then - Actions














Trigger - Turn off (This trigger)













Else - Actions











Else - Actions