Спелл, который будет временно удваивать любое постепенное движение юнита (обычную ходьбу, толчки чем-то типа форстаффа и т. п. будут двигать его вдвое дальше).
Будет таймер с малым периодом.
Будет запоминать X и Y юнита и возвращать их определенный период.
Будут такие переменные:
u5 - юнит, доставаться из хэндла
x2 - возвращенная СТАРАЯ координата юнита X из хэндла
y2 - возвращенная СТАРАЯ координата юнита Y из хэндла
local real x = GetUnitX(u5)
local real y = GetUnitY(u5)
local real x3
local real y3
УДВОЕНИЕ ПОСТЕПЕННОГО СДВИЖЕНИЯ
...
УДВОЕНИЕ ПОСТЕПЕННОГО СДВИЖЕНИЯ - закрыто.
Вместо ... нужен код, который бы подсчитывал дистанцию между старыми координатами юнита и новыми и, если она больше 0, но меньше 200, определял вдвое дальше от дистанции в направлении сдвига новые координаты x3 и y3 сдвигал юнита на вдвое дальше в том же направлении. x3 и y3 для этих новых координат и нужны, на них юнит и должен попасть.
Потом в любом случае текущие координаты X и Y юнита, было сдвижение или нет, будут записываться в хэндл обратно и возвращаться как x2 и y2, и все по новой до завершения действия спелла. Все остальное я там самостоятельно сделаю.
Прошу помочь с написанием кода вместо ..., все необходимые переменные приведены выше, т. к. трудности, с точками не так давно работаю.

Это как без корня?
dx = x - x2
dy = y - y2
d2 = dx * dx + dy * dy
if (d2 < 40000) {
    x3 = x + dx
    y3 = y + dy
}
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Этот комментарий удален
14
Если вы у мамы оптимизаторы можно обойтись без sqrt.
Ето как без корня?
30
Это как без корня?
dx = x - x2
dy = y - y2
d2 = dx * dx + dy * dy
if (d2 < 40000) {
    x3 = x + dx
    y3 = y + dy
}
Принятый ответ
14
Так ты ниже должен использовать значение корня, а не только в условии
29
В первом варианте кода d2 нигде не используется ниже.
30
а разве он не войдет в рекурсию?
Ни одного цикла или вызова функции, каким образом там рекурсия закрутится?
18
Clamp,
все по новой до завершения действия спелла.
т.е. по сути постоянная запись через таймерр в хендл
21
Ну всем спс, вот код, вроде все нормально (про флуш помню, но это сейчас шаблон, это если исправлять, то все потом вместе)
раскрыть
function SeizureFate2 takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, u7, p, enemies
local timer t = GetExpiredTimer()
local unit u5=LoadUnitHandle(udg_Hash,GetHandleId(t),2)
local unit u6=LoadUnitHandle(udg_Hash,GetHandleId(t),1)
local unit u7
local location p
local group enemies = CreateGroup()
local real damage = (GetUnitBaseDamage(u5) + GetUnitGreenBonusDamage(u5)) * 0.5 * (GetUnitAbilityLevelSwapped ('A282', u6))
local real x2 = LoadReal(udg_Hash,GetHandleId(t),4)
local real y2 = LoadReal(udg_Hash,GetHandleId(t),5)
local integer i = LoadInteger(udg_Hash,GetHandleId(t),3)
local real x = GetUnitX(u5)
local real y = GetUnitY(u5)
local real x3 = 0
local real y3 = 0
local real dx = 0
local real dy = 0
local real d = 0
local real d2 = 0
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

set i = i+1
call SaveInteger(udg_Hash,GetHandleId(t),3,i)

//ОБСЧЁТ И ПРИ НАДОБНОСТИ УДВОЕНИЕ ПОСТЕПЕННОГО ДВИЖЕНИЯ. ТУТ U5 ДВИЖЕТСЯ И ОТ ЕГО АТАКИ УРОН, А U6 КАСТЕР И ИСТОЧНИК УРОНА И С НЕГО ЛВЛ АБИЛЫ!
set dx = x - x2
set dy = y - y2
set d2 = dx * dx + dy * dy
if (d < 200) then
set x3 = x + dx
set y3 = y + dy
//Задание координат с проверкой на края карты.
if RectContainsCoords(bj_mapInitialPlayableArea,x3,y3) then
call SetUnitX (u5,x3)
call SetUnitY (u5,y3)
endif
//Задание координат c проверкой на края карты - закрыто.
endif
//ОБСЧЁТ И ПРИ НАДОБНОСТИ УДВОЕНИЕ ПОСТЕПЕННОГО ДВИЖЕНИЯ - ЗАКРЫТО.
call SaveReal(udg_Hash,GetHandleId(t),4,x3)
call SaveReal(udg_Hash,GetHandleId(t),5,y3)

if (i>74) then


//ЦВЕТОТЕГ РАЗМЕРА 14, ОКРАС СМ. ПЕЙНТ
call CreateTextTagUnitBJ( I2S(R2I(damage)), u5, 0, 14.00, 100.00, 70.00, 4.00, 0 )
call ConditionalTriggerExecute( gg_trg_floatingtext )
//ЦВЕТОТЕГ РАЗМЕРА 14 - ЗАКРЫТО.


//ГРУППА И ДЕЙСТВИЯ С НЕЙ

set p = GetUnitLoc(u5)
set enemies = GetUnitsInRangeOfLocAll(230.00,p)

loop
set u7=FirstOfGroup(enemies)
exitwhen u7==null
call GroupRemoveUnit(enemies,u7)
if ( ( IsUnitType((u7), UNIT_TYPE_ANCIENT) != true ) and ( IsUnitType((u7), UNIT_TYPE_STRUCTURE) != true ) and ( GetUnitAbilityLevelSwapped('Avul', u7) != 1 ) and (IsUnitAliveBJ(u7) == true )) and (IsUnitEnemy(u7,GetOwningPlayer(u6)) == true) then
call UnitDamageTargetBJ(u6,u7,damage,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC)
endif    
endloop

//ГРУППА И ДЕЙСТВИЯ С НЕЙ - ЗАКРЫТО.

call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
call RemoveLocation (p)
endif

call DestroyGroup (enemies)


//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6, u7, p, enemies
set t = null
set u5 = null
set u6 = null
set u7 = null
set p = null
set enemies = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction



function SeizureFate takes nothing returns nothing
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6
local timer t = CreateTimer()
local unit u6=GetTriggerUnit()
local unit u5=GetSpellTargetUnit()
local real x = GetUnitX(u5)
local real y = GetUnitY(u5)
local integer i = 0
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО

if  ( GetSpellAbilityId() == 'A282' )  then

    call AddSpecialEffectTargetUnitBJ( "chest", u5, "Vain1.mdl" )
   call ConditionalTriggerExecute( gg_trg_destroyspeceffect )
    call AddSpecialEffectTargetUnitBJ( "origin", u5, "Vain1.mdl" )
   call ConditionalTriggerExecute( gg_trg_destroyspeceffect )

call SaveUnitHandle(udg_Hash,GetHandleId(t),1,u6)
call SaveUnitHandle(udg_Hash,GetHandleId(t),2,u5)
call SaveInteger(udg_Hash,GetHandleId(t),3,i)
call SaveReal(udg_Hash,GetHandleId(t),4,x)
call SaveReal(udg_Hash,GetHandleId(t),5,y)
call TimerStart(t,0.04,true,function SeizureFate2)

else
call PauseTimer (t)
call DestroyTimer (t)
call FlushChildHashtable(udg_Hash,GetHandleId(t))
endif


//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: t, u5, u6
set u5 = null
set u6 = null
set t = null
//ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
Этот комментарий удален
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.