2017-05-07 2 views
0

Nirgends sonst in der Lage sein scheint, mir zu helfen, so kam ich hier in der Hoffnung, dass jemand mit diesem Problem helfen kann ich mit Lua Scripting für Dota2 habeLua Scripting-Fehle für Dota 2

Hier ist mein gebrochenen Code:

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()}) 

Ende

Dies kehrt den Fehler:

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

Ich kann nicht herausfinden, warum es das tut oder wie ich das beheben kann. Bitte helfen Sie.

+1

Wie rufen Sie die Funktion? Es scheint, dass alles, was Sie als Argument übergeben, keinen Wert enthält, der mit der * Fähigkeit verbunden ist. * –

Antwort

0

Sie Code ist per se nicht gebrochen. Aber der Parameter "Schlüssel", den Sie als Argument übergeben, enthält keine Schlüssel- "Fähigkeit". Sie müssen Ihre Anruf-Site überprüfen, nicht die Funktion selbst.

0

Das Problem ist, dass durch das Aufrufen Ihrer Funktion "ApplyDamage" Sie DOTA global ApplyDamage function überschreiben. Wenn Sie dann innerhalb Ihrer Funktion ApplyDamage aufrufen, rufen Sie tatsächlich die Funktion auf, die Sie gerade definiert haben, nicht die globale, die Sie wahrscheinlich anrufen wollten. Stattdessen sollten Sie einen Namen verwenden, der nicht bereits von DOTA verwendet wird, z. 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