using CommonAI.Zone; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using CommonLang; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.Buffs; namespace XmdsCommonSkill.Plugin.Skills.Magic { /// <summary> /// 法师三技能:3-5(闪现到指定点也会形成圆形区域,进入该技能两个圆形区域的敌人受到0.5秒压制效果和额外伤害) /// </summary> public class Magic_310350 : Magic_310340 { private static readonly int ID = 310350; //额外伤害 public XmdsSkillValue mValueSet3; //扩展配置 public XmdsSkillValue mValueSet5; //两个圈之间标记时间 public XmdsSkillValue mValueSet6; public static readonly int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.FS_YAZHI_3_5; public static readonly int Buff_ID_1 = (int)XmdsBuffBase.XmdsBuffList.FS_TAG_3_5; public static readonly int Buff_ID_2 = (int)XmdsBuffBase.XmdsBuffList.FS_TAG_3_5Ext; public override int SkillID { get { return ID; } } protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template) { // Buff修改 var pack = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID); var bt = pack.mBuffTemplate; bt.LifeTimeMS = mValueSet5.GetValue(info.TalentSkillLevel2); bt.IsHarmful = true; pack.BindTemplateAndDispose(); unit.RegistSendBuff(bt); // 标记时间,内部定义即可 var pack1 = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID_1); var bt1 = pack1.mBuffTemplate; bt1.LifeTimeMS = mValueSet6.GetValue(info.TalentSkillLevel2); bt1.IsHarmful = true; pack1.BindTemplateAndDispose(); unit.RegistSendBuff(bt1); var pack2 = XmdsBuffFactory.GetInstance().GetXmdsBuffPack(Buff_ID_2); var bt2 = pack2.mBuffTemplate; bt2.LifeTimeMS = mValueSet6.GetValue(info.TalentSkillLevel2); ; bt2.IsHarmful = true; pack2.BindTemplateAndDispose(); unit.RegistSendBuff(bt2); unit.RegistLaunchSkillOver(OnLaunchSkillOver, info); } private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState state) { info.mHitUnits.Clear(); return 0; } protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit) { base.OnSkillDataChange(gs, unit); var bt1 = unit.GetRegistBuff(Buff_ID); bt1.LifeTimeMS = mValueSet5.GetValue(gs.TalentSkillLevel2); var bt2 = unit.GetRegistBuff(Buff_ID_1); bt2.LifeTimeMS = mValueSet6.GetValue(gs.TalentSkillLevel2); var bt3 = unit.GetRegistBuff(Buff_ID_2); bt3.LifeTimeMS = mValueSet6.GetValue(gs.TalentSkillLevel2); } protected override void OnSkillLogicAftercalDamage(BattleParams param) { //寒霜区域 bool hasExtDamage = false; if (param.AtkProp.DamagePerID == 2) { if (param.Attacker.mUnit != param.Hitter.mUnit) { param.Hitter.mUnit.AddBuff(Buff_ID_1, param.Attacker.mUnit); //检测另外一个寒霜区域标记是否有 if (param.Hitter.mUnit.GetBuffByIDAndSender(Buff_ID_2, param.Attacker.mUnit.ID) != null) { param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit); hasExtDamage = true; } } } else if(param.AtkProp.DamagePerID == 3) { param.Hitter.mUnit.AddBuff(Buff_ID_2, param.Attacker.mUnit); //检测另外一个寒霜区域标记是否有 if (param.Hitter.mUnit.GetBuffByIDAndSender(Buff_ID_1, param.Attacker.mUnit.ID) != null) { param.Hitter.mUnit.AddBuff(Buff_ID, param.Attacker.mUnit); hasExtDamage = true; } } //额外伤害 if (hasExtDamage && !param.GameSkill.mHitUnits.ContainsKey(param.Hitter.mUnit.ID)) { param.GameSkill.mHitUnits.Put(param.Hitter.mUnit.ID, 1); int finalAttack = param.Attacker.MirrorProp.GetFinalAttack(param.Hitter.mUnit.IsMonster); int baseDamage = CUtils.CastInt(finalAttack * XmdsUnitProp.PER * mValueSet3.GetValue(param.GameSkill.TalentSkillLevel2)); int extDamage = XmdsDamageCalculator.GetDamage(baseDamage, param.Attacker, param.Hitter, param.Source); param.Hitter.AddHP(-extDamage, param.Attacker.mUnit); } } protected override void OnInitConfig() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet); InitData(data, out mValueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2); InitData(data, out mValueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3); // 扩展配置 InitData(data, out mValueSet5, XmdsSkillData.XmdsSkillDataKey.ValueSet5); InitData(data, out mValueSet6, XmdsSkillData.XmdsSkillDataKey.ValueSet6); InitData(data, out mValueSet7, XmdsSkillData.XmdsSkillDataKey.ValueSet7); } } }