ModuleDungeon.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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 XmdsBattleClientBot.Bot;
  9. using pomelo.area;
  10. using CommonLang;
  11. using XmdsCommon.ZoneClient;
  12. using CommonAI.Zone;
  13. using CommonLang.Property;
  14. namespace XmdsBotTest.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. 0,
  65. (err, rsp) =>
  66. {
  67. LastFubenList = rsp;
  68. LastSelectFuben = CUtils.GetRandomInArray<FubenInfo>(rsp.s2c_list, bot.Random);
  69. // LastSelectFuben = rsp.s2c_list[0];
  70. runner.log_response("fubenListRequest done", err, rsp);
  71. });
  72. }
  73. private void get_fuben_list()
  74. {
  75. client.GameSocket.fightLevelHandler.fubenListRequest(
  76. 0,
  77. (err, rsp) =>
  78. {});
  79. }
  80. private void try_enter_selected_fuben()
  81. {
  82. if (LastSelectFuben != null)
  83. {
  84. //当前场景不是要进的副本//
  85. if (LastEnterFuben == null || LastSelectFuben.mapId != LastEnterFuben.c2s_dungeonId)
  86. {
  87. client.GameSocket.fightLevelHandler.enterDungeonRequest(LastSelectFuben.mapId, (err, rsp) =>
  88. {
  89. runner.log_response("enterDungeonRequest done", err, rsp);
  90. if (rsp != null)
  91. {
  92. LastEnterFuben = new EnterDungeonRequest();
  93. LastEnterFuben.c2s_dungeonId = LastSelectFuben.mapId;
  94. }
  95. else
  96. {
  97. LastEnterFuben = null;
  98. }
  99. });
  100. }
  101. else
  102. {
  103. LastEnterFuben = null;
  104. }
  105. }
  106. }
  107. private void on_game_over()
  108. {
  109. LastSelectFuben = null;
  110. LastEnterFuben = null;
  111. select_random_fuben();
  112. client.GameSocket.fightLevelHandler.leaveDungeonRequest((err, rsp) =>
  113. {
  114. runner.log_response("leaveDungeonRequest done", err, rsp);
  115. });
  116. }
  117. private void on_do_1s(HZZoneLayer layer)
  118. {
  119. layer.Actor.SendUnitGuard(true);
  120. if (runner.CurrentMoveAgent == null || runner.CurrentMoveAgent.IsEnd)
  121. {
  122. runner.do_bs_actor_random_move_region(true, 0.01f);
  123. }
  124. //if(bot.CurrentSceneType == XmdsCommon.EditorData.XmdsConstConfig.SceneType.Dungeon)
  125. //{
  126. // on_game_over();
  127. //}
  128. }
  129. [Desc("副本配置")]
  130. [Expandable]
  131. public class Config
  132. {
  133. [Desc("副本检测间隔")]
  134. public static int CheckIntervalMS = 5000;
  135. [Desc("副本难度")]
  136. public static BotClient.DungeonType DType = BotClient.DungeonType.单人副本;
  137. [Desc("副本等级")]
  138. public static BotClient.DungeonLevel DLevel = BotClient.DungeonLevel.普通;
  139. public override string ToString()
  140. {
  141. return "副本配置";
  142. }
  143. }
  144. }
  145. }