using CommonAI.Data; using CommonAI.Zone; using CommonAI.Zone.Formula; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using CommonLang; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; namespace XmdsCommonSkill.Plugin.Buffs { /// <summary> ///BUFF:伤害减免 /// </summary> public class XmdsBuff_DamageRemit : XmdsBuffBase { //减免的技能类型 public XmdsSkillType remitSkilType = XmdsSkillType.none; ///填正值为扣血. public int ChangeValue = 0; public int UUID = 0; public override int GetAbilityID() { return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.DamageRemit; } public override void CopyTo(UnitBuff other) { var ret = other as XmdsBuff_DamageRemit; ret.ChangeValue = this.ChangeValue; 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(OnUnitHitEvent, null); } public override void BuffEnd(XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace) { hitter.UnRegistOnHitDamage(UUID); } //被打监听. protected virtual float OnUnitHitEvent(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { if(remitSkilType == XmdsSkillType.none || (source.FromSkillType == this.remitSkilType)) { if (BuffUseType == (int)XmdsBuffUseType.Times && BuffInvaildCheck()) { hitted.mUnit.removeBuff(BindBuffID); } //伤害减免 damage = CUtils.CastInt(damage * XmdsUnitProp.PER * (XmdsDamageCalculator.PERER - this.ChangeValue)); } return damage; } } }