• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Boss always crashes.

Status
Not open for further replies.
Level 7
Joined
Jan 17, 2019
Messages
163
I got a boss fight that will 100% always crash the game when playing multiplayer but not when testing it alone. Can you guys peak at the triggers and tell me if something could be causing it? I don't know what it could be everything seems to be in order. I thought maybe it was because I had a unit with the earthquake effect on it but I changed it and it still crashes. Is there a log or something I don't even know what to do about this besides scrap the whole boss and start over.

  • Doomed Dissenter Fight Begins
    • Events
    • Conditions
    • Actions
      • Unit - Set Raidriar 0113 <gen> movement speed to 0.00
      • Unit - Change ownership of Raidriar 0113 <gen> to Player 9 (Gray) and Retain color
      • Unit - Change ownership of Corvus 0314 <gen> to Player 1 (Red) and Change color
      • Selection - Select Corvus 0314 <gen> for Player 1 (Red)
      • Unit - Change ownership of Sir Bryant 0220 <gen> to Player 6 (Orange) and Change color
      • Selection - Select Sir Bryant 0220 <gen> for Player 6 (Orange)
      • Unit - Change ownership of Elena 0092 <gen> to Player 3 (Teal) and Change color
      • Selection - Select Elena 0092 <gen> for Player 3 (Teal)
      • Unit - Change ownership of Duncan 0094 <gen> to Player 5 (Yellow) and Change color
      • Selection - Select Duncan 0094 <gen> for Player 5 (Yellow)
      • Unit - Make Corvus 0314 <gen> Vulnerable
      • Unit - Make Elena 0092 <gen> Vulnerable
      • Unit - Make Sir Bryant 0220 <gen> Vulnerable
      • Unit - Make Duncan 0094 <gen> Vulnerable
      • Trigger - Turn on Doomed Dissenter Attacks Phase 1 <gen>
      • Trigger - Run Move Heretics Into Boss Fight Doomed Dissenter <gen> (ignoring conditions)
      • -------- 0:61 --------
      • Wait 35.00 seconds
      • Trigger - Turn off Doomed Dissenter Attacks Phase 1 <gen>
      • Sound - Play Hunters_Break_the_Chains <gen>
      • Wait 6.00 seconds
      • Game - Display to (All players) the text: |cff8080ffBreak the...
      • Unit - Make Chains of Binding 0370 <gen> Vulnerable
      • Special Effect - Create a special effect attached to the origin of Chains of Binding 0370 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Unit - Make Chains of Binding 0342 <gen> Vulnerable
      • Special Effect - Create a special effect attached to the origin of Chains of Binding 0347 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Unit - Make Chains of Binding 0343 <gen> Vulnerable
      • Special Effect - Create a special effect attached to the origin of Chains of Binding 0343 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Unit - Make Chains of Binding 0347 <gen> Vulnerable
      • Special Effect - Create a special effect attached to the origin of Chains of Binding 0342 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Trigger - Turn on Doomed Dissenter Attacks Phase 2 <gen>
      • Wait 90.00 seconds
      • Special Effect - Create a special effect attached to the origin of Raidriar 0113 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Unit - Make Chains of Binding 0370 <gen> Invulnerable
      • Unit - Make Chains of Binding 0342 <gen> Invulnerable
      • Unit - Make Chains of Binding 0343 <gen> Invulnerable
      • Unit - Make Chains of Binding 0347 <gen> Invulnerable
      • Special Effect - Create a special effect attached to the origin of Seal of Earth (Doomed Dissenter 2) 0295 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Special Effect - Create a special effect attached to the origin of Seal of Scalding (Doomed Dissenter 1) 0253 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Special Effect - Create a special effect attached to the origin of Seal of Water (Doomed Dissenter 2) 0303 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Special Effect - Create a special effect attached to the origin of Seal of Wind (Doomed Dissenter 2) 0199 <gen> using Units\NightElf\Wisp\WispExplode.mdl
      • Special Effect - Destroy (Last created special effect)
      • Trigger - Turn off Doomed Dissenter Attacks Phase 2 <gen>
      • Unit - Change ownership of Raidriar 0113 <gen> to Neutral Passive and Retain color
      • Wait 1.00 seconds
      • Unit - Remove Seal of Scalding (Doomed Dissenter 1) 0253 <gen> from the game
      • Unit - Remove Seal of Wind (Doomed Dissenter 2) 0199 <gen> from the game
      • Unit - Remove Seal of Earth (Doomed Dissenter 2) 0295 <gen> from the game
      • Unit - Remove Seal of Water (Doomed Dissenter 2) 0303 <gen> from the game
      • Destructible - Kill ForceWall 4181 <gen>
      • Destructible - Open Boss Gate (Forbidden Zone) 3244 <gen>
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Chains of Binding 0370 <gen> is dead) Equal to True
          • (Chains of Binding 0347 <gen> is dead) Equal to True
          • (Chains of Binding 0343 <gen> is dead) Equal to True
          • (Chains of Binding 0342 <gen> is dead) Equal to True
        • Then - Actions
          • Trigger - Run Hunters win chains down <gen> (ignoring conditions)
        • Else - Actions
          • Trigger - Run Heretics win chains up <gen> (ignoring conditions)
  • Doomed Dissenter Attacks Phase 1
    • Events
      • Time - Every 5.90 seconds of game time
    • Conditions
    • Actions
      • Set VariableSet DoomedDissenterAttacks[0] = (Random integer number between 1 and 3)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DoomedDissenterAttacks[0] Equal to 1
        • Then - Actions
          • Unit - Order Raidriar 0113 <gen> to Neutral Tinker - Cluster Rockets (Position of (Random unit from LIVINGHunters[0]))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DoomedDissenterAttacks[0] Equal to 2
        • Then - Actions
          • Unit - Order Raidriar 0113 <gen> to Human Blood Mage - Flame Strike (Position of (Random unit from LIVINGHunters[0]))
        • Else - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • DoomedDissenterAttacks[0] Equal to 3
        • Then - Actions
          • Unit - Order Raidriar 0113 <gen> to Neutral - Firebolt (Random unit from LIVINGHunters[0])
        • Else - Actions
Phase 2 attack trigger is the same just every 3.9 seconds instead.
 
Level 25
Joined
Sep 26, 2009
Messages
2,378
I am not 100% sure, but I think the waits may be the cause.
Waits are not accurate. Even if you set "Wait 35.0 seconds", the wait time is actually somewhere around 35.0 seconds and each time the trigger is fired the wait time is different (e.g. 34.6 seconds first time, 35.1 seconds the second time).
I also don't think that the wait time for the given trigger execution is same for all players. Let's say your "Doomed Dissenter Fight Begins" trigger is fired, you get to the 35.0 second wait time. What I think is happening is that Player 1 actually waits 35.25 seconds, while Player 2 waits 34.78 seconds and Player 3 waits 35.1 seconds.
If that is the case, then this may cause desynchronization - for example for one Player the trigger "Doomed Dissenter Attacks Phase 1" is fired sooner than for some other player due to wait time incosistency. And so for one Player the Raidriar casts Cluster Rockets/Flame Strike/Firebolt and damages the target sooner than for other players, causing desync.

At least that's my take on it.
The best thing would be to just use Timer events (e.g. periodic loop) instead of waits to determine how much time has passed and what the boss should be casting.
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,555
Just remove chunks from it bit by bit and keep testing it online.

And try to recall exactly when the crash happens. It could be many things.

Also, you're running other triggers which might contain the source of the crash as well.

I would create a Periodic Interval that runs every 0.10 seconds once the boss fight starts. Use this to keep track of the elapsed time using a Real. Something like Set Time = Time + 0.10, then Display Time to All Players. This way right before the crash you can see just about how much time has elapsed since the boss fight started.

Edit:
Also, if it is the Waits causing the problem, here's a GUI method I've used before to make Timers less of a hassle to work with:
  • Timer Example
    • Events
      • Time - Timer expires
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Timer_Counter Equal to 0
        • Then - Actions
          • -------- Run the first set of Actions --------
          • Set VariableSet Timer_Counter = (Timer_Counter + 1)
          • Countdown Timer - Start Timer as a One-shot timer that will expire in 35.00 seconds
        • Else - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Timer_Counter Equal to 1
            • Then - Actions
              • -------- Run the second set of Actions --------
              • Set VariableSet Timer_Counter = (Timer_Counter + 1)
              • Countdown Timer - Start Timer as a One-shot timer that will expire in 6.00 seconds
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Timer_Counter Equal to 2
                • Then - Actions
                  • -------- Run the third set of Actions --------
                  • Set VariableSet Timer_Counter = (Timer_Counter + 1)
                  • Countdown Timer - Start Timer as a One-shot timer that will expire in 90.00 seconds
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • Timer_Counter Equal to 3
                    • Then - Actions
                      • -------- Run the fourth set of Actions --------
                      • Set VariableSet Timer_Counter = (Timer_Counter + 1)
                      • Countdown Timer - Start Timer as a One-shot timer that will expire in 1.00 seconds
                    • Else - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • Timer_Counter Equal to 4
                        • Then - Actions
                          • -------- Run the fifth set of Actions --------
                        • Else - Actions
So using a timer (Timer), and an integer variable (Timer_Counter), you can avoid having to make multiple timers/triggers.
 
Last edited:
Level 7
Joined
Jan 17, 2019
Messages
163
I want to doubt that the wait trigger is the issue because all my bosses/cinematics are full of them without issue. I know the crash happens randomly after I introduce the new units to the arena. Know any common problems that would cause the existence of a unit to crash the game?
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,555
Select Unit For Player uses GetLocalPlayer(), which could be the issue if it happens the moment you use this action.

And maybe it's because you're trying to select units for Players that might not exist (no active User).
 
Level 7
Joined
Jan 17, 2019
Messages
163
Select Unit For Player uses GetLocalPlayer(), which could be the issue if it happens the moment you use this action.

And maybe it's because you're trying to select units for Players that might not exist (no active User).

Oh damn there is most def non-existent players selecting units at once. I'll try tweaking it. That said, I have the same mechanic on all the other bosses no problem :\
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,555
Yeah, I can't say anything for certain. GetLocalPlayer() is usually the cause of desyncs, but if you're just experiencing crashes then I don't know. The only crashes I've ever produced had to do with infinite loops.

Maybe check to see if you have anything of that nature.
 
Level 7
Joined
Jan 17, 2019
Messages
163
Yeah infinite loops and special effects are something I've experienced before but this fight doesnt have any. It's just a boss casting random spells at random players and 4 units spawned for the enemy team to help the boss. I'm very confused why it doesnt happen in single player. It's def not a desync it's a straight up crash to desktop.
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,555
Oh yeah, that's so odd. If it only happens online then you'd think it was a desync. Maybe it has to do with the other players. Idk, have you tried removing chunks of it and testing yet? Perhaps try removing all of the special effects first to see if it's one of their models. Then try removing the Abilities that the boss casts, etc...
 
Status
Not open for further replies.
Top