И так
Проблема заключается в следующем: у юнита А сбиваются поиски пути когда он пытается перелетит в розовую точку. Синяя область является набором непроходимых декораций. Юниту псведополёт даётся за счёт отключения поиска пути, функцией
SetUnitPathing(u,false)
У юнита В всё теже параметры и он отлично проходит до розовой точки если сначала сделать клик в желтую область, хотя поидее отдаётся приказ в непроходимую область. Ну и ладно.
Юнит С Имеет тип движения "летающий" из редактора объектов и вот только он адекватно выполняет отданный приказ.
А теперь вопросы:
Каким образом сделать юнита летающим на время полноценно? знаю точно поможет морф, но это не универсально уж очень, но можно 50 объектов задвоить, и создать бд, но делать такого мы не станем.
На момент полёта отключить варовское движение и включить своё? боюсь что тоже будет очень громозко.
Пробовал
MakeUnitFly(u) // через сфинкса или друида
и
UnitAddType(u,UNIT_TYPE_FLYING)
Но это ничего не даст.
В общем как мне быть, Как заставить юнита вести себя как летающий на время

Отлично, значит мы можем однозначно соотнести номер игрока с юнитом в массиве?
  • переключившихся в летающий режим героев добавляем в глобальную группу
  • запускаем таймер на малом периоде, что-то около 0.04, который перебирает всех в группе и выполняет смещение к взятой из массива точке со скоростью движения героя (тут можно экспериментировать с разными алгоритмами движения, главное что все данные мы можем легко получить из массива по номеру игрока которому принадлежит юнит)
  • отслеживаем все приказы для героев в состоянии полета и на основе этого запоминаем текущую точку куда юнит должен двигаться и прочие данные, записываем эти данные в массив
  • при отключении полета убираем героя из группы и перестаем отслеживать его приказы

А, т.е. в карте уже есть системы триггерного движения? Значит самое время унифицировать их в одну, чтобы одна и та же система управляла и полетом и физикой и другими видами триггерного движения.
`
ОЖИДАНИЕ РЕКЛАМЫ...
28
Раз А и В одинаковы, то когда отдаются приказ в розовую точку, отдавай приказ в жёлтую, а по достижению жёлтой в розовую.
21
PT153, и ему че для всех возможных юнитов и их путей так делать? ятп тут глобально решить надо для неограниченного кол-ва вариантов
33
Да таких областей, как я на примере нарисовал в принципе не существует, но поведение у псевдно летунов примерно всегда одинаковое, порой они не могут перелететь даже 2 клетки, сейчас решает методом клика под ноги, но это жуть как неудобно =(
28
и ему че для всех возможных юнитов и их путей так делать? ятп тут глобально решить надо для неограниченного кол-ва вариантов
Да тут всего два триггера.
С: Отдан приказ в точку
У: Приказ такой-то, и точка приказа там-то, и приказанный юнит находится там-то
Д: Отдать приказ туда-то

С: Юнит входит в такю-то область.
Д: Отдать приказ Идти туда-то.

Несколько таких проблем - небольшое бд областей только и всего. Я всё же думаю, что это лучше дублированию юнитов для морфа.

Всё зависит от количества таких юнитов. Если их парочка, то такая система не нужна, морфом проще. Если же их много, наоборот, система будет проще.

Не совсем понятно, как юнит может пойти в жёлтую область, если она окружена непроходимой.
UPD: а-аа, то есть приказ отдаётся в жёлтую, но юнит идёт в розовую, так?
33
Не совсем понятно, как юнит может пойти в жёлтую область, если она окружена непроходимой.
У юнит пафинг же отключен, к сожалению нельзя иметь бд областей в карте с процедурногенерируемым псевдорельефом, да ещё который меняется по ходу игры.
Есть вот вариант пустить на таймере цепочку из миникликов до конечного маршрута, после отлова первого приказа, но тогда придётся отбирать управление у игрока... но что то я не вижу перспектив у этого способа
24
Только полностью триггерное движение, только хардкор.
33
UPD: а-аа, то есть приказ отдаётся в жёлтую, но юнит идёт в розовую, так?
нет, если приказ отдаётся через 1 преграду то всё ок, а если больше, то юнит себя начинает вести буд-то он пеший с включенным пафингом
prog:
Только полностью триггерное движение, только хардкор.
что ж вы такой жестокий то =) надо просто юнита сделать летающим или адекватно отключить поиск пути
24
А вобще, было бы здорово увидеть настоящую постановку задачи, а не абстракцию - возможно можно найти другое решение.
33
Чтобы увидеть сие дикие проблемы достаточно подобрать пару пропеллеров в моей единственной карте про танчики, но вот прикладываю видео
На ютуб не стал заливать, думаю откроется. На видео я сначала делаю клик в нужно область и юнит начинает обходить согласно схеме поведения А, но на втором пролёте я клацаю в воду декор и всё уже нормально, но новички то не знаю что надо так клацать под ноги и у них герои летают куда попало, потому что ищут пути обхода, неясно зачем вообще..
Загруженные файлы
16
движок не обрабатывает случай проходимости отдельн ои считает юнита наземным, это никак не фиксится. Нужно превращать юнита полноценно в летающую альтернативу. Я даже на мемхаке еще не нашел перелкючатель этот чертов
Этот комментарий удален
21
а ворона ему дать в скрытом спеллбуке ситуацию не улучшало? бредовато, но раз после дачи-отдачи ворона у юнита можно менять высоту, мб что-то там отчасти на нём помечается в стиле "типа летает"
33
цитата самого себя "MakeUnitFly(u) через сфинкса или друида", друида-ворона разумеется я имел ввиду, просто забыл как называется, и в спеллбуке давал и в открытую давал и добавлял / удалял - результата никакого, движок считает юнита наземным
24
А отдельных юнитов которые должны получать этот псевдополет много одновременно на карте?
Если юнитов не слишком много, то вполне реально реализовать полностью триггерное движение в режиме псевдополета, особенно если это один герой на каждого игрока.
33
это способность одного героя, или похожим эффектом полёта обладают прыгающие способности, или применение через предмет, а героев одновременно всего 4 может быть, так что максимальное количество 4, какие то идеи? надеюсь не через блокираторы воздуха?
prog:
полностью триггерное движение в режиме псевдополета
Пока что это единственный выход который я вижу
В целом мне не сложно это сделать, но это вызовет огромные накладки с другими система триггерного движения, особенно с физическим движком, так что уйдёт неделя на полную отладку или вообще время впустую потрачу
24
Отлично, значит мы можем однозначно соотнести номер игрока с юнитом в массиве?
  • переключившихся в летающий режим героев добавляем в глобальную группу
  • запускаем таймер на малом периоде, что-то около 0.04, который перебирает всех в группе и выполняет смещение к взятой из массива точке со скоростью движения героя (тут можно экспериментировать с разными алгоритмами движения, главное что все данные мы можем легко получить из массива по номеру игрока которому принадлежит юнит)
  • отслеживаем все приказы для героев в состоянии полета и на основе этого запоминаем текущую точку куда юнит должен двигаться и прочие данные, записываем эти данные в массив
  • при отключении полета убираем героя из группы и перестаем отслеживать его приказы

А, т.е. в карте уже есть системы триггерного движения? Значит самое время унифицировать их в одну, чтобы одна и та же система управляла и полетом и физикой и другими видами триггерного движения.
Принятый ответ
33
отслеживаем все приказы для героев в состоянии полета и на основе этого запоминаем текущую точку куда юнит должен двигаться и прочие данные, записываем эти данные в массив
остальное то всё понятно изи, кроме процитированного, что значит отслеживать все приказы, запомнить точку то ладно, а движение реагировать на приказ смарт, и остановку на стоп, других приказов нет, я их удалил, остались только приказы способностей.... как вариант вижу скорость в 0 естественно обнулять чтобы не пошёл в полёте по приказу кастовать чё-нить, буду пробовать, че ещё делать-то. Но самое плохое это накладки на других системах, система хождения по второму уровню блоков / системы толчков и магнетизма
18
А если на время полёта прятать юнита, создавать (или перемещать заранее созданного) юнита-дамми с такими же характеристиками? А после полёта прятать дамми и перемещать спрятанного юнита к месту завершения полёта. Но нужно будет триггерно копировать все их изменения друг другу (в зависимости от того, какой юнит управляется на текущий момент).
33
Maniac_91, чё то не получиться, потому что нужно продолжать уметь применять способности, предметы,перезарядки их, и не терять контроль, иначе я бы сделал способность по другому "перелёт в точку", и полностью триггерно бы сдвигал юнитов. Жаль что мне не повторить с нуля полностью поиск варкрафта, тогда бы можно было чисто на своей системе движения сидеть.. пилю свою систему для полёта, чё уже делать, хотя о ней по факту никто и не узнает что она есть, просто это сильнейший костыль, ради такого плёвого момента, но если не сделать то много хороших идей остануться глючными =(
24
Или триггерный полет или морф в летающего, других вменяемых вариантов не вижу.
Но если делать триггерный полет, то лучше сразу объединять все системы триггерного движения в одну, чтобы один таймер двигал всех триггерно двигаемых на основе данных из массива, а данные чтобы заполнялись по разному в зависимости от текущих условий.
33
prog, тут всё нормально по поводу таймеров, он 1 и на нём система в 1500 строк
26
А что вообще за проблема, хочешь сделать вход на игровое поле, который пропускает только в одну сторону?
24
Bergi_Bear, Тогда я не понимаю в чем проблема добавить еще один вид триггерного движения, если все вычисления в одном месте, в худшем случае нужно будет добавить хранение информации о том, в каком режиме передвижения юнит сейчас находится и на основе этой информации игнорировать часть вычислений.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.