"custom_slow_attack"
{
"BaseClass" "ability_lua"
"AbilityTextureName" "custom_slow_attack"
"ScriptFile" "abilities/custom_slow_attack"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE"
"AbilityType" "DOTA_ABILITY_TYPE_BASIC"
"MaxLevel" "1"
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"slow_duration" "2" // Длительность замедления в секундах
}
"02"
{
"var_type" "FIELD_INTEGER"
"slow_amount" "10" // Процент замедления
}
}
}
LinkLuaModifier("modifier_custom_slow_attack", "abilities/custom_slow_attack", LUA_MODIFIER_MOTION_NONE)
custom_slow_attack = class({})
function custom_slow_attack:GetIntrinsicModifierName()
return "modifier_custom_slow_attack"
end
modifier_custom_slow_attack = class({})
function modifier_custom_slow_attack:IsHidden()
return true
end
function modifier_custom_slow_attack:DeclareFunctions()
local funcs = {
MODIFIER_EVENT_ON_ATTACK_LANDED,
}
return funcs
end
function modifier_custom_slow_attack:OnAttackLanded(keys)
if IsServer() then
local attacker = keys.attacker
local target = keys.target
if attacker == self:GetParent() and target:IsHero() then
local slow_duration = self:GetAbility():GetSpecialValueFor("slow_duration")
local slow_amount = self:GetAbility():GetSpecialValueFor("slow_amount")
target:AddNewModifier(attacker, self:GetAbility(), "modifier_custom_slow_attack", {duration = slow_duration})
end
end
end
function modifier_custom_slow_attack:GetEffectName()
return "particles/generic_gameplay/generic_slowed_cold.vpcf"
end
function modifier_custom_slow_attack:GetEffectAttachType()
return PATTACH_ABSORIGIN_FOLLOW
end
function modifier_custom_slow_attack:GetTexture()
return "custom_slow_attack"
end
function modifier_custom_slow_attack:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE,
}
return funcs
end
function modifier_custom_slow_attack:GetModifierMoveSpeedBonus_Percentage()
return -self:GetAbility():GetSpecialValueFor("slow_amount")
end
Почему-то не работаетДля создания пассивной способности, которая замедляет противника (героя) при атаке, вам понадобится изменить файл npc_abilities_custom.txt и написать соответствующий Lua-скрипт.
1. Откройте файл npc_abilities_custom.txt и добавьте следующий код:
Код:"custom_slow_attack" { "BaseClass" "ability_lua" "AbilityTextureName" "custom_slow_attack" "ScriptFile" "abilities/custom_slow_attack" "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" "AbilityType" "DOTA_ABILITY_TYPE_BASIC" "MaxLevel" "1" "AbilitySpecial" { "01" { "var_type" "FIELD_INTEGER" "slow_duration" "2" // Длительность замедления в секундах } "02" { "var_type" "FIELD_INTEGER" "slow_amount" "10" // Процент замедления } } }
2. Создайте новый файл с именем custom_slow_attack.lua и поместите его в папку scripts/vscripts/abilities/. Вставьте следующий код в файл:
Lua:LinkLuaModifier("modifier_custom_slow_attack", "abilities/custom_slow_attack", LUA_MODIFIER_MOTION_NONE) custom_slow_attack = class({}) function custom_slow_attack:GetIntrinsicModifierName() return "modifier_custom_slow_attack" end modifier_custom_slow_attack = class({}) function modifier_custom_slow_attack:IsHidden() return true end function modifier_custom_slow_attack:DeclareFunctions() local funcs = { MODIFIER_EVENT_ON_ATTACK_LANDED, } return funcs end function modifier_custom_slow_attack:OnAttackLanded(keys) if IsServer() then local attacker = keys.attacker local target = keys.target if attacker == self:GetParent() and target:IsHero() then local slow_duration = self:GetAbility():GetSpecialValueFor("slow_duration") local slow_amount = self:GetAbility():GetSpecialValueFor("slow_amount") target:AddNewModifier(attacker, self:GetAbility(), "modifier_custom_slow_attack", {duration = slow_duration}) end end end function modifier_custom_slow_attack:GetEffectName() return "particles/generic_gameplay/generic_slowed_cold.vpcf" end function modifier_custom_slow_attack:GetEffectAttachType() return PATTACH_ABSORIGIN_FOLLOW end function modifier_custom_slow_attack:GetTexture() return "custom_slow_attack" end function modifier_custom_slow_attack:DeclareFunctions() local funcs = { MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE, } return funcs end function modifier_custom_slow_attack:GetModifierMoveSpeedBonus_Percentage() return -self:GetAbility():GetSpecialValueFor("slow_amount") end
3. Сохраните файлы и перезапустите Dota 2.
Теперь у вас есть пассивная способность "custom_slow_attack", которая замедляет противника на 10% на 2 секунды при каждой атаке. Вы можете настроить значения замедления и длительности в файле npc_abilities_custom.txt.
Замени луашку на эту - должно все воркать, проверил /// партикл добавляй сам!Почему-то не работает
LinkLuaModifier("modifier_custom_slow_attack", "abilities/custom_slow_attack", LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier("modifier_custom_slow_attack_debuff", "abilities/custom_slow_attack", LUA_MODIFIER_MOTION_NONE)
custom_slow_attack = class({})
function custom_slow_attack:GetIntrinsicModifierName()
return "modifier_custom_slow_attack"
end
modifier_custom_slow_attack = class({})
function modifier_custom_slow_attack:IsHidden()
return true
end
function modifier_custom_slow_attack:DeclareFunctions()
local funcs = {
MODIFIER_EVENT_ON_ATTACK_LANDED,
}
return funcs
end
function modifier_custom_slow_attack:OnAttackLanded(keys)
if IsServer() then
local attacker = keys.attacker
local target = keys.target
if attacker == self:GetParent() and target:IsHero() and attacker:GetTeamNumber() ~= target:GetTeamNumber() then
local slow_duration = self:GetAbility():GetSpecialValueFor("slow_duration")
local slow_amount = self:GetAbility():GetSpecialValueFor("slow_amount")
target:AddNewModifier(attacker, self:GetAbility(), "modifier_custom_slow_attack_debuff", {duration = slow_duration})
end
end
end
modifier_custom_slow_attack_debuff = class({})
function modifier_custom_slow_attack_debuff:IsDebuff()
return true
end
function modifier_custom_slow_attack_debuff:GetEffectName()
return "particles/items_fx/wand_of_the_brine_buff.vpcf"
end
function modifier_custom_slow_attack_debuff:GetEffectAttachType()
return PATTACH_ABSORIGIN_FOLLOW
end
function modifier_custom_slow_attack_debuff:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE,
}
return funcs
end
function modifier_custom_slow_attack_debuff:GetModifierMoveSpeedBonus_Percentage()
return -self:GetAbility():GetSpecialValueFor("slow_amount")
end
"DOTA_Tooltip_modifier_custom_slow_attack_debuff" "Яд"
"DOTA_Tooltip_modifier_custom_slow_attack_debuff_Description" "Вы замедлены"
"DOTA_Tooltip_Ability_custom_slow_attack" "Ядовитые путы"
"DOTA_Tooltip_Ability_custom_slow_attack_Description" "Замедляет атакуемую цель на %slow_duration% секунды на %slow_amount%%."
Большое спасибо! Завтра проверюЧуть скринов + addon_russian.txt
Код:"DOTA_Tooltip_modifier_custom_slow_attack_debuff" "Яд" "DOTA_Tooltip_modifier_custom_slow_attack_debuff_Description" "Вы замедлены" "DOTA_Tooltip_Ability_custom_slow_attack" "Ядовитые путы" "DOTA_Tooltip_Ability_custom_slow_attack_Description" "Замедляет атакуемую цель на %slow_duration% секунды на %slow_amount%%."
Я проверил и понял, что возможно тот код тоже работал, но у меня был модификатор который даёт бафф герою и модикатор который замедляет врага, а я написал 2 фунции GetIntrinsicModifierName() на бафф и на дебафф врага поэтоиу не работало. Сейчас добавил функцию OnAttackLanded в модификатор баффа и добавил партикл, теперь при атаке всё работает. Спасибо!Чуть скринов + addon_russian.txt
Код:"DOTA_Tooltip_modifier_custom_slow_attack_debuff" "Яд" "DOTA_Tooltip_modifier_custom_slow_attack_debuff_Description" "Вы замедлены" "DOTA_Tooltip_Ability_custom_slow_attack" "Ядовитые путы" "DOTA_Tooltip_Ability_custom_slow_attack_Description" "Замедляет атакуемую цель на %slow_duration% секунды на %slow_amount%%."