Advertisement
ZergLurker

Tribalwars Farm Script for iMacros

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