ModuleDungeon.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using CommonAI.ZoneClient;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using pomelo.connector;
  8. using ZeusBattleClientBot.Bot;
  9. using pomelo.area;
  10. using CommonLang;
  11. using ZeusCommon.ZoneClient;
  12. using CommonAI.Zone;
  13. using CommonLang.Reflection;
  14. namespace ZeusBotTest.Runner
  15. {
  16. public class ModuleDungeon : BotRunner.RunnerModule
  17. {
  18. private FubenListResponse LastFubenList;
  19. private FubenInfo LastSelectFuben;
  20. private EnterDungeonRequest LastEnterFuben;
  21. public ModuleDungeon(BotRunner r) : base(r) { }
  22. protected internal override void OnGateBindPlayer(BindPlayerResponse e)
  23. {
  24. base.OnGateBindPlayer(e);
  25. select_random_fuben();
  26. }
  27. protected override void OnEnableChanged(bool enable)
  28. {
  29. base.OnEnableChanged(enable);
  30. if (Enable)
  31. {
  32. try_enter_selected_fuben();
  33. }
  34. }
  35. protected internal override void OnBattleActorReady(CommonAI.ZoneClient.ZoneLayer layer, CommonAI.ZoneClient.ZoneActor actor)
  36. {
  37. layer.AddTimeDelayMS(Config.CheckIntervalMS, (t) =>
  38. {
  39. if (Enable)
  40. {
  41. try_enter_selected_fuben();
  42. get_fuben_list();
  43. }
  44. });
  45. layer.AddTimePeriodicMS(Config.CheckIntervalMS, (t) =>
  46. {
  47. if (Enable)
  48. {
  49. on_do_1s(layer as HZZoneLayer);
  50. }
  51. });
  52. layer.MessageReceived += Layer_MessageReceived;
  53. }
  54. private void Layer_MessageReceived(ZoneLayer layer, CommonLang.Protocol.IMessage msg)
  55. {
  56. if (msg is GameOverEvent)
  57. {
  58. on_game_over();
  59. }
  60. }
  61. private void select_random_fuben()
  62. {
  63. client.GameSocket.fightLevelHandler.fubenListRequest(
  64. (int)Config.DType,
  65. (int)Config.DLevel,
  66. (err, rsp) =>
  67. {
  68. LastFubenList = rsp;
  69. LastSelectFuben = CUtils.GetRandomInArray<FubenInfo>(rsp.s2c_list, bot.Random);
  70. // LastSelectFuben = rsp.s2c_list[0];
  71. runner.log_response("fubenListRequest done", err, rsp);
  72. });
  73. }
  74. private void get_fuben_list()
  75. {
  76. client.GameSocket.fightLevelHandler.fubenListRequest(
  77. (int)Config.DType,
  78. (int)Config.DLevel,
  79. (err, rsp) =>
  80. {});
  81. }
  82. private void try_enter_selected_fuben()
  83. {
  84. if (LastSelectFuben != null)
  85. {
  86. //当前场景不是要进的副本//
  87. if (LastEnterFuben == null || LastSelectFuben.fubenId != LastEnterFuben.c2s_dungeonId)
  88. {
  89. client.GameSocket.fightLevelHandler.enterDungeonRequest(LastSelectFuben.fubenId, (err, rsp) =>
  90. {
  91. runner.log_response("enterDungeonRequest done", err, rsp);
  92. if (rsp != null)
  93. {
  94. LastEnterFuben = new EnterDungeonRequest();
  95. LastEnterFuben.c2s_dungeonId = LastSelectFuben.fubenId;
  96. }
  97. else
  98. {
  99. LastEnterFuben = null;
  100. }
  101. });
  102. }
  103. else
  104. {
  105. LastEnterFuben = null;
  106. }
  107. }
  108. }
  109. private void on_game_over()
  110. {
  111. LastSelectFuben = null;
  112. LastEnterFuben = null;
  113. select_random_fuben();
  114. client.GameSocket.fightLevelHandler.leaveDungeonRequest((err, rsp) =>
  115. {
  116. runner.log_response("leaveDungeonRequest done", err, rsp);
  117. });
  118. }
  119. private void on_do_1s(HZZoneLayer layer)
  120. {
  121. layer.Actor.SendUnitGuard(true);
  122. if (runner.CurrentMoveAgent == null || runner.CurrentMoveAgent.IsEnd)
  123. {
  124. runner.do_bs_actor_random_move_region(true, 0.01f);
  125. }
  126. //if(bot.CurrentSceneType == ZeusCommon.EditorData.ZeusConstConfig.SceneType.Dungeon)
  127. //{
  128. // on_game_over();
  129. //}
  130. }
  131. [Desc("副本配置")]
  132. [Expandable]
  133. public class Config
  134. {
  135. [Desc("副本检测间隔")]
  136. public static int CheckIntervalMS = 5000;
  137. [Desc("副本难度")]
  138. public static BotClient.DungeonType DType = BotClient.DungeonType.单人副本;
  139. [Desc("副本等级")]
  140. public static BotClient.DungeonLevel DLevel = BotClient.DungeonLevel.普通;
  141. public override string ToString()
  142. {
  143. return "副本配置";
  144. }
  145. }
  146. }
  147. }