2017-05-07 65 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