Начал делать мультишот, но возникла проблема. Можно использовать способность ракеты, но там менее реалистично получаются выстрелы, да и стреляют даже за спину. Поэтому решил сделать свой.
Проблема вот в чем, когда юнит начинает стрелять или кастовать в одного противника, можно определить вектор. Относительно этого сложно подобрать формулу подбора всех юнитов. Не силен в косинусах, синусах, тем более в полярных координатах. Приложен пример в картинке. Помогите.

вот система Raised
раскрыть
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
27
JaBeN_Симфер, даже не знаю. Просто проверить надо, иногда кажется ошибки где-то. С проверочными молниями вот все проверил, норм. А скалярное произведение векторов иногда не робит, если боком стать. Может кажется, только 99% норм срабатывает. Я так думаю. что мне кажется.
Хорошо, мб я тупанул и работает норм в карте E6. А вот в карте E3 что то не так робит =( пример с хабра. Ну он работает (85% на 15%), но бывает и не работает. В обзорку в 180 град не попадает.
Вот конусные заклинания, добавил изменения, теперь молниями отображается ширина обзора кастера (будет понятно, кто попадает). Ничего сильно не исправлял, добавил молнии
Загруженные файлы
32
Steal nerves, мб пригодится?
function Is2cc takes real r, real cx, real cy, real px1, real py1, real px2, real py2 returns boolean
        local real dx = 0.00 
        local real dy =  0.00 
        local real a =  0.00 
        local real b = 0.00  
        local real c = 0.00 
        
        set px1 = px1 - cx
        set py1 = py1 - cy
        set px2 = px2 - cx
        set py2 = py2 - cy
        set dx = px2 - px1
        set dy = py2 - py1
        set a = dx * dx + dy * dy
        set b = 2.00 * ( px1 * dx + py1 * dy )
        set c = px1 * px1 + py1 * py1 - r * r
        
        if ( -b < 0.00 ) then
            return ( c < 0.00 )
        elseif ( -b < ( 2.00 * a ) ) then
            return ( ( 4.0 * a * c - b * b ) < 0 )
        endif
        return ( a + b + c < 0 )
    endfunction
Определяет пересекает ли вектор окружность или нет.
Юзал для ИИ чтобы определяет попадает ли путь юнита в зону агра врагов...
27
Все-таки в 4 варианте были ошибки. Я не правильно код сделал. Мне помог Doc исправить ошибки. Примеры исправленных ошибок
27
Обзор_в_180_градусов сделано для новичков
На основе взяты выше перечисленные примеры. Можете проверить стоит ли впереди или нет.
Кстати, формула Warden работает не так как хотелось бы. Тестировал. И выяснил, что работает если обзор не слишком большой ( angle < 180, если хотите 180 тогда придется ставить приблизительно 179). Если слишком большой, то не будет работать.
Короче тут формула берет минимальный промежуток между углами, а не большой. Пример на скрине
А так все в норме
Еще не забудьте поставить вместо udg_Target переменную GetSpellTargetUnit()
19
Короче тут формула берет минимальный промежуток между углами, а не большой. Пример на скрине
Так для "не смотрит" нужно чтобы юнит попал в большой промежуток? Если способность, скажем, через всю карту используется, а тут указывается радиус - если кастер будет за радиусом, что тогда?
27
много букв
Так для "не смотрит" нужно чтобы юнит попал в большой промежуток?
да, тебе выше скрин даже нарисовал. в твоем случае, как определить видит ли цель кастера, то очень подойдет. для твоего скила "удар в спину". Есть другие примеры, может они то тебе подойдут. Загляни на хабр по ссылке, там точь твой вариант, описывают пример про стражника (если не понятно, смотри у меня скалярные векторы в комменте 6, 7). Конечно, тебе немного переделать надо будет, вместо кастера цель.
Если способность, скажем, через всю карту используется, а тут указывается радиус - если кастер будет за радиусом, что тогда?
если ты про молнии, то тут у меня никакого ограничительного радиуса нет. Есть радиус круга = 800, но это чисто для молнии, не стал молнии растягивать на всю карту.
В первом случае, работы со многими юнитами включает с группой, там есть ограничение радиуса - сам радиус. Когда ты пикаешь вокруг юнитов в группу, есть функции, которые выбирают всех вокруг точки с радиусом. Вот это я и использовал. Если надо убрать ограничение, используй другие функции пика на всю карту, или ставь радиус 99999
В случае, с треугольником. Можно, вместо треугольника вставлять прямоугольник =)
Во втором случае, там с одним юнитом (не работаю с группой). Коммент 7 скинул пример. Там нет ограничения, и можно на всю карту. Есть надо ограничить, тогда надо еще проверять расстояние между двумя юнитами. Если расстояние между двумя юнитами меньше 800, то делать ...
Загруженные файлы
19
Steal nerves:
Я вот эту использовал.
Мои скиллы не действуют на всю карту, но я должен на будущее знать, будет ли это работать, если прописать радиус меньше дальности скилла.
Получается можно удалить строку, отвечающую за радиус?(молнии я удалил)
Загруженные файлы
27
Мои скиллы не действуют на всю карту, но я должен на будущее знать, будет ли это работать, если прописать радиус меньше дальности скилла. Получается можно удалить строку, отвечающую за радиус?
Тогда да.
27
вот система Raised
раскрыть
Загруженные файлы
Принятый ответ
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.