- Joined
- Sep 9, 2010
- Messages
- 72
I have a problem with a triggered spell, when I use the spell for about 5-6 times it creates lag. I think the problem is the leaks but I'm not good at clearing Leaks even though I read all the tutorials I found.
Triggers:
Can someone take a look and give me some advice please? (or the leak-less versions)
I attached a map with this spell only and it does not lag, I suppose that it lags only on bigger maps.
Triggers:
-
Start Ray
-

Events
-


Unit - A unit Starts the effect of an ability
-
-

Conditions
-


(Ability being cast) Equal to Ray
-
-

Actions
-


Wait 0.10 seconds
-


Unit - Order (Casting unit) to Hold Position
-


Animation - Play (Casting unit)'s attack animation
-


Player - Disable Ray for (Owner of (Casting unit))
-


Unit - Add Cancel to (Casting unit)
-


Player Group - Add (Owner of (Casting unit)) to Ray_Casters
-


Set Ray_Damage[(Player number of (Owner of (Casting unit)))] = 0.00
-


Set Ray_Distance[(Player number of (Owner of (Casting unit)))] = 0.00
-


Set Ray_Caster[(Player number of (Owner of (Casting unit)))] = (Casting unit)
-


Set Ray_Angle[(Player number of (Owner of (Casting unit)))] = (Facing of (Casting unit))
-


Set Ray_Point[(Player number of (Owner of (Casting unit)))] = ((Position of (Casting unit)) offset by 50.00 towards Ray_Angle[(Player number of (Owner of (Casting unit)))] degrees)
-


Set Ray_Timer[(Player number of (Owner of (Casting unit)))] = 0.00
-


Trigger - Turn on Channel Ray <gen>
-
-
-
Channel Ray
-

Events
-


Time - Every 0.05 seconds of game time
-
-

Conditions
-

Actions
-


Player Group - Pick every player in Ray_Casters and do (Actions)
-



Loop - Actions
-




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





If - Conditions
-






Ray_Timer[(Player number of (Picked player))] Greater than or equal to 1.95
-
-





Then - Actions
-






Set Ray_Timer[(Player number of (Owner of (Casting unit)))] = 0.00
-






Player - Enable Ray for (Picked player)
-






Unit - Remove Cancel from Ray_Caster[(Player number of (Picked player))]
-






Trigger - Turn on Effect Ray <gen>
-






Trigger - Turn off (This trigger)
-
-





Else - Actions
-






Set Ray_Timer[(Player number of (Picked player))] = (Ray_Timer[(Player number of (Picked player))] + 0.05)
-






Set Ray_Damage[(Player number of (Picked player))] = (Ray_Damage[(Player number of (Picked player))] + (500.00 x 0.05))
-






Set Ray_Distance[(Player number of (Picked player))] = (Ray_Distance[(Player number of (Picked player))] + (750.00 x 0.05))
-






Unit - Create 1 Ray for (Picked player) at Ray_Point[(Player number of (Picked player))] facing Default building facing degrees
-






Unit - Add a (((Ray_Distance[(Player number of (Picked player))] / 100.00) x 0.08) + 0.10) second Generic expiration timer to (Last created unit)
-
-
-
-
-
-
-
Effect Ray
-

Events
-


Time - Every 0.04 seconds of game time
-
-

Conditions
-

Actions
-


Player Group - Pick every player in Ray_Casters and do (Actions)
-



Loop - Actions
-




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





If - Conditions
-






(Distance between (Position of Ray_Caster[(Player number of (Picked player))]) and Ray_Point[(Player number of (Picked player))]) Greater than or equal to Ray_Distance[(Player number of (Picked player))]
-
-





Then - Actions
-






Player Group - Remove (Picked player) from Ray_Casters
-






Unit Group - Remove all units from Ray_Victims[(Player number of (Picked player))]
-






Custom script: call RemoveLocation (udg_Ray_Point[GetConvertedPlayerId(GetEnumPlayer())])
-






Trigger - Turn off (This trigger)
-
-





Else - Actions
-






Set Ray_Point[(Player number of (Picked player))] = (Ray_Point[(Player number of (Picked player))] offset by 50.00 towards Ray_Angle[(Player number of (Picked player))] degrees)
-






Unit - Create 1 Ray for (Picked player) at Ray_Point[(Player number of (Picked player))] facing Default building facing degrees
-






Unit - Add a (((Ray_Distance[(Player number of (Picked player))] / 100.00) x 0.08) + 0.10) second Generic expiration timer to (Last created unit)
-






Unit Group - Pick every unit in (Units within 150.00 of Ray_Point[(Player number of (Picked player))]) and do (Actions)
-







Loop - Actions
-








Player Group - Pick every player in (All allies of (Owner of Ray_Caster[(Player number of (Picked player))])) and do (Actions)
-









Loop - Actions
-










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











If - Conditions
-












Or - Any (Conditions) are true
-













Conditions
-














(Owner of (Picked unit)) Not equal to (Picked player)
-
-
-
-











Then - Actions
-












Player Group - Pick every player in Ray_Casters and do (Actions)
-













Loop - Actions
-














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















If - Conditions
-
















(Owner of (Picked unit)) Not equal to (Owner of Ray_Caster[(Player number of (Picked player))])
-
















((Picked unit) is in Ray_Victims[(Player number of (Picked player))]) Equal to False
-
-















Then - Actions
-
















Unit - Cause Ray_Caster[(Player number of (Picked player))] to damage (Picked unit), dealing Ray_Damage[(Player number of (Picked player))] damage of attack type Spells and damage type Normal
-
















Unit Group - Add (Picked unit) to Ray_Victims[(Player number of (Picked player))]
-
-















Else - Actions
-
-
-
-
-











Else - Actions
-












Do nothing
-
-
-
-
-
-
-
-
-
-
-
-
I attached a map with this spell only and it does not lag, I suppose that it lags only on bigger maps.
Attachments
Last edited by a moderator:





