2017-05-07 46 views
0

没有别的地方似乎能够帮助我,所以我来到这里的希望,有人能解决这个问题,我用Lua脚本对DOTA2Lua脚本误差的Dota 2

这里有我的坏帮助代码:

function ApplyDamage(keys) 

local caster = keys.caster 
local ability = keys.ability 
local target = keys.target 

ability.level = ability:GetLevel() - 1 

local ability_dmg = ability:GetLevelSpecialValueFor("damage", ability.level) 

if caster:HasScepter() then 
    ability_dmg = ability:GetSpecialValueFor("damage_scepter", ability.level) 
end 

ApplyDamage({victim = target, attacker = caster, damage = ability_dmg, damage_type = ability:GetAbilityDamageType()}) 

这是返回错误:

https://i.stack.imgur.com/KDtrg.png

我不明白为什么这样做,或者我可以如何解决这个问题。请帮忙。

+1

你是如何调用该函数?看起来无论你作为参数传入什么都不包含与*能力相关的值。* –

回答

0

你的代码是不是每个富硒破壁。但是作为参数传递的“keys”参数不包含键“能力”。您必须检查您的呼叫站点,而不是功能本身。

0

的问题是,通过调用你的函数“ApplyDamage”要覆盖DOTA的全球ApplyDamage function。然后当你从你的函数内部调用ApplyDamage时,你实际上正在调用你刚定义的函数,而不是你可能打算调用的全局函数。相反,您应该使用DOTA尚未使用的名称,例如damageTarget

local function damageTarget(keys) 
    local caster = keys.caster 
    local ability = keys.ability 
    local target = keys.target 

    ability.level = ability:GetLevel() - 1 

    local ability_dmg = ability:GetLevelSpecialValueFor(
     "damage", 
     ability.level 
    ) 

    if caster:HasScepter() then 
     ability_dmg = ability:GetSpecialValueFor(
      "damage_scepter", 
      ability.level 
     ) 
    end 

    ApplyDamage{ 
     victim = target, 
     attacker = caster, 
     damage = ability_dmg, 
     damage_type = ability:GetAbilityDamageType() 
    } 
end