Ох, давно я не заходил, надо перевести до конца статью... В общем, по делу. У меня есть код:
И еще один код, чтобы вы понимали, откуда берутся стаки:
В датадрайвенах особо ничего интересного нет, так что это пропустим.
В общем, в чем проблема. Все функции добавляют свои правильные знаечения. Но в консоле пишет, что я не правильно гетовнер использую, хотя и работает все:
Что то я много воды лью... Главное вот что:
Как видите, урон на худе остается прежним, никаких изменений нет, как и в мс и ас. Хотя сам урон, мс, ас изменяются, как видно в консоли при нанесении урона(56 урона это от 2 скилла, не обращайте внимание).
В чем проблема и, если не сложно, почему я гетовнер неправильно использую?
Код:
if bh_bloodrage == nil then
bh_bloodrage = class({})
end
LinkLuaModifier( "modifier_bh_bloodrage","heroes/bh/bloodrage",LUA_MODIFIER_MOTION_NONE)
function bh_bloodrage:OnSpellStart()
local caster = self:GetCaster()
local level = self:GetLevel() - 1
local duration = self:GetLevelSpecialValueFor("duration",level)
caster:AddNewModifier(caster,self,"modifier_bh_bloodrage",{duration = duration})
end
function bh_bloodrage:IsRefreshable()
return false
end
if modifier_bh_bloodrage == nil then
modifier_bh_bloodrage = class({})
end
function modifier_bh_bloodrage:IsHidden()
return false
end
function modifier_bh_bloodrage:OnCreated( kv )
self.caster = self:GetAbility():GetOwner()
self.stacks = self:GetAbility():GetOwner():GetModifierStackCount("modifier_stacks", self.caster)
self.damage = self:GetAbility():GetSpecialValueFor("damage")
self.ms = self:GetAbility():GetSpecialValueFor("ms")
self.as = self:GetAbility():GetSpecialValueFor("as")
end
function modifier_bh_bloodrage:OnRefresh( kv )
self.caster = self:GetAbility():GetOwner()
self.stacks = self:GetAbility():GetOwner():GetModifierStackCount("modifier_stacks", self.caster)
self.damage = self:GetAbility():GetSpecialValueFor("damage")
self.ms = self:GetAbility():GetSpecialValueFor("ms")
self.as = self:GetAbility():GetSpecialValueFor("as")
end
function modifier_bh_bloodrage:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE,
MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE,
MODIFIER_PROPERTY_MOVESPEED_MAX,
MODIFIER_PROPERTY_MOVESPEED_LIMIT,
MODIFIER_PROPERTY_ATTACKSPEED_BONUS_CONSTANT
}
return funcs
end
function modifier_bh_bloodrage:GetModifierAttackSpeedBonus_Constant()
return self.stacks * self.as
end
function modifier_bh_bloodrage:GetModifierPreAttack_BonusDamage()
return self.stacks * self.damage
end
function modifier_bh_bloodrage:GetModifierMoveSpeed_Max()
return 1000
end
function modifier_bh_bloodrage:GetModifierMoveSpeed_Limit()
return 1000
end
function modifier_bh_bloodrage:GetModifierMoveSpeedBonus_Percentage()
return self.stacks * self.ms
end
Код:
if bh_mark == nil then
bh_mark = class({})
end
LinkLuaModifier("modifier_markenemy","heroes/bh/mark",LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier("modifier_markfriend","heroes/bh/mark",LUA_MODIFIER_MOTION_NONE)
LinkLuaModifier("modifier_stacks","heroes/bh/mark",LUA_MODIFIER_MOTION_NONE)
function bh_mark:GetCooldown( nLevel )
if self:GetCaster():HasScepter() then
return self:GetSpecialValueFor( "coldownscepter" )
end
return self.BaseClass.GetCooldown( self, nLevel )
end
function bh_mark:CastFilterResultTarget( hTarget )
if self:GetCaster() == hTarget then
return UF_FAIL_CUSTOM
end
if hTarget:IsCreep() or hTarget:IsAncient() then
return UF_FAIL_CUSTOM
end
local nResult = UnitFilter( hTarget, DOTA_UNIT_TARGET_TEAM_BOTH, DOTA_UNIT_TARGET_HERO, DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES, self:GetCaster():GetTeamNumber() )
if nResult ~= UF_SUCCESS then
return nResult
end
return UF_SUCCESS
end
function bh_mark:GetCustomCastErrorTarget( hTarget )
if self:GetCaster() == hTarget then
return "#dota_hud_error_cant_cast_on_self"
end
if hTarget:IsAncient() then
return "#dota_hud_error_cant_cast_on_ancient"
end
if hTarget:IsCreep() then
return "#dota_hud_error_cant_cast_on_creep"
end
return ""
end
function bh_mark:OnSpellStart()
local hCaster = self:GetCaster()
local hTarget = self:GetCursorTarget()
local hAbility = self
local duration = self:GetSpecialValueFor("duration")
local durationscepter = self:GetSpecialValueFor("durationscepter")
if hTarget ~= nil then
if hTarget:HasModifier("modifier_markenemy") or hTarget:HasModifier("modifier_markfriend") then
local kek
else
if not hCaster:HasModifier("modifier_stacks") then
if hCaster:HasScepter() then
hCaster:AddNewModifier(hCaster,hAbility,"modifier_stacks",{duration = durationscepter})
else
hCaster:AddNewModifier(hCaster,hAbility,"modifier_stacks",{duration = duration})
end
end
local current_stack = hCaster:GetModifierStackCount("modifier_stacks", hCaster)
hCaster:SetModifierStackCount("modifier_stacks", hCaster, current_stack + 1)
end
if hTarget:GetTeam() ~= hCaster:GetTeam() then
if hCaster:HasScepter() then
hTarget:AddNewModifier(hCaster,hAbility,"modifier_markenemy",{duration = durationscepter})
else
hTarget:AddNewModifier(hCaster,hAbility,"modifier_markenemy",{duration = duration})
end
else
hTarget:AddNewModifier(hCaster,hAbility,"modifier_markfriend",{duration = duration})
end
end
end
if modifier_markenemy == nil then
modifier_markenemy = class({})
end
function modifier_markenemy:IsHidden()
return false
end
function modifier_markenemy:IsDebuff()
return true
end
function modifier_markenemy:IsPurgable()
return true
end
function modifier_markenemy:GetTexture()
return "bh_mark"
end
function modifier_markenemy:CheckState()
local state = {
[MODIFIER_STATE_PROVIDES_VISION] = true,
}
return state
end
function modifier_markenemy:GetAttributes ()
return MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE
end
function modifier_markenemy:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_MOVESPEED_BONUS_PERCENTAGE
}
return funcs
end
function modifier_markenemy:GetModifierMoveSpeedBonus_Percentage()
return -5
end
if modifier_markfriend == nil then
modifier_markfriend = class({})
end
function modifier_markfriend:IsHidden()
return false
end
function modifier_markfriend:IsDebuff()
return false
end
function modifier_markfriend:IsPurgable()
return true
end
function modifier_markfriend:GetTexture()
return "bh_mark"
end
function modifier_markfriend:OnCreated( kv )
self.regen = self:GetAbility():GetSpecialValueFor( "regen" )
self.scepterregen = self:GetAbility():GetSpecialValueFor( "scepterregen" )
end
function modifier_markfriend:OnRefresh( kv )
self.regen = self:GetAbility():GetSpecialValueFor( "regen" )
self.scepterregen = self:GetAbility():GetSpecialValueFor( "scepterregen" )
end
function modifier_markfriend:GetAttributes ()
return MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE
end
function modifier_markfriend:DeclareFunctions()
local funcs = {
MODIFIER_PROPERTY_HEALTH_REGEN_CONSTANT
}
return funcs
end
function modifier_markfriend:GetModifierConstantHealthRegen()
if self:GetCaster():HasScepter() then
return self.scepterregen
else
return self.regen
end
end
if modifier_stacks == nil then
modifier_stacks = class({})
end
function modifier_stacks:IsHidden()
return false
end
function modifier_stacks:IsDebuff()
return false
end
function modifier_stacks:IsPurgable()
return false
end
function modifier_stacks:GetAttributes ()
return MODIFIER_ATTRIBUTE_IGNORE_INVULNERABLE
end
В общем, в чем проблема. Все функции добавляют свои правильные знаечения. Но в консоле пишет, что я не правильно гетовнер использую, хотя и работает все:
Код:
[ W VScript ]: Script Runtime Error: ...ta_addons\arena\scripts\vscripts\heroes\bh\bloodrage.lua:22: attempt to call method 'GetOwner' (a nil value)
[ W VScript ]: stack traceback:
[ W VScript ]: ...ta_addons\arena\scripts\vscripts\heroes\bh\bloodrage.lua:22: in function <...ta_addons\arena\scripts\vscripts\heroes\bh\bloodrage.lua:21>
Как видите, урон на худе остается прежним, никаких изменений нет, как и в мс и ас. Хотя сам урон, мс, ас изменяются, как видно в консоли при нанесении урона(56 урона это от 2 скилла, не обращайте внимание).
В чем проблема и, если не сложно, почему я гетовнер неправильно использую?
Последнее редактирование модератором: