Аура

Туня

Новичок
10 Мар 2020
6
0
Приветствую вновь в моей теме.

Встала перед вопросом, можно ли сделать в одной ауре с одним эффектом( например, "nevermore_dark_lord" )разницу действия относительно юнита. То есть, чем ближе - сильнее эффект, чем дальше - слабее. Или же по радиусам, 200 - 2 снижения брони, 400 - 4 и тд.

Буду рада обсудить или выслушать Ваше мнение.
 

ZLOY

Администратор
Команда форума
27 Июн 2016
718
89
Можно
В функции GetModifierPhysicalArmorBonus модификатора считать расстояние от владельца модификатора до кастера и в зависимости от расстояния возвращать нужное значение
 

Туня

Новичок
10 Мар 2020
6
0
Можно
В функции GetModifierPhysicalArmorBonus модификатора считать расстояние от владельца модификатора до кастера и в зависимости от расстояния возвращать нужное значение
Если не сложно, можете показать пример ?
"DOTAAbilities"
{
"nevermore_dark_lord"
{
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE"
"AbilityTextureName" "nevermore_dark_lord"
"MaxLevel" "7"
// Casting
//-------------------------------------------------------------------------------------------------------------
"AbilityCastRange" "900"

// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"presence_armor_reduction" "-1 -2 -3 -4 -5 -6 -8"
"LinkedSpecialBonus" "special_bonus_unique_nevermore_5"
}
"02"
{
"var_type" "FIELD_INTEGER"
"presence_radius" "1200"
}
"03"
{
"var_type" "FIELD_FLOAT"
"disarmor_percent" "15 17 20 22 24 27 30"
}
}

"Modifiers"
{
"modifier_passive_dark_lord_aura_emitter"
{
"Passive" "1"
"IsHidden" "1"
"IsPurgable" "0"

"Aura" "modifier_passive_dark_lord_aura"
"Aura_Radius" "%presence_radius"
"Aura_Teams" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"Aura_Types" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"Aura_Flags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
"Aura_ApplyToCaster" "0"
}

"modifier_passive_dark_lord_aura"
{
"IsHidden" "1"
"Passive" "0"

"ThinkInterval" "0.5"
"OnIntervalThink"
{
"RunScript"
{
"ScriptFile" "heroes/nevermore/dark_lord.lua"
"Function" "Disarmor"
"ModifierName" "modifier_passive_dark_lord_disarmor"
"Disarmor_const" "%presence_armor_reduction"
"Disarmor_pct" "%disarmor_percent"
}
}
}

"modifier_passive_dark_lord_disarmor"
{
"IsDebuff" "1"
"Passive" "0"
"IsHidden" "0"

"Properties"
{
"MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS" "-1"
}

"ThinkInterval" "0.2"
"OnIntervalThink"
{
"RunScript"
{
"ScriptFile" "heroes/nevermore/dark_lord.lua"
"Function" "CheckAura"
"ModifierName" "modifier_passive_dark_lord_aura"
"ModifierRemove" "modifier_passive_dark_lord_disarmor"
}
}
}
}
}
}
 
Последнее редактирование модератором:

ZLOY

Администратор
Команда форума
27 Июн 2016
718
89
Код:
"DOTAAbilities"
{
    "ability_test"
    {
        "BaseClass" "ability_lua"
        "ScriptFile" "ability_test.lua"

        "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE"
        "AbilityTextureName" "nevermore_dark_lord"
        "MaxLevel" "7"
        // Casting
        //-------------------------------------------------------------------------------------------------------------
        "AbilityCastRange" "900"

        // Special
        //-------------------------------------------------------------------------------------------------------------
        "AbilitySpecial"
        {
            "01"
            {
                "var_type" "FIELD_INTEGER"
                "aura_armor" "-10"
            }
            "02"
            {
                "var_type" "FIELD_INTEGER"
                "aura_radius" "1200"
            }

        }

    
    }
}
Код:
ability_test = class({})
LinkLuaModifier("modifier_test","ability_test.lua",LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier("modifier_test_aura_effect","ability_test.lua",LUA_MODIFIER_MOTION_NONE)

function ability_test:GetIntrinsicModifierName()
    return "modifier_test"
end

-------------------------------------------------------------------------------

modifier_test = class({})

function modifier_test:GetAttributes()
    return MODIFIER_ATTRIBUTE_MULTIPLE + MODIFIER_ATTRIBUTE_PERMANENT
end

function modifier_test:IsHidden()
    return true
end

function modifier_test:IsPurgable()
    return false
end


function modifier_test:IsAura()
    return true
end

function modifier_test:GetAuraRadius()
    return self.radius
end

function modifier_test:GetAuraSearchType()
    return DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO
end

function modifier_test:GetAuraSearchTeam()
    return DOTA_UNIT_TARGET_TEAM_FRIENDLY
end

function modifier_test:GetAuraSearchFlags()
    return DOTA_UNIT_TARGET_FLAG_INVULNERABLE
end

function modifier_test:GetAuraDuration()
    return 1
end

function modifier_test:GetModifierAura()
    return "modifier_test_aura_effect"
end

function modifier_test:OnCreated(kv)
    self.radius = self:GetAbility():GetSpecialValueFor("aura_radius")
end

-----------------------------------------------------------------------------------------

modifier_test_aura_effect = class({})

function modifier_test_aura_effect:IsBuff()
    return true
end

function modifier_test_aura_effect:DeclareFunctions()
    local funcs = {
        MODIFIER_PROPERTY_PHYSICAL_ARMOR_BONUS
    }
 
    return funcs
end

function modifier_test_aura_effect:GetModifierPhysicalArmorBonus()
    local dist = self:GetParent():GetRangeToUnit(self:GetCaster())
    local radius =  self:GetAbility():GetSpecialValueFor("aura_radius")

    local x = dist/radius

    if x > 1 then
        x = 1
    end


    return x * self.armorBonus
end

function modifier_test_aura_effect:OnCreated(kv)
    self.armorBonus = self:GetAbility():GetSpecialValueFor("aura_armor")
end

Как-то так
 
Реклама: