• 🏆 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!

Desync Problem

Status
Not open for further replies.
Level 10
Joined
Oct 31, 2009
Messages
352
My map causes players to desync when using Ghost (i'm not quite sure if it happens on B-net and such too but I don't think it would make a difference).

From what I understand, this occurs when one player's data differs from that which other players have and they are automatically dropped because of it.

The players who reported the problem said it happened almost as soon as the map began, which tells me it is most likely in one of the following triggers:


  • Player Colors
    • Events
      • Time - Elapsed game time is 0.50 seconds
    • Conditions
    • Actions
      • Player Group - Pick every player in (All players controlled by a Computer player) and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • And - All (Conditions) are true
                • Conditions
                  • (Picked player) Not equal to Player 1 (Red)
                  • (Picked player) Not equal to Player 7 (Green)
            • Then - Actions
              • Player - Set name of (Picked player) to (AI P + (String((Player number of (Picked player)))))
            • Else - Actions
      • Set Player_Colors[1] = |c008B7500
      • Set Player_Colors[2] = |c000000FF
      • Set Player_Colors[3] = |c0000FFFF
      • Set Player_Colors[4] = |c009B30FF
      • Set Player_Colors[5] = |c00FFFF00
      • Set Player_Colors[6] = |c00FFA500
      • Set Player_Colors[7] = |c0000868B
      • Set Player_Colors[8] = |c00FF1493
      • Set Player_Colors[9] = |c004F4F4F
      • Set Player_Colors[10] = |c00436EEE
      • Set Player_Colors[11] = |c00006400
      • Set Player_Colors[12] = |c008B4513
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • Player - Set name of (Player((Integer A))) to (Player_Colors[(Integer A)] + ((Name of (Player((Integer A)))) + |r))



  • Dialog Start
    • Events
      • Time - Elapsed game time is 0.50 seconds
    • Conditions
    • Actions
      • Cinematic - Disable user control for (All players)
      • Cinematic - Turn on letterbox mode (hide interface) for (All players): fade out over 0.00 seconds
      • Player Group - Pick every player in (All players) and do (Actions)
        • Loop - Actions
          • Cinematic - Send transmission to (All players) from Elven Conscriptor 0084 <gen> named Elven Conscriptor: Play No sound and display Welcome to the |cff.... Modify duration: Add 8.00 seconds and Wait
      • Wait 7.00 seconds
      • Player Group - Pick every player in (All players controlled by a User player) and do (Actions)
        • Loop - Actions
          • Camera - Pan camera for (Picked player) to (Center of Hero Arena <gen>) over 0.00 seconds
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked player) slot status) Equal to Is playing
            • Then - Actions
              • Player Group - Add (Picked player) to GameLeader_TempPlayerGroup
            • Else - Actions
      • Cinematic - Turn off letterbox mode (show interface) for (All players): fade in over 4.00 seconds
      • Wait 4.00 seconds
      • Cinematic - Enable user control for (All players)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Player 2 (Blue) is in GameLeader_TempPlayerGroup) Equal to True
        • Then - Actions
          • Set GameLeader_Player = Player 2 (Blue)
        • Else - Actions
          • Set GameLeader_Player = (Random player from GameLeader_TempPlayerGroup)
          • Quest - Display to (All players) the Hint message: ((Name of GameLeader_Player) + ( has been selected as + |cff32cd32Game Leader|r))
      • Trigger - Run Dialog Box 1 <gen> (ignoring conditions)



  • Map Start
    • Events
    • Conditions
    • Actions
      • Trigger - Run Set Music <gen> (ignoring conditions)
      • Trigger - Turn on Music Periodical <gen>
      • Quest - Create a Required quest titled E-mail Me with the description kia_motahari@yahoo...., using icon path ReplaceableTextures\WorldEditUI\Doodad-Cinematic.blp
      • Quest - Create a Required quest titled Message Me with the description [url]www.hiveworkshop.co[/url]..., using icon path ReplaceableTextures\WorldEditUI\Doodad-Cinematic.blp
      • Quest - Create a Required quest titled Credits with the description |cff995500Icons|r ..., using icon path ReplaceableTextures\CommandButtons\BTNCallToArms.blp
      • Quest - Create a Required quest titled Credits (Add.) with the description |cff995500Models|r ..., using icon path ReplaceableTextures\CommandButtons\BTNCallToArms.blp
      • Quest - Create a Optional quest titled Game Modes with the description |cff32cd32Activate ..., using icon path ReplaceableTextures\CommandButtons\BTNOgreLord.blp
      • Quest - Create a Optional quest titled Hero Stats with the description In addition to the ..., using icon path ReplaceableTextures\CommandButtons\BTNStrongDrink.blp
      • Quest - Create a Optional quest titled Spell Critical Info with the description Each Spell that can..., using icon path ReplaceableTextures\CommandButtons\BTNCriticalStrike.blp
      • Quest - Create a Optional quest titled Nodes with the description Nodes are capturabl..., using icon path ReplaceableTextures\CommandButtons\BTNNightElfCaptureFlag.blp
      • Environment - Set sky to Felwood Sky
      • Set TempGroup = (Units of type Dark Elf Warlock)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Unit Group - Add (Picked unit) to Darkelf_Warlocks
          • Special Effect - Create a special effect attached to the origin of (Picked unit) using Abilities\Spells\Orc\Voodoo\VoodooAura.mdl
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Night Elf Warlock)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Unit Group - Add (Picked unit) to Nightelf_Warlocks
          • Special Effect - Create a special effect attached to the chest of (Picked unit) using Abilities\Spells\NightElf\TargetArtLumber\TargetArtLumber.mdl
      • Custom script: call DestroyGroup(udg_TempGroup)
      • For each (Integer A) from 8 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) slot status) Equal to Is playing
            • Then - Actions
              • Player Group - Add (Player((Integer A))) to Dark_Elves
            • Else - Actions
      • For each (Integer A) from 8 to 12, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) slot status) Equal to Is playing
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • EZ_Mode Equal to True
                • Then - Actions
                  • Player - Set (Player((Integer A))) Current gold to (1200 + (6000 / (Number of players in Dark_Elves)))
                  • Player - Set (Player((Integer A))) Current lumber to 3
                  • Set Total_Insignia[(Integer A)] = 3
                • Else - Actions
                  • Player - Set (Player((Integer A))) Current gold to (700 + (3500 / (Number of players in Dark_Elves)))
                  • Player - Set (Player((Integer A))) Current lumber to 1
                  • Set Total_Insignia[(Integer A)] = 1
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AllRandom_Boolean Equal to False
                • Then - Actions
                  • Visibility - Create an initially Enabled visibility modifier for (Player((Integer A))) emitting Visibility across Hero Arena <gen>
                  • Set Hero_Arena_Visibility[(Integer A)] = (Last created visibility modifier)
                • Else - Actions
              • Visibility - Create an initially Enabled visibility modifier for (Player((Integer A))) emitting Visibility across Shops <gen>
            • Else - Actions
      • For each (Integer A) from 2 to 6, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) slot status) Equal to Is playing
            • Then - Actions
              • Player Group - Add (Player((Integer A))) to Night_Elves
            • Else - Actions
      • For each (Integer A) from 2 to 6, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Player((Integer A))) slot status) Equal to Is playing
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • EZ_Mode Equal to True
                • Then - Actions
                  • Player - Set (Player((Integer A))) Current gold to (1200 + (6000 / (Number of players in Night_Elves)))
                  • Player - Set (Player((Integer A))) Current lumber to 3
                  • Set Total_Insignia[(Integer A)] = 3
                • Else - Actions
                  • Player - Set (Player((Integer A))) Current gold to (700 + (3500 / (Number of players in Night_Elves)))
                  • Player - Set (Player((Integer A))) Current lumber to 1
                  • Set Total_Insignia[(Integer A)] = 1
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • AllRandom_Boolean Equal to False
                • Then - Actions
                  • Visibility - Create an initially Enabled visibility modifier for (Player((Integer A))) emitting Visibility across Hero Arena <gen>
                  • Set Hero_Arena_Visibility[(Integer A)] = (Last created visibility modifier)
                • Else - Actions
              • Visibility - Create an initially Enabled visibility modifier for (Player((Integer A))) emitting Visibility across Shops <gen>
            • Else - Actions
      • Player Group - Pick every player in (All players) and do (Actions)
        • Loop - Actions
          • Player Group - Add (Picked player) to FoodTimer_PGroup
      • Player - Turn Gives bounty On for Player 1 (Red)
      • Player - Turn Gives bounty On for Player 7 (Green)
      • For each (Integer A) from 1 to 12, do (Actions)
        • Loop - Actions
          • Set Spirit_Array[(Integer A)] = 1
          • Set Wisdom_Array[(Integer A)] = 1
          • Set Stamina_Array[(Integer A)] = 1
          • Set SpellCrit_Real[(Integer A)] = 5.00
      • Set Titan_Types[1] = Forest Giant (Super Creep Level 1)
      • Set Titan_Types[2] = Giant Ogre (Super Creep Level 2)
      • Set Titan_Types[3] = Ancient Turtle (Super Creep Level 3)
      • Set Titan_StringTypes[1] = |cff32cd32Forest Giants|r have spawned on the north path.
      • Set Titan_StringTypes[2] = |cff32cd32Forest Giants|r have spawned on the south path.
      • Set Titan_StringTypes[3] = |cff32cd32Forest Giants|r have spawned on the middle path.
      • Set Titan_StringTypes[4] = |cff32cd32Giant Ogres|r have spawned on the north path.
      • Set Titan_StringTypes[5] = |cff32cd32Giant Ogres|r have spawned on the south path.
      • Set Titan_StringTypes[6] = |cff32cd32Giant Ogres|r have spawned on the middle path.
      • Set Titan_StringTypes[7] = |cff32cd32Ancient Turtles|r have spawned on the north path.
      • Set Titan_StringTypes[8] = |cff32cd32Ancient Turtles|r have spawned on the south path.
      • Set Titan_StringTypes[9] = |cff32cd32Ancient Turtles|r have spawned on the middle path.
      • Set TitanSpawn_Points[1] = (Center of Night Elf Spawn North <gen>)
      • Set TitanSpawn_Points[2] = (Center of Night Elf Spawn South <gen>)
      • Set TitanSpawn_Points[3] = (Center of Mid Field NE Move <gen>)
      • Set TitanSpawn_Points[4] = (Center of Dark Elf Spawn North <gen>)
      • Set TitanSpawn_Points[5] = (Center of Dark Elf Spawn South <gen>)
      • Set TitanSpawn_Points[6] = (Center of Mid Field DE Move <gen>)
      • Set AIHeal_Pos = (Center of AI Heal <gen>)
      • Set DarkElfTeleport_Pos = (Center of Dark Elf Teleport <gen>)
      • Set NightElfTeleport_Pos = (Center of Night Elf Teleport <gen>)
      • Set ShopTeleport_Pos = (Center of Shops Teleport <gen>)
      • Set TempGroup = (Units of type Smith)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Special Effect - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
          • Set Smith = (Picked unit)
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Elven Conscriptor)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Special Effect - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Warcaller)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Special Effect - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Moonrider Lespa)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Special Effect - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Maiden of the Forest)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Special Effect - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Rajooki)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Special Effect - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Naga Anarchist)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Special Effect - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Other\TalkToMe\TalkToMe.mdl
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Martok)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Unit - Add Demigod Sleep Effect to (Picked unit)
          • Unit - Pause (Picked unit)
          • Set Martok = (Picked unit)
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Set TempGroup = (Units of type Malfurious)
      • Unit Group - Pick every unit in TempGroup and do (Actions)
        • Loop - Actions
          • Unit - Add Demigod Sleep Effect to (Picked unit)
          • Unit - Pause (Picked unit)
          • Set Malfurious = (Picked unit)
      • Custom script: call DestroyGroup(udg_TempGroup)
      • Countdown Timer - Start HeroArena_AI_Timer as a One-shot timer that will expire in 95.00 seconds
      • Countdown Timer - Start HeroArena_Timer as a One-shot timer that will expire in 100.00 seconds
      • Countdown Timer - Create a timer window for (Last started timer) with title Taverns Close:
      • Set HeroArena_TimerWindow = (Last created timer window)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • OrbMode_Boolean Equal to True
        • Then - Actions
          • Trigger - Turn on Creep Dies Effect and Item <gen>
          • Trigger - Turn on Orb Death Timer <gen>
        • Else - Actions
          • Trigger - Turn on Creep Dies Effect <gen>
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • AllRandom_Boolean Equal to True
        • Then - Actions
          • Trigger - Run All Random <gen> (ignoring conditions)
        • Else - Actions



  • Dialog Box 1
    • Events
    • Conditions
    • Actions
      • Unit - Pause all units
      • Dialog - Change the title of Funmodes_Dialog to Fun Modes
      • Dialog - Create a dialog button for Funmodes_Dialog labelled Normal Mode
      • Set DialogBox1_Buttons[1] = (Last created dialog Button)
      • Dialog - Create a dialog button for Funmodes_Dialog labelled Quick Mode
      • Set DialogBox1_Buttons[2] = (Last created dialog Button)
      • Dialog - Create a dialog button for Funmodes_Dialog labelled No Nodes
      • Set DialogBox1_Buttons[3] = (Last created dialog Button)
      • Dialog - Create a dialog button for Funmodes_Dialog labelled No Nodes/Quick Mode
      • Set DialogBox1_Buttons[4] = (Last created dialog Button)
      • Dialog - Show Funmodes_Dialog for GameLeader_Player


Any help with this matter in general would be appreciated.
 
Level 6
Joined
Jun 7, 2006
Messages
23
on a first glance i noticed that you use "normal" waits. this can cause desync because this wait uses real time seconds that may differ from player to player; also, it can cause problems at the beginning of the game while waiting for lagging players.

use game time waits instead, those are safe.
 
Status
Not open for further replies.
Top