Шард. Подскажите пожалуйста, как добавить герою новую способность при покупку шарда?

Алексей1488

Пользователь
2 Авг 2023
17
3
Совсем не могу найти гайдов на эту тему. Хочу, чтобы шард при его покупки давал обычную способность из доты. А именно ульт арк вардена. Но совсем не могу понять как это сделать:( Помогите, пожалуйста
 
Опять же, как новичку тебе будет сложно понять что я напишу:
Тебе надо отследить через:
функцию OnInventoryContentsChanged()
Что у кастера есть модификатор
if self:GetCaster():HasModifier("modifier_item_aghanims_shard") then -- Есть ли модификатор шарда

небольшой пример, спасибо @stranger568
Lua:
test_ability = class({})
function test_ability:OnInventoryContentsChanged()
    if self:GetCaster():HasModifier("modifier_item_aghanims_shard") then -- Есть ли модификатор шарда
        self:SetHidden(false)  -- Абилка больше не будет скрытой     
        if not self:IsTrained() then -- Если она не прокачена, то даем ей уровень
            self:SetLevel(1)    -- Устанавливаем 1 уровень
        end
    else
        self:SetHidden(true) -- Пропал шард, то абилка скрывается с худа, если эта пассивка, то можно установить ей SetLevel(0)
    end
end
 
Последнее редактирование:
Lua:
function test_ability:OnInventoryContentsChanged()
    if self:GetCaster():HasModifier("modifier_item_aghanims_shard") then -- Есть ли модификатор шарда
        if not self:IsTrained() then -- Если она не прокачена, то даем ей уровень
            self:SetLevel(1)    -- Устанавливаем 1 уровень
        end
        local caster = self:GetCaster()
        local abilityName = "test_ability_hidden" -- Имя новой способности
        if not caster:HasAbility(abilityName) then -- Проверяем, есть ли уже такая способность у героя
            local ability = caster:AddAbility(abilityName) -- Добавляем новую способность
            ability:SetLevel(1) -- Устанавливаем уровень новой способности
        end
    else
        self:SetHidden(true) -- Пропал шард, то абилка скрывается с худа, если эта пассивка, то можно установить ей SetLevel(0)
        local caster = self:GetCaster()
        local abilityName = "test_ability_hidden" -- Имя способности, которую нужно удалить
        if caster:HasAbility(abilityName) then -- Проверяем, есть ли такая способность у героя
            caster:RemoveAbility(abilityName) -- Удаляем способность
        end
    end
end

Вот на выдачу абилки код, замени в local abilityName = "test_ability_hidden" -- Имя новой способности
test_ability_hidden - на арка ульту
И выдай test_ability - как скрытую пассивку герою на Ability14 например


Расписывать что куда засунуть и что куда писать я не буду.. устал уже
 
Ладно, спасибо за попытку. Потратил 3 часа, переставлял местами коды... Не понятно что куда писать и одним файлом это или 2 разных... Нужно ли трогать папку со способностями, и как вообще сослаться на способность или способность сослаться на луа файл... В любом случае либо пустая иконка, при нажатии которой ничего не происходит, либо её вообще нет... Пытался сделать со своей пассивной способностью, но при покупке шарда сама иконка пропадает, как и баффы от неё :)
 
Последнее редактирование:
Ладно, спасибо за попытку. Потратил 3 часа, переставлял местами коды... Не понятно что куда писать и одним файлом это или 2 разных... Нужно ли трогать папку со способностями, и как вообще сослаться на способность или способность сослаться на луа файл... В любом случае либо пустая иконка, при нажатии которой ничего не происходит, либо её вообще нет... Пытался сделать со своей пассивной способностью, но при покупке шарда сама иконка пропадает, как и баффы от неё :)
Человек... Я повторно устал расписывать как внедрить lua код в доту в виде абилки, вот тебе пример создания видимой пассивки , которая будет вызывать lua https://customgames.ru/forum/threads/Немного-пассивных-способностей.2801/#post-24329

Из примера тебе надо сделать
Чтоб пассивка была DOTA_ABILITY_BEHAVIOR_HIDDEN в txt абилок

И вызвать луашку которую я дал на выдачу абилки

Потом дать пассивку всем героям , как будешь давать меня мало волнует если хочешь меньше зеабываться и не переписывать всех героев то делай через lua слушатель OnNPCSpawned() который будет проверять что заспавнился герой isRealHero() и выдавать ему абилку-пассивку , которая будет уже слушать изменения инвентаря и в случае если появился шард , давать абилку
 
Просто добавляешь бихевиор абилке арк вардена - hidden
находишь героя в heroes.txt и добавляешь ему эту скрытую абилку седьмым слотом

в самой абилке указываешь IsGrantedByShard - yes
ну или на крайняк, через фильтры отлавливаешь покупку шарда и просто даришь абилку герою учитывая что шард ну никак продать нельзя :)
 
Реклама: