Одновременное использование скилла копией и оригиналом

HappySlime12

Новичок
18 Ноя 2018
4
0
1
17
Проект
Overthrow с локальными мемами
Реакции
0 0 0
#1
У меня кастомный герой имеет ульту Пугны + ульту Арк Вардена. Мне нужно добиться того, чтобы и оригинал и копия могли одновременно юзать лайф дрейн на врага. У меня это работает, но урон не дублируется и на экране появляются ошибки (закрепил фото). К тому же еще заметил, что у возродившегося врага снова появляется анимация ульты, которая тянется не понятно куда. Я совсем новичок еще, помогите плиз)
 

HappySlime12

Новичок
18 Ноя 2018
4
0
1
17
Проект
Overthrow с локальными мемами
Реакции
0 0 0
#3
Хах, как-то не подумал)
Надеюсь так сможешь помочь
Код:
npc_abilities_custom:

    "1 скилл"
    {
        "BaseClass"                      "ability_datadriven"
        "AbilityBehavior"               "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_CHANNELLED | DOTA_ABILITY_BEHAVIOR_IGNORE_BACKSWING"
        "AbilityUnitTargetTeam"         "DOTA_UNIT_TARGET_TEAM_BOTH"
        "AbilityUnitTargetType"         "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
        "AbilityUnitTargetFlags"        "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES | DOTA_UNIT_TARGET_FLAG_FOW_VISIBLE"
        "SpellImmunityType"             "SPELL_IMMUNITY_ENEMIES_YES"
        "AbilityUnitDamageType"         "DAMAGE_TYPE_MAGICAL"  
        "FightRecapLevel"               "1"
        "AbilityTextureName"            "pugna_life_drain_shit"
        "AbilityCastRange"              "200"
        "AbilityCastPoint"              "0.2 0.2 0.2"
        "AbilityChannelTime"            "10.0"
        "AbilityCooldown"               "30.0 25.0 20.0 15.0"
        "AbilityManaCost"               "130 185 240 260"
        "AbilityModifierSupportValue"   "0.0"
        "AbilitySpecial"
        {
                "01"
                {
                                 "var_type"                  "FIELD_INTEGER"
                                 "health_drain"              "90 120 180 220"
                }
                "02"
                {
                                 "var_type"                  "FIELD_INTEGER"
                                 "cast_range_tooltip"        "200"
                }
               "03"
                {
                                 "var_type"                  "FIELD_INTEGER"
                                 "duration_tooltip"          "10"
                }
               "04"
               {
                                 "var_type"                  "FIELD_INTEGER"
                                 "health_drain_scepter"      "220 250 290 310"
               }
               "05"
               {
                                 "var_type"                  "FIELD_FLOAT"
                                 "scepter_cooldown"          "10.0 5.0 0.0"
               }
               "06"
               {
                                 "var_type"                  "FIELD_FLOAT"
                                 "tick_rate"                 "0.25 0.25 0.25"
               }
               "07"
              {
                                "var_type"                  "FIELD_INTEGER"
                                "bonus_range_scepter"       "150"
               }
               "08"
               {
                                "var_type"                  "FIELD_INTEGER"
                                "cast_range_scepter_tooltip"        "350"
               }
        }
        "precache"       
        {
        "particle"  "particles/units/heroes/hero_pugna/pugna_life_drain.vpcf"
        "soundfile" "soundevents/game_sounds_heroes/game_sounds_pugna.vsndevts"
        }
        "OnSpellStart"
        {
            "ApplyModifier"
            {
               "ModifierName"  "modifier_life_drain"
                "Target"        "TARGET"
            }

            "FireSound"
            {
                "EffectName"    "Hero_Pugna.LifeDrain.Target"
                "Target"        "CASTER"
             }
        }
        "OnChannelFinish"
        {
            "RemoveModifier"
            {
                "ModifierName"  "modifier_life_drain"
                "Target"        "TARGET"
            }
        }
        "Modifiers"
        {
            "modifier_life_drain"
            {
                "IsDebuff"  "1"
                "OnCreated"
                {
                    "RunScript"
                    {
                        "ScriptFile"    "heroes/hero_pugna/life_drain.lua"
                        "Function"      "LifeDrainParticle"
                    }
                }

                "OnDestroy"
                {
                    "RunScript"
                    {
                        "ScriptFile"    "heroes/hero_pugna/life_drain.lua"
                        "Function"      "LifeDrainParticleEnd"
                    }
                }

                "ThinkInterval"     "%tick_rate"
                "OnIntervalThink"
                {
                    "RunScript"
                    {
                        "ScriptFile"    "heroes/hero_pugna/life_drain.lua"
                        "Function"      "LifeDrainHealthTransfer"
                    }
                }
            }
        }
    }

Ну и луа файл, в котором если честно вообще не разбираюсь:

Код:
--[[
    Author: Noya
    Date: April 5, 2015
    Creates the Life Drain Particle rope.
    It is indexed on the caster handle to have access to it later, because the Color CP changes if the drain is restoring mana.
]]
function LifeDrainParticle( event)
    local caster = event.caster
    local target = event.target
    local ability = event.ability

    local particleName = "particles/units/heroes/hero_pugna/pugna_life_drain.vpcf"
    caster.LifeDrainParticle = ParticleManager:CreateParticle(particleName, PATTACH_ABSORIGIN_FOLLOW, caster)
    ParticleManager:SetParticleControlEnt(caster.LifeDrainParticle, 1, target, PATTACH_POINT_FOLLOW, "attach_hitloc", target:GetAbsOrigin(), true)

end

--[[
    Author: Noya
    Date: April 5, 2015
    When cast on an enemy, drains health from the target enemy unit to heal himself.
    If the hero has full HP, and the enemy target is a Hero, Life Drain will restore mana instead.
    When cast on an ally, it will drain his own health into his ally.
]]
function LifeDrainHealthTransfer( event )
    local caster = event.caster
    local target = event.target
    local ability = event.ability

    local health_drain = ability:GetLevelSpecialValueFor( "health_drain" , ability:GetLevel() - 1 )
    local tick_rate = ability:GetLevelSpecialValueFor( "tick_rate" , ability:GetLevel() - 1 )
    local HP_drain = health_drain * tick_rate

    -- HP drained depends on the actual damage dealt. This is for MAGICAL damage type
    local HP_gain = HP_drain * ( 1 - target:GetMagicalArmorValue())

    print(HP_drain,target:GetMagicalArmorValue(),HP_gain)

    -- Act according to the targets team
    local targetTeam = target:GetTeamNumber()
    local casterTeam = caster:GetTeamNumber()

    -- If its an illusion then kill it
    if target:IsIllusion() then
        target:ForceKill(true)
        ability:OnChannelFinish(false)
        caster:Stop()
        return
    else
        -- Location variables
        local caster_location = caster:GetAbsOrigin()
        local target_location = target:GetAbsOrigin()

        -- Distance variables
        local distance = (target_location - caster_location):Length2D()
        local break_distance = ability:GetCastRange()
        local direction = (target_location - caster_location):Normalized()

        -- If the leash is broken then stop the channel
        if distance >= break_distance then
            ability:OnChannelFinish(false)
            caster:Stop()
            return
        end

        -- Make sure that the caster always faces the target
        caster:SetForwardVector(direction)
    end

    if targetTeam == casterTeam then
        -- Health Transfer Caster->Ally
        ApplyDamage({ victim = caster, attacker = caster, damage = HP_drain, damage_type = DAMAGE_TYPE_MAGICAL })
        target:Heal( HP_gain, caster)
        --TODO: Check if this damage transfer should be lethal
       
        -- Set the particle control color as green
        ParticleManager:SetParticleControl(caster.LifeDrainParticle, 10, Vector(0,0,0))
        ParticleManager:SetParticleControl(caster.LifeDrainParticle, 11, Vector(0,0,0))

    else
        if caster:GetHealthDeficit() > 0 then
            -- Health Transfer Enemy->Caster
            ApplyDamage({ victim = target, attacker = caster, damage = HP_drain, damage_type = DAMAGE_TYPE_MAGICAL })
            caster:Heal( HP_gain, caster)

            -- Set the particle control color as green
            ParticleManager:SetParticleControl(caster.LifeDrainParticle, 10, Vector(0,0,0))
            ParticleManager:SetParticleControl(caster.LifeDrainParticle, 11, Vector(0,0,0))

        elseif target:IsHero() then
            -- Health to Mana Transfer Enemy->Caster
            ApplyDamage({ victim = target, attacker = caster, damage = HP_drain, damage_type = DAMAGE_TYPE_MAGICAL })
            caster:GiveMana(HP_gain)

            -- Set the particle control color as BLUE
            ParticleManager:SetParticleControl(caster.LifeDrainParticle, 10, Vector(1,0,0))
            ParticleManager:SetParticleControl(caster.LifeDrainParticle, 11, Vector(1,0,0))
        end
    end
end

function LifeDrainParticleEnd( event )
    local caster = event.caster
    ParticleManager:DestroyParticle(caster.LifeDrainParticle,false)
end

Код добавляем в специальный тег [code][/code], а если он еще и длинный - в [spoiler][/spoiler]
 
Последнее редактирование модератором:
20 Дек 2016
524
93
28
10
Проект
DI:LS
Реакции
93 0 0
#4
Скинь пожалуйста код в блок кода, а потом все это под спойлер. Вот так:

[SPOILER][CODE]
твой код
[/CODE][/SPOILER]

Чтобы это выглядело вот так:
Код:
твой код
 

HappySlime12

Новичок
18 Ноя 2018
4
0
1
17
Проект
Overthrow с локальными мемами
Реакции
0 0 0
#5
Я так понимаю, ты уже забыл про эту тему. Надо было мне раньше написать, что модер отредактировал.
 
Реклама:
20 Дек 2016
524
93
28
10
Проект
DI:LS
Реакции
93 0 0
#6
Твой дебаф ульты не стакается, поэтому урон не дублируется, и анимация не убирается (выключение анимации прописано в уничтожении дебафа, а когда ты накладываешь второй до того, как закончился первый, он просто обновляется. При этом старая анимация не уничтожается, а в перемнную записывается новая).
Исправить это очень просто, нужно просто сделать modifier_life_drain стакающимся.
Код:
"Attributes"        "MODIFIER_ATTRIBUTE_MULTIPLE"
На счет ошибки точно не могу сказать, мне с этими файлами ее вызвать не получилось. Скорее всего, это и ее тоже исправит.
 
Реклама:
//SNOW CHRISTMAS