using System; using System.Collections.Generic; using System.Linq; using System.Text; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; namespace XmdsCommonSkill.Plugin.Buffs { /// /// FileName: XmdsBuff_ChangeSkillTotalTime.cs /// Author: Alex.Yu /// Corporation:... /// Description: 技能CD时间改变. /// DateTime: 2015/7/17 17:54:17 /// public class XmdsBuff_ChangeSkillTotalTime : XmdsBuffBase { /// /// 指定影响技能,等于0时影响单位所拥有的技能. /// public int TargetSkill = 0; /// /// 变更时间:>0增加CD时间.小于减少CD时间. /// public int ChangeTime = 0; /// /// 是否为百分比. /// public bool IsPercent = false; public override int GetAbilityID() { return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.ChangeSkillTotalTime; } public override void CopyTo(UnitBuff other) { var ret = other as XmdsBuff_ChangeSkillTotalTime; ret.TargetSkill = this.TargetSkill; ret.ChangeTime = this.ChangeTime; ret.IsPercent = this.IsPercent; base.CopyTo(other); } protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.BuffState state) { if (TargetSkill != 0) { //指定技能. CommonAI.Zone.Instance.InstanceUnit.SkillState ss = hitter.mUnit.getSkillState(TargetSkill); if (ss != null) { XmdsCommonServer.Plugin.XmdsVirtual.FormatLog("BuffBegin 【{0}】技能【{1}】CD改变{2}", hitter.mProp.ServerData.BaseInfo.name, ss.Data.Name, ChangeTime); BeginEffect(hitter, ss, state.OverlayLevel + 1); } } else { //所有技能修改. //CommonAI.Zone.Instance.InstanceUnit.SkillState[] states = hitter.mUnit.SkillStatus; List states = (List)hitter.mUnit.SkillStatus; for (int i = 0 ; i < states.Count ; i++) { XmdsCommonServer.Plugin.XmdsVirtual.FormatLog("BuffBegin 【{0}】技能【{1}】CD改变{2}", hitter.mProp.ServerData.BaseInfo.name, states[i].Data.Name, ChangeTime); BeginEffect(hitter, states[i], state.OverlayLevel + 1); } } } protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, CommonAI.Zone.Instance.InstanceUnit.BuffState state, bool replace) { if (TargetSkill != 0) { //指定技能. CommonAI.Zone.Instance.InstanceUnit.SkillState ss = hitter.mUnit.getSkillState(TargetSkill); if (ss != null) { XmdsCommonServer.Plugin.XmdsVirtual.FormatLog("BuffEnd 【{0}】技能【{1}】CD改变{2}", hitter.mProp.ServerData.BaseInfo.name, ss.Data.Name, ChangeTime); EndEffect(hitter, ss, state.OverlayLevel + 1); } } else { //所有技能修改. //CommonAI.Zone.Instance.InstanceUnit.SkillState[] states = hitter.mUnit.SkillStatus; List states = (List)hitter.mUnit.SkillStatus; for (int i = 0 ; i < states.Count ; i++) { XmdsCommonServer.Plugin.XmdsVirtual.FormatLog("BuffEnd 【{0}】技能【{1}】CD改变{2}", hitter.mProp.ServerData.BaseInfo.name, states[i].Data.Name, ChangeTime); EndEffect(hitter, states[i], state.OverlayLevel + 1); } } } private void BeginEffect(XmdsVirtual unit, CommonAI.Zone.Instance.InstanceUnit.SkillState ss, int overlay) { int v = 0; if (IsPercent) { v = (int)(-1 * ChangeTime * XmdsUnitProp.PER * ss.Data.CoolDownMS); } else { v = -1 * ChangeTime; } int old_v = ss.GetDecreaseTotalTimeMS(); int new_v = old_v + v; //只对未施放的技能有效. ss.SetDecreaseTotalTimeMS(new_v); unit.mUnit.DecreaseSkillCD(ss.Data.ID, v); } private void EndEffect(XmdsVirtual unit, CommonAI.Zone.Instance.InstanceUnit.SkillState ss, int overlay) { int v = 0; if (IsPercent) { v = (int)(-1 * ChangeTime * XmdsUnitProp.PER * ss.Data.CoolDownMS); } else { v = -1 * ChangeTime; } int old_v = ss.GetDecreaseTotalTimeMS(); int new_v = old_v - v; //只对未施放的技能有效. ss.SetDecreaseTotalTimeMS(new_v); } } }