ModuleDungeon.cs 5.1 KB

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