описания - DOTA_ABILITY_BEHAVIOR

  • Автор темы Автор темы Inspire
  • Дата начала Дата начала
я только учусь, вот решил для себя раз и навсегда понять что да как заодно и мне подобным помочь....
учись учись, я тоже много где запарывался, но щас уже себя поуверенее чувствую
 
я понимаю что можно не давать кастренж, просто так удобнее игроку будет видеть, до куда он может дострелить или переместиться
исходя из всего понятого. AbilityCastRange назначает и показывает минимальный радиус для каста способности.
OVERSHOOT - буквально анулирует действие AbilityCastRange но оставляет его визуальную демонстрацию.
Но в отличии от того если бы я просто не указывал AbilityCastRange у меня остаеться зеленый круг вокруг героя и надпись в описании абилки, об еффекте который по факту мной же анулирован.

И как я понял это можно просто выставить = как fDistance и тогда я получу визуальную и письменную информацию об дистанции действия способности.

иными словами это использование визуальной особенности абилки для отображение другой не имеющей собственного визуала.
Это верно?
 
исходя из всего понятого. AbilityCastRange назначает и показывает минимальный радиус для каста способности.
OVERSHOOT - буквально анулирует действие AbilityCastRange но оставляет его визуальную демонстрацию.
Но в отличии от того если бы я просто не указывал AbilityCastRange у меня остаеться зеленый круг вокруг героя и надпись в описании абилки, об еффекте который по факту мной же анулирован.

И как я понял это можно просто выставить = как fDistance и тогда я получу визуальную и письменную информацию об дистанции действия способности.

иными словами это использование визуальной особенности абилки для отображение другой не имеющей собственного визуала.
Это верно?
да всё примерно так
 
вообще использование keyvalues позволяет без лишней мороки настраивать большинство функций и добавлять свои характеристики и описание
 
можно и через луа файл настроить отображение зоны и числа, но это просто удобнее использовать keyvalue
оно то так НО
есть же ситуации когда "AbilityCastRange" необходим именно в его нормальном виде. а так выходит что у одного героя он будет показывать как есть а у другого вместо этого fDistance....
такое себе мироприятие

по хорошему должно быть разное описание для кастренжа и дальности действия

ты на 100% уверен что OVERSHOOT не имеет еще какого-то предназначения?
 
оно то так НО
есть же ситуации когда "AbilityCastRange" необходим именно в его нормальном виде. а так выходит что у одного героя он будет показывать как есть а у другого вместо этого fDistance....
такое себе мироприятие

по хорошему должно быть разное описание для кастренжа и дальности действия

ты на 100% уверен что OVERSHOOT не имеет еще какого-то предназначения?
я думаю можно использовать например для того чтобы одна абилка нажималась по всей карте на крипов и при этом нажималась на героев только в опредёленном радиусе
 
я думаю можно использовать например для того чтобы одна абилка нажималась по всей карте на крипов и при этом нажималась на героев только в опредёленном радиусе
покажи плз луа версию своего блинка. я походу себе лишнего надумал на основании того как fDistance в туторе действовало.
 
покажи плз луа версию своего блинка. я походу себе лишнего надумал на основании того как fDistance в туторе действовало.
блинк очень простой, там ещё аганим, так что половина это не необходимость
Lua:
wei_blink = class({})
wei_reverse_blink = class({})
LinkLuaModifier( "modifier_wei_blink_aghanim", "lua_abilities/wei_blink", LUA_MODIFIER_MOTION_NONE )

modifier_wei_blink_aghanim = class({})

function modifier_wei_blink_aghanim:IsHidden()
    return false
end

function modifier_wei_blink_aghanim:IsPurgable()
    return false
end

function modifier_wei_blink_aghanim:OnCreated()
    local caster = self:GetCaster()
    local ability = self:GetAbility()

    caster:AddAbility("wei_reverse_blink"):SetLevel(1)
    caster:SwapAbilities("wei_reverse_blink", "wei_blink", true, true)
    ability:SetHidden(true)
end

function modifier_wei_blink_aghanim:OnDestroy()
    local caster = self:GetCaster()
    local ability = self:GetAbility()

    caster:SwapAbilities("wei_reverse_blink", "wei_blink", true, true)
    caster:RemoveAbility("wei_reverse_blink")
    ability:SetHidden(false)
end

function wei_blink:OnAbilityPhaseStart()
    self.caster_point = self:GetCaster():GetAbsOrigin()
end

function wei_blink:OnSpellStart()
    local caster = self:GetCaster()
    local point = self:GetCursorPosition()
    local origin = caster:GetOrigin()

    local min_range = self:GetSpecialValueFor("min_blink_range")
    local max_range = self:GetSpecialValueFor("AbilityCastRange")
    local duration = self:GetSpecialValueFor("duration_return")

    local direction = (point - origin)
    if direction:Length2D() > max_range then
        direction = direction:Normalized() * max_range
    end

    if direction:Length2D() < min_range then
        direction = direction:Normalized() * min_range
    end

    FindClearSpaceForUnit( caster, origin + direction, true )
    ProjectileManager:ProjectileDodge(caster)

    if caster:HasScepter() then
        caster:AddNewModifier(caster, self, "modifier_wei_blink_aghanim", { duration = duration })
    end  

    self:PlayEffects( origin, direction )
end

function wei_reverse_blink:OnAbilityPhaseStart()
    self.caster_point = self:GetCaster():GetAbsOrigin()
    local caster = self:GetCaster()
    local blink = caster:FindAbilityByName("wei_blink")

    caster:FaceTowards(blink.caster_point)
end

function wei_reverse_blink:OnSpellStart()
    local caster = self:GetCaster()
    local blink = caster:FindAbilityByName("wei_blink")
    local modif = caster:FindModifierByName("modifier_wei_blink_aghanim")
    local sound_cast_b = "Hero_Antimage.Blink_in.Persona"
    local life_illusion = blink:GetSpecialValueFor("life_illusion")
    local outgoing_damage = blink:GetSpecialValueFor("outgoing_damage")
    local incoming_damage = blink:GetSpecialValueFor("incoming_damage")
    local damage = 100
    local damage_out = damage-outgoing_damage
    local damage_in = incoming_damage-damage
    self.point = blink.caster_point

    local illusion = CreateIllusions(
        caster,
        caster,
        {
            outgoing_damage = -damage_out,
            incoming_damage = damage_in,
            duration = life_illusion,
        }, -- hModiiferKeys
        1, -- nNumIllusions
        50, -- nPadding
        false, -- bScramblePosition
        true -- bFindClearSpace
    )
    FindClearSpaceForUnit( illusion, self.caster_point, true )
    FindClearSpaceForUnit( caster, self.point, true )
    ProjectileManager:ProjectileDodge(caster)
    EmitSoundOnLocationWithCaster( self:GetCaster():GetOrigin(), sound_cast_b, self:GetCaster() )
    modif:Destroy()
    self:PlayEffects()
end

function wei_reverse_blink:PlayEffects()
    local particle_cast_a = "particles/econ/events/spring_2021/blink_dagger_spring_2021_start_lvl2.vpcf"
    local sound_cast_a = "Hero_Antimage.Blink_out"

    local particle_cast_b = "particles/econ/events/spring_2021/blink_dagger_spring_2021_end.vpcf"
    local sound_cast_b = "Hero_Antimage.Blink_in.Persona"

    local effect_cast_a = ParticleManager:CreateParticle( particle_cast_a, PATTACH_WORLDORIGIN, nil)
    ParticleManager:SetParticleControl( effect_cast_a, 0, self.caster_point )
    ParticleManager:ReleaseParticleIndex( effect_cast_a )

    local effect_cast_b = ParticleManager:CreateParticle( particle_cast_b, PATTACH_WORLDORIGIN, nil)
    ParticleManager:SetParticleControl( effect_cast_b, 0, self.point )
    ParticleManager:ReleaseParticleIndex( effect_cast_b )
end

function wei_blink:PlayEffects( origin, direction )
    local particle_cast_a = "particles/econ/events/spring_2021/blink_dagger_spring_2021_start_lvl2.vpcf"
    local sound_cast_a = "Hero_Antimage.Blink_out"

    local particle_cast_b = "particles/econ/events/spring_2021/blink_dagger_spring_2021_end.vpcf"
    local sound_cast_b = "Hero_Antimage.Blink_in.Persona"

    local effect_cast_a = ParticleManager:CreateParticle( particle_cast_a, PATTACH_WORLDORIGIN, nil)
    ParticleManager:SetParticleControl( effect_cast_a, 0, self.caster_point )
    ParticleManager:ReleaseParticleIndex( effect_cast_a )

    local effect_cast_b = ParticleManager:CreateParticle( particle_cast_b, PATTACH_ABSORIGIN, self:GetCaster() )
    ParticleManager:SetParticleControl( effect_cast_b, 0, self:GetCaster():GetOrigin() )
    ParticleManager:SetParticleControlForward( effect_cast_b, 0, direction:Normalized() )
    ParticleManager:ReleaseParticleIndex( effect_cast_b )
    EmitSoundOnLocationWithCaster( self:GetCaster():GetOrigin(), sound_cast_b, self:GetCaster() )
end
 
покажи плз луа версию своего блинка. я походу себе лишнего надумал на основании того как fDistance в туторе действовало.
вообще можешь у меня в профиле на дискорд сервер зайти, я там тебе много что могу пояснить
 
пункт min_range блинка обьязателен для любого блинка?
 
Реклама: