using CommonAI.Zone; 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 { public class XmdsBuff_Bleed : XmdsBuffBase { /// ///攻击值 /// public int ChangeValue = 0; //流血加深系数 public float deepValue = 1.0f; //伤害加深 private bool damageDeepByOverlayer = false; private int Overlayer = 1; public override int GetAbilityID() { return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.Bleed; } public override void CopyTo(UnitBuff other) { var ret = other as XmdsBuff_Bleed; ret.ChangeValue = this.ChangeValue; ret.deepValue = this.deepValue; base.CopyTo(other); } protected override void OnBindTemplate(ref BuffTemplate buffTemplate) { //DOT类技能首帧无效. base.OnBindTemplate(ref buffTemplate); } protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, InstanceUnit.BuffState state) { this.Overlayer = state.OverlayLevel; } protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace) { } protected override int OnBuffHit(XmdsVirtual hitter, XmdsVirtual attacker, CommonAI.Zone.Formula.AttackSource source, ref XmdsVirtual.AtkResult result) { if (ChangeValue != 0) { double damageValue = XmdsUnitProp.PER * this.ChangeValue; // 伤害加深逻辑 if(this.damageDeepByOverlayer && this.Overlayer > 0) { for(int i = 0; i < this.Overlayer; i++) { damageValue = damageValue * deepValue; } } //造成伤害. //int damage = CUtils.CastInt(base.OnBuffHit(hitter, attacker, source, ref result) * damageValue); return ChangeValue; } return base.OnBuffHit(hitter, attacker, source, ref result); } } }