javascript: //barbarian finder by Sophie "Shinko to Kuma" if (window.location.href.indexOf('map') < 0) { window.location.assign(game_data.link_base_pure + "map"); } else { var currentVillX = game_data.village.x; var currentVillY = game_data.village.y; var barbarianVillages = []; var innerCircle; var outerCircle; var inRangeBarb = []; var barbCoordArray =[]; var backgroundColor = "#36393f"; var borderColor = "#3e4147"; var headerColor = "#202225"; var titleColor = "#ffffdf"; var laPagesLinks = []; var coordinates = []; $.getAll = function ( urls, // array of URLs onLoad, // called when any URL is loaded, params (index, data) onDone, // called when all URLs successfully loaded, no params onError // called when a URL load fails or if onLoad throws an exception, params (error) ) { var numDone = 0; var lastRequestTime = 0; var minWaitTime = 200; // ms between requests loadNext(); function loadNext() { if (numDone == urls.length) { onDone(); return; } let now = Date.now(); let timeElapsed = now - lastRequestTime; if (timeElapsed < minWaitTime) { let timeRemaining = minWaitTime - timeElapsed; setTimeout(loadNext, timeRemaining); return; } console.log('Getting ', urls[numDone]); $("#progress").css("width", `${(numDone + 1) / urls.length * 100}%`); lastRequestTime = now; $.get(urls[numDone]) .done((data) => { try { onLoad(numDone, data); ++numDone; loadNext(); } catch (e) { onError(e); } }) .fail((xhr) => { onError(xhr); }) } }; //check if we got recent version of village list var currentTime = Date.parse(new Date()); var villageListData; if (localStorage.getItem("barbmapVillageTime") != null) { mapVillageTime = localStorage.getItem("barbmapVillageTime"); if (currentTime >= parseInt(mapVillageTime) + 60 * 60 * 24 * 1000) { //hour has passed console.log("Hour has passed, recollecting the village data"); $.get("map/village.txt", function (data) { villageListData = data; localStorage.setItem("barbmapVillageTime", Date.parse(new Date())); localStorage.setItem("barbmapVillageTxt", data); }) .done(function () { finish(villageListData); }); } else { // within same hour console.log("Hour not over yet, waiting to recollect, using old data"); data = localStorage.getItem("barbmapVillageTxt"); finish(data); } } else { //get villageTxt for first time console.log("Grabbing village.txt for the first time"); $.get("map/village.txt", function (data) { villageListData = data; localStorage.setItem("barbmapVillageTime", Date.parse(new Date())); localStorage.setItem("barbmapVillageTxt", data); }) .done(function () { finish(villageListData); }); } function check_a_village(a, b, x, y, i, o) { var dist_points = (a - x) * (a - x) + (b - y) * (b - y); i *= i; o *= o; if (dist_points <= o && dist_points >= i) { return true; } return false; } function finish(list) { villages = CSVToArray(list); for (i = 0; i < villages.length; i++) { if (villages[i][4] == "0") { barbarianVillages.push(villages[i][2] + villages[i][3]); } } console.log("making display"); if ($("#barbScript")[0]) $("#barbScript")[0].remove(); var fakeHtml = `
`; $("#minimap_whole").before(fakeHtml); $("#script").hide(); if (game_data.locale == "ar_AE") { $("#sophieImg").attr("src", "https://media2.giphy.com/media/qYr8p3Dzbet5S/giphy.gif"); } } findBarbs() function findBarbs() { inRangeBarb = []; scriptText = ""; $("#coords")[0].innerHTML = ""; innerCircle = 0; outerCircle = 20; for (var i = 0; i < barbarianVillages.length; i++) { if (barbarianVillages[i] != undefined) { target = barbarianVillages[i]; target = target.toString(); targetX = target.substring(0, 3); targetY = target.substring(3, 6); if (check_a_village(currentVillX, currentVillY, targetX, targetY, innerCircle, outerCircle) == true) { inRangeBarb.push({ targetX, targetY }); }; } } let oldList = localStorage.getItem("mk").split(",") let newItems = inRangeBarb.map((x)=>x.targetX + "|" + x.targetY) let newList = [...new Set([...oldList,...newItems])] localStorage.setItem("mk", newList) console.log(`Added ${newList.length} new villages`) return var scriptText = ""; let arrayCoords="["; for (var j = 0; j < inRangeBarb.length; j++) { scriptText += inRangeBarb[j].targetX + "|" + inRangeBarb[j].targetY + " "; arrayCoords+= '"'+ inRangeBarb[j].targetX + "|" + inRangeBarb[j].targetY+'",'; } arrayCoords=arrayCoords.substring(0, arrayCoords.length - 1) +"]"; barbCoordArray=JSON.parse(arrayCoords); var distance = []; var coordinateHome = currentVillX + "|" + currentVillY; for (k = 0; k < inRangeBarb.length; k++) { target = inRangeBarb[k].targetX + "|" + inRangeBarb[k].targetY; distance.push({"coord":target, "distance":calculateDistance(target, coordinateHome)}); } distance.sort((a,b) => a.distance - b.distance); console.log(distance); let sortedBarbs=""; arrayCoords="["; for(let l=0;lTotal left without LA: ${result.length}
${displayResult}
`; $("#script")[0].innerHTML = `javascript:coords='${displayResult}';var doc=document;if(window.frames.length>0 && window.main!=null)doc=window.main.document;url=doc.URL;if(url.indexOf('screen=place')==-1)alert('Use the script in the rally point page!');coords=coords.split(' ');index=0;farmcookie=document.cookie.match('(^|;) ?farm=([^;]*)(;|$)');if(farmcookie!=null)index=parseInt(farmcookie[2]);if(index>=coords.length)alert('All villages were extracted, now start from the first!');if(index>=coords.length)index=0;coords=coords[index];coords=coords.split('|');index=index+1;cookie_date=new Date(2040,3,27);document.cookie ='farm='+index+';expires='+cookie_date.toGMTString();doc.forms[0].x.value=coords[0];doc.forms[0].y.value=coords[1];$('#place_target').find('input').val(coords[0]+'|'+coords[1]);doc.forms[0].spy.value=1;end();`; }, (error) => { console.error(error); }) } ); } function compareArray(array1, array2) { array1 = Object.values(array1).filter(val => !Object.values(array2).includes(val)); return array1; } }