- 24 Авг 2018
- 75
- 3
- Проект
- colosseum
В общем решил сделать кастомный innate для Акса. Брал за основу innate´s от Valve
Как я понял "AbilitySpecial" заменили на "AbilityValues" и немного их переделали, ок. Сам скилл и modifier я подключил, в игре он виден
Но чтобы я не менял в самом modifier мне всегда выдает nil value на выходе. Что-то поменялось в modifiers также или я в чем-то ошибаюсь. Вот код
Собственно и сами ошибки из консоли
Код:
"axe_innate_regen"
{
"BaseClass" "ability_lua"
"ScriptFile" "abilities/axe_innate_regen"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_PASSIVE | DOTA_ABILITY_BEHAVIOR_INNATE_UI"
"MaxLevel" "4"
"Innate" "1"
"AbilityValues"
{
"health_regen_per_unit"
{
"value" "2"
}
"mana_regen_per_unit"
{
"value" "1"
}
"radius"
{
"value" "300"
}
"max_units"
{
"value" "30"
}
}
}
Как я понял "AbilitySpecial" заменили на "AbilityValues" и немного их переделали, ок. Сам скилл и modifier я подключил, в игре он виден
Но чтобы я не менял в самом modifier мне всегда выдает nil value на выходе. Что-то поменялось в modifiers также или я в чем-то ошибаюсь. Вот код
Lua:
if modifier_axe_innate_regen == nil then
modifier_axe_innate_regen = class({})
end
function modifier_axe_innate_regen:IsHidden()
return false
end
function modifier_axe_innate_regen:IsPurgable()
return false
end
function modifier_axe_innate_regen:RemoveOnDeath()
return false
end
function modifier_axe_innate_regen:OnCreated(kv)
if IsServer() then
local ability = self:GetAbility()
self.healthRegenPerUnit = ability:GetSpecialValueFor("health_regen_per_unit")
self.manaRegenPerUnit = ability:GetSpecialValueFor("mana_regen_per_unit")
self.radius = ability:GetSpecialValueFor("radius")
self.maxUnits = ability:GetSpecialValueFor("max_units")
self.currentRegenCount = 0
self:StartIntervalThink(0.5)
end
end
function modifier_axe_innate_regen:OnIntervalThink()
if IsServer() then
local parent = self:GetParent()
-- Поиск всех вражеских юнитов (крипы и герои) в радиусе
local enemyUnits = FindUnitsInRadius(
parent:GetTeamNumber(),
parent:GetAbsOrigin(),
nil,
self.radius,
DOTA_UNIT_TARGET_TEAM_ENEMY,
DOTA_UNIT_TARGET_BASIC + DOTA_UNIT_TARGET_HERO,
DOTA_UNIT_TARGET_FLAG_NONE,
FIND_ANY_ORDER,
false
)
local unitCount = #enemyUnits
if unitCount > self.maxUnits then
unitCount = self.maxUnits
end
self.currentRegenCount = unitCount
-- Отдельно ищем вражеских героев для отображения (для стаков модификатора)
local enemyHeroes = FindUnitsInRadius(
parent:GetTeamNumber(),
parent:GetAbsOrigin(),
nil,
self.radius,
DOTA_UNIT_TARGET_TEAM_ENEMY,
DOTA_UNIT_TARGET_HERO,
DOTA_UNIT_TARGET_FLAG_NONE,
FIND_ANY_ORDER,
false
)
local heroCount = #enemyHeroes
self:SetStackCount(heroCount)
end
end
function modifier_axe_innate_regen:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT,
MODIFIER_PROPERTY_MANA_REGEN_CONSTANT
}
return funcs
end
function modifier_axe_innate_regen:GetModifierConstantHealthRegen()
return self.healthRegenPerUnit * self.currentRegenCount
end
function modifier_axe_innate_regen:GetModifierConstantManaRegen()
return self.manaRegenPerUnit * self.currentRegenCount
end
Собственно и сами ошибки из консоли
Код:
...scripts\vscripts\modifiers\modifier_axe_innate_regen.lua:79: in function <...scripts\vscripts\modifiers\modifier_axe_innate_regen.lua:78>
Script Runtime Error: ...scripts\vscripts\modifiers\modifier_axe_innate_regen.lua:79: attempt to perform arithmetic on field 'healthRegenPerUnit' (a nil value)
stack traceback:
...scripts\vscripts\modifiers\modifier_axe_innate_regen.lua:79: in function <...scripts\vscripts\modifiers\modifier_axe_innate_regen.lua:78>
...scripts\vscripts\modifiers\modifier_axe_innate_regen.lua:83: attempt to perform arithmetic on field 'manaRegenPerUnit' (a nil value)
stack traceback:
Последнее редактирование: