Этот спелл есть в помойной Доте.
И поверьте, я бы не спрашивал, если бы у меня была взломанная дота.
А так я рили понятия не имею, с чего начать и как сделать этот спелл, что бы он действовал также, как и в помойной доте.
Вот скрин с описанием спелла

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

сделаем проще
0
28
6 лет назад
0
топоры делаем через дамми юнитов
двигаем их по параболе пикая всех врагов которых они касаются и нанося им урон
+ проверка на отсутствие повторного урона
взломанная дота берётся в гугле
либо на этом сайте
2
5
2
nvc123, Ну дай ссылку на взломаную доту. В гугле искал, увы нету.
А что означает "по параболе"?
2
20
6 лет назад
2
Артас:
nvc123, Ну дай ссылку на взломаную доту. В гугле искал, увы нету.
А что означает "по параболе"?
на этот моменте я орнул чет
ты когда после школы камни в окна нормальных людей кидаешь, камень летит по дуге
то есть, есть точка взлета, точка, где камень взял пик своей высоты и начал опускаться, и точка приземления
если соединить их линий (не прямыми), получится дуга
2
27
6 лет назад
Отредактирован MpW
2
мб поможет
еще вот это
еще это
да автор хочет все готовое. сам понимать и учиться не хочет, и поэтому сделать не сможет. еще поиском юзать не хочет. вбей это название, посмотри. есть кстати раздел - заклинание на заказ
этот спел использует хитрую математику отличающую от типичного движения. Это JASS
  • Ax, Ay - координаты точки кастера
  • Cx, Cy - координаты точки цели (если цель-юнит пустой, берем точку)
  • создаем двух даймиков: lAxe1 и lAxe2
  • создаем два таймера: lTimer1 и lTimer2 и аттачим на их хэндлы все: ID1 и ID2. хэндл - номер объекта
даймиков то мы создали, теперь нужно нам получить начальные точки смещения даймиков (смещаем 300 вперед по углом 45 градусов. одного влево +45, другого вправо -45):
  • set angle = Atan2(Cy-Ay,Cx-Ax) Аркстангенс, угол между двумя точками, возвращает радианы
координаты для первого даймика
  • set x3 = (Ax+300*Cos(angle+45))
  • set y3 = (Ay+300*Sin(angle+45))
координаты для второго даймика
  • set x4 = (Ax+300*Cos(angle-45))
  • set y4 = (Ay+300*Sin(angle-45))
  • получаем и смещаем даймиков под эти координаты
  • даем им абилку ворона - чтоб летал, и немножко приподнимаем (для красоты видимо, топоры летят же)
теперь сохраняем в хэш-таблицу данные для каждого даймика (вы должны заранее инициировать ее)
  1. сохраняем кастера
  2. самого даймика
  3. координаты кастера (могли и не сохранять, можно напрямую у кастера брать нативками корды. но кастер может переместиться, и позиция будет не та, и вся система может сбиться, поэтому запоминаем позицию каста)
  4. координаты цели (конечная цель, тоже самое, чтоб не сбилось)
  5. координаты даймика x3, y3 или x4, y4 в зависимости от того какого даймика храним
  6. сохраняем единицу (a=1). так понял это с каждым тиком таймера на 0.2 становится меньше или больше. Короче это не совсем радиан, как я думал, а множитель. Такая хитрая математика. Пропорция короче. 1.00 = 100% в одну сторону становится меньше, а когда дойдет до нуля, то обратно будет увеличиваться до 1.
  7. сохраняем угол. Если даймик был смещен слева под углом 45, то сохраняем -45 (короче будем вычитать). Если второй даймик был смещен слева под углом -45, то сохраняем 45 (короче будем прибавлять).
  8. сохраняем группу g. (для работ и вычислении всяких)
  9. сохраняем логическую истину. RD2 = true
все сохранили, запускаем периодичные таймеры
каждый раз/через каждый период времени запускаем функцию
загружаем из хэш-таблицы по хэндлу таймера:
  • юнита и даймика, группу
  • A - точка кастера (не текущая). Ax, Ay - координаты
  • C - точка цели. Cx, Cy - координаты
  • B - третья точка = смещенная точка Cx, Cy - координаты (это координаты x3, y3 или x4,y4)
  • a - процент выгружаем из хэша (он каждый раз меняется)
  • RD2 - логическая для проверки, истина говорит, что движемся к цели. когда дойдет до цели, мы изменим на ложь, перевернем даймиков. И теперь будем двигать обратно к цели
далее вычисления
b = 1 - a
новые координаты ниже, смещаем по этим координатам. Меня вот эти ниже заинтересовали, очень похоже на квадрат суммы, откуда эти вычисления координат. порылся, ничего не нашел.
Ax*a*a + Bx*2*a*b +Cx*b*b
Ay*a*a + By*2*a*b +Cy*b*b
по этим координатам выделяем в группу, наносим урон, выделяем деревья и уничтожаем их
  • далее в конец каждый раз проверки идут
function RMaxBJ takes real a, real b returns real
    if (a < b) then
        return b
    else
        return a
    endif
endfunction

//функция PAI вычисляет расстояние
function PAI takes real x1,real y1,real x2,real y2 returns real
return SquareRoot(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)))
endfunction

//тут RE2 - выбирает макс. время между полученным и 0.4 сек. короче расстояние PAI поделенное на скорость 1300.
local real RE2=RMaxBJ(PAI(Ax,Ay,Cx,Cy)/1300,0.4) 
если RD2 истинно, то изменяем и сохраняем только "a", иначе, еще и кастера
if(RD2)then
	call SaveReal(udg_Hash,(id),(137),((a-.02/RE2))) //изменяется a
else
    call SaveReal(udg_Hash,(id),(137),((a+.02/RE2))) //изменяется a
    //сохраняем координаты кастера
    call SaveReal(udg_Hash,(id),(284),GetUnitX(N0I)) //N0I - кастер
    call SaveReal(udg_Hash,(id),(285),GetUnitY(N0I))
endif
если a становится меньше нуля, то переворачиваем даймиков и RD2 = false
if(a<0 and RD2)then
	call SaveBoolean(udg_Hash,(id),(291),(false)) //это RD2
    //пересохраняем координаты третьей точки, короче та что смещается под углом
    //тут изменились координаты, так как мы прибавили или убавили угол на 45
	call SaveReal(udg_Hash,(id),(288),((Ax+300*Cos(Atan2(Cy-Ay,Cx-Ax)+(LoadReal(udg_Hash,(id),(292)))))*1.0))
	call SaveReal(udg_Hash,(id),(289),((Ay+300*Sin(Atan2(Cy-Ay,Cx-Ax)+(LoadReal(udg_Hash,(id),(292)))))*1.0))
endif
3
28
6 лет назад
Отредактирован nvc123
3
сделаем проще
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.