Доброго времени суток всем. Как обычно расписываю важные пункты заранее:
  1. Я не профессиональный коддер
  2. Я не профессиональный пользователь Редактора W3
  3. Я не понимаю Jass и прочие виды кода
  4. Я прошу помочь в самом глупом формате мира
Описание вопроса:
У меня есть Действие в триггере, которое мне подсказал пользователь rsfghd, для того чтобы сократить "утечки" (Код ниже вырванный из всего контекста, я просто хочу в нем разобраться полностью.)
call GroupEnumUnitsInRect( udg_PlayGroup, bj_mapInitialPlayableArea, udg_Temp)
Я понимаю его в таком виде: Он закидывает определенные объекты по логической переменной "Temp", в ранее созданную переменную отряда "PlayGroup", на территории игровой области "mapInitialPlayableArea". Возможно формулировка не до конца идеальна, но суть вроде работы я понимаю.
Я хочу более обширно понять следующее:
  1. Как можно ссылаться на ранее созданную область? Вместо "mapInitialPlayableArea"
  2. Как можно указать понятие "В диапазоне (RANGE ранее реальной переменной) от ранее созданной точки переменной". Вместо "mapInitialPlayableArea"
Дополнительная информация:
  1. Я изучал статьи, но я слишком глуп видимо, ибо не мог догнать какой код нужно туда вбить, дабы получить необходимый результат;
  2. Я пробовал засовывать разные методы Вместо "mapInitialPlayableArea" (методом тыка). Но результат был отрицательный
  3. Пожалуйста, можете дать ответ в формате "Это - делает это, Вместо "mapInitialPlayableArea""
Заранее всем спасибо за помощь!
Уважаемые Администраторы сайта - не блокируйте мой Вопрос из-за того что здесь может показаться что несколько вопросов. Но это одна тема вопроса, просто нелогично будет с моей стороны создавать каждый отдельно :(

Принятый ответ

Привет! Поковырялся чуток, прикладываю скрин, видео и карту. Буквально: скачиваешь редактор JNGP это продвинутый редактор позволяющий без вазелина с маслом вкатиться в жасс. Чтобы ссылаться на ранее созданную область вместо "mapInitialPlayableArea" необходимо создать область(кто бы мог подумать xd) , создать триггер гуишный, в нём создать например событие юнит входит в область, выбрать эту область, затем конвертировать в жасс и найти это событие, в нем найти параметр rect у функции(в скобочках между запятыми, в видосе подробнее), рекомендую для этого JNGP , он собственно показывает где какой параметр у функций, плюс в нем можно собсна посмотреть все функции чо они делают чо умеют и тогдалее, для оптимизации.
Чтобы выбрать всех в диапазоне нужно будет использовать другую нативку:
Вместо g мелкой вставляешь какую хочешь группу, если не то вставишь то JNGP тебе подскажет в чём ты ошибся и что надо исправить. вместо filter пишешь свой фильтр, ну там в видосе подробнее.
(Это для области)	call GroupEnumUnitsInRange(g,GetRectCenterX(gg_rct________________000),GetRectCenterY(gg_rct________________000),900,Condition(function filter) )
(Это для юнита)    	call GroupEnumUnitsInRange(g,GetUnitX(gg_unit_hfoo_0000),GetUnitY(gg_unit_hfoo_0000),900,Condition(function filter) )
Полный код, разбираемый в видео:
function filter takes nothing returns boolean
    call BJDebugMsg("сработало!"+GetUnitName(GetFilterUnit()))
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Flare\\FlareCaster.mdl",GetFilterUnit(),"origin"))
    return GetOwningPlayer(GetFilterUnit()) == Player(0)
endfunction

function Trig_____________________________________001_Actions takes nothing returns nothing
    local group g = CreateGroup()
    
    call GroupEnumUnitsInRect(g,gg_rct________________000,Condition(function filter) ) 
    call GroupEnumUnitsInRange(g,GetRectCenterX(gg_rct________________000),GetRectCenterY(gg_rct________________000),900,Condition(function filter) )
    call GroupEnumUnitsInRange(g,GetUnitX(gg_unit_hfoo_0000),GetUnitY(gg_unit_hfoo_0000),900,Condition(function filter) )
    
    call DestroyGroup(g)
    set g = null
    call BJDebugMsg("сработало!")
endfunction

//===========================================================================
function InitTrig_____________________________________001 takes nothing returns nothing
    set gg_trg_____________________________________001 = CreateTrigger(  )
    call TriggerAddAction( gg_trg_____________________________________001, function Trig_____________________________________001_Actions )
endfunction
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
8 месяцев назад
0
Неуж-то так сложно посмотреть нотацию?
native GroupEnumUnitsInRect takes group whichGroup, rect r, boolexpr filter returns nothing
udg_Temp не логическая, а boolexpr. От использования которых лучше отказаться.
Как можно ссылаться на ранее созданную область?
Все области лежат в переменных. Проще всего на гуй сделать триггер с нужной областью, превратить в текст и скопировать переменную.
Пожалуйста, можете дать ответ в формате "Это - делает это, Вместо "mapInitialPlayableArea""
Можно же просто открыть первое попавшееся заклинание и посмотреть, как там перебирают юнитов.
0
2
8 месяцев назад
0
Неуж-то так сложно посмотреть нотацию?
Всегда слышу только осуждение) Неужели никто не умеет общаться по-человечески, а не приравнивать всех к самому себе. :)
Я читал аннотацию, читал вики по JASS, но есть люди, которые не имеют такое прекрасное мышление как у Вас. Это я вам как Маркетолог говорю.
nazarpunk:
udg_Temp не логическая, а boolexpr. От использования которых лучше отказаться.
Если это просто придирка к фразе "логическая" - то считаю она неуместна. Ибо я заранее уже извинился за свое толкование.
nazarpunk:
От использования которых лучше отказаться.
Почему стоит отказаться?
nazarpunk:
Все области лежат в переменных. Проще всего на гуй сделать триггер с нужной областью, превратить в текст и скопировать переменную.
При том что я не великий пользователь редактора (повторяюсь уже 2/3 раз) - я попытался понять о чем вы с затруднением.
Я уже указывал область через гуи "gg_rct_...". Но область у меня записывается в переменную, а не ранее созданная на карте. И я также указывал "udg_newpoint" Вместо "mapInitialPlayableArea". Триггер не выполнял поиск по новой области.
nazarpunk:
Можно же просто открыть первое попавшееся заклинание и посмотреть, как там перебирают юнитов.
Посмотрел, ситуация в том что эта способность вообще не задействует "GroupEnumUnitsInRect". А задействует другие функции. Это если мы продолжаем придираться к мелочам.
Но, заранее вам дам ответ на ваше следующее сообщение "Сложно посмотреть нотацию по другим функциям?" - да как бы не сложно, просто я сюда пришел получить помощь от умных ребят. Дабы закрыть тот момент когда Я САМОСТОЯТЕЛЬНО не могу закрыть этот вопрос долгие часы. Или на данном сайте можно задавать вопросы только "гиппер сложные"?
Такое чувство будто я зарабатываю на хобби, в котором меня ругают что я глуповат -_-"
0
29
8 месяцев назад
0
Всегда слышу только осуждение) Неужели никто не умеет общаться по-человечески, а не приравнивать всех к самому себе. :)
К сожелению, после сотого вопроса наподобие "как вычислить процент от числа на гуи без утечек" режим осуждения включается по умолчанию.
Если это просто придирка к фразе "логическая" - то считаю она неуместна.
А я считаю, что если не использовать общепринятую терминологию, то можно внести в беседу много путаницы. Кому оно нужно?
Почему стоит отказаться?
В большинстве случаев, и так будет перебор юнитов в группе. В нём и можно отсеять ненужных юнитов. А так, получается двойная работа - сначала вызываем функцию для каждого юнита, а потом вызываем функцию для кадого оставшегося юнита. Ну и не забываем, что булекспр это хендл со всеми вытекающими.
Но область у меня записывается в переменную, а не ранее созданная на карте.
Всем областям, из редактора областей будет присвоена переменная. Так что у всех области будут записаны в переменную.
Триггер не выполнял поиск по новой области.
Можно посмотреть на код для начала?
просто я сюда пришел получить помощь от умных ребят
Эх, умных ребят придётся долго ждать...
Или на данном сайте можно задавать вопросы только "гиппер сложные"?
Можно любые. Правда и ответы на них будут соответствующие.
Такое чувство будто я зарабатываю на хобби, в котором меня ругают что я глуповат -_-"
Здесь всех ругают, в ётом вы не одиноки.
0
2
8 месяцев назад
0
Можно посмотреть на код для начала?
Вот тут я "видимо" неверно указываю область и далее триггер не закидывает юнитов в группу.
Хотя если я не использую call GroupEnumUnitsInRect и использую простое действие - то все работает.
Сильно не обращайте внимание зачем мне это нужно, это просто "вырванный" кусок из всего триггера.
Но даже этот вырванный не работает. (событие Каждые 10 сек)
Загруженные файлы
0
29
8 месяцев назад
0
zpxo, гуй перемешанный с личным сценарием. Видимо всё-таки прийдётся подождать умных ребят.
1
4
8 месяцев назад
1
Здесь можно получить ответ =>>Ссылка<<=
1
10
8 месяцев назад
Отредактирован Keparis9
1
Привет! Поковырялся чуток, прикладываю скрин, видео и карту. Буквально: скачиваешь редактор JNGP это продвинутый редактор позволяющий без вазелина с маслом вкатиться в жасс. Чтобы ссылаться на ранее созданную область вместо "mapInitialPlayableArea" необходимо создать область(кто бы мог подумать xd) , создать триггер гуишный, в нём создать например событие юнит входит в область, выбрать эту область, затем конвертировать в жасс и найти это событие, в нем найти параметр rect у функции(в скобочках между запятыми, в видосе подробнее), рекомендую для этого JNGP , он собственно показывает где какой параметр у функций, плюс в нем можно собсна посмотреть все функции чо они делают чо умеют и тогдалее, для оптимизации.
Чтобы выбрать всех в диапазоне нужно будет использовать другую нативку:
Вместо g мелкой вставляешь какую хочешь группу, если не то вставишь то JNGP тебе подскажет в чём ты ошибся и что надо исправить. вместо filter пишешь свой фильтр, ну там в видосе подробнее.
(Это для области)	call GroupEnumUnitsInRange(g,GetRectCenterX(gg_rct________________000),GetRectCenterY(gg_rct________________000),900,Condition(function filter) )
(Это для юнита)    	call GroupEnumUnitsInRange(g,GetUnitX(gg_unit_hfoo_0000),GetUnitY(gg_unit_hfoo_0000),900,Condition(function filter) )
Полный код, разбираемый в видео:
function filter takes nothing returns boolean
    call BJDebugMsg("сработало!"+GetUnitName(GetFilterUnit()))
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Human\\Flare\\FlareCaster.mdl",GetFilterUnit(),"origin"))
    return GetOwningPlayer(GetFilterUnit()) == Player(0)
endfunction

function Trig_____________________________________001_Actions takes nothing returns nothing
    local group g = CreateGroup()
    
    call GroupEnumUnitsInRect(g,gg_rct________________000,Condition(function filter) ) 
    call GroupEnumUnitsInRange(g,GetRectCenterX(gg_rct________________000),GetRectCenterY(gg_rct________________000),900,Condition(function filter) )
    call GroupEnumUnitsInRange(g,GetUnitX(gg_unit_hfoo_0000),GetUnitY(gg_unit_hfoo_0000),900,Condition(function filter) )
    
    call DestroyGroup(g)
    set g = null
    call BJDebugMsg("сработало!")
endfunction

//===========================================================================
function InitTrig_____________________________________001 takes nothing returns nothing
    set gg_trg_____________________________________001 = CreateTrigger(  )
    call TriggerAddAction( gg_trg_____________________________________001, function Trig_____________________________________001_Actions )
endfunction
Загруженные файлы
Принятый ответ
1
2
8 месяцев назад
1
Привет! Поковырялся чуток, прикладываю скрин, видео и карту.
Доброго времени суток!
Спасибо ОГРОМНОЕ за помощь! Все разжевали и показали. Как по мне проделана большая работа!
Не ожидал такой обратной связи) С утра встал и залип на час)
Был бы рад получить приглашение на Discord сервер, дабы присоединиться. А так еще раз спасибо!
1
29
8 месяцев назад
1
А так еще раз спасибо!
Если помогло, то выберите лучший ответ.
Был бы рад получить приглашение на Discord сервер, дабы присоединиться.
Ссылка на дискорд есть в меню на главной.
Загруженные файлы
Чтобы оставить комментарий, пожалуйста, войдите на сайт.