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.
  • The Helper The Helper:
    So what it really is me trying to implement some kind of better site navigation not change the whole theme of the site
  • Varine Varine:
    How can you tell the difference between real traffic and indexing or AI generation bots?
  • The Helper The Helper:
    The bots will show up as users online in the forum software but they do not show up in my stats tracking. I am sure there are bots in the stats but the way alot of the bots treat the site do not show up on the stats
  • Varine Varine:
    I want to build a filtration system for my 3d printer, and that shit is so much more complicated than I thought it would be
  • Varine Varine:
    Apparently ABS emits styrene particulates which can be like .2 micrometers, which idk if the VOC detectors I have can even catch that
  • Varine Varine:
    Anyway I need to get some of those sensors and two air pressure sensors installed before an after the filters, which I need to figure out how to calculate the necessary pressure for and I have yet to find anything that tells me how to actually do that, just the cfm ratings
  • Varine Varine:
    And then I have to set up an arduino board to read those sensors, which I also don't know very much about but I have a whole bunch of crash course things for that
  • Varine Varine:
    These sensors are also a lot more than I thought they would be. Like 5 to 10 each, idk why but I assumed they would be like 2 dollars
  • Varine Varine:
    Another issue I'm learning is that a lot of the air quality sensors don't work at very high ambient temperatures. I'm planning on heating this enclosure to like 60C or so, and that's the upper limit of their functionality
  • Varine Varine:
    Although I don't know if I need to actually actively heat it or just let the plate and hotend bring the ambient temp to whatever it will, but even then I need to figure out an exfiltration for hot air. I think I kind of know what to do but it's still fucking confusing
  • The Helper The Helper:
    Maybe you could find some of that information from AC tech - like how they detect freon and such
  • Varine Varine:
    That's mostly what I've been looking at
  • Varine Varine:
    I don't think I'm dealing with quite the same pressures though, at the very least its a significantly smaller system. For the time being I'm just going to put together a quick scrubby box though and hope it works good enough to not make my house toxic
  • Varine Varine:
    I mean I don't use this enough to pose any significant danger I don't think, but I would still rather not be throwing styrene all over the air
  • The Helper The Helper:
    New dessert added to recipes Southern Pecan Praline Cake https://www.thehelper.net/threads/recipe-southern-pecan-praline-cake.193555/
  • The Helper The Helper:
    Another bot invasion 493 members online most of them bots that do not show up on stats
  • Varine Varine:
    I'm looking at a solid 378 guests, but 3 members. Of which two are me and VSNES. The third is unlisted, which makes me think its a ghost.
    +1
  • The Helper The Helper:
    Some members choose invisibility mode
    +1
  • The Helper The Helper:
    I bitch about Xenforo sometimes but it really is full featured you just have to really know what you are doing to get the most out of it.
  • The Helper The Helper:
    It is just not easy to fix styles and customize but it definitely can be done
  • The Helper The Helper:
    I do know this - xenforo dropped the ball by not keeping the vbulletin reputation comments as a feature. The loss of the Reputation comments data when we switched to Xenforo really was the death knell for the site when it came to all the users that left. I know I missed it so much and I got way less interested in the site when that feature was gone and I run the site.
  • Blackveiled Blackveiled:
    People love rep, lol
    +1
  • The Helper The Helper:
    The recipe today is Sloppy Joe Casserole - one of my faves LOL https://www.thehelper.net/threads/sloppy-joe-casserole-with-manwich.193585/

      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