Boss_90109.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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 XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  15. using CommonLang;
  16. namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
  17. {
  18. /// <summary>
  19. /// boss - 2 - 将军令
  20. /// (每隔10秒召唤5个精英小怪,每个精英小怪会给BOSS提供回春BUFF)
  21. /// </summary>
  22. class Boss_90109 : XmdsPassiveSkillBase
  23. {
  24. public static readonly int ID = 90109;
  25. private static XmdsSkillValue valueSet0; // 召唤时间间隔
  26. private static XmdsSkillValue valueSet1; // 召唤物ID
  27. private static XmdsSkillValue valueSet2; // 每次召唤数量, 最大数量
  28. private static XmdsSkillValue valueSet3; // 回血时间间隔
  29. private static XmdsSkillValue valueSet4; // 每层回血效果
  30. private int mPreAddHPTime = 0; // 时间流逝
  31. private int mPreSummonTime = 0; // 上一次召唤的时间
  32. private int mTimePass = 0; // 时间流逝
  33. private XmdsVirtual mOwner = null;
  34. public override int SkillID {get{return ID;}}
  35. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  36. {
  37. this.mOwner = owner;
  38. }
  39. protected override void OnUpdate(int intervalMS, bool slowRefresh)
  40. {
  41. this.mPreSummonTime += intervalMS;
  42. this.mPreAddHPTime += intervalMS;
  43. this.mTimePass += intervalMS;
  44. if (this.mTimePass >= 1000)
  45. {
  46. this.mTimePass = 0;
  47. int curSumCount = -1;
  48. //1. 召唤小怪
  49. if (this.mPreSummonTime >= valueSet0.GetValue())
  50. {
  51. this.mPreSummonTime = 0;
  52. curSumCount = SummonMonster();
  53. }
  54. //2. 回血
  55. if(this.mPreAddHPTime >= valueSet3.GetValue())
  56. {
  57. this.mPreAddHPTime = 0;
  58. if(curSumCount == -1)
  59. {
  60. XmdsVirtual_Monster monster = mOwner as XmdsVirtual_Monster;
  61. curSumCount = monster.GetSummonUnitListCount();
  62. }
  63. //血是满的,不用处理加血
  64. if (curSumCount == -1 || this.mOwner.mUnit.MaxHP == this.mOwner.mUnit.CurrentHP) { return; }
  65. int addHP = CUtils.CastInt(this.mOwner.mUnit.MaxHP * curSumCount * XmdsUnitProp.PER * valueSet4.GetValue());
  66. this.mOwner.mUnit.AddHP(addHP, null);
  67. }
  68. }
  69. base.OnUpdate(intervalMS, slowRefresh);
  70. }
  71. /// 召唤单位
  72. protected int SummonMonster()
  73. {
  74. UnitInfo info = XmdsBattleSkill.GetUnitInfo(valueSet1.GetValue());
  75. XmdsVirtual_Monster monster = this.mOwner as XmdsVirtual_Monster;
  76. int summonCount = monster.GetSummonUnitListCount();
  77. int maxSummon = Math.Min(valueSet2.GetValue(1, 1), valueSet2.GetValue(1, 2) - summonCount);
  78. if(maxSummon > 0)
  79. {
  80. for (int i = 0; i < maxSummon; i++)
  81. {
  82. var pos = monster.mUnit.Parent.PathFinder.FindNearRandomMoveableNode(
  83. monster.mUnit.RandomN, monster.mUnit.X, monster.mUnit.Y, 2, true);
  84. //控制生命周期.
  85. info.LifeTimeMS = 120000;
  86. AddUnitEvent aue = null;
  87. var unit = (monster.mUnit.Parent.AddUnit(info, info.Name, monster.mUnit.Force, monster.GetUnitLv(),
  88. pos.PosX, pos.PosY, monster.mUnit.Direction, out aue, monster.mUnit)) as XmdsInstanceMonster;
  89. unit.guardUnit(monster.mUnit);
  90. monster.AddSummonUnitList(unit.Virtual as XmdsVirtual);
  91. }
  92. return summonCount + maxSummon;
  93. }
  94. return summonCount ;
  95. }
  96. protected override void OnInitSkillParam()
  97. {
  98. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  99. InitData(data, out valueSet0, XmdsSkillData.XmdsSkillDataKey.DmgRate);
  100. InitData(data, out valueSet1, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  101. InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  102. InitData(data, out valueSet3, XmdsSkillData.XmdsSkillDataKey.ValueSet3);
  103. InitData(data, out valueSet4, XmdsSkillData.XmdsSkillDataKey.ValueSet4);
  104. }
  105. protected override void OnDispose(XmdsVirtual owner)
  106. {
  107. }
  108. }
  109. }