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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
9
Buulichkaa:
silence_AZ, Те, кто учились не со статей, так и не выучились.
А вы не подумали что те кто учился не со статей и написали эти статьи?
21
Итак, полный разбор полетов -_\\ Я не могу понять что нужно автору, объясни мне, что надо сделать и я подскажу как лучше.
быдлокод
function 1_C1 takes unit ruf returns integer
//ИНФОРМАТИВНОЕ НАЗВАНИЕ ФУНКЦИИ??
local integer i=0
local integer p
// ПЕРЕМЕННАЯ НЕ ИНИЦИАЛИЗИРОВАНА
// ПРИ НЕКОТОРЫХ УСЛОВИЯХ ЕЙ ТАК И НЕ УСТАНОВИТСЯ ЗНАЧЕНИЕ                                    
loop
exitwhen Zone[i]==null
//ЧТО ТАКОЕ Zone[i] ДАЖЕ БОГ НЕ ЗНАЕТ
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
//ОПЯТЬ? 1_2 КЛАСС! Я СРАЗУ ПОНЯЛ ЧТО ОНО ДЕЛАЕТ
local integer p=GetPlayerId(GetOwningPlayer(GetEnumUnit()))
local integer i=1_C1(GetEnumUnit())
if ( IsUnitInGroup(GetEnumUnit(), group[i]) == true ) then
//ФУНКЦИЯ GetEnumUnit() ВЫЗЫВАЕТСЯ УЖЕ ТРЕТИЙ РАЗ, МОЖНО БЫЛО ЗАНЕСТИ ЕЁ В ПЕРЕМЕННУЮ
call IssuePointOrderLoc(udg_OilTank, "move", Location(GetRectCenterX(Zone[i]), GetRectCenterY(Zone[i])))
//ПОЧЕМУ НЕ КООРДИНАТЫ?
//ЧТО ТАКОЕ udg_OilTank
//УТЕЧКА ТОЧКИ?
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
silence_AZ, это было давно и неправда, а вам уже дают все на блюдечке, так что сейчас не время задавать вопросы. Тем более глупые.
Этот комментарий удален
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, неправильный пример
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.