Boss_90113.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using CommonAI.Zone.Helper;
  2. using CommonAI.Zone.Instance;
  3. using XmdsCommonServer.Plugin;
  4. using XmdsCommonServer.XLS.Data;
  5. using XmdsCommonSkill.Plugin.Buffs;
  6. using System;
  7. using static CommonAI.Zone.Instance.InstanceUnit;
  8. using XmdsCommon.Plugin;
  9. using CommonAI.Zone;
  10. using XmdsCommonServer.Plugin.Units;
  11. using CommonAI.Zone.Formula;
  12. using XmdsCommonSkill.Plugin.Skills;
  13. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  14. using CommonAI.Data;
  15. using CommonLang;
  16. namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
  17. {
  18. /// <summary>
  19. /// boss - 1 - 五雷轰顶
  20. /// (BOSS血量下降到10%的时候,BOSS每5秒召唤10道AOE雷电攻击。同时开始进行倒计时,倒计时30秒后如果BOSS未被击杀,则全屏玩家血量清空,隐藏BOSS通关失败)
  21. /// </summary>
  22. class Boss_90113 : XmdsPassiveSkillBase
  23. {
  24. public static readonly int ID = 90113;
  25. //private static readonly int Buff_ID = (int)XmdsBuffBase.XmdsBuffList.BOSS_HUDUN_DEFENCE;
  26. private int mUUID_1 = 0;
  27. private static XmdsSkillValue valueSet0; // 伤害系数
  28. private static XmdsSkillValue valueSet1; // 血量阀值
  29. private static XmdsSkillValue valueSet2; // 结束倒计时,倒计时结束,回满血
  30. // 拆解数据
  31. private long mTriggerHP = 0;
  32. private bool mBossReliveFlag = false;
  33. //内部数据
  34. private int mTimePass = 0;
  35. private XmdsVirtual mOwner = null;
  36. public override int SkillID {get{return ID;}}
  37. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  38. {
  39. mUUID_1 = owner.RegistOnHitDamage(OnHandleHitDmage, skillInfo, true);
  40. this.mOwner = owner;
  41. this.mTriggerHP = owner.mUnit.MaxHP / 10000 * valueSet1.GetValue();
  42. this.mBossReliveFlag = false;
  43. }
  44. private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  45. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  46. {
  47. // 触发五雷轰顶技能效果
  48. if(this.mTriggerHP + damage >= hitted.mUnit.MaxHP)
  49. {
  50. // 激活雷电技能
  51. hitted.mUnit.SetSkillActive(90317, true);
  52. this.mBossReliveFlag = true;
  53. this.mTimePass = 0;
  54. }
  55. return damage;
  56. }
  57. protected override void OnUpdate(int intervalMS, bool slowRefresh)
  58. {
  59. try
  60. {
  61. if(this.mBossReliveFlag)
  62. {
  63. this.mTimePass += intervalMS;
  64. if (this.mTimePass >= valueSet2.GetValue())
  65. {
  66. // 回满血,编辑器逻辑控制副本结束
  67. this.mOwner.AddHP(this.mOwner.mUnit.MaxHP);
  68. }
  69. }
  70. base.OnUpdate(intervalMS, slowRefresh);
  71. }
  72. catch (Exception err)
  73. {
  74. log.Warn("Boss_90113 catch : " + err);
  75. }
  76. }
  77. protected override void OnInitSkillParam()
  78. {
  79. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  80. InitData(data, out valueSet0, XmdsSkillData.XmdsSkillDataKey.DmgRate);
  81. InitData(data, out valueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  82. InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  83. }
  84. protected override void OnDispose(XmdsVirtual owner)
  85. {
  86. owner.UnRegistOnHitDamage(mUUID_1);
  87. }
  88. }
  89. }