Advertisement
Guest User

Untitled

a guest
Feb 8th, 2018
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 44.24 KB | None | 0 0
  1. // ==UserScript==
  2.  
  3. // @name GM FarmShaper
  4. // @author Tjeerdo
  5. // @version 1.6
  6. // @description FarmShaper
  7. // @include https://nl*.tribalwars.nl/game.php?*
  8. // @grant none
  9.  
  10. // ==/UserScript==
  11. // TODO
  12. // - detect wall level and check if there are enough troops send to shape without losses
  13. // - send ram for wall ?
  14.  
  15. (function ( f ) {
  16. var d = document;
  17. var s = d.createElement( 'script' );
  18. s.textContent = '$(document).ready(' + f.toString() + ')';
  19. (d.body || d.head || d.documentElement).appendChild( s );
  20. })( function () {
  21.  
  22.  
  23. // object which contains the FarmShaper settings
  24. var AR_FarmShaperSettings = JSON.parse( localStorage.getItem( 'AR_FarmShaperSettings' ) ) || {};
  25. // default settings:
  26. if ( localStorage.getItem( "AR_FarmShaperSettings" ) === null || AR_FarmShaperSettings.version !== "1.6" ) {
  27. AR_FarmShaperSettings.version = "1.6";
  28. AR_FarmShaperSettings.RamPerWall = {
  29. 1 : 3,
  30. 2 : 5,
  31. 3 : 8,
  32. 4 : 11,
  33. 5 : 15,
  34. 6 : 20,
  35. 7 : 25,
  36. 8 : 31,
  37. 9 : 37,
  38. 10: 46,
  39. 11: 56,
  40. 12: 66,
  41. 13: 78,
  42. 14: 92,
  43. 15: 107,
  44. 16: 125,
  45. 17: 144,
  46. 18: 167,
  47. 19: 192,
  48. 20: 220
  49. };
  50. AR_FarmShaperSettings.troops = {
  51. 'spear': {
  52. 'activated': false,
  53. 'amount': 0
  54. },
  55. 'sword': {
  56. 'activated': false,
  57. 'amount': 0
  58. },
  59. 'axe': {
  60. 'activated': true,
  61. 'amount': 100
  62. },
  63. 'archer': {
  64. 'activated': false,
  65. 'amount': 0
  66. },
  67. 'spy': {
  68. 'activated': true,
  69. 'amount': 1
  70. },
  71. 'light': {
  72. 'activated': true,
  73. 'amount': 50
  74. },
  75. 'marcher': {
  76. 'activated': false,
  77. 'amount': 0
  78. },
  79. 'heavy': {
  80. 'activated': false,
  81. 'amount': 0
  82. }
  83. };
  84. AR_FarmShaperSettings.SortOnDistance = true;
  85. AR_FarmShaperSettings.MultipleAttacksOneTarget = true;
  86. AR_FarmShaperSettings.DemolitionOrder = ["Kazerne", "Hoofdgebouw", "Stal", "Werkplaats", "Smederij", "Verzamelplaats", "Standbeeld", "Marktplaats", "Houthakkers", "Leemgroeve", "IJzermijn", "Boerderij", "Opslagplaats", "Muur", "Adelshoeve"];
  87. AR_FarmShaperSettings.CatsTargets = {
  88. "Hoofdgebouw": 1,
  89. "Kazerne": 0,
  90. "Stal": 0,
  91. "Werkplaats": 0,
  92. "Adelshoeve": 0,
  93. "Smederij": 0,
  94. "Verzamelplaats": 0,
  95. "Standbeeld": 0,
  96. "Marktplaats": 0,
  97. "Houthakkers": 30,
  98. "Leemgroeve": 30,
  99. "IJzermijn": 30,
  100. "Boerderij": 12,
  101. "Opslagplaats": 30,
  102. "Muur": 0
  103. };
  104. AR_FarmShaperSettings.hotkeys = {
  105. "AR_HitKeyWallBreakerButton": 66,
  106. "AR_HitKeyBBShaperButton": 67
  107. };
  108. AR_FarmShaperSettings.shapeVillagesWithHighMines = true;
  109. localStorage.setItem( 'AR_FarmShaperSettings', JSON.stringify( AR_FarmShaperSettings ) );
  110. location.reload();
  111. }
  112.  
  113. // object in which al the coords and building levels are saved
  114. var AR_FarmShaper_Coords_BuildingLvls = JSON.parse( localStorage.getItem( "AR_FarmShaper_Coords_BuildingLvls" ) ) || {};
  115. var AR_FarmShaper_Coords_WallLvls = JSON.parse( localStorage.getItem( "AR_FarmShaper_Coords_WallLvls" ) ) || {};
  116. var CatsRequired = [
  117. /* CatsRequired[0 (this can be any number under 30, because this is the level the buildings is downgraded to) ][building lvl] */
  118. [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],
  119. [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],
  120. [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],
  121. [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],
  122. [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],
  123. [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],
  124. [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],
  125. [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],
  126. [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],
  127. [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],
  128. [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],
  129. [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],
  130. [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],
  131. [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],
  132. [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],
  133. [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],
  134. [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],
  135. [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],
  136. [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],
  137. [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],
  138. [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],
  139. [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],
  140. [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],
  141. [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],
  142. [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],
  143. [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],
  144. [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],
  145. [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],
  146. [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],
  147. [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],
  148. [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]
  149. ];
  150. var keyCodeMap = {
  151. 8: "backspace", 9: "tab", 13: "return", 16: "shift", 17: "ctrl", 18: "alt", 19: "pausebreak", 20: "capslock", 27: "escape", 32: " ",
  152. 33: "pageup", 34: "pagedown", 35: "end", 36: "home", 37: "arrow left", 38: "arrow up", 39: "arrow right", 40: "arrow down", 43: "+",
  153. 44: "printscreen", 45: "insert", 46: "delete", 48: "0", 49: "1", 50: "2", 51: "3", 52: "4", 53: "5", 54: "6", 55: "7", 56: "8", 57: "9",
  154. 59: ";", 61: "=", 65: "a", 66: "b", 67: "c", 68: "d", 69: "e", 70: "f", 71: "g", 72: "h", 73: "i", 74: "j", 75: "k", 76: "l", 77: "m",
  155. 78: "n", 79: "o", 80: "p", 81: "q", 82: "r", 83: "s", 84: "t", 85: "u", 86: "v", 87: "w", 88: "x", 89: "y", 90: "z", 96: "0", 97: "1",
  156. 98: "2", 99: "3", 100: "4", 101: "5", 102: "6", 103: "7", 104: "8", 105: "9", 106: "*", 107: "+", 109: "-", 110: ".", 111: "/", 112: "f1",
  157. 113: "f2", 114: "f3", 115: "f4", 116: "f5", 117: "f6", 118: "f7", 119: "f8", 120: "f9", 121: "f10", 122: "f11", 123: "f12", 144: "numlock",
  158. 145: "scrolllock", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'"
  159. };
  160.  
  161. // function for sorting the coords
  162. function AR_SortCoords(a) {
  163. var own_village = game_data.village.coord;
  164. f = own_village.split("|"),
  165. t = a.split("|"),
  166. fields = Math.sqrt(Math.pow(parseInt(f[0])-parseInt(t[0]),2)+Math.pow(parseInt(f[1])-parseInt(t[1]),2));
  167. return fields;
  168. }
  169.  
  170. // function to fill in the troops and coords, if there are not enough troops then go to next village
  171. function FarmShaperPlace( AttackType, target ) {
  172. if ( $.isEmptyObject( AttackType ) ) {
  173. alert( "Alle aanvallen zijn verstuurd :)\nMede mogelijk gemaakt door Tjeerdo/.Arrogant ^^" );
  174. return;
  175. }
  176.  
  177. if (AR_FarmShaperSettings.SortOnDistance == true) {
  178. var AR_keys = Object.keys( AttackType )
  179. AR_keys.sort(function ( a, b ) {
  180. return AR_SortCoords(a) - AR_SortCoords(b)
  181. });
  182. coord = AR_keys[0];
  183. } else {
  184. coord = Object.keys( AttackType )[0];
  185. }
  186.  
  187. var $UnitForm = $('#command-data-form');
  188. var axe = $UnitForm.find( '#unit_input_axe' ).data( 'allCount' );
  189. var spy = $UnitForm.find( '#unit_input_spy' ).data( 'allCount' );
  190. var light = $UnitForm.find( '#unit_input_light' ).data( 'allCount' );
  191. var splitCache = coord.split( "|" );
  192. var xCoord = splitCache[0];
  193. var yCoord = splitCache[1];
  194. var neededSpy = AR_FarmShaperSettings.troops['spy'].amount;
  195.  
  196. switch ( target ) {
  197. case 'wall':
  198. var ram = $UnitForm.find( '#unit_input_ram' ).data( 'allCount' );
  199. var neededRam = AR_FarmShaperSettings.RamPerWall[AR_FarmShaper_Coords_WallLvls[coord]];
  200. if ( ram >= neededRam ) {
  201. $( "#unit_input_ram" ).val( neededRam );
  202. $( "#inputx" ).val( xCoord );
  203. $( "#inputy" ).val( yCoord );
  204. var troopsFilledIn = false;
  205.  
  206. for( var key in AR_FarmShaperSettings.troops ) {
  207. if( AR_FarmShaperSettings.troops[key].activated && key != "spy" ) {
  208. var neededAmount = AR_FarmShaperSettings.troops[key].amount;
  209. if( $UnitForm.find('#unit_input_' + key ).data( 'allCount' ) >= neededAmount ) {
  210. $( "#unit_input_" + key ).val( neededAmount );
  211. troopsFilledIn = true;
  212. break;
  213. }
  214. }
  215. }
  216.  
  217. if( !troopsFilledIn ) {
  218. alert( "dorpswitch omdat er te weinig troepen zijn" );
  219. location.href = document.getElementById( "village_switch_right" ).href;
  220. }
  221. if ( spy >= neededSpy ) {
  222. $( "#unit_input_spy" ).val( neededSpy );
  223. } else {
  224. alert( "dorpswitch omdat er te weinig scouts zijn" );
  225. location.href = document.getElementById( "village_switch_right" ).href;
  226. }
  227.  
  228. delete AR_FarmShaper_Coords_WallLvls[coord];
  229. localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  230. $( "#target_attack" ).focus();
  231. } else {
  232. alert( "dorpswitch omdat er te weinig rammen zijn" );
  233. location.href = document.getElementById( "village_switch_right" ).href;
  234. }
  235. break;
  236. case 'buildings':
  237. var catapult = $UnitForm.find( '#unit_input_catapult' ).data( 'allCount' );
  238. var neededCatapult;
  239. if ( catapult < 2) {
  240. alert( "dorpswitch omdat er te weinig katapulten zijn" );
  241. location.href = document.getElementById( "village_switch_right" ).href;
  242. } else {
  243. if( AR_FarmShaper_Coords_BuildingLvls[coord].Houthakkers == 30 &&
  244. AR_FarmShaper_Coords_BuildingLvls[coord].Leemgroeve == 30 &&
  245. AR_FarmShaper_Coords_BuildingLvls[coord].IJzermijn == 30 &&
  246. !AR_FarmShaperSettings.shapeVillagesWithHighMines ) {
  247. delete AR_FarmShaper_Coords_BuildingLvls[coord];
  248. localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  249. FarmShaperPlace( AR_FarmShaper_Coords_BuildingLvls, "buildings" );
  250. }
  251.  
  252. $.each( AR_FarmShaperSettings.DemolitionOrder, function ( index ) {
  253. var AR_Building = AR_FarmShaperSettings.DemolitionOrder[index];
  254. var AR_MinimumLvl = AR_FarmShaperSettings.CatsTargets[AR_Building];
  255. var AR_CurrentLvl = AR_FarmShaper_Coords_BuildingLvls[coord][AR_Building] != undefined ? AR_FarmShaper_Coords_BuildingLvls[coord][AR_Building] : 0;
  256. if( AR_MinimumLvl < AR_CurrentLvl ) {
  257. neededCatapult = CatsRequired[AR_MinimumLvl][AR_CurrentLvl];
  258. if ( catapult > neededCatapult ) {
  259. if ( neededCatapult == 0) {
  260. return true;
  261. }
  262. $( "#unit_input_catapult" ).val( neededCatapult );
  263. $( "#inputx" ).val( xCoord );
  264. $( "#inputy" ).val( yCoord );
  265. var troopsFilledIn = false;
  266. for( var key in AR_FarmShaperSettings.troops ) {
  267. if( AR_FarmShaperSettings.troops[key].activated && key != "spy" ) {
  268. var neededAmount = AR_FarmShaperSettings.troops[key].amount;
  269. if( $UnitForm.find( '#unit_input_' + key ).data( 'allCount' ) >= neededAmount ) {
  270. $( "#unit_input_" + key ).val( neededAmount );
  271. troopsFilledIn = true;
  272. break;
  273. }
  274. }
  275. }
  276. if( !troopsFilledIn ) {
  277. alert( "dorpswitch omdat er te weinig troepen zijn" );
  278. location.href = document.getElementById( "village_switch_right" ).href;
  279. }
  280. if ( spy >= neededSpy ) {
  281. $( "#unit_input_spy" ).val( neededSpy );
  282. } else {
  283. alert( "dorpswitch omdat er te weinig scouts zijn" );
  284. location.href = document.getElementById( "village_switch_right" ).href;
  285. }
  286.  
  287. if ( !AR_FarmShaperSettings.MultipleAttacksOneTarget ) {
  288. delete AR_FarmShaper_Coords_BuildingLvls[coord];
  289. } else {
  290. AR_FarmShaper_Coords_BuildingLvls[coord][AR_Building] = AR_MinimumLvl;
  291. }
  292. localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  293. localStorage['AR_FarmShaperKataTarget'] = AR_Building;
  294. $( "#target_attack" ).focus();
  295. return false;
  296. } else if ( catapult < neededCatapult ) {
  297. var counter = AR_CurrentLvl - AR_MinimumLvl;
  298. for( var i = AR_MinimumLvl; i < AR_CurrentLvl; i++ ) {
  299. neededCatapult = CatsRequired[i][AR_CurrentLvl];
  300. if ( catapult >= neededCatapult && neededCatapult > 0 ) {
  301. $( "#unit_input_catapult" ).val( neededCatapult );
  302. $( "#inputx" ).val( xCoord );
  303. $( "#inputy" ).val( yCoord );
  304. var troopsFilledIn = false;
  305.  
  306. for( var key in AR_FarmShaperSettings.troops ) {
  307. if( AR_FarmShaperSettings.troops[key].activated && key != "spy" ) {
  308. var neededAmount = AR_FarmShaperSettings.troops[key].amount;
  309. if( $UnitForm.find( '#unit_input_' + key ).data( 'allCount' ) >= neededAmount ) {
  310. $( "#unit_input_" + key ).val( neededAmount );
  311. troopsFilledIn = true;
  312. break;
  313. }
  314. }
  315. }
  316. if( !troopsFilledIn ) {
  317. alert( "dorpswitch omdat er te weinig troepen zijn" );
  318. location.href = document.getElementById( "village_switch_right" ).href;
  319. }
  320. if ( spy >= neededSpy ) {
  321. $( "#unit_input_spy" ).val( neededSpy );
  322. } else {
  323. alert( "dorpswitch omdat er te weinig scouts zijn" );
  324. location.href = document.getElementById( "village_switch_right" ).href;
  325. }
  326. if ( !AR_FarmShaperSettings.MultipleAttacksOneTarget ) {
  327. delete AR_FarmShaper_Coords_BuildingLvls[coord];
  328. } else {
  329. AR_FarmShaper_Coords_BuildingLvls[coord][AR_Building] = i;
  330. }
  331. localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  332. localStorage['AR_FarmShaperKataTarget'] = AR_Building;
  333. $( "#target_attack" ).focus();
  334. return false;
  335. } else if (neededCatapult == 0 ) {
  336. return;
  337. }
  338. }
  339. }
  340. }
  341. if (index == 13) {
  342. delete AR_FarmShaper_Coords_BuildingLvls[coord];
  343. localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  344. FarmShaperPlace( AR_FarmShaper_Coords_BuildingLvls, "buildings" );
  345. }
  346. })
  347. }
  348. break;
  349. }
  350. }
  351.  
  352. // append element to the footer so that the user can do it in their own way.
  353. $( '#linkContainer' ).append( '<a href="#AR_FarmShaperSettings" id="FarmShaperSettings"> - AR FarmShaper</a>' );
  354. $( "#FarmShaperSettings" ).click( function () {
  355. // create div for settings popup
  356. var a = document.createElement( "div" );
  357. // set ID for the settings popup
  358. a.id = "AR_FarmShaperSettingsPopup";
  359. // set the CSS for the settings popup
  360. 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;";
  361. // append the element to the document body
  362. document.body.appendChild( a );
  363. // create and set innerHTML for the settings popup
  364. 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>';
  365. menu += '<table class="vis modemenu AR_FSMenu" style="width:100%;margin-left:auto;margin-right:auto;margin-bottom:7px;"><tbody><tr><td style="width:33%; text-align:center" class="selected"><a href="javascript:void(0)" id="AR_FSWallBreaker">Wall Breaker</a></td><td style="width:33%; text-align:center"><a href="javascript:void(0)" id="AR_FSHitkeys">Sneltoetsen</a></td><td style="width:33%; text-align:center"><a href="javascript:void(0)" id="AR_FSKata">Overig</a></td></tr></tbody></table>';
  366. // WallBreaker settings
  367. menu += '<div id="AR_FSWallBreakerSettings"><table style="margin:0 auto;" 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></div>';
  368. // hitkey settings
  369. menu += '<div id="AR_FSHitkeysSettings" style="display:none;"><table style="width:300px;margin:0 auto;"><tbody><tr><th colspan="2">Verzamelplaats</th></tr><tr><td>WallBreaker-knop: </td><td><input type="text" name="AR_HitKeyWallBreakerButton" id="AR_HitKeyWallBreakerButton" class="AR_FSHitKeys" value="" data-keycode=""/></td></tr><tr><td>BB-Shaper-knop: </td><td><input type="text" name="AR_HitKeyBBShaperButton" id="AR_HitKeyBBShaperButton" class="AR_FSHitKeys" value="" data-keycode=""/></td></tr></tbody></table><div style="clear:both"></div></div>';
  370. // Cats settings
  371. menu += '<div id="AR_FSKataSettings" style="display:none;"><table style="float:left;width:45%;" class="vis"><tr><td><input type="checkbox" name="AR_FSactivateSpear" id="AR_FS_UnitActivate_spear" value=""></td><td>Aantal speer per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['spear'].amount + '" id="AR_FarmShaperAmount_spear"/></td></tr><tr><td><input type="checkbox" name="AR_FSactivateSword" id="AR_FS_UnitActivate_sword" value=""></td><td>Aantal zwaard per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['sword'].amount + '" id="AR_FarmShaperAmount_sword"/></td></tr><tr><td><input type="checkbox" name="AR_FSactivateAxe" id="AR_FS_UnitActivate_axe" value=""></td><td>Aantal bijl per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['axe'].amount + '" id="AR_FarmShaperAmount_axe"/></td></tr><tr><td><input type="checkbox" name="AR_FSactivateArcher" id="AR_FS_UnitActivate_archer" value=""></td><td>Aantal boog per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['archer'].amount + '" id="AR_FarmShaperAmount_archer"/></td></tr><tr><td><input type="checkbox" name="AR_FSactivateSpy" id="AR_FS_UnitActivate_spy" value=""></td><td>Aantal Scouts per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['spy'].amount + '" id="AR_FarmShaperAmount_spy"/></td></tr><tr><td><input type="checkbox" name="AR_FSactivateLight" id="AR_FS_UnitActivate_light" value=""></td><td>Aantal LC per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['light'].amount + '" id="AR_FarmShaperAmount_light"/></td></tr><tr><td><input type="checkbox" name="AR_FSactivateMarcher" id="AR_FS_UnitActivate_marcher" value=""></td><td>Aantal BB per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['marcher'].amount + '" id="AR_FarmShaperAmount_marcher"/></td></tr><tr><td><input type="checkbox" name="AR_FSactivateHeavy" id="AR_FS_UnitActivate_heavy" value=""></td><td>Aantal ZC per aanval:</td><td><input type="number" value="' + AR_FarmShaperSettings.troops['heavy'].amount + '" id="AR_FarmShaperAmount_heavy"/></td></tr><tr><td colspan="3">&nbsp;</td></tr><tr><td><input type="checkbox" id="AR_SortOnDistance" value=""></td><td colspan="2">Co&ouml;rdinaten sorteren op afstand</td></tr><tr><td><input type="checkbox" id="AR_MultipleAttacksOneTarget" value=""></td><td colspan="2">Meerdere kata-aanvallen per dorp</td></tr><tr><td><input type="checkbox" id="AR_ShapeVillagesWithHighMines" value=""></td><td colspan="2">dorpen met uitgebouwde mijnen ook shapen</td></tr></table><div style="float:left;width:45%;margin-left:20px;" 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_Adelshoeve"><input type="number" style="width:30px;float:left;" value="' + (AR_FarmShaperSettings.DemolitionOrder.indexOf("Adelshoeve") + 1) + '"/><span style="width:113px;display:block;float:left;">Adelshoeve</span><input type="number" value="' + AR_FarmShaperSettings.CatsTargets.Adelshoeve + '"></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>';
  372. a.innerHTML = menu;
  373. for( var key in AR_FarmShaperSettings.troops ) {
  374. $( '#AR_FS_UnitActivate_' + key ).prop( "checked", AR_FarmShaperSettings.troops[key].activated );
  375. }
  376. $( '#AR_SortOnDistance' ).prop( 'checked', AR_FarmShaperSettings.SortOnDistance );
  377. $( '#AR_MultipleAttacksOneTarget' ).prop( 'checked', AR_FarmShaperSettings.MultipleAttacksOneTarget );
  378. $( '#AR_ShapeVillagesWithHighMines' ).prop( 'checked', AR_FarmShaperSettings.shapeVillagesWithHighMines );
  379.  
  380. for(var hotkey in AR_FarmShaperSettings.hotkeys ) {
  381. if( AR_FarmShaperSettings.hotkeys.hasOwnProperty( hotkey ) ) {
  382. var keyCode = AR_FarmShaperSettings.hotkeys[hotkey];
  383. $("#"+hotkey).val(keyCodeMap[keyCode]).attr('data-keycode', keyCode);
  384. }
  385. }
  386.  
  387. var $FSMenu = $(".AR_FSMenu");
  388. $("#AR_FSWallBreaker").on("click", function(){
  389. if (!$(this).closest('td').hasClass('selected')) {
  390. $("#AR_FSKataSettings, #AR_FSHitkeysSettings").css('display', 'none');
  391. $("#AR_FSWallBreakerSettings").css('display', 'block');
  392. $FSMenu.find(".selected").removeClass("selected");
  393. $(this).closest('td').addClass("selected");
  394. }
  395. });
  396. $("#AR_FSHitkeys").on("click", function(){
  397. if (!$(this).closest('td').hasClass('selected')) {
  398. $("#AR_FSWallBreakerSettings, #AR_FSKataSettings").css('display', 'none');
  399. $("#AR_FSHitkeysSettings").css('display', 'block');
  400. $FSMenu.find(".selected").removeClass("selected");
  401. $(this).closest('td').addClass("selected");
  402. }
  403. });
  404. $("#AR_FSKata").on("click", function(){
  405. if (!$(this).closest('td').hasClass('selected')) {
  406. $("#AR_FSWallBreakerSettings, #AR_FSHitkeysSettings").css('display', 'none');
  407. $("#AR_FSKataSettings").css('display', 'block');
  408. $FSMenu.find(".selected").removeClass("selected");
  409. $(this).closest('td').addClass("selected");
  410. }
  411. });
  412. $(".AR_FSHitKeys").on('keyup', function(e){
  413. $(this).val(keyCodeMap[e.which]).attr('data-keycode', e.which);
  414. });
  415.  
  416. $( '#AR_FarmShaperSettingsPopupSluiten' ).on( 'click', function () {
  417. AR_FarmShaperSettings.RamPerWall = {
  418. 1 : parseInt( $( '#RamPerWallLvl1' ).val() ),
  419. 2 : parseInt( $( '#RamPerWallLvl2' ).val() ),
  420. 3 : parseInt( $( '#RamPerWallLvl3' ).val() ),
  421. 4 : parseInt( $( '#RamPerWallLvl4' ).val() ),
  422. 5 : parseInt( $( '#RamPerWallLvl5' ).val() ),
  423. 6 : parseInt( $( '#RamPerWallLvl6' ).val() ),
  424. 7 : parseInt( $( '#RamPerWallLvl7' ).val() ),
  425. 8 : parseInt( $( '#RamPerWallLvl8' ).val() ),
  426. 9 : parseInt( $( '#RamPerWallLvl9' ).val() ),
  427. 10: parseInt( $( '#RamPerWallLvl10' ).val() ),
  428. 11: parseInt( $( '#RamPerWallLvl11' ).val() ),
  429. 12: parseInt( $( '#RamPerWallLvl12' ).val() ),
  430. 13: parseInt( $( '#RamPerWallLvl13' ).val() ),
  431. 14: parseInt( $( '#RamPerWallLvl14' ).val() ),
  432. 15: parseInt( $( '#RamPerWallLvl15' ).val() ),
  433. 16: parseInt( $( '#RamPerWallLvl16' ).val() ),
  434. 17: parseInt( $( '#RamPerWallLvl17' ).val() ),
  435. 18: parseInt( $( '#RamPerWallLvl18' ).val() ),
  436. 19: parseInt( $( '#RamPerWallLvl19' ).val() ),
  437. 20: parseInt( $( '#RamPerWallLvl20' ).val() )
  438. };
  439. for( var key in AR_FarmShaperSettings.troops ) {
  440. AR_FarmShaperSettings.troops[ key ].activated = $( '#AR_FS_UnitActivate_' + key ).is( ':checked' );
  441. AR_FarmShaperSettings.troops[ key ].amount = parseInt( $( '#AR_FarmShaperAmount_' + key ).val() );
  442. }
  443. AR_FarmShaperSettings.SortOnDistance = $( '#AR_SortOnDistance' ).is( ':checked' );
  444. AR_FarmShaperSettings.MultipleAttacksOneTarget = $( '#AR_MultipleAttacksOneTarget' ).is( ':checked' );
  445. AR_FarmShaperSettings.shapeVillagesWithHighMines = $( '#AR_ShapeVillagesWithHighMines' ).is( ':checked' );
  446.  
  447. AR_FarmShaperSettings.hotkeys = {
  448. "AR_HitKeyWallBreakerButton": $("#AR_HitKeyWallBreakerButton").attr('data-keycode')*1,
  449. "AR_HitKeyBBShaperButton": $("#AR_HitKeyBBShaperButton").attr('data-keycode')*1
  450. }
  451.  
  452. $( '#AR_FarmShaper_Buildings' ).children( 'div' ).each( function () {
  453. var $this = $( this );
  454. var $this_input = $this.find( 'input' );
  455. var AR_newIndexBuilding = parseInt($this_input.first().val()) - 1;
  456. var AR_Building = $this.find( 'span' ).text();
  457. var AR_NewMinimumLvl = parseInt($this_input.last().val())
  458. if ( AR_Building.match( /Hoofdgebouw|Boerderij|Opslagplaats/i ) ) {
  459. if ( AR_NewMinimumLvl < 1 ) {
  460. AR_FarmShaperSettings.CatsTargets[AR_Building] = 1;
  461. } else {
  462. AR_FarmShaperSettings.CatsTargets[AR_Building] = AR_NewMinimumLvl;
  463. }
  464. } else {
  465. AR_FarmShaperSettings.CatsTargets[AR_Building] = AR_NewMinimumLvl;
  466. }
  467. AR_FarmShaperSettings.DemolitionOrder[AR_newIndexBuilding] = AR_Building;
  468. } )
  469.  
  470. localStorage.setItem( 'AR_FarmShaperSettings', JSON.stringify( AR_FarmShaperSettings ) );
  471. location.reload();
  472. } )
  473. } );
  474. // switch to see on which page the user is and do the stuff on the right page
  475. switch ( game_data.screen ) {
  476. case "am_farm":
  477. var $am_widget_farm = $( "#am_widget_Farm" ); //Cache selectors we use multiple times
  478. var $am_widget_farm_tr = $am_widget_farm.find( 'tr' );
  479. $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>')
  480. $( '#AR_FarmShaper_Wall' ).click( function () {
  481. var indexCoordsColumn = $am_widget_farm_tr.find( 'th:contains("Dorp")' ).index();
  482. var indexWallColumn = $am_widget_farm_tr.find( 'th:has(img[src*="wall.png"])' ).index();
  483. $am_widget_farm.find( 'tr[class*="report"]' ).each( function () {
  484. var $this_td = $( this ).find( 'td' );
  485. var $this_td_coordsColumn_a = $this_td.eq( indexCoordsColumn ).find( 'a' );
  486. var coords = $this_td.eq( indexCoordsColumn ).text().match( /\d{1,3}\|\d{1,3}/ );
  487. var wall = parseInt( $this_td.eq( indexWallColumn ).text() );
  488. if ( wall > 0 ) {
  489. AR_FarmShaper_Coords_WallLvls[coords] = wall;
  490. $this_td_coordsColumn_a.text( "FarmShaper: Het muurlevel is opgeslagen!" );
  491. } else if( isNaN(wall) ) {
  492. $this_td_coordsColumn_a.text( "FarmShaper: Het muurlevel is onbekend" );
  493. } else {
  494. $this_td_coordsColumn_a.text( "FarmShaper: De muur is lvl 0 " );
  495. }
  496. } );
  497. localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  498. $( '#AR_FarmShaper_Last_td' ).after( '<td style="font-weight:bold;">de dorpen op deze pagina zijn opgeslagen</td>' );
  499. } );
  500.  
  501. $( '#AR_FarmShaper_Buildings' ).click( function () {
  502. var indexCoordsColumn = $am_widget_farm_tr.find( 'th:contains("Dorp")' ).index();
  503. $am_widget_farm.find( 'tr[class*="report"]' ).each( function () {
  504. var $this_td = $( this ).find( 'td' );
  505. var $this_td_coordsColumn_a = $this_td.eq( indexCoordsColumn ).find( 'a' )
  506. var AR_ReportURL = $this_td_coordsColumn_a.attr( 'href' );
  507. $.ajax( {
  508. url: "https://" + location.host + AR_ReportURL,
  509. async: false,
  510. success: function ( result ) {
  511. var $result = $( result );
  512. var $attack_spy_building_data = $result.find( '#attack_spy_building_data' );
  513. var $attack_info_def = $result.find( '#attack_info_def' );
  514.  
  515. if ( $attack_spy_building_data.length > 0 ) {
  516. var coord = $attack_info_def.find( '.village_anchor' ).text().match( /\d{1,3}\|\d{1,3}/ );
  517. var buildings = JSON.parse( $attack_spy_building_data.val() );
  518. AR_FarmShaper_Coords_BuildingLvls[coord] = {};
  519. $.each( buildings, function () {
  520. var name = this.name;
  521. var level = parseInt( this.level );
  522. if ( !name.match( /Kerk|Adelshoeve|Schuilplaats/i ) ) {
  523. AR_FarmShaper_Coords_BuildingLvls[coord][name] = level;
  524. if ( name.match( /Muur/i ) && level > 0 ) {
  525. AR_FarmShaper_Coords_WallLvls[coord] = level;
  526. }
  527. }
  528. })
  529. localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  530. localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  531. $this_td_coordsColumn_a.text( "FarmShaper: de gebouwlevels in dit rapport zijn opgeslagen!" );
  532. } else {
  533. $this_td_coordsColumn_a.text( 'FarmShaper: Geen gebouwlevels gevonden!' );
  534. }
  535.  
  536. }
  537. } ).fail( function () {
  538. alert( "error" );
  539. } )
  540. } );
  541. $( '#AR_FarmShaper_Last_td' ).after( '<td style="font-weight:bold;">de dorpen op deze pagina zijn opgeslagen</td>' );
  542. } );
  543.  
  544. $( '#AR_FarmShaper_remove_old_list' ).click( function () {
  545. delete localStorage['AR_FarmShaper_Coords_WallLvls'];
  546. AR_FarmShaper_Coords_WallLvls = {};
  547. delete localStorage['AR_FarmShaper_Coords_BuildingLvls'];
  548. AR_FarmShaper_Coords_BuildingLvls = {};
  549. alert( 'oude gegevens zijn gewist' );
  550. } );
  551. break;
  552. case "place":
  553. if ( location.href.match( 'try=confirm' ) ) {
  554. if ( localStorage['AR_FarmShaperKataTarget'] != undefined ) {
  555. $( "select[name='building']" ).val( $( 'option:contains(' + localStorage['AR_FarmShaperKataTarget'] + ')' ).val() );
  556. delete localStorage['AR_FarmShaperKataTarget'];
  557. }
  558. } else {
  559. var villagesToGoForFarmShaper_Wall = $.map( AR_FarmShaper_Coords_WallLvls, function ( n, i ) { return i; } ).length;
  560. var villagesToGoForFarmShaper_Buildings = $.map( AR_FarmShaper_Coords_BuildingLvls, function ( n, i ) { return i; } ).length;
  561.  
  562. $( '.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>');
  563. $( '#AR_StartFarmShaper_Wall' ).click( function () {
  564. FarmShaperPlace( AR_FarmShaper_Coords_WallLvls, "wall" );
  565. } );
  566. $( '#AR_StartFarmShaper_Buildings' ).click( function () {
  567. FarmShaperPlace( AR_FarmShaper_Coords_BuildingLvls, "buildings" );
  568. } );
  569.  
  570.  
  571. $( document ).on( "keydown", function( event ) {
  572. switch ( event.which ) {
  573. case AR_FarmShaperSettings.hotkeys.AR_HitKeyWallBreakerButton:
  574. FarmShaperPlace( AR_FarmShaper_Coords_WallLvls, "wall" );
  575. break;
  576. case AR_FarmShaperSettings.hotkeys.AR_HitKeyBBShaperButton:
  577. FarmShaperPlace( AR_FarmShaper_Coords_BuildingLvls, "buildings" );
  578. break;
  579. default:
  580. break;
  581. }
  582. } )
  583.  
  584. }
  585. break;
  586. case "report":
  587. var $content_value = $( '#content_value' );
  588. var $content_value_h2 = $content_value.find( 'h2' );
  589. $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>')
  590.  
  591. $( '.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>');
  592.  
  593. $( '#AR_FarmShaper_remove_old_list' ).click( function () {
  594. delete localStorage['AR_FarmShaper_Coords_WallLvls'];
  595. AR_FarmShaper_Coords_WallLvls = {};
  596. delete localStorage['AR_FarmShaper_Coords_BuildingLvls'];
  597. AR_FarmShaper_Coords_BuildingLvls = {};
  598. alert( 'oude gegevens zijn gewist' );
  599. } );
  600.  
  601. if ( location.href.match( 'view=' ) ) {
  602. $( '#AR_FarmShaper' ).css( 'display', 'block' );
  603. var $attack_spy_building_data = $( '#attack_spy_building_data' );
  604. var $attack_info_def = $( '#attack_info_def' );
  605.  
  606. if ( $attack_info_def.find( 'tr' ).first().find( 'a' ).length < 1 ) {
  607. if ( $attack_spy_building_data.length > 0 ) {
  608. var coord = $attack_info_def.find( '.village_anchor' ).text().match( /\d{1,3}\|\d{1,3}/ );
  609. var buildings = JSON.parse( $attack_spy_building_data.val() );
  610. AR_FarmShaper_Coords_BuildingLvls[coord] = {};
  611. $.each( buildings, function () {
  612. var name = this.name;
  613. var level = parseInt( this.level );
  614. if ( !name.match( /Kerk|Schuilplaats/i ) ) {
  615. AR_FarmShaper_Coords_BuildingLvls[coord][name] = level;
  616. if ( name.match( /Muur/i ) && level > 0 ) {
  617. AR_FarmShaper_Coords_WallLvls[coord] = level;
  618. }
  619. }
  620. })
  621. localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  622. localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  623. $( '#AR_FarmShaper' ).text( "FarmShaper: de gebouwlevels in dit rapport zijn opgeslagen!" );
  624. } else {
  625. $( '#AR_FarmShaper' ).text( 'FarmShaper: Geen gebouwlevels gevonden!' );
  626. }
  627. } else {
  628. $( '#AR_FarmShaper' ).text( 'FarmShaper: Werkt alleen bij verlaten dorpen!' );
  629. }
  630. } else {
  631. var $AR_FarmShaper_Save_Buildings_Fast = $( '#AR_FarmShaper_Save_Buildings_Fast' );
  632. $AR_FarmShaper_Save_Buildings_Fast.closest( 'tr' ).css( 'display', 'block' );
  633.  
  634. $AR_FarmShaper_Save_Buildings_Fast.on( 'click', function () {
  635. $( '#AR_FarmShaper' ).css( 'display', 'block' );
  636. $( '#report_list' ).find( 'tr' ).each( function () {
  637. var $this = $( this );
  638. var $this_td = $this.find( 'td' );
  639. if ( $this_td.has( 'img[src*="farm.png"]' ).length > 0 || $this_td.has( 'img[src*="attack"]' ).length > 0 ) {
  640. var AR_ReportURL = $this.find( '.quickedit-content' ).find( 'a' ).attr( 'href' );
  641. $.ajax( {
  642. url: "https://" + location.host + AR_ReportURL,
  643. async: false,
  644. success: function ( result ) {
  645. var $result = $( result );
  646. var $attack_spy_building_data = $result.find( '#attack_spy_building_data' );
  647. var $attack_info_def = $result.find( '#attack_info_def' );
  648.  
  649. if ( $attack_info_def.find( 'tr' ).first().find( 'a' ).length < 1 ) {
  650. if ( $attack_spy_building_data.length > 0 ) {
  651. var coord = $attack_info_def.find( '.village_anchor' ).text().match( /\d{1,3}\|\d{1,3}/ );
  652. var buildings = JSON.parse( $attack_spy_building_data.val() );
  653. AR_FarmShaper_Coords_BuildingLvls[coord] = {};
  654. $.each( buildings, function () {
  655. var name = this.name;
  656. var level = parseInt( this.level );
  657. if ( !name.match( /Kerk|Schuilplaats/i ) ) {
  658. AR_FarmShaper_Coords_BuildingLvls[coord][name] = level;
  659. if ( name.match( /Muur/i ) && level > 0 ) {
  660. AR_FarmShaper_Coords_WallLvls[coord] = level;
  661. }
  662. }
  663. })
  664. localStorage['AR_FarmShaper_Coords_BuildingLvls'] = JSON.stringify( AR_FarmShaper_Coords_BuildingLvls );
  665. localStorage['AR_FarmShaper_Coords_WallLvls'] = JSON.stringify( AR_FarmShaper_Coords_WallLvls );
  666. $this.find( '.quickedit-label' ).text( "FarmShaper: de gebouwlevels in dit rapport zijn opgeslagen!" );
  667. } else {
  668. $this.find( '.quickedit-label' ).text( 'FarmShaper: Geen gebouwlevels gevonden!' );
  669. }
  670. } else {
  671. $this.find( '.quickedit-label' ).text( 'FarmShaper: Werkt alleen bij verlaten dorpen!' );
  672. }
  673.  
  674. }
  675. } ).fail( function () {
  676. alert( "error" );
  677. } )
  678. }
  679. } )
  680. $( '#AR_FarmShaper' ).text( 'FarmShaper: Opgeslagen!' );
  681. } )
  682. }
  683. break;
  684. }
  685.  
  686. // $( document ).on( "keypress", function( event ) {
  687. // switch ( event.which ) {
  688. // case AR_FarmShaperSettings.hotkeys.WallB
  689. // }
  690. // } )
  691. } );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement