Всем привет.
написал небольшой Мултиборд но столкнулся с проблемой
call MultiboardSetRowCount(udg_MB, i+2)
кол-во строк в мултиборде неправильно работает
local integer i = 0
loop
exitwhen i >= 10
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerSlotState(Player(i)) != PLAYER_SLOT_STATE_EMPTY then
call MultiboardSetRowCount(udg_MB, i + 2)
endif
set i = i + 1
endloop
функция простая, сканирует всех игроков в цикле
и проверяет кто играет и у кого пустой слот
по какой-то причине MultiboardSetRowCount игнорирует PLAYER_SLOT_STATE_EMPTY
например у меня в 1. 2. 3. 4 слоте стоит компьютер
я нахожусь в 5 слоте
и если кто-то решил поменять слот например на 7, 8 любой другой то MultiboardSetRowCount добавляет последующих игроков в мултиборд
игнорируя PLAYER_SLOT_STATE_EMPTY
native MultiboardSetRowCount takes multiboard lb, integer count returns nothing
в ней нет ничего такого чтобы она не проверяла PLAYER_SLOT_STATE_EMPTY
но почему-то она игнорирует.

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

Возможно ошибка в коде, попробуй
local integer l = 0
local integer i = 0
loop
exitwhen i >= 10
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerSlotState(Player(i)) != PLAYER_SLOT_STATE_EMPTY then
call MultiboardSetRowCount(udg_MB, l + 2)
set l = l + 1
endif
set i = i + 1
endloop
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
8
1 год назад
Отредактирован Centyrion
0
грешу на то что в цикле нельзя установить кол-во строк таблицы
только присвоить переменную которая проверит кто играет и кто нет и установить кол-во строк
1
13
1 год назад
Отредактирован Borodach
1
Возможно ошибка в коде, попробуй
local integer l = 0
local integer i = 0
loop
exitwhen i >= 10
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerSlotState(Player(i)) != PLAYER_SLOT_STATE_EMPTY then
call MultiboardSetRowCount(udg_MB, l + 2)
set l = l + 1
endif
set i = i + 1
endloop
Принятый ответ
0
8
1 год назад
0
Borodach:
пробовал и так, нивкакую не хочет
перестроил полностью функцию
проблема была и в этом и в другом
MultiboardSetRowCount мне оно понадобилось чтобы не указать переменную которая проверяет кол-во игроков которые играют и так далее
чтобы было все понятно

создал цикл и поставил в начале функции
постоянно забываю про порядок выполнения кода
если не соблюдать порядок строк оно и не заработает
0
8
1 год назад
Отредактирован Centyrion
0
сдаюсь

loop
exitwhen k >= F_MaxPlayers()
if GetPlayerSlotState(Player(k)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerSlotState(Player(k)) != PLAYER_SLOT_STATE_EMPTY then
call MultiboardSetRowCount(udg_MB, k + 2)
endif
set k = k + 1
endloop
что же ему не хватает

он все равно добавляет эти иконки
попробую по другому

если указать в качестве строки переменную типа массив с порядковым номером игрока и через эту нативку установить кол-во строк то оно не сработает....так как функция не умеет считать кол-во игроков

или 2 вариант...когда цикл достиг конца и условие выполнилось.. взять и добавить булевую переменную в качестве остановки цикла
простым языком цикл будет выполнятся до тех пор пока не сработает условие выхода из цикла а условие не сработает так как она добавит только лишнее
или 3 вариант в качестве выхода из цикла указать кол-во игроков и дальше ручками править

Возможно ошибка в коде, попробуй
local integer l = 0
local integer i = 0
loop
exitwhen i >= 10
if GetPlayerSlotState(Player(i)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerSlotState(Player(i)) != PLAYER_SLOT_STATE_EMPTY then
call MultiboardSetRowCount(udg_MB, l + 2)
set l = l + 1
endif
set i = i + 1
endloop
этот вариант сработал

но
loop
exitwhen k >= F_MaxPlayers()
if GetPlayerSlotState(Player(k)) == PLAYER_SLOT_STATE_PLAYING and GetPlayerSlotState(Player(k)) != PLAYER_SLOT_STATE_EMPTY then
set r = r + 1
call MultiboardSetRowCount(udg_MB, r + 1) //не + 2 а + 1 так как цикл уже запущен
endif
set k = k + 1
endloop

но надо перестроить и другие функции.

10 строк кода вместо одной функции и 1 переменная )) оригинально ))

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