MemeMayhem / ModExamples

11 stars 3 forks source link

如果获取敌方的当前生命值? #93

Closed fuxiao1563 closed 1 month ago

fuxiao1563 commented 1 month ago

我想要做一个可以造成基于敌方当前生命值伤害的子弹, 但是通过 target:GetCurrentHealth() 获取到的是自己当前生命值, 有什么解决办法吗?)

Api:SetMissileDamage("attack_zombie_rolex", function(attack_data, target)
        return 0.2 * target:GetCurrentHealth()
end)
Ill-cat commented 1 month ago

因为SetMissileDamage的这个callback给的例子是function(attack_data, caster) 你把caster换成别的词本质上也还是caster SetMissileDamage好像也只有设置初始值的时候能用

试了下可以通过这种方式

    --子弹受击效果--和Api:SetMissileDamage一个位置
    Api:SetMissileImpact("attack_rock", function(attack_data, caster, target)
        local health = target:GetCurrentHealth()
        local damage = 0.2 * health
        target:Damage(damage, caster, {
            show_duration = 0.25 * 1,
            anim_duration = 0.75 * 1,
            color = "<color=red>",
            size = "<size=100%>",
            center_at_unit = false,
        })
    end)

本来想直接改attack_data.damage,但没有用 (顺便这个center_at_unit=false了那个跳字也是在中间 如果不想要这个伤害跳字的话可能目前还是靠初始神器/能力来做好点

fuxiao1563 commented 1 month ago

@Ill-cat 多谢佬这么晚了还帮忙解答,我明天试一试

MajorMajorMajor6 commented 1 month ago

@Ill-cat 正解,SetMissileDamage里面的callback是自己的角色,不是对面。 应该也可以用CombatUnit:GetMainOpponent()来得到敌人,即:

Api:SetMissileDamage("attack_zombie_rolex", function(attack_data, caster)
    local target = caster:GetMainOpponent()
    return 0.2 * target:GetCurrentHealth()
end)
Ill-cat commented 1 month ago

确实可以,我一开始试这个忘记把combat_unit:GetMainOpponent()的combat_unit改掉了,就换了个繁琐的办法(

fuxiao1563 commented 1 month ago

@Ill-cat @MajorMajorMajor6 好的,问题已解决。多谢二位