Добавлен Raised,
опубликован
Очередная триггерная способность
На сей раз задался целью понять как триггерно (безо всяких абилок) блокировать процент от получаемого юнитом урона. Пришлось поискать на форуме, но к счастью нужная тема нашлась довольно быстро. Нашёл сразу несколько интересных тем. Потом обьединил полученные сведения, обдумал их и...
Итого имеем:
- возможность блокировать любой процент получаемого урона
- возможность распределять любой процент полученного урона
- возможность распределять урон по всем в области, зависимо от их расстояния к герою
Что изменилось в последней версии:
- система лучше оптимизирована
- некоторые значения вынесены в переменные для лучшей настраиваемости
- некоторые функции вынесены в библиотеку в отдельных триггерах
- минимизировано количество переменных
Библиотека
library GetFastDistances
//Считает вертикальный угол из точки А с координатами (fromDimension1,fromDimension2,fromMain) на точку В
//с координатами (toDimension1,toDimension2,toMain). Возвращает значение в градусах.
function GetAngleDEG takes real fromDimension1, real fromDimension2, real fromMain, real toDimension1, real toDimension2, real toMain returns real
return Atan((fromMain-toMain)/SquareRoot(Pow((fromDimension1-toDimension1),2)+Pow((fromDimension2-toDimension2),2)))*bj_RADTODEG
endfunction
//Считает вертикальный угол из точки А с координатами (fromDimension1,fromDimension2,fromMain) на точку В
//с координатами (toDimension1,toDimension2,toMain). Возвращает значение в радианах.
function GetAngleRAD takes real fromDimension1, real fromDimension2, real fromMain, real toDimension1, real toDimension2, real toMain returns real
return Atan((fromMain-toMain)/SquareRoot(Pow((fromDimension1-toDimension1),2)+Pow((fromDimension2-toDimension2),2)))
endfunction
//Считает расстояние в осях между точками, заданными двумя координатами (X,Y)
function GetDistanceXY takes real xA, real yA, real xB, real yB returns real
return SquareRoot(Pow((xA-xB),2)+Pow((yA-yB),2))
endfunction
//Считает расстояние в осях между точками, заданными тремя координатами (X,Y,Z)
function GetDistanceXYZ takes real xA, real yA, real zA, real xB, real yB, real zB returns real
return SquareRoot(Pow((xA-xB),2)+Pow((yA-yB),2)+Pow((zA-zB),2))
endfunction
//Установить высоту юнита
function SetUnitZ takes unit u, real Z returns nothing
call UnitAddAbility(u,'Amrf')
call UnitRemoveAbility(u,'Amrf')
call SetUnitFlyHeight(u,Z,0)
endfunction
//Узнать высоту юнита
function GetUnitZ takes unit WhichUnit returns real
local real UnitZ
call MoveLocation(mathLocation,GetUnitX(WhichUnit),GetUnitY(WhichUnit))
set UnitZ = GetLocationZ(mathLocation)+GetUnitFlyHeight(WhichUnit)
set WhichUnit = null
return UnitZ
endfunction
//Узнать высоту ландшафта в заданной точке
function GetPointZ takes real X, real Y returns real
local real PointZ
call MoveLocation(mathLocation,X,Y)
set PointZ = GetLocationZ(mathLocation)
return PointZ
endfunction
//Возвращает дельту в указанных координатах
function getOffsetD takes real coord1, real coord2 returns real
return SquareRoot(Pow(coord1-coord2,2))
endfunction
endlibrary
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
Raised
8 лет назад
0
К слову, буду благодарен если кто подскажет как избавится от утечек когда юнита атакует множество других юнитов. Ясное дело, кроме как "перестать модить вар")
0
Raised
8 лет назад
0
Обновил. Некоторые функции вынес отдельную библиотеку. Может, кому-то будет интересно.
0
Clamp
8 лет назад
0
Ты определённо не то запостил в блоке кода
0
Raised
8 лет назад
0
Сам скилл разбил на куски. В коде многовато комментариев, будет уродливо отображатся.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.