123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 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
- {
- /// <summary>
- /// 法师二技能: 2 基类
- /// 从背后拔出长剑,向前方发出一道光剑,对命中的敌人造成伤害后销毁
- /// </summary>
- 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<LaunchSpell> spellList = new List<LaunchSpell>();
- 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);
- }
- }
- }
|