using CommonAI.Zone; using CommonAI.Zone.Formula; using CommonAI.Zone.Instance; using System; using System.Collections.Generic; using System.Linq; using System.Text; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.Units; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; namespace XmdsCommonSkill.Plugin.Buffs { public class XmdsBuff_IgnorCtrlAndSpeedChg : XmdsBuffBase { //免控,并且速度改变 public int speedChange = 1000; private int mOpID = 0; private int uuid_ignoreCtrl = 0; private GameSkill gs = null; public override int GetAbilityID() { return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.IgnorCtrl_And_SpeedChg; } public override void CopyTo(UnitBuff other) { var ret = other as XmdsBuff_IgnorCtrlAndSpeedChg; ret.speedChange = this.speedChange; base.CopyTo(other); } protected override void OnBuffBegin(XmdsVirtual hitter, XmdsVirtual attacker, InstanceUnit.BuffState state) { //注册免控 uuid_ignoreCtrl = hitter.RegistTryAddBuffEvent(OnTryAddBuffEvent, gs); //移动速度变更. if (this.speedChange != 0) { XmdsVirtual.PropChangeOperation pco = hitter.CreatePropChangeOpertation(this); pco.Type = XmdsVirtual.UnitAttributeType.MoveSpeed; pco.Value = speedChange; pco.OpType = XmdsVirtual.PropChangeOperation.OperateType.Percent; mOpID = hitter.AddPropChangeOperation(pco); } } protected override void OnBuffEnd(XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace) { if (this.speedChange != 0) { hitter.RemovePropChangeOperation(mOpID); } hitter.UnRegistTryAddBuffEvent(uuid_ignoreCtrl); } private bool OnTryAddBuffEvent(ref BuffTemplate buff, XmdsVirtual attacker, XmdsVirtual hitter, GameSkill skill) { if (!IsInvaild() && XmdsInstanceUtils.IsControlBuff(buff)) { hitter.SendBattleHintNumberB2C(0, XmdsVirtual.UnitHitEventState.Immunity); //每次生效自动检查. if (BuffInvaildCheck()) { hitter.mUnit.removeBuff(BindBuffID); } return false; } return true; } } }