using CommonAI.Zone; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; namespace XmdsCommonSkill.Plugin.Buffs { public class XmdsBuff_Stealth : XmdsBuffBase { /// /// 传负值减速度,传正值加速度. /// public int ChangePercent = 0; /// /// 队友可见. /// public bool TeamMemberVisible = true; private int mOpID = 0; public override int GetAbilityID() { return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.Stealth; } public override void CopyTo(UnitBuff other) { var ret = other as XmdsBuff_Stealth; ret.ChangePercent = this.ChangePercent; ret.TeamMemberVisible = this.TeamMemberVisible; base.CopyTo(other); } protected override void OnBindTemplate(ref BuffTemplate buffTemplate) { buffTemplate.IsInvisible = true; } protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, InstanceUnit.BuffState state) { if (ChangePercent != 0) { XmdsVirtual.PropChangeOperation pco = hitter.CreatePropChangeOpertation(this); pco.Type = XmdsVirtual.UnitAttributeType.MoveSpeed; pco.Value = ChangePercent; pco.OpType = XmdsVirtual.PropChangeOperation.OperateType.Percent; mOpID = hitter.AddPropChangeOperation(pco); } hitter.TeamMemberVisible = TeamMemberVisible; hitter.mUnit.AddActionSubState(UnitActionSubStatus.Stealth); XmdsVirtual.FormatLog("BuffBegin : 单位【{0}】进入潜行状态,移动速度变更{1}", hitter.mProp.ServerData.BaseInfo.name, ChangePercent); } protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace) { if (ChangePercent != 0 || mOpID > 0) { hitter.RemovePropChangeOperation(mOpID); } hitter.mUnit.RemoveActionSubState(UnitActionSubStatus.Stealth); XmdsVirtual.FormatLog("BuffEnd : 单位【{0}】退出入潜行状态,移动速度恢复", hitter.mProp.ServerData.BaseInfo.name); } } }