12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
-
- 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
- {
- /// <summary>
- /// 受击加血
- /// </summary>
- ///
- 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;
- }
- }
- }
|