Не работает изменение текста в мультиборде. Нигде не могу найти ошибку, по-этому прошу помощи здесь.
Создаю мультиборд для каждого игрока, затем показываю соответсвующий мультиборд локальному игроку.
Затем на кнопки (влево вправо) должны происходить действия:
На картинке отмечено, что изменение текста мультиборда не робит, в игре нет никаких изменений.
В чем может быть проблема?
Полный код
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 сек. Совершенно не понимаю.

Решил проблему
Я удалял триггер, который вызывал функцию инициализации мультибордов. Не понимаю как, но после завершения функции как-то падала вся система. Я крч ***** не понял, но очень интересно.

пойду спать
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
7
4 года назад
Отредактирован deleted_108535
0
if GetLocalPlayer()==твой игрок then
call MultiboardMinimize(mb, false) 
call MultiboardDisplay(mb, true) 
endif
0
19
4 года назад
0
Крч после инициализации мультибордов с ними ничего нельзя делать.
Хотя сразу после локального показа мультибордов они еще отвечают.

TheMilka, Нет, мне так не нужно. Проблема не в этом. (наверное)
0
7
4 года назад
0
KaneThaumaturge:
Крч после инициализации мультибордов с ними ничего нельзя делать.
Хотя сразу после локального показа мультибордов они еще отвечают.

TheMilka, Нет, мне так не нужно. Проблема не в этом. (наверное)
может по не правильному индексу обращаешься к таблице?

Если ты будешь запускать
call MultiboardMinimize(Mb[locPlayerNumber], false)
call MultiboardDisplay(Mb[locPlayerNumber], true)
без блока if GetLocalPlayer()==твой игрок then, то эти две функции будут срабатывать на всех игроков каждый раз при срабатывании.
0
19
4 года назад
Отредактирован KaneThaumaturge
0
TheMilka, я знаю. Эти функции вызываются для всех игроков, но при этом у них разный индекс. Т.к set locPlayerNumber = P2I(GetLocalPlayer()) возвращает индекс локального игрока.

Это нужно, чтобы каждому игроку отобразился свой мультиборд. Я сделал твоим вариантом с использованием цикла - ничего не поменялось.
        set i = 1
        set iEnd = players
        loop
            exitwhen i > iEnd
            if GetLocalPlayer()==I2P(i) then
                call MultiboardMinimize(Mb[i], false) 
                call MultiboardDisplay(Mb[i], true) 
            endif
            set i = i + 1
        endloop
Ничего не поменялось.
0
7
4 года назад
0
KaneThaumaturge:
TheMilka, я знаю. Эти функции вызываются для всех игроков, но при этом у них разный индекс. Т.к set locPlayerNumber = P2I(GetLocalPlayer()) возвращает индекс локального игрока.

Это нужно, чтобы каждому игроку отобразился свой мультиборд. Я сделал твоим вариантом с использованием цикла - ничего не поменялось.
        set i = 1
        set iEnd = players
        loop
            exitwhen i > iEnd
            if GetLocalPlayer()==I2P(i) then
                call MultiboardMinimize(Mb[i], false) 
                call MultiboardDisplay(Mb[i], true) 
            endif
            set i = i + 1
        endloop
Ничего не поменялось.
ошибка либо в индексе таблице, к которой ты обращаешься. либо ошибка в строках и колонках, к которым ты обращаешься.
0
19
4 года назад
0
TheMilka, в этом и проблема. Индекс правильный (проверено, не на словах). Да и в коде ты видишь, что там есть call MultiboardSetItemValueBJ(Mb[p], 1, 1, "Test"). А первая ячейка так и остается неизменной.

Да и индекс проверял на цикле. Изменял все мультиборды, которые инициализоровал. Ничего не изменялось.
0
7
4 года назад
0
KaneThaumaturge:
TheMilka, в этом и проблема. Индекс правильный (проверено, не на словах). Да и в коде ты видишь, что там есть call MultiboardSetItemValueBJ(Mb[p], 1, 1, "Test"). А первая ячейка так и остается неизменной.

Да и индекс проверял на цикле. Изменял все мультиборды, которые инициализоровал. Ничего не изменялось.
отпишись в дискорде, если можешь. будет проще взаимодействовать.
0
19
4 года назад
0
Крч, пока работает функция mcsInit, которая инициализирует мультиборды все работает. Как только она завершает свою работу, то мультиборды перестают отвечать.

Тип, если поставить в конце функции Wait(10), то все будет работать еще 10 сек.

TheMilka:
отпишись в дискорде, если можешь. будет проще взаимодействовать.
Скинь диск.
0
7
4 года назад
0
KaneThaumaturge:
Скинь диск.
I'm a MessLoserHaterUser#7777
1
28
4 года назад
Отредактирован PT153
1
Давно известно, что лидерборды и мультиборды нужно создавать после старта игры. Причём пишут, что нельзя даже после 0 секунд, должен быть хоть какой-нибудь промежуток, я использую 1 / 128.
Напоминаю, что индексы игроков начинаются с 0.
Проще всего сделать 1 мультиборд и менять текст локально.
0
19
4 года назад
Отредактирован KaneThaumaturge
0
Давно известно, что лидерборды и мультиборды нужно создавать после старта игры. Причём пишут, что нельзя даже после 0 секунд, должен быть хоть какой-нибудь промежуток, я использую 1 / 128.
Напоминаю, что индексы игроков начинаются с 0.
Это все известно и учтено.

Проще всего сделать 1 мультиборд и менять текст локально.
Да, так и делаю, переписываю под один мультиборд.

Переделал под один мультиборд, но проблема не исчезла. После завершения функции mcsInit мультиборд перестает отвечать и подавать признаки жизни. К нему нельзя обратиться, скрыть, изменить текст. Если поставить ожидание(10 сек например) в конце mcsInit, то мультиборд будет исправно работать еще 10 сек. Совершенно не понимаю.

Решил проблему
Я удалял триггер, который вызывал функцию инициализации мультибордов. Не понимаю как, но после завершения функции как-то падала вся система. Я крч ***** не понял, но очень интересно.

пойду спать
Загруженные файлы
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.