Можешь дать пример использования где скилл появляется с покупкой
Можешь дать пример использования где скилл появляется с покупкой
"ability_scepter"
{
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE" // Через луашку сделай чтобы сразу была прокачана
"Modifiers"
{
"modifier_scepter_1"
{
"Passive" "1"
"IsHidden" "1"
"Attributes" "MODIFIER_ATTRIBUTE_PERMANENT"
"ThinkInterval" "0.03"
"OnIntervalThink"
{
"RunScript"
{
"ScriptFile" "lib.lua"
"Function" "Scepter"
"oldability" "ability_scepter" // Старая абилка
"newability" "ability_scepter_upgraded" // Новая абилка
"oldmodifier" "modifier_scepter_1" // Модифаер для получения абилки
}
}
}
}
}
"ability_scepter_upgraded"
{
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE"
"Modifiers"
{
"modifier_scepter_2" // Чтобы после продажи аганима забиралась абилка
{
"Passive" "1"
"IsHidden" "1"
"Attributes" "MODIFIER_ATTRIBUTE_PERMANENT"
"ThinkInterval" "0.03"
"OnIntervalThink"
{
"RunScript"
{
"ScriptFile" "lib.lua"
"Function" "Scepter2"
"oldability" "ability_scepter_upgraded" // Старая абилка
"newability" "ability_scepter" // Новая абилка
"oldmodifier" "modifier_scepter_2" // Модифаер для забирания абилки
}
}
}
}
}
function Scepter( keys )
local caster = keys.caster
local oldability = keys.oldability
local newability = keys.newability
local oldmodifier = keys.oldmodifier
if caster:HasScepter() then
caster:RemoveAbility(oldability)
caster:RemoveModifierByName(oldmodifier)
caster:AddAbility(newability)
caster:FindAbilityByName(newability):SetLevel(1)
end
end
function Scepter2( keys )
local caster = keys.caster
local oldability = keys.oldability
local newability = keys.newability
local oldmodifier = keys.oldmodifier
if caster:HasScepter() then
else
caster:RemoveAbility(oldability)
caster:RemoveModifierByName(oldmodifier)
caster:AddAbility(newability)
caster:FindAbilityByName(newability):SetLevel(1)
end
end
а почему просто не написать логику абилки на lua и обойтись без модификатора? ведь он не нужен, можно при касте проверять наличие скипетра.C++:"ability_scepter" { "BaseClass" "ability_datadriven" "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_NOT_LEARNABLE" // Через луашку сделай чтобы сразу была прокачана "Modifiers" { "modifier_scepter_1" { "Passive" "1" "IsHidden" "1" "Attributes" "MODIFIER_ATTRIBUTE_PERMANENT" "ThinkInterval" "0.03" "OnIntervalThink" { "RunScript" { "ScriptFile" "lib.lua" "Function" "Scepter" "oldability" "ability_scepter" // Старая абилка "newability" "ability_scepter_upgraded" // Новая абилка "oldmodifier" "modifier_scepter_1" // Модифаер для получения абилки } } } } }
C++:"ability_scepter_upgraded" { "BaseClass" "ability_datadriven" "AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE" "Modifiers" { "modifier_scepter_2" // Чтобы после продажи аганима забиралась абилка { "Passive" "1" "IsHidden" "1" "Attributes" "MODIFIER_ATTRIBUTE_PERMANENT" "ThinkInterval" "0.03" "OnIntervalThink" { "RunScript" { "ScriptFile" "lib.lua" "Function" "Scepter2" "oldability" "ability_scepter_upgraded" // Старая абилка "newability" "ability_scepter" // Новая абилка "oldmodifier" "modifier_scepter_2" // Модифаер для забирания абилки } } } } }
Lua:function Scepter( keys ) local caster = keys.caster local oldability = keys.oldability local newability = keys.newability local oldmodifier = keys.oldmodifier if caster:HasScepter() then caster:RemoveAbility(oldability) caster:RemoveModifierByName(oldmodifier) caster:AddAbility(newability) caster:FindAbilityByName(newability):SetLevel(1) end end function Scepter2( keys ) local caster = keys.caster local oldability = keys.oldability local newability = keys.newability local oldmodifier = keys.oldmodifier if caster:HasScepter() then else caster:RemoveAbility(oldability) caster:RemoveModifierByName(oldmodifier) caster:AddAbility(newability) caster:FindAbilityByName(newability):SetLevel(1) end end
Я всегда стараюсь по большей мере в дд делать, мне удобнее так, новичкам тоже удобнееа почему просто не написать логику абилки на lua и обойтись без модификатора? ведь он не нужен, можно при касте проверять наличие скипетра.