- 23 Авг 2022
- 28
- 1
Сделал способность наподобие пассивки веника, но без замедла и с эффектом горения. При запуске кастомки пишет в консоль
Ability script afterburn_lua failed to find class named afterburn.
Вот код абилки в npc_abilities_custom
lua спелл
lua модификатор на владельце
lua дебафф на враге
Ability script afterburn_lua failed to find class named afterburn.
Вот код абилки в npc_abilities_custom
KV:
"afterburn"
{
"BaseClass" "ability_lua"
"AbilityTextureName" "ember_spirit_sleight_of_fist"
"MaxLevel" "1"
"ScriptFile" "afterburn_lua"
"AbilityType" "DOTA_ABILITY_TYPE_BASIC"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE"
"AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO"
"SpellDispellableType" "SPELL_DISPELLABLE_YES"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_ALL"
"AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_NONE"
"AbilitySpecial"
{
"burn_dps"
{
"var_type" "FIELD_INTEGER"
"value" "220"
}
"burn_duration"
{
"var_type" "FIELD_INTEGER"
"value" "2"
}
}
}
Lua:
afterburn_lua = class({})
modifier_afterburn_lua = class({})
modifier_afterburn_debuff_lua = class({})
LinkLuaModifier( "modifier_afterburn_lua", "modifier_afterburn_lua", LUA_MODIFIER_MOTION_NONE )
LinkLuaModifier( "modifier_afterburn_debuff_lua", "modifier_afterburn_debuff_lua", LUA_MODIFIER_MOTION_NONE )
function afterburn_lua:Precache( context )
PrecacheResource( "particle", "particles/units/heroes/hero_shredder/shredder_flame_thrower_tree_afterburn.vpcf", context )
end
function afterburn_lua:Spawn()
if not IsServer() then
return
end
end
function modifier_afterburn_lua:GetIntrinsicModifierName()
return "modifier_afterburn_lua"
end
function modifier_afterburn_debuff_lua:GetIntrinsicModifierName()
return "modifier_afterburn_debuff_lua"
end
Lua:
modifier_afterburn_lua = class({})
function modifier_afterburn_lua:IsHidden()
return true
end
function modifier_afterburn_lua:IsDebuff()
return false
end
function modifier_afterburn_lua:IsStunDebuff()
return false
end
function modifier_afterburn_lua:IsPurgable()
return false
end
function modifier_afterburn_lua:OnCreated( kv )
self.caster = self:GetCaster()
self.ability = self:GetAbility()
self.team = self:GetCaster():GetTeamNumber()
-- references
self.duration = self:GetAbility():GetSpecialValueFor( "burn_duration" )
if not IsServer() then return end
-- ability properties
self.abilityDamageType = self:GetAbility():GetAbilityDamageType()
self.abilityTargetTeam = self:GetAbility():GetAbilityTargetTeam()
self.abilityTargetType = self:GetAbility():GetAbilityTargetType()
self.abilityTargetFlags = self:GetAbility():GetAbilityTargetFlags()
end
function modifier_afterburn_lua:OnRefresh( kv )
self:OnCreated( kv )
end
function modifier_afterburn_lua:OnRemoved()
end
function modifier_afterburn_lua:OnDestroy()
end
--------------------------------------------------------------------------------
-- Modifier Effects
function modifier_afterburn_lua:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_PROCATTACK_FEEDBACK,
}
return funcs
end
function modifier_afterburn_lua:GetModifierProcAttack_Feedback( params )
if not IsServer() then return end
if self.caster:PassivesDisabled() then return end
local filter = UnitFilter(
params.target,
self.abilityTargetTeam,
self.abilityTargetType,
self.abilityTargetFlags,
self.team
)
if not filter==UF_SUCCESS then return end
-- apply debuff
params.target:AddNewModifier(
self.caster, -- player source
self.ability, -- ability source
"modifier_afterburn_debuff_lua", -- modifier name
{ burn_duration = self.duration } -- kv
)
end
Lua:
modifier_afterburn_debuff_lua = class({})
--------------------------------------------------------------------------------
-- Classifications
function modifier_afterburn_debuff_lua:IsHidden()
return false
end
function modifier_afterburn_debuff_lua:IsDebuff()
return true
end
function modifier_afterburn_debuff_lua:IsStunDebuff()
return false
end
function modifier_afterburn_debuff_lua:IsPurgable()
return true
end
--------------------------------------------------------------------------------
-- Initializations
function modifier_afterburn_debuff_lua:OnCreated( kv )
self.parent = self:GetParent()
self.caster = self:GetCaster()
-- references
local damage = self:GetAbility():GetSpecialValueFor( "burn_dps" )
if not IsServer() then return end
-- precache damage
self.damageTable = {
victim = self:GetParent(),
attacker = self:GetCaster(),
damage = damage,
damage_type = DAMAGE_TYPE_MAGICAL,
ability = self:GetAbility(), --Optional.
damage_flags = DOTA_DAMAGE_FLAG_HPLOSS, --Optional.
}
-- ApplyDamage(damageTable)
self:StartIntervalThink( 1 )
self:OnIntervalThink()
end
function modifier_afterburn_debuff_lua:OnRefresh( kv )
self:OnCreated( kv )
end
function modifier_afterburn_debuff_lua:OnRemoved()
end
function modifier_afterburn_debuff_lua:OnDestroy()
end
--------------------------------------------------------------------------------
-- Modifier Effects
function modifier_afterburn_debuff_lua:DeclareFunctions()
local funcs = {
}
return 0
end
--------------------------------------------------------------------------------
-- Interval Effects
function modifier_afterburn_debuff_lua:OnIntervalThink()
ApplyDamage( self.damageTable )
-- overhead damage info
SendOverheadEventMessage(
nil,
OVERHEAD_ALERT_BONUS_SPELL_DAMAGE,
self.parent,
self.damageTable.damage,
self.caster:GetPlayerOwner()
)
end
--------------------------------------------------------------------------------
-- Graphics & Animations
function modifier_afterburn_debuff_lua:GetEffectName()
return "particles/units/heroes/hero_shredder/shredder_flame_thrower_tree_afterburn.vpcf"
end
function modifier_afterburn_debuff_lua:GetEffectAttachType()
return PATTACH_ABSORIGIN_FOLLOW
end