Имеется простейший триггер и функция.
Условно каждые 5 секунд проверяется живы ли чуваки в отряде[1], [2], [3], если нет то вызвать функцию воскрешающую их. И все вроде бы работает, но только с первым отрядом в массиве, во второй и последующий номер массива юниты просто не залетают, и функция постоянно считает их погибшими.
Условно каждые 5 секунд проверяется живы ли чуваки в отряде[1], [2], [3], если нет то вызвать функцию воскрешающую их. И все вроде бы работает, но только с первым отрядом в массиве, во второй и последующий номер массива юниты просто не залетают, и функция постоянно считает их погибшими.
Функция получает область, угол и номер отряда, рандомно генерирует юнитов для отряда, очищает старый отряд, создает юнитов, вызывается функция графического эффекта, в отряд запихивается этот юнит, в общем для трех юнитов. Последний добавляется еще в группу с выпадающим лутом.
function spawned_unit_effect takes unit un returns nothing
call AddSpecialEffectTargetUnitBJ( "origin", un, "Abilities\\Spells\\Human\\ReviveHuman\\ReviveHuman.mdl" )
call DestroyEffect( GetLastCreatedEffectBJ() )
endfunction
function agi_small_camp_spawner takes rect position, real un_angle, integer x returns nothing
local integer rand
local integer array unitt
set rand = GetRandomInt(1, 2)
if (rand == 1) then
set unitt[1] = 'a000'
set unitt[2] = 'n000'
elseif (rand == 2) then
set unitt[1] = 'a000'
set unitt[2] = 'n000'
endif
if (IsUnitGroupDeadBJ(udg_otr_camp[x]) == true) then
call DisplayTextToForce( GetPlayersAll(), "Отряд мёртв - " + I2S(x) )
else
call DisplayTextToForce( GetPlayersAll(), "Отряд жив - " + I2S(x) )
endif
call GroupClear( udg_otr_camp[x] )
call CreateNUnitsAtLoc( 1, unitt[1], Player(PLAYER_NEUTRAL_AGGRESSIVE), PolarProjectionBJ(GetRectCenter(position), 120.00, ( un_angle + 45)), un_angle )
call spawned_unit_effect(GetLastCreatedUnit())
call GroupAddUnitSimple( GetLastCreatedUnit(), udg_otr_camp[x] )
call CreateNUnitsAtLoc( 1, unitt[1], Player(PLAYER_NEUTRAL_AGGRESSIVE), PolarProjectionBJ(GetRectCenter(position), 120.00, ( un_angle - 45)), un_angle )
call spawned_unit_effect(GetLastCreatedUnit())
call GroupAddUnitSimple( GetLastCreatedUnit(), udg_otr_camp[x] )
call CreateNUnitsAtLoc( 1, unitt[2], Player(PLAYER_NEUTRAL_AGGRESSIVE), GetRectCenter(position), un_angle )
call spawned_unit_effect(GetLastCreatedUnit())
call GroupAddUnitSimple( GetLastCreatedUnit(), udg_otr_camp[x] )
call GroupAddUnitSimple( GetLastCreatedUnit(), udg_otr_camp_reward[1] )
endfunction
Для первого отряда в массиве [1] все работает замечательно, а вот для второго [2] и выше юниты просто не заходят в отряд, и я никак не могу понять почему, вроде всё должно работать.
Вот так проходит первый спавн:
Вот так проходит первый спавн:
Так второй:
Принятый ответ
Возможно, нужно увеличить размер масива. В редакторе переменних
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован nazarpunk
upd. немного поэкскрементировал, и понял что нормально работает только для массива с номерами 0 и 1, в переменную с номером два и выше включительно юниты просто не добавляются
set udg_Group[index] = CreateGroup( )
Отредактирован Leviathan
PT153:
Ну и небольшой вопросец, не черевато ли делать слишком большой размер массива (100+)?
В гуи ты никак не поставишь выше максимального размера. Чревато только лишним созданием ненужных групп. То есть ты то можешь создать 100+ групп, но в игре ты используешь например всего 6, в итоге остальные группы просто так занимают память. Да и в принципе это банально занимает какую-то долю секунды для загрузки карты, так что лучше создавать по мере необходимости, а не про запас (конечно возможны наверное какие-то исключения)