using CommonAI.Data; using CommonAI.Zone; using CommonAI.Zone.Helper; using CommonAI.Zone.Instance; using System.Collections.Generic; using XmdsCommon.Plugin; using XmdsCommonServer.Plugin; using XmdsCommonServer.XLS.Data; using XmdsCommonSkill.Plugin.Buffs; using XmdsCommonSkill.Plugin.Interface; using static CommonAI.Zone.Instance.InstanceUnit; namespace XmdsCommonSkill.Plugin.Skills.Magic { /// /// 法师二技能: 2 基类 /// 从背后拔出长剑,向前方发出一道光剑,对命中的敌人造成伤害后销毁 /// public class Magic_310200 : XmdsSkillBase { private static int ID = 310200; public override int SkillID { get { return ID; } } private static int[] SwordShadowSpellID = new int[] { 310980, 310981, 310982, 310983 }; // 固定值_百分比 protected XmdsSkillValue mValueSet1; //基础飞剑数N1,剑气层转飞剑系数N2,飞剑伤害N3 protected XmdsSkillValue mValueSet8; //内部 //是否第一次释放触发剑影 private bool mTriggerSword = false; protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template) { unit.RegistTrySendSpellEvent(OnTrySendSpell, info, info.SkillID + 1); } protected override int OnUnitLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.SkillState state) { mTriggerSword = true; return 0; } protected override void OnSkillDamagePerEvent(BattleParams param) { if(param.AtkProp.DamagePerID == 1) { param.SkillDamageAdd = mValueSet1.GetValue(param.GameSkill.SkillLevel); param.SkillDamagePer = mValueSet1.GetValueExt(param.GameSkill.SkillLevel); } else if(param.AtkProp.DamagePerID == 2) { //飞弹伤害 param.SkillDamagePer = mValueSet8.GetValue(param.GameSkill.SkillLevel, 3); } if(mTriggerSword) { mTriggerSword = false; //触发额外释放剑影 this.OnTriggerFirstHitUnit(param); } } protected virtual int OnTriggerFirstHitUnit(BattleParams param) { //如果有剑影,带出特殊剑影效果 BuffState buff = param.Attacker.mUnit.GetBuffByID(XmdsBuff_SwordShadow.BuffID); if (buff == null) { return 0; } PlayerCache_Magic cache = param.Attacker.GetPlayerCache() as PlayerCache_Magic; int tempExt = buff.BuffExtData; // 法师专属逻辑-释放剑影,增加剑气值 param.Attacker.Talent__Add((1 + buff.OverlayLevel) * (cache == null ? 0 : cache.GetSwordTalentValue())); param.Attacker.mUnit.removeBuff(XmdsBuff_SwordShadow.BuffID); //int tempExt = 43214; List spellList = new List(); while (tempExt > 0) { int index = tempExt % 10; if(index < 0 || index > SwordShadowSpellID.Length) { log.Error("Magic_310200 OnTriggerFirstHitUnit剑影转飞剑异常:" + param.Attacker.mUnit.PlayerUUID + ", " + tempExt); } else { LaunchSpell spell = ComSpellTemplate.Instance().GetSpellBySpellID(SwordShadowSpellID[index-1]); if(spell == null) { log.Error("Magic_310200 OnTriggerFirstHitUnit找不到法术:" + param.Attacker.mUnit.PlayerUUID + ", " + SwordShadowSpellID[index]); continue; } spellList.Add(spell); tempExt = tempExt / 10; } } if(spellList.Count > 0) { LaunchSpell launchSpell = spellList[spellList.Count - 1]; SpellTemplate spt = param.Attacker.mUnit.Parent.Templates.getSpell(launchSpell.SpellID); JSGCreateSpellData createData = new JSGCreateSpellData(); createData.mMaxSpellCount = spellList.Count; InstanceSpell spell = param.Attacker.mUnit.Parent.launch_ManyCannon(param.Source.FromSkillType, spt, param.Attacker.mUnit, launchSpell, null, param.Attacker.mUnit, param.Hitter.mUnit.ID, 0, createData); spell.mCurveSpellList = spellList; ///param.Attacker.mUnit.Parent.unitLaunchSpell(param.Source.FromSkillType, param.Attacker.mUnit, spellList[spellList.Count-1], param.Attacker.mUnit.X, param.Attacker.mUnit.Y, // param.Hitter.mUnit.ID, null, -1, 0, 0); } return spellList.Count; } private void OnTrySendSpell(GameSkill skill, XmdsVirtual launcher, LaunchSpell launch, ref SpellTemplate spell, ref JSGCreateSpellData createData, ref float startX, ref float startY) { if(launcher.GetPlayerCache() == null) { return; } createData.mMaxSpellCount = mValueSet8.GetValue(skill.SkillLevel, 1) + launcher.GetPlayerCache().GetTalentLv() * mValueSet8.GetValue(skill.SkillLevel, 2); } protected override void OnInitConfig() { XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID); InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet); //扩展 InitData(data, out mValueSet8, XmdsSkillData.XmdsSkillDataKey.ValueSet8); } } }