Суть в том, чтобы стреляющий воин атаковал двумя снарядами в одну и ту же точку, потом перезарядка. Допустим танк стреляет из двух орудий.
Единственная удачная наработка - через "Предмет: чёрная стрела", где в Данные - способность эффекта - например, огненные стрелы.
Также получалось играться с пассивными эффектами "Ракеты " (парового танка), что приводило к самым разным анимациям дальнего боя, и эффектам отравления, сожжения маны, и т. д. Всё это работает только для ракеты (они же самонаводящиеся). Часть работает для снаряд - взрыв. При ударе, например, вызывает дыхание Ледяного вирма или удар Таурена.
Мне нужно для артиллерия (танк стреляет именно так) или для мгновенное (меньше важно). Есть какие-нибудь подсказки?

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

Либо пассивка вивера из доты (это вам описали как сделать, изи скилл из РО), либо триггерно!
Третьего не дано!
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
7 лет назад
0
Похожие вопросы:

ответ
BaHeK:
Darknessay, я имел ввиду изначальное расстояние между объектами.
Вот нарисовал схематично.
Обозначим расстояние которое прошёл 1 юнит за х. Красная линия это путь который прошел юнит 2 до встречи. Двигались они одинаковое время, значит составим равенство(s1 и s2 это скорости) и немного преобразуем.
sqrt(a^2 + (b-x)^2)/s1 = x/s2
s1^2(a^2 + b^2)x^2 + 2*s1^2*b*x - s1^2(a^2 + b^2) = 0
Решаем полученное уравнение и получаем
x1 = (-2*s1^2*b + sqrt((2*s1^2*b)^2 + 4*(s2^2 - s1^2)*s1^2(a^2 + b^2))) / (2*s1^2(a^2 + b^2))
x2 = (-2*s1^2*b - sqrt((2*s1^2*b)^2 + 4*(s2^2 - s1^2)*s1^2(a^2 + b^2))) / (2*s1^2(a^2 + b^2))
Искомый угол равен arctg((b-x)/a).
Вод мою систему такой расчет не подойдет.
GF RaiseD:
Это не в одну строку посчитать
function getTargetOffset takes unit Caster, unit Target, real targetSpeed, real missileSpeed returns real

local real x1 = GetUnitX(Caster)
local real x2 = GetUnitX(Target)
local real x3

local real X4 //Координата X точки пересечения

local real y1 = GetUnitY(Caster)
local real y2 = GetUnitY(Target)
local real y3

local realY4 //Координата Y точки пересечения

local real targetSpeed
local real missileSpeed

local real distancex1x2 = Sqrt(Pow(x2-x1,2)+Pow(y2-y1,2))
local real distancex1x3
local real distanceX4Y4

set x3 = GetUnitX(Target)+targetSpeed*distaancex1x2/missileSpeed*Cos(GetUnitFacing(Target))*bj_DEGSTORAD
set y3 = GetUnitY(Target)+targetSpeed*distaancex1x2/missileSpeed*Sin(GetUnitFacing(Target))*bj_DEGSTORAD

set distaancex1x3 = Sqrt(Pow(x3-x1,2)+Pow(y3-y1,2))

set X4 = GetUnitX(Target)+targetSpeed*distancex1x2/missileSpeed*distancex1x3/distancex1x2*Cos(GetUnitFacing(Target))*bj_DEGSTORAD

set Y4 = GetUnitY(Target)+targetSpeed*distancex1x2/missileSpeed*distancex1x3/distancex1x2*Sin(GetUnitFacing(Target))*bj_DEGSTORAD

set Caster = null
set Target = null

set distanceX4Y4 = Sqrt(Pow(X4-x2,2)+PowY4-y2,2)) // Опережение (по отношению к повороту юнита-цели)

return distanceX4Y4

endfunction

Если что - я не проверял. Но должно бы работать.
Если тебе нужен угол с точки x2 на точку x3, определяется он так:
Atan2(y3-y2,x3-x2)*bj_RADTODEG
Убрал синтаксические ошибки, немного "допилил" - не хочет работать.
Всем привет работяги, я сам справился. Проверил: всё работает.
//===============Вспомогательные_функции================
function GetAngleXY takes real x, real y, real xx, real yy returns real
    return bj_RADTODEG * Atan2(yy - y, xx - x)
endfunction

function GetDisXY takes real x, real y, real xx, real yy returns real
    return SquareRoot((xx-x) * (xx-x) + (yy-y) * (yy-y))
endfunction

function GetPolarX takes real x, real f, real d returns real
return x + Cos(f*0.0174)*d
endfunction

function GetPolarY takes real y, real f, real d returns real
return y + Sin(f*0.0174)*d
endfunction

//=======================Основная часть=======================
function GetTargetOffset takes unit host, unit target, real speedm returns real
local real speedt = GetUnitMoveSpeed(target)
local real x = GetUnitX(host)
local real y = GetUnitY(host)
local real xx = GetUnitX(target)
local real yy = GetUnitY(target)
local real fac = GetUnitFacing(target)
local real dis = GetDisXY(x,y,xx,yy)
local real time = dis/speedm
local real dispost = GetDisXY(xx,yy,GetPolarX(xx,fac,time*speedt),GetPolarY(yy,fac,time*speedt))
local real X = GetPolarX(xx,fac,dispost) //нужные координаты цели
local real Y = GetPolarY(yy,fac,dispost)
    return GetAngleXY(x,y,X,Y)//возвращает угол который нужен для корректировки стрельбы
endfunction

0
17
7 лет назад
0
всмысле стрелял как шилка(4 направляющие),то делай специальный снаряд
вот пример
Загруженные файлы
0
3
7 лет назад
0
Нет, не так я написал, прошу пардону. Два выстрела с некой перезарядкой между большой перезарядкой. Каждый из двух патронов наносит одинаковый ущерб.
1
17
7 лет назад
1
а тригерно, сделать пасивку, когда юнит атакует, создаётся дамик и стреляет по цели юнита
0
3
7 лет назад
0
Триггерно - да, легко, верю. А пользуясь только РО - можно? Так как планируется куча таких объектов, стараюсь к триггерам минимально обращаться, бОльшую часть отдавая РО.
1
17
7 лет назад
1
да хоть 1миллион обьектов тогда делай мощьную мув систему со всякими математическими просчётами(паррабола,линейное движение в основном),потом заводи своих подопытных в бд и уже по случаю они будут работать как надо всего используя 1 системку
2
18
7 лет назад
2
0
20
7 лет назад
0

автор, бери способность сферы замедления, и ставь туда способность огненная стрела
второй снаряд будет вылетать после того, как первый попал в цель
если ты хочешь оба сразу - система снарядов, что будет очень затратно
0
32
7 лет назад
0
Либо пассивка вивера из доты (это вам описали как сделать, изи скилл из РО), либо триггерно!
Третьего не дано!
Принятый ответ
0
9
9 месяцев назад
0
Если я правильно всё понял тебе нужен спелл пасивка с кд который выпускал бы 2 снаряда из танка при автоатаке и уходил на кд? Если так попробуй скомбинировать сферу молний/замедления с ракетным ударом тинкера, настрой количество снарядов на нужное число и убери стан если он не нужен
Чтобы оставить комментарий, пожалуйста, войдите на сайт.