Advertisement
ZergLurker

Untitled

Jun 6th, 2014
318
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name            * Tribalwars Farm
  3. // @namespace       * Tribalwars Farm
  4. // @description     * Farm script for iMacros with anticaptcha
  5. // @author      Spieler84
  6. // ==/UserScript==
  7.  
  8.  
  9. // Задержки - Delays
  10. var delay_cycle = 1500;         // пауза между циклами фарма, с. delay between cycles, seconds
  11. var delay_cycle_delta = [0, 60];    // доп. пауза между циклами, с. additional delay, seconds
  12. var delay_village = 1;          // пауза между деревнями, с. delay between villages, seconds
  13. var delay_village_delta = [0, 1];   // доп. пауза между деревнями, с. additional delay, seconds
  14. var delay_btn = 300;            // пауза между кликами, мс. delay between FA clicks, milliseconds
  15. var delay_btn_delta = [50, 300];    // доп. пауза между кликами, мс. additional delay, milliseconds
  16.  
  17. // Настройки военного советника - FA setup
  18. var max_btn_count = 100;        // количество деревень на страницу в настройках ВС, number of villages per FA page
  19. var max_FA_depth = 2;           // на сколько страниц можно углубиться (0 - без переходов), number of FA pages to dive in
  20. var light_farm_size = 4;        // размер отряда ЛК. number of Light Cavalry set at button "A"
  21. var Next_btn_txt = "Дальше";      // текст на кнопке ввода капчи. Text of the capcha submit button
  22.  
  23.  
  24. // Настройки сервиса antigate - antigate setup
  25. var api_key = "c331c5a46b31c446f977baa6e14f60b3";   // ваш api-ключ, antigate key
  26. var captcha_min_len = 6;    // минимальный размер капчи, min size of capcha
  27. var captcha_max_len = 6;    // максимальный размер капчи, max size of capcha
  28.  
  29. // Общие настройки - General setup
  30. const base_url = "http://ru29.voyna-plemyon.ru/game.php?"; // для присмотра добавится параметр t, например
  31.                                // "http://ru23.voyna-plemyon.ru/game.php?t=2342321&" (for sitter)
  32. //const base_url = "ru22.voyna-plemyon.ru/game.php?t=589108&";
  33.  
  34. var start_type = 2; // 1 - автоматически фармит со всех деревень. start from any page - farm from all villages
  35.             // 2 - нужно вручную перейти в Обзор-Комбинированный и выбрать группу деревень, start from overview
  36.             // 3 - вручную указываются ссылки на советника, manual FA setup
  37.  
  38. var res = "";
  39. var jsNewLine="\n";
  40. var i=0;
  41. var num_villages = 0;
  42. var href_villages = [];
  43. var dd;
  44. var regAttack = new RegExp("Нападение");
  45.  
  46. const XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1");
  47.  
  48. var xmlHttp=createXmlHttpRequestObject();
  49. function createXmlHttpRequestObject()
  50. {
  51.     var xmlHttp;
  52.    
  53.     try
  54.     {
  55.         xmlHttp=new XMLHttpRequest();
  56.     }
  57.     catch(e)
  58.     {
  59.         var XMLHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
  60.                                       "MSXML2.XMLHTTP.5.0",
  61.                                       "MSXML2.XMLHTTP.4.0",
  62.                                       "MSXML2.XMLHTTP.3.0",
  63.                                       "MSXML2.XMLHTTP",
  64.                                       "Microsoft.XMLHTTP");
  65.                                  
  66.         for (var i=0; i < 6 && !xmlHttp; i++)
  67.         {
  68.             try
  69.             {
  70.                 xmlHttp= new ActiveXObject(XmlHttpVersions[i]);
  71.             }
  72.             catch(e) {}
  73.         }
  74.     }
  75.     if (!xmlHttp)
  76.         alert("error of creating XMLHttpRequest");
  77.     else
  78.         return xmlHttp;
  79. }
  80.  
  81. function postUrl(path, params)
  82. {
  83.   res = "";
  84.   var req = new XMLHttpRequest();
  85.     if (xmlHttp)
  86.     {    
  87.         try
  88.         {
  89.             req.open("POST", path, false); // синхронно и не паримся
  90.             req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  91.             req.send(params);  
  92.             res = req.responseText;
  93.         }
  94.         catch (e)
  95.         {
  96.             alert("Не удалось соединиться с сервером:\n" + e.toString());    
  97.         }  
  98.     }
  99. }
  100.  
  101.  
  102. function getBase64Image(img)
  103. {
  104.     // создаем канвас
  105.     var canvas = window.content.document.createElement("canvas");
  106.     canvas.width = img.width;
  107.     canvas.height = img.height;
  108.  
  109.     // Копируем изображение на канвас
  110.     var ctx = canvas.getContext("2d");
  111.     ctx.drawImage(img, 0, 0);
  112.  
  113.     // Получаем data-URL отформатированную строку
  114.     var dataURL = canvas.toDataURL("image/png");
  115.  
  116.     return encodeURIComponent(dataURL.replace(/^data:image\/(png);base64,/, ""));
  117. }
  118.  
  119. function getBase64ImageById(id)
  120. {
  121.    return getBase64Image(window.content.document.getElementById(id));
  122. }
  123.  
  124. function send_captcha()
  125. {
  126. var base64_value = getBase64ImageById('bot_check_image');
  127.  
  128. do
  129. {
  130. var data = "method=base64&key=" + api_key + "&soft_id=490&body=" + base64_value +
  131.     "&min_len=" + captcha_min_len + "&max_len=" + captcha_max_len;
  132.  
  133. postUrl("http://antigate.com/in.php", data);
  134.  
  135. iimDisplay("Ответ от сервера: " + res);
  136.  
  137. if (res.substring(0, 2) == "OK") { var cap_id = res.substring(3); }
  138.  
  139. doSleep(5); // ждём
  140. } while (res.substring(0, 2) != "OK");
  141.  
  142. do
  143. {
  144.     doSleep(5);
  145.     data = "key=" + api_key + "&action=get&id=" +cap_id,
  146.     postUrl("http://antigate.com/res.php", data);
  147.     iimDisplay("Текст капчи: " + res);
  148. } while ((res == "CAPCHA_NOT_READY")&&(res.substring(0, 5)!="ERROR"))
  149.  
  150. if (res.substring(0, 5)!="ERROR")
  151.     {
  152.     // вводим текст и клацаем кнопку
  153.     var code = "CODE:" + jsNewLine;
  154.     code = code + "TAG POS=1 TYPE=INPUT:TEXT ATTR=NAME:code CONTENT=" + res.substring(3) + jsNewLine;
  155.     code = code + "TAG POS=1 TYPE=INPUT:SUBMIT ATTR=VALUE:" + Next_btn_txt;
  156.     iimPlay(code);
  157.     } else {solve_captcha();};
  158.  
  159. }
  160.  
  161. function getVillageList() // Сбор информации о деревнях
  162. {
  163. iimDisplay("Getting villages list");
  164. if (start_type == 1) { // автосбор деревень
  165. var code = "CODE:" + jsNewLine;
  166. code = code + "URL GOTO=" + base_url + "screen=overview_villages&mode=combined&group=0" + jsNewLine;
  167. code = code + "TAG POS=1 TYPE=TH ATTR=TXT:Деревня* EXTRACT=TXT";
  168. iimPlay(code);
  169. }
  170.  
  171. if (start_type != 3) { // собираем деревни по списку
  172.  
  173. var code = "CODE:" + jsNewLine;
  174. code = code + "TAG POS=1 TYPE=TH ATTR=TXT:Деревня* EXTRACT=TXT";
  175. iimPlay(code);
  176.  
  177. num_villages = iimGetLastExtract(1);
  178. num_villages = num_villages.substring(num_villages.indexOf("(")+1);
  179. num_villages = num_villages.substring(0, num_villages.indexOf(")"));
  180. //alert(num_villages);
  181.  
  182. code = "CODE:" + jsNewLine;
  183. code = code + "TAG POS=2 TYPE=A ATTR=HREF:*screen=overview EXTRACT=HREF" + jsNewLine;
  184. iimPlay(code);
  185.  
  186. href_villages[1] = iimGetLastExtract(1);
  187.  
  188. href_villages[1] = href_villages[1].substr(href_villages[1].indexOf("village=")+8);
  189. href_villages[1] = href_villages[1].substr(0, href_villages[1].indexOf("&"));
  190. href_villages[1] = base_url + 'village=' + href_villages[1] + "&order=distance&dir=asc&screen=am_farm";
  191.  
  192. for (i=2; i<=num_villages; i++)
  193.     {
  194.     // выцепляем ссылки на деревни
  195.     code = "CODE:" + jsNewLine;
  196.     code = code + "TAG POS=" + (i+1) + " TYPE=A ATTR=HREF:*screen=overview EXTRACT=HREF" + jsNewLine;
  197.     iimPlay(code);
  198.     href_villages[i] = iimGetLastExtract(1);
  199.    
  200.     href_villages[i] = href_villages[i].substr(href_villages[i].indexOf("village=")+8);
  201.     href_villages[i] = href_villages[i].substr(0, href_villages[i].indexOf("&"));
  202.     href_villages[i] = base_url + 'village=' + href_villages[i] + "&order=distance&dir=asc&screen=am_farm";
  203.     }
  204. }
  205. if (start_type == 3) { // забиваем вручную, list of FA pages
  206. href_villages = ["",
  207. "http://ru23.voyna-plemyon.ru/game.php?village=123&order=distance&dir=asc&screen=am_farm",
  208. "http://ru23.voyna-plemyon.ru/game.php?village=124&order=distance&dir=asc&screen=am_farm"];
  209. num_villages = 2;
  210. }
  211.  
  212. }
  213.  
  214. function click_all(icon, href)
  215. {
  216. // посчитаем количество выходов
  217. var code = "CODE:" + jsNewLine;
  218. code = code + "TAG POS=1 TYPE=TD ATTR=ID:light EXTRACT=TXT"
  219. iimPlay(code);
  220. var light_count = iimGetLastExtract(1);
  221. var btn_count = Math.floor(light_count/light_farm_size);
  222.  
  223. var FA_depth = Math.floor(btn_count/max_btn_count);
  224.  
  225. if (FA_depth > max_FA_depth) {FA_depth = max_FA_depth};
  226.  
  227. btn_count = btn_count - FA_depth*max_btn_count;
  228. if (btn_count > max_btn_count) {btn_count = max_btn_count};
  229.  
  230. var num_btn = 1;
  231.  
  232. // жмём кнопочки сколько нужно
  233. for (var j=0; j<=FA_depth; j++) {
  234.     if (j!=0) {
  235.         URL_goto(href + "&Farm_page=" + j);
  236.         doSleep(2);
  237.         solve_captcha();        // проверка на антибота
  238.         }
  239.     if (j==FA_depth) {num_btn = btn_count} else {num_btn = max_btn_count };
  240.     code = "CODE:" + jsNewLine;
  241.    
  242.     for (i=1; i<=num_btn; i++)
  243.         {
  244.         code = code + "TAG POS=" + (i+1) +" TYPE=A ATTR=CLASS:*farm_icon_" + icon + "*" + jsNewLine;
  245.         code = code + "WAIT SECONDS=" + ((delay_btn + getRandomInt(delay_btn_delta[0], delay_btn_delta[1]))/1000) + jsNewLine;
  246.         }
  247.     iimPlay(code); 
  248.     }  
  249. }
  250.  
  251. function getRandomInt(min, max)
  252. {
  253.     return Math.floor(Math.random() * (max - min + 1)) + min;
  254. }
  255.  
  256. function doSleep(amount) {
  257.     var tmpCode = "CODE:" + jsNewLine;
  258.     tmpCode += "WAIT SECONDS=" + amount;
  259.     iimPlay(tmpCode);
  260. }
  261.  
  262. function URL_goto(url)
  263. {
  264.     iimDisplay("GOTO: " + url);
  265.     var code = "CODE:" + jsNewLine;
  266.     code = code + "URL GOTO=" + url;
  267.     iimPlay(code);
  268. }
  269.  
  270. function solve_captcha()
  271. {
  272.     // если просит капчу - вводим
  273.     var img = window.content.document.getElementById('bot_check_image');
  274.     if (img != null) {send_captcha();} // если видим капчу - решаем
  275. }
  276.  
  277. function farm_all_villages()
  278. {
  279. for (var v=1; v<=num_villages; v++)
  280.     {
  281.     URL_goto(href_villages[v]); // идём на страничку советника
  282.     doSleep(3);         // прогрузить капчу
  283.     solve_captcha();        // проверка на антибота
  284.     click_all("a", href_villages[v]);           // кликаем кнопки
  285.     // пауза перед следующей страничкой
  286.     doSleep(delay_village + getRandomInt(delay_village_delta[0], delay_village_delta[1]));
  287.    
  288.     // проверить на атаки
  289.  
  290.    
  291.     }
  292. }
  293.  
  294.  
  295.  
  296.  
  297. // Точка входа
  298.  
  299. solve_captcha();
  300. getVillageList();
  301.  
  302. while (true)
  303. {
  304.     farm_all_villages();
  305.     doSleep(delay_cycle+ getRandomInt(delay_cycle_delta[0], delay_cycle_delta[1]));
  306. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement