set A = 0
loop
    if (GetPlayerSlotState(Player(A)) == PLAYER_SLOT_STATE_PLAYING) and (Player(A) != p1) and (Player(A) != p2) then
        call GroupAddUnit(udg_HiddenUnits, udg_Elves_array[A])
        call SetPlayerAbilityAvailable(Player(A), 'A000', false) // активный спелл
        call UnitAddAbility(udg_Elves_array[A], 'A001') // пассивный инвиз
    endif
    set A = A + 1
    exitwhen A == 12
endloop
почему этот кусок кода создает десинк?

Принятый ответ

одного куска мало
поищи по всему коду использование GetLocalPlayer()
мб переменная p1, p2, udg_HiddenUnits или udg_Elves_array имеет асинхронное значение(у разных игроков разные значения)
`
ОЖИДАНИЕ РЕКЛАМЫ...