Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // var troopSend = {axe:100,sword:100,light:20,heavy:20};
- var backgroundColor = "#32313f";
- var borderColor = "#3e6147";
- var headerColor = "#202825";
- var titleColor = "#ffffdf";
- var countApiKey = "barb_shaper";
- var countNameSpace="madalinoTribalWarsScripts"
- var troopsPop = {
- spear : 1,
- sword : 1,
- axe : 1,
- archer : 1,
- spy : 2,
- light : 4,
- marcher : 5,
- heavy : 6,
- ram : 5,
- catapult : 8,
- knight : 10,
- snob : 100,
- militia:1
- };
- var buildingLevel={
- level1: 2,
- level2: 2,
- level3: 3,
- level4: 3,
- level5: 3,
- level6: 3,
- level7: 3,
- level8: 3,
- level9: 4,
- level10: 4,
- level11: 4,
- level12: 5,
- level13: 5,
- level14: 6,
- level15: 6,
- level16: 6,
- level17: 7,
- level18: 8,
- level19: 8,
- level20: 9,
- level21: 10,
- level22: 10,
- level23: 11,
- level24: 12,
- level25: 13,
- level26: 15,
- level27: 16,
- level28: 17,
- level29: 19,
- level30: 20,
- }
- function createMainInterface(){
- let html_info=`
- <div id="div_container_view" class="ui-widget-content div_remove" style="width:600px;background-color:${backgroundColor};cursor:move;z-index:50;">
- <div class="close-btn" class="btn_close" onclick="closeWindow()" style="position:absolute;top:10px;right: 10px;"><b><a href=#><font color="${titleColor}">X</font></b></a></div>
- <h2><center style="margin:10px"><u><font color="${titleColor}">Barbs shaper</font></u></center></h2>
- <center>
- <input class="btn evt-confirm-btn btn-confirm-yes" type="button" onclick="createTableSettings()" style="margin:10px" value="Settings">
- <input class="btn evt-confirm-btn btn-confirm-yes" type="button" onclick="calculatesLaunches()" id="btn_start" style="margin:10px" value="start">
- </center>
- <center style="margin:10px" ><div id="div_settings" hidden> </div></center>
- <div id="div_parent_wall" hidden>
- <a href="#"> <center style="margin:10px"><font color="${titleColor}" onclick="$('#div_wall').toggle(500)">downgrade wall</font></center></a>
- <center style="margin:10px" ><div id="div_wall" > </div></center>
- </div>
- <div id="div_parent_main" hidden>
- <a href="#" ><center style="margin:10px"><font color="${titleColor}" onclick="$('#div_main').toggle(500)">downgrade main</font></center></a>
- <center style="margin:10px" ><div id="div_main" > </div></center>
- </div>
- <div id="div_parent_barracks" hidden>
- <a href="#" ><center style="margin:10px"><font color="${titleColor}" onclick="$('#div_barracks').toggle(500)">downgrade barracks</font></center></a>
- <center style="margin:10px" ><div id="div_barracks" > </div></center>
- </div>
- <div id="div_parent_stable" hidden>
- <a href="#" ><center style="margin:10px"><font color="${titleColor}" onclick="$('#div_stable').toggle(500)">downgrade stable</font></center></a>
- <center style="margin:10px" ><div id="div_stable" > </div></center>
- </div>
- <div id="div_parent_market" hidden>
- <a href="#" ><center style="margin:10px"><font color="${titleColor}" onclick="$('#div_market').toggle(500)">downgrade market</font></center></a>
- <center style="margin:10px" ><div id="div_market" > </div></center>
- </div>
- <div id="div_parent_farm" hidden>
- <a href="#" ><center style="margin:10px"><font color="${titleColor}" onclick="$('#div_farm').toggle(500)">downgrade farm</font></center></a>
- <center style="margin:10px" ><div id="div_farm" > </div></center>
- </div>
- <div id="div_table_view" hidden> </div>
- <div id="div_table_send" > </div>
- </div>`
- ////////////////////////////////////////add and remove window from page///////////////////////////////////////////
- $("#div_container_view").remove()
- $("#contentContainer").eq(0).prepend(html_info);
- $("#mobileContent").eq(0).prepend(html_info);
- //for mobile browser
- if(game_data.device=="desktop"){
- $("#div_container_view").css("position","fixed");
- $("#div_container_view").draggable();
- }
- }
- createMainInterface()
- createTableSettings()
- function closeWindow(){
- document.getElementById("div_container").remove();
- }
- function hitCountApi(){
- $.getJSON(`https://api.countapi.xyz/hit/${countNameSpace}/${countApiKey}`, response=>{
- console.log(`This script has been run ${response.value} times`);
- });
- }
- hitCountApi()
- async function calculatesLaunches(){
- let mapBuildings = await getBuildings()
- let listTroops = getTroops()
- let downgradeBuildings = Array.from($("#settings_table input[type=checkbox]:checked")).map(e=>e.value.replace("downgrade_",""))
- let nr_launches=parseInt(document.getElementById("nr_launches").value)
- nr_launches=(Number.isNaN(nr_launches)==true || nr_launches==0)?100:nr_launches
- let extra_level=parseInt(document.getElementById("extra_level").value)
- extra_level=(Number.isNaN(extra_level)==true || extra_level>=10)?1:extra_level
- let sendEscort = $("input[type=checkbox][value=escort_cats]").is(":checked")
- console.log("mapBuildings",mapBuildings)
- console.log("listTroops",listTroops)
- if(downgradeBuildings.length==0){
- UI.ErrorMessage("select downgrade building from settings")
- }
- let mapLaunches=new Map()
- let startCalcLaunches=new Date().getTime()
- let output_barbs_error=""
- let count_launches=0
- Array.from(mapBuildings.keys()).forEach(key=>{
- let obj_buildings=mapBuildings.get(key)
- let coordBarb=key
- let xBarb=coordBarb.split("|")[0]
- let yBarb=coordBarb.split("|")[1]
- //calculate distance for current barb
- for(let i=0;i<listTroops.length;i++){
- let distance=calcDistance(listTroops[i].coord,key)
- listTroops[i].distance=distance
- }
- //sort own coords by distance from the current barb
- listTroops.sort((o1,o2)=>{
- return (o1.distance > o2.distance)?1:(o1.distance < o2.distance)?1:0
- })
- //for each building selected
- for(let i=0;i<downgradeBuildings.length;i++){
- let keyBuilding=downgradeBuildings[i]
- $(`#div_parent_${keyBuilding}`).show()
- //show only x launches
- if(count_launches>nr_launches){
- break;
- }
- //if wall is higher than 10 ignore this barb
- if(obj_buildings["wall"]!=undefined){
- if(obj_buildings["total_pop"]>0){
- let error=`barb ${key} has ${obj_buildings["total_pop"]}`
- console.log(error)
- output_barbs_error+=error+"\n"
- break;
- }
- else if(obj_buildings["wall"].level>10){
- let error=`barb ${key} has wall at lv${obj_buildings["wall"].level}`
- console.log(error)
- output_barbs_error+=error+"\n"
- break;
- }
- }
- if(obj_buildings[keyBuilding]!=undefined){//some buildings have level 0
- //for each own coord
- for(let j=0;j<listTroops.length;j++){
- let levelBuilding=obj_buildings[keyBuilding].level
- let nameBuilding=obj_buildings[keyBuilding].name
- // console.log(nameBuilding,levelBuilding)
- for(let k=levelBuilding;k>0;k--){//for each level building downgrade if it's possible
- let level_cat=extra_level+k
- let nrCats=buildingLevel[`level${level_cat}`]//cats need it for downgrading 1 level
- let href_rally=listTroops[j].linkBase
- if(listTroops[j].availableTroupes["catapult"] >= nrCats && obj_buildings[keyBuilding].level > 0 ){//if has enough cats for the current level
- //if a building except wall has lv 1 break loop
- if(keyBuilding != "wall" && obj_buildings[keyBuilding].level == 1){
- break;
- }
- //check if exist a small amount of axe, ligh, sword or heavy to send with cats
- if(keyBuilding == "wall" || sendEscort == true ){
- if(listTroops[j].availableTroupes["axe"] > troopSend["axe"] && troopSend["axe"]>0 ){
- href_rally+=`&axe=${troopSend["axe"]}&`
- listTroops[j].availableTroupes["axe"]=listTroops[j].availableTroupes["axe"]-troopSend["axe"]
- }
- else if(listTroops[j].availableTroupes["light"] > troopSend["light"] && troopSend["light"]>0){
- href_rally+=`&light=${troopSend["light"]}&`
- listTroops[j].availableTroupes["light"]=listTroops[j].availableTroupes["light"]-troopSend["light"]
- }
- else if(listTroops[j].availableTroupes["sword"] > troopSend["sword"] && troopSend["sword"]>0){
- href_rally+=`&sword=${troopSend["sword"]}&`
- listTroops[j].availableTroupes["sword"]=listTroops[j].availableTroupes["sword"]-troopSend["sword"]
- }
- else if(listTroops[j].availableTroupes["heavy"] > troopSend["heavy"] && troopSend["heavy"]>0){
- href_rally+=`&heavy=${troopSend["heavy"]}&`
- listTroops[j].availableTroupes["heavy"]=listTroops[j].availableTroupes["heavy"] - troopSend["heavy"]
- }
- else{
- break;//if wall cannot be downgraded go to the next own coord
- }
- }
- href_rally+=`&catapult=${nrCats}&x=${xBarb}&y=${yBarb}`
- //add launches by building
- if(mapLaunches.has(keyBuilding)){
- let list_launches=mapLaunches.get(keyBuilding)
- list_launches.push(href_rally)
- mapLaunches.set(keyBuilding,list_launches)
- count_launches++
- }else{
- mapLaunches.set(keyBuilding,[
- href_rally
- ])
- count_launches++
- }
- //update troops and level buildings
- listTroops[j].availableTroupes["catapult"] = listTroops[j].availableTroupes["catapult"]-nrCats
- obj_buildings[keyBuilding].level = obj_buildings[keyBuilding].level-1
- //not enough cats break loop
- if(listTroops[j].availableTroupes["catapult"] < 1){
- break;
- }
- }
- }
- // if every building was downgraded break the loop
- let leftLevelBuildings=0;
- for(let k=0;k<downgradeBuildings.length;k++){
- let keyBuildingCheck=downgradeBuildings[k]
- if(obj_buildings[keyBuildingCheck]!=undefined)
- leftLevelBuildings += obj_buildings[keyBuildingCheck].level
- }
- // console.log("leftLevelBuildings",leftLevelBuildings)
- if(downgradeBuildings.length >= leftLevelBuildings){
- break;
- }
- }
- }
- }
- })
- let stopCalcLaunches=new Date().getTime()
- console.log("time process: "+(stopCalcLaunches-startCalcLaunches))
- console.log("mapLaunches",mapLaunches)
- Array.from(mapLaunches.keys()).forEach(key=>{
- let list_launch = mapLaunches.get(key)
- let divId=`div_${key}`
- createButtons(list_launch,divId)
- })
- document.getElementById("btn_start").setAttribute("get_troops","true")
- }
- ////////////////////////////////////////////////get troops from combined page////////////////////////////////////////////////////////////////////
- function getTroops(){
- let url_combined=game_data.link_base_pure+"overview_villages&mode=combined"
- if(document.getElementById("combined_table")==null){
- document.body.innerHTML=httpGet(url_combined);
- console.log("create main interface")
- createMainInterface()
- console.log("create main settings")
- createTableSettings()
- }
- if(document.getElementById("btn_start").getAttribute("get_troops")=="true"){
- console.log("get troops")
- let start=new Date().getTime();
- let text_page=httpGet(url_combined)
- let table=text_page.match(/<table id="combined_table"((.|\n)+)/)[0].split("<\/table>")[0]+"</table>"
- document.getElementById("combined_table").innerHTML=table
- let stop=new Date().getTime();
- console.log("time ajax for refreshing combined table",(stop-start))
- }
- let table_combined=document.getElementById("combined_table").getElementsByTagName("tr")
- let units=game_data.units
- let troops_used=["axe","sword","light","heavy","catapult"]//units for snipes
- let list_available=[]
- for(let i=1;i<table_combined.length;i++){
- let vectorTroupes=Array.from(table_combined[i].getElementsByClassName("unit-item")).map(e=>{return parseInt(e.innerText)})
- let currentCoord=table_combined[i].getElementsByClassName("quickedit-label")[0].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0]
- let linkBase=table_combined[i].getElementsByClassName("quickedit-content")[0].getElementsByTagName("a")[0].href.replace("overview","place")
- // console.log(linkBase)
- // console.log("troupes available",vectorTroupes)
- // console.log(vectorTroupes)
- let availableTroupes={}
- let totalPop=0;
- //create an object with troops available
- for(let j=0;j<units.length-1;j++){
- if(troops_used.includes(units[j])){//get only defensive troops for snipes
- availableTroupes[units[j]]=vectorTroupes[j]
- if(units[j]!="catapult")
- totalPop+=vectorTroupes[j]*troopsPop[units[j]]
- }
- }
- let minimumCats=10
- let minimumPop=50
- // console.log("availableTroupes",availableTroupes)
- if(availableTroupes.catapult >= minimumCats && totalPop >= minimumPop){
- list_available.push({
- coord:currentCoord,
- availableTroupes:availableTroupes,
- linkBase:linkBase
- })
- }
- }
- return list_available
- }
- ////////////////////////////////////////////////go to each report and get lv buildings /////////////////////////////////////////////////////////
- async function getBuildings()
- {
- let report_old_hours=parseInt(document.getElementById("old_reports").value)
- report_old_hours=(Number.isNaN(report_old_hours)==true || report_old_hours==0)?5:report_old_hours
- let folderName = document.getElementById("folder_name").value
- let href_link = await getLinks(report_old_hours,folderName).catch(e=>console.log(e))
- let mapInfoVillages = await getInfoVIllages()
- let mapBuildings=new Map()
- if(href_link == undefined || href_link.length==0){
- UI.ErrorMessage("no reports found",1000)
- throw new Error("no reports found")
- }
- href_link=href_link.reverse()
- console.log("Starting...");
- const run = async () => {
- for(let i=0;i<href_link.length;i++){
- document.body.innerHTML=await ajaxGetData(href_link[i])
- if(document.getElementsByClassName("village_anchor").length==0){
- alert("captcha on, resolve captcha and rerun the script")
- throw new Error("captcha")
- }
- let coordDefender=document.getElementsByClassName("village_anchor")[1].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
- if(document.getElementById("attack_spy_building_data")!=null && mapInfoVillages.has(coordDefender)){//&& mapInfoVillages.has(coordDefender)
- let list_buildings=JSON.parse(document.getElementById("attack_spy_building_data").value)
- let obj_buildings={}
- for(let j=0;j<list_buildings.length;j++){
- obj_buildings[list_buildings[j].id]={
- name:list_buildings[j].name,
- level:parseInt(list_buildings[j].level)
- }
- }
- var defenseInfo = $("#attack_info_def");
- let defendingArmy = defenseInfo.find('#attack_info_def_units tr:nth-of-type(2) .unit-item').get().map((el) => { return { type: $(el).prop('class').match(/unit-item-([\w\-]+)/)[1], count: parseInt($(el).text().trim()) } })
- let defendingArmyLosses = defenseInfo.find('#attack_info_def_units tr:nth-of-type(3) .unit-item').get().map((el) => { return { type: $(el).prop('class').match(/unit-item-([\w\-]+)/)[1], count: parseInt($(el).text().trim()) } })
- let total_pop=0
- for(let i=0;i<defendingArmy.length;i++){
- let value_troops_remaining = defendingArmy[i].count-defendingArmyLosses[i].count
- total_pop+=value_troops_remaining * troopsPop[defendingArmy[i].type]
- }
- console.log(total_pop)
- obj_buildings.total_pop=total_pop
- mapBuildings.set(coordDefender,obj_buildings)
- }
- UI.InfoMessage("left reports: "+(href_link.length-i))
- }
- };
- await run();
- console.log("Done!");
- // console.log(mapBuildings)
- let url_combined=game_data.link_base_pure+"overview_villages&mode=combined"
- if(document.getElementById("combined_table")==null){
- document.body.innerHTML=httpGet(url_combined);
- console.log("create main interface")
- createMainInterface()
- console.log("create main settings")
- createTableSettings()
- }
- return mapBuildings
- }
- function ajaxGetData(url){
- return new Promise((resolve,reject)=>{
- let start=new Date().getTime()
- $.get(url,(data)=>{
- let stop=new Date().getTime()
- window.setTimeout(()=>{
- resolve(data)
- },200-(stop-start))
- })
- })
- }
- function getLinks(hours,folderName){
- // var currentPage=document.body.innerHTML;
- return new Promise((resolve,reject)=>{
- let list_pages=[]
- let href_reports_all= game_data.link_base_pure+"report&mode=all&group_id=-1";
- document.body.innerHTML=httpGet(href_reports_all)
- let href_loot_assistant=$(`a:contains('${folderName}')`).get(0).href
- document.body.innerHTML=httpGet(href_loot_assistant)
- let page_size=parseInt(document.getElementsByName("page_size")[0].value)
- if(document.getElementsByClassName("vis")[1].getElementsByTagName("select").length>0){
- Array.from(document.getElementsByClassName("vis")[1].getElementsByTagName("select")[0]).forEach(function(item){
- list_pages.push(item.value)
- })
- }
- else if(document.getElementsByClassName("paged-nav-item").length>0){//all pages from the current folder
- let length_page=document.getElementsByClassName("paged-nav-item").length
- for(let i=0;i<length_page+1;i++){
- let current=game_data.link_base_pure+`report&mode=all&from=${i*page_size}`
- list_pages.push(current);
- }
- }
- else{
- let current_link=game_data.link_base_pure+`report&mode=all&from=0`
- list_pages.push(current_link);
- }
- list_pages=list_pages.reverse();
- console.log("list pages")
- console.log(list_pages)
- let list_href=[];
- var indexIncoming=1;
- var url_length=list_pages.length
- function ajaxRequest (urls) {
- let current_url
- if(urls.length>0){
- current_url=urls.pop()
- }
- else{
- current_url="stop"
- }
- console.log("in functie in plm "+urls.length)
- // console.log(current_url)
- var start_ajax=new Date();
- if (urls.length >= 0 && current_url!="stop") {
- $.ajax({
- url: current_url,
- method: 'get',
- success: (data) => {
- document.body.innerHTML=data
- let table_report= document.getElementById("report_list").firstElementChild.children;
- let year=document.getElementById("serverDate").innerText.split("/")[2];
- //get the current date and time server
- let serverTime=document.getElementById("serverTime").innerText
- let serverDate=document.getElementById("serverDate").innerText.split("/")
- serverDate=serverDate[1]+"/"+serverDate[0]+"/"+serverDate[2]
- let date_current=new Date(serverDate+" "+serverTime)
- for(let i=1;i<table_report.length-1;i++){
- let month_day=table_report[i].children[2].innerText;
- let date_report=new Date(year+" "+month_day)
- if(Math.abs(date_current-date_report)<hours*3600*1000){//old
- if($(table_report[i]).find("img[src$='spy.png']").length>0 && $(table_report[i]).find("img[src$='red@2x.png']").length==0){
- let href_page=table_report[i].getElementsByTagName("a")[0].href
- list_href.push(href_page)
- }
- }
- }
- UI.InfoMessage("page "+indexIncoming+"/"+url_length)
- indexIncoming++;
- var stop_ajax=new Date();
- var dif_time=stop_ajax.getTime()-start_ajax.getTime();
- window.setTimeout(function(){
- ajaxRequest (list_pages)
- },200-dif_time)
- }
- })
- }
- else
- {
- UI.SuccessMessage("done",2000)
- resolve(list_href)
- }
- }
- if(list_pages.length>0)
- ajaxRequest(list_pages);
- else
- reject("error??")
- })
- }
- function httpGet(theUrl){
- var xmlHttp = new XMLHttpRequest();
- xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
- xmlHttp.send( null );
- return xmlHttp.responseText;
- }
- function getInfoVIllages(){
- return new Promise((resolve,reject)=>{
- let dataLocalStorage=localStorage.getItem(game_data.word="barbsDB")
- let mapVillageInfo=new Map()
- if(dataLocalStorage==null){
- let url=window.location.href.split("/game.php")[0]
- let dataVillage=httpGet(url+"/map/village.txt").split(/\r?\n/);
- for(let i=0;i<dataVillage.length;i++){
- let coord=dataVillage[i].split(",")[2]+"|"+dataVillage[i].split(",")[3]
- let isBarb=( parseInt(dataVillage[i].split(",")[4])==0 )?0:1 // 0 is barb 1 is not barb
- if(isBarb==0)
- mapVillageInfo.set(coord,isBarb)
- }
- let storeData={
- mapVillageInfo:Array.from(mapVillageInfo.entries()),
- dateInfo:new Date().getTime()
- }
- storeData=JSON.stringify(storeData)
- storeData=lzw_encode(storeData)
- localStorage.setItem(game_data.word="barbsDB",storeData)
- console.log("db barbs doesn't exist, get data")
- resolve(mapVillageInfo)
- }else{
- let dateInfo=new Date(JSON.parse(lzw_decode(dataLocalStorage)).dateInfo).getTime()
- let currentDate=new Date().getTime()
- if(currentDate-dateInfo>3600*1000){//if it's older than 1 hour get new data
- let url=window.location.href.split("/game.php")[0]
- let dataVillage=httpGet(url+"/map/village.txt").split(/\r?\n/);
- for(let i=0;i<dataVillage.length;i++){
- let coord=dataVillage[i].split(",")[2]+"|"+dataVillage[i].split(",")[3]
- let isBarb=( parseInt(dataVillage[i].split(",")[4])==0 )?0:1 // 0 is barb 1 is not barb
- if(isBarb==0)
- mapVillageInfo.set(coord,isBarb)
- }
- let storeData={
- mapVillageInfo:Array.from(mapVillageInfo.entries()),
- dateInfo:new Date().getTime()
- }
- storeData=JSON.stringify(storeData)
- storeData=lzw_encode(storeData)
- localStorage.setItem(game_data.word="barbsDB",storeData)
- console.log("db barbs already exist and it's older than 1 hour")
- resolve(mapVillageInfo)
- }
- else{
- mapVillageInfo=new Map(JSON.parse(lzw_decode(dataLocalStorage)).mapVillageInfo)
- console.log("db barbs from localStorage")
- resolve(mapVillageInfo)
- }
- }
- reject("error")
- })
- }
- ////////////////////////////////////////////////data compression////////////////////////////////////////////////////////////////////////////
- function lzw_encode (s) {
- if (!s) return s;
- var dict = new Map(); // Use a Map!
- var data = (s + "").split("");
- var out = [];
- var currChar;
- var phrase = data[0];
- var code = 256;
- for (var i = 1; i < data.length; i++) {
- currChar = data[i];
- if (dict.has(phrase + currChar)) {
- phrase += currChar;
- } else {
- out.push (phrase.length > 1 ? dict.get(phrase) : phrase.codePointAt(0));
- dict.set(phrase + currChar, code);
- code++;
- if (code === 0xd800) { code = 0xe000; }
- phrase = currChar;
- }
- }
- out.push (phrase.length > 1 ? dict.get(phrase) : phrase.codePointAt(0));
- for (var i = 0; i < out.length; i++) {
- out[i] = String.fromCodePoint(out[i]);
- }
- //console.log ("LZW MAP SIZE", dict.size, out.slice (-50), out.length, out.join("").length);
- return out.join("");
- }
- ////////////////////////////////////////////////data decompression////////////////////////////////////////////////////////////////////////////
- function lzw_decode (s) {
- var dict = new Map(); // Use a Map!
- var data = Array.from(s + "");
- //var data = (s + "").split("");
- var currChar = data[0];
- var oldPhrase = currChar;
- var out = [currChar];
- var code = 256;
- var phrase;
- for (var i = 1; i < data.length; i++) {
- var currCode = data[i].codePointAt(0);
- if (currCode < 256) {
- phrase = data[i];
- } else {
- phrase = dict.has(currCode) ? dict.get(currCode) : (oldPhrase + currChar);
- }
- out.push(phrase);
- var cp = phrase.codePointAt(0);
- currChar = String.fromCodePoint(cp); //phrase.charAt(0);
- dict.set(code, oldPhrase + currChar);
- code++;
- if (code === 0xd800) { code = 0xe000; }
- oldPhrase = phrase;
- }
- return out.join("");
- }
- function calcDistance(coord1,coord2){
- let x1=parseInt(coord1.split("|")[0])
- let y1=parseInt(coord1.split("|")[1])
- let x2=parseInt(coord2.split("|")[0])
- let y2=parseInt(coord2.split("|")[1])
- return Math.sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
- }
- function closeWindow(){
- $("#div_container_view").remove()
- }
- function createTableSettings(){
- let html_table=`
- <table id="settings_table" border="1" style="width: 60%;background-color:${backgroundColor};border-color:${borderColor}">
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center><input type="checkbox" value="downgrade_wall"></center>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <div style="margin:10px"><font color="${titleColor}">downgrade wall</font></div>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center><input type="checkbox" value="downgrade_main"></center>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <div style="margin:10px"><font color="${titleColor}">downgrade main</font></div>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center><input type="checkbox" value="downgrade_barracks"></center>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <div style="margin:10px"><font color="${titleColor}">downgrade barracks</font></div>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center><input type="checkbox" value="downgrade_stable"></center>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}">
- <div style="margin:10px"><font color="${titleColor}">downgrade stable</font></div>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center><input type="checkbox" value="downgrade_market"></center>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <div style="margin:10px"><font color="${titleColor}">downgrade market</font></div>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center><input type="checkbox" value="escort_cats"></center>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <div style="margin:10px"><font color="${titleColor}">cats has escort</font></div>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <div style="margin:10px"><font color="${titleColor}">folder name</font></div>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center> <input type="text" style="text-align:center;" id="folder_name" placeholder="Loot Assistant" ></center>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <div style="margin:10px"><font color="${titleColor}">hide old reports(hours)</font></div>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center> <input type="number" style="text-align:center;" id="old_reports" min="0" max="100" placeholder="10" value="10"></center>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}">
- <div style="margin:10px"><font color="${titleColor}">show nr launches</font></div>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center> <input type="number" style="text-align:center;" id="nr_launches" min="0" max="100" placeholder="500" value="500"></center>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <div style="margin:10px"><font color="${titleColor}">split tabs</font></div>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center> <input type="number" style="text-align:center;" id="nr_split" min="0" max="100" placeholder="20" value="20"></center>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}">
- <div style="margin:10px"><font color="${titleColor}">delay open tabs[ms]</font></div>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center> <input type="number" style="text-align:center;" id="delay_tabs" min="0" max="100" placeholder="200" value="200"></center>
- </td>
- </tr>
- <tr>
- <td style="text-align:left; width:auto; background-color:${headerColor}">
- <div style="margin:10px"><font color="${titleColor}">extra level</font></div>
- </td>
- <td style="text-align:left; width:auto; background-color:${headerColor}" >
- <center> <input type="number" style="text-align:center;" id="extra_level" min="0" max="100" placeholder="0" value="0"></center>
- </td>
- </tr>
- </table>
- `
- if(document.getElementById("settings_table")==null){
- document.getElementById("div_settings").innerHTML=html_table
- document.getElementById("delay_tabs").addEventListener("mouseout",()=>{
- let tab_delay=parseInt(document.getElementById("delay_tabs").value)
- tab_delay=(Number.isNaN(tab_delay)==true || tab_delay<200)?200:tab_delay
- document.getElementById("delay_tabs").value=tab_delay
- })
- if(localStorage.getItem(game_data.world+"shaper_settings_table")!=null ){
- //initialize checkbox
- let list_checkbox=JSON.parse(localStorage.getItem(game_data.world+"shaper_settings_table"))[0]
- $('#div_settings input[type=checkbox]').each(function (index,elem) {
- this.checked=list_checkbox[index]
- // console.log(elem.value)
- });
- //initialize input numbers
- let list_input=JSON.parse(localStorage.getItem(game_data.world+"shaper_settings_table"))[1]
- $('#div_settings input[type=number], input[type=text]').each(function (index,elem) {
- // console.log(elem)
- this.value=list_input[index]
- });
- }
- //save settings
- $("#div_settings input[type=number],input[type=text], #div_settings input[type=checkbox]").on("click input",()=>{
- console.log("save settings")
- let list_checkbox=[]
- let list_input=[]
- //save checkbox
- $('#div_settings input[type=checkbox]').each(function () {
- var checked = this.checked
- list_checkbox.push(checked)
- });
- //save inputs
- $('#div_settings input[type=number],input[type=text]').each(function () {
- // var checked = this.checked
- var value=this.value
- // console.log(value)
- list_input.push(value)
- });
- let list_final=[list_checkbox,list_input]
- let data=JSON.stringify(list_final)
- let data_localStorage=localStorage.getItem(game_data.world+"shaper_settings_table")
- console.log(data)
- console.log(data_localStorage)
- if(data!=data_localStorage){
- localStorage.setItem(game_data.world+"shaper_settings_table",data)
- }
- })
- }
- else{
- $("#div_import").hide()
- $("#div_export").hide()
- $("#div_settings").toggle(500)
- }
- }
- function createButtons(list_href,parent){
- var nrSplit=parseInt(document.getElementById("nr_split").value)
- nrSplit=(Number.isNaN(nrSplit)==true || nrSplit==0)?5:nrSplit
- list_href=list_href.reverse()
- let nr_buttons=Math.ceil(list_href.length/nrSplit)
- let delayTab=parseInt(document.getElementById("delay_tabs").value)
- for(let i=0;i<nr_buttons;i++){
- // console.log("createButton")
- let startFrom=i*nrSplit;
- let stopTo=(i*nrSplit)+nrSplit
- if((i*nrSplit)+nrSplit>list_href.length)
- stopTo=list_href.length
- let btn=document.createElement("button")
- btn.classList="btn evt-confirm-btn btn-confirm-yes open_tab"
- btn.innerText="[ "+startFrom+" - "+stopTo+" ]";
- btn.style.margin="5px"
- btn.onclick=function(){
- let current_hrefs= list_href.slice(startFrom,stopTo)
- // console.log(current_hrefs)
- // console.log(btn)
- btn.classList.remove("evt-confirm-btn")
- btn.classList.remove("btn-confirm-yes")
- btn.classList.add("btn-confirm-no")
- function startOpen(split_list_href){
- let url=split_list_href.pop();
- if(url!=undefined){
- window.open(url, '_blank')
- window.setTimeout(()=>{
- startOpen(split_list_href)
- console.log(url)
- },delayTab)
- }
- }
- startOpen(current_hrefs)
- $(".open_tab").prop('disabled', true)
- window.setTimeout(()=>{
- $(".open_tab").prop('disabled', false)
- },delayTab*(stopTo-startFrom))
- }
- document.getElementById(parent).appendChild(btn)
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement