Добавлен DenisYulamanov
Как вывести сообщение в чат? Не от имени игроков.
Принятый ответ
Похожие вопросы:
ответ
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
ответ
баф у ауры убрать нельзя
ибо именно баф даёт все бонусы ауры
для теста можешь триггерно удалять ауру и баф с юнита
бонус от ауры тут же исчезнет
а если не удалять баф то он повесит пару секунд давая бонус
лучше всего это видно на доспехах веры
так что пиши свою ауру
на основе таймера с периодом в 1 секунду и перебором всех юнитов на расстоянии R от владельца ауры и добавлении им бонусов
а так же удалением бонусов у отошедших юнитов
ответ
unsinkable78, один из вариантов это большое количество однотипных триггеров с периодом
объедении их в 1
а лучше используй таймер вместо триггеров
unsinkable78, так же вероятно проблема в твоих массивах
ты судя по всему задаёшь им размер в 1000
из за чего при запуске игры твой массив заполняется ненужными значениями что забивает память и может приводить к лимиту потока (в вар3 у потока/триггера есть максимальное количество операций которые он может выполнить)
вот пример из твоего j файлаset i = 0 loop exitwhen (i > 1000) set udg_squad[i] = CreateGroup() set i = i + 1 endloop
этот код циклом от 0 до 1000 создаёт группы(1000 групп соответственно) и заносит их в массив squad
это тратит более 1000 операций
и таких моментов много
так же я видел места где ты использовал массивы вместо обычных переменных что тоже увеличивает затраты ресурсов и может приводить к лимиту потока
массивы нужно использовать лишь там где без них не обойтись
ответ
DvernoiProem:Попробуй ка сохранить карту без этой функции, потом опять с нею. Я сейчас попробую оптимизировать её.Там все включенные триггеры - относятся к системе. Остальные выключены.
ответ
Короче: если ставить юнита, который относится к игроку, но самого игрока нет... То whosyourdaddy не будет работать на всех юнитах этого игрока.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Araders