gpt4 book ai didi

lua - 寻找更清洁更有效的方式

转载 作者:行者123 更新时间:2023-12-04 18:33:41 27 4
gpt4 key购买 nike

function GetDamage(spell, unit)
if spell == _Q and (isReady(_Q) or qActive) and not HasItem(3025) and not HasItem(3100) and not HasItem(3057) and not HasItem(3078) then
return myHero:CalcDamage(unit, ((((myHero:GetSpellData(_Q).level * 20) + 10) + myHero.totalDamage) + qStacks))
elseif spell == _Q and (isReady(_Q) or qActive) and (HasItem(3057) or sheenActive) then
return myHero:CalcDamage(unit, myHero.damage) + myHero:CalcDamage(unit, ((((myHero:GetSpellData(_Q).level * 20) + 10) + myHero.totalDamage) + qStacks))
elseif spell == _Q and (isReady(_Q) or qActive) and (HasItem(3025) or fActive) then
return myHero:CalcDamage(unit, myHero.damage) + myHero:CalcDamage(unit, ((((myHero:GetSpellData(_Q).level * 20) + 10) + myHero.totalDamage) + qStacks))
elseif spell == _Q and (isReady(_Q) or qActive) and (HasItem(3100) or lActive) then
return myHero:CalcMagicDamage(unit, ((myHero.damage * 0.75) + (myHero.ap * 0.5))) + myHero:CalcDamage(unit, ((((myHero:GetSpellData(_Q).level * 20) + 10) + myHero.totalDamage) + qStacks))
elseif spell == _Q and (isReady(_Q) or qActive) and (HasItem(3078) or tActive) then
return myHero:CalcDamage(unit, (myHero.damage * 2)) + myHero:CalcDamage(unit, ((((myHero:GetSpellData(_Q).level * 20) + 10) + myHero.totalDamage) + qStacks))
elseif spell == _E and isReady(_E) then
return myHero:CalcMagicDamage(unit, (((myHero:GetSpellData(_E).level * 40) + 15) + (myHero.ap * 0.6)))
else
return 0
end
end

这是我的代码,用于向 x 个敌人返回 x 法术伤害,但是虽然它按预期工作,但它看起来效率低下且丑陋,而且我希望它的工作方式有所不同,但我不确定如何编写代码。

我希望它做的是,如果我做例如 GetDamage(all) 或类似的事情,我希望它返回给定 isReady(spell)< 时我可以做的总伤害 返回真,即如果拼写 qe 准备就绪,它将返回 qe 的总和仅或如果所有准备就绪,则返回所有,此外,如果我只需要知道 r 的损坏,我仍然可以执行 GetDamage(_R)

是否有更简洁的方法使用表格或更有效的方式来获得我需要的结果?因为目前使用 GetDamage(spell) + GetDamage(spell2) + GetDamage(spell3) 等看起来非常糟糕的编码。

最佳答案

引入新的咒语“ALL”

function GetDamage(spell, unit)
local result = 0
if (spell == "ALL" or spell == _Q) and (isReady(_Q) or qActive) then
local bonus = 0
if (HasItem(3057) or sheenActive) then
bonus = myHero:CalcDamage(unit, myHero.damage)
elseif (HasItem(3025) or fActive) then
bonus = myHero:CalcDamage(unit, myHero.damage)
elseif (HasItem(3100) or lActive) then
bonus = myHero:CalcMagicDamage(unit, ((myHero.damage * 0.75) + (myHero.ap * 0.5)))
elseif (HasItem(3078) or tActive) then
bonus = myHero:CalcDamage(unit, (myHero.damage * 2))
end
result = result + bonus + myHero:CalcDamage(unit, ((((myHero:GetSpellData(_Q).level * 20) + 10) + myHero.totalDamage) + qStacks))
end
if (spell == "ALL" or spell == _E) and isReady(_E) then
result = result + myHero:CalcMagicDamage(unit, (((myHero:GetSpellData(_E).level * 40) + 15) + (myHero.ap * 0.6)))
end
return result
end

使用示例:

dmg = GetDamage("ALL", unit)
dmg = GetDamage(_Q, unit)
dmg = GetDamage(_E, unit)

编辑:
还有另一种实现相同方法的方法,即使用以法术为键、以函数为值的表:

spell_dmg_func = {
[_Q] =
function(unit)
if (isReady(_Q) or qActive) then
local bonus = 0
if (HasItem(3057) or sheenActive) then
bonus = myHero:CalcDamage(unit, myHero.damage)
elseif (HasItem(3025) or fActive) then
bonus = myHero:CalcDamage(unit, myHero.damage)
elseif (HasItem(3100) or lActive) then
bonus = myHero:CalcMagicDamage(unit, ((myHero.damage * 0.75) + (myHero.ap * 0.5)))
elseif (HasItem(3078) or tActive) then
bonus = myHero:CalcDamage(unit, (myHero.damage * 2))
end
return bonus + myHero:CalcDamage(unit, ((((myHero:GetSpellData(_Q).level * 20) + 10) + myHero.totalDamage) + qStacks))
end
end,
[_E] =
function(unit)
if isReady(_E) then
return myHero:CalcMagicDamage(unit, (((myHero:GetSpellData(_E).level * 40) + 15) + (myHero.ap * 0.6)))
end
end,
}

function GetDamage(spell, unit)
if spells == "ALL" then
local sum = 0
for spell, func in pairs(spell_dmg_func) do
sum = sum + (func(unit) or 0)
end
return sum
else
return spell_dmg_func[spell](unit) or 0
end
end

关于lua - 寻找更清洁更有效的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41481128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com