🏠 返回首頁 

Greasy Fork is available in English.

HWM_AutoReportMGTasks

Автосдача заданий ГН

  1. // ==UserScript==
  2. // @name HWM_AutoReportMGTasks
  3. // @namespace Небылица
  4. // @version 1.34
  5. // @description Автосдача заданий ГН
  6. // @author Небылица
  7. // @include /^https{0,1}:\/\/((www|qrator)\.heroeswm\.ru|178\.248\.235\.15)\/(map|mercenary_guild|home)\.php/
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // ==/UserScript==
  11. (function() {
  12. "use strict";
  13. // Вспомогательные функции
  14. function sendGETRequest(url, mimeType, callback){ // Универсалка для отправки GET-запроса к url с выставлением заданного MIME Type и исполнением функции callback при получении ответа
  15. var xhr = new XMLHttpRequest();
  16. xhr.open("GET", url, true);
  17. if (typeof mimeType === "string"){
  18. xhr.overrideMimeType(mimeType);
  19. }
  20. if (typeof callback === "function"){
  21. xhr.onreadystatechange = function(){
  22. if (xhr.readyState === 4 && xhr.status === 200){
  23. callback.apply(xhr);
  24. }
  25. };
  26. }
  27. xhr.send();
  28. }
  29. function reportTask(){ // Сдача задания с проверкой успешности и переходом на страницу гильдии для показа награды
  30. // отправляем запрос к странице ГН
  31. sendGETRequest("mercenary_guild.php", "text/html; charset=windows-1251", function(){
  32. // получаем ответ и проверяем, было ли задание сдано
  33. var response = this.responseText;
  34. if (response.indexOf("мин.") !== -1){
  35. // запоминаем текст награды и переходим в ГН
  36. var rewardArr = response.match(/<Br><br>([\S\s]+?)<table\sborder=0\scellspacing=0\scellpadding=0>/);
  37. if (rewardArr !== null){
  38. GM_setValue("reward", rewardArr[1]);
  39. }
  40. window.open("mercenary_guild.php", "_self");
  41. }
  42. });
  43. }
  44. //
  45. switch (location.pathname){
  46. // Код для страницы карты
  47. case "/map.php":
  48. // проверяем наличие активного задания ГН и нахождение в секторе гильдии
  49. if (GM_getValue("taskActive") && document.querySelector("img[src*='merc.gif'][title='Гильдия Наемников']") !== null){
  50. // запускаем функцию сдачи задания
  51. reportTask();
  52. }
  53. break;
  54. // Код для страницы ГН
  55. case "/mercenary_guild.php":
  56. var documentInnerHTHL = document.documentElement.innerHTML;
  57. // если имеется сохранённый текст награды за только что сданное задание и ещё идёт отсчёт времени до нового, то вставляем текст в страницу
  58. if (GM_getValue("reward") !== "-1"){
  59. if (documentInnerHTHL.indexOf("мин.") !== -1){
  60. var tdRowspan2 = document.querySelector("td[rowspan='2']");
  61. tdRowspan2.innerHTML = tdRowspan2.innerHTML.split("</b><br><br><table")[0] + "</b><br><br>" + GM_getValue("reward") + "<table" + tdRowspan2.innerHTML.split("</b><br><br><table")[1];
  62. }
  63. // убираем прежнее значение
  64. GM_setValue("reward", "-1");
  65. }
  66. // проверяем, нет ли принятого задания, и запоминаем ответ
  67. if (documentInnerHTHL.indexOf("минут") !== -1 && documentInnerHTHL.indexOf("Принять") === -1 && documentInnerHTHL.indexOf("Вы еще не приняли это задание") === -1){
  68. GM_setValue("taskActive", true);
  69. // запоминаем, не разбойники ли это
  70. GM_setValue("ifBrigands", documentInnerHTHL.indexOf("разбойники {") !== -1);
  71. // проверяем сектор задания, и запоминаем, совпадает ли он с секторами отделений ГН
  72. var taskLocaleId = document.querySelector("img[title='Отправиться в путь']").parentNode.getAttribute("href").replace("move_sector.php?id=", "");
  73. GM_setValue("ifSameLocale", taskLocaleId === "2" || taskLocaleId === "6" || taskLocaleId === "16" || taskLocaleId === "21");
  74. } else{ // если принятого нет, убираем флаги активного задания, района и разбойников
  75. GM_setValue("taskActive", false);
  76. GM_setValue("ifSameLocale", false);
  77. GM_setValue("ifBrigands", false);
  78. }
  79. break;
  80. // Код для домашней страницы
  81. case "/home.php":
  82. // проверяем наличие активного задания
  83. if (GM_getValue("taskActive")){
  84. // проверяем, не разбойники ли это
  85. if (GM_getValue("ifBrigands")){
  86. // запрашиваем страницу карты
  87. sendGETRequest("map.php", "text/html; charset=windows-1251", function(){
  88. // проверяем, имеется ли плашка для сдачи груза
  89. if (this.responseText.indexOf("<center><a href=\"/map.php?action=accept_merc_task3\">Отдать груз.</a></center>") !== -1){
  90. // сдаём груз
  91. window.open("map.php?action=accept_merc_task3", "_self");
  92. }
  93. });
  94. } else if (GM_getValue("ifSameLocale")){ // проверяем, не было ли задание дано в сектор с отделением ГН
  95. // запускаем функцию сдачи задания
  96. reportTask();
  97. }
  98. }
  99. break;
  100. }
  101. })();