Need an expert to solve a problem involving desynchronization.

Taishaku

New Member
Reaction score
9
So I am the maker of a map called Wintermaul Redux, a ground-up remake of the original Wintermaul.

You can get a protected copy here:
http://world-editor-tutorials.thehelper.net/maps.php?view=1315

My map, by all accounts, been a successful and rather popular map. However, the map has had an issue with desynchronization for quite some time now, leading to mass disconnects when the first spawn occurs or shortly after the first spawn.

The problem occurs inconsistently; but generally, when they start, they persist in the subsequent games.

I would like for someone with expertise in such matters to assist me in looking over my triggers and finding what is wrong.

If you are interested, PM or reply with your email, and I will email you the unprotected map. I personally don't want multiple unprotected copies of my map floating around the internet.



Details:
-Desynchronization always occurs on the very first spawn, either immediately after the units are created or a few seconds after.
-There are no local player variables as far as I know.
-There are no pan camera variables either.
-There are a few persisting variables that may be considered leaks, but they are necessary for pathing; leaks don't cause splits anyhow.
-All other leaks are removed and this is verified by Leak Check v3.1.
-The map was protected using WC3 Optimizer.
 

Mittsies

New Member
Reaction score
24
It's virtually impossible for me to figure out why your map could desync without being able to look at the triggers themselves. There are several reasons why this could be happening; but my best guess is that you should spawn less units at once. I'm familiar with Wintermaul games, and each wave composes of several hundred units that are all given an order to move somewhere -- which could be a heavy load on the engine.

Try spawning only 1/5th of the creeps you are currently creating and see if there is a difference. If this is the case, you can use a timer to spawn creeps in smaller groups. For instance, instead of spawning 25 creeps all at once: every 1 second -- spawn 5 creeps, and repeat this 5 times.
 

Taishaku

New Member
Reaction score
9
@Mittsies
Hence why I said you should let me email you my map. ^^

And I only have three spawns. 90 units per level, in 6 waves of 15.
 

Mittsies

New Member
Reaction score
24
Sorry, I skimmed and didn't see that you were offering an unprotected map. Either way I recommend you try spawning less units just as a test. Instead of 90, in 6 waves of 15 -- try --, 12, in 6 waves of 2.

edit: lawl we have the same post count.
 

Taishaku

New Member
Reaction score
9
@Mittsies
I only have 2, and we rarely get it to split. xD

Errr... here's the new trigger:

Code:
Create Units
    Events
    Conditions
    Actions
        Set Point = (Center of Left Spawn L <gen>)
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Custom script:   call RemoveLocation(udg_Point)
        Set Point = (Center of Left Spawn R <gen>)
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Custom script:   call RemoveLocation(udg_Point)
        Set Point = (Center of Right Spawn L <gen>)
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Custom script:   call RemoveLocation(udg_Point)
        Set Point = (Center of Right Spawn R <gen>)
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Custom script:   call RemoveLocation(udg_Point)
        Set Point = (Center of Middle Spawn L <gen>)
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Custom script:   call RemoveLocation(udg_Point)
        Set Point = (Center of Middle Spawn R <gen>)
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Unit - Create 5 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
        Custom script:   call RemoveLocation(udg_Point)
        -------- Display Level Info --------
        Set String = (Name of (Last created unit))
        Game - Display to (All players) the text: (Level  + String)

It's run by another trigger. Before, it was:

Code:
        Unit - Create 15 Spawn_Type[Level] for Player 12 (Brown) at Point facing Default building facing degrees
 

Mittsies

New Member
Reaction score
24
I meant something more along the lines of spawning a few, then waiting 1 second, then another group, then waiting 1 second, etc.; but instead of using wait, use a timer. This is doing nothing more than splitting up 15 into 3 immediate groups of 5 -- which is genuinely changing nothing.
 

xxxtrickyxxx

(o Y o)
Reaction score
64
try creating one unit for player 12 with an integer loop. i dont understand why you are creating 5 at once 3 times, just make a 1-15 loop that creates one unit at the location.

so something like

for each integer a 1-15
-create unit at loc

remove loc script
 

AdventCore

New Member
Reaction score
2
I meant something more along the lines of spawning a few, then waiting 1 second, then another group, then waiting 1 second, etc.; but instead of using wait, use a timer. This is doing nothing more than splitting up 15 into 3 immediate groups of 5 -- which is genuinely changing nothing.

Spawning, say, 100 units at once will not make you de-sync but it will make you lag horribly. I'm sorry Tai but I'm no master on this so I cannot help you other than saying that it has nothing to do with the units spawning, directly. It could be indirectly related, however. Good luck in any case.
 

Taishaku

New Member
Reaction score
9
I agree with AdventCore. I do not believe a mass spawning of 90 units would case a desynchronization. It doesn't in normal Wintermaul games, and it shouldn't here.
 

Andrewgosu

The Silent Pandaren Helper
Reaction score
716
I suggest you to at least try the spawn-wait-spawn method instead of spawning them all at once.

I've been disconnected from games that mass-spawn and I'm guessing it's not because of desynchronization, but of lag, though I cannot be really certain because I don't know how the triggers were built up.
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
Use Jass to fix tis prob. If you already use Jass, pls improve your script as much as possible. Dun use mass of createunit function at same time. You should use "every X seconds" to spam creeps. If you really dunno to fix it, i can giv u a helping hand....
 

Taishaku

New Member
Reaction score
9
I do not want to spawn units in a line and I do not want it to take more than one second to spawn all of the units.

Anyhow, I fail to see how Waits would make the situation better.
 

Taishaku

New Member
Reaction score
9
Is it possible to GetLocalPlayer() desynch in GUI?

As stated in the title.

And if you can get a GetLocalPlayer() desynch error from GUI, what would the trigger look like?
 

lindenkron

You can change this now in User CP
Reaction score
102
I was told that:
Trigger:
  • GoldBounty
    • Events
      • Unit - A unit Dies
    • Conditions
      • ((Killing unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True
      • Or - Any (Conditions) are true
        • Conditions
          • (Unit-type of (Killing unit)) Equal to Wolf
          • (Unit-type of (Killing unit)) Equal to Spirit Wolf
    • Actions
      • Set BountyInt = 0
      • Set Player = (Owner of (Killing unit))
      • Set BountyInt = ((GoldBounty x (Point-value of (Triggering unit))) + (Level of (Killing unit)))
      • Player - Add BountyInt to (Owner of (Killing unit)) Current gold
      • Custom script: if GetLocalPlayer() == udg_Player then
      • Floating Text - Create floating text that reads (String(BountyInt)) above (Triggering unit) with Z offset 0.00, using font size 8.00, color (100.00%, 80.00%, 0.00%), and 0.00% transparency
      • Floating Text - Change (Last created floating text): Disable permanence
      • Floating Text - Change the fading age of (Last created floating text) to 0.50 seconds
      • Floating Text - Change the lifespan of (Last created floating text) to 2.00 seconds
      • Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
      • Custom script: endif

Would not desync.

But:
Trigger:
  • GoldBounty
    • Events
      • Unit - A unit Dies
    • Conditions
      • ((Killing unit) belongs to an enemy of (Owner of (Triggering unit))) Equal to True
      • Or - Any (Conditions) are true
        • Conditions
          • (Unit-type of (Killing unit)) Equal to Wolf
          • (Unit-type of (Killing unit)) Equal to Spirit Wolf
    • Actions
      • Custom script: if GetLocalPlayer() == udg_Player then
      • Set BountyInt = 0
      • Set Player = (Owner of (Killing unit))
      • Set BountyInt = ((GoldBounty x (Point-value of (Triggering unit))) + (Level of (Killing unit)))
      • Player - Add BountyInt to (Owner of (Killing unit)) Current gold
      • Floating Text - Create floating text that reads (String(BountyInt)) above (Triggering unit) with Z offset 0.00, using font size 8.00, color (100.00%, 80.00%, 0.00%), and 0.00% transparency
      • Floating Text - Change (Last created floating text): Disable permanence
      • Floating Text - Change the fading age of (Last created floating text) to 0.50 seconds
      • Floating Text - Change the lifespan of (Last created floating text) to 2.00 seconds
      • Floating Text - Set the velocity of (Last created floating text) to 64.00 towards 90.00 degrees
      • Custom script: endif

would desync. Dunno if it's true though, I'm not tasking chances :D I made it the first way.
 

Azlier

Old World Ghost
Reaction score
461
You want a trigger that desyncs in GUI? Very well.

Trigger:
  • Untitled Trigger 001
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Custom script: if GetLocalPlayer() == Player(15) then
      • Item - Create Tome of Experience at (Center of (Playable map area))
      • Custom script: endif


Pan Camera as Necessary also desync. Blizzard was very careless making that. I have a desyncless version, but no one ever really needs Pan Camera as Necessary.
 

Taishaku

New Member
Reaction score
9
@azlier and lindenkron
Hahaha, I was asking if it were possible to get a GetLocalPlayer() desynch using only GUI. No custom script. xD
 

Azlier

Old World Ghost
Reaction score
461
Ah. I misread, then. Still, Jass is Jass. GUI is just an interface for Jass that teaches bad coding habits.

Trigger:
  • Untitled Trigger 001
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Camera - Pan camera as necessary for Player 1 (Red) to (Center of (Playable map area)) over 0.50 seconds
 

Taishaku

New Member
Reaction score
9
@azlier
I know how Pan Camera does it in GUI. I heard GetLocalPlayer() is the other big one. My map desynchs, and is made entirely out of GUI, so I'm trying to figure out why.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Still lurking
    +3
  • The Helper The Helper:
    I am great and it is fantastic to see you my friend!
    +1
  • The Helper The Helper:
    If you are new to the site please check out the Recipe and Food Forum https://www.thehelper.net/forums/recipes-and-food.220/
  • Monovertex Monovertex:
    How come you're so into recipes lately? Never saw this much interest in this topic in the old days of TH.net
  • Monovertex Monovertex:
    Hmm, how do I change my signature?
  • tom_mai78101 tom_mai78101:
    Signatures can be edit in your account profile. As for the old stuffs, I'm thinking it's because Blizzard is now under Microsoft, and because of Microsoft Xbox going the way it is, it's dreadful.
  • The Helper The Helper:
    I am not big on the recipes I am just promoting them - I use the site as a practice place promoting stuff
    +2
  • Monovertex Monovertex:
    @tom_mai78101 I must be blind. If I go on my profile I don't see any area to edit the signature; If I go to account details (settings) I don't see any signature area either.
  • The Helper The Helper:
    You can get there if you click the bell icon (alerts) and choose preferences from the bottom, signature will be in the menu on the left there https://www.thehelper.net/account/preferences
  • The Helper The Helper:
    I think I need to split the Sci/Tech news forum into 2 one for Science and one for Tech but I am hating all the moving of posts I would have to do
  • The Helper The Helper:
    What is up Old Mountain Shadow?
  • The Helper The Helper:
    Happy Thursday!
    +1
  • Varine Varine:
    Crazy how much 3d printing has come in the last few years. Sad that it's not as easily modifiable though
  • Varine Varine:
    I bought an Ender 3 during the pandemic and tinkered with it all the time. Just bought a Sovol, not as easy. I'm trying to make it use a different nozzle because I have a fuck ton of Volcanos, and they use what is basically a modified volcano that is just a smidge longer, and almost every part on this thing needs to be redone to make it work
  • Varine Varine:
    Luckily I have a 3d printer for that, I guess. But it's ridiculous. The regular volcanos are 21mm, these Sovol versions are about 23.5mm
  • Varine Varine:
    So, 2.5mm longer. But the thing that measures the bed is about 1.5mm above the nozzle, so if I swap it with a volcano then I'm 1mm behind it. So cool, new bracket to swap that, but THEN the fan shroud to direct air at the part is ALSO going to be .5mm to low, and so I need to redo that, but by doing that it is a little bit off where it should be blowing and it's throwing it at the heating block instead of the part, and fuck man
  • Varine Varine:
    I didn't realize they designed this entire thing to NOT be modded. I would have just got a fucking Bambu if I knew that, the whole point was I could fuck with this. And no one else makes shit for Sovol so I have to go through them, and they have... interesting pricing models. So I have a new extruder altogether that I'm taking apart and going to just design a whole new one to use my nozzles. Dumb design.
  • Varine Varine:
    Can't just buy a new heatblock, you need to get a whole hotend - so block, heater cartridge, thermistor, heatbreak, and nozzle. And they put this fucking paste in there so I can't take the thermistor or cartridge out with any ease, that's 30 dollars. Or you can get the whole extrudor with the direct driver AND that heatblock for like 50, but you still can't get any of it to come apart
  • Varine Varine:
    Partsbuilt has individual parts I found but they're expensive. I think I can get bits swapped around and make this work with generic shit though
  • Ghan Ghan:
    Heard Houston got hit pretty bad by storms last night. Hope all is well with TH.
  • The Helper The Helper:
    Power back on finally - all is good here no damage
    +2
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    New recipe is another summer dessert Berry and Peach Cheesecake - https://www.thehelper.net/threads/recipe-berry-and-peach-cheesecake.194169/

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top