Добавлен KaneThaumaturge
Не работает изменение текста в мультиборде. Нигде не могу найти ошибку, по-этому прошу помощи здесь.
Создаю мультиборд для каждого игрока, затем показываю соответсвующий мультиборд локальному игроку.
Создаю мультиборд для каждого игрока, затем показываю соответсвующий мультиборд локальному игроку.
Затем на кнопки (влево вправо) должны происходить действия:
На картинке отмечено, что изменение текста мультиборда не робит, в игре нет никаких изменений.
В чем может быть проблема?
Полный код
library MbClanSelection uses OtherFunc
globals
private multiboard array Mb
private integer array maxI
private integer array maxJ
private integer array saveSelectI
private integer array selectJ
private string array cellText
private trigger array trgMCSleft
private trigger array trgMCSright
private trigger array trgMCSup
private trigger array trgMCSdown
private trigger array trgMCSok
integer array csPlayerClan
boolean array csIsLeader
boolean array csIsReady
endglobals
function mcsLeftClick takes nothing returns nothing
local integer p
local integer o
set p = P2I(GetTriggerPlayer())
set o = GetPlayerOrder(p)
if (GetLocalPlayer()==I2P(p))then
call StartSound(gg_snd_MouseClick1)
endif
call MultiboardSetItemValueKT(Mb[p], selectJ[p], o + 2, color[0] + "[|r " + cellText[(o + 2) * maxJ[p] + selectJ[p]] + color[0] + " ]|r")
if (selectJ[p] == 2 ) then
set selectJ[p] = 4
else
set selectJ[p] = (selectJ[p] - 1)
endif
call MultiboardSetItemValueKT(Mb[p], selectJ[p], o + 2, color[p] + "[|r " + cellText[(o + 2) * maxJ[p] + selectJ[p]] + color[p] + " ]|r")
endfunction
function mcsRightClick takes nothing returns nothing
local integer p
local integer o
set p = P2I(GetTriggerPlayer()) //1
set o = GetPlayerOrder(p) //1
if (GetLocalPlayer()==I2P(p))then
call StartSound(gg_snd_MouseClick1)
endif
call MultiboardSetItemValueBJ(Mb[p], 1, 1, "Test")//test не робит
call MultiboardSetItemValueKT(Mb[p], selectJ[p], o + 2, color[0] + "[|r " + cellText[(o + 2) * maxJ[p] + selectJ[p]] + color[0] + " ]|r")
if (selectJ[p] == 4) then
set selectJ[p] = 2
else
set selectJ[p] = (selectJ[p] + 1)
endif
call MultiboardSetItemValueKT(Mb[p], selectJ[p], o + 2, color[p] + "[|r " + cellText[(o + 2) * maxJ[p] + selectJ[p]] + color[p] + " ]|r")
call MultiboardMinimize(Mb[p], true)//test не робит
call MultiboardDisplay(Mb[p], false)//test не робит
call dbgT("run ok")//test
endfunction
function mcsInit takes nothing returns nothing
local integer i
local integer iEnd
local integer j
local integer jEnd
local integer p
local integer p2
local integer locPlayerNumber
set i = 1
set iEnd = players
loop
exitwhen i > iEnd
set p = GetPlayerNumber(i)
set maxI[p] = players + 5
set maxJ[p] = 4
set csPlayerClan[p] = 0
set csIsLeader[p] = false
set csIsReady[p] = false
set selectJ[p] = 2
set i = i + 1
endloop
set i = 1
set iEnd = players
loop
exitwhen i > iEnd
set p = GetPlayerNumber(i)
set Mb[p] = CreateMultiboard()
call MultiboardSetRowCount(Mb[p], maxI[p])
call MultiboardSetColumnCount(Mb[p], maxJ[p])
call MultiboardSetTitleText(Mb[p], color[0] + "Выбор клана")
call MultiboardMinimize(Mb[p], true)
call MultiboardDisplay(Mb[p], false)
call MultiboardSetItemStyleKT(Mb[p], 0, 0, true, false)
call MultiboardSetItemWidthKT(Mb[p], 1, 0, 10.00)
call MultiboardSetItemWidthKT(Mb[p], 2, 0, 6.00)
call MultiboardSetItemWidthKT(Mb[p], 3, 0, 6.00)
call MultiboardSetItemWidthKT(Mb[p], 4, 0, 6.00)
call MultiboardSetItemValueKT(Mb[p], 1, 1, color[18] + "Имя игрока")
call MultiboardSetItemValueKT(Mb[p], 2, 1, color[18] + "Клан")
call MultiboardSetItemValueKT(Mb[p], 3, 1, color[18] + "Лидер клана")
call MultiboardSetItemValueKT(Mb[p], 4, 1, color[18] + "Готовность")
call MultiboardSetItemWidthKT(Mb[p], 1, maxI[p] - 1 , 32.00)
call MultiboardSetItemWidthKT(Mb[p], 1, maxI[p], 32.00)
call MultiboardSetItemValueKT(Mb[p], 1, maxI[p] - 1 , "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ")
call MultiboardSetItemValueKT(Mb[p], 1, maxI[p], "Для готовности нажмите " + color[18] + "ESC|r или наберите в чате " + color[18] + "-ok|r.")
set j = 1
set jEnd = players
loop
exitwhen j > jEnd
set p2 = GetPlayerNumber(j)
set cellText[(j + 2) * maxJ[p] + 2] = color[17] + "Нет|r"
set cellText[(j + 2) * maxJ[p] + 3] = color[17] + GetBooleanValue(csIsLeader[p2]) + "|r"
set cellText[(j + 2) * maxJ[p] + 4] = color[20] + "Не готов|r"
call MultiboardSetItemValueKT(Mb[p], 1, j + 2, color[p2] + GetPlayerName(I2P(p2)))
if p2 == p then
call MultiboardSetItemValueKT(Mb[p], 2, j + 2, color[p] + "[|r " + cellText[(j + 2) * maxJ[p] + 2] + color[p] + " ]|r")
call MultiboardSetItemValueKT(Mb[p], 3, j + 2, color[0] + "[|r " + cellText[(j + 2) * maxJ[p] + 3] + color[0] + " ]|r")
call MultiboardSetItemValueKT(Mb[p], 4, j + 2, color[0] + "[|r " + cellText[(j + 2) * maxJ[p] + 4] + color[0] + " ]|r")
else
call MultiboardSetItemValueKT(Mb[p], 2, j + 2, color[13] + "[|r " + cellText[(j + 2) * maxJ[p] + 2] + color[13] + " ]|r")
call MultiboardSetItemValueKT(Mb[p], 3, j + 2, color[13] + "[|r " + cellText[(j + 2) * maxJ[p] + 3] + color[13] + " ]|r")
call MultiboardSetItemValueKT(Mb[p], 4, j + 2, color[13] + "[|r " + cellText[(j + 2) * maxJ[p] + 4] + color[13] + " ]|r")
endif
set j = j + 1
endloop
set trgMCSleft[p] = CreateTrigger()
call TriggerRegisterPlayerEvent(trgMCSleft[p], I2P(p), EVENT_PLAYER_ARROW_LEFT_DOWN)
call TriggerAddAction(trgMCSleft[p], function mcsLeftClick)
set trgMCSright[p] = CreateTrigger()
call TriggerRegisterPlayerEvent(trgMCSright[p], I2P(p), EVENT_PLAYER_ARROW_RIGHT_DOWN)
call TriggerAddAction(trgMCSright[p], function mcsRightClick)
/*set trgMCSup = CreateTrigger()
call TriggerRegisterPlayerEvent(trgMCSup, I2P(1), EVENT_PLAYER_ARROW_UP_DOWN)
call TriggerAddAction(trgMCSup, function mcsUpClick)
set trgMCSdown = CreateTrigger()
call TriggerRegisterPlayerEvent(trgMCSdown, I2P(1), EVENT_PLAYER_ARROW_DOWN_DOWN)
call TriggerAddAction(trgMCSdown, function mcsDownClick)
set trgMCSinfo = CreateTrigger()*/
set i = i + 1
endloop
set locPlayerNumber = P2I(GetLocalPlayer()) //возвращает 1
call MultiboardMinimize(Mb[locPlayerNumber], false) //mb[1]
call MultiboardDisplay(Mb[locPlayerNumber], true) //mb[1]
endfunction
endlibrary
Карта (Startup settings/MbClanSelection) - скачать.
Принятый ответ
Давно известно, что лидерборды и мультиборды нужно создавать после старта игры. Причём пишут, что нельзя даже после 0 секунд, должен быть хоть какой-нибудь промежуток, я использую 1 / 128.
Напоминаю, что индексы игроков начинаются с 0.
Это все известно и учтено.
Проще всего сделать 1 мультиборд и менять текст локально.
Да, так и делаю, переписываю под один мультиборд.
Переделал под один мультиборд, но проблема не исчезла. После завершения функции mcsInit мультиборд перестает отвечать и подавать признаки жизни. К нему нельзя обратиться, скрыть, изменить текст. Если поставить ожидание(10 сек например) в конце mcsInit, то мультиборд будет исправно работать еще 10 сек. Совершенно не понимаю.
Решил проблему
Я удалял триггер, который вызывал функцию инициализации мультибордов. Не понимаю как, но после завершения функции как-то падала вся система. Я крч ***** не понял, но очень интересно.
пойду спать
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован PT153
Напоминаю, что индексы игроков начинаются с 0.
Проще всего сделать 1 мультиборд и менять текст локально.
Отредактирован KaneThaumaturge
while{ цикл сколько раз надо
set p = GetPlayer(i)
set m = CreateMultiboard();
MultiboardDisplay(m, false);
MultiboardDisplay(m, GetLocalPlayer() == p)
set i = i + 1;
}
А потом каждому игроку под локал игрока показываем