freezes per every 1 sec cuz of trigger

jarekpl12

TH.net Regular
Reaction score
6
I have a problem... my trigger causes ingame lags because many actions are being triggered per every second... Is there any way to disable these lags? Maybe to add any condition or something? Or you have other ideas... thx



Code:
per sec
    Events
        Time - Every 1.00 seconds of game time
    Conditions
    Actions
        -------- Curse --------
        Unit Group - Pick every unit in (Units in (Playable map area) matching (((Matching unit) has buff Curse ) equal to True)) and do (Actions)
            Loop - Actions
                Unit - Cause WarlockCaster to damage (Picked unit), dealing (0.70 x (Real((Inteligence of WarlockCaster (Include bonuses))))) damage of attack type Spell and damage type Power
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Level of WarlockCaster) more than or equal to 9
                    Then - Actions
                        Set CursePG = (Player group((Owner of WarlockCaster)))
                        Unit - Set life of WarlockCaster to ((Life of WarlockCaster) + (0.14 x (Real((Inteligencja of WarlockCaster (Include bonuses))))))
                        Text - Create floating text that reads (+ + (String((Integer((0.14 x (Real((Intelligence of WarlockCaster (Include bonuses)))))))))) above WarlockCaster with Z offset 0.00, using font size 10.00, color (0.00%, 100.00%, 0.00%), and 0.00% transparency
                        Text - Hide (Last created floating text) for (All players)
                        Text - Show (Last created floating text) for CursePG
                        Text - Set the velocity of (Last created floating text) to 100.00 towards 90.00 degrees
                        Text - Change (Last created floating text): Disable permanence
                        Text - Change the fading age of (Last created floating text) to 0.15 seconds
                        Text - Change the lifespan of (Last created floating text) to 1.50 seconds
                        Custom script:   call DestroyForce (udg_CursePG)
                    Else - Actions
        -------- Soul Burn --------
        Unit Group - Pick every unit in (Units in (Playable map area) matching (((Matching unit) has buff Soul Burn ) equal to True)) and do (Actions)
            Loop - Actions
                Unit - Cause WarlockCaster to damage (Picked unit), dealing (0.31 x (Real((Inteligence of WarlockCaster (Include bonuses))))) damage of attack type Spell and damage type Power
                If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    If - Conditions
                        (Level of WarlockCaster) more than or equal to 9
                    Then - Actions
                        Set SoulBurnPG = (Player group((Owner of WarlockCaster)))
                        Unit - Set life of WarlockCaster to ((Życie of WarlockCaster) + (0.06 x (Real((Intelligence of WarlockCaster (Include bonuses))))))
                        Tekst - Create floating text that reads (+ + (String((Integer((0.06 x (Real((Intelligence of WarlockCaster (Include bonuses)))))))))) above WarlockCaster with Z offset 0.00, using font size 10.00, color (0.00%, 100.00%, 0.00%), and 0.00% transparency
                        Text - Hide (Last created floating text) for (All players)
                        Text - Show (Last created floating text) for SoulBurnPG
                        Text - Set the velocity of (Last created floating text) to 100.00 towards 90.00 degrees
                        Text - Change (Last created floating text): Disable permanence
                        Text - Change the fading age of (Last created floating text) to 0.15 seconds
                        Text - Change the lifespan of (Last created floating text) to 1.50 seconds
                        Custom script:   call DestroyForce (udg_CursePG)
                    Else - Actions
and then some more...
 

Accname

2D-Graphics enthusiast
Reaction score
1,462
That is a really horrible way of doing this and as you already stated you have found out why.

Now, there are numerous ways to improve the performance.
For once you shouldnt pick all units on the map every time.

You should rather preset the groups which you will pick in this trigger.

For example, each time your hero casts a certain dot on a target, add that target to a global unit group.
Then you can iterate through all units in that unit group instead of having to constantly create new unit groups (which, on a sidenote, leak memory as well) but you will already know which units to pick.
Then you check if the unit still has the buff of your dot on it, if it doesnt, remove the unit from the group, otherwise do your dot actions.

What could possibly improve the performance even more is if you merge several of your dots into a single group to handle them.
For example, each time any dot is applied to a unit, you add it to a global dot group.
Then, in your periodic trigger, you only have to iterate through the group once and check separately for which buffs are placed. (you need to check for the buffs anyways because you will want to remove the units from the group if the buffs are not placed anyways)
And then you do the corresponding actions for any of the buffs.

This way you wouldnt need to iterate through X different unit groups every second but only through one unit group.

However, it might not always be the case that this way the performance will be improved because it depends on how often those buffs are placed and how likely it is that the same unit might be hit by multiple different buffs or how many units are on the map at all.

In any case, whenever you use periodic events you should really try to think how much of the actual effects you can do outside of the loop and try to place within a non-periodic trigger, like the management of the dot-ted units.
 

vypur85

Hibernate
Reaction score
803
I believe you should separate out the groups into separate triggers. From the trigger, each of the group represents different ability right? Make the periodic triggers in a way that they will be activated when the specific spell is cast. Don't turn on the trigger blindly and let all the actions run unnecessarily.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top