Magic_310000.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. using CommonAI.Zone;
  2. using CommonAI.Zone.Helper;
  3. using CommonAI.Zone.Instance;
  4. using System;
  5. using XmdsCommon.Plugin;
  6. using XmdsCommonServer.Plugin;
  7. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  8. using XmdsCommonServer.XLS.Data;
  9. using XmdsCommonSkill.Plugin.Buffs;
  10. using XmdsCommonSkill.Plugin.PassiveSkills.Magic;
  11. using static CommonAI.Zone.Instance.InstanceUnit;
  12. using static XmdsCommonSkill.Plugin.Buffs.XmdsBuff_SwordShadow;
  13. namespace XmdsCommonSkill.Plugin.Skills.Magic
  14. {
  15. /// <summary>
  16. /// 法师普攻
  17. /// </summary>
  18. public class Magic_310000 : XmdsSkillBase
  19. {
  20. public static int ID = 310000;
  21. private static readonly byte MAX_MUTIL_STEP = 3;
  22. public override int SkillID { get { return ID; } }
  23. //编辑器写死
  24. private static readonly byte actionqueueIndex_ZhiBao = 8;
  25. public XmdsSkillValue dmgValue;
  26. public AbstractSkill mPassiveSkill; //剑影基础伤害提高
  27. //至宝被动
  28. public AbstractSkill mSkill_ZhiBao;
  29. //攻击间隔
  30. private int mAttackInterval;
  31. //当前动作形态
  32. private byte mCurActionStep = 0;
  33. //下一次可攻击时间
  34. private long mNextAttackTime = 0;
  35. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  36. {
  37. unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info);
  38. unit.RegistLaunchSkillOver(OnLaunchSkillOver, info);
  39. }
  40. protected override void OnInitOver(XmdsVirtual unit, GameSkill info)
  41. {
  42. //1. 剑影基础伤害加成
  43. this.mPassiveSkill = unit.SkillHelper.GetPlayerSkillByIdExt(Magic_310601.ID);
  44. this.mSkill_ZhiBao = unit.SkillHelper.GetPlayerSkillByIdExt(Other_100200_ZhiBao.ID);
  45. }
  46. //接口之前相互手动调用
  47. public override void DoSkillDispose(int skillID)
  48. {
  49. if(this.mSkill_ZhiBao != null && this.mSkill_ZhiBao.SkillID == skillID)
  50. {
  51. this.mSkill_ZhiBao = null;
  52. }
  53. }
  54. //剑影伤害计算
  55. protected override void OnSkillDamagePerEvent(BattleParams param)
  56. {
  57. //1. 至宝改变技能形态
  58. if (param.AtkProp.DamagePerID == Other_100200_ZhiBao.DAMAGE_INDEX)
  59. {
  60. param.SkillDamageAdd = mSkill_ZhiBao == null ? 0 : mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value1);
  61. param.SkillDamagePer = mSkill_ZhiBao == null ? 0 : mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value4);
  62. return;
  63. }
  64. ///////////////////////2. 自有技能逻辑
  65. param.SkillDamageAdd = dmgValue.GetValue(1);
  66. param.SkillDamagePer = dmgValue.GetValue(2);
  67. //有剑影buff
  68. InstanceUnit unit = param.Attacker.mUnit;
  69. if (param.AtkProp.DamagePerID > 0)
  70. {
  71. //剑影被动效果
  72. param.SkillDamagePer += mPassiveSkill.GetSkillValue(AbstractSkillType.Value4);
  73. //剑气层数效果 - 1层,伤害增加
  74. param.SkillDamagePer += mPassiveSkill.GetSkillValue(AbstractSkillType.Value1);
  75. //剑气层数效果 - 2层,穿透增加
  76. param.Source.ignoreDef = mPassiveSkill.GetSkillValue(AbstractSkillType.Value2);
  77. //剑气层数效果 - 3层,附带减速
  78. if(mPassiveSkill.GetSkillValue(AbstractSkillType.Value3) > 0)
  79. {
  80. param.Hitter.mUnit.AddBuff(Magic_310601.Buff_SPEED_DOWN, param.Attacker.mUnit);
  81. }
  82. }
  83. }
  84. private bool OnTryLaunchSkillEventHandle(GameSkill skillInfo, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param)
  85. {
  86. if (this.mNextAttackTime > CommonLang.CUtils.localTimeMS)
  87. {
  88. return false;
  89. }
  90. if (mSkill_ZhiBao != null && mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value2) > 0)
  91. {
  92. skill.LockActionStep = actionqueueIndex_ZhiBao;
  93. return true;
  94. }
  95. InstanceUnit unit = launcher.mUnit;
  96. BuffState buff = unit.GetBuffByID(XmdsBuff_SwordShadow.BuffID);
  97. if (buff != null)
  98. {
  99. int step = 0;
  100. skill.LockActionStep = XmdsBuff_SwordShadow.GetShadowIndex(launcher, ref buff, ref step) + 2;
  101. }
  102. else
  103. {
  104. skill.LockActionStep = mCurActionStep;
  105. }
  106. return true;
  107. }
  108. private int OnLaunchSkillOver(GameSkill info, XmdsCommonServer.Plugin.XmdsVirtual launcher, CommonAI.Zone.Instance.InstanceUnit.SkillState skill)
  109. {
  110. //攻速影响攻击间隔
  111. float finalInterval = (mAttackInterval/* + skill.Data.ActionQueue[mCurActionStep].TotalTimeMS*/) / (XmdsUnitProp.PER * launcher.MirrorProp.AttackSpeed);
  112. this.mNextAttackTime = (int)finalInterval + CommonLang.CUtils.localTimeMS;
  113. if (mSkill_ZhiBao != null && mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value2) > 0)
  114. {
  115. skill.LockActionStep = actionqueueIndex_ZhiBao;
  116. //技能使用强化效果, 偷懒用这个接口
  117. mSkill_ZhiBao.GetSkillValue(AbstractSkillType.Value3);
  118. return 0;
  119. }
  120. BuffState buff = launcher.mUnit.GetBuffByID(XmdsBuff_SwordShadow.BuffID);
  121. if (buff != null)
  122. {
  123. int step = 0;
  124. skill.LockActionStep = XmdsBuff_SwordShadow.GetShadowIndex(launcher, ref buff, ref step) + 2;
  125. XmdsBuff_SwordShadow.LanucherNormalSkill(launcher, ref buff);
  126. //使用了一层buff
  127. if (buff.OverlayLevel == 255)
  128. {
  129. launcher.mUnit.removeBuff(XmdsBuff_SwordShadow.BuffID);
  130. }
  131. else
  132. {
  133. //刷新buff状态
  134. launcher.mUnit.queueEvent(new SyncUnitBuffState(launcher.mUnit.ID, buff.ID, buff.OverlayLevel, buff.BuffExtData));
  135. }
  136. }
  137. else
  138. {
  139. skill.LockActionStep = mCurActionStep;
  140. if (++mCurActionStep >= MAX_MUTIL_STEP)
  141. {
  142. mCurActionStep = 0;
  143. }
  144. }
  145. return 0;
  146. }
  147. protected override void OnInitConfig()
  148. {
  149. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  150. InitData(data, out dmgValue, XmdsSkillData.XmdsSkillDataKey.DmgRate);
  151. XmdsSkillValue tempValue;
  152. InitData(data, out tempValue, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  153. this.mAttackInterval = tempValue.GetValue();
  154. }
  155. }
  156. }