GoRunFunction.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. using Mir2Assistant.Common.Models;
  2. using Mir2Assistant.Utils;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Security.Cryptography;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. namespace Mir2Assistant.Common.Functions;
  10. /// <summary>
  11. /// 走路、跑路、寻路
  12. /// </summary>
  13. public static class GoRunFunction
  14. {
  15. /// <summary>
  16. /// 走路跑路
  17. /// </summary>
  18. /// <param name="pid"></param>
  19. /// <param name="type">1走路,2跑路,3骑黑马跑</param>
  20. /// <param name="x">当前x</param>
  21. /// <param name="x">当前y</param>
  22. /// <param name="direct">方向,小键盘数字</param>
  23. /// <param name="走路参数">搜索 8B00 8B4C24 20获取</param>
  24. /// <param name="走路CALL地址"></param>
  25. public static void GoRun(MirGameInstanceModel gameInstance, int x, int y, byte direct, byte type)
  26. {
  27. int dir = 0;
  28. switch (direct)
  29. {
  30. case 1:
  31. dir = 5;
  32. x -= type;
  33. y += type;
  34. break;
  35. case 2:
  36. dir = 4;
  37. y += type;
  38. break;
  39. case 3:
  40. dir = 3;
  41. x += type;
  42. y += type;
  43. break;
  44. case 4:
  45. dir = 6;
  46. x -= type;
  47. break;
  48. case 6:
  49. dir = 2;
  50. x += type;
  51. break;
  52. case 7:
  53. dir = 7;
  54. x -= type;
  55. y -= type;
  56. break;
  57. case 8:
  58. dir = 0;
  59. y -= type;
  60. break;
  61. case 9:
  62. dir = 1;
  63. x += type;
  64. y -= type;
  65. break;
  66. }
  67. int typePara = 0;
  68. switch (type)
  69. {
  70. case 2:
  71. typePara = 0xbc5;
  72. break;
  73. case 3:
  74. typePara = 0x19100c;
  75. break;
  76. default:
  77. typePara = 0xbc3;
  78. break;
  79. }
  80. SendMirCall.Send(gameInstance, 1001, new nint[] { x, y, dir, typePara, gameInstance!.MirConfig["角色基址"], gameInstance!.MirConfig["走路CALL地址"] });
  81. //AsmUtils.Init(gameInstance.MirPid)
  82. // .Push68(y)
  83. // .Push6A(dir)
  84. // .Push6A(0)
  85. // .Push6A(0)
  86. // .Push6A(0)
  87. // .Push6A(0)
  88. // .Push6A(0)
  89. // .Mov_EAX((int)gameInstance!.MirConfig["角色基址"])
  90. // .Mov_EAX_DWORD_Ptr_EAX()
  91. // .Mov_EAX_DWORD_Ptr_EAX()
  92. // .Mov_ECX(x)
  93. // .Mov_EDX(typePara)
  94. // .Mov_EBX((int)gameInstance!.MirConfig["走路CALL地址"])
  95. // .Call_EBX()
  96. // .Run();
  97. }
  98. /// <summary>
  99. /// 寻路
  100. /// </summary>
  101. /// <param name="x">要去的坐标x</param>
  102. /// <param name="y">要去的坐标y</param>
  103. /// <param name="寻路参数"></param>
  104. /// <param name="寻路CALL地址"></param>
  105. public static void FindPath(MirGameInstanceModel gameInstance, int x, int y)
  106. {
  107. SendMirCall.Send(gameInstance, 1002, new nint[] { x, y, gameInstance!.MirConfig["寻路参数"], gameInstance!.MirConfig["寻路CALL地址"] });
  108. }
  109. public static async Task<bool> WaitFindPath(MirGameInstanceModel gameInstance, string map, int x, int y)
  110. {
  111. var success = true;
  112. await Task.Run(() =>
  113. {
  114. while (Math.Abs(x - gameInstance.CharacterStatus!.X.GetValueOrDefault()) > 2 && Math.Abs(y - gameInstance.CharacterStatus!.Y.GetValueOrDefault()) > 2)
  115. {
  116. if (map != gameInstance.CharacterStatus!.MapName)
  117. {
  118. success = false;
  119. return;
  120. }
  121. FindPath(gameInstance, x, y);
  122. Task.Delay(5000).Wait();
  123. }
  124. });
  125. return success;
  126. }
  127. public static async Task<bool> FlyCY(MirGameInstanceModel gameInstance)
  128. {
  129. SendMirCall.Send(gameInstance, 1010, new nint[] { gameInstance!.MirConfig["通用参数"], gameInstance!.MirConfig["对话CALL地址"] });
  130. return await NpcFunction.WaitNPC(gameInstance, "天虹法师");
  131. }
  132. /// <summary>
  133. /// 等转到地图
  134. /// </summary>
  135. /// <param name="gameInstance"></param>
  136. /// <param name="text"></param>
  137. /// <returns></returns>
  138. public static async Task<bool> WaitMap(MirGameInstanceModel gameInstance, string mapName, int timeout = 50)
  139. {
  140. return await TaskWrapper.Wait(() => gameInstance.CharacterStatus!.MapName == mapName, timeout);
  141. }
  142. /// <summary>
  143. /// 回土城
  144. /// </summary>
  145. /// <param name="gameInstance"></param>
  146. /// <returns></returns>
  147. public static async Task<bool> BackTu(MirGameInstanceModel gameInstance)
  148. {
  149. await GoRunFunction.FlyCY(gameInstance!);
  150. await NpcFunction.ClickNPC(gameInstance!, "天虹法师");
  151. await NpcFunction.Talk2Text(gameInstance!, "哦!好的!让我试试!");
  152. await NpcFunction.Talk2Text(gameInstance!, "去魔龙城");
  153. await NpcFunction.ClickNPC(gameInstance!, "魔龙城老兵");
  154. await NpcFunction.Talk2Text(gameInstance!, "去魔龙城");
  155. await NpcFunction.Talk2Text(gameInstance!, "想去盟重");
  156. return await NpcFunction.WaitNPC(gameInstance!, "盟重老兵");
  157. }
  158. /// <summary>
  159. /// 去玄武
  160. /// </summary>
  161. /// <param name="gameInstance"></param>
  162. /// <returns></returns>
  163. public static async Task<bool> GoXuanWu(MirGameInstanceModel gameInstance)
  164. {
  165. if ((gameInstance.CharacterStatus?.GradeZS ?? 0) >= 50)
  166. {
  167. await GoRunFunction.FlyCY(gameInstance!);
  168. await NpcFunction.ClickNPC(gameInstance!, "天虹法师");
  169. await NpcFunction.Talk2Text(gameInstance, "听说您有事找我?");
  170. await NpcFunction.Talk2Text(gameInstance, "请您带我去见狐人族长老");
  171. await NpcFunction.WaitNPC(gameInstance!, "狐人族长老");
  172. await NpcFunction.ClickNPC(gameInstance!, "狐人族长老");
  173. await NpcFunction.Talk2Text(gameInstance, "返回玄武岛");
  174. return await NpcFunction.WaitNPC(gameInstance!, "玄武老兵");
  175. }
  176. else
  177. {
  178. if (gameInstance!.CharacterStatus!.MapName != "玄武岛")
  179. {
  180. await GoRunFunction.FlyCY(gameInstance!);
  181. await NpcFunction.ClickNPC(gameInstance!, "天虹法师");
  182. await NpcFunction.Talk2Text(gameInstance, "我要去玄武岛");
  183. }
  184. await WaitFindPath(gameInstance, "玄武岛", 210, 249);
  185. }
  186. return true;
  187. }
  188. }