CowboySoberano

Farmshape Polonês

Jun 12th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2.  
  3. // @name            GM FarmShaper
  4. // @author          Tjeerdo
  5. // @version         1.4
  6. // @description     FarmShaper
  7. // @include         https://nl*.tribalwars.nl/game.php?*
  8. // @grant           none
  9.  
  10. // ==/UserScript==
  11.  
  12. (function ( f ) {
  13.     var d = document;
  14.     var s = d.createElement( 'script' );
  15.     s.textContent = '$(document).ready(' + f.toString() + ')';
  16.     (d.body || d.head || d.documentElement).appendChild( s );
  17. })( function () {
  18.  
  19.     // object which contains the FarmShaper settings
  20.     var AR_FarmShaperSettings = JSON.parse( localStorage.getItem( 'AR_FarmShaperSettings' ) ) || {};
  21.     // default settings:
  22.     if ( localStorage.getItem( "AR_FarmShaperSettings" ) === null || AR_FarmShaperSettings.version !== "1.4" ) {
  23.         AR_FarmShaperSettings.version = "1.4";
  24.         AR_FarmShaperSettings.RamPerWall = {
  25.             1 : 3,
  26.             2 : 5,
  27.             3 : 8,
  28.             4 : 11,
  29.             5 : 15,
  30.             6 : 20,
  31.             7 : 25,
  32.             8 : 31,
  33.             9 : 37,
  34.             10: 46,
  35.             11: 56,
  36.             12: 66,
  37.             13: 78,
  38.             14: 92,
  39.             15: 107,
  40.             16: 125,
  41.             17: 144,
  42.             18: 167,
  43.             19: 192,
  44.             20: 220
  45.         };
  46.         AR_FarmShaperSettings.troops = {
  47.             'axe'  : 100,
  48.             'spy'  : 1,
  49.             'light': 50
  50.         };
  51.         AR_FarmShaperSettings.SortOnDistance = true;
  52.         AR_FarmShaperSettings.UseLC = false;
  53.         AR_FarmShaperSettings.MultipleAttacksOneTarget = true;
  54.         AR_FarmShaperSettings.DemolitionOrder = ["Kazerne", "Hoofdgebouw", "Stal", "Werkplaats", "Smederij", "Verzamelplaats", "Standbeeld", "Marktplaats", "Houthakkers", "Leemgroeve", "IJzermijn", "Boerderij", "Opslagplaats", "Muur"];
  55.         AR_FarmShaperSettings.CatsTargets = {
  56.             "Hoofdgebouw": 1,
  57.             "Kazerne": 0,
  58.             "Stal": 0,
  59.             "Werkplaats": 0,
  60.             "Smederij": 0,
  61.             "Verzamelplaats": 0,
  62.             "Standbeeld": 0,
  63.             "Marktplaats": 0,
  64.             "Houthakkers": 30,
  65.             "Leemgroeve": 30,
  66.             "IJzermijn": 30,
  67.             "Boerderij": 12,
  68.             "Opslagplaats": 30,
  69.             "Muur": 0
  70.         };
  71.  
  72.         localStorage.setItem( 'AR_FarmShaperSettings', JSON.stringify( AR_FarmShaperSettings ) );
  73.         location.reload();
  74.     }
  75.  
  76.     // object in which al the coords and building levels are saved
  77.     var AR_FarmShaper_Coords_BuildingLvls = JSON.parse( localStorage.getItem( "AR_FarmShaper_Coords_BuildingLvls" ) ) || {};
  78.     var AR_FarmShaper_Coords_WallLvls = JSON.parse( localStorage.getItem( "AR_FarmShaper_Coords_WallLvls" ) ) || {};
  79.     var CatsRequired = [
  80.         /* CatsRequired[0 (this can be any number under 30, because this is the level the buildings is downgraded to) ][building lvl] */
  81.         [0,2,6,10,15,21,28,36,45,56,68,82,98,115,136,159,185,215,248,286,328,376,430,490,558,634,720,815,922,1041,1175],
  82.         [0,0,2, 6,11,17,23,31,39,49,61,74,89,106,126,148,173,202,234,270,312,358,410,469,534,508,691,784,888,1005,1135],
  83.         [0,0,0, 2, 7,12,18,25,33,43,54,66,81, 97,116,137,161,189,220,255,295,340,390,447,511,583,663,754,855, 968,1095],
  84.         [0,0,0, 0, 3, 7,13,20,27,36,47,59,72, 88,106,126,149,176,206,240,278,321,370,425,487,557,635,723,821, 932,1055],
  85.         [0,0,0, 0, 0, 3, 8,14,21,30,40,51,64, 79, 96,115,137,163,192,224,261,303,350,403,463,531,607,692,788, 895,1015],
  86.         [0,0,0, 0, 0, 0, 3, 9,15,23,32,43,55, 69, 86,104,126,150,177,209,244,285,330,382,440,505,579,661,754, 859, 976],
  87.         [0,0,0, 0, 0, 0, 0, 3, 9,17,25,35,47, 60, 76, 93,114,137,163,193,227,266,310,360,416,479,550,631,721, 822, 936],
  88.         [0,0,0, 0, 0, 0, 0, 0, 3,10,18,28,38, 51, 66, 82,102,124,149,178,211,248,290,338,392,453,522,600,687, 786, 896],
  89.         [0,0,0, 0, 0, 0, 0, 0, 0, 4,11,20,30, 42, 56, 72, 90,111,135,162,194,230,270,316,368,427,494,569,654, 749, 856],
  90.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 4,12,22, 33, 46, 61, 78, 98,121,147,177,211,250,294,345,401,466,538,620, 713, 816],
  91.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 4,13, 23, 36, 50, 66, 85,107,132,160,193,230,273,321,376,438,508,587, 676, 777],
  92.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 14, 26, 39, 54, 72, 92,116,143,175,210,251,297,350,409,477,553, 640, 737],
  93.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  5, 16, 28, 42, 59, 78,101,127,156,190,229,273,324,381,446,520, 603, 697],
  94.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  6, 17, 30, 46, 64, 85,110,138,170,207,250,298,353,415,486, 567, 657],
  95.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  6, 18, 33, 50, 70, 93,120,150,186,226,272,325,385,453, 530, 617],
  96.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  6, 20, 36, 54, 76,101,130,164,202,246,297,354,419, 493, 578],
  97.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  7, 22, 39, 59, 83,110,142,178,220,268,323,386, 457, 538],
  98.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  8, 24, 43, 65, 90,120,155,195,240,292,352, 420, 498],
  99.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  8, 26, 46, 70, 98,131,169,212,262,319, 384, 458],
  100.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  9, 28, 50, 77,107,143,184,231,285, 347, 418],
  101.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0, 10, 30, 55, 84,117,156,200,252, 311, 379],
  102.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10, 33, 60, 91,127,170,218, 274, 339],
  103.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11, 36, 65, 99,139,185, 238, 299],
  104.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 39, 71,108,151, 201, 259],
  105.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 13, 43, 77,118, 165, 219],
  106.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15, 47, 84, 128, 180],
  107.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 51,  92, 140],
  108.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 17,  55, 100],
  109.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  19,  60],
  110.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   0,  20],
  111.         [0,0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   0,   0]
  112.     ];
  113.  
  114.     // function for sorting the coords
  115.     function AR_SortCoords(a) {
  116.         var own_village = game_data.village.coord;
  117.         f = own_village.split("|"),
  118.             t = a.split("|"),
  119.             fields = Math.sqrt(Math.pow(parseInt(f[0])-parseInt(t[0]),2)+Math.pow(parseInt(f[1])-parseInt(t[1]),2));
  120.         return fields;
  121.     }
  122.  
  123.     // function to fill in the troops and coords, if there are not enough troops then go to next village
  124.     function FarmShaperPlace( AttackType, target ) {
  125.         if ( $.isEmptyObject( AttackType )  ) {
  126.             alert( "Alle aanvallen zijn verstuurd :)\nMede mogelijk gemaakt door Tjeerdo/.Arrogant ^^" );
  127.             return;
  128.         }
  129.  
  130.         if (AR_FarmShaperSettings.SortOnDistance === true) {
  131.             var AR_keys = Object.keys( AttackType );
  132.             AR_keys.sort(function ( a, b ) {
  133.                 return AR_SortCoords(a) - AR_SortCoords(b);
  134.             });
  135.             coord = AR_keys[0];
  136.         } else {
  137.             coord = Object.keys( AttackType )[0];
  138.         }
  139.  
  140.         var $UnitForm = $('#command-data-form');
  141.         var axe = $UnitForm.find('a[href*="#unit_input_axe"]').text().match(/\d+/);
  142.         var spy = $UnitForm.find('a[href*="#unit_input_spy"]').text().match(/\d+/);
  143.         var light = $UnitForm.find('a[href*="#unit_input_light"]').text().match(/\d+/);
  144.         var splitCache = coord.split( "|" );
  145.         var xCoord = splitCache[0];
  146.         var yCoord = splitCache[1];
  147.         var neededAxe = AR_FarmShaperSettings.troops['axe'];
  148.         var neededSpy = AR_FarmShaperSettings.troops['spy'];
  149.         var neededLight = AR_FarmShaperSettings.troops['light'];
  150.  
  151.         switch ( target ) {
  152.             case 'wall':
  153.                 var ram = $UnitForm.find('a[href*="#unit_input_ram"]').text().match(/\d+/);
  154.                 var neededRam = AR_FarmShaperSettings.RamPerWall[AR_FarmShaper_Coords_WallLvls[coord]];
  155.                 if ( ram >= neededRam ) {
  156.                     $( "#unit_input_ram" ).val( neededRam );
  157.                     $( "#inputx" ).val( xCoord );
  158.                     $( "#inputy" ).val( yCoord );
  159.                     if ( axe >= neededAxe ) {
  160.                         $( "#unit_input_axe" ).val( neededAxe );
  161.                     } else if ( light >= neededLight && AR_FarmShaperSettings.UseLC) {
  162.                         $( "#unit_input_light" ).val( neededLight );
  163.                     } else {
  164.                         alert( "dorpswitch omdat er te weinig troepen zijn" );
  165.                         location.href = document.getElementById( "village_switch_right" ).href;
  166.                     }
  167.                     if ( spy >= neededSpy ) {
  168.                         $( "#unit_input_spy" ).val( neededSpy );
  169.                     } else {
  170.                         alert( "dorpswitch omdat er te weinig scouts zijn" );
  171.                         location.href = document.getElementById( "village_switch_right" ).href;
  172.                     }
  173.                     delete AR_FarmShaper_Coords_WallLvls[coord];
  174.                     localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  175.                     $( "#target_attack" ).focus();
  176.                 } else {
  177.                     alert( "dorpswitch omdat er te weinig rammen zijn" );
  178.                     location.href = document.getElementById( "village_switch_right" ).href;
  179.                 }
  180.                 break;
  181.             case 'buildings':
  182.                 var catapult = $UnitForm.find('a[href*="#unit_input_catapult"]').text().match(/\d+/);
  183.                 var neededCatapult;
  184.                 if ( catapult < 2) {
  185.                     alert( "dorpswitch omdat er te weinig katapulten zijn" );
  186.                     location.href = document.getElementById( "village_switch_right" ).href;
  187.                 } else {
  188.                     $.each( AR_FarmShaperSettings.DemolitionOrder, function ( index ) {
  189.                         var AR_Building = AR_FarmShaperSettings.DemolitionOrder[index];
  190.                         var AR_MinimumLvl = AR_FarmShaperSettings.CatsTargets[AR_Building];
  191.                         var AR_CurrentLvl = AR_FarmShaper_Coords_BuildingLvls[coord][AR_Building] === undefined ? AR_FarmShaper_Coords_BuildingLvls[coord][AR_Building] : 0;
  192.                         if( AR_MinimumLvl < AR_CurrentLvl ) {
  193.                             neededCatapult = CatsRequired[AR_MinimumLvl][AR_CurrentLvl];
  194.                             if ( catapult > neededCatapult ) {
  195.                                 if ( neededCatapult === 0) {
  196.                                     return true;
  197.                                 }
  198.                                 $( "#unit_input_catapult" ).val( neededCatapult );
  199.                                 $( "#inputx" ).val( xCoord );
  200.                                 $( "#inputy" ).val( yCoord );
  201.                                 if ( axe >= neededAxe ) {
  202.                                     $( "#unit_input_axe" ).val( neededAxe );
  203.                                 } else if ( light >= neededLight && AR_FarmShaperSettings.UseLC) {
  204.                                     $( "#unit_input_light" ).val( neededLight );
  205.                                 } else {
  206.                                     alert( "dorpswitch omdat er te weinig troepen zijn" );
  207.                                     location.href = document.getElementById( "village_switch_right" ).href;
  208.                                 }
  209.                                 if ( spy >= neededSpy ) {
  210.                                     $( "#unit_input_spy" ).val( neededSpy );
  211.                                 } else {
  212.                                     alert( "dorpswitch omdat er te weinig scouts zijn" );
  213.                                     location.href = document.getElementById( "village_switch_right" ).href;
  214.                                 }
  215.                                 if ( !AR_FarmShaperSettings.MultipleAttacksOneTarget ) {
  216.                                     delete AR_FarmShaper_Coords_BuildingLvls[coord];
  217.                                 } else {
  218.                                     AR_FarmShaper_Coords_BuildingLvls[coord][AR_Building] = AR_MinimumLvl;
  219.                                 }
  220.                                 localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  221.                                 localStorage['AR_FarmShaperKataTarget'] = AR_Building;
  222.                                 $( "#target_attack" ).focus();
  223.                                 return false;
  224.                             } else if ( catapult < neededCatapult ) {
  225.                                 var counter = AR_CurrentLvl - AR_MinimumLvl;
  226.                                 for( var i = AR_MinimumLvl; i < AR_CurrentLvl; i++ ) {
  227.                                     neededCatapult = CatsRequired[i][AR_CurrentLvl];
  228.                                     if ( catapult >= neededCatapult && neededCatapult > 0 ) {
  229.                                         $( "#unit_input_catapult" ).val( neededCatapult );
  230.                                         $( "#inputx" ).val( xCoord );
  231.                                         $( "#inputy" ).val( yCoord );
  232.                                         if ( axe >= neededAxe ) {
  233.                                             $( "#unit_input_axe" ).val( neededAxe );
  234.                                         } else if ( light >= neededLight && AR_FarmShaperSettings.UseLC) {
  235.                                             $( "#unit_input_light" ).val( neededLight );
  236.                                         } else {
  237.                                             alert( "dorpswitch omdat er te weinig troepen zijn" );
  238.                                             location.href = document.getElementById( "village_switch_right" ).href;
  239.                                         }
  240.                                         if ( spy >= neededSpy ) {
  241.                                             $( "#unit_input_spy" ).val( neededSpy );
  242.                                         } else {
  243.                                             alert( "dorpswitch omdat er te weinig scouts zijn" );
  244.                                             location.href = document.getElementById( "village_switch_right" ).href;
  245.                                         }
  246.                                         if ( !AR_FarmShaperSettings.MultipleAttacksOneTarget ) {
  247.                                             delete AR_FarmShaper_Coords_BuildingLvls[coord];
  248.                                         } else {
  249.                                             AR_FarmShaper_Coords_BuildingLvls[coord][AR_Building] = i;
  250.                                         }
  251.                                         localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  252.                                         localStorage['AR_FarmShaperKataTarget'] = AR_Building;
  253.                                         $( "#target_attack" ).focus();
  254.                                         return false;
  255.                                     } else if (neededCatapult === 0 ) {
  256.                                         return;
  257.                                     }
  258.                                 }
  259.                             }
  260.                         }
  261.                         if (index == 13) {
  262.                             delete AR_FarmShaper_Coords_BuildingLvls[coord];
  263.                             localStorage['AR.FarmShaper.Coords.BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  264.                             FarmShaperPlace( AR_FarmShaper_Coords_BuildingLvls, "buildings" );
  265.                         }
  266.                     });
  267.                 }
  268.                 break;
  269.         }
  270.     }
  271.  
  272.     // append element to the footer so that the user can do it in their own way.
  273.     $( '#linkContainer' ).append( '<a href="#AR_FarmShaperSettings" id="FarmShaperSettings"> - AR FarmShaper</a>' );
  274.     $( "#FarmShaperSettings" ).click( function () {
  275.         // create div for settings popup
  276.         var a = document.createElement( "div" );
  277.         // set ID for the settings popup
  278.         a.id = "AR_FarmShaperSettingsPopup";
  279.         // set the CSS for the settings popup
  280.         a.style.cssText = "background-color:#ecd6ad;border:2px solid #7d510f;z-index:99;top:100px;left:" + (($( document ).width() - 600) / 2) + "px;position:absolute;padding:7px;width:600px;border-radius:7px;box-shadow:0 0 50px 15px #000000;";
  281.         // append the element to the document body
  282.         document.body.appendChild( a );
  283.         // create and set innerHTML for the settings popup
  284.         var menu = '<h2 style="text-align: center;width: 75%;float:left;">settings FarmShaper</h2><h3 style="text-align: right;width:20%;float:left;"><a id="AR_FarmShaperSettingsPopupSluiten" href="javascript:void(0)">sluiten</a></h3><div class="Settings_FarmShaper" style="float:left;"><table style="float:left;margin:0px 20px 0px 20px;width:45%;" class="vis"><tr><th>Muurlvl</th><th>aantal ram</th></tr><tr><td>1</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[1] + '" id="RamPerWallLvl1"/></td></tr><tr><td>2</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[2] + '" id="RamPerWallLvl2"/></td></tr><tr><td>3</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[3] + '" id="RamPerWallLvl3"/></td></tr><tr><td>4</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[4] + '" id="RamPerWallLvl4"/></td></tr><tr><td>5</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[5] + '" id="RamPerWallLvl5"/></td></tr><tr><td>6</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[6] + '" id="RamPerWallLvl6"/></td></tr><tr><td>7</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[7] + '" id="RamPerWallLvl7"/></td></tr><tr><td>8</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[8] + '" id="RamPerWallLvl8"/></td></tr><tr><td>9</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[9] + '" id="RamPerWallLvl9"/></td></tr><tr><td>10</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[10] + '" id="RamPerWallLvl10"/></td></tr><tr><td>11</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[11] + '" id="RamPerWallLvl11"/></td></tr><tr><td>12</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[12] + '" id="RamPerWallLvl12"/></td></tr><tr><td>13</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[13] + '" id="RamPerWallLvl13"/></td></tr><tr><td>14</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[14] + '" id="RamPerWallLvl14"/></td></tr><tr><td>15</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[15] + '" id="RamPerWallLvl15"/></td></tr><tr><td>16</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[16] + '" id="RamPerWallLvl16"/></td></tr><tr><td>17</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[17] + '" id="RamPerWallLvl17"/></td></tr><tr><td>18</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[18] + '" id="RamPerWallLvl18"/></td></tr><tr><td>19</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[19] + '" id="RamPerWallLvl19"/></td></tr><tr><td>20</td><td><input type="number" value="' + AR_FarmShaperSettings.RamPerWall[20] + '" id="RamPerWallLvl20"/></td></tr></table><table style="float:left;width:45%;" class="vis"><tr><td>aantal bijl per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['axe'] + '" id="AR_FarmShaperAxe"/></td></tr><tr><td>aantal scouts per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['spy'] + '" id="AR_FarmShaperSpy"/></td></tr><tr><td>aantal LC per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['light'] + '" id="AR_FarmShaperLight"/></td></tr></table><table style="float:left;width:45%;" class="vis"><tr><td><input type="checkbox" id="AR_SortOnDistance" value=""></td><td>Co&ouml;rdinaten sorteren op afstand</td></tr><tr><td><input type="checkbox" id="AR_UseLC" value=""></td><td>LC gebruiken voor het slopen</td></tr><tr><td><input type="checkbox" id="AR_MultipleAttacksOneTarget" value=""></td><td>Meerdere kata-aanvallen per dorp</td></tr></table><div style="float:left;width:45%;" id="AR_FarmShaper_Buildings"><div style="padding: 2px;" id="AR_FarmShaper_Hoofdgebouw"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Hoofdgebouw") + 1) + '"/><span style="width:113px;display:block;float:left;">Hoofdgebouw</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Hoofdgebouw + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Kazerne"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Kazerne") + 1) + '"/><span style="width:113px;display:block;float:left;">Kazerne</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Kazerne + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Stal"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Stal") + 1) + '"/><span style="width:113px;display:block;float:left;">Stal</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Stal + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Werkplaats"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Werkplaats") + 1) + '"/><span style="width:113px;display:block;float:left;">Werkplaats</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Werkplaats + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Smederij"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Smederij") + 1) + '"/><span style="width:113px;display:block;float:left;">Smederij</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Smederij + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Verzamelplaats"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Verzamelplaats") + 1) + '"/><span style="width:113px;display:block;float:left;">Verzamelplaats</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Verzamelplaats + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Standbeeld"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Standbeeld") + 1) + '"/><span style="width:113px;display:block;float:left;">Standbeeld</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Standbeeld + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Marktplaats"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Marktplaats") + 1) + '"/><span style="width:113px;display:block;float:left;">Marktplaats</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Marktplaats + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Houthakkers"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Houthakkers") + 1) + '"/><span style="width:113px;display:block;float:left;">Houthakkers</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Houthakkers + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Leemgroeve"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Leemgroeve") + 1) + '"/><span style="width:113px;display:block;float:left;">Leemgroeve</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Leemgroeve + '"></div><div style="padding: 2px;" id="AR_FarmShaper_IJzermijn"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("IJzermijn") + 1) + '"/><span style="width:113px;display:block;float:left;">IJzermijn</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.IJzermijn + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Boerderij"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Boerderij") + 1) + '"/><span style="width:113px;display:block;float:left;">Boerderij</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Boerderij + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Opslagplaats"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Opslagplaats") + 1) + '"/><span style="width:113px;display:block;float:left;">Opslagplaats</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Opslagplaats + '"></div><div style="padding: 2px;" id="AR_FarmShaper_Muur"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Muur") + 1) + '"/><span style="width:113px;display:block;float:left;">Muur</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Muur + '"></div></div></div>';
  285.         a.innerHTML = menu;
  286.         $( '#AR_SortOnDistance' ).prop( 'checked', AR_FarmShaperSettings.SortOnDistance );
  287.         $( '#AR_UseLC' ).prop( 'checked', AR_FarmShaperSettings.UseLC );
  288.         $( '#AR_MultipleAttacksOneTarget' ).prop( 'checked', AR_FarmShaperSettings.MultipleAttacksOneTarget );
  289.  
  290.         $( '#AR_FarmShaperSettingsPopupSluiten' ).on( 'click', function () {
  291.             AR_FarmShaperSettings.RamPerWall = {
  292.                 1 : parseInt( $( '#RamPerWallLvl1' ).val() ),
  293.                 2 : parseInt( $( '#RamPerWallLvl2' ).val() ),
  294.                 3 : parseInt( $( '#RamPerWallLvl3' ).val() ),
  295.                 4 : parseInt( $( '#RamPerWallLvl4' ).val() ),
  296.                 5 : parseInt( $( '#RamPerWallLvl5' ).val() ),
  297.                 6 : parseInt( $( '#RamPerWallLvl6' ).val() ),
  298.                 7 : parseInt( $( '#RamPerWallLvl7' ).val() ),
  299.                 8 : parseInt( $( '#RamPerWallLvl8' ).val() ),
  300.                 9 : parseInt( $( '#RamPerWallLvl9' ).val() ),
  301.                 10: parseInt( $( '#RamPerWallLvl10' ).val() ),
  302.                 11: parseInt( $( '#RamPerWallLvl11' ).val() ),
  303.                 12: parseInt( $( '#RamPerWallLvl12' ).val() ),
  304.                 13: parseInt( $( '#RamPerWallLvl13' ).val() ),
  305.                 14: parseInt( $( '#RamPerWallLvl14' ).val() ),
  306.                 15: parseInt( $( '#RamPerWallLvl15' ).val() ),
  307.                 16: parseInt( $( '#RamPerWallLvl16' ).val() ),
  308.                 17: parseInt( $( '#RamPerWallLvl17' ).val() ),
  309.                 18: parseInt( $( '#RamPerWallLvl18' ).val() ),
  310.                 19: parseInt( $( '#RamPerWallLvl19' ).val() ),
  311.                 20: parseInt( $( '#RamPerWallLvl20' ).val() )
  312.             };
  313.             AR_FarmShaperSettings.troops = {
  314.                 'axe'  : parseInt( $( '#AR_FarmShaperAxe' ).val() ),
  315.                 'spy'  : parseInt( $( '#AR_FarmShaperSpy' ).val() ),
  316.                 'light': parseInt( $( '#AR_FarmShaperLight' ).val() )
  317.             };
  318.             AR_FarmShaperSettings.SortOnDistance = $( '#AR_SortOnDistance' ).is( ':checked' );
  319.             AR_FarmShaperSettings.UseLC = $( '#AR_UseLC' ).is( ':checked' );
  320.  
  321.             $( '#AR_FarmShaper_Buildings' ).children( 'div' ).each( function () {
  322.                 var $this = $( this );
  323.                 var $this_input = $this.find( 'input' );
  324.                 var AR_newIndexBuilding = parseInt($this_input.first().val()) - 1;
  325.                 var AR_Building = $this.find( 'span' ).text();
  326.                 var AR_NewMinimumLvl = parseInt($this_input.last().val());
  327.                 if ( AR_Building.match( /Hoofdgebouw|Boerderij|Opslagplaats/i ) ) {
  328.                     if ( AR_NewMinimumLvl < 1 ) {
  329.                         AR_FarmShaperSettings.CatsTargets[AR_Building] = 1;
  330.                     } else {
  331.                         AR_FarmShaperSettings.CatsTargets[AR_Building] = AR_NewMinimumLvl;
  332.                     }
  333.                 } else {
  334.                     AR_FarmShaperSettings.CatsTargets[AR_Building] = AR_NewMinimumLvl;
  335.                 }
  336.                 AR_FarmShaperSettings.DemolitionOrder[AR_newIndexBuilding] = AR_Building;
  337.             } );
  338.  
  339.             localStorage.setItem( 'AR_FarmShaperSettings', JSON.stringify( AR_FarmShaperSettings ) );
  340.             location.reload();
  341.         } );
  342.     } );
  343.     // switch to see on which page the user is and do the stuff on the right page
  344.     switch ( game_data.screen ) {
  345.         case "am_farm":
  346.             var $am_widget_farm = $( "#am_widget_Farm" ); //Cache selectors we use multiple times
  347.             var $am_widget_farm_tr = $am_widget_farm.find( 'tr' );
  348.             $am_widget_farm.find( "h4" ).first().after('<table class="vis"><tr><th>FarmShaper: </th><td><input type="button" id="AR_FarmShaper_Buildings" value="Gebouwlvls opslaan"/></td><td><input type="button" id="AR_FarmShaper_Wall" value="Muurlvls opslaan"/></td><td id="AR_FarmShaper_Last_td"><input type="button" id="AR_FarmShaper_remove_old_list" value="oude gegevens wissen"/></td></tr><table>');
  349.             $( '#AR_FarmShaper_Wall' ).click( function () {
  350.                 var indexCoordsColumn = $am_widget_farm_tr.find( 'th:contains("Dorp")' ).index();
  351.                 var indexWallColumn = $am_widget_farm_tr.find( 'th:has(img[src*="wall.png"])' ).index();
  352.                 $am_widget_farm.find( 'tr[class*="report"]' ).each( function () {
  353.                     var $this_td = $( this ).find( 'td' );
  354.                     var $this_td_coordsColumn_a = $this_td.eq( indexCoordsColumn ).find( 'a' );
  355.                     var coords = $this_td.eq( indexCoordsColumn ).text().match( /\d{1,3}\|\d{1,3}/ );
  356.                     var wall = parseInt( $this_td.eq( indexWallColumn ).text() );
  357.                     if ( wall > 0 ) {
  358.                         AR_FarmShaper_Coords_WallLvls[coords] = wall;
  359.                         $this_td_coordsColumn_a.text( "FarmShaper: Het muurlevel is opgeslagen!" );
  360.                     } else if( isNaN(wall) ) {
  361.                         $this_td_coordsColumn_a.text( "FarmShaper: Het muurlevel is onbekend" );
  362.                     } else {
  363.                         $this_td_coordsColumn_a.text( "FarmShaper: De muur is lvl 0 " );
  364.                     }
  365.                 } );
  366.                 localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  367.                 $( '#AR_FarmShaper_Last_td' ).after( '<td style="font-weight:bold;">de dorpen op deze pagina zijn opgeslagen</td>' );
  368.             } );
  369.  
  370.             $( '#AR_FarmShaper_Buildings' ).click( function () {
  371.                 var indexCoordsColumn = $am_widget_farm_tr.find( 'th:contains("Dorp")' ).index();
  372.                 $am_widget_farm.find( 'tr[class*="report"]' ).each( function () {
  373.                     var $this_td = $( this ).find( 'td' );
  374.                     var $this_td_coordsColumn_a = $this_td.eq( indexCoordsColumn ).find( 'a' );
  375.                     var AR_ReportURL = $this_td_coordsColumn_a.attr( 'href' );
  376.                     $.ajax( {
  377.                         url: "https://" + location.host + AR_ReportURL,
  378.                         async: false,
  379.                         success: function ( result ) {
  380.                             var $result = $( result );
  381.                             var $attack_spy_building_data = $result.find( '#attack_spy_building_data' );
  382.                             var $attack_info_def = $result.find( '#attack_info_def' );
  383.  
  384.                             if ( $attack_spy_building_data.length > 0 ) {
  385.                                 var coord = $attack_info_def.find( '.village_anchor' ).text().match( /\d{1,3}\|\d{1,3}/ );
  386.                                 var buildings = JSON.parse( $attack_spy_building_data.val() );
  387.                                 AR_FarmShaper_Coords_BuildingLvls[coord] = {};
  388.                                 $.each( buildings, function () {
  389.                                     var name = this.name;
  390.                                     var level = parseInt( this.level );
  391.                                     if ( !name.match( /Kerk|Adelshoeve|Schuilplaats/i ) ) {
  392.                                         AR_FarmShaper_Coords_BuildingLvls[coord][name] = level;
  393.                                         if ( name.match( /Muur/i ) && level > 0 ) {
  394.                                             AR_FarmShaper_Coords_WallLvls[coord] = level;
  395.                                         }
  396.                                     }
  397.                                 });
  398.                                 localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  399.                                 localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  400.                                 $this_td_coordsColumn_a.text( "FarmShaper: de gebouwlevels in dit rapport zijn opgeslagen!" );
  401.                             } else {
  402.                                 $this_td_coordsColumn_a.text( 'FarmShaper: Geen gebouwlevels gevonden!' );
  403.                             }
  404.  
  405.                         }
  406.                     } ).fail( function () {
  407.                         alert( "error" );
  408.                     } );
  409.                 } );
  410.                 $( '#AR_FarmShaper_Last_td' ).after( '<td style="font-weight:bold;">de dorpen op deze pagina zijn opgeslagen</td>' );
  411.             } );
  412.  
  413.             $( '#AR_FarmShaper_remove_old_list' ).click( function () {
  414.                 delete localStorage['AR.FarmShaper.Coords.WallLvls'];
  415.                 AR_FarmShaper_Coords_WallLvls = {};
  416.                 delete localStorage['AR.FarmShaper.Coords.BuildingLvls'];
  417.                 AR_FarmShaper_Coords_BuildingLvls = {};
  418.                 alert( 'oude gegevens zijn gewist' );
  419.             } );
  420.             break;
  421.         case "place":
  422.             if ( location.href.match( 'try=confirm' ) ) {
  423.                 if ( localStorage['AR.FarmShaperKataTarget'] === undefined ) {
  424.                     $( "select[name='building']" ).val( $( 'option:contains(' + localStorage['AR.FarmShaperKataTarget'] + ')' ).val() );
  425.                     delete localStorage['AR.FarmShaperKataTarget'];
  426.                 }
  427.             } else {
  428.                 var villagesToGoForFarmShaper_Wall = $.map( AR_FarmShaper_Coords_WallLvls, function ( n, i ) { return i; } ).length;
  429.                 var villagesToGoForFarmShaper_Buildings = $.map( AR_FarmShaper_Coords_BuildingLvls, function ( n, i ) { return i; } ).length;
  430.  
  431.                 $( '.modemenu' ).find(' tr:has(td:contains("Bevelen"))' ).before('<tr><td style="min-width: 80px;"><a href="#" id="AR_StartFarmShaper_Wall">Wall Breaker ( ' + villagesToGoForFarmShaper_Wall + ' )</a></td><td style="min-width: 80px;"><a href="#" id="AR_StartFarmShaper_Buildings">Barb Shaper ( ' + villagesToGoForFarmShaper_Buildings + ' )</a></td></tr>');
  432.                 $( '#AR_StartFarmShaper_Wall' ).click( function () {
  433.                     FarmShaperPlace( AR_FarmShaper_Coords_WallLvls, "wall" );
  434.                 } );
  435.                 $( '#AR_StartFarmShaper_Buildings' ).click( function () {
  436.                     FarmShaperPlace( AR_FarmShaper_Coords_BuildingLvls, "buildings" );
  437.                 } );
  438.             }
  439.             break;
  440.         case "report":
  441.             var $content_value = $( '#content_value' );
  442.             var $content_value_h2 = $content_value.find( 'h2' );
  443.             $content_value_h2.after('<div style="position: relative;"><text id="AR_FarmShaper" style="position: absolute; top: -20px; left: 170px; display: none;">FarmShaper: Loading..</text></div>');
  444.  
  445.             $( '.modemenu' ).find( 'tr' ).last().after('<tr><td style="background-color: #ebd6ab">&nbsp;</td></tr><tr><th style="min-width: 80px">FarmShaper </th></tr><tr style="display:none"><td style="min-width: 80px;"><input type="button" id="AR_FarmShaper_Save_Buildings_Fast" value="Gebouwlvls opslaan"/></td></tr><tr><td style="min-width: 80px;"><input type="button" id="AR_FarmShaper_remove_old_list" value="Oude gegevens wissen"/></td></tr>');
  446.  
  447.             $( '#AR_FarmShaper_remove_old_list' ).click( function () {
  448.                 delete localStorage['AR.FarmShaper_Coords_WallLvls'];
  449.                 AR_FarmShaper_Coords_WallLvls = {};
  450.                 delete localStorage['AR.FarmShaper_Coords_BuildingLvls'];
  451.                 AR_FarmShaper_Coords_BuildingLvls = {};
  452.                 alert( 'oude gegevens zijn gewist' );
  453.             } );
  454.  
  455.             if ( location.href.match( 'view=' ) ) {
  456.                 $( '#AR_FarmShaper' ).css( 'display', 'block' );
  457.                 var $attack_spy_building_data = $( '#attack_spy_building_data' );
  458.                 var $attack_info_def = $( '#attack_info_def' );
  459.  
  460.                 if ( $attack_info_def.find( 'tr' ).first().find( 'a' ).length < 1 ) {
  461.                     if ( $attack_spy_building_data.length > 0 ) {
  462.                         var coord = $attack_info_def.find( '.village_anchor' ).text().match( /\d{1,3}\|\d{1,3}/ );
  463.                         var buildings = JSON.parse( $attack_spy_building_data.val() );
  464.                         AR_FarmShaper_Coords_BuildingLvls[coord] = {};
  465.                         $.each( buildings, function () {
  466.                             var name = this.name;
  467.                             var level = parseInt( this.level );
  468.                             if ( !name.match( /Kerk|Adelshoeve|Schuilplaats/i ) ) {
  469.                                 AR_FarmShaper_Coords_BuildingLvls[coord][name] = level;
  470.                                 if ( name.match( /Muur/i ) && level > 0 ) {
  471.                                     AR_FarmShaper_Coords_WallLvls[coord] = level;
  472.                                 }
  473.                             }
  474.                         });
  475.                         localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  476.                         localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  477.                         $( '#AR_FarmShaper' ).text( "FarmShaper: de gebouwlevels in dit rapport zijn opgeslagen!" );
  478.                     } else {
  479.                         $( '#AR_FarmShaper' ).text( 'FarmShaper: Geen gebouwlevels gevonden!' );
  480.                     }
  481.                 } else {
  482.                     $( '#AR_FarmShaper' ).text( 'FarmShaper: Werkt alleen bij verlaten dorpen!' );
  483.                 }
  484.             } else {
  485.                 var $AR_FarmShaper_Save_Buildings_Fast = $( '#AR_FarmShaper_Save_Buildings_Fast' );
  486.                 $AR_FarmShaper_Save_Buildings_Fast.closest( 'tr' ).css( 'display', 'block' );
  487.  
  488.                 $AR_FarmShaper_Save_Buildings_Fast.on( 'click', function () {
  489.                     $( '#AR_FarmShaper' ).css( 'display', 'block' );
  490.                     $( '#report_list' ).find( 'tr' ).each( function () {
  491.                         var $this = $( this );
  492.                         var $this_td = $this.find( 'td' );
  493.                         if ( $this_td.has( 'img[src*="farm.png"]' ).length > 0 || $this_td.has( 'img[src*="attack"]' ).length > 0 ) {
  494.                             var AR_ReportURL = $this.find( '.quickedit-content' ).find( 'a' ).attr( 'href' );
  495.                             $.ajax( {
  496.                                 url: "https://" + location.host + AR_ReportURL,
  497.                                 async: false,
  498.                                 success: function ( result ) {
  499.                                     var $result = $( result );
  500.                                     var $attack_spy_building_data = $result.find( '#attack_spy_building_data' );
  501.                                     var $attack_info_def = $result.find( '#attack_info_def' );
  502.  
  503.                                     if ( $attack_info_def.find( 'tr' ).first().find( 'a' ).length < 1 ) {
  504.                                         if ( $attack_spy_building_data.length > 0 ) {
  505.                                             var coord = $attack_info_def.find( '.village_anchor' ).text().match( /\d{1,3}\|\d{1,3}/ );
  506.                                             var buildings = JSON.parse( $attack_spy_building_data.val() );
  507.                                             AR_FarmShaper_Coords_BuildingLvls[coord] = {};
  508.                                             $.each( buildings, function () {
  509.                                                 var name = this.name;
  510.                                                 var level = parseInt( this.level );
  511.                                                 if ( !name.match( /Kerk|Adelshoeve|Schuilplaats/i ) ) {
  512.                                                     AR_FarmShaper_Coords_BuildingLvls[coord][name] = level;
  513.                                                     if ( name.match( /Muur/i ) && level > 0 ) {
  514.                                                         AR_FarmShaper_Coords_WallLvls[coord] = level;
  515.                                                     }
  516.                                                 }
  517.                                             });
  518.                                             localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  519.                                             localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  520.                                             $this.find( '.quickedit-label' ).text( "FarmShaper: de gebouwlevels in dit rapport zijn opgeslagen!" );
  521.                                         } else {
  522.                                             $this.find( '.quickedit-label' ).text( 'FarmShaper: Geen gebouwlevels gevonden!' );
  523.                                         }
  524.                                     } else {
  525.                                         $this.find( '.quickedit-label' ).text( 'FarmShaper: Werkt alleen bij verlaten dorpen!' );
  526.                                     }
  527.  
  528.                                 }
  529.                             } ).fail( function () {
  530.                                 alert( "error" );
  531.                             } );
  532.                         }
  533.                     } );
  534.                     $( '#AR_FarmShaper' ).text( 'FarmShaper: Opgeslagen!' );
  535.                 } );
  536.             }
  537.             break;
  538.     }
  539. } );
Add Comment
Please, Sign In to add comment