using CommonAI.Zone;
using XmdsCommon.Plugin;
using XmdsCommonServer.Plugin;
using XmdsCommonSkill.Plugin.Buffs;
using XmdsCommonServer.XLS.Data;
using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
using System.Collections.Generic;
namespace XmdsCommonSkill.Plugin.Skills.Priest
{
///
///圣光强化: (增加烙印效果,牧师使用其他技能时触发额外伤害).
///使神圣光球对目标造成伤害时,目标将被灌注神圣力量,牧师可施放其他技能来激活这股力量,对敌人造成额外x%魔攻伤害.
///
public class Priest_501010 : Priest_500010
{
///
/// 技能ID.
///
public static new int ID = 501010;
///
/// BUFFID
///
public static int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.SHENG_GUANG_QIANG_HUA;
public static XmdsSkillValue buff_value;
public static XmdsSkillValue BuffLifeTime;
public static new XmdsSkillValue ThreatValue;
//表现BUFF.
public static int SpellID = 501012;
///
/// 获取技能ID.
///
public override int SkillID
{
get
{
return ID;
}
}
protected override void OnThreatValueEvent(BattleParams param)
{
param.ThreatValue = this.GetTargetFormulaValue(param.GameSkill.TalentSkillLevel, ThreatValue);
}
protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
{
XmdsBuffPack pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID);
BuffTemplate bt = pack.mBuffTemplate;
bt.IsHarmful = true;
pack.BindTemplateAndDispose();
unit.RegistSendBuff(bt);
}
protected override void OnRegistEvent()
{
this.RegistEvent(EventType.SkillLogicAftercalDamage, OnSkillLogicAfterCalDamage);
base.OnRegistEvent();
}
private void OnSkillLogicAfterCalDamage(BattleParams param)
{
XmdsBuff_Brand buff = (XmdsBuff_Brand)param.Attacker.GetRegisBuffVirtual(Buff_ID, 0);
// buff伤害设置.
int t = this.GetTargetFormulaValue(param.GameSkill.TalentSkillLevel, buff_value);
int mag = (param.Attacker.MirrorProp.MaxMag + param.Attacker.MirrorProp.MinMag) / 2;
t = (int)(t / XmdsDamageCalculator.PERER * mag);
//算魔防伤害.
t = XmdsDamageCalculator.GetDamage(t, XmdsVirtual.AttackType.magAtk,
param.Attacker, param.Hitter);
buff.BuffValue = t;
// 指定职业牧师.
buff.TargetPro = XmdsUnitData.XmdsUnitPro.Priest;
///设置使用类型.
buff.BuffUseType = (int)XmdsBuffBase.XmdsBuffUseType.Times;
// 生效次数1次.
buff.BuffUseTime = 1;
//普攻无效.
//调用前先清理过滤技能列表!!!.
buff.CleanIgnoreSkillList();
buff.AddIgnoreSkill(Priest_501010.ID);
buff.AddIgnoreSkill(Priest_502010.ID);
buff.AddIgnoreSkill(Priest_500010.ID);
buff.OnHandleBuffEndEvent += ((hitter, state) =>
{
//代码调用,烙印引爆效果.
var list = state.Tag as List;
if (list != null && list.Count > 0)
{
buff = list[0] as XmdsBuff_Brand;
if (buff != null && buff.Exploded)
{
LaunchSpell ls = new LaunchSpell();
ls.SpellID = SpellID;
hitter.mUnit.Parent.unitLaunchSpell(hitter.mUnit, ls, hitter.mUnit.X, hitter.mUnit.Y);
hitter.mUnit.removeBuff(Buff_ID);
}
}
});
BuffTemplate bt = param.Attacker.GetRegistBuff(Buff_ID);
bt.LifeTimeMS = this.GetTargetFormulaValue(param.GameSkill.TalentSkillLevel, BuffLifeTime);
param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit);
}
protected override void OnInitSkillParam()
{
base.OnInitSkillParam();
XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
InitData(data, out buff_value, XmdsSkillData.XmdsSkillDataKey.ValueSet);
InitData(data, out BuffLifeTime, XmdsSkillData.XmdsSkillDataKey.BuffTime);
InitData(data, out ThreatValue, XmdsSkillData.XmdsSkillDataKey.HateRate);
}
}
}