61 lines
2.2 KiB
C#
61 lines
2.2 KiB
C#
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(configData.AttackPowerLevel,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);
|
|
}
|
|
|
|
}
|
|
}
|