1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
-
- using CommonAI.Data;
- using CommonAI.Zone.Formula;
- using CommonAI.Zone.Helper;
- using CommonAI.Zone.Instance;
- 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_NextAttackCrit_AddHP : XmdsBuffBase
- {
- public int excludeSkillID = 0;
- public int addHPPer = 0;
- public int criteRate = 10000;
- private int mTriggerSkillID = 0; //触发效果的技能ID
- private int mOpID = 0;
- private int mHandleUUID1 = 0;
- private int mHandleUUID2 = 0;
- public override int GetAbilityID()
- {
- return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.NextAttakCrit_AddHP;
- }
- public override void CopyTo(UnitBuff other)
- {
- var ret = other as XmdsBuff_NextAttackCrit_AddHP;
- ret.excludeSkillID = this.excludeSkillID;
- ret.addHPPer = this.addHPPer;
- ret.criteRate = this.criteRate;
- base.CopyTo(other);
- }
- protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.BuffState state)
- {
- XmdsVirtual.PropChangeOperation pco = hitter.CreatePropChangeOpertation(this);
- pco.Type = XmdsVirtual.UnitAttributeType.CritRate_NormalAtk;
- pco.Value = this.criteRate;
- pco.OpType = XmdsVirtual.PropChangeOperation.OperateType.Percent;
- mOpID = hitter.AddPropChangeOperation(pco);
- mHandleUUID1 = hitter.RegistOnHitOther(OnHandleHitOther, null);
- mHandleUUID2 = hitter.RegistLaunchSkillOver(OnLaunchSkillOver, null, true);
- }
- private float OnHandleHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
- ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
- {
- if (this.mTriggerSkillID > 0 && source.FromSkillType == XmdsSkillType.normalAtk)
- {
- int addHP = System.Math.Max(1, Convert.ToInt32(damage * XmdsUnitProp.PER * addHPPer));
- attacker.mUnit.AddHP(addHP, attacker.mUnit);
- }
- return damage;
- }
- // buff效果也可能是在其他模块监听的OnLaunchSkillOver调用的
- private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState skill)
- {
- if (skill.GetSkillType() == XmdsSkillType.normalAtk && (this.excludeSkillID == 0 || this.excludeSkillID != skill.Data.ID))
- {
- if (this.mTriggerSkillID > 0)
- {
- launcher.mUnit.removeBuff(this.BindBuffID);
- }
- else
- {
- this.mTriggerSkillID = skill.Data.ID;
- }
- }
- return 0;
- }
- protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, CommonAI.Zone.Instance.InstanceUnit.BuffState state, bool replace)
- {
- //取消监听.
- hitter.UnRegistOnHitOther(mHandleUUID1);
- hitter.UnRegistLaunchSkillOver(mHandleUUID2);
- if(mOpID > 0)
- {
- hitter.RemovePropChangeOperation(mOpID);
- }
- }
-
- protected override void OnDispose()
- {
- base.OnDispose();
- }
- }
- }
|