как сделать так что бы ракеты накладывали стан

  • Автор темы Автор темы qodurb
  • Дата начала Дата начала

qodurb

Новичок
29 Июн 2024
6
0
как сделать так что бы ракеты оглушали врага
Lua:
tinker_heat_seeking_missile_lua = class({})

--------------------------------------------------------------------------------
-- Ability Start
function tinker_heat_seeking_missile_lua:OnSpellStart()
    -- unit identifier
    local caster = self:GetCaster()

    -- load data
    local radius = self:GetSpecialValueFor("radius")
    local damage = self:GetSpecialValueFor("damage")   
    local targets = self:GetSpecialValueFor("targets")
    if caster:HasScepter() then
        targets = self:GetSpecialValueFor("targets_scepter")
    end
    local projectile_name = "particles/units/heroes/hero_tinker/tinker_missile.vpcf"
    local projectile_speed = self:GetSpecialValueFor("speed")

    -- find enemies
    local enemies = FindUnitsInRadius(
        caster:GetTeamNumber(),    -- int, your team number
        caster:GetOrigin(),    -- point, center point
        nil,    -- handle, cacheUnit. (not known)
        radius,    -- float, radius. or use FIND_UNITS_EVERYWHERE
        DOTA_UNIT_TARGET_TEAM_ENEMY,    -- int, team filter
        DOTA_UNIT_TARGET_HERO,    -- int, type filter
        DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE + DOTA_UNIT_TARGET_FLAG_NO_INVIS,    -- int, flag filter
        FIND_CLOSEST,    -- int, order filter
        false    -- bool, can grow cache
    )

    -- create projectile for each enemy
    local info = {
        Source = caster,
        -- Target = target,
        Ability = self,
        EffectName = projectile_name,
        iMoveSpeed = projectile_speed,
        bDodgeable = true,
        ExtraData = {
            damage = damage,
        }
    }
    for i=1,math.min(targets,#enemies) do
        info.Target = enemies[i]
        ProjectileManager:CreateTrackingProjectile( info )
    end

    -- effects
    if #enemies<1 then
        self:PlayEffects2()
    else
        local sound_cast = "Hero_Tinker.Heat-Seeking_Missile"
        EmitSoundOn( sound_cast, caster )
    end
end
--------------------------------------------------------------------------------
-- Projectile
function tinker_heat_seeking_missile_lua:OnProjectileHit_ExtraData( target, location, extraData )
    -- Apply damage
    local damage = {
        victim = target,
        attacker = self:GetCaster(),
        damage = extraData.damage,
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability = self
    }
    ApplyDamage( damage )

    -- effects
    self:PlayEffects1( target )
end

--------------------------------------------------------------------------------
-- Effects
function tinker_heat_seeking_missile_lua:PlayEffects1( target )
    local particle_cast = "particles/units/heroes/hero_tinker/tinker_missle_explosion.vpcf"
    local sound_cast = "Hero_Tinker.Heat-Seeking_Missile.Impact"

    local effect_cast = ParticleManager:CreateParticle( particle_cast, PATTACH_ABSORIGIN_FOLLOW, target )
    ParticleManager:ReleaseParticleIndex( effect_cast )

    EmitSoundOn( sound_cast, target )
end

function tinker_heat_seeking_missile_lua:PlayEffects2()
    local particle_cast = "particles/units/heroes/hero_tinker/tinker_missile_dud.vpcf"
    local sound_cast = "Hero_Tinker.Heat-Seeking_Missile_Dud"

    local attach = "attach_attack1"
    if self:GetCaster():ScriptLookupAttachment( "attach_attack3" )~=0 then attach = "attach_attack3" end
    local point = self:GetCaster():GetAttachmentOrigin( self:GetCaster():ScriptLookupAttachment( attach ) )

    -- play particle
    local effect_cast = ParticleManager:CreateParticle( particle_cast, PATTACH_WORLDORIGIN, self:GetCaster() )
    ParticleManager:SetParticleControl( effect_cast, 0, point )
    ParticleManager:SetParticleControlForward( effect_cast, 0, self:GetCaster():GetForwardVector() )
    ParticleManager:ReleaseParticleIndex( effect_cast )

    EmitSoundOn( sound_cast, self:GetCaster() )
end
 
Код:
function tinker_heat_seeking_missile_lua:OnProjectileHit_ExtraData( target, location, extraData )
    -- Apply damage
    local damage = {
        victim = target,
        attacker = self:GetCaster(),
        damage = extraData.damage,
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability = self
    }
    ApplyDamage( damage )
    target:AddNewModifier(self:GetCaster, self, "modifier_stunned", {duration = 1})

    -- effects
    self:PlayEffects1( target )
end
 
если я хочу что бы длительность стана редактировалась через кв файл нужно убрать {duration = 1} и добавить
Lua:
-- load data
    local radius = self:GetSpecialValueFor("radius")
    local damage = self:GetSpecialValueFor("damage") 
    local targets = self:GetSpecialValueFor("targets")
    if caster:HasScepter() then
        targets = self:GetSpecialValueFor("targets_scepter")
    end
    local modifier_stunned = self:GetSpecialValueFor("stunned_duration")
?
 
Последнее редактирование:
ну как бы да, только эта строчка должна быть в блоке OnProjectileHit
а присваивать надо в том месте где было duration = 1, стало duration = modifier_stunned
 
всмысле "только эта строчка должна быть в блоке OnProjectileHit" она же вроде там и находится или о какой строчке идет речь
 
Код:
function tinker_heat_seeking_missile_lua:OnProjectileHit_ExtraData( target, location, extraData )
    -- Apply damage
    local damage = {
        victim = target,
        attacker = self:GetCaster(),
        damage = extraData.damage,
        damage_type = DAMAGE_TYPE_MAGICAL,
        ability = self
    }
    ApplyDamage( damage )
    target:AddNewModifier(self:GetCaster, self, "modifier_stunned", {duration = 1})

    -- effects
    self:PlayEffects1( target )
end
вот посмотри что я тебе скинул, здесь логика накладывания стана
А тебе теперь просто нужно определить его длительность, то что ты написал выше в блоке OnSpellStart часть отвечающую за длительность перенеси в другое место
 
Реклама: