using CommonAI.Data; using CommonAI.Zone; using CommonAI.Zone.Formula; using CommonAI.Zone.Instance; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; namespace XmdsCommonSkill.Plugin.Buffs { /// ///BUFF:抵御一次致命伤害 /// public class XmdsBuff_RemitDeadlyDamage : XmdsBuffBase { public int maxRemitDamage = 0; public int minRemitDamage = 0; private int UUID = 0; public override int GetAbilityID() { return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.Remit_DeadlyDamage; } public override void CopyTo(UnitBuff other) { var ret = other as XmdsBuff_RemitDeadlyDamage; ret.maxRemitDamage = this.maxRemitDamage; ret.minRemitDamage = this.minRemitDamage; base.CopyTo(other); } protected override void OnBindTemplate(ref BuffTemplate buffTemplate) { //DOT类技能首帧无效. buffTemplate.FirstTimeEnable = false; base.OnBindTemplate(ref buffTemplate); } public override void BuffBegin(XmdsVirtual hitter, XmdsVirtual attacker, InstanceUnit.BuffState state) { UUID = hitter.RegistOnHitDamage(OnHandleHitDmage, null, true); } public override void BuffEnd(XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace) { hitter.UnRegistOnHitDamage(UUID); } //被打监听. protected virtual float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { //伤害减免 if (damage >= minRemitDamage) { // 有吸收上限 if(damage <= maxRemitDamage) { damage = 0; source.OutClientState = (byte)XmdsCommonServer.Plugin.XmdsVirtual.UnitHitEventState.Absorb; } else { damage -= maxRemitDamage; } hitted.mUnit.removeBuff(this.BindBuffID); } return damage; } } }