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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
silence_AZ, нет
ты пишешь бред и этим самым вредишь
т.к. это путает людей
9
nvc123:
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
Где тут написано что функция чтото возвращает?
nvc123:
silence_AZ, нет
ты пишешь бред и этим самым вредишь
т.к. это путает людей
А разве задача любого из нас отвечать на коменты?
Или все же на вопрос?
5
Я пишу то что возможно поможет,так сказать пытаюсь помочь.
Лучше себе помоги. =) без обид)
Где тут написано что функция чтото возвращает?
Это тут причем вообще?
А разве задача любого из нас отвечать на коменты?
Или все же на вопрос?
Тут никто на вопросы не отвечает. Только посылают статьи читать.
21
Timoxxx, Потому что все со статей учились, а не с вопросов.
9
Timoxxx:
Я пишу то что возможно поможет,так сказать пытаюсь помочь.
Лучше себе помоги. =) без обид)
Себе я помогаю пытаюсь решить этот вопрос
Где тут написано что функция чтото возвращает?
Это тут причем вообще?
Как мне сказал nvc123 что оно возвращает (GetEnumUnit())
А разве задача любого из нас отвечать на коменты?
Или все же на вопрос?
Тут никто на вопросы не отвечает. Только посылают статьи читать.
В данный момент да=))
Buulichkaa:
Timoxxx, Потому что все со статей учились, а не с вопросов.
А может и не все?=)) кто знает?
21
silence_AZ, Те, кто учились не со статей, так и не выучились.
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, этот код надо удалить
немедленно
и написать нормальный код
определить в какой группе юнит можно и намного проще
например через атач структуры
и тут бж везде
код не оптимален
утечки
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.