using CommonAI.Data; using CommonAI.Zone.Formula; using System; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; namespace XmdsCommonSkill.Plugin.Buffs { /// /// 受击加血 /// /// public class XmdsBuff_HitAddHp : XmdsBuffBase { public int addMaxHpPer = 0; //单次恢复最大生命万分之N的血量 public int minDamgeOnce = 0; //单次伤害达到这个值才出发 public int hitInterval = 0; //触发时间间隔 private long mNextHitTimeStamp = 0; private int UUID = 0; public override int GetAbilityID() { return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.HitAttHp; } public override void CopyTo(UnitBuff other) { var ret = other as XmdsBuff_HitAddHp; ret.addMaxHpPer = this.addMaxHpPer; ret.minDamgeOnce = this.minDamgeOnce; ret.hitInterval = this.hitInterval; base.CopyTo(other); } protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.BuffState state) { UUID = hitter.RegistOnHitDamage(OnUnitHitEvent, null); } protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, CommonAI.Zone.Instance.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) { //受击恢复生命 do { if (minDamgeOnce != 0 && damage < minDamgeOnce) { break; } if (hitInterval != 0 && CommonLang.CUtils.localTimeMS < mNextHitTimeStamp) { break; } mNextHitTimeStamp = CommonLang.CUtils.localTimeMS + hitInterval; hitted.AddHP(addMaxHpPer, hitted.mUnit); if (BuffInvaildCheck()) { hitted.mUnit.removeBuff(BindBuffID); } } while (false); return damage; } } }