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