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);
}
}
}