Используя фреймы, я заметил что происходит моментальный десинхрон при вызове функции с GetLocalPlayer(), но не особо могу понять почему происходит десинхрон или что с ним можно сделать.
GetLocalPlayer() присутствует в двух местах кода ниже:
  1. call TimerStart( tm, 0.01, GetLocalPlayer() == pl, function Check ) Запускаем Check каждые 0.01 сек
Таймер, который вроде как не должен десинхронизировать. Ведь он проверяет не нажата ли кнопка фрейма, который запускается ниже, а игрок даже не успевает ничего сделать.
  1. if ( GetLocalPlayer() == pl ) then
Там дальше изменения названий, размеров и текстуры фрейма, по факту это визуальная часть и вроде тоже не должна выдавать десинк, но он происходит.
И даже не понятно, где выходит утечка(как минимум, для тупого меня, лишь предположения типо хештега, функции клина сообщений, отправки сообщения игроку). Знатоки, можете помочь?

Таймер
//Timer i guess
function Check takes nothing returns nothing
    local player pl = GetLocalPlayer()
    local integer pn = GetConvertedPlayerId(pl)
    local force pf = GetForceOfPlayer(pl)
    local integer a = 1
    local integer b = 1
    local integer frame = FindCLayerUnderCursor() // находим фрейм под курсором
    if IsKeyPressed( 0x01 ) then // проверяем нажата ли ЛЕВАЯ клавиша мыши в данный момент, если нужна правая то 0x02
        if LMBTap then // проверяем нажимали ли ранее (Check ведь каждые 0.1 секунду происхjlbn)
            set LMBTap = false //Если нет, говорим что нажимаем
            
            set bj_lastClickedFrame = frame // записываем последний фрейм что нажали
            
            if bj_lastClickedFrame == HeroFunct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( HeroButton, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                call DisplayTextToForce(GetForceOfPlayer(pl),GetAbilityBaseTip(abi_hero_p[int_player_hero[pn]],1)+"|n"+GetAbilityBaseUbertip(abi_hero_p[int_player_hero[pn]],1))
            endif
            if bj_lastClickedFrame == FactFunct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( FactionButton, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                call DisplayTextToForce(GetForceOfPlayer(pl),GetAbilityBaseTip(abi_fac[UI_FactionID[pn]],1)+"|n"+GetAbilityBaseUbertip(abi_fac[UI_FactionID[pn]],1))
            endif
            
            if bj_lastClickedFrame == B3Funct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( Button3, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
    loop
    exitwhen a > 4
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[1]+QuestName[1][a]+QuestText[2]+I2S(IntCrit[1][a])+QuestText[3]+RewardName[1][a])
    if ( QuestCheck[1][a] == false ) then
    call DisplayTimedTextToForce(pf,45.0,"|c00FF0000Не выполнен|r")
    else
    call DisplayTimedTextToForce(pf,45.0,"|c0000FF00Выполнен|r")
    endif
    set a = a + 1
    endloop
            endif
            if bj_lastClickedFrame == B4Funct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( Button4, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                set a = 5
    loop
    exitwhen a > 8
    if ( Quest[2][b] == 3 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[1]+QuestName[2][b]+QuestText[2]+I2S(IntCrit[2][b])+QuestText[3]+RewardName[2][b])
    endif
    if ( Quest[2][b] == 4 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[4]+QuestName[2][b]+QuestText[5]+I2S(IntCrit[2][b])+QuestText[3]+RewardName[2][b])
    endif
    if ( Quest[2][b] == 5 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[1]+QuestName[2][b]+QuestText[2]+I2S(IntCrit[2][b])+QuestText[3]+RewardName[2][b])
    endif
    if ( QuestCheck[2][b] == false ) then
    call DisplayTimedTextToForce(pf,45.0,"|c00FF0000Не выполнен|r")
    else
    call DisplayTimedTextToForce(pf,45.0,"|c0000FF00Выполнен|r")
    endif
    set b = b + 1
    set a = a + 1
    endloop
            endif
            if bj_lastClickedFrame == B5Funct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( Button5, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                set a = 9
    loop
    exitwhen a > 11
    if ( Quest[3][b] == 6 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[7]+QuestName[3][b]+QuestText[8]+RewardName[3][b])
    endif
    if ( Quest[3][b] == 7 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[1]+QuestName[3][b]+QuestText[2]+I2S(IntCrit[3][b])+QuestText[3]+RewardName[3][b])
    endif
    if ( QuestCheck[3][b] == false ) then
    call DisplayTimedTextToForce(pf,45.0,"|c00FF0000Не выполнен|r")
    else
    call DisplayTimedTextToForce(pf,45.0,"|c0000FF00Выполнен|r")
    endif
    set b = b + 1
    set a = a + 1
    endloop
            endif
            if bj_lastClickedFrame == B6Funct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( Button6, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                set a = 0
                call DisplayTextToForce(pf,"Активированные |c00E4201Bхаосы|r")
    loop
    exitwhen a > ChaosMax
    if ( ChaosBOOL[a] == true ) then
    call DisplayTextToForce(pf,ChaosNAME[a])
    call DisplayTextToForce(pf,ChaosDISC[a])
    endif
    set a = a + 1
    endloop
            endif
        endif
    else
        set LMBTap = true //говорим что отпустили
        
        if bj_lastClickedFrame == HeroFunct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( HeroButton, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == FactFunct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( FactionButton, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == B3Funct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( Button3, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == B4Funct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( Button4, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == B5Funct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( Button5, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == B6Funct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( Button6, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
    endif
endfunction
Функция с GetLocalPlayer
function GameStart2 takes player i returns nothing
local player pl = i
local integer pn = GetConvertedPlayerId(pl)
local unit un = udg_Hero[pn]
local location loc = GetRectCenter(survloc[pn])
local unit uv
local unit cp
local timer array tm
set tm[pn] = CreateTimer()
call ShowUnitAbility(un,'amov',false)
call TimerStart( tm[pn], 0.01, GetLocalPlayer() == pl, function Check ) Запускаем Check каждые 0.01 сек

if ( GetLocalPlayer() == pl ) then
Back создаем основу для последующих фреймов
call SetFrameAbsolutePoint( ButtonBackdrop, ANCHOR_CENTER, 0.4, 0.14 )
call SetFrameSize( ButtonBackdrop, 0.35, 0.04 ) размеры
call SetFrameTexture( ButtonBackdrop, "panel3.blp", false ) Чисто текстура

Button Создали кнопку, повторюсь что имя из fdf файла
call SetFrameAbsolutePoint( HeroButton, ANCHOR_CENTER, 0.25, 0.14 )
call SetFrameSize( HeroButton, 0.029, 0.034 ) размеры
call SetFrameTexture( HeroButton, Icon_Hero[int_player_hero[pn]], false ) Создали кнопку, повторюсь что имя из fdf файла
call SetFramePoint( HeroFunct, ANCHOR_CENTER, HeroButton, ANCHOR_CENTER, 0.00, 0.00 )
call SetFrameSize( HeroFunct, 0.029, 0.034 ) Опять размеры шаманим
call SetFrameAbsolutePoint( HeroFunct, ANCHOR_CENTER, 0.25, 0.14 )

Button
call SetFrameAbsolutePoint( FactionButton, ANCHOR_CENTER, 0.285, 0.14 )
call SetFrameSize( FactionButton, 0.029, 0.034 ) размеры
call SetFrameTexture( FactionButton, Icon_Frac[UI_FactionID[pn]], false ) Создали кнопку, повторюсь что имя из fdf файла
call SetFramePoint( FactFunct, ANCHOR_CENTER, FactionButton, ANCHOR_CENTER, 0.00, 0.00 )
call SetFrameSize( FactFunct, 0.029, 0.034 ) Опять размеры шаманим

Button
call SetFrameAbsolutePoint( Button3, ANCHOR_CENTER, 0.325, 0.14 )
call SetFrameSize( Button3, 0.029, 0.034 ) размеры
call SetFrameTexture( Button3, "ReplaceableTextures\\CommandButtons\\BTNBlueScroll.blp", false )// Создали кнопку, повторюсь что имя из fdf файла
call SetFramePoint( B3Funct, ANCHOR_CENTER, Button3, ANCHOR_CENTER, 0.00, 0.00 )
call SetFrameSize( B3Funct, 0.029, 0.034 ) Опять размеры шаманим

Button
call SetFrameAbsolutePoint( Button4, ANCHOR_CENTER, 0.355, 0.14 )
call SetFrameSize( Button4, 0.029, 0.034 ) размеры
call SetFrameTexture( Button4, "ReplaceableTextures\\CommandButtons\\BTNPurpleScroll.blp", false ) Создали кнопку, повторюсь что имя из fdf файла
call SetFramePoint( B4Funct, ANCHOR_CENTER, Button4, ANCHOR_CENTER, 0.00, 0.00 )
call SetFrameSize( B4Funct, 0.029, 0.034 ) Опять размеры шаманим

Button
call SetFrameAbsolutePoint( Button5, ANCHOR_CENTER, 0.385, 0.14 )
call SetFrameSize( Button5, 0.029, 0.034 ) размеры
call SetFrameTexture( Button5, "ReplaceableTextures\\CommandButtons\\BTNOrangeScroll.blp", false ) Создали кнопку, повторюсь что имя из fdf файла
call SetFramePoint( B5Funct, ANCHOR_CENTER, Button5, ANCHOR_CENTER, 0.00, 0.00 )
call SetFrameSize( B5Funct, 0.029, 0.034 ) Опять размеры шаманим

Button
call SetFrameAbsolutePoint( Button6, ANCHOR_CENTER, 0.415, 0.14 )
call SetFrameSize( Button6, 0.029, 0.034 ) размеры
call SetFrameTexture( Button6, "ReplaceableTextures\\CommandButtons\\BTNShopDic_Chaosomicon.blp", false )
call SetFramePoint( B6Funct, ANCHOR_CENTER, Button6, ANCHOR_CENTER, 0.00, 0.00 )
call SetFrameSize( B6Funct, 0.029, 0.034 ) Опять размеры шаманим
call SetFrameAbsolutePoint( FrameLead, ANCHOR_CENTER, 0.30, 0.17 )
call SetFrameSize( FrameLead, 0.10, 0.00 )
call SetFrameFont( FrameLead, "Fonts\\FRIZQT__.TTF", 0.010, 0 )
call SetFrameText( FrameLead, "|c00FF8000Лидерство|r("+I2S(UI_Lead[pn])+")" )

call SetFrameAbsolutePoint( FrameMastery, ANCHOR_CENTER, 0.36, 0.17 )
call SetFrameSize( FrameMastery, 0.10, 0.00 )
call SetFrameFont( FrameMastery, "Fonts\\FRIZQT__.TTF", 0.010, 0 )
call SetFrameText( FrameMastery, "|c00FF4646Мастерство|r("+I2S(UI_Mastery[pn])+")" )

call SetFrameAbsolutePoint( FrameMagic, ANCHOR_CENTER, 0.42, 0.17 )
call SetFrameSize( FrameMagic, 0.10, 0.00 )
call SetFrameFont( FrameMagic, "Fonts\\FRIZQT__.TTF", 0.010, 0 )
call SetFrameText( FrameMagic, "|c008000FFВорожба|r("+I2S(UI_Magic[pn])+")" )

call SetFrameAbsolutePoint( FrameCharisma, ANCHOR_CENTER, 0.48, 0.17 )
call SetFrameSize( FrameCharisma, 0.10, 0.00 )
call SetFrameFont( FrameCharisma, "Fonts\\FRIZQT__.TTF", 0.010, 0 )
call SetFrameText( FrameCharisma, "|c00FFFF00Харизма|r("+I2S(UI_Charisma[pn])+")" )

call SetFrameAbsolutePoint( FrameFire, ANCHOR_CENTER, 0.54, 0.17 )
call SetFrameSize( FrameFire, 0.10, 0.00 )
call SetFrameFont( FrameFire, "Fonts\\FRIZQT__.TTF", 0.008, 0 )
call SetFrameText( FrameFire, "|c00FF0000Огнекристалл|r("+I2S(UI_CDamage[pn])+")" )
endif

endfunction

Netherstorm, таймер однократный и многократный в jass считай разные обьекты, у одного игрока он тикает, у другого нет - игра такого не понимает.
И в целом что за подход, такие вещи делаются в триггере для всех сразу, 0.01 - 100 раз в сек, чет многовато. Ну и создавай обьекты для всех игроков разом, а локально пряч\показывай. Если кто то чето нажал, сообщи об этом всем остальным, к примеру выбором даммика или через кешь синхронизируй.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Этот комментарий удален
15
Дополнение
Попробовал создать таймер под каждого игрока(массив), не сработало.
Попробовал заменить хештаблицу на обычный GetLocalPlayer() в функции, не сработало.
Вылет все ещё в самом начале игры(при срабатывании функции)
32
Разумеется дисинх, какие таймеры локально запускать, вы о чем?

Вовсе подобные действия делаются в потоке триггера, создаешь триггер, добавляешь ему дейстие TriggerAction, и событие время вышло, периодическое.
В действиях триггера проверяешь для каждого игрока позицию курсора и прочее, через sleepAdctions, и можешь кешем синхать или выбирать даммиков.
Ответы (12)
15
quq_CCCP, сам таймер создается вне-функции GetLocalPlayer() == Player(). Там лишь аргумент вместо true/false. Который, вроде как, должен работать(ибо с Мультибордом это работает, плюс некоторые источники пишут об этом как о решении проблемы). Пример xgm.guru/p/wc3/Lokalnyy-taymer-Cbw
32
Netherstorm, таймер однократный и многократный в jass считай разные обьекты, у одного игрока он тикает, у другого нет - игра такого не понимает.
И в целом что за подход, такие вещи делаются в триггере для всех сразу, 0.01 - 100 раз в сек, чет многовато. Ну и создавай обьекты для всех игроков разом, а локально пряч\показывай. Если кто то чето нажал, сообщи об этом всем остальным, к примеру выбором даммика или через кешь синхронизируй.
Принятый ответ
15
quq_CCCP, хм, иначе говоря, как думаешь, так будет работать? Сейчас попробовал превратить в триггер с действием "Каждую 0.1 секунду". GetLocalPlayer используется в цикле, (loop 10 раз, где Х это номер игрока)
Господи спаси
function Trig_ClickEvent_Actions takes nothing returns nothing
    local integer pn = GetConvertedPlayerId(pl)
    local force pf = GetForceOfPlayer(pl)
    local player pl
    local integer p = 0
    local integer a = 1
    local integer b = 1
    local integer frame
    loop
    exitwhen p > 10
    
    if ( GetLocalPlayer() == Player(p) ) then
    set pl = Player(p)
    set pn = p+1
    set pf = GetForceOfPlayer(pl)
    set frame = FindCLayerUnderCursor()
    if IsKeyPressed( 0x01 ) then // проверяем нажата ли ЛЕВАЯ клавиша мыши в данный момент, если нужна правая то 0x02
        if LMBTap then // проверяем нажимали ли ранее (Check ведь каждые 0.1 секунду происхjlbn)
            set LMBTap = false //Если нет, говорим что нажимаем
            
            set bj_lastClickedFrame = frame // записываем последний фрейм что нажали
            
            if bj_lastClickedFrame == HeroFunct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( HeroButton, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                call DisplayTextToForce(GetForceOfPlayer(pl),GetAbilityBaseTip(abi_hero_p[int_player_hero[pn]],1)+"|n"+GetAbilityBaseUbertip(abi_hero_p[int_player_hero[pn]],1))
            endif
            if bj_lastClickedFrame == FactFunct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( FactionButton, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                call DisplayTextToForce(GetForceOfPlayer(pl),GetAbilityBaseTip(abi_fac[UI_FactionID[pn]],1)+"|n"+GetAbilityBaseUbertip(abi_fac[UI_FactionID[pn]],1))
            endif
            
            if bj_lastClickedFrame == B3Funct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( Button3, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
    loop
    exitwhen a > 4
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[1]+QuestName[1][a]+QuestText[2]+I2S(IntCrit[1][a])+QuestText[3]+RewardName[1][a])
    if ( QuestCheck[1][a] == false ) then
    call DisplayTimedTextToForce(pf,45.0,"|c00FF0000Не выполнен|r")
    else
    call DisplayTimedTextToForce(pf,45.0,"|c0000FF00Выполнен|r")
    endif
    set a = a + 1
    endloop
            endif
            if bj_lastClickedFrame == B4Funct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( Button4, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                set a = 5
    loop
    exitwhen a > 8
    if ( Quest[2][b] == 3 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[1]+QuestName[2][b]+QuestText[2]+I2S(IntCrit[2][b])+QuestText[3]+RewardName[2][b])
    endif
    if ( Quest[2][b] == 4 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[4]+QuestName[2][b]+QuestText[5]+I2S(IntCrit[2][b])+QuestText[3]+RewardName[2][b])
    endif
    if ( Quest[2][b] == 5 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[1]+QuestName[2][b]+QuestText[2]+I2S(IntCrit[2][b])+QuestText[3]+RewardName[2][b])
    endif
    if ( QuestCheck[2][b] == false ) then
    call DisplayTimedTextToForce(pf,45.0,"|c00FF0000Не выполнен|r")
    else
    call DisplayTimedTextToForce(pf,45.0,"|c0000FF00Выполнен|r")
    endif
    set b = b + 1
    set a = a + 1
    endloop
            endif
            if bj_lastClickedFrame == B5Funct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( Button5, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                set a = 9
    loop
    exitwhen a > 11
    if ( Quest[3][b] == 6 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[7]+QuestName[3][b]+QuestText[8]+RewardName[3][b])
    endif
    if ( Quest[3][b] == 7 ) then
    call DisplayTimedTextToForce(pf,45.0,"|cffffcc00Задание номер:|r "+I2S(a))
    call DisplayTimedTextToForce(pf,45.0,QuestText[1]+QuestName[3][b]+QuestText[2]+I2S(IntCrit[3][b])+QuestText[3]+RewardName[3][b])
    endif
    if ( QuestCheck[3][b] == false ) then
    call DisplayTimedTextToForce(pf,45.0,"|c00FF0000Не выполнен|r")
    else
    call DisplayTimedTextToForce(pf,45.0,"|c0000FF00Выполнен|r")
    endif
    set b = b + 1
    set a = a + 1
    endloop
            endif
            if bj_lastClickedFrame == B6Funct then // проверяем кнопка ли фрейм
                call ClearTextMessages()
                call SetFrameSize( Button6, 0.027, 0.032 ) // Если да то уменьшаем (Типо анимация)
                set a = 0
                call DisplayTextToForce(pf,"Активированные |c00E4201Bхаосы|r")
    loop
    exitwhen a > ChaosMax
    if ( ChaosBOOL[a] == true ) then
    call DisplayTextToForce(pf,ChaosNAME[a])
    call DisplayTextToForce(pf,ChaosDISC[a])
    endif
    set a = a + 1
    endloop
            endif
        endif
    else
        set LMBTap = true //говорим что отпустили
        
        if bj_lastClickedFrame == HeroFunct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( HeroButton, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == FactFunct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( FactionButton, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == B3Funct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( Button3, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == B4Funct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( Button4, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == B5Funct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( Button5, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
        if bj_lastClickedFrame == B6Funct then //если последний нажатый фрейм кнопка
            set bj_lastClickedFrame = 0 //стираем из переменой последний фрейм
            call SetFrameSize( Button6, 0.029, 0.034 ) // восстанавливаем размер
            
        endif
    endif
    endif
    
    set p = p + 1
    endloop
endfunction
32
Netherstorm, ну попробуй, если ошибку не допустил, все будет. В триггере можно юзать вейты, т.к сетевые действия не мгновенные, может помоч при синхе или всяких багах.
15
quq_CCCP, а можно ли изменять локальную переменную локально, интересно, т.е. провести луп, если игрок нажал на кнопку вбить в локальную переменную что игрок который нажал на кнопку равен 1 условно. Начальное значение игрока будет нейтральный агрессор. А потом после проверки, сделать действие. У всех оно сработает, просто локал игрок который нажал кнопку его получит, код сработает на него. А у всех остальных код сработает точно также, такие же переменные, но значение вывода текста игроку будет равно нейтральному агрессору.
И вот интересно, сработает или нет
15
quq_CCCP, писал с телефона, поэтому может звучать запутанно.
Но что я имею ввиду:
Общий таймер, две локалки(pl - player, num - integer) срабатываемый каждую 0.1 сек, в котором действие loop на проверку GetLocalPlayer() == Player(a).
Внутри этой проверки проверка на нажатие, проверка на кнопку.
Начальные значения: num - 0, player - Player(PLAYER_NEUTRAL_AGRESSIVE).
Если нажата кнопка номер 1, тогда
set num = 1
И так как кнопка нажата
set pl = Player(a).
и так в конце endloop. Далее, идет уже проверка.
if ( num == 1 ) then
Отправить сообщение(общее действие) pl 1 сообщение под номером 1
32
Netherstorm, записать то в переменную можно локально, но не забывай у других игроков там другие данные, и их нужно как то синхронизировать.
32
Netherstorm, Выводить текст то можно локально, а вот всё остальное нет, к примеру выбор персонажа.
15
quq_CCCP, победа, спасибо огромное, перевод функции в триггер реально помог)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.