![]()
Rizen
![]() ![]() offline
Опыт:
2,126Активность: |
Picking units в прямоугольнике перед caster
Есть такая нужда. По всей видимости, только на GUI это не сделать, нашлась и функция на JASS:
» code
И вызов функции через customscript:
Custom script: set udg_SF_Boolean = IsPointInRect(GetUnitX(GetEnumUnit()) , GetUnitY(GetEnumUnit) , udg_r5 , udg_r6 , udg_r7 , udg_r8 , udg_r3 , udg_r4 )
Кто-нибудь может мне помочь связать это с юнитами в прямоугольнике длиной 800 и шириной 200? Я был бы очень признателен, ибо спелл хочется, а в JASS'e я нуб нубом. Отредактировано DragonSpirit, 31.10.2012 в 00:24. |
![]() |
#1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Sladkoegka
Забыл что хотел...
![]() ![]() offline
Опыт:
7,477Активность: |
Rizen, 1)объясни суть , цель быть может это можно проще реализовать.
И 2)в твоем случае,в гуи эту функцию можно вызвать,если указывать реалки 3,4,5,6,7,8-как центр прямоугольника со смещением.
И еще раз 1) перечитай
Sladkoegka добавил: Rizen, и судя поп названию темы тебе нужна абсолютно другая функция... |
![]() |
#2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Rizen
![]() ![]() offline
Опыт:
2,126Активность: |
Sladkoegka, да нет, нужна именно эта. Я перед созданием темы перегуглил hiveworkshop и helper, но там в темах спрашивающие люди быстро понимали, что с этой фигней делать и прощались с гуру :) В моем же случае "я нифига не понял".
А нужно просто пикнуть юнитов в прямоугольнике перед кастером, чтобы покарать их эффектом дамми и нанести кастомный урон. Триггерами почему-то пикаются только круги, а тут идет проверка, находится ли юнит в прямоугольнике.
В общем, нужно сделать триггерный shockwave или полет феникса, с прямоугольной областью эффекта. Думаю, так будет понятнее всего :) И чтобы совсем сомнений в надобности не осталось, скрин в аттаче - там спелл точно такой же, как мне нужен. К сожалению, я наткнулся на скрин после того, как он мне понадобился и не знаю, какую карту погуглить, чтобы порыться во внутренностях. |
![]() |
#3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DualShock
![]() offline
Опыт:
5,023Активность: |
конкретней, урон наноситься мгновенно всем вдоль линии, или же принцип как у shockwave?? |
![]() |
#4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Rizen
![]() ![]() offline
Опыт:
2,126Активность: |
DualShock, как получится. В идеале, конечно, урон наносится каждую секунду (предположим, секунды 3-5) всем юнитам, что находятся в прямоугольнике. За неимением такого варианта урон наносится сразу. |
![]() |
#5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DimanTOoBS
![]() offline
Опыт:
5,791Активность: |
могу предложить другой вариант, создаёшь способность на основе волны силы без эффекта с большой скоростью эффекта, при касте способности заставляешь дами кастовать волну и записываешь в хэш дамику все параметры, отслеживаешь получение урона от дамика и делаешь действия, у волны поставь урон 1 |
![]() |
#6
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DualShock
![]() offline
Опыт:
5,023Активность: |
Что бы юзать формулу в 1 посте нужно много массивных математических вычислений ( имхо в ГУИ это делать просто невыносимо). Тут тебе придется заводить переменных штук 10, а то и больше.
Дальше я напишу как найти переменные для использования в функции в 1 посте. angle - угол между героем и точки ката спелла ( в градусах )
r - от этого зависит ширина прямоугольника (см. скрин) bj_DEGTORAD= пи/180 Rizen: в твоем случае r = 100 остальные переменные смотри на скрине cx = x + r * Cos( (angle - 90.) * bj_DEGTORAD)
cy = y + r * Sin( (angle - 90.) * bj_DEGTORAD) ax = tx + r * Cos( (angle - 90.) * bj_DEGTORAD) ay = ty + r * Sin( (angle - 90.) * bj_DEGTORAD) bx = x + r * Cos( (angle + 90.) * bj_DEGTORAD) by = y + r * Sin( (angle + 90.) * bj_DEGTORAD) Дальше осталось подставить в функцию и пользоваться ею
==== Есть ещё один способ, попроще предыдущего, но он, мягко говоря, голимый. Делить линию точками, которые находятся на равном расстоянии и возле каждой такой точке пикать юнитов в радиусе, наносить урон, заносить в группу, если есть в группе, то недомажить и т. д. |
![]() |
#7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
HolyMoon
Hly shit!
![]() ![]() offline
Опыт:
6,986Активность: |
шоквейв с большой скоростью не дамажит часть юнитов на своем пути.
я всегда подобные вещи делал через круги. грубо говоря: for each A from 1 to 10 do: set point = (Position of TriggeringUnit) offset by (50*IntegerA), (facing of triggering unit) pick every unit in units within 100 of point and damage picked unit. подчеркиваю, что это грубый пример, но суть, я думаю, ясна
[вырезано цензурой] [+] 3 пункта от Кет: 2.1 (оскорбление)
Отредактировано Кет, 31.10.2012 в 06:38. |
![]() |
#8
+1/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Rizen
![]() ![]() offline
Опыт:
2,126Активность: |
DualShock, ух-ох, сложноватость. А если посмотреть на оригинал, как делал сам автор функции, может там проще?) |
![]() |
#9
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
DualShock
![]() offline
Опыт:
5,023Активность: |
Rizen:
да нет, посмотрев код, он находит cx cy ax ay bx by также как и я DualShock добавил: ня если с математикой так туго -.- Отредактировано DualShock, 31.10.2012 в 01:35. |
![]() |
#10
+2/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Sladkoegka
Забыл что хотел...
![]() ![]() offline
Опыт:
7,477Активность: |
|
![]() |
#11
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Rizen
![]() ![]() offline
Опыт:
2,126Активность: |
Sladkoegka, мгновенно :) С дамагом разобраться тоже проблем нет, это в последнюю очередь.
DualShock, с геометрией же, не с математикой. Я по-прежнему смотрю в книгу вижу готовый скрипт, а как он работает понять не могу. Можно сам принцип типа "берем точку х, вычисляем координаты y"? Я не тупой, просто для гуманитария такие вещи сложновато даются. Самое главное - как в этом готовом скрипте настроить длину прямоугольника и его ширину? Если я правильно понимаю, r-это радиус от точки каста? Сейчас конец прямоугольника находится в точке каста, мне же нужна фиксированная длина, предположим, в 1200 (луч эффекта длинный) и ширина в 200 (как сейчас) независимо от того, в какую точку я начал кастовать. |
![]() |
#12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Sladkoegka
Забыл что хотел...
![]() ![]() offline
Опыт:
7,477Активность: |
что тебе нужно указать чтобы настроить.
x,y - позиция юнита кастера
tx,ty -позиция проверяемого юнита
angle = 90 - это и будет нужная тебе фигура-прямоугольник-угол между сторонами-90
r-ширина прямоугольника,то есть если тебе нужна длинна 800 и ширина 200 то r должно быть=200/2=100
затем вставляешь это :
и вызываешь функцию
В итоге ты можешь менять angle(нежелательно),(x,y)-позиция кастера,(tx,ty)-позиция проверяемого юнита,r = ширина твоего прямоугольника/2
Если тебе нужно конкретно фиксированное расстояние то ставишь tx,ty = смещение на 800 по отношению к...(например поворот кастера) |
![]() |
#13
+1/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Rizen
![]() ![]() offline
Опыт:
2,126Активность: |
Sladkoegka, то есть мне нужно только создать даммика на расстоянии 1200 от моего кастера с углом точки каста и установить tx и ty как точки его позиции? |
![]() |
#14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Hate
конь вакуумный
![]() ![]() offline
Опыт:
43,033Активность: |
омг зачем?
полярные координаты для слабых? |
![]() |
#15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
![]()
Rizen
![]() ![]() offline
Опыт:
2,126Активность: |
Спасибо всем, кто помогал, что-то получилось :) Оставляю триггер здесь для проверки на ошибки и для тех, кто столкнется с такой же проблемой. |
![]() |
#16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|