Доброй ночи, делал я тут функцию для разделения игроков по двум группам игроков для динамичного создания команд прямо во время игры, но столкнулся с такой проблемой что выполнение функции обрывается после первого прохода цикла, не выдавая даже дебаг сообщение о номере 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 нету начального значения
вместо
local integer players_count
local integer half_players
надо
local integer players_count = 0
local integer half_players = 0
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
Примерно через 6-10 секунд после инициализации карты
Загруженные файлы
28
а хотя стоп
у players_count нету начального значения
вместо
local integer players_count
local integer half_players
надо
local integer players_count = 0
local integer half_players = 0
Принятый ответ
1
Данная функция написана в коде карты, а вызывается через триггер
Загруженные файлы
28
и осторожнее с большими триггерами
у потока есть лимит операций которые он может выполнить
например если попробуешь сделать такой цикл то он не дойдёт до конца а прервётся примерно на 6000
local integer i = 0
loop
exitwhen i==100000
	 call DisplayTextToForce( GetPlayersAll(), I2S(i) )
	set i = i + 1
endloop
1
nvc123, действительно, после этого все заработало
Неужели всем переменным нужно обязательно задавать значение, при создании автоматически не выдается 0?
Спасибо, очень помогли, сам бы точно не догадался
28
Leviathan, да тут как повезёт
когда надо а когда и так сработает
но советую всегда ручками прописывать начальное значение
Чтобы оставить комментарий, пожалуйста, войдите на сайт.