- Joined
- Apr 7, 2008
- Messages
- 1,621
Due a request, I made a spell, where you can shoot.
Now, if I cast this spell 4/5 times, it begins to lag, and after the dummies were cleaned up, it stops lagging.
All leaks should be cleaned up.
(Dummy has locust ability, is visible)
I also made a trigger, where dead dummies were removed after they die.
Hope someone can find the problem source.
Now, if I cast this spell 4/5 times, it begins to lag, and after the dummies were cleaned up, it stops lagging.
-
SS Cast shoot
-
Events
-
Unit - A unit Starts the effect of an ability
-
-
Conditions
-
(Ability being cast) Equal to Shoot
-
-
Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
S_OnOff Equal to False
-
-
Then - Actions
-
Set S_OnOff = True
-
Trigger - Turn on SS Missile Move <gen>
-
-
Else - Actions
-
-
-------- This trigger runs, if you cast the ability 'Shoot' --------
-
-------- This saves the caster in a variable --------
-
Set S_Caster = (Casting unit)
-
-------- This is an Integer, so other triggers can query the bullets. --------
-
Set S_Integer = (S_Integer + 1)
-
-------- This is the radius of the dummy unit. --------
-
Set S_DummyRadius[S_Integer] = 45.00
-
-------- This sets the damage. --------
-
-------- For more hero levels, just copy the if/then/else, and paste it in the else, and change level + damage --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Level of Shoot for S_Caster) Equal to 1
-
-
Then - Actions
-
Set S_Damage[S_Integer] = 50.00
-
Set S_DummySpeed[S_Integer] = 15.00
-
-
Else - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Level of Shoot for S_Caster) Equal to 2
-
-
Then - Actions
-
Set S_Damage[S_Integer] = 100.00
-
Set S_DummySpeed[S_Integer] = 25.00
-
-
Else - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Level of Shoot for S_Caster) Equal to 3
-
-
Then - Actions
-
Set S_Damage[S_Integer] = 150.00
-
Set S_DummySpeed[S_Integer] = 35.00
-
-
Else - Actions
-
-
-
-
-
-
-------- This sets the facing angle of the caster, so the bullet flies with that degrees. --------
-
Set S_Real = (Facing of S_Caster)
-
-------- This sets the point, where the bullet will be created. --------
-
Set S_Point = (Position of S_Caster)
-
-------- The offset. Only, that it doesn't look like the bullet comes out of his body. --------
-
Set S_Point_Offset = (S_Point offset by 50.00 towards S_Real degrees)
-
-------- This creates the bullet at the point. --------
-
Unit - Create 1 Dummy - Shoot for (Owner of S_Caster) at S_Point_Offset facing S_Real degrees
-
-------- This is the 'lifetimer' of the bullet. Now it's on 1.5, that means, the bullet 'dies', if this is equal to 0 (1,5 seconds) --------
-
Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
-
-------- This sets the dummy in a variable. --------
-
Set S_Dummy[S_Integer] = (Last created unit)
-
-------- This increases the flying height of the bullet, so it doesn't fly on the ground. --------
-
Unit - Add Ravenform to S_Dummy[S_Integer]
-
Unit - Remove Ravenform from S_Dummy[S_Integer]
-
Animation - Change S_Dummy[S_Integer] flying height to 70.00 at 0.00
-
Custom script: call RemoveLocation(udg_S_Point)
-
Custom script: call RemoveLocation(udg_S_Point_Offset)
-
-
-
SS Missile Move
-
Events
-
Time - Every 0.03 seconds of game time
-
-
Conditions
-
Actions
-
For each (Integer S_IntegerA) from 1 to S_Integer, do (Actions)
-
Loop - Actions
-
-------- This picks all enemy units in a range of 30. --------
-
Set S_Point = (Position of S_Dummy[S_IntegerA])
-
Set S_Group = (Units within S_DummyRadius[S_IntegerA] of S_Point matching ((((Matching unit) is Dead) Equal to False) and (((Owner of (Matching unit)) is an enemy of (Owner of S_Dummy[S_IntegerA])) Equal to True)))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Number of units in S_Group) Greater than or equal to 1
-
-
Then - Actions
-
Unit Group - Pick every unit in S_Group and do (Actions)
-
Loop - Actions
-
-------- This action deals the damage. --------
-
Unit - Cause S_Dummy[S_IntegerA] to damage (Picked unit), dealing S_Damage[S_IntegerA] damage of attack type Pierce and damage type Universal
-
-------- This removes the dummy bullet from the game --------
-
Unit - Remove S_Dummy[S_IntegerA] from the game
-
-
-
-
Else - Actions
-
-
Custom script: call RemoveLocation(udg_S_Point)
-
Custom script: call DestroyGroup(udg_S_Group)
-
-------- For a faster and better movement --------
-
-------- This picks all bullets on the map. --------
-
-------- The facing, where the bullet has to fly. --------
-
Set S_Real = (Facing of S_Dummy[S_IntegerA])
-
Set S_Point = (Position of S_Dummy[S_IntegerA])
-
-------- The offset. This is the 'movement speed'. --------
-
Set S_Point_Offset = (S_Point offset by 35.00 towards S_Real degrees)
-
-------- Moves the bullet. --------
-
Unit - Move S_Dummy[S_IntegerA] instantly to S_Point_Offset, facing S_Real degrees
-
Custom script: call RemoveLocation(udg_S_Point)
-
Custom script: call RemoveLocation(udg_S_Point_Offset)
-
Set S_Group = (Units of type Dummy - Shoot)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Number of units in S_Group) Equal to 0
-
-
Then - Actions
-
Set S_OnOff = False
-
Trigger - Turn off (This trigger)
-
-
Else - Actions
-
-
Custom script: call DestroyGroup(udg_S_Group)
-
-
-
-
(Dummy has locust ability, is visible)
I also made a trigger, where dead dummies were removed after they die.
Hope someone can find the problem source.