Доброго времени суток.
Пожалуйста помогите найти ошибку. Всегда возвращает 1(или похожее) что в общем то в дальнейшем считается как первый игрок(красный)
Функция должна выбрать рандомного игрока из играющих людей и чтобы в массиве AccEmpPlayer[номер рандомного игрока] был false(Нет)

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

Должно работать:
function GetRandomPlayerIndex takes nothing returns integer
    set udg_Buf_A = 0
    set bj_forLoopAIndex=0 //red
    set bj_forLoopAIndexEnd=10  //light blue
    loop
        exitwhen(bj_forLoopAIndex>bj_forLoopAIndexEnd)
        if(GetPlayerSlotState(Player(bj_forLoopAIndex))==PLAYER_SLOT_STATE_PLAYING)and(GetPlayerController(Player(bj_forLoopAIndex)))==MAP_CONTROL_USER)and(udg_AccEmpPlayer[bj_forLoopAIndex]==false)then
                set udg_PlayersPlay[udg_Buf_A]=Player(bj_forLoopAIndex)
                set udg_Buf_A=(udg_Buf_A+1)
        endif
    set bj_forLoopAIndex=bj_forLoopAIndex+1
    endloop
    set udg_Random=GetRandomInt(0,udg_Buf_A)
    set udg_RndPlayer=udg_PlayersPlay[udg_Random]
    return udg_RndPlayer
endfunction
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
23
5 лет назад
1
потому что не правильно ты получаеш рандом...
судя у тя прибавляет +1 если данный игрок найден. Значит рандом должен
GetRandomInt(1,udg_Buf_A) - 1 возврашает 0 если только 1 красный играет, а если красный и синый то 0,1
0
22
5 лет назад
0
Были ли проверки в многопользовательском режиме? Может компьютер просто находит лишь одного играющего человека в однопользовательском режиме.
И что такое udg_AccEmpPlayer?
0
23
5 лет назад
0
построеник кода убивает которые не нужны конверт и прочего
0
22
5 лет назад
0
Кстати есть функция ForcePickRandomPlayer. Например
function forceUsersFilter takes nothing returns boolean
  return PLAYER_SLOT_STATE_PLAYING == GetPlayerSlotState(GetFilterPlayer()) and MAP_CONTROL_USER == GetPlayerController(GetFilterPlayer())
endfunction

function getRandomPlayer takes nothing returns player
  local force f = CreateForce()
  call ForceEnumPlayers(f, Condition(forceUsersFilter))
  return ForcePickRandomPlayer(f)
endfunction
Не проверял.
0
23
5 лет назад
0
Zahanc, у тя утекает force
0
22
5 лет назад
0
Это пример а не готовая наработка.
0
9
5 лет назад
Отредактирован DarKRs
0
pro100master:
потому что не правильно ты получаеш рандом...
судя у тя прибавляет +1 если данный игрок найден. Значит рандом должен
GetRandomInt(1,udg_Buf_A) - 1 возврашает 0 если только 1 красный играет, а если красный и синый то 0,1
Данное исправление не помогло.
Zahanc:
Были ли проверки в многопользовательском режиме? Может компьютер просто находит лишь одного играющего человека в однопользовательском режиме.
Да по сети тесты проводились
И что такое udg_AccEmpPlayer?
Игрок являющийся принимающей стороной. И должен быть выбран другой рандомный игрок который ею не является. Только 1(один) игрок может быть принимающей стороной.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.