Добавлен
Делал систему при которой юнит находящийся в радиусе от "юнит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
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
function 1_1 takes nothing returns nothing
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
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
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
17
страно, что сложного прочитать код.
Функция InitTrig_1 - инициализация триггера где
call TriggerRegisterTimerEvent(gg_trg_1, 1, true) - является таймером и исполняется каждую 1 секунду
Функция 1_А - действие триггер в котором работает луп от 0 до 10 пикая юнитов принадлежащих игроку по коду юнит1'
(как использовать ForGroupBJ по другому еще не научился, потому использую его как есть)
Функция 1_1 пикает юнитов в радиусе 300 от юнита в функции 1_А
Функция 1_2 предпринимает действия над юнитами из функции 1_1 , а конкретно:
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
И так подошли к самому главному, функция 1_C1 - берет юнита возвращает целочисленное.
эта функция должна проверять есть ли юнит в конкретной группе и возвратить номер массива. но она не определяет в какой группе юнит в связи с этим не возвращает целочисленно.
function 1_C1 takes unit ruf returns integer
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
28
Sergant1000, этот код надо удалить
немедленно
и написать нормальный код
определить в какой группе юнит можно и намного проще
например через атач структуры
и тут бж везде
код не оптимален
утечки
21
Sergant1000, Если тебе надо прикрепить индекс массива к юниту, то сделай это через через хеш-таблицу или custom value при добавлении юнита в группу... делов то
17
nvc123, пример в студию о великий гуру. я над этим как многие выражаются "ГОВНОКОДОМ" уже недели две корплю, начиная от гуи и заканчивая тем что есть. И пример пожалуйста того что вы называете "НОРМАЛЬНЫМ КОДОМ"
28
Sergant1000, напиши как именно он должен работать
что должен делать этот триггер
это спелл или система
короче составь нормальное описание
и прочитай статьи
у тебя утечки и бж
и не надо начинать с гуи)
начинай с джасса
17
nvc123, описал в 25м посту.
Buulichkaa, пользоваться хешем нехочу. а вот про кастом, это уже интересно.
nvc123, чтобы начинать с джасса надо начинать с гуи, ты же когда по большему на горшок садишся сначало штаны снимаешь, а потом откладываешь личинку, а не наоборот.
28
Sergant1000, в 25 посте ни черта не написано
Sergant1000, неправильный пример
21
Sergant1000, в смысле, что вы несете? Когда поймешь джасс гуи не нужен.
А на гуи все "когда-то" да творили...
Проблема решена? Будете использовать CV?
17
в 25 посте 261 символ из которых 243 сугубо по делу
Buulichkaa, да, повсей видимости буду переделывать, но хотелось бы узнать почему проверка не срабатывает.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.