MemeMayhem / ModExamples

11 stars 3 forks source link

眩晕抗性 #38

Closed yangjiandendi closed 2 months ago

yangjiandendi commented 2 months ago

请问现在有没有方法能实现一些自定义抗性,类似于反伤抗性的属性,比如说眩晕抗性,减少眩晕时的眩晕时间

GoodCrispyShark commented 2 months ago

眩晕是behavior 而且鉴于眩晕太op大部分眩晕都是1帧或者2帧 感觉抗性意义不大

目前大部分眩晕是用debuff_stun_100ms实现的,如果要做抗性你就需要保证你mod内部所有的眩晕都是你自己实现的并且apply之前检测抗性并减少相应层数

yangjiandendi commented 2 months ago

眩晕是behavior 而且鉴于眩晕太op大部分眩晕都是1帧或者2帧 感觉抗性意义不大

目前大部分眩晕是用debuff_stun_100ms实现的,如果要做抗性你就需要保证你mod内部所有的眩晕都是你自己实现的并且apply之前检测抗性并减少相应层数

比如说: behavior = { description = "埋伏", buff_bar_icon = DCEI.Texture("mai_fu"), actor_event_on_apply = "EventStunOn", actor_event_on_remove = "EventStunOff", interval_effect = { stun = true, }, interval = 4, },

这里的interval 我怎么能改成一个和GetBoundedAttribute有关的数值呢?

NinjaAqua445 commented 2 months ago

您好,interval 值目前不支持动态修改。

yangjiandendi commented 2 months ago

您好,interval 值目前不支持动态修改。

感谢!那有没有什么方法可以施加伤害减免呢?

NinjaAqua445 commented 2 months ago

您好,如果是玉玉和狂躁那种全伤害类型的加成或者减免目前是不支持的,以后可以考虑加入 @GoodCrispyShark 。 目前,您可以通过比较tricky的方式实现子弹和大招的伤害加成/减免,具体方式是在 RunRegisterOnUltimateImpactCallback/RunRegisterOnUltimateHitCallbackRunRegisterOnMissileImpactCallback/RunRegisterOnMissileHitCallback 中修改 attack_data.damage 的数值。例如:

combat_unit.Attack:RegisterOnMissileImpactCallback(name, function(level, attack_data, caster, target)
            attack_data.damage = attack_data.damage * 1.1 -- 子弹10%增伤
        end)
yangjiandendi commented 2 months ago

@NinjaAqua445 }, function(combat_unit) local name = "xuanyundikang" combat_unit:RegisterOnStunnedCallback(name, function(level, target,caster ) local damage_reduction = combat_unit:GetBoundedAttribute("stun_resist") or 0 combat_unit.Attack:RegisterOnMissileLaunchCallback(name, function(level, attack_data, caster, target) attack_data.damage = attack_data.damage * (1-damage_reduction) end) end) combat_unit:RegisterOnStunnedEndCallback(name, function(level, target, caster) local damage_reduction = combat_unit:GetBoundedAttribute("stun_resist") or 0 combat_unit.Attack:RegisterOnMissileLaunchCallback(name, function(level, attack_data, caster, target) attack_data.damage = attack_data.damage / (1-damage_reduction) end) end) end)

我这里修改了之后,子弹的伤害缩放都是施加在我自己身上的,如何能施加在敌人身上呢?(当我自己眩晕的时候)

NinjaAqua445 commented 2 months ago

RegisterOnStunnedCallback

请问 xuanyundikang 这个能力是施加在玩家身上还是施加在敌人身上的?我没理解错的话这个xuanyundikang是施加在敌人身上的,然后被晕眩了的玩家的子弹命中有xuanyundikang的敌人时会有减伤,那么您应该使用 RegisterOnMissileHitCallback,这个是在被子弹命中后触发的,您使用 RegisterOnMissileLaunchCallback意味者是施加了xuanyundikang的敌人发射子弹时才触发。 其次,在回调函数中注册新的回调函数不是正确的做法,应该直接进行注册。

function(combat_unit)
    local name = "xuanyundikang"
    -- 当combat_unit被子弹击中时
    combat_unit:RegisterOnMissileHitCallback(name, function(level, attack_data, caster, target)
        if PerkBehaviorSystem:IsStunned(caster) then -- 当caster(发射子弹的unit)被晕眩时
            attack_data.damage = attack_data.damage * 0.9
        end
    end)
    -- 如果还需要注册别的回调函数
    combat_unit:RegisterOnMissileLaunchCallback(name, function(level, attack_data, caster, target)
        -- do something
    end)
    combat_unit:RegisterOnStunnedCallback(name, function(level, caster, target)
        -- do something
    end)
end
yangjiandendi commented 2 months ago

@NinjaAqua445 这个是施加在自己的,然后敌人打我,敌人的子弹伤害会被减少

NinjaAqua445 commented 2 months ago

@NinjaAqua445 这个是施加在自己的,然后敌人打我,敌人的子弹伤害会被减少

那将判断是否晕眩的unit从caster换成target即可:

function(combat_unit)
    local name = "xuanyundikang"
    -- 当combat_unit被子弹击中时
    combat_unit:RegisterOnMissileHitCallback(name, function(level, attack_data, caster, target)
        if PerkBehaviorSystem:IsStunned(target) then -- 当target(被子弹命中的unit)被晕眩时
            attack_data.damage = attack_data.damage * 0.9
        end
    end)
    -- 如果还需要注册别的回调函数
    combat_unit:RegisterOnMissileLaunchCallback(name, function(level, attack_data, caster, target)
        -- do something
    end)
    combat_unit:RegisterOnStunnedCallback(name, function(level, caster, target)
        -- do something
    end)
end
yangjiandendi commented 2 months ago

@NinjaAqua445 感谢!

yangjiandendi commented 2 months ago

@NinjaAqua445 请问 PerkBehaviorSystem:IsStunned(target) 这个只能用在RegisterPerk 里吗。我在relic里用了这个之后,游戏一进mod就会卡主了

我完整的代码是这样的:

` Api:RegisterRelic("xuanyundikang", { id = "xuanyundikang", display_name = "眩晕抵抗", description = "受到眩晕时,获得数值等于眩晕抵抗的伤害减免", icon = DCEI.Texture("my_cat_hand"), rarity = "permanent", }, function(combat_unit) local name = "xuanyundikang" combat_unit:RegisterOnMissileLaunchCallback(name, function(level, attack_data, caster, target) local damage_reduction = combat_unit:GetBoundedAttribute("stun_resist") or 0 if PerkBehaviorSystem:IsStunned(target) then attack_data.damage = attack_data.damage * (1-damage_reduction) end end) end) ·

NinjaAqua445 commented 2 months ago

@NinjaAqua445 请问 PerkBehaviorSystem:IsStunned(target) 这个只能用在RegisterPerk 里吗。我在relic里用了这个之后,游戏一进mod就会卡主了

我完整的代码是这样的:

` Api:RegisterRelic("xuanyundikang", { id = "xuanyundikang", display_name = "眩晕抵抗", description = "受到眩晕时,获得数值等于眩晕抵抗的伤害减免", icon = DCEI.Texture("my_cat_hand"), rarity = "permanent", }, function(combat_unit) local name = "xuanyundikang" combat_unit:RegisterOnMissileLaunchCallback(name, function(level, attack_data, caster, target) local damage_reduction = combat_unit:GetBoundedAttribute("stun_resist") or 0 if PerkBehaviorSystem:IsStunned(target) then attack_data.damage = attack_data.damage * (1-damage_reduction) end end) end) ·

您好,RegisterOnMissileLaunchCallbackAttackManager的API不是CustomUnit的API,您需要用combat_unit.Atttack:RegisterOnMissileLaunchCallback 进行调用