using CommonAI.Data; using CommonAI.Zone; using CommonAI.Zone.Formula; using CommonLang; using System; using System.Collections.Generic; using System.Linq; using System.Text; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; namespace XmdsCommonSkill.Plugin.Buffs { /// /// FileName: XmdsBuff_Invincible.cs /// Author: Alex.Yu /// Corporation:... /// Description: 无敌BUFF. /// DateTime: 2015/8/17 19:45:20 /// public class XmdsBuff_Invincible : XmdsBuffBase { public bool isCanMove = true; //是否能够移动 private int mOpID = 0; private int mUUID_1 = 0; private int mUUID_2 = 0; public override int GetAbilityID() { return (int)XmdsBuffProperties.XmdsBuffAbility.Invincible; } public override void CopyTo(UnitBuff other) { var ret = other as XmdsBuff_Invincible; ret.isCanMove = this.isCanMove; base.CopyTo(other); } protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.BuffState state) { //通过编辑器设置无敌效果. XmdsVirtual.FormatLog("单位 {0} 无敌开始", hitter.mInfo.Name); //hitter.IsInvincible = true; if(!this.isCanMove) { XmdsVirtual.PropChangeOperation pco = hitter.CreatePropChangeOpertation(this) ; pco.Type = XmdsVirtual.UnitAttributeType.MoveSpeed; pco.Value = -10000; pco.OpType = XmdsVirtual.PropChangeOperation.OperateType.Percent; mOpID = hitter.AddPropChangeOperation(pco); } mUUID_1 = hitter.RegistTryAddBuffEvent(OnTryAddBuffEvent, null); mUUID_2 = hitter.RegistOnHitDamage(OnHandleHitDmage, null); } private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source, ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch) { isEndDispatch = true; attacker.SendBattleHintNumberB2C(0, XmdsVirtual.UnitHitEventState.Immunity, hitted.mUnit.ID); return 0; } protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, CommonAI.Zone.Instance.InstanceUnit.BuffState state, bool replace) { XmdsVirtual.FormatLog("单位 {0} 无敌解除", hitter.mInfo.Name); hitter.IsInvincible = false; if (mOpID > 0) { hitter.RemovePropChangeOperation(mOpID); } hitter.UnRegistTryAddBuffEvent(mUUID_1); hitter.UnRegistOnHitDamage(mUUID_2); } private bool OnTryAddBuffEvent(ref BuffTemplate buff, XmdsVirtual attacker, XmdsVirtual hitter, GameSkill skill) { //只能刷新无敌buff XmdsBuffProperties prop = buff.Properties as XmdsBuffProperties; if (prop.BuffAbilityList != null && prop.BuffAbilityList.Count == 1 && (int)prop.BuffAbilityList[0].ability == this.GetAbilityID()) { return true; } return false; } } }