• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Air Strike v 1.2

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
  • Like
Reactions: hanz3
Commands a 3 Air Strikers that engage on the target area, Shoots a Machine Guns and Land an Air Bombs that causing intense shock on the opponents blasted.

Level - 1 - Each Air Strikers can deal 12 Pierce Damage on Gunship attack, and 60 Siege Damage with 4 Seconds Shock (Slows AS 100%/ MS 50%) on every Air Bombs dropped.

Level - 2 - Each Air Strikers can deal 16 Pierce Damage on Gunship attack, and 80 Siege Damage with 5 Seconds Shock (Slows AS 100%/ MS 50%) on every Air Bombs dropped.

Level - 3 - Each Air Strikers can deal 20 Pierce Damage on Gunship attack, and 100 Siege Damage with 6 Seconds Shock (Slows AS 100%/ MS 50%) on every Air Bombs dropped.

v1.1 Update: Just Remake the uploading screenshot.

v1.2 Update:
-Customized Spell lessens cast range and now can be target trees and debris
-Rescales Air Strikers Spawn location, Bomb interval and drop angle to make fit on casting location
-Most of the spell aspect are now changeable
-Fixed most of suggested leaks (some are only needs an explanation)

Keywords:
air, gyro, bomb, explosion, machine gun, gunship, war, soldier
Contents

Just another Warcraft III map (Map)

Reviews
IcemanBo: Too long as NeedsFix. Rejected. 23:14, 5nd Jun 2014 BPower: http://www.hiveworkshop.com/forums/spells-569/air-strike-v-1-2-a-216780/index3.html#post2536911 01:54, 22nd Jul 2012 Magtheridon96: In the Init trigger, it would...

Moderator

M

Moderator

IcemanBo: Too long as NeedsFix. Rejected.

23:14, 5nd Jun 2014
BPower:

http://www.hiveworkshop.com/forums/spells-569/air-strike-v-1-2-a-216780/index3.html#post2536911

01:54, 22nd Jul 2012
Magtheridon96:

  • In the Init trigger, it would be best if you store the last created unit into a variable instead of repeating the call.
    • Unit - Create 1 Shock Buffer (Air Strike Dummy) for Neutral Passive at (Random point in (Playable map area)) facing Default building facing degrees
    This leaks a location. (Random point ...) should be stored into a location variable and destroyed using the RemoveLocation function.
  • You don't need to set the level of the ability when preloading it.
  • There should be a trigger that allows the user to configure the spell. You shouldn't set the speed, distance and color in the cast trigger for example.
  • I really wouldn't recommend using terrain deformations. Currently, they create a leak that can't be destroyed.
    • Unit Group - Pick every unit in (Units within 300.00 of AS_Points[1] matching ((((Matching unit) belongs to an enemy of (Owner of AS_Caster[AS_Int])) Equal to True) and ((((Matching unit) is A flying unit) Not equal to True) and (((Matching unit) is alive) Equal to True)))) and do (Actions)
    ^Group leak.
    • Unit - Create 1 Shock Buffer (Air Strike Dummy) for (Owner of (Picked unit)) at (Position of (Picked unit)) facing (Random angle) degrees
    ^Location leak.
    • Unit Group - Pick every unit in (Units within 150.00 of AS_Points[4] matching ((((Matching unit) belongs to an enemy of (Owner of AS_Caster[AS_Int])) Equal to True) and ((((Matching unit) is A flying unit) Not equal to True) and (((Matching unit) is alive) Equal to True)))) and do (Actions)
    ^Group leak.
  • Currently, your spell could destroy bridges. You should use tree detection. It's done by having a dummy that's ordered to harvest the picked destructable. After you order him to do so, if his current order is "harvest", then destroy the destructable.
  • It would be more efficient to store the owner of the caster into an array so you don't have to repeat that call every time.

This is actually very well done, it just needs a few fixes before I can approve it ;)
 
Level 14
Joined
Aug 8, 2010
Messages
1,022
Hm... for first time i see a spell with both Dynamic Indexing System and Hashtables but it seems to be MUI and leakless. I saw this is your first spell, so it's pretty good for a first spell. Good job there! :)

To upload triggers you need to do this :

[trigger]This is where you have to paste your trigger. Simply right click on your trigger in the Trigger Editor and click Copy As Text. Paste it here[/trigger]

Your trigger needs to be between those two BB Code tags : [trigger] and [/trigger]. It should look like this :
  • Trigger here
Here are more BB Code tags that might be useful for you. Take a look at the URL and HIDDEN tags. ;)

Here are your triggers :
  • Air Strike Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Creating Dummy Group on Hashtable --------
      • Hashtable - Create a hashtable
      • Set AS_Hashtable = (Last created hashtable)
      • -------- This not Much Important, just initializing the Dummy buffer that may cause bit lag on the first encounter --------
      • Unit - Create 1 Shock Buffer (Air Strike Dummy) for Neutral Passive at (Random point in (Playable map area)) facing Default building facing degrees
      • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
      • Unit - Add Shocked (Air Strike Effect) to (Last created unit)
      • Unit - Set level of Shocked (Air Strike Effect) for (Last created unit) to 5
  • Air Strike Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Air Strike
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_Indexsize Equal to 0
        • Then - Actions
          • Trigger - Turn on Air Strike Function <gen>
        • Else - Actions
      • Set AS_Indexsize = (AS_Indexsize + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_Indexsize Greater than AS_Indexmaxsize
        • Then - Actions
          • Set AS_Indexmaxsize = AS_Indexsize
          • Set AS_Index[AS_Indexsize] = AS_Indexsize
        • Else - Actions
      • -------- Initializing Basic Datas --------
      • Set AS_Int = AS_Index[AS_Indexsize]
      • Set AS_Caster[AS_Int] = (Triggering unit)
      • Set AS_Points[1] = (Position of AS_Caster[AS_Int])
      • Set AS_Points[2] = (Target point of ability being cast)
      • Set AS_Level[AS_Int] = (Level of Air Strike for AS_Caster[AS_Int])
      • Set AS_GunshipDamage[AS_Int] = (8.00 + (4.00 x (Real(AS_Level[AS_Int]))))
      • Set AS_AirBombsDamage[AS_Int] = (40.00 + (20.00 x (Real(AS_Level[AS_Int]))))
      • Set AS_BombInterval[AS_Int] = 0
      • Set AS_Distance[AS_Int] = 1250.00
      • Set AS_Speed[AS_Int] = 18.00
      • Set AS_FadeColor[AS_Int] = 100.00
      • -------- AS_AirLimits determines the number of Air Striker dummies present on this skill --------
      • Set AS_AirLimits[AS_Int] = 0
      • -------- AS_HSize determines the number of Dummies owned by the Casters that will function present on the Hashtable Group --------
      • Set AS_HSize[AS_Int] = 0
      • -------- Rolling the First Interval of Air Bombs. --------
      • Set AS_BombRandomMaxInterval[AS_Int] = (Random integer number between 15 and 25)
      • -------- Chances we're the Air Strikers will start, More Priority on the Facing Angle of the Caster --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Random integer number between 1 and 100) Less than or equal to (30 + (10 x AS_Level[AS_Int]))
        • Then - Actions
          • Set AS_Angle[AS_Int] = (Angle from AS_Points[1] to AS_Points[2])
        • Else - Actions
          • Set AS_Angle[AS_Int] = (Random angle)
      • -------- Spawning Air Striker Dummies --------
      • Set AS_TempInterval = 0
      • For each (Integer AS_TempLoop) from 1 to 3, do (Actions)
        • Loop - Actions
          • Set AS_AirLimits[AS_Int] = (AS_AirLimits[AS_Int] + 1)
          • Set AS_HSize[AS_Int] = (AS_HSize[AS_Int] + 1)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AS_TempInterval Equal to 0
            • Then - Actions
              • Set AS_TempInterval = 1
              • Set AS_Points[3] = (AS_Points[2] offset by 650.00 towards (AS_Angle[AS_Int] + 165.00) degrees)
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AS_TempInterval Equal to 1
                • Then - Actions
                  • Set AS_TempInterval = 2
                  • Set AS_Points[3] = (AS_Points[2] offset by 650.00 towards (AS_Angle[AS_Int] - 165.00) degrees)
                • Else - Actions
                  • Set AS_Points[3] = (AS_Points[2] offset by 450.00 towards (AS_Angle[AS_Int] + 180.00) degrees)
          • Unit - Create 1 Air Strikers (Air Strike Dummy) for (Owner of AS_Caster[AS_Int]) at AS_Points[3] facing AS_Angle[AS_Int] degrees
          • Set AS_TempDummy = (Last created unit)
          • Hashtable - Save Handle OfAS_TempDummy as AS_HSize[AS_Int] of AS_Int in AS_Hashtable
          • Unit - Turn collision for AS_TempDummy Off
          • Unit - Move AS_TempDummy instantly to AS_Points[3]
          • Animation - Change AS_TempDummy's vertex coloring to (100.00%, 100.00%, 100.00%) with AS_FadeColor[AS_Int]% transparency
          • Animation - Change AS_TempDummy's animation speed to 200.00% of its original speed
          • Custom script: call RemoveLocation(udg_AS_Points[3])
      • Custom script: call RemoveLocation(udg_AS_Points[2])
      • Custom script: call RemoveLocation(udg_AS_Points[1])
  • Air Strike Function
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer AS_Loop) from 1 to AS_Indexsize, do (Actions)
        • Loop - Actions
          • Set AS_Int = AS_Index[AS_Loop]
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AS_HSize[AS_Int] Greater than 0
            • Then - Actions
              • -------- Air Strikers Dummy Functions --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AS_AirLimits[AS_Int] Greater than 0
                • Then - Actions
                  • -------- Air Bombs Spawn Interval --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AS_BombInterval[AS_Int] Greater than or equal to AS_BombRandomMaxInterval[AS_Int]
                    • Then - Actions
                      • Set AS_BombRandomMaxInterval[AS_Int] = (Random integer number between 15 and 25)
                      • Set AS_BombInterval[AS_Int] = 0
                    • Else - Actions
                      • Set AS_BombInterval[AS_Int] = (AS_BombInterval[AS_Int] + 1)
                  • -------- Air Strikers Movement --------
                  • Set AS_Distance[AS_Int] = (AS_Distance[AS_Int] - AS_Speed[AS_Int])
                  • For each (Integer AS_TempLoop) from 1 to AS_AirLimits[AS_Int], do (Actions)
                    • Loop - Actions
                      • Set AS_TempDummy = (Load AS_TempLoop of AS_Int in AS_Hashtable)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • AS_Distance[AS_Int] Greater than 0.00
                        • Then - Actions
                          • -------- Air Strikers Entrance/Exit Fading Effects --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • And - All (Conditions) are true
                                • Conditions
                                  • AS_Distance[AS_Int] Greater than or equal to 1000.00
                                  • AS_FadeColor[AS_Int] Greater than 0.00
                            • Then - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • AS_TempLoop Less than or equal to 1
                                • Then - Actions
                                  • Set AS_FadeColor[AS_Int] = (AS_FadeColor[AS_Int] - 10.00)
                                • Else - Actions
                              • Animation - Change AS_TempDummy's vertex coloring to (100.00%, 100.00%, 100.00%) with AS_FadeColor[AS_Int]% transparency
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • And - All (Conditions) are true
                                    • Conditions
                                      • AS_Distance[AS_Int] Less than or equal to 200.00
                                      • AS_FadeColor[AS_Int] Less than 100.00
                                • Then - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • AS_TempLoop Less than or equal to 1
                                    • Then - Actions
                                      • Set AS_FadeColor[AS_Int] = (AS_FadeColor[AS_Int] + 10.00)
                                    • Else - Actions
                                  • Animation - Change AS_TempDummy's vertex coloring to (100.00%, 100.00%, 100.00%) with AS_FadeColor[AS_Int]% transparency
                                • Else - Actions
                          • -------- Air Strikers Point Flying --------
                          • Set AS_Points[1] = (Position of AS_TempDummy)
                          • Set AS_Points[2] = (AS_Points[1] offset by AS_Speed[AS_Int] towards AS_Angle[AS_Int] degrees)
                          • Unit - Move AS_TempDummy instantly to AS_Points[2], facing AS_Angle[AS_Int] degrees
                          • -------- Air Strikers Gunship Attack --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • AS_Distance[AS_Int] Greater than or equal to 550.00
                            • Then - Actions
                              • -------- Air Strikers Random Strike (Intervaling, Gunship Attack) --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Random integer number between 1 and 3) Less than or equal to 2
                                • Then - Actions
                                  • Animation - Play AS_TempDummy's Attack one animation
                                  • Set AS_Points[3] = (AS_Points[2] offset by (Random real number between 250.00 and 350.00) towards (AS_Angle[AS_Int] x (Random real number between 0.75 and 1.25)) degrees)
                                  • Set AS_Points[4] = (AS_Points[3] offset by (Random real number between 0.00 and 250.00) towards (Random angle) degrees)
                                  • Special Effect - Create a special effect at AS_Points[4] using Abilities\Weapons\GyroCopter\GyroCopterImpact.mdl
                                  • Special Effect - Destroy (Last created special effect)
                                  • -------- Damaging Both Matching Units and Vulnerable Destructibles --------
                                  • Unit Group - Pick every unit in (Units within 150.00 of AS_Points[4] matching ((((Matching unit) belongs to an enemy of (Owner of AS_Caster[AS_Int])) Equal to True) and ((((Matching unit) is A flying unit) Not equal to True) and (((Matching unit) is alive) Equal to True)))) and do (Actions)
                                    • Loop - Actions
                                      • Unit - Cause AS_TempDummy to damage (Picked unit), dealing AS_GunshipDamage[AS_Int] damage of attack type Pierce and damage type Sonic
                                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        • If - Conditions
                                          • ((Picked unit) is Mechanical) Not equal to True
                                        • Then - Actions
                                          • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\HydraliskImpact\HydraliskImpact.mdl
                                          • Special Effect - Destroy (Last created special effect)
                                        • Else - Actions
                                          • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Weapons\SteamTank\SteamTankImpact.mdl
                                          • Special Effect - Destroy (Last created special effect)
                                  • Destructible - Pick every destructible within 150.00 of AS_Points[4] and do (Actions)
                                    • Loop - Actions
                                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        • If - Conditions
                                          • ((Picked destructible) is invulnerable) Not equal to True
                                        • Then - Actions
                                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                            • If - Conditions
                                              • (Current life of (Picked destructible)) Greater than (3.50 + (0.50 x (Real(AS_Level[AS_Int]))))
                                            • Then - Actions
                                              • Destructible - Set life of (Picked destructible) to ((Current life of (Picked destructible)) - (3.50 + (0.50 x (Real(AS_Level[AS_Int])))))
                                              • Animation - Play (Picked destructible)'s Stand Hit animation
                                            • Else - Actions
                                              • Destructible - Kill (Picked destructible)
                                        • Else - Actions
                                  • Custom script: call RemoveLocation(udg_AS_Points[3])
                                  • Custom script: call RemoveLocation(udg_AS_Points[4])
                                • Else - Actions
                            • Else - Actions
                          • -------- Air Strikers Air Bomb Landing --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • AS_BombInterval[AS_Int] Greater than or equal to AS_BombRandomMaxInterval[AS_Int]
                            • Then - Actions
                              • -------- Air Strikers Random Strike (Randomizing, Qunatity of Bombs Land) --------
                              • Set AS_Points[5] = (Position of AS_TempDummy)
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Random integer number between 1 and 10) Less than or equal to 8
                                • Then - Actions
                                  • Set AS_HSize[AS_Int] = (AS_HSize[AS_Int] + 1)
                                  • Unit - Create 1 Air Bombs (Air Strike Dummy) for (Owner of AS_Caster[AS_Int]) at AS_Points[5] facing AS_Angle[AS_Int] degrees
                                  • Unit - Turn collision for (Last created unit) Off
                                  • Unit - Move (Last created unit) instantly to AS_Points[5]
                                  • Hashtable - Save Handle Of(Last created unit) as AS_HSize[AS_Int] of AS_Int in AS_Hashtable
                                  • Unit Group - Add (Last created unit) to AS_TempGroup
                                  • Unit - Set (Last created unit) movement speed to (Random real number between 50.00 and 125.00)
                                  • Set AS_Points[6] = (AS_Points[5] offset by 500.00 towards (AS_Angle[AS_Int] + (60.00 x (Random real number between (0.00 - 1.00) and 1.00))) degrees)
                                  • Unit - Order (Last created unit) to Move To AS_Points[6]
                                  • Custom script: call RemoveLocation(udg_AS_Points[6])
                                • Else - Actions
                              • Custom script: call RemoveLocation(udg_AS_Points[5])
                            • Else - Actions
                          • Custom script: call RemoveLocation(udg_AS_Points[2])
                          • Custom script: call RemoveLocation(udg_AS_Points[1])
                        • Else - Actions
                          • -------- Hashtable Rearranging --------
                          • Hashtable - Save Handle Of(Load AS_AirLimits[AS_Int] of AS_Int in AS_Hashtable) as AS_TempLoop of AS_Int in (Last created hashtable)
                          • For each (Integer AS_TempLoop2) from (AS_AirLimits[AS_Int] + 1) to AS_HSize[AS_Int], do (Actions)
                            • Loop - Actions
                              • Hashtable - Save Handle Of(Load AS_TempLoop2 of AS_Int in AS_Hashtable) as (AS_TempLoop2 - 1) of AS_Int in AS_Hashtable
                          • Unit - Remove AS_TempDummy from the game
                          • Set AS_HSize[AS_Int] = (AS_HSize[AS_Int] - 1)
                          • Set AS_AirLimits[AS_Int] = (AS_AirLimits[AS_Int] - 1)
                          • Set AS_TempLoop = (AS_TempLoop - 1)
                • Else - Actions
              • -------- Air Bombs Dummy Function --------
              • For each (Integer AS_TempLoop) from (AS_AirLimits[AS_Int] + 1) to AS_HSize[AS_Int], do (Actions)
                • Loop - Actions
                  • Set AS_TempDummy = (Load AS_TempLoop of AS_Int in AS_Hashtable)
                  • -------- AS_TempGroup is keeping the dummy on leak --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (AS_TempDummy is in AS_TempGroup) Equal to True
                    • Then - Actions
                      • -------- Checking Detonation Height --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current flying height of AS_TempDummy) Less than or equal to 10.00
                        • Then - Actions
                          • Set AS_Points[1] = (Position of AS_TempDummy)
                          • Environment - Create a 0.20 second Temporary crater deformation at AS_Points[1] with radius 300.00 and depth 40.00
                          • Special Effect - Create a special effect at AS_Points[1] using Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
                          • Special Effect - Destroy (Last created special effect)
                          • Special Effect - Create a special effect at AS_Points[1] using Objects\Spawnmodels\Other\NeutralBuildingExplosion\NeutralBuildingExplosion.mdl
                          • Special Effect - Destroy (Last created special effect)
                          • -------- Damaging Both Matching Units and Vulnerable Destructibles --------
                          • Unit Group - Pick every unit in (Units within 300.00 of AS_Points[1] matching ((((Matching unit) belongs to an enemy of (Owner of AS_Caster[AS_Int])) Equal to True) and ((((Matching unit) is A flying unit) Not equal to True) and (((Matching unit) is alive) Equal to True)))) and do (Actions)
                            • Loop - Actions
                              • Unit - Create 1 Shock Buffer (Air Strike Dummy) for (Owner of (Picked unit)) at (Position of (Picked unit)) facing (Random angle) degrees
                              • Unit - Add a 1.00 second Generic expiration timer to (Last created unit)
                              • Unit - Add Shocked (Air Strike Effect) to (Last created unit)
                              • Unit - Set level of Shocked (Air Strike Effect) for (Last created unit) to AS_Level[AS_Int]
                              • Unit - Order (Last created unit) to Human Sorceress - Slow (Picked unit)
                              • Unit - Cause AS_TempDummy to damage (Picked unit), dealing AS_AirBombsDamage[AS_Int] damage of attack type Siege and damage type Force
                          • Destructible - Pick every destructible within 300.00 of AS_Points[1] and do (Actions)
                            • Loop - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • ((Picked destructible) is invulnerable) Not equal to True
                                • Then - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • (Current life of (Picked destructible)) Greater than (25.00 + (5.00 x (Real(AS_Level[AS_Int]))))
                                    • Then - Actions
                                      • Destructible - Set life of (Picked destructible) to ((Current life of (Picked destructible)) - (25.00 + (5.00 x (Real(AS_Level[AS_Int])))))
                                      • Animation - Play (Picked destructible)'s Stand Hit animation
                                    • Else - Actions
                                      • Destructible - Kill (Picked destructible)
                                • Else - Actions
                          • -------- Clearing Dummy/ Rearranging Hashtable --------
                          • Unit - Kill AS_TempDummy
                          • Unit Group - Remove AS_TempDummy from AS_TempGroup
                          • Hashtable - Save Handle Of(Load AS_HSize[AS_Int] of AS_Int in AS_Hashtable) as AS_TempLoop of AS_Int in AS_Hashtable
                          • Hashtable - Save Handle OfAS_TempDummy as AS_HSize[AS_Int] of AS_Int in AS_Hashtable
                          • Set AS_HSize[AS_Int] = (AS_HSize[AS_Int] - 1)
                          • Set AS_TempLoop = (AS_TempLoop - 1)
                          • Custom script: call RemoveLocation(udg_AS_Points[1])
                        • Else - Actions
                          • -------- Air Bombs Landing Animation --------
                          • Animation - Change AS_TempDummy flying height to ((Current flying height of AS_TempDummy) - 5.00) at 0.00
                    • Else - Actions
              • -------- If all dummies has been finish on function the Skill will terminate --------
            • Else - Actions
              • -------- Rearranging the Index, and Clearing Hashtables --------
              • Hashtable - Clear all child hashtables of child AS_Int in AS_Hashtable
              • Set AS_Index[AS_Loop] = AS_Index[AS_Indexsize]
              • Set AS_Index[AS_Indexsize] = AS_Int
              • Set AS_Indexsize = (AS_Indexsize - 1)
              • Set AS_Loop = (AS_Loop - 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_Indexsize Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
 
  • Like
Reactions: ILH
On a side note, with hashtables you really do not need any dynamic indexing really, Also I'm accustom to hearing that arraying points isn't a good idea.

As far as the hashtables/indexing thing goes, better to just use one of the other.

You should make any effects/dummies/faderates/etc. configurable.

Also damage base and damage per level and all the rest of it should also be put in a configurable trigger instead of using given numbers (applies to /everything/ if possible)

Using co-ordinates instead of moving to points would make this a lot less laggy on weaker computers.

Also since ThisPot claims to have made it too really that problem would have to be sorted out /before/ this got approved
 
Level 5
Joined
Jan 24, 2011
Messages
49
On a side note, with hashtables you really do not need any dynamic indexing really, Also I'm accustom to hearing that arraying points isn't a good idea.

points with array are more essential that make a tons of point variables

As far as the hashtables/indexing thing goes, better to just use one of the other.

I just use hashtables from making a dummy group only than making unit group with arrays that causing leak due to can't expand itself indexsize or can be called IndexOutOfBounds??

You should make any effects/dummies/faderates/etc. configurable.

what are you meaning to be? modding custom effects? I have more experience on making GUI triggers than models... =.=


Also damage base and damage per level and all the rest of it should also be put in a configurable trigger instead of using given numbers (applies to /everything/ if possible)

Why?

Using co-ordinates instead of moving to points would make this a lot less laggy on weaker computers.

Honestly my computer can play only less than 5 players in melee game warcraft due to very slow performance otherwise can cause to lag and not response but I made this spell very smooth to be so no need to worry.

Also since ThisPot claims to have made it too really that problem would have to be sorted out /before/ this got approved

He must proof it first before he will said this spell is belong to him and I only stole this... Have he made and post a spell here with triggering both hashtable and dynamic indexing?
 
points with array are more essential that make a tons of point variables

I used to myself, but then moderators told me that it's better to not - now I just avoid points completely whenever possible

Lazy R said:
I just use hashtables from making a dummy group only than making unit group with arrays that causing leak due to can't expand itself indexsize or can be called IndexOutOfBounds??

I don't fully know what you mean, can't you just use temporary groups and drestroy them constantly? Honestly I've never encountered a single instance where hashtables + indexing are fully necessary if at all

Lazy R said:
what are you meaning to be? modding custom effects? I have more experience on making GUI triggers than models... =.=

No, I mean making configurables with things like strings, i.e. giving a variable of type string then setting it's value to a model or effect path (thus making those configurable as well without having to go looking in your main loop)

Lazy R said:

Because it's better/easier for people to use and mods like it

Lazy R said:
Honestly my computer can play only less than 5 players in melee game warcraft due to very slow performance otherwise can cause to lag and not response but I made this spell very smooth to be so no need to worry.

I'm not worried, since mine can easily take stuff like this, but en masse it would still cause lag regardless of the computer, try running 5-9 instances at the same time (depending on computer strength)

Lazy R said:
He must proof it first before he will said this spell is belong to him and I only stole this... Have he made and post a spell here with triggering both hashtable and dynamic indexing?

I know he's only /said/ it, but it's still a matter that'd need to be resolved, approving something then rejecting it again later (regardless of reasons) isn't the most proffesional, so it's pretty much needed to be certain beforehand.
 
Level 5
Joined
Jan 24, 2011
Messages
49
I don't fully know what you mean, can't you just use temporary groups and drestroy them constantly? Honestly I've never encountered a single instance where hashtables + indexing are fully necessary if at all

I already make a first set of script of this spell that I use Unit Group with Array, than hashtable, And it cause not function all dummies on the spell I cast second at the same time, I have alot of experiment on it and I discovered in the second Index of Unit Group with array can't even pick the dummy but still the first index functioning well. So I decide to make a Hashtable as a group and I already expected that possibly anybody will ask it to me why I use hashtable since I already have an index...

I'm not worried, since mine can easily take stuff like this, but en masse it would still cause lag regardless of the computer, try running 5-9 instances at the same time (depending on computer strength)

Maybe it's possible if the Computer is Pentium 1 or what... but really my computer has too slow performance while I making spells.

I know he's only /said/ it, but it's still a matter that'd need to be resolved, approving something then rejecting it again later (regardless of reasons) isn't the most proffesional, so it's pretty much needed to be certain beforehand.

Are these guy harassing me since I'm new on posting? I know that I'm not the only one who already make an Air Strike Spell just like an omnislash here. But saying directly in here that I just stole this is meaning to be this spell I made is really belong to him?, that kind of comment post is NOT a JOKE!!
 
I already make a first set of script of this spell that I use Unit Group with Array, than hashtable, And it cause not function all dummies on the spell I cast second at the same time, I have alot of experiment on it and I discovered in the second Index of Unit Group with array can't even pick the dummy but still the first index functioning well. So I decide to make a Hashtable as a group and I already expected that possibly anybody will ask it to me why I use hashtable since I already have an index...

Oh right, yeah most of us already know that group arrays don't work at all, Although why not just make another unit group for the dummies instead of making a whole hashtable?

Lazy R said:
Maybe it's possible if the Computer is Pentium 1 or what... but really my computer has too slow performance while I making spells.

Fair enough, it's just that using points limits you heavily on the level of "strength" you put into the effects of your spells, about 10+ of mine would cause your computer to break if they used points

Lazy R said:
Are these guy harassing me since I'm new on posting? I know that I'm not the only one who already make an Air Strike Spell just like an omnislash here. But saying directly in here that I just stole this is meaning to be this spell I made is really belong to him?, that kind of comment post is NOT a JOKE!!

I wouldn't know, it's just pretty unheard of for anybody to even make those claims, considering if their claim is false they'd be the one who reieved due punishment for the false claim. It's just important to make sure every submitted spell isn't ripped or stolen (since that has and does happen)
 
Level 5
Joined
Jan 24, 2011
Messages
49
Oh right, yeah most of us already know that group arrays don't work at all, Although why not just make another unit group for the dummies instead of making a whole hashtable?

Since hashtable from me is like a variables of all with 2 dimensional arrays, well then... How do you mean make another unit group? can give me a sample? Another thing is since ya'll have know it I saw alot of spells here with that leaking specially from most of wave or target point kind of spell when I was searching.

I wouldn't know, it's just pretty unheard of for anybody to even make those claims, considering if their claim is false they'd be the one who reieved due punishment for the false claim. It's just important to make sure every submitted spell isn't ripped or stolen (since that has and does happen)

okey I will prove that I can make really MUI spell by myself since I trying to get it more logically to become simple and short...
 
Since hashtable from me is like a variables of all with 2 dimensional arrays, well then... How do you mean make another unit group? can give me a sample? Another thing is since ya'll have know it I saw alot of spells here with that leaking specially from most of wave or target point kind of spell when I was searching.

As in you just make another variable, which is also a unit group?
I know hashtables are like 2d array variables "for all" as you put it since I use them often, but my point is, if you're justing using it to store a group of units, why bother? it's not efficient or practical to use one for such a small purpose.

On a side note, you're leaking some unit groups, just going through the triggers.

And spells which are approved don't have leaks unless there's been an oversight.
 
Level 5
Joined
Jan 24, 2011
Messages
49
http://www.hiveworkshop.com/forums/map-development-202/command-conquer-campaign-multiplayer-216447/

This is the project where I showed the ability off, and I am still working on it, so it is really bothering me.

Well it was too impossible we're same scripting and function of spell, otherwise you saying you are the first who made an Air Strike spell? If yes, I'm not saying I am the first who made the "Air Strike" spell, and just I make my OWN VERSION...

BTW since I ever seen here was criticism about my scripting and nothing about functional problem issues right now I decide not to change my scripts after all...
 

Wrda

Spell Reviewer
Level 25
Joined
Nov 18, 2012
Messages
1,873
You stole this from my map... I JUST released a version like a month ago...

Mine just doesn't slow...
=====================================
(Could be a total coincidence I guess but I did release mine first)
Pretty rude. And you stole the ability in your map from who? Don't even try to judge people when you don't know for real, it looks like an immature kid whining about who the did spell first and who stole...
About THIS spell:
There should be a configuration trigger on the initialization.
And it looks pretty well made for a first spell:thumbs_up:
 
Level 10
Joined
Aug 21, 2010
Messages
316
Pretty rude. And you stole the ability in your map from who? Don't even try to judge people when you don't know for real, it looks like an immature kid whining about who the did spell first and who stole...
About THIS spell:
There should be a configuration trigger on the initialization.
And it looks pretty well made for a first spell:thumbs_up:

All stealing so no need to comment on such things
 
Level 5
Joined
Jan 24, 2011
Messages
49
About THIS spell:
There should be a configuration trigger on the initialization.
And it looks pretty well made for a first spell:thumbs_up:

Maybe you review the trigger post that already been 3 years ago
Here is the new one:

  • Air Strike Init
    • Events
      • Time - Elapsed game time is 0.10 seconds
    • Conditions
    • Actions
      • -------- Creating Dummy Group on Hashtable --------
      • Hashtable - Create a hashtable
      • Set AS_Hashtable = (Last created hashtable)
      • -------- Set Some Basic Data of Spell --------
      • -------- The Base Spell Data --------
      • Set AS_TempAbility = Air Strike
      • Set AS_TempBuffer = Shocked (Air Strike Effect)
      • -------- Dummy Buffer - Gunshot Effects (1 - for organic, 2 - for mechanical) --------
      • Set AS_TempDummyBase = Shock Buffer (Air Strike Dummy)
      • Set AS_TempGSEffect[1] = Abilities\Weapons\HydraliskImpact\HydraliskImpact.mdl
      • Set AS_TempGSEffect[2] = Abilities\Weapons\SteamTank\SteamTankImpact.mdl
      • -------- This ones aren't very flexible in scripts since it was dedicated mostly on human like body --------
      • Set AS_TempBodyEffects[1] = head
      • Set AS_TempBodyEffects[2] = chest
      • Set AS_TempBodyEffects[3] = hand,left
      • Set AS_TempBodyEffects[4] = hand,right
      • Set AS_TempBodyEffects[5] = foot,left
      • Set AS_TempBodyEffects[6] = foot,right
      • -------- Set the flyer and bomb dummy type and other special effects. Can you change it every level of ability --------
      • Set AS_TempFlyerType[1] = Air Strikers 1 (Air Strike Dummy)
      • Set AS_TempFlyerType[2] = Air Strikers 1 (Air Strike Dummy)
      • Set AS_TempFlyerType[3] = Air Strikers 2 (Air Strike Dummy)
      • Set AS_TempBombBase[1] = Air Bombs (Air Strike Dummy)
      • Set AS_TempBombBase[2] = Air Bombs (Air Strike Dummy)
      • Set AS_TempBombBase[3] = Air Bombs (Air Strike Dummy)
      • Set AS_TempGEffects[1] = Abilities\Weapons\GyroCopter\GyroCopterImpact.mdl
      • Set AS_TempGEffects[2] = Abilities\Weapons\FireBallMissile\FireBallMissile.mdl
      • Set AS_TempGEffects[3] = Abilities\Weapons\FarseerMissile\FarseerMissile.mdl
      • Set AS_TempEEffects1[1] = Abilities\Spells\Other\Incinerate\FireLordDeathExplode.mdl
      • Set AS_TempEEffects1[2] = Abilities\Spells\Orc\WarStomp\WarStompCaster.mdl
      • Set AS_TempEEffects1[3] = Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
      • Set AS_TempEEffects2[1] = Abilities\Weapons\DemolisherFireMissile\DemolisherFireMissile.mdl
      • Set AS_TempEEffects2[2] = Abilities\Spells\Other\Doom\DoomDeath.mdl
      • Set AS_TempEEffects2[3] = Objects\Spawnmodels\Other\NeutralBuildingExplosion\NeutralBuildingExplosion.mdl
      • -------- The Total Number of Air Strikers, It must be set it in Odd Numbers so it will keep in balance within left and right of formation --------
      • -------- I recommended not to apply more than 5 --------
      • Set AS_TempTotalFlyer[1] = 3
      • Set AS_TempTotalFlyer[2] = 3
      • Set AS_TempTotalFlyer[3] = 3
      • -------- If you want to remove Gunshot action on air strike just remove all of it's damage on trigger --------
      • -------- If you want to remove Air Bomb action on spell just remove all of it's damage and buff applies on trigger --------
      • -------- Bombs Applies Buffs (0 - If False, 1 or more - If True) --------
      • Set AS_TempBHasEffect[1] = 1
      • Set AS_TempBHasEffect[2] = 1
      • Set AS_TempBHasEffect[3] = 1
      • -------- Set Overall Damage --------
      • -------- Base Damage --------
      • Set AS_TempBDBase[1] = 60.00
      • Set AS_TempBDBase[2] = 80.00
      • Set AS_TempBDBase[3] = 100.00
      • Set AS_TempGDBase[1] = 12.00
      • Set AS_TempGDBase[2] = 16.00
      • Set AS_TempGDBase[3] = 20.00
      • -------- Additional Damage (Just make it 0 if you don't want to add them) --------
      • -------- Additional Stats as Damage in Factor --------
      • -------- Str Base --------
      • Set AS_TempGDSSFBase[1] = 0.00
      • Set AS_TempGDSSFBase[2] = 0.00
      • Set AS_TempGDSSFBase[3] = 0.00
      • Set AS_TempBDSSFBase[1] = 0.00
      • Set AS_TempBDSSFBase[2] = 0.00
      • Set AS_TempBDSSFBase[3] = 0.00
      • -------- Agi Base --------
      • Set AS_TempGDASFBase[1] = 0.00
      • Set AS_TempGDASFBase[2] = 0.00
      • Set AS_TempGDASFBase[3] = 0.00
      • Set AS_TempBDASFBase[1] = 0.00
      • Set AS_TempBDASFBase[2] = 0.00
      • Set AS_TempBDASFBase[3] = 0.00
      • -------- Int Base --------
      • Set AS_TempGDISFBase[1] = 0.00
      • Set AS_TempGDISFBase[2] = 0.00
      • Set AS_TempGDISFBase[3] = 0.00
      • Set AS_TempBDISFBase[1] = 0.00
      • Set AS_TempBDISFBase[2] = 0.00
      • Set AS_TempBDISFBase[3] = 0.00
      • -------- Additional Hero Level as Damage in Factor --------
      • Set AS_TempBDHLFBase[1] = 0.00
      • Set AS_TempGDHLFBase[1] = 0.00
      • -------- Set AoE of Gun Shots and Bombs --------
      • Set AS_TempGRadius[1] = 100.00
      • Set AS_TempGRadius[2] = 125.00
      • Set AS_TempGRadius[3] = 150.00
      • Set AS_TempBRadius[1] = 200.00
      • Set AS_TempBRadius[2] = 250.00
      • Set AS_TempBRadius[3] = 300.00
      • -------- This is not much important and probably functioning messy, you don't need to bother here --------
      • -------- but just to initialize dummy so it won't cause any lag upon casting the ability on it's first encounter --------
      • Set AS_Points[1] = (Center of (Playable map area))
      • For each (Integer AS_TempLoop3) from 1 to 3, do (Actions)
        • Loop - Actions
          • Unit - Create 1 AS_TempFlyerType[AS_TempLoop3] for Neutral Passive at AS_Points[1] facing Default building facing degrees
          • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
          • Unit - Create 1 AS_TempBombBase[AS_TempLoop3] for Neutral Passive at AS_Points[1] facing Default building facing degrees
          • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
      • Unit - Create 1 AS_TempDummyBase for Neutral Passive at AS_Points[1] facing Default building facing degrees
      • Unit - Add a 0.50 second Generic expiration timer to (Last created unit)
      • Unit - Add Shocked (Air Strike Effect) to (Last created unit)
      • Unit - Set level of Shocked (Air Strike Effect) for (Last created unit) to 5
      • Custom script: call RemoveLocation(udg_AS_Points[1])
  • Air Strike Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to AS_TempAbility
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_Indexsize Equal to 0
        • Then - Actions
          • Trigger - Turn on Air Strike Function <gen>
        • Else - Actions
      • Set AS_Indexsize = (AS_Indexsize + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_Indexsize Greater than AS_Indexmaxsize
        • Then - Actions
          • Set AS_Indexmaxsize = AS_Indexsize
          • Set AS_Index[AS_Indexsize] = AS_Indexsize
        • Else - Actions
      • -------- Initializing Basic Datas --------
      • Set AS_Int = AS_Index[AS_Indexsize]
      • Set AS_Caster[AS_Int] = (Triggering unit)
      • Set AS_Player = (Owner of AS_Caster[AS_Int])
      • Set AS_Points[1] = (Position of AS_Caster[AS_Int])
      • Set AS_Points[2] = (Target point of ability being cast)
      • Set AS_Level[AS_Int] = (Level of AS_TempAbility for AS_Caster[AS_Int])
      • Set AS_DamageBase = 0.00
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempGDBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = AS_TempGDBase[AS_Level[AS_Int]]
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempGDSSFBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = (AS_DamageBase + ((Real((Strength of AS_Caster[AS_Int] (Include bonuses)))) x AS_TempGDSSFBase[AS_Level[AS_Int]]))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempGDASFBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = (AS_DamageBase + ((Real((Agility of AS_Caster[AS_Int] (Include bonuses)))) x AS_TempGDASFBase[AS_Level[AS_Int]]))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempGDISFBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = (AS_DamageBase + ((Real((Intelligence of AS_Caster[AS_Int] (Include bonuses)))) x AS_TempGDISFBase[AS_Level[AS_Int]]))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempGDHLFBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = (AS_DamageBase + ((Real((Hero level of AS_Caster[AS_Int]))) x AS_TempGDHLFBase[AS_Level[AS_Int]]))
        • Else - Actions
      • Set AS_GunshipDamage[AS_Int] = AS_DamageBase
      • Set AS_DamageBase = 0.00
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempBDBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = AS_TempBDBase[AS_Level[AS_Int]]
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempBDSSFBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = (AS_DamageBase + ((Real((Strength of AS_Caster[AS_Int] (Include bonuses)))) x AS_TempBDSSFBase[AS_Level[AS_Int]]))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempBDASFBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = (AS_DamageBase + ((Real((Agility of AS_Caster[AS_Int] (Include bonuses)))) x AS_TempBDASFBase[AS_Level[AS_Int]]))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempBDISFBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = (AS_DamageBase + ((Real((Intelligence of AS_Caster[AS_Int] (Include bonuses)))) x AS_TempBDISFBase[AS_Level[AS_Int]]))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_TempBDHLFBase[AS_Level[AS_Int]] Greater than 0.00
        • Then - Actions
          • Set AS_DamageBase = (AS_DamageBase + ((Real((Hero level of AS_Caster[AS_Int]))) x AS_TempBDHLFBase[AS_Level[AS_Int]]))
        • Else - Actions
      • Set AS_AirBombsDamage[AS_Int] = AS_DamageBase
      • Set AS_AirBombsHasEffect[AS_Int] = AS_TempBHasEffect[AS_Level[AS_Int]]
      • Set AS_BRadius[AS_Int] = AS_TempBRadius[AS_Level[AS_Int]]
      • Set AS_GRadius[AS_Int] = AS_TempGRadius[AS_Level[AS_Int]]
      • Set AS_BombInterval[AS_Int] = 0
      • Set AS_Distance[AS_Int] = 1250.00
      • Set AS_Speed[AS_Int] = 18.00
      • Set AS_FadeColor[AS_Int] = 100.00
      • -------- AS_AirLimits determines the number of Air Striker dummies present on this skill --------
      • Set AS_AirLimits[AS_Int] = 0
      • -------- AS_HSize determines the number of Dummies owned by the Casters that will function present on the Hashtable Group --------
      • Set AS_HSize[AS_Int] = 0
      • -------- Rolling the First Interval of Air Bombs. --------
      • Set AS_BombRandomMaxInterval[AS_Int] = (Random integer number between 7 and 12)
      • -------- Chances we're the Air Strikers will start, More Priority on the Facing Angle of the Caster --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Random integer number between 1 and 2) Less than or equal to 1
        • Then - Actions
          • Set AS_Angle[AS_Int] = (Angle from AS_Points[1] to AS_Points[2])
        • Else - Actions
          • Set AS_Angle[AS_Int] = (Random angle)
      • Set AS_Points[3] = (AS_Points[2] offset by 550.00 towards (AS_Angle[AS_Int] + 180.00) degrees)
      • -------- Spawning Air Striker Dummies --------
      • For each (Integer AS_TempLoop) from 1 to AS_TempTotalFlyer[AS_Level[AS_Int]], do (Actions)
        • Loop - Actions
          • Set AS_AirLimits[AS_Int] = (AS_AirLimits[AS_Int] + 1)
          • Set AS_HSize[AS_Int] = (AS_HSize[AS_Int] + 1)
          • Unit - Create 1 AS_TempFlyerType[AS_Level[AS_Int]] for AS_Player at AS_Points[3] facing AS_Angle[AS_Int] degrees
          • Set AS_TempDummy = (Last created unit)
          • Hashtable - Save Handle OfAS_TempDummy as AS_HSize[AS_Int] of AS_Int in AS_Hashtable
          • Unit - Turn collision for AS_TempDummy Off
          • Unit - Move AS_TempDummy instantly to AS_Points[3]
          • Animation - Change AS_TempDummy's vertex coloring to (100.00%, 100.00%, 100.00%) with AS_FadeColor[AS_Int]% transparency
          • Animation - Change AS_TempDummy's animation speed to 200.00% of its original speed
      • Custom script: call RemoveLocation(udg_AS_Points[3])
      • Custom script: call RemoveLocation(udg_AS_Points[2])
      • Custom script: call RemoveLocation(udg_AS_Points[1])
  • Air Strike Function
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • For each (Integer AS_Loop) from 1 to AS_Indexsize, do (Actions)
        • Loop - Actions
          • Set AS_Int = AS_Index[AS_Loop]
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • AS_HSize[AS_Int] Greater than 0
            • Then - Actions
              • Set AS_Player = (Owner of AS_Caster[AS_Int])
              • -------- Air Strikers Dummy Functions --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AS_AirLimits[AS_Int] Greater than 0
                • Then - Actions
                  • -------- Air Bombs Spawn Interval --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AS_BombInterval[AS_Int] Greater than or equal to AS_BombRandomMaxInterval[AS_Int]
                    • Then - Actions
                      • Set AS_BombRandomMaxInterval[AS_Int] = (Random integer number between 7 and 12)
                      • Set AS_BombInterval[AS_Int] = 0
                    • Else - Actions
                      • Set AS_BombInterval[AS_Int] = (AS_BombInterval[AS_Int] + 1)
                  • -------- Air Strikers Movement --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • AS_Distance[AS_Int] Less than AS_Speed[AS_Int]
                    • Then - Actions
                      • Set AS_Speed[AS_Int] = AS_Distance[AS_Int]
                      • Set AS_Distance[AS_Int] = 0.00
                    • Else - Actions
                      • Set AS_Distance[AS_Int] = (AS_Distance[AS_Int] - AS_Speed[AS_Int])
                  • Set AS_TempToggles = 0
                  • Set AS_AirDistance = ((500.00 + (50.00 x (Real(AS_AirLimits[AS_Int])))) / (Real(AS_AirLimits[AS_Int])))
                  • Set AS_AirDistanceIncrement = AS_AirDistance
                  • For each (Integer AS_TempLoop) from 1 to AS_AirLimits[AS_Int], do (Actions)
                    • Loop - Actions
                      • Set AS_TempDummy = (Load AS_TempLoop of AS_Int in AS_Hashtable)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • AS_Distance[AS_Int] Greater than 0.00
                        • Then - Actions
                          • -------- Air Strikers Entrance/Exit Fading Effects --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • And - All (Conditions) are true
                                • Conditions
                                  • AS_Distance[AS_Int] Greater than or equal to 1000.00
                                  • AS_FadeColor[AS_Int] Greater than 0.00
                            • Then - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • AS_TempLoop Less than or equal to 1
                                • Then - Actions
                                  • Set AS_FadeColor[AS_Int] = (AS_FadeColor[AS_Int] - 10.00)
                                • Else - Actions
                              • Animation - Change AS_TempDummy's vertex coloring to (100.00%, 100.00%, 100.00%) with AS_FadeColor[AS_Int]% transparency
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • And - All (Conditions) are true
                                    • Conditions
                                      • AS_Distance[AS_Int] Less than or equal to 200.00
                                      • AS_FadeColor[AS_Int] Less than 100.00
                                • Then - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • AS_TempLoop Less than or equal to 1
                                    • Then - Actions
                                      • Set AS_FadeColor[AS_Int] = (AS_FadeColor[AS_Int] + 10.00)
                                    • Else - Actions
                                  • Animation - Change AS_TempDummy's vertex coloring to (100.00%, 100.00%, 100.00%) with AS_FadeColor[AS_Int]% transparency
                                • Else - Actions
                          • -------- Checking of Ownership Changes --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Owner of AS_TempDummy) Not equal to AS_Player
                            • Then - Actions
                              • Unit - Change ownership of AS_TempDummy to AS_Player and Change color
                            • Else - Actions
                          • -------- Air Strikers Point Flying --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • AS_TempLoop Less than or equal to 1
                            • Then - Actions
                              • -------- Summoning the Middle Air Striker as a guide for their formation --------
                              • Set AS_Points[1] = (Position of AS_TempDummy)
                              • Set AS_Points[2] = (AS_Points[1] offset by AS_Speed[AS_Int] towards AS_Angle[AS_Int] degrees)
                              • Unit - Move AS_TempDummy instantly to AS_Points[2], facing AS_Angle[AS_Int] degrees
                            • Else - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • AS_TempToggles Greater than 0
                                • Then - Actions
                                  • Set AS_TempToggles = 0
                                  • Set AS_Points[1] = (AS_Points[2] offset by AS_AirDistance towards (AS_Angle[AS_Int] + 115.00) degrees)
                                  • Set AS_AirDistance = (AS_AirDistance + AS_AirDistanceIncrement)
                                • Else - Actions
                                  • Set AS_TempToggles = 1
                                  • Set AS_Points[1] = (AS_Points[2] offset by AS_AirDistance towards (AS_Angle[AS_Int] - 115.00) degrees)
                              • Unit - Move AS_TempDummy instantly to AS_Points[1], facing AS_Angle[AS_Int] degrees
                          • -------- Air Strikers Gunship Attack --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • And - All (Conditions) are true
                                • Conditions
                                  • AS_Distance[AS_Int] Greater than or equal to 550.00
                                  • AS_GunshipDamage[AS_Int] Greater than 0.00
                            • Then - Actions
                              • -------- Air Strikers Random Strike (Intervaling, Gunship Attack) --------
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Random integer number between 1 and 3) Less than or equal to 2
                                • Then - Actions
                                  • Animation - Play AS_TempDummy's Attack one animation
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • AS_TempLoop Greater than 1
                                    • Then - Actions
                                      • Set AS_Points[3] = (AS_Points[1] offset by (Random real number between 250.00 and 350.00) towards (AS_Angle[AS_Int] x (Random real number between 0.75 and 1.25)) degrees)
                                    • Else - Actions
                                      • Set AS_Points[3] = (AS_Points[2] offset by (Random real number between 250.00 and 350.00) towards (AS_Angle[AS_Int] x (Random real number between 0.75 and 1.25)) degrees)
                                  • Set AS_Points[4] = (AS_Points[3] offset by (Random real number between 0.00 and 250.00) towards (Random angle) degrees)
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • (Terrain pathing at AS_Points[4] of type Floatability is off) Not equal to True
                                    • Then - Actions
                                      • Special Effect - Create a special effect at AS_Points[4] using Abilities\Spells\Other\CrushingWave\CrushingWaveDamage.mdl
                                      • Special Effect - Destroy (Last created special effect)
                                    • Else - Actions
                                  • Special Effect - Create a special effect at AS_Points[4] using AS_TempGEffects[AS_Level[AS_Int]]
                                  • Special Effect - Destroy (Last created special effect)
                                  • -------- Damaging Both Matching Units and Vulnerable Destructibles --------
                                  • Set AS_PickingGroup = (Units within AS_GRadius[AS_Int] of AS_Points[4] matching (((((Matching unit) belongs to an enemy of AS_Player) Equal to True) and ((((Matching unit) is A flying unit) Not equal to True) or (((Matching unit) is Snared) Equal to True))) and (((Matching unit) i
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • (Number of units in AS_PickingGroup) Greater than 0
                                    • Then - Actions
                                      • Unit Group - Pick every unit in AS_PickingGroup and do (Actions)
                                        • Loop - Actions
                                          • Unit - Cause AS_TempDummy to damage (Picked unit), dealing AS_GunshipDamage[AS_Int] damage of attack type Pierce and damage type Sonic
                                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                            • If - Conditions
                                              • ((Picked unit) is Mechanical) Not equal to True
                                            • Then - Actions
                                              • Special Effect - Create a special effect attached to the AS_TempBodyEffects[(Random integer number between 1 and 6)] of (Picked unit) using AS_TempGSEffect[1]
                                              • Special Effect - Destroy (Last created special effect)
                                            • Else - Actions
                                              • Special Effect - Create a special effect attached to the AS_TempBodyEffects[(Random integer number between 1 and 6)] of (Picked unit) using AS_TempGSEffect[2]
                                              • Special Effect - Destroy (Last created special effect)
                                          • Unit Group - Remove (Picked unit) from AS_PickingGroup
                                    • Else - Actions
                                  • -------- It probably destroys every single destructibles, even bridge and that's how it design --------
                                  • Destructible - Pick every destructible within AS_GRadius[AS_Int] of AS_Points[4] and do (Actions)
                                    • Loop - Actions
                                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                        • If - Conditions
                                          • ((Picked destructible) is invulnerable) Not equal to True
                                        • Then - Actions
                                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                            • If - Conditions
                                              • (Current life of (Picked destructible)) Greater than 5.00
                                            • Then - Actions
                                              • Destructible - Set life of (Picked destructible) to ((Current life of (Picked destructible)) - (3.50 + (0.50 x (Real(AS_Level[AS_Int])))))
                                              • Animation - Play (Picked destructible)'s Stand Hit animation
                                            • Else - Actions
                                              • Destructible - Kill (Picked destructible)
                                        • Else - Actions
                                  • Custom script: call RemoveLocation(udg_AS_Points[3])
                                  • Custom script: call RemoveLocation(udg_AS_Points[4])
                                • Else - Actions
                            • Else - Actions
                          • -------- Air Strikers Air Bomb Landing --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • And - All (Conditions) are true
                                • Conditions
                                  • AS_BombInterval[AS_Int] Greater than or equal to AS_BombRandomMaxInterval[AS_Int]
                                  • AS_Distance[AS_Int] Greater than or equal to 550.00
                                  • Or - Any (Conditions) are true
                                    • Conditions
                                      • AS_AirBombsDamage[AS_Int] Greater than 0.00
                                      • AS_AirBombsHasEffect[AS_Int] Greater than 0
                            • Then - Actions
                              • -------- Air Strikers Random Strike (Randomizing, Qunatity of Bombs Land) --------
                              • Set AS_Points[5] = (Position of AS_TempDummy)
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • (Random integer number between 1 and 10) Less than or equal to 8
                                • Then - Actions
                                  • -------- Bombs are just order to moving and theres no exact distance when they explode just until their height drops --------
                                  • Set AS_HSize[AS_Int] = (AS_HSize[AS_Int] + 1)
                                  • Unit - Create 1 AS_TempBombBase[AS_Level[AS_Int]] for (Owner of AS_Caster[AS_Int]) at AS_Points[5] facing AS_Angle[AS_Int] degrees
                                  • Unit - Turn collision for (Last created unit) Off
                                  • Unit - Move (Last created unit) instantly to AS_Points[5]
                                  • Hashtable - Save Handle Of(Last created unit) as AS_HSize[AS_Int] of AS_Int in AS_Hashtable
                                  • Unit Group - Add (Last created unit) to AS_TempGroup
                                  • Unit - Set (Last created unit) movement speed to (Random real number between 50.00 and 125.00)
                                  • -------- I just add a very far distance so they will never stop on moving until they explode --------
                                  • Set AS_Points[6] = (AS_Points[5] offset by 1000.00 towards (AS_Angle[AS_Int] + (35.00 x (Random real number between (0.00 - 1.00) and 1.00))) degrees)
                                  • Unit - Order (Last created unit) to Move To AS_Points[6]
                                  • Custom script: call RemoveLocation(udg_AS_Points[6])
                                • Else - Actions
                              • Custom script: call RemoveLocation(udg_AS_Points[5])
                            • Else - Actions
                          • Custom script: call RemoveLocation(udg_AS_Points[1])
                        • Else - Actions
                          • -------- Hashtable Rearranging --------
                          • Hashtable - Save Handle Of(Load AS_AirLimits[AS_Int] of AS_Int in AS_Hashtable) as AS_TempLoop of AS_Int in (Last created hashtable)
                          • For each (Integer AS_TempLoop2) from (AS_AirLimits[AS_Int] + 1) to AS_HSize[AS_Int], do (Actions)
                            • Loop - Actions
                              • Hashtable - Save Handle Of(Load AS_TempLoop2 of AS_Int in AS_Hashtable) as (AS_TempLoop2 - 1) of AS_Int in AS_Hashtable
                          • Unit - Remove AS_TempDummy from the game
                          • Set AS_HSize[AS_Int] = (AS_HSize[AS_Int] - 1)
                          • Set AS_AirLimits[AS_Int] = (AS_AirLimits[AS_Int] - 1)
                          • Set AS_TempLoop = (AS_TempLoop - 1)
                  • Custom script: call RemoveLocation(udg_AS_Points[2])
                • Else - Actions
              • -------- Air Bombs Dummy Function --------
              • For each (Integer AS_TempLoop) from (AS_AirLimits[AS_Int] + 1) to AS_HSize[AS_Int], do (Actions)
                • Loop - Actions
                  • Set AS_TempDummy = (Load AS_TempLoop of AS_Int in AS_Hashtable)
                  • -------- AS_TempGroup is keeping the dummy on leak --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (AS_TempDummy is in AS_TempGroup) Equal to True
                    • Then - Actions
                      • -------- Checking Detonation Height --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Owner of AS_TempDummy) Not equal to AS_Player
                        • Then - Actions
                          • Unit - Change ownership of AS_TempDummy to AS_Player and Change color
                        • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current flying height of AS_TempDummy) Less than or equal to 10.00
                        • Then - Actions
                          • Set AS_Points[1] = (Position of AS_TempDummy)
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Terrain pathing at AS_Points[1] of type Floatability is off) Not equal to True
                            • Then - Actions
                              • Special Effect - Create a special effect at AS_Points[1] using Objects\Spawnmodels\Naga\NagaDeath\NagaDeath.mdl
                              • Special Effect - Destroy (Last created special effect)
                            • Else - Actions
                          • Special Effect - Create a special effect at AS_Points[1] using AS_TempEEffects1[AS_Level[AS_Int]]
                          • Special Effect - Destroy (Last created special effect)
                          • Special Effect - Create a special effect at AS_Points[1] using AS_TempEEffects2[AS_Level[AS_Int]]
                          • Special Effect - Destroy (Last created special effect)
                          • -------- Damaging Both Matching Units and Vulnerable Destructibles --------
                          • Set AS_PickingGroup = (Units within AS_BRadius[AS_Int] of AS_Points[1] matching (((((Matching unit) belongs to an enemy of AS_Player) Equal to True) and ((((Matching unit) is A flying unit) Not equal to True) or (((Matching unit) is Snared) Equal to True))) and (((Matching unit) i
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Number of units in AS_PickingGroup) Greater than 0
                            • Then - Actions
                              • Unit Group - Pick every unit in AS_PickingGroup and do (Actions)
                                • Loop - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • AS_AirBombsHasEffect[AS_Int] Greater than 0
                                    • Then - Actions
                                      • Set AS_Points[2] = (Position of (Picked unit))
                                      • Unit - Create 1 AS_TempDummyBase for (Owner of (Picked unit)) at AS_Points[2] facing (Random angle) degrees
                                      • Set AS_TempUnit = (Last created unit)
                                      • Unit - Add a 1.00 second Generic expiration timer to AS_TempUnit
                                      • Unit - Add AS_TempBuffer to AS_TempUnit
                                      • Unit - Set level of AS_TempBuffer for AS_TempUnit to AS_Level[AS_Int]
                                      • Unit - Order AS_TempUnit to Human Sorceress - Slow (Picked unit)
                                      • Custom script: call RemoveLocation(udg_AS_Points[2])
                                    • Else - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • AS_AirBombsDamage[AS_Int] Greater than 0.00
                                    • Then - Actions
                                      • Unit - Cause AS_TempDummy to damage (Picked unit), dealing AS_AirBombsDamage[AS_Int] damage of attack type Siege and damage type Force
                                    • Else - Actions
                                  • Unit Group - Remove (Picked unit) from AS_PickingGroup
                            • Else - Actions
                          • -------- It probably destroys every single destructibles, even bridge and that's how it design --------
                          • Destructible - Pick every destructible within AS_BRadius[AS_Int] of AS_Points[1] and do (Actions)
                            • Loop - Actions
                              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                • If - Conditions
                                  • ((Picked destructible) is invulnerable) Not equal to True
                                • Then - Actions
                                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                                    • If - Conditions
                                      • (Current life of (Picked destructible)) Greater than 40.00
                                    • Then - Actions
                                      • Destructible - Set life of (Picked destructible) to ((Current life of (Picked destructible)) - 40.00)
                                      • Animation - Play (Picked destructible)'s Stand Hit animation
                                    • Else - Actions
                                      • Destructible - Kill (Picked destructible)
                                • Else - Actions
                          • -------- Clearing Dummy/ Rearranging Hashtable --------
                          • Unit - Kill AS_TempDummy
                          • Unit Group - Remove AS_TempDummy from AS_TempGroup
                          • Hashtable - Save Handle Of(Load AS_HSize[AS_Int] of AS_Int in AS_Hashtable) as AS_TempLoop of AS_Int in AS_Hashtable
                          • Hashtable - Save Handle OfAS_TempDummy as AS_HSize[AS_Int] of AS_Int in AS_Hashtable
                          • Set AS_HSize[AS_Int] = (AS_HSize[AS_Int] - 1)
                          • Set AS_TempLoop = (AS_TempLoop - 1)
                          • Custom script: call RemoveLocation(udg_AS_Points[1])
                        • Else - Actions
                          • -------- Air Bombs Landing Animation --------
                          • Animation - Change AS_TempDummy flying height to ((Current flying height of AS_TempDummy) - 5.00) at 0.00
                    • Else - Actions
              • -------- If all dummies has been finish on function the Skill will terminate --------
            • Else - Actions
              • -------- Rearranging the Index, and Clearing Hashtables --------
              • Hashtable - Clear all child hashtables of child AS_Int in AS_Hashtable
              • Set AS_Index[AS_Loop] = AS_Index[AS_Indexsize]
              • Set AS_Index[AS_Indexsize] = AS_Int
              • Set AS_Indexsize = (AS_Indexsize - 1)
              • Set AS_Loop = (AS_Loop - 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AS_Indexsize Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
You stole this from my map... I JUST released a version like a month ago...

Mine just doesn't slow...

All stealing so no need to comment on such things

Leave this issue alone anyway...
If ever None of us are original on this idea then so be it
But I swear, I made mine better than the others... :p
 
Last edited:
Level 19
Joined
Mar 18, 2012
Messages
1,716
Why didn't you consider the tips given to you 1 year ago. For example:
In the Init trigger, it would be best if you store the last created unit into a variable instead of repeating the call.

There is still a group leak here:
  • Unit Group - Pick every unit in AS_PickingGroup and do (Actions)
Edit:

I would appreciate if you improve the documentation in the init trigger. Explain what the effects are used for etc ...
You don't have to increase the ability level when preloading abilities.
Animationspeed and vertex color could be configurable.
Currently your spell destroys every destructable (bridges), a tree detection is needed here ... "picked destructable" could be stored into a variable.
"Last created unit" could be stored into a unit variable.
  • Unit - Create 1 AS_TempBombBase[AS_Level[AS_Int]] for (Owner of AS_Caster[AS_Int]) at AS_Points[5] facing AS_Angle[AS_Int] degrees
(Owner of AS_Caster[AS_Int]) is already stored into AS_Player
  • Special Effect - Create a special effect at AS_Points[1] using Objects\Spawnmodels\Naga\NagaDeath\NagaDeath.mdl
could be configurable.
 
Last edited:
Top