• 🏆 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] Can't Decrease Spell Instances [ GUI ]

Status
Not open for further replies.
Level 20
Joined
Aug 13, 2013
Messages
1,696
The loop trigger doesn't reduce the active instances of the spell ://///. But stopping the unit is working properly, I wonder why this happen :((((
I add comments so that it is easily to understand my practicing stages in the demo spell ^^.
I attached the test map in the demo stages spell if you want to test it :).
Description:
The caster will release a rock boulder to his position and the rock boulder will move to the target, when the rock boulder hits the target,
It will knockback the target.

  • Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Hashtable - Create a hashtable
      • Set Hashtable = (Last created hashtable)
  • Execution
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to |cff808080Rock Boulder|r [|cffffcc00 R |r]
    • Actions
      • -------- This is just a demo spell --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • instances Equal to 0
        • Then - Actions
          • Trigger - Turn on Loop <gen>
        • Else - Actions
      • -------- increase instances --------
      • Set instances = (instances + 1)
      • -------- caster --------
      • Set Caster = (Triggering unit)
      • -------- target --------
      • Set Target = (Target unit of ability being cast)
      • -------- the position of the caster --------
      • Set casterposition = (Position of Caster)
      • -------- creating missile rock boulder --------
      • Unit - Create 1 Rock Boulder for (Triggering player) at casterposition facing Default building facing degrees
      • Set missile = (Last created unit)
      • -------- the id of rock boulder missile --------
      • Custom script: set udg_ID = GetHandleId ( udg_missile )
      • -------- the datas and values needed when moving missile --------
      • Set range = 25.00
      • Set missilespeed = 13.00
      • Set missiledamage = 150.00
      • Set stage = 1
      • -------- saving datas --------
      • Hashtable - Save Handle OfCaster as 1 of ID in Hashtable
      • Hashtable - Save Handle OfTarget as 2 of ID in Hashtable
      • Hashtable - Save range as 3 of ID in Hashtable
      • Hashtable - Save missilespeed as 4 of ID in Hashtable
      • Hashtable - Save missiledamage as 5 of ID in Hashtable
      • Hashtable - Save stage as 6 of ID in Hashtable
      • -------- adding the missile to the group --------
      • Unit Group - Add missile to Group
      • -------- This debug msg shows in the screen --------
      • Custom script: call BJDebugMsg("instances: " + I2S(udg_instances))
      • -------- remove leaks --------
      • Custom script: call RemoveLocation ( udg_casterposition )

  • Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • -------- This is just a demo spell --------
      • Unit Group - Pick every unit in Group and do (Actions)
        • Loop - Actions
          • Set missile = (Picked unit)
          • Custom script: set udg_ID = GetHandleId ( udg_missile )
          • Set stage = (Load 6 of ID from Hashtable)
          • -------- Stage 1 = Move the missile --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • stage Equal to 1
            • Then - Actions
              • Set Target = (Load 2 of ID in Hashtable)
              • Set missilespeed = (Load 4 of ID from Hashtable)
              • Set missileposition = (Position of missile)
              • Set targetposition = (Position of Target)
              • Set angle = (Angle from missileposition to targetposition)
              • Set movement = (missileposition offset by missilespeed towards angle degrees)
              • Unit - Move missile instantly to movement
              • Set dist = (Distance between missileposition and targetposition)
              • Set range = (Load 3 of ID from Hashtable)
              • -------- When the distance of the missile and target is less than in 50 range then --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • dist Less than or equal to range
                • Then - Actions
                  • Set Caster = (Load 1 of ID in Hashtable)
                  • Set missiledamage = (Load 5 of ID from Hashtable)
                  • -------- damage --------
                  • Unit - Cause Caster to damage Target, dealing missiledamage damage of attack type Spells and damage type Normal
                  • -------- kill the missile --------
                  • Unit - Kill missile
                  • Set kbspeed = 12.00
                  • Set kbangle = (Angle from missileposition to targetposition)
                  • Set maxdist = 400.00
                  • Set kbspeedcounter = 0.00
                  • -------- set the stage of the spell to 2 --------
                  • Set stage = 2
                  • -------- Saving the datas that needed in knockback --------
                  • Hashtable - Save Handle Of(Load 2 of ID in Hashtable) as 2 of ID in Hashtable
                  • Hashtable - Save stage as 6 of ID in Hashtable
                  • Hashtable - Save kbspeed as 7 of ID in Hashtable
                  • Hashtable - Save kbspeedcounter as 8 of ID in Hashtable
                  • Hashtable - Save kbangle as 9 of ID in Hashtable
                  • Hashtable - Save maxdist as 10 of ID in Hashtable
                • Else - Actions
              • Custom script: call RemoveLocation ( udg_missileposition )
              • Custom script: call RemoveLocation ( udg_targetposition )
            • Else - Actions
              • -------- Stage 2 = Knockback the target --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • stage Equal to 2
                • Then - Actions
                  • Set Target = (Load 2 of ID in Hashtable)
                  • Set targetposition = (Position of Target)
                  • Set kbspeedcounter = ((Load 8 of ID from Hashtable) + kbspeed)
                  • Hashtable - Save kbspeedcounter as 8 of ID in Hashtable
                  • Set kbspeed = (Load 7 of ID from Hashtable)
                  • Set kbangle = (Load 9 of ID from Hashtable)
                  • Set kb_offset = (targetposition offset by kbspeed towards kbangle degrees)
                  • Unit - Move Target instantly to kb_offset
                  • Set maxdist = (Load 10 of ID from Hashtable)
                  • -------- This debug msg shows in the screen --------
                  • Custom script: call BJDebugMsg("instances: " + I2S(udg_instances))
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • kbspeedcounter Greater than or equal to maxdist
                    • Then - Actions
                      • -------- The knockback unit can stop when it is reached the max distance but it can't reduce the instances :(( --------
                      • -------- It is weird because the knockbacked unit stops when he reached the max distance but the instances never reduce :// --------
                      • Hashtable - Clear all child hashtables of child ID in Hashtable
                      • -------- remove the unit --------
                      • Unit Group - Remove missile from Group
                      • -------- I reduce the instances --------
                      • Set instances = (instances - 1)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • instances Equal to 0
                        • Then - Actions
                          • -------- This debug msg never shows in the screen --------
                          • Custom script: call BJDebugMsg("Turn Off")
                          • Trigger - Turn off (This trigger)
                        • Else - Actions
                      • -------- This debug msg never shows in the screen --------
                      • Custom script: call BJDebugMsg("instances: " + I2S(udg_instances))
                    • Else - Actions
                  • Custom script: call RemoveLocation ( udg_targetposition )
                • Else - Actions
 

Attachments

  • Practice Stages.w3x
    22 KB · Views: 33
Status
Not open for further replies.
Top