- 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
Если вам понравилась эта рубрика ставьте лайк!
Ну, а свами Барни!
Пока.
Увидимся позднее.
Последнее редактирование: