• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Desync prob..

Status
Not open for further replies.
Level 13
Joined
Mar 24, 2010
Messages
950
If you issue an order for a unit building to upgrade to something but it cant because it doesnt have that to upgrade too that doesnt hurt anything right?

I have a trigger that runs a upgrade loop for computer players every 3 mins and 3x9=27
And every game almost at about 27mins into the game (27-27:45ish) it desyncs and lags a person or 2 out..

Theres also another trigger that runs at about this time that does nothing more than upgrade some attack and defense upgrades and gives a hero an item. Theres no unitgroups used and 0 leaks. So this trigger should have nothing to do it.
All the triggers have no flaws so i have 0 idea what could be causeing this desync at 27mins every game..

give any thoughts/advice u can think of. :)
 
Level 13
Joined
Mar 24, 2010
Messages
950
yeah its very odd that it would be that.. and even more so that it would only affect it on the 9th time it ran..and not sooner.. and it doesnt do anything again after that.. only at 27ish mins in..
like i said there is 1 other trigger that runs about that time but a little after 27min mark
but it also has no issues.

the game has 0 probs when these arnt on but when these triggers are on is when it happens at the 27min mark. So at least its limited down to that..

I'm gonna do a test and let you know the results. im gonna try and narrow it down to 1 of those 2 options.. and then when i think i know which one it has to be i'll show it, getting late tho not sure if it will be very soon or tomorrow when i wake up
 
Level 13
Joined
Mar 24, 2010
Messages
950
It just runs every 180sec to run checks if a player has enough gold for the upgrade then order the unit to do it. pretty simple. i cant only run it 9 times becuz different players get diff gold at diff times it needs to always be running till the game ends. So Magtheridon96'sway isnt an option. Also i dont think it has anything to do with that now..

I think it has to do with this trigger. which make 0 sense.

  • Upgarde 16
    • Events
      • Time - Elapsed game time is 1647.00 seconds
    • Conditions
    • Actions
      • Trigger - Turn off (This trigger)
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) controller) Equal to Computer
              • ((Player((Integer A))) slot status) Equal to Is playing
              • (Melee AI of (Player((Integer A)))) Not equal to Easy AI
            • Then - Actions
              • Player - Set the current research level of Iron Forged Weapons to 16 for (Player((Integer A)))
              • Player - Set the current research level of Iron Plating to 16 for (Player((Integer A)))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (AI_1stHero[(Integer A)] is alive) Equal to True
                • Then - Actions
                  • Hero - Create LightSpeed Shoes and give it to AI_1stHero[(Integer A)]
                  • Item - Make (Last created item) Undroppable
                • Else - Actions
            • Else - Actions
this is the first time are where it desyncs ppl this trigger looks fine to me just checking for comps and upgrading their att/def and giving the computers only hero a item if its alive.. no idea why this would cause a desync..

I tested the game with this one off and it didnt desync at 27 mins anymore it then did around 29-30ish mins which is where the trigger just like this one happens "Upgrade 17" yet Upgrade 1-15 are also just like this and no desync
 

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,258
Remember that some splits are caused by bad clients.
If a client plays a different map that has been subject to the widgitizer tool and then plays your map without restarting the client he will split.
If a client is using a different opperating system type such that windows and mac clients are playing the same session various game engine inconsistancies can cause a split.

As for your script...
((Player((Integer A))) controller) Equal to Computer
((Player((Integer A))) slot status) Equal to Is playing
(Melee AI of (Player((Integer A)))) Not equal to Easy AI
All this filtering each itteration wastes time, espcially if the filter is reused in other parts of your script (which also introduces procedural coupling). Run the filtering once for each player at map initialization and add all the resulting players to a force which you then enum through in situations like this.

Debug the script to find what line is causing the split. A good place to start would be to remove all calls that have an effect on the playfield of the session. This would then prove/disprove that your conditions are the cause. Then you can run 1 line at a time till you find the cause.

You may wish to also try altering the time the script runs at. It would be much easier to debug if the results can be recreated at 1-3 minutes in a game session than after 27 minutes.
 
Level 13
Joined
Mar 24, 2010
Messages
950
ok it still happens exactly at like 27mins so im sure its not that trig i posted above.. its the upgrading trigger im pretty sure..

i hear a few things.. waits can sometimes happen at diff times on bnet so that can cause a desync and its better to use game-time waits rather than normal waits right?

Also having many time elapsed events can be bad and maybe cause them so maybed having the first event and have the rest happen off timers is better.. like first one is time elapsed event and then that 1 starts a timer than the next one triggers on and that one starts a timer the next one triggers on etc..

what are your thoughts for that?

ref:
http://www.thehelper.net/forums/archive/index.php/t-47999.html
 
Level 5
Joined
Jul 27, 2009
Messages
22
I tested the game with this one off and it didnt desync at 27 mins anymore it then did around 29-30ish mins which is where the trigger just like this one happens "Upgrade 17"
This really indicates that there is a limit to the amount of pre-loaded timers as your "the-helper.net" link says.
So I would merge all these upgrade triggers to one trigger and make the amount of time between the upgrades dynamic. Put the desired reals(time amounts) in an Array or so.

Also you can speedtest the limit theory by simply run these triggers every 5, 10, 15sec. So after 1min your at upgrade 16 already.
 

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,258
Just turn off triggers till the desync stops. Then shut down lines of code in that piece of script till the desync stops and then finally analise the resuling lines of script causing the desync. This should be easy if it really is as predictable as you say.
 
Level 13
Joined
Mar 24, 2010
Messages
950
well what makes me think now that its the upgrade base trigger that runs every 3 mins is becuz yesterday someone desyncs at 18 mins and i have nothing that runs even close to 18 mins, aside from that upgrade trigger. and when i tunred off that upgrade 16 and it happened at the next one i forgot i run the upgrade trigger there before i do something else lol. so it probably is that every 3min upgrade check.

I thought of a few things im gonna do to fix it and see if its good, i'll test it today and be back
 
Level 13
Joined
Mar 24, 2010
Messages
950
now its worse.. it happened at 24mins and again at 30mins in. its for sure the upgrade trigger..

[ GAME: CHF 3.8A BETA -AI] (24:14) [Team: 1] [Allies] [LoLBlade]: farrrk look my gold
[ GAME: CHF 3.8A BETA -AI] desync detected
[ GAME: CHF 3.8A BETA -AI] [Local]: Warning! Desync detected!
[ GAME: CHF 3.8A BETA -AI] [Local]: Players in game state #1: najja
[ GAME: CHF 3.8A BETA -AI] [Local]: Players in game state #2: LoLBlade, ltSoVeR9000, Bond009, SOUNDWAVES, Naaru
[ GAME: CHF 3.8A BETA -AI] kicking desynced players
[ GAME: CHF 3.8A BETA -AI] deleting player [najja]: was dropped due to desync
[ GAME: CHF 3.8A BETA -AI] [Local]: najja was dropped due to desync.

[ GAME: CHF 3.8A BETA -AI] Dynamic latency at 120% = 180 ms=150+30 sync=25.0% - LoLBlade
[ GAME: CHF 3.8A BETA -AI] (24:33) [Team: 1] [Allies] [LoLBlade]: omg
[ GAME: CHF 3.8A BETA -AI] (24:35) [Team: 1] [Allies] [LoLBlade]: -gold pink
[ GAME: CHF 3.8A BETA -AI] (24:36) [Team: 3] [Allies] [SOUNDWAVES]: -time
[ GAME: CHF 3.8A BETA -AI] (24:41) [Team: 1] [Allies] [Bond009]: -time
[ GAME: CHF 3.8A BETA -AI] (24:46) [Team: 1] [Allies] [Bond009]: what time was it??
[ GAME: CHF 3.8A BETA -AI] (24:49) [Team: 1] [Allies] [LoLBlade]: ima get altar
[ GAME: CHF 3.8A BETA -AI] (24:49) [Team: 1] [Allies] [Bond009]: 24...??
[ GAME: CHF 3.8A BETA -AI] (24:51) [Team: 3] [Allies] [SOUNDWAVES]: 24:09

[ GAME: CHF 3.8A BETA -AI] (24:52) [Team: 1] [Allies] [LoLBlade]: 5k plz
[ GAME: CHF 3.8A BETA -AI] (24:52) [Team: 1] [Allies] [Bond009]: WOW

notice how the game time was about 24mins on the dot while the bot said game time was like 24:30

this isnt the desync but it still kicked him out at almost exactly 30mins

[ GAME: CHF 3.8A BETA -AI] (30:46) [Team: 1] [Allies] [Bond009]: lo why?
[ BNET: USEast] user [ClanHPMM] joined channel Clan HPMM
[ BNET: USEast] user [Assasin-BOT] joined channel Clan HPMM
[ BNET: USEast] user [Assasin-BOT] leaves channel Clan HPMM
[ TCPSOCKET] error (recv) - ECONNRESET
[ GAME: CHF 3.8A BETA -AI] deleting player [Naaru]: has lost the connection (connection error - ECONNRESET)
[ GAME: CHF 3.8A BETA -AI] [Local]: Naaru has lost the connection (connection error - ECONNRESET).
[ GAME: CHF 3.8A BETA -AI] (30:51) [Team: 1] [Allies] [LoLBlade]: -gold pink
[ GAME: CHF 3.8A BETA -AI] (30:52) [Team: 1] [Allies] [Bond009]: -time



i just added the comps to a perm group and also changed how they teched to the next tier randomly

i dont get why this would cause desync unless it has a problem with the wait which i would doubt -.-
 
Last edited:

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,258
(connection error - ECONNRESET)
That has nothing to do with a desync. That is caused by eithor has game client crashing, or him losing connectivity (internet crashed / system crash).

A desync is like...
[ GAME: CHF 3.8A BETA -AI] [Local]: Players in game state #1: najja
[ GAME: CHF 3.8A BETA -AI] [Local]: Players in game state #2: LoLBlade, ltSoVeR9000, Bond009, SOUNDWAVES, Naaru
Where the server intentionally drops 1 or more players from the main session because their session no longer matches what is happening in other player's sessions of what is meant to all be the same session.

As I said, this can be caused by people forgetting to restart WC3 after playing a widgitized map, playing on a poor internet connection (where packets can get curropted and pass error checking) or even just internal client differences between Mac and Windows versions of WC3. Common trigger causes are stupid use of GetLocalPlayer which returns an asyncrnious result, use of natives returning a localized string such as AI player name or unit name without initializing a string for all clients to all possible localized values or even some stupid random JASS interpreter bugs no one documents that spontaniously cause desyncs (such as some high strain scripts are known to result in them from time to time).
 
Level 13
Joined
Mar 24, 2010
Messages
950
i took your advice and instead of 1-12 intA loops put into comps only group.. but i want u to see this..
This could also maybe be the cause by i would honestly be shocked since it doesn't do it for any of the other upgrades ever and they all do about the same stuff. if you make it past 24-30 mins of game time it will not desync


These are the times in secs it goes off the 2nd numbers are the timer values i use now instead of all Time - Elapsed game time events.
13= 1145 timer170 (19mins)ingame
14= 1325 timer180 (22mins)ingame
15= 1460 timer135 (new upgrade i just added which might be why it desyncs at 24 mins now) (24.3mins)in-game time it triggers
16= 1647 timer187 (was 322) (27.45mins)ingame
17= 1818 timer171 (30.3mins)ingame

i use to not have the wait in there before turning the next trigger on and starting a new timer.. but that didnt work becuz it happened too fast and they all triggered at once


  • Upgarde 15
    • Events
      • Time - AI_Upgrade_Timer expires
    • Conditions
    • Actions
      • Trigger - Turn off (This trigger)
      • Player Group - Pick every player in AI_CompsGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Melee AI of (Picked player)) Not equal to Easy AI
            • Then - Actions
              • Player - Set the current research level of Iron Forged Weapons to 15 for (Picked player)
              • Player - Set the current research level of Iron Plating to 15 for (Picked player)
            • Else - Actions
      • Wait 0.10 game-time seconds
      • Countdown Timer - Start AI_Upgrade_Timer as a One-shot timer that will expire in 187.00 seconds
      • Trigger - Turn on Upgarde 16 <gen>


  • Upgarde 16
    • Events
      • Time - AI_Upgrade_Timer expires
    • Conditions
    • Actions
      • Trigger - Turn off (This trigger)
      • Player Group - Pick every player in AI_CompsGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Melee AI of (Picked player)) Not equal to Easy AI
            • Then - Actions
              • Player - Set the current research level of Iron Forged Weapons to 16 for (Picked player)
              • Player - Set the current research level of Iron Plating to 16 for (Picked player)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (AI_1stHero[(Player number of (Picked player))] is alive) Equal to True
                • Then - Actions
                  • Hero - Create LightSpeed Shoes and give it to AI_1stHero[(Player number of (Picked player))]
                  • Item - Make (Last created item) Undroppable
                • Else - Actions
            • Else - Actions
      • Wait 0.10 game-time seconds
      • Countdown Timer - Start AI_Upgrade_Timer as a One-shot timer that will expire in 171.00 seconds
      • Trigger - Turn on Upgarde 17 <gen>


  • Upgarde 17
    • Events
      • Time - AI_Upgrade_Timer expires
    • Conditions
    • Actions
      • Trigger - Turn off (This trigger)
      • Player Group - Pick every player in AI_CompsGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Melee AI of (Picked player)) Not equal to Easy AI
            • Then - Actions
              • Player - Set the current research level of Iron Forged Weapons to 17 for (Picked player)
              • Player - Set the current research level of Iron Plating to 17 for (Picked player)
            • Else - Actions
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) controller) Equal to Computer
              • (Melee AI of (Player((Integer A)))) Not equal to Easy AI
              • (AI_1stHero[(Integer A)] is alive) Equal to True
            • Then - Actions
              • Item - Remove (Item carried by AI_1stHero[(Integer A)] of type Scroll of Town Portal)
              • Item - Remove (Item carried by AI_1stHero[(Integer A)] of type Ring of Regeneration)
              • Item - Remove (Item carried by AI_1stHero[(Integer A)] of type Jaood's Amulet of Power)
              • Item - Remove (Item carried by AI_1stHero[(Integer A)] of type Mana Stone)
              • Hero - Create Wind Walk and give it to AI_1stHero[(Integer A)]
            • Else - Actions
      • Wait 0.10 game-time seconds
      • Countdown Timer - Start AI_Upgrade_Timer as a One-shot timer that will expire in 122.00 seconds
      • Trigger - Turn on Upgarde 18 <gen>


the only thing i can think of is it doesnt like me always checking to make sure its not = to melee AI easy. maybe always checking for that just f's it up.. i see nothing else wrong.. all those things you listed as possible causes im not doing. You think i should make another playergroup at map init that discludes easy ai? then i wont have to do all those easy ai checks..

you think it has to do with upgrade 15 and 17 triggering off semi close to the every 3 mins base upgrade trigger? its like 20ish sec's away, but i dont see why that would cause any probs..
 

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,258
You think i should make another playergroup at map init that discludes easy ai? then i wont have to do all those easy ai checks..
Yes, you should be doing that for effeciency anyway.

Have you tried turning the whole trigger off and seeing if it still desyncs? The only solution to desyncs is to remove script until they stop and it is very likly the last script you removed was then the cause. Ofcourse if a desync still occurs, you can readd the last piece of script you removed as it obviously is not the cause.
 
Level 13
Joined
Mar 24, 2010
Messages
950
Yes, you should be doing that for effeciency anyway.

Have you tried turning the whole trigger off and seeing if it still desyncs? The only solution to desyncs is to remove script until they stop and it is very likly the last script you removed was then the cause. Ofcourse if a desync still occurs, you can readd the last piece of script you removed as it obviously is not the cause.

yea i did that now gonna go test it for a while. if it still has a prob after i do all these tests then i will replace that wait with a timer in the base upgrades trigger that goes every 3 mins because thats what ill then assume it has to be.

is there a limit to how many looping time events you can have in a map? like every 10 sec, every 180 sec, every 1 sec, etc..
 
Level 13
Joined
Mar 24, 2010
Messages
950
k i figured it out i guess i tested it a good amount of times with ppl and no more desync :D
one of the only things i changed was adding that extra playergroup so i didnt have to do those melee ai checks.. i guess the game did not like that.. lol

Anyway thanks for all the help Dr :)
 
Level 13
Joined
Mar 24, 2010
Messages
950
lol ok.. so it might not be fully fixed.. it happened once now out of a good amount of test games at now 25 mins.. so now i know for sure its not the (upgrade every 3min) trigger because it way out of range..

i did change the upgrade times a bit tho.. so it seems to be following the upgrade 15 trigger no idea why.. its such a nothing trigger..

15= 1515 timer190 (new) (25.25mins)
16= 1647 timer132 (was 322) (27.45mins)
17= 1875 timer228 (31.25mins)
18= 1940 timer65 (32.3mins)


  • Upgarde 15
    • Events
      • Time - AI_Upgrade_Timer expires
    • Conditions
    • Actions
      • Trigger - Turn off (This trigger)
      • Player Group - Pick every player in AI_CompsGroup_NonEasy and do (Actions)
        • Loop - Actions
          • Player - Set the current research level of Iron Forged Weapons to 15 for (Picked player)
          • Player - Set the current research level of Iron Plating to 15 for (Picked player)
      • Wait 0.10 game-time seconds
      • Countdown Timer - Start AI_Upgrade_Timer as a One-shot timer that will expire in 132.00 seconds
      • Trigger - Turn on Upgarde 16 <gen>


  • Upgarde 16
    • Events
      • Time - AI_Upgrade_Timer expires
    • Conditions
    • Actions
      • Trigger - Turn off (This trigger)
      • Player Group - Pick every player in AI_CompsGroup_NonEasy and do (Actions)
        • Loop - Actions
          • Player - Set the current research level of Iron Forged Weapons to 16 for (Picked player)
          • Player - Set the current research level of Iron Plating to 16 for (Picked player)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (AI_1stHero[(Player number of (Picked player))] is alive) Equal to True
            • Then - Actions
              • Hero - Create LightSpeed Shoes and give it to AI_1stHero[(Player number of (Picked player))]
              • Item - Make (Last created item) Undroppable
            • Else - Actions
      • Wait 0.10 game-time seconds
      • Countdown Timer - Start AI_Upgrade_Timer as a One-shot timer that will expire in 228.00 seconds
      • Trigger - Turn on Upgarde 17 <gen>


  • Upgarde 17
    • Events
      • Time - AI_Upgrade_Timer expires
    • Conditions
    • Actions
      • Trigger - Turn off (This trigger)
      • Player Group - Pick every player in AI_CompsGroup_NonEasy and do (Actions)
        • Loop - Actions
          • Player - Set the current research level of Iron Forged Weapons to 17 for (Picked player)
          • Player - Set the current research level of Iron Plating to 17 for (Picked player)
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) controller) Equal to Computer
              • (Melee AI of (Player((Integer A)))) Not equal to Easy AI
              • (AI_1stHero[(Integer A)] is alive) Equal to True
            • Then - Actions
              • Item - Remove (Item carried by AI_1stHero[(Integer A)] of type Scroll of Town Portal)
              • Item - Remove (Item carried by AI_1stHero[(Integer A)] of type Ring of Regeneration)
              • Item - Remove (Item carried by AI_1stHero[(Integer A)] of type Jaood's Amulet of Power)
              • Item - Remove (Item carried by AI_1stHero[(Integer A)] of type Mana Stone)
              • Hero - Create Wind Walk and give it to AI_1stHero[(Integer A)]
            • Else - Actions
      • Wait 0.10 game-time seconds
      • Countdown Timer - Start AI_Upgrade_Timer as a One-shot timer that will expire in 65.00 seconds
      • Trigger - Turn on Upgarde 18 <gen>


this makes no sense.. -.-


Edit:
I have this trigger that keeps track of game time, just a time event that every 1 sec it adds +1 to a int var and when it gets to 60 it adds 1 to a int var for mins and rest's the sec var to 0
it seems pretty accurate..

  • Set Time
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Time_Sec Less than 60
        • Then - Actions
          • Set Time_Sec = (Time_Sec + 1)
        • Else - Actions
          • Set Time_Sec = 0
          • Set Time_Min = (Time_Min + 1)
So why did it say 15:01 to me as the game time when i typed -time when the bot said it was 15:28? is timing getting off?

[ GAME: CUSTOM HERO FOOTIES 3.8A #1] desync detected
[ GAME: CUSTOM HERO FOOTIES 3.8A #1] [Local]: Warning! Desync detected!
[ GAME: CUSTOM HERO FOOTIES 3.8A #1] [Local]: Players in game state #1: XXkillerbeansXX
[ GAME: CUSTOM HERO FOOTIES 3.8A #1] [Local]: Players in game state #2: Bond009, LoLBlade, cyray7, Shinkirou
[ GAME: CUSTOM HERO FOOTIES 3.8A #1] kicking desynced players
[ GAME: CUSTOM HERO FOOTIES 3.8A #1] deleting player [XXkillerbeansXX]: was dropped due to desync
[ GAME: CUSTOM HERO FOOTIES 3.8A #1] [Local]: XXkillerbeansXX was dropped due to desync.
[ GAME: CUSTOM HERO FOOTIES 3.8A #1] (25:28) [Team: 1] [Allies] [Bond009]: -time
[ GAME: CUSTOM HERO FOOTIES 3.8A #1] (25:30) [Team: 1] [Allies] [Bond009]: damnit
 
Last edited:

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,258
So why did it say 15:01 to me as the game time when i typed -time when the bot said it was 15:28? is timing getting off?
The bot uses absolute time the game session was running I believe. Game time uses actual time that has advanced in the game engine. Dropped packets, unexpected latency or even just occasional bandwidth problems causes game engine time to be dropped inorder to keep the game in sync. Usually this is very low and forms a sort of tollerence buffer so as to allow fluid gameplay. In the case of emmense "lag" (such that can signify a connection failure or vurge on timeout) it can cause so much game time to be dropped that some clients will actually be forced to pause their instance inorder to keep the game in sync (this is followed by the waiting for Host/Player dialog).

Some hosts have reported getting desyncs in their sessions of certain maps while others play fine. Try getting someone else to host (another bot / classic host) to see if the desyncs still occur and at the same time. Host bots are third party and control game sync so it is every bit possible that faults with them can cause game desyncs unrelated to any data in a map.
 
Level 9
Joined
Apr 26, 2011
Messages
403
I think it may cause by host's network/firewall ?

one of my bot report to me say he suddenly have mass decyns on most game, and later he found out it only happen to him.

and it fixed it after reset or undo his router/firewall setting.

so network setting can cause decyns.

-----------

also decyns may happen more often on certain player. eg in one of my beta version, nobody report about decryns but 2 always say it decyns........ I still can't figure out why.
 

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,258
also decyns may happen more often on certain player. eg in one of my beta version, nobody report about decryns but 2 always say it decyns........ I still can't figure out why.
Here are some possible causes.
1. Curropt installation (their installation of WC3 has been damaged so no longer matches the default patched installation).
2. They are using a different OS from other people (it is well known MAC and Windows players will desync between each other with terrain deformations).
3. Their hardware violates instruction standards so the actual program behaves differently when run on their systems.
4. Their internet connectivity is unreliable resulting in a lot of lost or damaged packets that can potentially result in a different order being carried out from what was sent.
5. They they forgot to restart their WC3 client after playing a different map that was widgitized.
 
Level 13
Joined
Mar 24, 2010
Messages
950
5. They they forgot to restart their WC3 client after playing a different map that was widgitized.

so if other maps are widgitized they have to restart wc first like if they were playing dota or something? lol my game is also widgitized.. but i dont see why that would affect anything, especially when it always seems to be happening at the 25min mark and thats when the upgrade 15 trigger is.. so weird..

Edit:
lol i just checked.. and i have 43 repeating timer events and 24 time elapsed events, Alot of those timers are only used in certain game modes, i wonder if i should destroy those triggers in game if those modes arnt chosen. Thats alot of timers running for nothing..
 
Last edited:

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,258
so if other maps are widgitized they have to restart wc first like if they were playing dota or something? lol my game is also widgitized.. but i dont see why that would affect anything, especially when it always seems to be happening at the 25min mark and thats when the upgrade 15 trigger is.. so weird..
The widgitizer permantly curropts the object editor data that WC3 caches between games for faster load times (cache pollution) which results in the data for that client in a multiplayer sessions not being syncrnious with all other clients in that session (who have a different cache or loaded fresh).

Obviously this will only cause a desync under certain circumstances. In the case of curropted sound data it just means weapon effects are messed up (SWAT Aftermath had such a problem where if you played wigitized maps before it the guns would sound like polymorph). Other cases where it has curropted some other data (such as units) usually results in an instant desync. The exception is that if data is not loaded yet it has no influence on gameplay thus a desync will occur only when that data is loaded and if the data is important for syncronization (weapon sounds are an example of data that is not).

Also not all widgitized maps cause this cashe pollution as only some settings make it occur and not all maps have data structured in a curroption prone way.
 
Level 13
Joined
Mar 24, 2010
Messages
950
thats interesting stuff.. i played a game with many users in it and with no computers in the game but i still typed -ai which turns on everything that makes ai with comps funtion. there was 0 problems.. no desync or anything.. so that tells me there must be something happening with the ai at that time..

Do you think it could be upgrading that attack/def tech while the building that provides that tech upgrade is being upgraded to a new building.. do you think that would mess it up? i dont see why it would but there must be something to do with the relationship between upgrades and the actual computer units in the map..
 

Dr Super Good

Spell Reviewer
Level 64
Joined
Jan 18, 2005
Messages
27,258
The problem is that splits are the result of syncronization between clients failing in a multiplayer session. This is usually the result of something occuring for some clients but not all clients.

Mac users get split from windows users after some terrain deformation opperations.
Improper use of GetLocalPlayer() to create gameplay crutial elements will cause a client to split from a session.
Getting the name of an AI player can cause splits if all clients in a session are not the same localization (as AI names are localized).
Server and connection problems can cause splits if they fail to keep a client in sync with the session (exact cause is hard to explain but this should not be your problem).

The problem we are having is trying to find out why that piece of code you are running is causing the clients to split as I do not see anything that could cause unrecreatable results on all clients.
 
Level 13
Joined
Mar 24, 2010
Messages
950
I tested it and there is nothing else in the game happening at those times that should affect AI these are the only triggers that make this up


This is setting up the player groups
  • Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) controller) Equal to Computer
              • ((Player((Integer A))) slot status) Equal to Is playing
            • Then - Actions
              • Player Group - Add (Player((Integer A))) to AI_CompsGroup
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Or - Any (Conditions) are true
                    • Conditions
                      • (Melee AI of (Player((Integer A)))) Equal to Normal AI
                      • (Melee AI of (Player((Integer A)))) Equal to Insane AI
                • Then - Actions
                  • Player Group - Add (Player((Integer A))) to AI_CompsGroup_NonEasy
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Melee AI of (Player((Integer A)))) Equal to Insane AI
                    • Then - Actions
                      • Player Group - Add (Player((Integer A))) to AI_CompsGroup_Insane
                    • Else - Actions
                • Else - Actions
            • Else - Actions
I did it this way so there was no chance of getting computer 13, 14, 15, and 16 in the group.
Is it fine to do that that way above^ or is this a better way?

  • Actions
    • Set AI_CompsGroup_NonEasy = (All players matching ((((Matching player) controller) Equal to Computer) and (((Melee AI of (Matching player)) Equal to Normal AI) or ((Melee AI of (Matching player)) Equal to Insane AI))))
    • Set AI_CompsGroup_Insane = (All players matching ((((Matching player) controller) Equal to Computer) and ((Melee AI of (Matching player)) Equal to Insane AI)))

this is the upgrade timer

  • Upgrade Timer 150
    • Events
      • Time - Every 150.00 seconds of game time
    • Conditions
    • Actions
      • Set AI_Upgrade_Counter = (AI_Upgrade_Counter + 1)
      • Game - Display to Player Group - Player 1 (Red) for 2.00 seconds the text: (String(AI_Upgrade_Counter))
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AI_Upgrade_Counter Equal to 15
        • Then - Actions
        • Else - Actions
          • Trigger - Run AI_Upgrade_Triggers[AI_Upgrade_Counter] (checking conditions)
This is the last upgrade it is fine with (no problems)

  • Upgarde 14
    • Events
    • Conditions
    • Actions
      • Player Group - Pick every player in AI_CompsGroup_NonEasy and do (Actions)
        • Loop - Actions
          • Player - Set the current research level of Iron Forged Weapons to 14 for (Picked player)
          • Player - Add 500 to (Picked player) Current gold
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked player) is in AI_CompsGroup_Insane) Equal to True
            • Then - Actions
              • Player - Set the current research level of Animal War Training to 5 for (Picked player)
              • Player - Set the current research level of Berserker Strength to 5 for (Picked player)
              • Player - Set the current research level of Undead Frenzy to 5 for (Picked player)
              • Player - Set the current research level of Improved Range to 6 for (Picked player)
            • Else - Actions
              • Player - Set the current research level of Animal War Training to 2 for (Picked player)
              • Player - Set the current research level of Berserker Strength to 2 for (Picked player)
              • Player - Set the current research level of Undead Frenzy to 3 for (Picked player)
              • Player - Set the current research level of Improved Range to 4 for (Picked player)
      • Set Temp_UnitGroup2 = (Units in (Playable map area) matching ((((Owner of (Matching unit)) controller) Equal to Computer) and ((Unit-type of (Matching unit)) Equal to Frost Tower)))
      • Unit Group - Pick every unit in Temp_UnitGroup2 and do (Actions)
        • Loop - Actions
          • Set Temp_Integer = (Random integer number between 1 and 10)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Temp_Integer Greater than 7
            • Then - Actions
              • Unit - Order (Picked unit) to train/upgrade to a Arcane Tower
            • Else - Actions
      • Custom script: call DestroyGroup (udg_Temp_UnitGroup2)
This is the first one it fuks up on everytime at 25mins in (mostly with more than 3 players) and it mostly only desyncs one person sometimes its even me, on my own bot on my lan.. and i have very good internet
  • Upgarde 15
    • Events
    • Conditions
    • Actions
      • Game - Display to Player Group - Player 1 (Red) for 10.00 seconds the text: Desync?
      • Player Group - Pick every player in AI_CompsGroup_NonEasy and do (Actions)
        • Loop - Actions
          • Player - Set the current research level of Iron Forged Weapons to 15 for (Picked player)
I turned upgrade 15 off so its not ran and then its fine at 25mins but then it screws up at 27:30mins when upgrade 16 goes off

  • Upgarde 16
    • Events
    • Conditions
    • Actions
      • Player Group - Pick every player in AI_CompsGroup_NonEasy and do (Actions)
        • Loop - Actions
          • Player - Set the current research level of Iron Forged Weapons to 16 for (Picked player)
          • Player - Set the current research level of Iron Plating to 12 for (Picked player)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (AI_1stHero[(Player number of (Picked player))] is alive) Equal to True
            • Then - Actions
              • Hero - Create LightSpeed Shoes and give it to AI_1stHero[(Player number of (Picked player))]
              • Item - Make (Last created item) Undroppable
            • Else - Actions
      • Game - Display to Player Group - Player 1 (Red) for 8.00 seconds the text: Desync?
      • Game - Display to (Player group((Triggering player))) for 8.00 seconds the text: (You have played the game for: + ((String(Time_Min)) + (: + (String(Time_Sec)))))

Ive done this before i think it will follow until upgrade 17 and then if it makes it past that it seems to be fine from then on.. This drives me out of my mind..becuz it makes no sense to me.. :( there is nothing i know of that is a problem.. But it has to do with these triggers i have narrowed it down to that 100%

I think i have an idea and instead of setting upgrades at this time ill hve them ordered to research it instead and see if that helps.. it has to do with the tech upgrading somehow...
 
Level 13
Joined
Mar 24, 2010
Messages
950
Well i changed from setting the upgrade to 15 to making it order the building to research it and now it doesn't desync on that exact time the trigger executes but now rather about 50 secs after.. (probably about 30 secs after the research is complete) too weird for me.

This is now beyond my understanding so im just gonna turn these off i think and be done with it for now lol. If you get any bright ideas of something to try, run it by me.
 
Status
Not open for further replies.
Top