(Рубрика) Все что хотим то и создаём, любые скиллы. #1 > Скилл урсы Overpower(Custom)

DDSuper

Друзья CG
31 Май 2019
405
57
Всем привет в рубрике я Barney из чёрной мезы.
Сегодня, мы создадим второй скилл Урсы. Изменения: Способность пассивная. Нужно иметь определенное количество стаков. Если вы имеете определенное количество стаков — Применить модификатор и дать атак спид
Сразу Д.Д:
C++:
"custom_overpower"
    {
        "BaseClass"                     "ability_datadriven"
        "AbilityTextureName"            "ursa_overpower"
        "MaxLevel"                         "7"
        "RequiredLevel"                    "4 6 9 12 15 18 22"
        "AbilityBehavior"                "DOTA_ABILITY_BEHAVIOR_PASSIVE"
        "AbilitySpecial" // Все что нужно для работы
        {
            "01"
            {
                "var_type"            "FIELD_INTEGER"
                "attack_speed"            "130 150 200 230 250 270 300"
            }
            "02"
            {
                "var_type"            "FIELD_FLOAT"
                "max_attack"        "5 8 10 13 15 18 20"
            }
            "03"
            {
                "var_type"    "FIELD_INTEGER"
                "need_stacks"    "15 14 12 10 8 7"
            }
        }
        "Modifiers" // Модификаторы без их никак
        {
            "modifier_passive_attack_damage_count" // Пассивный накопитель стаков
            {
                "Passive"            "1"
                "IsHidden"            "0"
                "IsDebuff"            "0"
                "IsBuff"            "1"
             
                "OnAttackLanded"
                {
                    "RunScript" // Вызов скрипта
                    {
                        "ScriptFile"    "custom_overpower"
                        "Function"        "StillNeedStack"
                    }
                }
            }
            "modifier_attack_speed_bonus"
            {
                "Passive"            "0"
                "IsHidden"            "0"
                "IsDebuff"            "0"
                "IsBuff"            "1"

                "OnCreated"
                {
                    "RunScript" // При создании модификатор дать стаки кастеру
                    {
                        "ScriptFile"    "custom_overpower"
                        "Function"        "SpawnStacks"
                    }
                }

                "OnAttack" // Кастер атакует понизить стак.
                {
                    "RunScript"
                    {
                        "ScriptFile"    "custom_overpower"
                        "Function"        "DecreaseStack"
                    }
                }
         
                "Properties" // Дополнительная скорости атаки
                {
                    "MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT" "%attack_speed"
                }
            }
        }
    }
}
Луа. Как бы всегда необходим, если вы хотите как то это сделать на д.д не пытайтесь бесполезно.

Lua:
function StillNeedStack( keys ) -- За удар дать стак
    local caster = keys.caster
    local target = keys.target
    local ability = keys.ability
    local need_stack = ability:GetSpecialValueFor( "need_stacks" ) -- Необходимо стаков
    local max_attacks = ability:GetSpecialValueFor( "max_attack" ) -- Максимум быстрых атак
    local modifierName = "modifier_passive_attack_damage_count" -- Название модификатора

    if caster:HasModifier( modifierName ) then -- Проверка на модификатор
        local current_stack = caster:GetModifierStackCount( modifierName, ability) -- Получить стаки

        if current_stack < need_stack then -- Проверка если определённый стак меньше за необходимое количества стаков тогда продолжить набивать стаки
            caster:SetModifierStackCount( modifierName, ability, current_stack +1) -- Прибавить стак
        else --  Негативная сторона этого условия.
            ability:ApplyDataDrivenModifier(caster, caster, "modifier_attack_speed_bonus", { duration = -1 } ) -- Применяем модификатор на скорость атаки ставим -1 она станет, пассивной.
            caster:RemoveModifierByName( modifierName ) -- Убираем это модификатор чтобы не получился абуз на бесконечную скорость атаки
        end
    end
end
function SpawnStacks( keys ) -- Модификатор создан значит заспавнить стаки надо!
    local caster = keys.caster
    local ability = keys.ability
    local max_attacks = ability:GetSpecialValueFor( "max_attack" ) -- Это сколько можно нанести быстрых атак

    caster:SetModifierStackCount(  "modifier_attack_speed_bonus", ability, max_attacks) -- Выдаем стаки

end

function DecreaseStack( keys ) -- Снижение стака за удар
    local caster = keys.caster
    local target = keys.target
    local ability = keys.ability
    local current_stack = caster:GetModifierStackCount( "modifier_attack_speed_bonus" , ability)

    if current_stack > 1 then -- Проверка если набитое количество больше за один тогда продолжить снимать стаки
        caster:SetModifierStackCount( "modifier_attack_speed_bonus",ability, current_stack - 1)
    else -- Негативное Условия. Если это не так тогда снять этот модификатор и применить модификатор который накапливает стаки
        ability:ApplyDataDrivenModifier(caster, caster, "modifier_passive_attack_damage_count", { duration = -1 }) -- Применяем обычный модификатор
        caster:RemoveModifierByName( "modifier_attack_speed_bonus" ) -- А этот мы убираем
    end
end

Если вам понравилась эта рубрика ставьте лайк!
Ну, а свами Барни!
Пока.
Увидимся позднее.
 
Последнее редактирование:
  • Нравится
Реакции: dEN5 и soofft91
Реклама: