Поведение ai но для предметов

Novichek

Активный
18 Фев 2020
123
14
Проект
Evo Land
Чет прошерстил все что смог и не нашел. Как можно заставить использовать предмет, хотя бы ноу таргет?
 
Серьезно сейчас, бля Виталя (@vulkantsk) научи молодого пользоваться поиском и твоим сборником гайдов + туторами на нейтралов
 
Серьезно сейчас, бля Виталя (@vulkantsk) научи молодого пользоваться поиском и твоим сборником гайдов + туторами на нейтралов
серьезно да?? 2 чела сидят на сайте толком написать метод и есть ли он вообще, не могут. Класс
 
Последнее редактирование:
Серьезно сейчас, бля Виталя (@vulkantsk) научи молодого пользоваться поиском и твоим сборником гайдов + туторами на нейтралов
Если че как бы не спосбность использовать ! А предмет, а то вдруг не понятно.
 
Если че как бы не спосбность использовать ! А предмет, а то вдруг не понятно.
Если чо, я понял твой вопрос
Кастомками не занимаюсь чтоб тебе помочь вырезкой из кода , но вот зато знаю что на форуме есть эта информация
 
форум так то не маленький...
Это же отлично, чем больше информации, тем лучше для пользователей , что они могут найти ответы на часто задаваемые вопросы

Только вот, вопросы все что я видел за последние пару лет, повторяются... Редко вижу вопрос, которого не задавали
 
Такое чувство, что ты даже не искал. Взял весь код из гайда https://customgames.ru/forum/threads/Создаем-поведение-юнита-creature-ai.1718/#post-18758

Lua:
function Spawn( entityKeyValues )    -- вызывается когда юнит появляется

    if not IsServer() then        -- если сервер не отвечает

        return

    end



    if thisEntity == nil then    -- если данного юнита не существует

        return

    end



    local waypoint = Entities:FindByName( nil, "d_waypoint19")         -- Записываем в переменную 'waypoint' координаты бокса d_waypoint19

     if waypoint then thisEntity:SetInitialGoalEntity( waypoint ) end-- Посылаем моба на наш d_waypoint19, координаты которого мы записали в переменную 'waypoint'



    NoTargetAbility1 = thisEntity:FindAbilityByName( "necrolyte_boss_death_pulse" )

    NoTargetAbility2 = thisEntity:FindAbilityByName( "necrolyte_sadist" )

    TargetAbility = thisEntity:FindAbilityByName( "creature_reapers_scythe" )



    ItemAbility = FindItemAbility( thisEntity, "item_shivas_guard" )



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

end



function NecroLordThink()

    if ( not thisEntity:IsAlive() ) then        --если юнит мертв

        return -1

    end

 

    if GameRules:IsGamePaused() == true then    --если игра приостановлена

        return 1

    end





    local enemies = FindUnitsInRadius(

                        thisEntity:GetTeamNumber(),    --команда юнита

                        thisEntity:GetOrigin(),        --местоположение юнита

                        nil,    --айди юнита (необязательно)

                        1250,    --радиус поиска

                        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 NoTargetAbility1 ~= nil and NoTargetAbility1:IsFullyCastable()  then    --если абилка существует и её можно использовать

            return NoTargetAbility1Cast()

        end



        if NoTargetAbility2 ~= nil and NoTargetAbility2:IsFullyCastable()  then    --если абилка существует и её можно использовать

            if thisEntity:GetHealth() < ( thisEntity:GetMaxHealth() * 0.3 ) then

                NoTargetAbility2Cast()

            end

        end







        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



        if ItemAbility ~= nil and ItemAbility:IsFullyCastable()  then    --если предмет существует и её можно использовать

            if thisEntity:GetHealth() < ( thisEntity:GetMaxHealth() * 0.3 ) then

                ItemAbilityCast()

            end

        end

      





    end

        return 0.5

 

end





function NoTargetAbility1Cast()

    ExecuteOrderFromTable({

        UnitIndex = thisEntity:entindex(),    --индекс кастера

        OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET,    -- тип приказа

        AbilityIndex = NoTargetAbility1:entindex(),    -- индекс способности

        Queue = false,

    })

 

    return 1.5

end



function NoTargetAbility2Cast()

    ExecuteOrderFromTable({

        UnitIndex = thisEntity:entindex(),    --индекс кастера

        OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET,    -- тип приказа

        AbilityIndex = NoTargetAbility2:entindex(), -- индекс способности

        Queue = false,

    })

 

    return 1.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 ItemAbilityCast()

        ExecuteOrderFromTable({

            UnitIndex = thisEntity:entindex(),    --индекс кастера

            OrderType = DOTA_UNIT_ORDER_CAST_NO_TARGET,    -- тип приказа

            AbilityIndex = ItemAbility:entindex(), -- индекс способности

            Queue = false,

        })

    return 1

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
 
Реклама: