Доброй ночи, делал я тут функцию для разделения игроков по двум группам игроков для динамичного создания команд прямо во время игры, но столкнулся с такой проблемой что выполнение функции обрывается после первого прохода цикла, не выдавая даже дебаг сообщение о номере StLoop (call DisplayTextToForce( GetPlayersAll(), I2S(StLoop) ) ), может вы увидите ошибку?
function team_destribution takes nothing returns nothing
local integer StLoop
local integer EdLop
local integer a
local integer players_count
local integer half_players
call DisplayTextToForce( GetPlayersAll(), "team_destribution begined" )
set a = 0
set StLoop = 1
set EdLop = 12
call DisplayTextToForce( GetPlayersAll(), I2S(StLoop) )
call DisplayTextToForce( GetPlayersAll(), I2S(EdLop) )
loop -------<<<< отсюда выполнение функции прерывается
exitwhen StLoop > EdLop
if ( GetPlayerSlotState(ConvertedPlayer(StLoop)) == PLAYER_SLOT_STATE_PLAYING ) then
set players_count = ( players_count + 1 )
endif
call DisplayTextToForce( GetPlayersAll(), I2S(StLoop) )
set StLoop = StLoop + 1
endloop
call DisplayTextToForce( GetPlayersAll(), I2S(players_count) )
call DisplayTextToForce( GetPlayersAll(), "1" )
set half_players = players_count / 2
call DisplayTextToForce( GetPlayersAll(), "2" )
set StLoop = 1
set EdLop = half_players
loop
exitwhen StLoop > EdLop
call ForceAddPlayerSimple(ConvertedPlayer(StLoop), udg_player_group_1)
set udg_player_group_count[1] = udg_player_group_count[1] + 1
set udg_player_group_1_name[a] = ConvertedPlayer(StLoop)
set a = a + 1
set StLoop = StLoop + 1
endloop
call DisplayTextToForce( GetPlayersAll(), I2S(a) )
set StLoop = half_players + 1
set EdLop = players_count
set a = 0
loop
exitwhen StLoop > EdLop
call ForceAddPlayerSimple(ConvertedPlayer(StLoop), udg_player_group_2)
set udg_player_group_count[2] = udg_player_group_count[2] + 1
set udg_player_group_2_name[a] = ConvertedPlayer(StLoop)
set a = a + 1
set StLoop = StLoop + 1
endloop
call DisplayTextToForce( GetPlayersAll(), I2S(a) )
call DisplayTextToForce( GetPlayersAll(), "team_destribution ended" )
endfunction
UPD: поменял название переменной EndLoop на EdLop (да, называть переменную endloop такая себе идея), правда эффекта от этого никакого, теперь даже цикл не инициализируется :(
Принятый ответ
а хотя стоп
у players_count нету начального значения
вместо
у players_count нету начального значения
вместо
local integer players_count
local integer half_players
надо
local integer players_count = 0
local integer half_players = 0
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован nvc123
у players_count нету начального значения
вместо
Отредактирован Leviathan
у потока есть лимит операций которые он может выполнить
например если попробуешь сделать такой цикл то он не дойдёт до конца а прервётся примерно на 6000
Неужели всем переменным нужно обязательно задавать значение, при создании автоматически не выдается 0?
Спасибо, очень помогли, сам бы точно не догадался
когда надо а когда и так сработает
но советую всегда ручками прописывать начальное значение