Кто подскажет как раскрыть эту функции. можно ли в ней углы как то плюсовать.
local unit Unit = CreateUnitAtLoc(GetOwningPlayer(caster),UnitId, GetOwningPlayer(GetSpellAbilityUnit()), PolarProjectionBJ(PolarProjectionBJ(GetSpellTargetLoc(), 150.00, ( AngleBetweenPoints(GetSpellTargetLoc(), GetUnitLoc(GetSpellAbilityUnit())) + 90.00 )), 150.00, ( AngleBetweenPoints(GetUnitLoc(GetLastCreatedUnit()), GetSpellTargetLoc()) + 90.00 )), bj_UNIT_FACING )
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
30
MadDemon, как она работает, если там аргументом не тот тип передаётся?

Используй блоки кода для формантирования кода.

Зачем ты плодишь утечки на ровном месте?
local real x = GetLocationX(tar) + 0 * Cos(angle * bj_DEGTORAD - 0)
local real y = GetLocationY(tar) + 0 * Sin(angle * bj_DEGTORAD - 0)
local unit Unit = CreateUnitAtLoc(GetOwningPlayer(caster),UnitId, Location(x, y), angle - 0)
Можно же упростить:
local real tx = GetSpellTargetX()
local real ty = GetSpellTargetY()
local real x = tx * Cos(angle * bj_DEGTORAD)
local real y = ty * Sin(angle * bj_DEGTORAD)
local unit Unit = CreateUnitAtLoc(GetOwningPlayer(caster), UnitId, x, y, angle)
4
nazarpunk, Да я немного перепутал . Но мне удалось сделать то что я хотел вот таким образом. Идея заключалась в создании юнитов паралельных Castery и смещённых в разных углах.
local unit caster = GetSpellAbilityUnit()
local location cas = GetUnitLoc(caster)
local location tar = GetSpellTargetLoc()
local real d = bj_RADTODEG * (Atan2(GetLocationY(cas) - GetLocationY(tar),GetLocationX(cas) - GetLocationX(tar)))
Точка создания Юнита1
local real x = (GetLocationX(tar) + 150 * Cos((d+90) * bj_DEGTORAD)) - 300 * Cos((d+180) * bj_DEGTORAD)
local real y = (GetLocationY(tar) + 150 * Sin((d+90) * bj_DEGTORAD)) - 300 * Sin((d+180) * bj_DEGTORAD)
Точка создания Юнита2
local real x2 = (GetLocationX(tar) + 150 * Cos((d-90) * bj_DEGTORAD)) - 300 * Cos((d-180) * bj_DEGTORAD)
local real y2 = (GetLocationY(tar) + 150 * Sin((d-90) * bj_DEGTORAD)) - 300 * Sin((d-180) * bj_DEGTORAD)
Появление 1 юнита
local unit Unit = CreateUnitAtLoc(GetOwningPlayer(caster),Unit2Id, Location(x, y), d + 90)
Появление 2 юнита
local unit Unit2 = CreateUnitAtLoc(GetOwningPlayer(caster),Unit2Id, Location(x2, y2), d - 90)
Обнуление переменных
set caster = null
set Unit = null
set Unit2 = null
set d = 0
set x = 0
set y = 0
set x2 = 0
set y2 = 0
call RemoveLocation (cas)
call RemoveLocation (tar)
endfunction
Спасибо за напутствие и подсказки, буду совершенствовать свой vJASS!
30
буду совершенствовать свой vJASS!
Удачи. Для начать можешь с перехода на радианы и отказа от Location.
function Test takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local real cx = GetUnitX(caster)
    local real cy = GetUnitY(caster)
    local real tx = GetSpellTargetX()
    local real ty = GetSpellTargetY()
    local real a90 = bj_PI * .5
    local real d = Atan2(cy - ty, cx - tx)
    local real x = (tx + 150 * Cos(d + a90)) - 300 * Cos(d + bj_PI)
    local real y = (ty + 150 * Sin(d + a90 )) - 300 * Sin(d + bj_PI)
    local real x2 = (tx + 150 * Cos(d - a90 )) - 300 * Cos(d - bj_PI)
    local real y2 = (ty + 150 * Sin(d - a90 )) - 300 * Sin(d - bj_PI)
    call CreateUnit(GetOwningPlayer(caster), Unit2Id, x, y, d + a90)
    call CreateUnit(GetOwningPlayer(caster), Unit2Id, x2, y2, d - a90)
    set caster = null
endfunction
... и использования блоков кода.
2
буду совершенствовать свой vJASS!
Удачи. Для начать можешь с перехода на радианы и отказа от Location.
function Test takes nothing returns nothing
    local unit caster = GetSpellAbilityUnit()
    local real cx = GetUnitX(caster)
    local real cy = GetUnitY(caster)
    local real tx = GetSpellTargetX()
    local real ty = GetSpellTargetY()
    local real a90 = bj_PI * .5
    local real d = Atan2(cy - ty, cx - tx)
    local real x = (tx + 150 * Cos(d + a90)) - 300 * Cos(d + bj_PI)
    local real y = (ty + 150 * Sin(d + a90 )) - 300 * Sin(d + bj_PI)
    local real x2 = (tx + 150 * Cos(d - a90 )) - 300 * Cos(d - bj_PI)
    local real y2 = (ty + 150 * Sin(d - a90 )) - 300 * Sin(d - bj_PI)
    call CreateUnit(GetOwningPlayer(caster), Unit2Id, x, y, d + a90)
    call CreateUnit(GetOwningPlayer(caster), Unit2Id, x2, y2, d - a90)
    set caster = null
endfunction
... и использования блоков кода.
Может хоть ты мне обьяснишь откуда у вас кодеров мода расписывать каждую строчку и создавать локалку для каждого значения?
Почему не написать все то же самое в одну строку?
Да, может строка выйдет длинновата, но ты же сам знаешь что это просто точка со смещением, и менять в ней всего 2 значения...
Лично я бы сократил так:
unit t=GetTriggerUnit()
real a=Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())
CreateUnit(GetOwningPlayer(t),'h000',GetUnitX(t)+150*Cos(a), GetUnitY(t)+150*Sin(a),a*bj_RADTODEG)
30
Nevermourne, ну да, и вместо того, чтоб один раз получить GetUniX и положить его в локалку, мы будем вызывать функцию на каждый чих. Зато в одну строчку.
2
Nevermourne, ну да, и вместо того, чтоб один раз получить GetUniX и положить его в локалку, мы будем вызывать функцию на каждый чих. Зато в одну строчку.
Эта функция не создает утечек, поэтому не вижу причин её не вызывать. Всё программирование основывается на написании различных функций, которые ты потом вызываешь.
30
Nevermourne, ну да, сначала мы не экономим на вызовах функций, потом не видим разницы между O(1) и O(n^2), а потом Боинги падают.

Ну и в добавок, почему тогда вообще всё в одну строчку не засунуть? Так же лучше будет.
CreateUnit(GetOwningPlayer(GetTriggerUnit()),'h000',GetUnitX(GetTriggerUnit())+150*Cos(Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())), GetUnitY(GetTriggerUnit())+150*Sin(Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())),Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())*bj_RADTODEG)
2
Nevermourne, ну да, сначала мы не экономим на вызовах функций, потом не видим разницы между O(1) и O(n^2), а потом Боинги падают.

Ну и в добавок, почему тогда вообще всё в одну строчку не засунуть? Так же лучше будет.
CreateUnit(GetOwningPlayer(GetTriggerUnit()),'h000',GetUnitX(GetTriggerUnit())+150*Cos(Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())), GetUnitY(GetTriggerUnit())+150*Sin(Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())),Atan2(GetUnitY(t)-GetSpellTargetY(), GetUnitX(t) -GetSpellTargetX())*bj_RADTODEG)
Ну не преувеличивай)
Я просто спросил почему ты считаешь такой вариант более комфортным.
30
Я просто спросил почему ты считаешь такой вариант более комфортным.
Потому что в своём варианте ты провтыкал второй вызов CreateUnit.
2
Потому что в своём варианте ты провтыкал второй вызов CreateUnit.
Мы же говорили про обьем кода, а не работоспособность функции.
Больше всего пространства, как по мне, занимают мат. формулы, по типу скверрута, с локалкой для каждого значения.

Ну ладно. Это вопрос оптимизации - думаю, каждый привык оптимизировать по своему.
30
Мы же говорили про обьем кода, а не работоспособность функции.
Ну да, второй вызов функции никак на объём кода не влияет.
Больше всего пространства, как по мне, занимают мат. формулы, по типу скверрута, с локалкой для каждого значения.
Ога, код мы я так понимаю ради пространства пишем? Однобуквенные переменные кстати намного меньше его занимают.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.