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