123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 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
- {
- /// <summary>
- /// FileName: XmdsBuff_ChangeSkillTotalTime.cs
- /// Author: Alex.Yu
- /// Corporation:...
- /// Description: 技能CD时间改变.
- /// DateTime: 2015/7/17 17:54:17
- /// </summary>
- public class XmdsBuff_ChangeSkillTotalTime : XmdsBuffBase
- {
- /// <summary>
- /// 指定影响技能,等于0时影响单位所拥有的技能.
- /// </summary>
- public int TargetSkill = 0;
- /// <summary>
- /// 变更时间:>0增加CD时间.小于减少CD时间.
- /// </summary>
- public int ChangeTime = 0;
- /// <summary>
- /// 是否为百分比.
- /// </summary>
- 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<CommonAI.Zone.Instance.InstanceUnit.SkillState> states = (List<CommonAI.Zone.Instance.InstanceUnit.SkillState>)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<CommonAI.Zone.Instance.InstanceUnit.SkillState> states = (List<CommonAI.Zone.Instance.InstanceUnit.SkillState>)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);
- }
- }
- }
|