Monster_10090202.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. 
  2. using XmdsCommonServer.Plugin;
  3. using CommonLang;
  4. using CommonAI.Zone.Instance;
  5. using CommonAI.Zone;
  6. using XmdsCommon.Plugin;
  7. namespace XmdsCommonSkill.Plugin.Skills.Monster
  8. {
  9. /// <summary>
  10. /// 兽人祭司 - 复活: 复活附近已死亡的怪物,使其恢复100%生命和法力
  11. /// </summary>
  12. public class Monster_10090202 : XmdsSkillBase
  13. {
  14. /// <summary>
  15. /// 技能ID.
  16. /// </summary>
  17. public static int ID = 10090202;
  18. public static int Range = 5;
  19. /// <summary>
  20. /// 获取技能ID.
  21. /// </summary>
  22. public override int SkillID
  23. {
  24. get
  25. {
  26. return ID;
  27. }
  28. }
  29. protected override void OnInit(GameSkill info, XmdsVirtual unit, ref SkillTemplate template)
  30. {
  31. //施放技能监听.
  32. unit.RegistTryLaunchSkillEvent(OnTryLaunchSkillEventHandle, info, false);
  33. }
  34. protected virtual bool OnTryLaunchSkillEventHandle(GameSkill skillInfo, ref InstanceUnit.SkillState skill, XmdsVirtual launcher, ref InstanceUnit.LaunchSkillParam param)
  35. {
  36. //复活附近已死亡的怪物,使其恢复100%生命和法力.
  37. using (var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  38. {
  39. launcher.mUnit.Parent.getObjectsRoundRange<InstanceUnit>(
  40. (obj, dx, dy, dr) =>
  41. {
  42. var u = obj as InstanceUnit;
  43. //己方单位.
  44. if (u.IsDead() && launcher.IsAllies(u.Virtual as XmdsVirtual))
  45. {
  46. return CMath.includeRoundPoint(dx, dy, dr, u.X, u.Y);
  47. }
  48. return false;
  49. },
  50. launcher.mUnit.X,
  51. launcher.mUnit.Y,
  52. Range,
  53. list , launcher.mUnit.AoiStatus);
  54. if (list.Count > 0)
  55. {
  56. param.TargetUnitID = launcher.mUnit.ID;
  57. return true;
  58. }
  59. }
  60. return false;
  61. }
  62. protected override void OnSkillLogicEvent(BattleParams param)
  63. {
  64. //不产生伤害.
  65. param.UseDamageType = CommonAI.Data.DamageType.None;
  66. //复活附近已死亡的怪物,使其恢复100%生命和法力.
  67. using (var list = ListObjectPool<InstanceUnit>.AllocAutoRelease())
  68. {
  69. param.Attacker.mUnit.Parent.getObjectsRoundRange<InstanceUnit>(
  70. (obj, dx, dy, dr) =>
  71. {
  72. var u = obj as InstanceUnit;
  73. //己方单位.
  74. if (u.IsDead() && param.Attacker.IsAllies(u.Virtual as XmdsVirtual))
  75. {
  76. return CMath.includeRoundPoint(dx, dy, dr, u.X, u.Y);
  77. }
  78. return false;
  79. },
  80. param.Hitter.mUnit.X,
  81. param.Hitter.mUnit.Y,
  82. Range,
  83. list,
  84. param.Hitter.mUnit.AoiStatus);
  85. if (list.Count > 0)
  86. {
  87. for (int i = 0; i < list.Count; i++)
  88. {
  89. list[i].startRebirth();
  90. }
  91. }
  92. }
  93. }
  94. }
  95. }