Как всегда со своими проблемами... (Скрипт прилагаю)

GameLorD

Пользователь
2 Июн 2019
34
0
Проект
Dragon defence
Суть проблемы: Способность "...._fissure" не используется на точку рядом с целью, ни на саму цель,вообще никуда. Для примера оставил там ещё эхослэм, который работает отлично, когда юниты в радиусе. Вопрос. В чем может быть проблема? Вроде бы указал, что цель - позиция а не таргет. Способности у юнита есть, всё отображается отлично. Разобраться сам пытался, брал за пример различные другие АИ наработки на способности, но, пытаясь понять, всё время приходил к этому же результату. Вроде принцип простой, но не работает...
 

Вложения

GameLorD

Пользователь
2 Июн 2019
34
0
Проект
Dragon defence
Lua:
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
 
20 Дек 2016
681
97
Проект
DI:LS
Код:
ExecuteOrderFromTable({
UnitIndex = thisEntity:entindex(), --индекс кастера
OrderType = DOTA_UNIT_ORDER_CAST_POSITION, -- тип приказа
AbilityIndex = TargetAbility:entindex(), -- индекс способности
Position = enemy:entindex(),
Queue = false,
})
В поле Position тебе надо указывать вектор (позицию), а ты туда непонятно что кладешь.
enemy:GetOrigin()
 

GameLorD

Пользователь
2 Июн 2019
34
0
Проект
Dragon defence
Реклама: