- 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.
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)
-
Events
-
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
-
If - Conditions
- -------- 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 )
-
Events
-
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
-
If - Conditions
- 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
-
If - Conditions
- -------- This debug msg never shows in the screen --------
- Custom script: call BJDebugMsg("instances: " + I2S(udg_instances))
- Else - Actions
-
If - Conditions
- Custom script: call RemoveLocation ( udg_targetposition )
- Else - Actions
-
If - Conditions
-
If - Conditions
-
Loop - Actions
-
Events