using Gameplay.Common; using UnityEngine; namespace Gameplay.Buff { public class BuffBulletDamage10 : BaseBuff { protected override void _OnTrigger() { base._OnTrigger(); // 【固定伤害,攻击力百分比,流血持续时间,流血伤害系数,第二次叠加系数】 var fixValue = _TryGetIntParam(0); var attackPercent = _TryGetFloatParam(1); var bleedDuration = _TryGetIntParam(2); var bleedDamageRate = _TryGetFloatParam(3); var bleedDamageRate2 = _TryGetFloatParam(4); var isSecondAttack = false; var lastAttackUnit = creator.controlData.continueSkillData.hitUnit; var nowAttackUnit = owner; if (lastAttackUnit == nowAttackUnit) { isSecondAttack = true; } else { creator.controlData.continueSkillData.hitUnit = nowAttackUnit; } var damageValue = Mathf.RoundToInt(fixValue + creator.fightData.attack * attackPercent); var oldHp = owner.aliveData.hpAndShield; owner.TakeNormalDamage(damageValue, creator, false); var newHp = owner.aliveData.hpAndShield; var realDamage = oldHp - newHp; var bleedScale = isSecondAttack ? bleedDamageRate2 : bleedDamageRate; var bleedDamage = Mathf.RoundToInt(realDamage * bleedScale); var createBuff = BuffManager.instance.CreateBuffById( creator, CodeDefine.BLEED_BUFF_ID); if (createBuff == null) { DebugUtil.LogError("无法创建流血buff:" + CodeDefine.BLEED_BUFF_ID); return; } var wrapBuff = createBuff as BuffDelayDamage; if (wrapBuff == null) { DebugUtil.LogError("流血buff类型错误:" + CodeDefine.BLEED_BUFF_ID); return; } wrapBuff.damageValue = bleedDamage; wrapBuff.ForceSetExistTime(bleedDuration); owner.buffManager.AddBuff(wrapBuff); } } }