И так, есть триг
Инициализация Мультиборда
function Trig_MB_Init_Actions takes nothing returns nothing
local integer c = 0
local integer r = 0
local integer i = 0
local multiboarditem mbitem = null
    // ///////////////////////////////////////////////////////////////////
    loop
        exitwhen i > 5
            set udg_Multiboards[i] = CreateMultiboard()
            
            call MultiboardSetRowCount(udg_Multiboards[i], 15)
            call MultiboardSetColumnCount(udg_Multiboards[i], 11)
            call MultiboardDisplay(udg_Multiboards[i], false)
        
        if ( i < 3 ) then
            call MultiboardSetTitleText(udg_Multiboards[i], "Команда 1")
        else
            call MultiboardSetTitleText(udg_Multiboards[i], "Команда 2")
        endif
        set i = i + 1
    endloop        
/////////////////////////////////////////////////////////////////////
//вся мультиборда
set i = 0
    loop
    exitwhen i > 5
    set c = 0
    loop
        exitwhen c > 10
        set r = 0
        loop 
            exitwhen r > 14
            set mbitem = MultiboardGetItem (udg_Multiboards[i], r, c)
            call MultiboardSetItemStyle (mbitem, false, false)
            call MultiboardSetItemWidth (mbitem, 0.0)
            set r = r +1
        endloop
        set c = c +1
    endloop
// работа со строками
    set r = 0
    loop
        exitwhen r > 14
        set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 0)
        call MultiboardSetItemWidth (mbitem, .02)
        call MultiboardSetItemStyle (mbitem, true, false)

        set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 1)
        call MultiboardSetItemWidth (mbitem, .09)
        call MultiboardSetItemStyle (mbitem, true, false)

        set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 2)
        call MultiboardSetItemWidth (mbitem, .05)
        call MultiboardSetItemStyle (mbitem, true, false)

        set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 3)
        call MultiboardSetItemWidth (mbitem, .05)
        call MultiboardSetItemStyle (mbitem, true, false)

        if r > 0 and r < 7 then
            set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 0)
            call MultiboardSetItemValue (mbitem, I2S(r) )
            if GetPlayerSlotState(Player(r-1)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerController(Player(r-1)) == MAP_CONTROL_USER then 
                set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 1)
                call MultiboardSetItemValue (mbitem, GetPlayerName(Player(r-1)) )
                set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 2)
                call MultiboardSetItemValue (mbitem, "   " + I2S(udg_Income[r]) )
                set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 3)
                call MultiboardSetItemValue (mbitem, " " + R2S(udg_CPM[r]) )
            else
                set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 1)
                call MultiboardSetItemValue (mbitem, "|c00959697Не играет|r" )
                set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 2)
                call MultiboardSetItemValue (mbitem, "   -" )
                set mbitem = MultiboardGetItem (udg_Multiboards[i], r, 3)
                call MultiboardSetItemValue (mbitem, "   -" )
            endif
        endif        

    set r = r +1
    endloop

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 0, 0)
    call MultiboardSetItemValue (mbitem, "№")
    set mbitem = MultiboardGetItem (udg_Multiboards[i], 0, 1)
    call MultiboardSetItemValue (mbitem, "Имя игрока")
    set mbitem = MultiboardGetItem (udg_Multiboards[i], 0, 2)
    call MultiboardSetItemValue (mbitem, "Доход")
    set mbitem = MultiboardGetItem (udg_Multiboards[i], 0, 3)
    call MultiboardSetItemValue (mbitem, "Расход")
// работа со столбцами    
    set c = 0
    loop
        exitwhen c > 10
if c > 0 then        
        set mbitem = MultiboardGetItem (udg_Multiboards[i], 9, c)
        call MultiboardSetItemWidth (mbitem, .01)
        call MultiboardSetItemStyle (mbitem, false, true)

        set mbitem = MultiboardGetItem (udg_Multiboards[i], 11, c)
        call MultiboardSetItemWidth (mbitem, .01)
        call MultiboardSetItemStyle (mbitem, false, true)
endif
if c < 7 then
        set mbitem = MultiboardGetItem (udg_Multiboards[i], 12, c)
        call MultiboardSetItemWidth (mbitem, .035)
        call MultiboardSetItemStyle (mbitem, false, true)

        set mbitem = MultiboardGetItem (udg_Multiboards[i], 13, c)
        call MultiboardSetItemWidth (mbitem, .0355)
        call MultiboardSetItemStyle (mbitem, true, false)
endif       
        set c = c + 1
    endloop
    set mbitem = MultiboardGetItem (udg_Multiboards[i], 9, 0)
    call MultiboardSetItemWidth (mbitem, .05)

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 11, 0)
    call MultiboardSetItemWidth (mbitem, .05)

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 8, 1)
    call MultiboardSetItemWidth (mbitem, .085)
    call MultiboardSetItemStyle (mbitem, true, false)    
    call MultiboardSetItemValue (mbitem, "Здоровье базы")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 8, 2)
    call MultiboardSetItemWidth (mbitem, .06)
    call MultiboardSetItemStyle (mbitem, true, false)    
    call MultiboardSetItemValue (mbitem, "команды 1")
  
    set mbitem = MultiboardGetItem (udg_Multiboards[i], 10, 1)
    call MultiboardSetItemWidth (mbitem, .085)
    call MultiboardSetItemStyle (mbitem, true, false)    
    call MultiboardSetItemValue (mbitem, "Здоровье базы")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 10, 2)
    call MultiboardSetItemWidth (mbitem, .06)
    call MultiboardSetItemStyle (mbitem, true, false)    
    call MultiboardSetItemValue (mbitem, "команды 2")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 12, 0)
    call MultiboardSetItemIcon (mbitem, "ReplaceableTextures\\CommandButtons\\BTNTheCaptain.blp")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 12, 1)
    call MultiboardSetItemIcon (mbitem, "ReplaceableTextures\\CommandButtons\\BTNRifleman.blp")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 12, 2)
    call MultiboardSetItemIcon (mbitem, "ReplaceableTextures\\CommandButtons\\BTNGoblinSapper.blp")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 12, 3)
    call MultiboardSetItemIcon (mbitem, "ReplaceableTextures\\CommandButtons\\BTNUndeadAirBarge.blp")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 12, 4)
    call MultiboardSetItemIcon (mbitem, "ReplaceableTextures\\CommandButtons\\BTNDemolisher.blp")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 12, 5)
    call MultiboardSetItemIcon (mbitem, "ReplaceableTextures\\CommandButtons\\BTNSeigeEngine.blp")

    set mbitem = MultiboardGetItem (udg_Multiboards[i], 12, 6)
    call MultiboardSetItemIcon (mbitem, "ReplaceableTextures\\CommandButtons\\BTNCancel.blp")

    set i = i +1
endloop    
/////////////////////////////////////////////////////////////////////
    call TriggerExecute( gg_trg_MB_Show )
    call EnableTrigger( gg_trg_MB_Update )
    call MultiboardReleaseItem (mbitem)
    
    set mbitem = null
endfunction

//===========================================================================
function InitTrig_MB_Init takes nothing returns nothing
    set gg_trg_MB_Init = CreateTrigger(  )
    call TriggerRegisterTimerEventSingle( gg_trg_MB_Init, 0.01 )
    call TriggerAddAction( gg_trg_MB_Init, function Trig_MB_Init_Actions )
endfunction

Попытка отображения мультиборда
function Trig_MB_Show_Actions takes nothing returns nothing
local integer i = 0
    loop
        exitwhen i > 5
            call MultiboardDisplay (udg_Multiboards[i], GetLocalPlayer() == Player(i))           
        set i = i + 1
    endloop
endfunction

//===========================================================================
function InitTrig_MB_Show takes nothing returns nothing
    set gg_trg_MB_Show = CreateTrigger(  )
    call TriggerAddAction( gg_trg_MB_Show, function Trig_MB_Show_Actions )
endfunction
Вопрос, почему скрываются все мультиборды, хотя должен отображаться для каждого свой.
P.S: триг екзкутся из другого трига, который сраатывает через 0,01 после старта игры , udg_Multiboards - массив мультибордов, точно не пустой.
Сам GetLocalPlayer я проверил, возвращает он все правильно. Значит дело в скрытии мультиборды.

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

Мда. Жасс такой жасс.
Как оказалось если пытатся отобразить уже отображенный МБ - варик его скроет... Отсюда и проблемы пошли.
Решение: Сначала все скрываем, а потом локально отображаем и никак иначе.
У меня косяк был в том, что в периодике мб показывался локально, и периодик срабатывал раньше отображения.
0
29
10 лет назад
0
А тут сперва все хайдятся и потом включается нужный. Возможно в этом проблема
0
25
10 лет назад
0
alexprey, как видишь и у меня и в статье все хайдится, а потом пытаюсь показывать нужный, однако рзультата 0.
1
29
10 лет назад
Отредактирован alexprey
1
Ancient, нет, у тебя для каждого игрока вызывается по 5 Display во втором триггере. А должен 1
0
28
10 лет назад
0
alexprey, ты курнул?
там для каждого игрока показывается 1
Ancient, попробуй сделать через иф
if(GetLocalPlayer() == Player(i)){
MultiboardDisplay (udg_Multiboards[i],true)
}
и добавь отладку
мб второй триггер вообще не запускается
и я 1 не понимаю зачем делать второй триггер?
мб проще было бы сделать функцию Show?
0
29
10 лет назад
0
nvc123, а я уверен вот в чем. Когда мы вызываем MultiboardDisplay он устанавливает текущий мультибоард дефолтным и показывает его или прячет. Отсюда и проблема. А вот если сделать как ты предложил тогда возможно будет норм.
0
25
10 лет назад
0
Мда. Жасс такой жасс.
Как оказалось если пытатся отобразить уже отображенный МБ - варик его скроет... Отсюда и проблемы пошли.
Решение: Сначала все скрываем, а потом локально отображаем и никак иначе.
У меня косяк был в том, что в периодике мб показывался локально, и периодик срабатывал раньше отображения.
Принятый ответ
0
29
10 лет назад
0
Ancient, нет, ты не прав, причину я описал выше, по своим догадкам.
При вызове MultiboardDisplay варик текущим мультибоардом устанавливает тот что в аргументе и соответсвенно скрывает его или показывает в зависимости от аргумента. Тоесть если до этого был показан один мультибоард, а ты пытаешься скрыть другой, то первый исчезнет и будет показан второй. Отсюда решение вида
MultiboardDisplay(m[i], GetLocalPlayer() == player[i])
Не работает как хотелось бы. Так что проблема в не понимании работы метода, а не в Jass
Чтобы оставить комментарий, пожалуйста, войдите на сайт.