Добавлен Sergant1000
Делал систему при которой юнит находящийся в радиусе от "юнит1" и в опр. группе, отправлялся в в опр. локацию, если их массивы совпадают.
"юнит1" - строится игроком по этому я сделал триггер через таймер.
"юнит1" - строится игроком по этому я сделал триггер через таймер.
Проблема в том что не работает функция "1_C1" точнее не работает она при вызове ее из функции "1_2". Нужна помощь.
триггер
function 1_C1 takes unit ruf returns integer
local integer i=0
local integer p
loop
exitwhen Zone[i]==null
if (IsUnitInGroup(ruf, group[i])==true ) then
set p=i
endif
set i=i+1
endloop
return p
endfunction
local integer i=0
local integer p
loop
exitwhen Zone[i]==null
if (IsUnitInGroup(ruf, group[i])==true ) then
set p=i
endif
set i=i+1
endloop
return p
endfunction
function 1_2 takes nothing returns nothing
local integer p=GetPlayerId(GetOwningPlayer(GetEnumUnit()))
local integer i=1_C1(GetEnumUnit())
if ( IsUnitInGroup(GetEnumUnit(), group[i]) == true ) then
call IssuePointOrderLoc(udg_OilTank, "move", Location(GetRectCenterX(Zone[i]), GetRectCenterY(Zone[i])))
call GroupRemoveUnit(group[i], GetEnumUnit())
endif
endfunction
local integer p=GetPlayerId(GetOwningPlayer(GetEnumUnit()))
local integer i=1_C1(GetEnumUnit())
if ( IsUnitInGroup(GetEnumUnit(), group[i]) == true ) then
call IssuePointOrderLoc(udg_OilTank, "move", Location(GetRectCenterX(Zone[i]), GetRectCenterY(Zone[i])))
call GroupRemoveUnit(group[i], GetEnumUnit())
endif
endfunction
function 1_1 takes nothing returns nothing
call ForGroupBJ( GetUnitsInRangeOfLocAll(300, GetUnitLoc(GetEnumUnit())), function 1_2 )
endfunction
call ForGroupBJ( GetUnitsInRangeOfLocAll(300, GetUnitLoc(GetEnumUnit())), function 1_2 )
endfunction
function 1_A takes nothing returns nothing
local integer i=0
loop
exitwhen i>10
call ForGroupBJ( GetUnitsOfPlayerAndTypeId(Player(i), 'юнит1'), function 1_1 )
set i=i+1
endloop
endfunction
local integer i=0
loop
exitwhen i>10
call ForGroupBJ( GetUnitsOfPlayerAndTypeId(Player(i), 'юнит1'), function 1_1 )
set i=i+1
endloop
endfunction
function InitTrig_1 takes nothing returns nothing
set gg_trg_1= CreateTrigger()
call TriggerRegisterTimerEvent(gg_trg_1, 1, true)
call TriggerAddAction( gg_trg_1, function 1_A )
endfunction
set gg_trg_1= CreateTrigger()
call TriggerRegisterTimerEvent(gg_trg_1, 1, true)
call TriggerAddAction( gg_trg_1, function 1_A )
endfunction
Принятый ответ
кажись вот она
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Ред. Buulichkaa
Функция InitTrig_1 - инициализация триггера где
call TriggerRegisterTimerEvent(gg_trg_1, 1, true) - является таймером и исполняется каждую 1 секунду
(как использовать ForGroupBJ по другому еще не научился, потому использую его как есть)
local integer i=1_C1(GetEnumUnit()) - заносим в переменную i целочисленное из функции 1_C1 .
if ( IsUnitInGroup(GetEnumUnit(), group[i]) == true ) then если пикнутый юнит в группе с массивом i
call IssuePointOrderLoc(GetEnumUnit(), "move", Location(GetRectCenterX(Zone[i]), GetRectCenterY(Zone[i]))) - отправить юнита в локацию с массивом i.
udg_OilTank это GetEnumUnit() просто до него исполнение кода не доходит поэтому оставил как есть.
call GroupRemoveUnit(group[i], GetEnumUnit()) -соответственно удалить юнита из группы с массивом i
эта функция должна проверять есть ли юнит в конкретной группе и возвратить номер массива. но она не определяет в какой группе юнит в связи с этим не возвращает целочисленно.
local integer i=0
local integer p - переменная специально не установлена
loop
exitwhen Zone[i]==null - работает нормально т.к. похожие условия работают в других функциях, Zone - регион
if (IsUnitInGroup(ruf, group[i])==true ) then - сравниваем есть ли юнит в конкретной группе(но не нработает)
set p=i - вот тут то и инициализируем переменную(соответственно не работает из за условия)
endif
set i=i+1
endloop
return p -возвращает целочисленную.
endfunction
немедленно
и написать нормальный код
определить в какой группе юнит можно и намного проще
например через атач структуры
и тут бж везде
код не оптимален
утечки
что должен делать этот триггер
это спелл или система
короче составь нормальное описание
и прочитай статьи
у тебя утечки и бж
и не надо начинать с гуи)
начинай с джасса
Buulichkaa, пользоваться хешем нехочу. а вот про кастом, это уже интересно.
nvc123, чтобы начинать с джасса надо начинать с гуи, ты же когда по большему на горшок садишся сначало штаны снимаешь, а потом откладываешь личинку, а не наоборот.
Sergant1000, неправильный пример
А на гуи все "когда-то" да творили...