И так, есть триг
Инициализация Мультиборда
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 я проверил, возвращает он все правильно. Значит дело в скрытии мультиборды.
Принятый ответ
Мда. Жасс такой жасс.
Как оказалось если пытатся отобразить уже отображенный МБ - варик его скроет... Отсюда и проблемы пошли.
Решение: Сначала все скрываем, а потом локально отображаем и никак иначе.
У меня косяк был в том, что в периодике мб показывался локально, и периодик срабатывал раньше отображения.
Как оказалось если пытатся отобразить уже отображенный МБ - варик его скроет... Отсюда и проблемы пошли.
Решение: Сначала все скрываем, а потом локально отображаем и никак иначе.
У меня косяк был в том, что в периодике мб показывался локально, и периодик срабатывал раньше отображения.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован alexprey
там для каждого игрока показывается 1
Ancient, попробуй сделать через иф
мб второй триггер вообще не запускается
и я 1 не понимаю зачем делать второй триггер?
мб проще было бы сделать функцию Show?
Как оказалось если пытатся отобразить уже отображенный МБ - варик его скроет... Отсюда и проблемы пошли.
Решение: Сначала все скрываем, а потом локально отображаем и никак иначе.
У меня косяк был в том, что в периодике мб показывался локально, и периодик срабатывал раньше отображения.
При вызове MultiboardDisplay варик текущим мультибоардом устанавливает тот что в аргументе и соответсвенно скрывает его или показывает в зависимости от аргумента. Тоесть если до этого был показан один мультибоард, а ты пытаешься скрыть другой, то первый исчезнет и будет показан второй. Отсюда решение вида