using CommonAI.Zone;
using CommonAI.Zone.Instance;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
using XmdsCommonSkill.Plugin.Buffs;
using XmdsCommonServer.XLS.Data;
namespace XmdsCommonSkill.Plugin.Skills.Priest
{
///
/// 暗影形态: 进入暗影形态,物防提高x%,移动速度提高x%,每秒消耗x%法力对身边的所有敌人造成x倍魔攻伤害,附加x点魔法伤害.
///
public class Priest_501050 : XmdsSkillBase
{
///
/// 技能ID.
///
public static int ID = 501050;
///
/// 伤害类型.
///
public static XmdsVirtual.AttackType AtkType_1 = XmdsVirtual.AttackType.magAtk;
///
/// 伤害倍数.
///
public static XmdsSkillValue DP_1;
///
/// 伤害倍数每级成长.
///
public static XmdsSkillValue DP_up;
///
/// 附加伤害.
///
public static XmdsSkillValue DM_1;
///
/// BUFF.
///
public static int Buff_1 = (int)XmdsBuffBase.XmdsBuffList.AN_YIN_XING_TAI;
///
/// BUFF时长.
///
public static XmdsSkillValue BuffLifeTime;
///
/// 蓝消耗.
///
public static XmdsSkillValue MPCost;
///
/// 护甲上升.
///
public static XmdsSkillValue DefUp;
///
/// 速度上升.
///
public static XmdsSkillValue SpeedUp;
///
/// 仇恨系数.
///
public static XmdsSkillValue ThreatValue;
///
/// 获取技能ID.
///
public override int SkillID
{
get
{
return ID;
}
}
protected override void OnSkillDamagePerEvent(BattleParams param)
{
int ret = CalDamagePer(DP_1, DP_up, param.GameSkill.SkillLevel);
param.SkillDamagePer = ret;
}
protected override void OnskillDamageModifyEvent(BattleParams param)
{
int ret = 0;
ret = GetTargetFormulaValue(param.GameSkill.SkillLevel, DM_1);
param.SkillDamageModify = ret;
}
protected override void OnAttackTypeEvent(BattleParams param)
{
param.AttackType = AtkType_1;
}
protected override void OnThreatValueEvent(BattleParams param)
{
param.ThreatValue = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, ThreatValue);
}
protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
{
//注册技能结束监听.
unit.RegistStateSkillEndEvent(OnStateEndEvent, info, false);
//标记效果实现.
XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_1);
BuffTemplate bt = pack.mBuffTemplate;
bt.FirstTimeEnable = false;
pack.BindTemplateAndDispose();
bt.IsHarmful = false;
unit.RegistSendBuff(bt);
}
protected override void OnSkillLogicEvent(BattleParams param)
{
//打自己加BUFF.
if ( param.AtkProp.DamagePerID == 1)
{
param.UseFormulaType = BattleParams.FormulaType.None;
//物防.
XmdsBuff_PropChange b1 = (XmdsBuff_PropChange)param.Attacker.GetRegisBuffVirtual(Buff_1, 0);
b1.IsPercent = true;
b1.CurentChangeType = (int)XmdsBuff_PropChange.PropChangeType.AC;
b1.CurrentValue = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, DefUp);
//速度.
XmdsBuff_MoveSpeedChange b2 = (XmdsBuff_MoveSpeedChange)param.Attacker.GetRegisBuffVirtual(Buff_1, 1);
b2.ChangePercent = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, SpeedUp);
XmdsBuffBase b3 = (XmdsBuffBase)param.Attacker.GetRegisBuffVirtual(Buff_1, 2);
//设置伤害回调.
b3.SetOnHitCallBack(param.GameSkill, OnXmdsBuffHitEvent);
BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_1);
bt.LifeTimeMS = GetTargetFormulaValue(param.GameSkill.SkillLevel, BuffLifeTime);
param.Attacker.mUnit.AddBuff(Buff_1);
}
//打敌人
else if (param.AtkProp.DamagePerID == 2)
{
//donothing.
}
}
private void OnXmdsBuffHitEvent(BattleParams param)
{
//计算每秒蓝消耗量.
float p = 1.0f * this.GetTargetFormulaValue(param.GameSkill.SkillLevel, MPCost) / XmdsDamageCalculator.PERER;
int mpChange = (int)(param.Hitter.mUnit.MaxMP * p);
param.Hitter.AddMP(-mpChange,false);
//蓝<=0.中断当前技能状态.
if (param.Hitter.mUnit.CurrentMP <= 0)
{
var sk = param.Hitter.mUnit.CurrentState as InstanceUnit.StateSkill;
if (sk != null)
{
sk.block();
}
}
}
private void OnStateEndEvent(XmdsVirtual owner, InstanceUnit.StateSkill state, GameSkill gs)
{
//技能结束,BUFF结束.
if (state.SkillData.ID == ID)
{
owner.mUnit.removeBuff(Buff_1, InstanceUnit.BuffState.EndResult_ByCode);
}
}
protected override void OnInitSkillParam()
{
XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
AtkType_1 = data.GetAtkType();
InitData(data, out DP_1, XmdsSkillData.XmdsSkillDataKey.DmgRate);
InitData(data, out DP_up, XmdsSkillData.XmdsSkillDataKey.DmgRatePerLvl);
InitData(data, out DM_1, XmdsSkillData.XmdsSkillDataKey.ExdDmgSet);
InitData(data, out MPCost, XmdsSkillData.XmdsSkillDataKey.ValueSet); // 耗蓝.
InitData(data, out DefUp, XmdsSkillData.XmdsSkillDataKey.ValueSet2); // 物防.
InitData(data, out SpeedUp, XmdsSkillData.XmdsSkillDataKey.ValueSet3); // 速度.
InitData(data, out BuffLifeTime, XmdsSkillData.XmdsSkillDataKey.BuffTime);
InitData(data, out ThreatValue, XmdsSkillData.XmdsSkillDataKey.HateRate);
}
}
}