neckface
terrain contest winner! :) dance contest loser. :(
- Reaction score
- 34
Hey yall.
I need some help with lag/leak identification for a custom GUI spell.
Circle of Protection from Evil:
Channeled ultimate ability for my priestess. Two levels, based off starfall. Creates a circle of 600 diameter. Any enemy unit entering the circle gets its armor debuffed and small damage (via starfall) per 2 seconds. Any ally in the circle gets an armor buff and healed every 2 seconds. The eye candy is a special effect that travels around the perimeter of the circle to demarcate it (im sure this is where my leaks are)...
Submitted for your wisdom and input:
First code:
So we set up the dummy units to buff and debuff. Next, the periodic triggers:
The unit group leaks, correct? How to fix it?
*I made a dummy unit out of the special effect for heal, because if you create a heal special effect and destroy it without a wait, nothing happens (and no waits allowed in loops).
Next, creating the Circle:
Looks great, but Im sure it has issues...
Finally, ending the spell:
I included those small waits because this spell lags for a sec when it ends (they didn't help, incidentially). Curiously this spell, and 1 or 2 other spells of mine, lag only the first time they are cast, then afterwards fuction without lag....
Please help me fix this spell up... it's my best, most original one so far.
I have plenty of <3 and rep to share!
~neckface
I need some help with lag/leak identification for a custom GUI spell.
Circle of Protection from Evil:
Channeled ultimate ability for my priestess. Two levels, based off starfall. Creates a circle of 600 diameter. Any enemy unit entering the circle gets its armor debuffed and small damage (via starfall) per 2 seconds. Any ally in the circle gets an armor buff and healed every 2 seconds. The eye candy is a special effect that travels around the perimeter of the circle to demarcate it (im sure this is where my leaks are)...
Submitted for your wisdom and input:
First code:
Code:
CircleOfProtection
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to Circle of Protection From Evil
Actions
Trigger - Turn on CircleOfProtection Periodic Allies <gen>
Trigger - Turn on CircleOfProtection Special Effects <gen>
Set copeCaster = (Triggering unit)
Set copeLoc = (Position of copeCaster)
-------- - --------
Unit - Create 1 DummyUnit for Player 1 (Red) at copeLoc facing 270.00 degrees
Set copeBuffer = (Last created unit)
Unit - Add copeBuff to copeBuffer
Unit - Set level of copeBuff for copeBuffer to (Level of PCircle of Protection From Evil for (Triggering unit))
Unit - Create 1 DummyUnit for Player 1 (Red) at copeLoc facing 270.00 degrees
Set copeDebuffer = (Last created unit)
Unit - Add copeDebuff to copeDebuffer
Unit - Set level of copeDebuff for copeDebuffer to (Level of Circle of Protection From Evil for (Triggering unit))
-------- - --------
Custom script: call RemoveLocation (udg_copeLoc)
So we set up the dummy units to buff and debuff. Next, the periodic triggers:
Code:
CircleOfProtection Periodic Allies
Events
Time - Every 2.00 seconds of game time
Conditions
Actions
Unit Group - Pick every unit in (Units within 600.00 of (Position of copeCaster) matching ((((Matching unit) belongs to an ally of Player 1 (Red)) Equal to True) and ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is Mechanical) Equal to False) and (((Matching unit and do (Actions)
Loop - Actions
Set tempPoint = (Position of (Picked unit))
Unit - Create 1 Dummy showHeal for Player 1 (Red) at tempPoint facing Default building facing degrees [COLOR="Red"]//*see note[/COLOR]
Unit - Add a 1.83 second Generic expiration timer to (Last created unit)
Unit - Set life of (Picked unit) to ((Life of (Picked unit)) + (40.00 + (Real(((Level of Circle of Protection From Evil for copeCaster) x 10)))))
Custom script: call RemoveLocation (udg_tempPoint)
*I made a dummy unit out of the special effect for heal, because if you create a heal special effect and destroy it without a wait, nothing happens (and no waits allowed in loops).
Next, creating the Circle:
Code:
CircleOfProtection Special Effects
Events
Time - Every 0.05 seconds of game time
Conditions
Actions
Set copeLoc = (Position of copeCaster)
Unit - Create 1 DummyCoPeSFX for Player 1 (Red) at (copeLoc offset by 600.00 towards copeDeg degrees) facing Default building facing degrees
Set copeDeg = (copeDeg + 8.00)
Unit Group - Add (Last created unit) to copeGroup
Custom script: call RemoveLocation (udg_copeLoc)
Finally, ending the spell:
Code:
CircleOfProtection Stop
Events
Unit - A unit Stops casting an ability
Conditions
(Ability being cast) Equal to Circle of Protection From Evil
Actions
Trigger - Turn off CircleOfProtection Periodic Allies <gen>
Wait 0.10 seconds
Trigger - Turn off CircleOfProtection Special Effects <gen>
Unit - Remove copeBuffer from the game
Unit - Remove copeDebuffer from the game
Wait 0.10 seconds
Unit Group - Pick every unit in copeGroup and do (Unit - Remove (Picked unit) from the game)
Custom script: call DestroyGroup (udg_copeGroup)
Please help me fix this spell up... it's my best, most original one so far.
I have plenty of <3 and rep to share!
~neckface