Способность темная стая (пустышка) - обнулил все значения.
триггер:
      set udg_Caster[udg_Number] = GetTriggerUnit()
      set udg_Point[udg_Number] = GetSpellTargetLoc()
      set udg_Point2[udg_Number] = GetUnitLoc(udg_Caster[udg_Number])
      set udg_Real2[udg_Number] = ( DistanceBetweenPoints(GetUnitLoc(GetTriggerUnit()), GetSpellTargetLoc()))
call DisplayTextToForce( GetPlayersAll(), I2S(R2I(udg_Real2[udg_Number])) )
Она возвращает мне 21 705. Когда я ожидал увидеть 300. Часто пользовался этой функцией, как и пустышкой темной стаи, но понять, что происходит я не могу. Уже по-разному пробовал. Скорее всего не понимает позицию способности, но это ли не бред?

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

Перед определением переменной с точкой стояли функции:
      call SetUnitFacingToFaceLocTimed( udg_Caster[udg_Number], udg_Point[udg_Number], 0 )
      set udg_Real[udg_Number] = GetUnitFacing(udg_Caster[udg_Number])
      call SetUnitAnimation( udg_Caster[udg_Number], "birth" )
      call SetUnitPathing( udg_Caster[udg_Number], false )
      call UnitAddAbilityBJ( 'Arav', udg_Caster[udg_Number] )
      call PauseUnitBJ( true, udg_Caster[udg_Number] )
за время обработки которых, переменная "GetSpellTargetLoc()" успевала обнулиться (скорее всего именно первая из них). Вылечилось перемещением определения переменной в начало функции.
p.s. думал только функции типа Wait могут приносит такие проблемы, вот и не предал значению
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
24
5 лет назад
0
Так выведи же в чат координаты между которыми вычисляеш расстояние. Скорее всего, какая-то из пар координат выведет нули.
0
16
5 лет назад
Отредактирован TeX13
0
Перед определением переменной с точкой стояли функции:
      call SetUnitFacingToFaceLocTimed( udg_Caster[udg_Number], udg_Point[udg_Number], 0 )
      set udg_Real[udg_Number] = GetUnitFacing(udg_Caster[udg_Number])
      call SetUnitAnimation( udg_Caster[udg_Number], "birth" )
      call SetUnitPathing( udg_Caster[udg_Number], false )
      call UnitAddAbilityBJ( 'Arav', udg_Caster[udg_Number] )
      call PauseUnitBJ( true, udg_Caster[udg_Number] )
за время обработки которых, переменная "GetSpellTargetLoc()" успевала обнулиться (скорее всего именно первая из них). Вылечилось перемещением определения переменной в начало функции.
p.s. думал только функции типа Wait могут приносит такие проблемы, вот и не предал значению
Принятый ответ
4
28
5 лет назад
Отредактирован PT153
4
function DistanceBetweenPoints takes location locA, location locB returns real
    local real dx = GetLocationX(locB) - GetLocationX(locA)
    local real dy = GetLocationY(locB) - GetLocationY(locA)
    return SquareRoot(dx * dx + dy * dy)
endfunction
Функция абсолютно верная, ошибки ищите у себя.
Я использую такие.
function GetDistancePoints takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2))
endfunction

function GetDistanceUnitPoint takes unit u, real x, real y returns real
    local real dx = GetUnitX(u) - x
    local real dy = GetUnitY(u) - y
    return SquareRoot(dx * dx + dy * dy)
endfunction

function GetDistanceUnits takes unit u1, unit u2 returns real
    local real dx = GetUnitX(u1) - GetUnitX(u2)
    local real dy = GetUnitY(u1) - GetUnitY(u2)
    return SquareRoot(dx * dx + dy * dy)
endfunction
0
16
5 лет назад
0
PT153, я уже нашел, спасибо за интерес
Чтобы оставить комментарий, пожалуйста, войдите на сайт.