• 🏆 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!

[Trigger] Pyroblast ability.

Status
Not open for further replies.
Level 6
Joined
Oct 4, 2011
Messages
226
Hello, this ability is a projectile ability that travels 1600/1800/2000/2200 range or until an enemy is hit, deals aoe damage and creates another dummy unit and then loop 2 is turned on to deal aoe damage over time. Right now I am having trouble because my ability fires the projectile towards the center of the map instead of the location layed out..
  • Pyroblast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Pyroblast (White Wizard)
    • Actions
      • Set TempUnit3 = (Casting unit)
      • Set TempPlayer = (Owner of TempUnit3)
      • Set TempInteger = (Level of Pyroblast (White Wizard) for TempUnit3)
      • Set TempLocation = (Position of TempUnit3)
      • Set TempUnit2 = (Target unit of ability being cast)
      • Set TempLocation2 = (Target point of ability being cast)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (TempUnit2 is alive) Equal to True
        • Then - Actions
          • Custom script: call RemoveLocation(udg_TempLocation2)
          • Set TempLocation2 = (Position of TempUnit2)
        • Else - Actions
      • Set TempReal = (Angle from TempLocation to TempLocation2)
      • Set TempLocation3 = (TempLocation offset by (1400.00 + ((Real(TempInteger)) x 200.00)) towards TempReal degrees)
      • Set TempLocation4 = (TempLocation offset by 10.00 towards TempReal degrees)
      • Custom script: call RemoveLocation(udg_TempLocation)
      • Unit - Create 1 Pyroblast (Dummy 1) for TempPlayer at TempLocation4 facing TempReal degrees
      • Custom script: call RemoveLocation(udg_TempLocation4)
      • Set TempUnit = (Last created unit)
      • Unit Group - Add TempUnit to AA02_ProjectileGroup
      • Custom script: set udg_AA02_IdInteger = GetHandleId(udg_TempUnit)
      • Hashtable - Save (((Real(TempInteger)) x 200.00) + 1400.00) as 1 of AA02_IdInteger in AA99_Hash
      • Hashtable - Save Handle OfTempLocation3 as 2 of AA02_IdInteger in AA99_Hash
      • Hashtable - Save Handle OfTempUnit3 as 3 of AA02_IdInteger in AA99_Hash
      • Hashtable - Save (((Real(TempInteger)) x 40.00) + 40.00) as 4 of AA02_IdInteger in AA99_Hash
      • Hashtable - Save TempReal as 5 of AA02_IdInteger in AA99_Hash
      • Custom script: call RemoveLocation(udg_TempLocation)
      • Custom script: call RemoveLocation(udg_TempLocation2)
      • Trigger - Turn on Pyroblast loop 1 <gen>
  • Pyroblast loop 1
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in AA02_ProjectileGroup) Greater than 0
        • Then - Actions
          • Unit Group - Pick every unit in AA02_ProjectileGroup and do (Actions)
            • Loop - Actions
              • Set TempUnit = (Picked unit)
              • Set TempPlayer = (Owner of TempUnit)
              • Custom script: set udg_AA02_IdInteger = GetHandleId(udg_TempUnit)
              • Set TempLocation = (Position of TempUnit)
              • Set TempLocation2 = (Load 2 of AA02_IdInteger in AA99_Hash)
              • Set TempReal = (Distance between TempLocation and TempLocation2)
              • Set TempReal2 = (Angle from TempLocation to TempLocation2)
              • Set TempLocation3 = (TempLocation offset by 27.00 towards TempReal2 degrees)
              • Set AA02_TargetsGroup = (Units within 200.00 of TempLocation matching ((((((Matching unit) is A structure) Equal to False) and (((Matching unit) is Magic Immune) Equal to False)) and (((Matching unit) belongs to an ally of TempPlayer) Equal to False)) and (((Owner of (Matching unit)
              • Custom script: call RemoveLocation(udg_TempLocation)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Number of units in AA02_TargetsGroup) Greater than 0
                • Then - Actions
                  • Custom script: call RemoveLocation(udg_TempLocation3)
                  • Custom script: call RemoveLocation(udg_TempLocation2)
                  • Set TempLocation = (Position of TempUnit)
                  • Unit Group - Remove TempUnit from AA02_ProjectileGroup
                  • Unit - Kill TempUnit
                  • Unit Group - Pick every unit in AA02_TargetsGroup and do (Actions)
                    • Loop - Actions
                      • Unit - Cause (Load 3 of AA02_IdInteger in AA99_Hash) to damage (Picked unit), dealing (Load 4 of AA02_IdInteger from AA99_Hash) damage of attack type Magic and damage type Fire
                      • Unit Group - Remove (Picked unit) from AA02_TargetsGroup
                  • Unit - Create 1 Pyroblast (Dummy 2) for TempPlayer at TempLocation facing (Random angle) degrees
                  • Unit - Add a 5.00 second Generic expiration timer to (Last created unit)
                  • Set TempUnit2 = (Last created unit)
                  • Custom script: set udg_AA02_IdInteger2 = GetHandleId(udg_TempUnit2)
                  • Unit Group - Add TempUnit2 to AA02_DummyGroup
                  • Set TempUnit3 = (Load 3 of AA02_IdInteger in AA99_Hash)
                  • Hashtable - Clear all child hashtables of child AA02_IdInteger in AA99_Hash
                  • Hashtable - Save 4.98 as 1 of AA02_IdInteger2 in AA99_Hash
                  • Hashtable - Save 0.96 as 2 of AA02_IdInteger2 in AA99_Hash
                  • Hashtable - Save Handle OfTempUnit3 as 3 of AA02_IdInteger2 in AA99_Hash
                  • Trigger - Turn on Pyroblast loop 2 <gen>
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • TempReal Greater than 30.00
                    • Then - Actions
                      • Unit - Move TempUnit instantly to TempLocation3
                      • Custom script: call RemoveLocation(udg_TempLocation2)
                      • Custom script: call RemoveLocation(udg_TempLocation3)
                    • Else - Actions
                      • Custom script: call RemoveLocation(udg_TempLocation3)
                      • Set TempLocation = (Position of TempUnit)
                      • Unit Group - Remove TempUnit from AA02_ProjectileGroup
                      • Unit - Kill TempUnit
                      • Unit - Create 1 Pyroblast (Dummy 2) for TempPlayer at TempLocation facing (Random angle) degrees
                      • Unit - Add a 5.00 second Generic expiration timer to (Last created unit)
                      • Set TempUnit2 = (Last created unit)
                      • Custom script: set udg_AA02_IdInteger2 = GetHandleId(udg_TempUnit2)
                      • Unit Group - Add TempUnit2 to AA02_DummyGroup
                      • Unit Group - Pick every unit in AA02_TargetsGroup and do (Actions)
                        • Loop - Actions
                          • Unit - Cause (Load 3 of AA02_IdInteger in AA99_Hash) to damage (Picked unit), dealing (Load 4 of AA02_IdInteger from AA99_Hash) damage of attack type Magic and damage type Fire
                          • Unit Group - Remove (Picked unit) from AA02_TargetsGroup
                      • Set TempUnit3 = (Load 3 of AA02_IdInteger in AA99_Hash)
                      • Hashtable - Clear all child hashtables of child AA02_IdInteger in AA99_Hash
                      • Hashtable - Save 4.98 as 1 of AA02_IdInteger2 in AA99_Hash
                      • Hashtable - Save 0.96 as 2 of AA02_IdInteger2 in AA99_Hash
                      • Hashtable - Save Handle OfTempUnit3 as 3 of AA02_IdInteger2 in AA99_Hash
                      • Trigger - Turn on Pyroblast loop 2 <gen>
        • Else - Actions
          • Trigger - Turn off (This trigger)
          • Game - Display to (All players) for 0.15 seconds the text: |cff22ccffAA02_UGro...
  • Pyroblast loop 2
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in AA02_DummyGroup) Greater than 0
        • Then - Actions
          • Unit Group - Pick every unit in AA02_DummyGroup and do (Actions)
            • Loop - Actions
              • Set TempUnit = (Picked unit)
              • Set TempPlayer = (Owner of TempUnit)
              • Custom script: set udg_AA02_IdInteger2 = GetHandleId(udg_TempUnit)
              • Set TempLocation = (Position of TempUnit)
              • Set TempReal = (Load 1 of AA02_IdInteger2 from AA99_Hash)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • TempReal Greater than 0.00
                • Then - Actions
                  • Hashtable - Save (TempReal - 0.03) as 1 of AA02_IdInteger2 in AA99_Hash
                  • Set TempReal2 = (Load 2 of AA02_IdInteger2 from AA99_Hash)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • TempReal2 Greater than 0.00
                    • Then - Actions
                      • Hashtable - Save (TempReal2 - 0.03) as 2 of AA02_IdInteger2 in AA99_Hash
                      • Custom script: call RemoveLocation(udg_TempLocation)
                    • Else - Actions
                      • Set AA02_BurnGroup = (Units within 300.00 of TempLocation matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an ally of TempPlayer) Equal to False) and ((Owner of (Matching unit)) Not equal
                      • Custom script: call RemoveLocation(udg_TempLocation)
                      • Unit Group - Pick every unit in AA02_BurnGroup and do (Actions)
                        • Loop - Actions
                          • Unit - Cause (Load 3 of AA02_IdInteger2 in AA99_Hash) to damage (Picked unit), dealing 6.00 damage of attack type Magic and damage type Fire
                          • Unit Group - Remove (Picked unit) from AA02_BurnGroup
                      • Hashtable - Save 0.96 as 2 of AA02_IdInteger2 in AA99_Hash
                • Else - Actions
                  • Unit Group - Remove TempUnit from AA02_DummyGroup
                  • Unit - Kill TempUnit
                  • Hashtable - Clear all child hashtables of child AA02_IdInteger2 in AA99_Hash
        • Else - Actions
          • Trigger - Turn off (This trigger)
 
Level 19
Joined
Aug 8, 2007
Messages
2,765
its a channel based ability that has both point and unit targets valid

Anyway, your way overdoing it, ill show you how to do it easier when i get back...
 
Level 6
Joined
Oct 4, 2011
Messages
226
Yea it should work for unit target+point target, although even if a unit is targeted it should have a linear pattern still and not follow the target. Arhowk, thankyou it would be appreciated I solved my location/real problem so it does fly outwards but sometimes glitches and explodes instantly. Here is the recent test map with edited triggers..
 

Attachments

  • HeroMap.w3x
    31.3 KB · Views: 51
Level 37
Joined
Mar 6, 2006
Messages
9,240
Don't remove the stored locations until the spell ends.

  • Hashtable - Save Handle OfTempLocation4 as 6 of AA02_IdInteger in AA99_Hash
  • Custom script: call RemoveLocation(udg_TempLocation4)
^Here for example you remove the location right after storing it, it doesn't exist anymore. If you try to use it, it will default to center of the map.

Make sure you don't remove locations loaded from the hashtable in the looping trigger, if you are going to need them during the next loop.
 
Status
Not open for further replies.
Top