Добавлен
Делал систему при которой юнит находящийся в радиусе от "юнит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
Функция 1С_1 написана выше чем 1_2 поэтому ты не можешь вызвать функцию 1С_1 из 1_2
Поменяй их местами
Или внимательно прочитай вот это
5
silence_AZ, ты все перепутал, лучше сначала сам прочитай внимательно ту статью. Если сделать как ты сказал, то компилятор даже сохранить не даст.
Sergant1000, расставил бы ты хоть комментарии, где что выполняется, и вообще, если из гуи конвертируешь, мог бы оптимизировать немного, и утечки убрать. По поводу вопроса - может быть цикл прерывается из за большого кол-ва выполняемых функций? Условие закрытия цикла (Zone[i]==null) выглядит сомнительно. Много у тебя таких ректов?
9
Timoxxx:
silence_AZ, ты все перепутал, лучше сначала сам прочитай внимательно ту статью. Если сделать как ты сказал, то компилятор даже сохранить не даст.
Sergant1000, расставил бы ты хоть комментарии, где что выполняется, и вообще, если из гуи конвертируешь, мог бы оптимизировать немного, и утечки убрать. По поводу вопроса - может быть цикл прерывается из за большого кол-ва выполняемых функций? Условие закрытия цикла (Zone[i]==null) выглядит сомнительно. Много у тебя таких ректов?
Обращаться можно только к функции, которая записана выше данной (т.е. создана раньше). Т.е. если функция 1_2 будет ниже чем 1С_1 - то обращаться к 1_2 из 1С_1 нельзя.
Ой туплю =)), прошу прощения
Только вопрос : Как ты собрался вызвать функцию 1С_1 из 1_2 если в функции 1_2 нет действия вызова функции 1С_1?
5
Т.е. если функция 1_2 будет ниже чем 1С_1 - то обращаться к 1_2 из 1С_1 нельзя.
Выше ты написал полностью наоборот. К 1_2 из 1С_1 и так нет обращений.
silence_AZ:
Ой туплю =)), прошу прощения
Только вопрос : Как ты собрался вызвать функцию 1С_1 из 1_2 если в функции 1_2 нет действия вызова функции 1С_1?
local integer i=1_C1(GetEnumUnit())
9
Просто добавь в 1_2 :
call 1С_1(юнит которого берет функция)
5
silence_AZ:
Просто добавь в 1_2 :
call 1С_1(юнит которого берет функция)
-_-
И что из этого будет?
Совершенно ничего
9
Timoxxx:
Т.е. если функция 1_2 будет ниже чем 1С_1 - то обращаться к 1_2 из 1С_1 нельзя.
Выше ты написал полностью наоборот. К 1_2 из 1С_1 и так нет обращений.
silence_AZ:
Ой туплю =)), прошу прощения
Только вопрос : Как ты собрался вызвать функцию 1С_1 из 1_2 если в функции 1_2 нет действия вызова функции 1С_1?
local integer i=1_C1(GetEnumUnit())
Да но 1С_1 берет юнит а откуда ему взяться из 1_2 если он там не указывается?\
Я думаю именно в этом и проблема
5
съезд знатоков
Может что по делу скажешь? Ты же умнее любого из нас!
Не надоело еще плюсы огребать?)
Да но 1С_1 берет юнит а откуда ему взяться из 1_2 если он там не указывается?\
Я думаю именно в этом и проблема
"GetEnumUnit()" для чего тогда?
28
silence_AZ, короче тебе реально надо статьи читать
ты даже основ не знаешь
Buulichkaa, да просто боги кода собрались
Sergant1000, отладка где?
9
Buulichkaa:
съезд знатоков
Я не знаток,я вобще ландшафтер , и недавно начал изучать джасс потому что для меня это нашлось интересным.
Я пишу то что возможно поможет,так сказать пытаюсь помочь. Если мне удастся помочь то я наберусь немного опыта для решения таких ситуаций,не так ли?
28
и я 1 не понял зачем такой убогий способ если можно просто через юзер дату атачить инт
9
Timoxxx:
"GetEnumUnit()" для чего тогда?
А где ты видишь что бы "GetEnumUnit()" ссылался в 1С_1?
28
вердикт:
код переписать,автора отправить в статьи
silence_AZ, ты нуб?
GetEnumUnit() возвращает юнита
1С_1() берёт юнита
ты вобще такой бред пишешь
9
nvc123:
вердикт:
код переписать,автора отправить в статьи
silence_AZ, ты нуб?
GetEnumUnit() возвращает юнита
1С_1() берёт юнита
ты вобще такой бред пишешь
Я не знаток,я вобще ландшафтер , и недавно начал изучать джасс потому что для меня это нашлось интересным.
Я пишу то что возможно поможет,так сказать пытаюсь помочь. Если мне удастся помочь то я наберусь немного опыта для решения таких ситуаций,не так ли?
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
Чтобы оставить комментарий, пожалуйста, войдите на сайт.