Priest_500010.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using XmdsCommonServer.Plugin;
  2. using CommonAI.Zone;
  3. using CommonAI.Zone.Instance;
  4. using XmdsCommon.Plugin;
  5. using XmdsCommonServer.XLS.Data;
  6. namespace XmdsCommonSkill.Plugin.Skills.Priest
  7. {
  8. /// <summary>
  9. /// 狐火攻击:抛出狐火攻击目标,狐火命中后继续弹跳攻击目标身边小范围的敌人,造成<x>倍魔攻伤害(作为魔法伤害)
  10. /// </summary>
  11. public class Priest_500010 : XmdsSkillBase
  12. {
  13. public static int ID = 500010;
  14. /// 伤害倍数.
  15. public static XmdsSkillValue DP_1;
  16. /// 传递个数.
  17. public static XmdsSkillValue Count;
  18. /// 伤害加成.
  19. public static XmdsSkillValue addValue;
  20. public override int SkillID { get { return ID; } }
  21. protected override void OnSkillDamagePerEvent(BattleParams param)
  22. {
  23. int ret = CalDamagePer(DP_1, param.GameSkill.SkillLevel);
  24. param.SkillDamagePer = ret;
  25. }
  26. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  27. {
  28. unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info);
  29. }
  30. private bool OnTryLaunchSkillEventHandle(GameSkill info, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param)
  31. {
  32. if (skill.ID == SkillID)
  33. {
  34. //注意该技能和编辑器配置高度耦合,数据变更很容易出错!!!.
  35. UnitActionData uad = skill.Data.ActionQueue[0];
  36. if (uad != null)
  37. {
  38. UnitActionData.KeyFrame kf = uad.KeyFrames[1];
  39. if (kf != null)
  40. {
  41. LaunchSpell ls = kf.Spell;
  42. //需要减1,因为第一次也是伤害,最多对X个敌人,传递次数需要减去第一次.
  43. ls.ChainLevel = this.GetTargetFormulaValue(launcher.SkillHelper.GetGameSkill(SkillID).SkillLevel, Count) - 1;
  44. }
  45. }
  46. }
  47. return true;
  48. }
  49. protected override void OnRegistEvent()
  50. {
  51. // 命中率.
  52. base.OnRegistEvent();
  53. this.RegistEvent(EventType.SkillDamageAdd, OnSkillDamageAddEvent);
  54. }
  55. protected virtual void OnSkillDamageAddEvent(BattleParams param)
  56. {
  57. InstanceSpell spell = param.Source.FromSpellUnit;
  58. if (spell != null)
  59. {
  60. //总传递次数.
  61. int ChainLevel = this.GetTargetFormulaValue(param.Attacker.SkillHelper.GetGameSkill(SkillID).SkillLevel, Count);
  62. //当前传递次数.
  63. int curChainLevel = spell.ChainLevel;
  64. //传递第几次.
  65. int dif = ChainLevel - curChainLevel;
  66. //伤害减少.
  67. int damageReduce = this.GetTargetFormulaValue(param.GameSkill.SkillLevel, addValue);
  68. //param.SkillDamageAdd = -(dif * damageReduce);
  69. }
  70. }
  71. protected override void OnInitSkillParam()
  72. {
  73. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  74. InitData(data, out DP_1, XmdsSkillData.XmdsSkillDataKey.DmgRate);
  75. InitData(data, out Count, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  76. InitData(data, out addValue, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  77. }
  78. }
  79. }