function Spawn( entityKeyValues ) -- вызывается когда юнит появляется
if not IsServer() then -- если сервер не отвечает
return
end
if thisEntity == nil then -- если данного юнита не существует
return
end
TargetAbility = thisEntity:FindAbilityByName( "earthshaker_fissure" )
NoTargetAbilityShaker = thisEntity:FindAbilityByName( "earthshaker_echo_slam" )
thisEntity:SetContextThink( "ShakerThink", ShakerThink, 1 ) -- поведение юнита каждую секунду
end
function ShakerThink()
if ( not thisEntity:IsAlive() ) then --если юнит мертв
return -1
end
if GameRules:IsGamePaused() == true then --если игра приостановлена
return 1
end
local enemies = FindUnitsInRadius(
thisEntity:GetTeamNumber(), --команда юнита
thisEntity:GetOrigin(), --местоположение юнита
nil, --айди юнита (необязательно)
800, --радиус поиска
DOTA_UNIT_TARGET_TEAM_ENEMY, -- юнитов чьей команды ищем вражеской/дружественной
DOTA_UNIT_TARGET_HERO, --юнитов какого типа ищем
DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES + DOTA_UNIT_TARGET_FLAG_NO_INVIS, --поиск по флагам
FIND_CLOSEST, --сортировка от ближнего к дальнему или от дальнего к ближнему
false )
if #enemies > 0 then -- если количество найденных юнитов больше нуля
if TargetAbility ~= nil and TargetAbility:IsFullyCastable() then --если абилка существует и её можно использовать
for i=1, #enemies do
if enemies[i]:GetHealth() < (enemies[i]:GetMaxHealth() * 1.00 ) then
TargetAbilityCast( enemies[i])
end
end
end
if NoTargetAbilityShaker ~= nil and NoTargetAbilityShaker:IsFullyCastable() then --если абилка существует и её можно использовать
return NoTargetAbilityShakerCast()
end
end
return 0.5
end
function TargetAbilityCast( enemy )
ExecuteOrderFromTable({
UnitIndex = thisEntity:entindex(), --индекс кастера
OrderType = DOTA_UNIT_ORDER_CAST_POSITION, -- тип приказа
AbilityIndex = TargetAbility:entindex(), -- индекс способности
Position = enemy:entindex(),
Queue = false,
})
return 1.5
end
function NoTargetAbilityShakerCast()
ExecuteOrderFromTable({
UnitIndex = thisEntity:entindex(), --индекс кастера
OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET, -- тип приказа
AbilityIndex = NoTargetAbilityShaker:entindex(), -- индекс способности
Queue = false,
})
return 1.5
end