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

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

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
23
Похожие вопросы:

ответ
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

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

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