Noob Question about running multiple instant triggers

tommerbob

Minecraft. :D
I can't believe I don't know this yet, but I've been trying to optimize some GUI coding, and up until now I've used different variables for each spell/trigger, even though they may run instantly. I've run into this question:

If I have multiple triggers that all run instantly and simultaneously, and they all use the same Global variable (ex. Temp_Integer), will the data be overwritten or is this okay to do?
 

Weep

Godspeed to the sound of the pounding
It depends if they all run purely in sequence, or if any of them can "interrupt" another trigger.

For example, if all triggers are instant, but one has a damage event, and another trigger causes a unit to deal damage, the first trigger will immediately run "in the middle" of the actions of the second trigger. This can cause a conflict. Otherwise, instant triggers complete their actions before going on to the next one.
 

evilwolf

Member
I can't believe I don't know this yet, but I've been trying to optimize some GUI coding, and up until now I've used different variables for each spell/trigger, even though they may run instantly. I've run into this question:

If I have multiple triggers that all run instantly and simultaneously, and they all use the same Global variable (ex. Temp_Integer), will the data be overwritten or is this okay to do?
The variable will be overwritten by your next action, but it still works.
 

Sevion

The DIY Ninja
It depends if they all run purely in sequence, or if any of them can "interrupt" another trigger.

For example, if all triggers are instant, but one has a damage event, and another trigger causes a unit to deal damage, the first trigger will immediately run "in the middle" of the actions of the second trigger. This can cause a conflict. Otherwise, instant triggers complete their actions before going on to the next one.
IIRC everything is run on a single thread. That means things are run one at a time. So following this, assuming I'm correct, the second trigger shouldn't fire until after the first is finished. I don't know for sure, but it can be easily tested for.
 

tommerbob

Minecraft. :D
It depends if they all run purely in sequence, or if any of them can "interrupt" another trigger.

For example, if all triggers are instant, but one has a damage event, and another trigger causes a unit to deal damage, the first trigger will immediately run "in the middle" of the actions of the second trigger. This can cause a conflict. Otherwise, instant triggers complete their actions before going on to the next one.
I see. Thanks for the clarification.

@evilwolf:

Huh? That seems like a contradiction.
 

Weep

Godspeed to the sound of the pounding
That means things are run one at a time. So following this, assuming I'm correct, the second trigger shouldn't fire until after the first is finished.
Your first assertion is true; the second is not. A trigger can interrupt another; the interrupted trigger's actions will be queued and run after the interrupting trigger completes. Only action runs at a time, just the order changes.
 

Ayanami

칼리
I think a trigger runs like this. Let's say in your trigger you have 3 actions, A, B and C. Normally, it would run like this:

Code:
A -> B -> C
However, let's say you run another trigger called "T" within the trigger. And you run this trigger right after action "A".

Code:
A -> T -> B -> C
I think that's how it runs. So if you were to run another trigger in middle of another executing trigger, rest of the actions of that trigger would execute after the other trigger is completely ran. Could be wrong though.
 

chobibo

Level 1 Crypt Lord
Code:
A -> T -> A -> B -> C
If T was called by a, then T will return to A's thread and not continue on to B. If that (the first example) where so then the sequence would be:

Code:
A -> T -> B -> C -> A
 

chobibo

Level 1 Crypt Lord
Here's a test script:
JASS:

globals
    trigger A=CreateTrigger()
    trigger B=CreateTrigger()
    trigger C=CreateTrigger()
    integer I=0
endglobals

function ActionA takes nothing returns nothing
    set I=0
    call BJDebugMsg("A: "+I2S(I))
    call TriggerExecute(C)
    call BJDebugMsg("A: "+I2S(I))
endfunction

function ActionB takes nothing returns nothing
    call BJDebugMsg("B executed")
endfunction

function ActionC takes nothing returns nothing
    set I=100
    call BJDebugMsg("C executed")
endfunction

//===========================================================================
function InitTrig_thread_test takes nothing returns nothing
    call TriggerAddAction(A,function ActionA)
    call TriggerAddAction(B,function ActionB)
    call TriggerAddAction(C,function ActionC)
    call TriggerExecute(A)
    call TriggerExecute(B)
endfunction
 

Sevion

The DIY Ninja
I wasn't originally talking about using things like [ljass]TriggerExecute[/ljass]. It's obvious that if you use that in that way what'll happen is what you say. (confusing sentence)

I was talking about using events.

I.E.

Unit Dies -> Run Trigger A

Unit Takes Damage -> Run Trigger B

In Trigger A, cause a unit to take damage

I haven't the time right now to test it, but I hypothesize that Trigger A will finish before Trigger B begins.

Someone can test and confirm?
 

Sevion

The DIY Ninja
Tested with this quick script:

Trigger:
  • TestGUI
    • Events
      • Player - Player 1 (Red) skips a cinematic sequence
    • Conditions
    • Actions
      • Game - Display to (All players) the text: 1
      • Unit - Kill Paladin 0004 <gen>
      • Game - Display to (All players) the text: 2


Trigger:
  • TestGUI2
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • Game - Display to (All players) the text: 3


Output was 1, 3, 2

chobibo was right. I stand corrected.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • tom_mai78101 tom_mai78101:
    Make sure you keep checking out my news..
    +2
  • Jesus4Lyf Jesus4Lyf:
    Man, I made this account 15 years ago? Wild. :)
  • Ghan Ghan:
    Seeing J4L is definitely a blast from the past.
  • Jesus4Lyf Jesus4Lyf:
    Oh hey Ghan! Long time. :)
    +1
  • jonas jonas:
    J4L! What has happened in your life
  • Jesus4Lyf Jesus4Lyf:
    Hmm, how to summarize... Moved to the USA and got married. Became a professional software engineer and solution lead. Learning Godot for game dev. :)
  • jonas jonas:
    So you are pursuing game dev as a hobby? What industry is your dayjob in?
  • jonas jonas:
    FAANG?
  • Jesus4Lyf Jesus4Lyf:
    Not quite FAANG, less pay for a less hours/stress. Yeah, game dev as a hobby.
  • jonas jonas:
    makes sense. Do we have a hobby game dev subforum to showcase some work?
  • Blackveiled Blackveiled:
    Happy Thursday
    +1
  • The Helper The Helper:
    Happy Thursday!
  • The Helper The Helper:
    TGIF!
  • The Helper The Helper:
    hey tom_mai please do not archive anymore news
  • Ghan Ghan:
    AMD Ryzen 7000 next week :D
    +1
  • The Helper The Helper:
    noice!
  • tom_mai78101 tom_mai78101:
    "hey tom_mai please do not archive anymore news" ----> Got it. What should we do with the "News Archive" subforum?
  • The Helper The Helper:
    I think leave it for real old news that cannot be sorted the reason we had it in the first place was a server issue that we do not have anymore. I don't want to get rid of the archive just not put anything in it for now until we figure it out more
  • The Helper The Helper:
    The side chat has nothing on the discord. it is not possible but the biggest thing on my wish list right now is a sidechat channel on the disord that hooks up to this...
  • Ghan Ghan:
    I've been selected for the Diablo IV beta.
    +1
  • Ghan Ghan:
    Woo!
    +1
  • The Helper The Helper:
    that is so cool
  • V-SNES V-SNES:
    Eh just noticed the new discord section on the side. Looks great!
    +1
  • Blackveiled Blackveiled:
    :( feels bad I can't ever get selected for any beta I sign up for. It's annoying as heck.
    +1

    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