using CommonAI.Zone; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.Interface; using static XmdsCommonSkill.Plugin.Interface.ComSpellTemplate; namespace XmdsCommonSkill.Plugin.Skills.Remedy { /// <summary> /// 治疗【1】技能 1 - 3(扇子在打到第一个敌人后会分生成5个扇子,扇形向前,飞出剩余相同距离,(每个扇子伤害独立,最多叠加3个扇子的伤害,恢复唯一,不重复累加)) /// </summary> public class Remedy_510130 : Remedy_510120 { private static readonly int ID = 510130; public override int SkillID { get { return ID; } } //伤害系数 protected XmdsSkillValue valueSet4; //扩展配置 protected XmdsSkillValue valueSet7; //最多被扇子击中N次 //触发分裂伞的单位,不应该被分裂山击中 private uint mIngoreUnit; protected override void OnSkillDamagePerEvent(BattleParams param) { if(param.AtkProp.DamagePerID == 0) { base.OnSkillDamagePerEvent(param); } else { //if(this.mIngoreUnit == param.Hitter.mUnit.ID) //{ // param.SkillDamagePer = 0; // param.UseDamageType = CommonAI.Data.DamageType.None; //} //else { int count = param.GameSkill.mHitUnits.Get(param.Hitter.mUnit.ID); if (count > valueSet7.GetValue(param.GameSkill.TalentSkillLevel3)) { param.SkillDamagePer = 0; param.UseDamageType = CommonAI.Data.DamageType.None; } else { param.SkillDamagePer = valueSet4.GetValue(param.GameSkill.TalentSkillLevel3); } param.GameSkill.mHitUnits.Put(param.Hitter.mUnit.ID, count + 1); } } } protected override int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState state) { base.OnLaunchSkillOver(info, launcher, state); this.mIngoreUnit = 0; return 0; } protected override void OnSkillLogicEvent(BattleParams param) { base.OnSkillLogicEvent(param); //第一次打击到敌人,创建法术, 而且是强依赖编辑器 if (this.mIngoreUnit == 0 && !param.Attacker.IsAllies(param.Hitter, false)) { this.mIngoreUnit = param.Hitter.mUnit.ID; float pointDirection = 0; if (param.Source.FromSpellUnit != null) { param.Source.FromSpellUnit.Parent.RemoveObject(param.Source.FromSpellUnit); pointDirection = param.Source.FromSpellUnit.Direction; } param.Attacker.mUnit.Parent.unitLaunchSpell(param.GameSkill.SkillType, param.Attacker.mUnit, ComSpellTemplate.Instance().GetSpellByID(XmdsSpellID.SPLIT_FAN), param.Hitter.mUnit.X, param.Hitter.mUnit.Y, param.Hitter.mUnit.ID, null, -1, 0, pointDirection); } } protected override void OnInitConfig() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); base.InitBaseConfig(data); InitData(data, out valueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet); InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2); InitData(data, out valueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3); InitData(data, out valueSet4, XmdsSkillData.XmdsSkillDataKey.ValueSet4); //扩展配置 InitData(data, out valueSet5, XmdsSkillData.XmdsSkillDataKey.ValueSet5); InitData(data, out valueSet6, XmdsSkillData.XmdsSkillDataKey.ValueSet6); InitData(data, out valueSet7, XmdsSkillData.XmdsSkillDataKey.ValueSet7); } } }