Magic_310200.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using CommonAI.Data;
  2. using CommonAI.Zone;
  3. using CommonAI.Zone.Helper;
  4. using CommonAI.Zone.Instance;
  5. using System.Collections.Generic;
  6. using XmdsCommon.Plugin;
  7. using XmdsCommonServer.Plugin;
  8. using XmdsCommonServer.XLS.Data;
  9. using XmdsCommonSkill.Plugin.Buffs;
  10. using XmdsCommonSkill.Plugin.Interface;
  11. using static CommonAI.Zone.Instance.InstanceUnit;
  12. namespace XmdsCommonSkill.Plugin.Skills.Magic
  13. {
  14. /// <summary>
  15. /// 法师二技能: 2 基类
  16. /// 从背后拔出长剑,向前方发出一道光剑,对命中的敌人造成伤害后销毁
  17. /// </summary>
  18. public class Magic_310200 : XmdsSkillBase
  19. {
  20. private static int ID = 310200;
  21. public override int SkillID { get { return ID; } }
  22. private static int[] SwordShadowSpellID = new int[] { 310980, 310981, 310982, 310983 };
  23. // 固定值_百分比
  24. protected XmdsSkillValue mValueSet1;
  25. //基础飞剑数N1,剑气层转飞剑系数N2,飞剑伤害N3
  26. protected XmdsSkillValue mValueSet8;
  27. //内部
  28. //是否第一次释放触发剑影
  29. private bool mTriggerSword = false;
  30. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  31. {
  32. unit.RegistTrySendSpellEvent(OnTrySendSpell, info, info.SkillID + 1);
  33. }
  34. protected override int OnUnitLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.SkillState state)
  35. {
  36. mTriggerSword = true;
  37. return 0;
  38. }
  39. protected override void OnSkillDamagePerEvent(BattleParams param)
  40. {
  41. if(param.AtkProp.DamagePerID == 1)
  42. {
  43. param.SkillDamageAdd = mValueSet1.GetValue(param.GameSkill.SkillLevel);
  44. param.SkillDamagePer = mValueSet1.GetValueExt(param.GameSkill.SkillLevel);
  45. }
  46. else if(param.AtkProp.DamagePerID == 2)
  47. {
  48. //飞弹伤害
  49. param.SkillDamagePer = mValueSet8.GetValue(param.GameSkill.SkillLevel, 3);
  50. }
  51. if(mTriggerSword)
  52. {
  53. mTriggerSword = false;
  54. //触发额外释放剑影
  55. this.OnTriggerFirstHitUnit(param);
  56. }
  57. }
  58. protected virtual int OnTriggerFirstHitUnit(BattleParams param)
  59. {
  60. //如果有剑影,带出特殊剑影效果
  61. BuffState buff = param.Attacker.mUnit.GetBuffByID(XmdsBuff_SwordShadow.BuffID);
  62. if (buff == null)
  63. {
  64. return 0;
  65. }
  66. PlayerCache_Magic cache = param.Attacker.GetPlayerCache() as PlayerCache_Magic;
  67. int tempExt = buff.BuffExtData;
  68. // 法师专属逻辑-释放剑影,增加剑气值
  69. param.Attacker.Talent__Add((1 + buff.OverlayLevel) * (cache == null ? 0 : cache.GetSwordTalentValue()));
  70. param.Attacker.mUnit.removeBuff(XmdsBuff_SwordShadow.BuffID);
  71. //int tempExt = 43214;
  72. List<LaunchSpell> spellList = new List<LaunchSpell>();
  73. while (tempExt > 0)
  74. {
  75. int index = tempExt % 10;
  76. if(index < 0 || index > SwordShadowSpellID.Length)
  77. {
  78. log.Error("Magic_310200 OnTriggerFirstHitUnit剑影转飞剑异常:" + param.Attacker.mUnit.PlayerUUID + ", " + tempExt);
  79. }
  80. else
  81. {
  82. LaunchSpell spell = ComSpellTemplate.Instance().GetSpellBySpellID(SwordShadowSpellID[index-1]);
  83. if(spell == null)
  84. {
  85. log.Error("Magic_310200 OnTriggerFirstHitUnit找不到法术:" + param.Attacker.mUnit.PlayerUUID + ", " + SwordShadowSpellID[index]);
  86. continue;
  87. }
  88. spellList.Add(spell);
  89. tempExt = tempExt / 10;
  90. }
  91. }
  92. if(spellList.Count > 0)
  93. {
  94. LaunchSpell launchSpell = spellList[spellList.Count - 1];
  95. SpellTemplate spt = param.Attacker.mUnit.Parent.Templates.getSpell(launchSpell.SpellID);
  96. JSGCreateSpellData createData = new JSGCreateSpellData();
  97. createData.mMaxSpellCount = spellList.Count;
  98. 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);
  99. spell.mCurveSpellList = spellList;
  100. ///param.Attacker.mUnit.Parent.unitLaunchSpell(param.Source.FromSkillType, param.Attacker.mUnit, spellList[spellList.Count-1], param.Attacker.mUnit.X, param.Attacker.mUnit.Y,
  101. // param.Hitter.mUnit.ID, null, -1, 0, 0);
  102. }
  103. return spellList.Count;
  104. }
  105. private void OnTrySendSpell(GameSkill skill, XmdsVirtual launcher, LaunchSpell launch, ref SpellTemplate spell, ref JSGCreateSpellData createData,
  106. ref float startX, ref float startY)
  107. {
  108. if(launcher.GetPlayerCache() == null)
  109. {
  110. return;
  111. }
  112. createData.mMaxSpellCount = mValueSet8.GetValue(skill.SkillLevel, 1) + launcher.GetPlayerCache().GetTalentLv() * mValueSet8.GetValue(skill.SkillLevel, 2);
  113. }
  114. protected override void OnInitConfig()
  115. {
  116. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  117. InitData(data, out mValueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  118. //扩展
  119. InitData(data, out mValueSet8, XmdsSkillData.XmdsSkillDataKey.ValueSet8);
  120. }
  121. }
  122. }