Добавлен
На этот раз моей задачей стало сравнение региона с коллекцией регионов (которая перебирается циклом), пока не найду нужный, НО в триггерах естественно нет сравнения по регионам.
Я использовал GetTriggeringRegion(), однако сравнивая регион, который был инициатором (Unit enter Region) с этим же регионом из массива я получаю false. Подскажите что не так?
Вот простой пример в котором также не работает это:
События:
  • Unit enter region1
Условия
Действия
  • (CS) if (GetTriggeringRegion() == region1) then
  • Вывести сообщение всем игрокам: "Работает"
  • (CS) endif
P.S. Сообщение не выводится когда юнит входит в регион

Никак. Регионы и области не сравниваются параметрически, то есть координатами, которые покрывают. Но можно узнать, находится ли точка в том или ином регионе. То есть, в твоем примере, проверить, находится ли юнит одновременно и в tempReg и в tempReg2.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
32
Есть ректы а есть регионы, это разные обьекты, рект - это то что ты в редакторе областей рисуешь на карте, области которые имеют координаты макс и мин x\y. На них не существуют событий, можно сказать это такие пассивные хендлы которые тупо хранять в себе координаты, а есть регионы - у них нет координат, но они заполняют ректы, при этом может не 1 а сразу множество ректов заполнять один регион, вот на регион и вешается событие что юнит вошел\или вышел. На гуи сопоставить их невозможно, только на jass, 2 массива, в одном ректы в другом регионы, номера ячеек для пар регион-рект одинаковы, ну а далее перебором по GetTriggeringRegion() находим в массиве тот регион на который сработало событие, а по номеру ячейки массива в котором лежит этот регион находим рект.
Все просто, но на гуи не это у вас не выйдет.
8
quq_CCCP:
только на jass, 2 массива, в одном ректы в другом регионы, номера ячеек для пар регион-рект одинаковы, ну а далее перебором по GetTriggeringRegion()
Я тоже сразу об этом подумал, что нужно так сделать, но проблема в том, что я не могу объявить глобальные переменные с регионами, потому что они должны быть перед кодом объявлены, поэтому затея с созданием коллекции регионов у меня провалилась.
PT153:
У него странный редактор, возможно, что у него либо нет JassHelper, либо он отключён.
Стандартный близардовский (работаю с ним, чтобы быть уверенным, что не будет проблем с совместимостью карт и тд).
Не хочу работать месяц над картой, а потом узнать, что навороченный редактор не дал мне запустить ее в варике. В общем такие опасения. Когда один раз врубал WE U, то мне сообщило, что карта типа устарела и предложил обновить ее для этого редактора, вот тогда я отказался и вернулся на стандартный редактор.
Никак. Регионы и области не сравниваются параметрически
Ему нужно выяснить, какая ячейка массива содержит сработанный регион (если ему это действительно нужно). А это как раз и делается параметрически, ведь нужно сравнить ссылки.
Все верно, это мне и нужно, пока регионы у меня не пересекаются, а значит можно проверять находится ли юнит в обоих регионах, как написал:
GetLocalPlayer:
То есть, в твоем примере, проверить, находится ли юнит одновременно и в tempReg и в tempReg2.
А вообще в идеале, нужно делать на будущее с учетом, что они могут пересечься, поэтому тогда лучше всего вариант: quq_CCCP - но я написал выше в чем у меня проблема с этим вариантам.
Пошел пробовать ваши идеи
28
Не хочу работать месяц над картой, а потом узнать, что навороченный редактор не дал мне запустить ее в варике. В общем такие опасения. Когда один раз врубал WE U, то мне сообщило, что карта типа устарела и предложил обновить ее для этого редактора, вот тогда я отказался и вернулся на стандартный редактор.
Редактор никак не влияет на совместимость, влияет только версия игры. Потому установи JNPG и аддон к нему FNWE, если нужна русификация.
А открывать сделанную в JNPG карту в стандартном редакторе нет смысла.
JNPG работает только в версиях до 1.27.
И да, если ты откроешь карту, сделанную в редакторе для предыдущей версии игры, в редакторе для новой версии, то сообщение о "старости" карты высветится в любом случае, а нажатие OK ничего не сломает. Главное не делать наоборот.

На какой версии карту делаешь?
8
PT153:
Редактор никак не влияет на совместимость, влияет только версия игры.
Помню в далеком 2012 году была проблема совместимости (много времени конечно прошло 6 лет не заходил), но помню, как карта не запустилась и пришлось изворачиваться, чтобы ее запустить. Поэтому это осталось в памяти.

а нажатие OK ничего не сломает. Главное не делать наоборот.
Это говорит о том, что если делаешь карту на версии 1.24, то можно потом будет запустить на:
1.24, 1.26, 1.27 и тд - а обратно не получится.

На какой версии карту делаешь?
На версии 1.24е (Еще с 2012 осталась), примерно в том же году вышла 1.26а. Классные времена были, Гарена была переполнена картами из варика.

Кстати вариант со сравнением юнита в регионе мне помог
Картинка с рабочим кодом
Буду думать на счет решения моей проблемы с глобальными переменными.
Всем спасибо!
Загруженные файлы
15
Ну на самом деле для этого не обязательно использовать Jass, в GUI есть проверка, находится ли юнит в области, именно области, а не в регионе, ее должно хватить.
PT153:
А открывать сделанную в JNPG карту в стандартном редакторе нет смысла.
Есть, как его может не быть? Игра обновляется, в новых версиях JNGP больше недоступен, а отказываться от появившихся возможностей как-то кощунственно. Соответственно поработав в JNGP на 1.30 и ниже, в более новых версиях карту уже не откроешь, а там могут появиться очень даже важные функции.
pAxsIs:
Все верно, это мне и нужно, пока регионы у меня не пересекаются, а значит можно проверять находится ли юнит в обоих регионах, как написал:
Ну по ссылке проверить в любом случае не получится. Дело в том, что событие "Юнит входит в регион" скрытно создает новый регион, в который включает указанную область, и получить доступ к этому региону из GUI мы никак не можем.
28
Есть, как его может не быть?
Той же версии смысла нет.
А если делать в JNPG с включённым UMSWE, на версиях выше 1.27, могут быть проблемы.
Дело в том, что событие "Юнит входит в регион" скрытно создает новый регион, в который включает указанную область, и получить доступ к этому региону из GUI мы никак не можем.
Я уже это объяснил выше и сказал, что ему нужно регистрировать свой регион, а не через область в ГУИ.
pAxsIs:
Кстати вариант со сравнением юнита в регионе мне помог
Есть вариант сделать это без создания региона каждый раз при срабатывании триггера.

Триггер инициализации.
CS: local integer a = 0
CS: loop
CS: exitwhen a == RegionAmount
CS: set Regions = CreateRegion()
CS: endloop
CS: call RegionAddRect(Regions[0], <нарисованный тобой rect>)
CS: ...
CS: call RegionAddRect(Regions[RegionAmount - 1], <нарисованный тобой rect>)
CS: call TriggerRegisterEnterRegion(<нужный триггер>, Regions[0], null)
CS: ...
CS: call TriggerRegisterEnterRegion(<нужный триггер>, Regions[RegionAmount - 1], null)

В JNPG + FNWE всё это можно сделать в GUI.

Если у тебя единый триггер для всех регионов, то зарегистрировать их можно также циклом, внутри триггера находить нужный сравнением с GetTriggeringRegion().

Я ректы в ландшафте не рисую, делаю их в коде. Так гораздо удобнее для кода.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.