Как заставить трента ударить из инвиза

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
есть стандартный трент и 1 скил у него это его инвиз, вопрос как заставить его ударить из инвиза. У меня он просто стоит и не реагирует ни на что!
пробовал дать ему еще один скил, думал выйдет из инвиза применив скил но нет) не хочет код 2-го скила
Код:
function Spawn( entityKeyValues )    -- вызывается когда юнит появляется
    if not IsServer() then        -- если сервер не отвечает
        return
    end
    if thisEntity == nil then    -- если данного юнита не существует
        return
    end

    TargetAbility = thisEntity:FindAbilityByName( "treant_leech_seed" )

    thisEntity:SetContextThink( "treantthink", treantthink, 1 )    -- поведение юнита каждую секунду
end

function treantthink()
    if ( not thisEntity:IsAlive() ) then        --если юнит мертв
        return -1 
    end
  
    if GameRules:IsGamePaused() == true then    --если игра приостановлена
        return 1 
    end

    local enemies = FindUnitsInRadius(
                        thisEntity:GetTeamNumber(),    --команда юнита
                        thisEntity:GetOrigin(),        --местоположение юнита
                        nil,    --айди юнита (необязательно)
                        500,    --радиус поиска
                        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() * 0.35 ) then
                    TargetAbilityCast( enemies[i])
                end     
            end
        end

    end
        return 0.5
  
end


function TargetAbilityCast( enemy )

    ExecuteOrderFromTable({
        UnitIndex = thisEntity:entindex(),    --индекс кастера
        OrderType = DOTA_UNIT_ORDER_CAST_TARGET,    -- тип приказа
        AbilityIndex = TargetAbility:entindex(), -- индекс способности
        TargetIndex = enemy:entindex(),
        Queue = false,
    })

    return 1.5
end


function FindItemAbility( hCaster, szItemName )    --необходимая утилита , без нее не будет работать функция FindItemAbility
    for i = 0, 5 do
        local item = hCaster:GetItemInSlot( i )
        if item then
            if item:GetAbilityName() == szItemName then
                return item
            end
        end
    end
end
 

muRLoc

Активный
25 Ноя 2018
83
23
Замени это:
Код:
for i=1, #enemies do
        if enemies[i]:GetHealth() < (enemies[i]:GetMaxHealth() * 0.35 ) then
        TargetAbilityCast( enemies[i])
    end   
end

На это:

Код:
for _,unit in pairs(enemies) do
    if unit then -- Тут все твои проверки на хп и прочее.
        TargetAbilityCast(unit)
    end
end
 
Последнее редактирование:

vulkantsk

Супермодератор
Команда форума
21 Июн 2017
1,137
196
www.dotabuff.com
Проект
Roshan defense
Скорее всего у юнита прописан neutralCreepBehavior поставь на 0
И если ты не понял то скил юзается только на тех ГЕРОЕВ , которые имеют меньше 35% хп
 

xDes

Продвинутый
8 Ноя 2018
232
34
Проект
Boss Survival Adventure
Замени это:
Код:
for i=1, #enemies do
        if enemies[i]:GetHealth() < (enemies[i]:GetMaxHealth() * 0.35 ) then
        TargetAbilityCast( enemies[i])
    end  
end

На это:

Код:
for _,unit in pairs(enemies) do
    if unit then -- Тут все твои проверки на хп и прочее.
        TargetAbilityCast(unit)
    end
end
супер, огромное спасибо))) теперь он кастует из инвиза)) я добавил еще это- thisEntity:SetForceAttackTarget(unit) и теперь он выходит из инвиза и бьет в лицо))
ты мой герой!)))


Скорее всего у юнита прописан neutralCreepBehavior поставь на 0
И если ты не понял то скил юзается только на тех ГЕРОЕВ , которые имеют меньше 35% хп
да понял что на 35% я и тестил битыми героями
 

muRLoc

Активный
25 Ноя 2018
83
23
Код:
thisEntity:SetForceAttackTarget(unit)
Насколько я помню это неправильная реализация. Нужно отдавать именно приказ на атаку.
Могу ошибаться.
 
Реклама: