· 5 years ago · Nov 16, 2020, 01:54 PM
1var backgroundColor = "#32313f";
2var borderColor = "#3e6147";
3var headerColor = "#202825";
4var titleColor = "#ffffdf";
5var dropboxToken='voeQxDKEfdAAAA';
6dropboxToken+="AAAAAAAWmeVbsqR6"
7dropboxToken+="fFyKdfA2gXF05UhE"
8dropboxToken+="t-ztkJqkFZY6PkMTzk"
9
10var file_reports='https://dl.dropboxusercontent.com/s/xetn2b2o57y8qhe/w113ReportsV2.txt?dl=0';
11var file_incomigs='https://dl.dropboxusercontent.com/s/c3kw7hvyi5x6y0p/w113Incomings.txt?dl=0';
12var file_users='https://dl.dropboxusercontent.com/s/gdrdphrpvzo6dg8/w113Users.txt?dl=0';
13var filename_reports="w113ReportsV2.txt";
14var filename_incomings="w113Incomings.txt";
15var filename_users="w113Users.txt";
16var speedWorld=1;
17var speedTroupes=1;
18
19// var file_reports='https://dl.dropboxusercontent.com/s/qdydvdssbrfns92/test.txt?dl=0';
20// var file_incomigs='https://dl.dropboxusercontent.com/s/0acfdzwwhhrcup1/test2.txt?dl=0';
21// var file_users='https://dl.dropboxusercontent.com/s/y7idzygkmwm68k8/test3.txt?dl=0';
22// var filename_reports="test.txt";
23// var filename_incomings="test2.txt";
24// var filename_users="test3.txt";
25
26// var speedWorld=3;
27// var speedTroupes=0.67;
28
29var nobleSpeed=2100*1000/(speedWorld*speedTroupes)//ms
30var ramSpeed=1800*1000/(speedWorld*speedTroupes)//ms
31var swordSpeed=1320*1000/(speedWorld*speedTroupes)//ms
32var axeSpeed=1080*1000/(speedWorld*speedTroupes)//ms
33
34//formula ((base time/100)/speedWorld) * stable time factor //https://forum.tribalwars.net/index.php?threads/next-lvl-of-barracks-unit-production-speed.54638/
35var axeTime=Math.round( ((1320/100.0)/speedWorld) * 15.58823529 ) *1000//milisec
36var lhTime=Math.round( ((1800/100.0)/speedWorld) * 20.88235294 ) *1000//milisec
37var ramTime=Math.round( ((4800/100.0)/speedWorld) * 27.84313725 ) *1000//milisec
38
39
40
41
42//verify acces users
43let response=httpGet(file_users);
44var tribemates=response.split("\n")
45if(!tribemates.includes(game_data.player.name)){
46 UI.ErrorMessage("try later","slow")
47 throw new Error("you do not have acces");
48 // console.log("you do not have acces" )
49}
50if(game_data.locale!="en_DK" && game_data.world!="en113" )
51 throw new Error("it doesn't work");
52
53
54
55var engWord=[
56 "supports",
57 "today",
58 "tomorrow",
59 "on",
60 "attack"
61]
62var roWord=[
63 "sprijină",
64 "astăzi",
65 "mâine",
66 "data",
67 "atac"
68]
69var wordsTranslate=engWord
70
71
72
73 html = `
74 <div id="div_container" class="ui-widget-content" style="width:600px;background-color:${backgroundColor};cursor:move;z-index:50;">
75 <div class="close-btn" id="btn_close" onclick="closeWindow()" style="position:absolute;top:10px;right: 10px;"><b><a href=#><font color="${titleColor}">X</font></b></a></div>
76 <h2><center style="margin:10px"><u><font color="${titleColor}">Upload data</font></u></center></h2>
77 <table id="table_upload" class="" border="1" style="width: 100%;background-color:${backgroundColor};border-color:${borderColor}">
78 <tr>
79 <td style="text-align:center; width:auto; background-color:${headerColor}">
80 <h2><center style="margin:10px"><u><font color="${titleColor}">reports</font></u></center></h2>
81 </td>
82 <td style="text-align:center; width:auto; background-color:${headerColor}">
83 <center style="margin:10px"><u><input class="btn" type="button" id="upload_reports" onclick="uploadReportsManual()" value="Upload manual"></center>
84 <center style="margin:10px"><u><input class="btn" type="button" id="upload_reports" onclick="uploadReports()" value="Upload auto"></center>
85
86 </td>
87
88 <td style="text-align:center; width:auto; background-color:${headerColor}">
89 <p><center style="margin:10px"><font color="${titleColor}" id="progress_reports">progress</font></center></p>
90 </td>
91 </tr>
92 <tr>
93 <td style="text-align:center; width:auto; background-color:${headerColor}">
94 <h2><center style="margin:10px"><u><font color="${titleColor}">incomings</font></u></center></h2>
95 </td>
96 <td style="text-align:center; width:auto; background-color:${headerColor}">
97 <center style="margin:10px"><u><input class="btn" type="button" id="upload_incomings" onclick="uploadIncomings()" value="Upload"></center>
98 </td>
99 <td style="text-align:center; width:auto; background-color:${headerColor}">
100 <p><center style="margin:10px" ><font color="${titleColor}" id="progress_incomings">progress</font></center></p>
101 </td>
102 </tr>
103 <tr>
104 <td style="text-align:center; width:auto; background-color:${headerColor}">
105 <h2><center style="margin:10px"><u><font color="${titleColor}">All info</font></u></center></h2>
106 </td>
107 <td style="text-align:center; width:auto; background-color:${headerColor}">
108 <center style="margin:10px"><u><input class="btn" type="button" onclick="uploadAll()" value="Upload all"></center>
109 </td>
110 <td style="text-align:center; width:auto; background-color:${headerColor}">
111 <p><center style="margin:10px" ><font color="${titleColor}" id="progress_all">progress</font></center></p>
112 </td>
113 </tr>
114 </table>
115 <h2><center style="margin:10px"><u><font color="${titleColor}">Search reports</font></u></center></h2>
116 <table id="table_upload" class="" border="1" style="width: 100%;background-color:${backgroundColor};border-color:${borderColor}">
117 <tr>
118 <td style="text-align:center; width:auto; background-color:${headerColor}">
119 <center style="margin:10px"><u><input class="btn" type="button" onclick="loadReports()" value="Load reports"></center>
120 </td>
121 <td style="text-align:center; width:auto; background-color:${headerColor}">
122 <center style="margin:10px"><u><input style="text-align: center;" type="text" id="input_search" onclick="" placeholder="coord" ></center>
123 </td>
124 <td style="text-align:center; width:auto; background-color:${headerColor}">
125 <p><center style="margin:10px"><font color="${titleColor}" id="progress_search">status</font></center></p>
126 </td>
127 </tr>
128 </table>
129 <center style="margin:10px"><div id="report_view" style="background-color:#d2c09e"> report view <div><center>
130
131 </div>
132 `;
133 ////////////////////////////////////////add and remove window from page///////////////////////////////////////////
134 if(document.getElementById("incomings_table")==null){
135 $("#div_container").remove()
136 $("#contentContainer").eq(0).prepend(html);
137 $("#mobileContent").eq(0).prepend(html);
138
139 if(game_data.device=="desktop"){
140 $("#div_container").css("position","fixed");
141 $("#div_container").draggable();
142 }
143 }
144 function closeWindow(){
145 document.getElementById("div_container").remove();
146 list_href=[]
147 // window.location.reload();
148 }
149
150
151
152 function addWindow(){
153 $("#contentContainer").eq(0).prepend(html);
154 $("#mobileContent").eq(0).prepend(html);
155
156 if(game_data.device=="desktop"){
157 $("#div_container").css("position","fixed");
158 $("#div_container").draggable();
159 }
160 }
161
162 var loadReportsOk=false;
163 $("#input_search").on("input",function(){
164 if(loadReportsOk==false)
165 UI.ErrorMessage("upload reports first","fast")
166 })
167 $("#input_search").mouseout(function(){
168 if(loadReportsOk==false)
169 $("#input_search").val("");
170 })
171
172 if(document.getElementById("incomings_table")!=null){
173 window.setInterval(function(){
174
175 var rows= $(".row_a,.row_b")
176 console.log("check incomings")
177 for(let i=0;i<rows.length;i++)
178 {
179 let currentHour=rows[i].children[rows[i].children.length-1].innerText.split(":")
180 if(parseInt(currentHour[0])==0 && parseInt(currentHour[1])==0 && parseInt(currentHour[2])<20){
181 rows[i].remove();
182 }
183 // else{
184 // break;
185 // }
186 }
187 },10000)
188 }
189
190
191 function uploadAll(){
192 uploadReports(uploadIncomings);
193 }
194
195
196 /////////////////////////////////////////////////get all reports info//////////////////////////////////////////////////////////////////
197 function uploadReports(callback){
198 let list_href=[]
199 document.getElementById("progress_reports").innerText="get links..";
200
201 let nameHistoryReports=game_data.world +"HistoryReports"
202 var map_idReports=new Map();
203 var current_page=window.location.href;
204 if(localStorage.getItem(nameHistoryReports)==null){
205 localStorage.setItem(nameHistoryReports,JSON.stringify(Array.from(new Map().entries())))
206 }
207 else{
208 map_idReports=new Map(JSON.parse(localStorage.getItem(nameHistoryReports)));
209 Array.from(map_idReports.keys()).forEach(el=>{
210 let currentDate=new Date();
211 let reportDate=new Date(map_idReports.get(el))
212 if(currentDate.getTime()- reportDate.getTime() > 20*24*3600*1000){
213 console.log("remove: "+map_idReports.get(el))
214 map_idReports.delete(el)
215 }
216 })
217
218 }
219
220 $(document).on('click','.autoHideBox',function(){
221 UI.SuccessMessage("stop",2000)
222 list_href=[]
223 })
224
225
226 getPromiseListHref=getLinks(true,map_idReports);//only current folder
227 getPromiseListHref.then( result=>{
228 console.log(result)
229 list_href=result;
230 list_href=list_href.reverse();
231 console.log(list_href)
232 var list_data_reports=[]
233 var nr_reports=0;
234 var nr_reports_total=list_href.length
235 addWindow();
236 document.getElementById("progress_reports").innerText=nr_reports+"/"+nr_reports_total+" reports";
237 // UI.InfoMessage(nr_reports+"/"+nr_reports_total+" reports")
238 var current_url
239 function ajaxRequest (urls) {
240 var time= 0
241 if(urls.length>0)
242 current_url=urls.pop().href;
243 else
244 current_url="stop"
245 console.log("in functie in plm "+urls.length)
246 if (urls.length >= 0 && current_url!= "stop") {
247 var start_ajax=new Date()
248 $.ajax({
249 method: 'GET',
250 url: current_url,
251 })
252 .done(function (result) {
253 document.body.innerHTML= result;
254 result=null
255 // addWindow();
256 let list=getDataReport(tribemates);
257 console.log(list)
258 if(list==null ){
259 console.log("recaptcha, upload again")
260 UI.ErrorMessage("recaptcha, upload again","slow")
261 addWindow();
262 document.getElementById("progress_reports").innerText="recaptcha";
263 list_href=[]
264
265 }
266 else{
267 console.log("reports info "+list.length)
268 for(let j=0;j<list.length;j++){
269 list_data_reports.push({"coord":list[j].coord,"reportInfo":list[j].reportInfo});
270 }
271 // document.getElementById("progress_reports").innerText=nr_reports+"/"+nr_reports_total+" reports";
272 UI.SuccessMessage(nr_reports+"/"+nr_reports_total+" reports")
273
274 nr_reports++;
275 let idReport= parseInt(current_url.match(/view=(\d+)/)[1]);
276 let currentDate=new Date().getFullYear()+"-"+(new Date().getMonth()+1)+"-"+new Date().getDate();
277 if(document.getElementsByClassName("unit-item unit-item-axe").length>0){
278 var time_report=document.getElementsByClassName("vis")[3].firstElementChild.children[1].children[1].innerText;
279 map_idReports.set(idReport,time_report)
280 }
281 else{
282 map_idReports.set(idReport,currentDate)
283 }
284 }
285 var stop_ajax=new Date();
286 var dif_time=stop_ajax.getTime()-start_ajax.getTime();
287 console.log("dif_time "+dif_time+" wait "+(200-dif_time))
288 window.setTimeout(function(){
289 ajaxRequest(list_href);
290 },200-dif_time)
291 });
292
293 }
294 else
295 {
296 ////////////////////////////////////extract data from dropbox/////////////////////////////////////////
297 console.log("inainte de a extrage date din dropbox")
298 $.get(file_reports, function (data) {
299 map_dropbox=new Map( JSON.parse( lzw_decode(data) ));
300
301 console.log("map_dropbox")
302 console.log(map_dropbox);
303 console.log("list_data_reports")
304 console.log(list_data_reports);
305
306
307 document.body.innerHTML= httpGet(current_page);
308 addWindow();
309 let nr_update=0;
310 let nr_write=0;
311 list_data_reports.forEach(function(el){
312 if(map_dropbox.has(el.coord)){//update el[0]=key
313 if(el.reportInfo.typeAttacker=="new_off"){
314 console.log("new_off, don't do anything")
315 }else{
316 console.log("coord exists in dropbox already")
317 let time_prev=new Date(map_dropbox.get(el.coord).time_report);
318 let time_current=new Date(el.reportInfo.time_report);
319 console.log(time_current-time_prev)
320 if(time_current-time_prev<48*3600*1000 && (el.reportInfo.typeAttacker=="def" )){//48 hours
321 console.log("a fost def_cat")
322 map_dropbox.set(el.coord,el.reportInfo)
323 nr_update++;
324 }
325 else if(time_current-time_prev>0 ){
326 console.log("update coord: "+el.coord+" in dropbox")
327 map_dropbox.set(el.coord,el.reportInfo)
328 nr_update++;
329 }
330
331 }
332 }
333 else{//write
334 console.log("write coord in dropbox")
335 map_dropbox.set(el.coord,el.reportInfo)
336 nr_write++;
337 }
338 })
339 UI.SuccessMessage("compressing database, wait few seconds",2000)
340
341 window.setTimeout(function(){
342 var data=lzw_encode(JSON.stringify(Array.from(map_dropbox.entries())))
343 console.log(map_dropbox)
344 console.log("hai ba")
345 uploadFile(data,filename_reports,dropboxToken)
346 localStorage.setItem(nameHistoryReports,JSON.stringify(Array.from(map_idReports.entries())))
347 document.getElementById("progress_reports").innerText="done";
348 UI.SuccessMessage("upload reports done\n update: "+nr_update+" \nwrite: "+nr_write,4000)
349 },400)
350
351 }).done(function(){
352 if(typeof(callback)==="function" && current_url!="stop")
353 callback();
354
355 }).fail(function(){
356 // alert("error upload")
357 UI.ErrorMessage("upload again \n try after few minutes")
358
359 })
360
361 }
362 }
363 ajaxRequest(list_href);
364 }).catch(result=>{
365 console.log(result)
366 })
367 }
368
369 /////////////////////////////////////////////////get all reports info MANUAL//////////////////////////////////////////////////////////////////
370 function uploadReportsManual(){
371 let list_href=[]
372 let types=["off","new_off","def","def_cat",'def_spy',"spy","def??","none"]
373 document.getElementById("progress_reports").innerText="get links..";
374
375 let nameHistoryReports=game_data.world +"HistoryReports"
376 var map_idReports=new Map();
377 var current_page=window.location.href;
378 if(localStorage.getItem(nameHistoryReports)==null){
379 localStorage.setItem(nameHistoryReports,JSON.stringify(Array.from(new Map().entries())))
380 }
381 else{
382 map_idReports=new Map(JSON.parse(localStorage.getItem(nameHistoryReports)));
383 Array.from(map_idReports.keys()).forEach(el=>{
384 let currentDate=new Date();
385 let reportDate=new Date(map_idReports.get(el))
386 if(currentDate.getTime()- reportDate.getTime() > 20*24*3600*1000){
387 console.log("remove: "+map_idReports.get(el))
388 map_idReports.delete(el)
389 }
390 })
391
392 }
393
394 $(document).on('click','.autoHideBox',function(){
395 UI.SuccessMessage("stop",2000)
396 list_href=[]
397 })
398
399
400 getPromiseListHref=getLinks(true,map_idReports);//only current folder
401 getPromiseListHref.then( result=>{
402 console.log(result)
403 list_href=result;
404 list_href=list_href.reverse();
405 console.log(list_href)
406 var list_data_reports=[]
407 var nr_reports=0;
408 var nr_reports_total=list_href.length
409 addWindow();
410 document.getElementById("progress_reports").innerText=nr_reports+"/"+nr_reports_total+" reports";
411 // UI.InfoMessage(nr_reports+"/"+nr_reports_total+" reports")
412 var current_url
413 function ajaxRequest (urls) {
414 var time= 0
415 if(urls.length>0)
416 current_url=urls.pop().href;
417 else
418 current_url="stop"
419 console.log("in functie in plm "+urls.length)
420 if (urls.length >= 0 && current_url!= "stop") {
421 var start_ajax=new Date()
422 $.ajax({
423 method: 'GET',
424 url: current_url,
425 })
426 .done(function (result) {
427 document.body.innerHTML= result;
428 result=null
429 // addWindow();
430 let list=getDataReport(tribemates);
431 console.log(list)
432 if(list==null ){
433 console.log("recaptcha, upload again")
434 UI.ErrorMessage("recaptcha, upload again","slow")
435 addWindow();
436 document.getElementById("progress_reports").innerText="recaptcha";
437 list_href=[]
438
439 }
440 else{
441 console.log("reports info "+list.length)
442 for(let j=0;j<list.length;j++){
443
444 if(document.getElementById("select_type_attacker")==null && !tribemates.includes(list[j].reportInfo.nameAttacker)){
445 let type=(list[j].reportInfo.typeAttacker!="?")?list[j].reportInfo.typeAttacker:"none"
446
447 console.log(type)
448 let htmlSelect='<select id="select_type_attacker" style="width: 100%">';
449 for(let k=types.length-1;k>=0;k--){
450 htmlSelect+='<option value="'+types[k]+'">'+types[k]+'</option>'
451 }
452 htmlSelect+='</select>';
453 $("#attack_info_att").append(htmlSelect)
454 document.getElementById("select_type_attacker").value=type
455 }
456 if(document.getElementById("select_type_defender")==null && !tribemates.includes(list[j].reportInfo.nameDefender)){
457 let type=(list[j].reportInfo.typeDefender!="?")?list[j].reportInfo.typeDefender:"none"
458 console.log(type)
459 let htmlSelect='<select id="select_type_defender" style="width: 100%">';
460 for(let k=types.length-1;k>=0;k--){
461 htmlSelect+='<option value="'+types[k]+'">'+types[k]+'</option>'
462 }
463 htmlSelect+='</select>';
464 $("#attack_info_def").append(htmlSelect)
465 document.getElementById("select_type_defender").value=type
466
467 }
468
469 }
470 // document.getElementById("progress_reports").innerText=nr_reports+"/"+nr_reports_total+" reports";
471 UI.SuccessMessage(nr_reports+"/"+nr_reports_total+" reports")
472
473 nr_reports++;
474 let idReport= parseInt(current_url.match(/view=(\d+)/)[1]);
475 let currentDate=new Date().getFullYear()+"-"+(new Date().getMonth()+1)+"-"+new Date().getDate();
476 if(document.getElementsByClassName("unit-item unit-item-axe").length>0){
477 var time_report=document.getElementsByClassName("vis")[3].firstElementChild.children[1].children[1].innerText;
478 map_idReports.set(idReport,time_report)
479 }
480 else{
481 map_idReports.set(idReport,currentDate)
482 }
483 }
484 var stop_ajax=new Date();
485 var dif_time=stop_ajax.getTime()-start_ajax.getTime();
486 console.log("dif_time "+dif_time+" wait "+(200-dif_time))
487
488 window.onkeyup = function(e) {
489 console.log(e.which)
490 if(e.which==13 && current_url!= "stop"){
491 console.log("next")
492 window.onkeyup = function(e){}
493
494 for(let j=0;j<list.length;j++){
495 if(document.getElementById("select_type_attacker")!=null){
496 let type=document.getElementById("select_type_attacker").value
497 if(type!="none"){
498 list[j].reportInfo.typeAttacker=type
499 list_data_reports.push({"coord":list[j].coord,"reportInfo":list[j].reportInfo});
500 }
501 }
502 if(document.getElementById("select_type_defender")!=null){
503 let type=document.getElementById("select_type_defender").value
504 if(type!="none"){
505 list[j].reportInfo.typeDefender=type
506 list_data_reports.push({"coord":list[j].coord,"reportInfo":list[j].reportInfo});
507 }
508 }
509
510 }
511 console.log("new list")
512 console.log(list)
513 console.log("big list")
514 console.log(list_data_reports)
515
516 window.setTimeout(function(){
517 ajaxRequest(list_href);
518 },200-dif_time)
519 }
520 e.preventDefault()
521 }
522 });
523
524 }
525 else
526 {
527 ////////////////////////////////////extract data from dropbox/////////////////////////////////////////
528 console.log("inainte de a extrage date din dropbox")
529 $.get(file_reports, function (data) {
530 map_dropbox=new Map( JSON.parse( lzw_decode(data)));
531
532 console.log("map_dropbox")
533 console.log(map_dropbox);
534 console.log("list_data_reports")
535 console.log(list_data_reports);
536
537
538 document.body.innerHTML= httpGet(current_page);
539 addWindow();
540 let nr_update=0;
541 let nr_write=0;
542 list_data_reports.forEach(function(el){
543 if(map_dropbox.has(el.coord)){//update el[0]=key
544 if(el.reportInfo.typeAttacker=="new_off"){
545 console.log("new_off, don't do anything")
546 }else{
547 console.log("coord exists in dropbox already")
548 let time_prev=new Date(map_dropbox.get(el.coord).time_report);
549 let time_current=new Date(el.reportInfo.time_report);
550 console.log(time_current-time_prev)
551 if(time_current-time_prev<48*3600*1000 && (el.reportInfo.typeAttacker=="def" )){//48 hours
552 console.log("a fost def_cat")
553 map_dropbox.set(el.coord,el.reportInfo)
554 nr_update++;
555 }
556 else if(time_current-time_prev>0 ){
557 console.log("update coord: "+el.coord+" in dropbox")
558 map_dropbox.set(el.coord,el.reportInfo)
559 nr_update++;
560 }
561
562 }
563 }
564 else{//write
565 console.log("write coord in dropbox")
566 map_dropbox.set(el.coord,el.reportInfo)
567 nr_write++;
568 }
569 })
570 UI.SuccessMessage("compressing database, wait few seconds")
571 window.setTimeout(function(){
572 var data=lzw_encode(JSON.stringify(Array.from(map_dropbox.entries())))
573 console.log(map_dropbox)
574 console.log("hai ba")
575 uploadFile(data,filename_reports,dropboxToken)
576 localStorage.setItem(nameHistoryReports,JSON.stringify(Array.from(map_idReports.entries())))
577 document.getElementById("progress_reports").innerText="done";
578 UI.SuccessMessage("upload reports done\n update: "+nr_update+" \nwrite: "+nr_write,4000)
579 },400)
580
581 }).fail(function(){
582 // alert("error upload")
583 UI.ErrorMessage("upload again \n try after few minutes")
584
585 })
586
587 }
588 }
589 ajaxRequest(list_href);
590 }).catch(result=>{
591 console.log(result)
592 })
593 }
594 ///////////////////////////////////////////////////////////////////get all links////////////////////////////////////////////////////////////////
595 function getLinks(all,map_idReports){
596 // var currentPage=document.body.innerHTML;
597 return new Promise((resolve,reject)=>{
598 let list_pages=[]
599 let current_href=window.location.href;
600 if(current_href.includes("screen=report"))
601 all=false;
602 if(all){// all pages from all folders
603 let index=window.location.href.lastIndexOf("game.php")
604 let href= window.location.href.substr(0,index)+"game.php?"+"screen=report&mode=all&group_id=-1";
605 if(current_href.includes("t=")){
606 href+="&t="+current_href.split("t=")[1].split("&")[0];
607 }
608 list_pages.push(href)
609 document.body.innerHTML=httpGet(href)
610 }
611 if(document.getElementsByClassName("vis")[1].getElementsByTagName("select").length>0){
612 Array.from(document.getElementsByClassName("vis")[1].getElementsByTagName("select")[0]).forEach(function(item){
613 list_pages.push(item.value)
614 })
615 }
616 else if(document.getElementsByClassName("paged-nav-item").length>0){//all pages from the current folder
617 if(all==false){
618 let current_link=window.location.href;
619 list_pages.push(current_link);
620 }
621 Array.from(document.getElementsByClassName("paged-nav-item")).forEach(function(item){
622 list_pages.push(item.href);
623 })
624 }
625 else{//only one page from the current folder
626 let current_link=window.location.href;
627 list_pages.push(current_link);
628 }
629 console.log("list pages")
630 console.log(list_pages)
631
632 let list_href=[];
633 var indexIncoming=1;
634 var url_length=list_pages.length
635 function ajaxRequest (urls) {
636 let current_url
637
638 if(urls.length>0){
639 current_url=urls.pop()
640 }
641 else{
642 current_url="stop"
643 }
644 console.log("in functie in plm "+urls.length)
645 // console.log(current_url)
646 var start_ajax=new Date();
647 if (urls.length >= 0 && current_url!="stop") {
648 $.ajax({
649 url: current_url,
650 method: 'get',
651 success: (data) => {
652 document.body.innerHTML=data
653 let table_report= document.getElementById("report_list").firstElementChild.children;
654 let year=document.getElementById("serverDate").innerText.split("/")[2];
655 for(let i=1;i<table_report.length-1;i++){
656 let month_day=table_report[i].children[2].innerText;
657 let date_report=new Date(year+" "+month_day)
658 let current_date=new Date();
659 if(current_date-date_report<19*24*3600*1000){//old
660
661 let img_icon=table_report[i].children[1].children[0].children.length;
662 if(img_icon>0){//wordsTranslate[0]=supports ///// || table_report[i].innerText.includes(wordsTranslate[0])
663 let obj={
664 id:table_report[i].getElementsByTagName("a")[0].getAttribute("data-id"),
665 href:table_report[i].getElementsByTagName("a")[0].href
666 }
667 if(!map_idReports.has(parseInt(obj.id)))
668 list_href.push(obj)
669 }
670 }
671 }
672
673
674 UI.InfoMessage("page "+indexIncoming+"/"+url_length)
675 indexIncoming++;
676 var stop_ajax=new Date();
677 var dif_time=stop_ajax.getTime()-start_ajax.getTime();
678 window.setTimeout(function(){
679 ajaxRequest (list_pages)
680 },200-dif_time)
681 }
682 })
683
684 }
685 else
686 {
687 UI.SuccessMessage("done",2000)
688 resolve(list_href)
689 }
690 }
691 if(list_pages.length>0)
692 ajaxRequest(list_pages);
693 else
694 reject("error??")
695
696 })
697
698 }
699
700 ////////////////////////////////////////////////////////////get data from report////////////////////////////////////////////////////////////////////
701
702 function getDataReport(tribemates){
703 var mapObject={};
704 var listObject=[];
705
706 // tribemates=[]
707 var reportInfo={};
708 // try{
709 if($("#attack_info_att").length>0){
710 var attackInfo=$("#attack_info_att");
711 if(attackInfo.text().includes("deleted") || attackInfo.text().includes("---")){
712 console.log("error upload")
713 return 0;
714 }
715 var defenseInfo = $("#attack_info_def");
716 if(defenseInfo.text().includes("deleted") || defenseInfo.text().includes("---")){
717 console.log("error upload")
718 return 0;
719 }
720
721 var attackingPlayer = attackInfo.find('a[href*=info_player]');
722 var defendingPlayer = defenseInfo.find('a[href*=info_player]');
723 var attackingPlayerId=attackingPlayer.prop('href').match(/id=(\w+)/)[1];
724 var defendingPlayerId=defendingPlayer.prop('href').match(/id=(\w+)/)[1];
725 reportInfo.attackingPlayerId=attackingPlayerId;
726 reportInfo.defendingPlayerId=defendingPlayerId;
727 }
728 ///////////////////////////////////////////////////////////////////////////
729
730
731 if(document.getElementsByClassName("unit-item unit-item-axe").length>1)
732 {
733 var time_report=document.getElementsByClassName("vis")[3].firstElementChild.children[1].children[1].innerText;
734 // if(new Date()-new Date(time_report)>14*24*3600*1000)//report too old
735 // return listObject;
736
737 reportInfo.time_report=time_report
738 var report=document.getElementsByClassName("vis")[3].innerHTML;
739 var index=report.indexOf('<div class="no-preview">');
740 report=report.substring(0,index);
741 // report=lzw_encode(report);
742 // reportInfo.report=report;
743
744 ///////////////////////////defender date////////////////////
745 var nameAttacker=document.getElementById("attack_info_att").children[0].children[0].children[1].innerText;
746 var coordAttacker=document.getElementsByClassName("village_anchor")[0].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
747 var nameDefender=document.getElementById("attack_info_def").children[0].children[0].children[1].innerText;
748 var coordDefender=document.getElementsByClassName("village_anchor")[1].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
749 reportInfo.nameAttacker=nameAttacker;
750 reportInfo.coordAttacker=coordAttacker;
751 reportInfo.nameDefender=nameDefender;
752 reportInfo.coordDefender=coordDefender;
753
754 var axe_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-axe")[0].innerText);
755 var axe_atac_pierderi=parseInt(document.getElementsByClassName("unit-item unit-item-axe")[1].innerText);
756 var light_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-light")[0].innerText)*4;
757 var light_atac_pierderi=parseInt(document.getElementsByClassName("unit-item unit-item-light")[1].innerText)*4;
758 var ram_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-ram")[0].innerText)*5;
759 var ram_atac_pierderi=parseInt(document.getElementsByClassName("unit-item unit-item-ram")[1].innerText)*5;
760 var cat_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-catapult")[0].innerText)*8;
761 var cat_atac_pierderi=parseInt(document.getElementsByClassName("unit-item unit-item-catapult")[1].innerText)*8;
762 var noble=parseInt(document.getElementsByClassName("unit-item unit-item-snob")[0].innerText)*100;
763
764 var spear_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-spear")[0].innerText);
765 var sword_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-sword")[0].innerText);
766 if(document.getElementsByClassName("unit-item unit-item-archer").length>0)
767 var archer_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-archer")[0].innerText);
768 else
769 var archer_atac_total=0;
770 var heavy_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-heavy")[0].innerText)*6;
771 var spy_atac_total=parseInt(document.getElementsByClassName("unit-item unit-item-spy")[0].innerText)*2;
772 var spy_atac_pierderi=parseInt(document.getElementsByClassName("unit-item unit-item-spy")[1].innerText)*2;
773
774 var typeAttacker="?";
775 var nrTroupesAttacker=0;
776 var nrTroupesAttackerTotal=0;
777 var time_return=0;
778
779
780 if(axe_atac_total+light_atac_total+ram_atac_total >=2500 && axe_atac_total>=2500)
781 {
782 typeAttacker="off";
783 nrTroupesAttacker=(axe_atac_total-axe_atac_pierderi)+(light_atac_total-light_atac_pierderi) + (ram_atac_total-ram_atac_pierderi);
784 console.log("ianinte")
785 if(ram_atac_total>0 && noble==0 && axe_atac_total>=2000){
786 console.log("aici")
787 nrTroupesAttackerTotal=axe_atac_total+light_atac_total+ram_atac_total
788 let time_attack=ramSpeed*calcDistance(coordAttacker,coordDefender)
789 time_return=new Date(time_report).getTime()+time_attack;
790 time_return=new Date(time_return)
791 let date=new Date(time_return).toDateString().split(" ").slice(1).join(" ")
792 time_return=date+" "+new Date(time_return).toTimeString().split(" ")[0]
793
794 }else if(axe_atac_total>=2000 && noble==0 ){
795 nrTroupesAttackerTotal=axe_atac_total+light_atac_total
796 time_attack=axeSpeed*calcDistance(coordAttacker,coordDefender)
797 time_return=new Date(time_report).getTime()+time_attack;
798 time_return=new Date(time_return)
799 let date=new Date(time_return).toDateString().split(" ").slice(1).join(" ")
800 time_return=date+" "+new Date(time_return).toTimeString().split(" ")[0]
801
802 }else if(axe_atac_total>=2000 && noble>0){
803 nrTroupesAttackerTotal=axe_atac_total+light_atac_total+ram_atac_total
804 time_attack=axeSpeed*calcDistance(coordAttacker,coordDefender)
805 time_return=new Date(time_report).getTime()+time_attack;
806 time_return=new Date(time_return)
807 let date=new Date(time_return).toDateString().split(" ").slice(1).join(" ")
808 time_return=date+" "+new Date(time_return).toTimeString().split(" ")[0]
809 }
810 }
811 else if(spy_atac_total>10000){
812 typeAttacker="spy";
813 nrTroupesAttacker=spy_atac_total-spy_atac_pierderi;
814 }
815 else if(axe_atac_total+light_atac_total+ram_atac_total >20 && spear_atac_total+sword_atac_total+archer_atac_total+heavy_atac_total<15)
816 {
817 typeAttacker="new_off";
818 }
819 else if(axe_atac_total+light_atac_total+ram_atac_total <15 && spear_atac_total+sword_atac_total+archer_atac_total+heavy_atac_total>15){
820 typeAttacker="def";
821 }
822 else if(spy_atac_total>=800 && axe_atac_total+light_atac_total+ram_atac_total<500 && spear_atac_total+sword_atac_total+archer_atac_total+heavy_atac_total<40)
823 typeAttacker="def_spy";
824
825 if((cat_atac_total>=50*8 && typeAttacker=="def") || (cat_atac_total>=50*8 && axe_atac_total+light_atac_total+ram_atac_total<20)){
826 typeAttacker="def_cat";
827 nrTroupesAttacker=cat_atac_total-cat_atac_pierderi;
828 if(noble==0){
829 nrTroupesAttackerTotal=heavy_atac_total+cat_atac_total
830 time_attack=ramSpeed*calcDistance(coordAttacker,coordDefender)
831 time_return=new Date(time_report).getTime()+time_attack;
832 time_return=new Date(time_return)
833 let date=new Date(time_return).toDateString().split(" ").slice(1).join(" ")
834 time_return=date+" "+new Date(time_return).toTimeString().split(" ")[0]
835 }
836 }
837
838 reportInfo.time_return=time_return
839 reportInfo.nrTroupesAttackerTotal=nrTroupesAttackerTotal
840 reportInfo.typeAttacker=typeAttacker;
841 reportInfo.nrTroupesAttacker=nrTroupesAttacker;
842
843 reportInfo.attackingArmy = attackInfo.find('#attack_info_att_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()) } })
844 reportInfo.attackingArmyLosses = attackInfo.find('#attack_info_att_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()) } })
845
846
847 /////////////////////////////////////////////////defender date/////////////////////
848 var nrTroupesDefender=0;
849 var typeDefender="?";
850 if(document.getElementsByClassName("unit-item unit-item-axe").length>2){
851
852
853 var axe_aparare_total=parseInt(document.getElementsByClassName("unit-item unit-item-axe")[2].innerText);
854 var axe_aparare_pierderi=parseInt(document.getElementsByClassName("unit-item unit-item-axe")[3].innerText);
855 var light_aparare_total=parseInt(document.getElementsByClassName("unit-item unit-item-light")[2].innerText)*4;
856 var light_aparare_pierderi=parseInt(document.getElementsByClassName("unit-item unit-item-light")[3].innerText)*4;
857 var ram_aparare_total=parseInt(document.getElementsByClassName("unit-item unit-item-ram")[2].innerText)*5;
858 var ram_aparare_pierderi=parseInt(document.getElementsByClassName("unit-item unit-item-ram")[3].innerText)*5;
859 var spear_aparare_total=parseInt(document.getElementsByClassName("unit-item unit-item-spear")[2].innerText);
860 var sword_aparare_total=parseInt(document.getElementsByClassName("unit-item unit-item-sword")[2].innerText);
861 if(document.getElementsByClassName("unit-item unit-item-archer")>0)
862 var archer_aparare_total=parseInt(document.getElementsByClassName("unit-item unit-item-archer")[2].innerText);
863 else
864 var archer_aparare_total=0
865 var heavy_aparare_total=parseInt(document.getElementsByClassName("unit-item unit-item-heavy")[2].innerText)*6;
866
867
868 nrTroupesDefender=(axe_aparare_total-axe_aparare_pierderi)+(light_aparare_total-light_aparare_pierderi) + (ram_aparare_total-ram_aparare_pierderi);
869 if(axe_aparare_total+light_aparare_total+ram_aparare_total >=2500 && axe_aparare_total>=2500){
870 typeDefender="off";
871 }
872
873 reportInfo.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()) } })
874 reportInfo.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()) } })
875
876 }
877
878 if(document.getElementsByClassName("unit-item unit-item-axe").length>4){
879 var axe_aparare_spy=parseInt(document.getElementsByClassName("unit-item unit-item-axe")[4].innerText);
880 var light_aparare_spy=parseInt(document.getElementsByClassName("unit-item unit-item-light")[4].innerText)*4;
881 var ram_aparare_spy=parseInt(document.getElementsByClassName("unit-item unit-item-ram")[4].innerText)*5;
882 nrTroupesDefender+=axe_aparare_spy+(light_aparare_spy) + (ram_aparare_spy);
883
884 if(nrTroupesDefender>=2500 && axe_aparare_spy>=2500)
885 typeDefender="off";
886
887
888
889 var spear_aparare_spy=parseInt(document.getElementsByClassName("unit-item unit-item-spear")[4].innerText);
890 var sword_aparare_spy=parseInt(document.getElementsByClassName("unit-item unit-item-sword")[4].innerText);
891 if(document.getElementsByClassName("unit-item unit-item-archer").length>0)
892 var archer_aparare_spy=parseInt(document.getElementsByClassName("unit-item unit-item-archer")[4].innerText);
893 else
894 var archer_aparare_spy=0
895
896 var heavy_aparare_spy=parseInt(document.getElementsByClassName("unit-item unit-item-heavy")[4].innerText)*6;
897 var trupe_aparare_total=spear_aparare_total+sword_aparare_total+archer_aparare_total+heavy_aparare_total;
898 var total_aparare_spy=spear_aparare_spy+sword_aparare_spy+archer_aparare_spy+heavy_aparare_spy;
899
900 if(total_aparare_spy>1000){
901 typeDefender="def";
902 nrTroupesDefender=total_aparare_spy;
903 }
904 else if(axe_aparare_spy+light_aparare_spy <10 && axe_aparare_total+light_aparare_total<100 && trupe_aparare_total>5000 && total_aparare_spy<=1000){
905 typeDefender="def??";
906 }
907
908
909 let travelingTroopsContainer = $(document).find('#attack_spy_away');
910 if (travelingTroopsContainer.length) {
911 reportInfo.travelingTroops = {};
912
913 travelingTroopsContainer.find('.unit-item').each((i, el) => {
914 let $el = $(el);
915 let cls = $el.prop('class');
916 let unitType = cls.match(/unit\-item\-(\w+)/)[1];
917 reportInfo.travelingTroops[unitType] = parseInt($el.text().trim());
918 });
919 }
920
921
922 }
923 reportInfo.typeDefender=typeDefender;
924 reportInfo.nrTroupesDefender=nrTroupesDefender;
925
926
927
928 if(!tribemates.includes(nameAttacker)){//!reportInfo.typeAttacker.includes("?")
929 // console.log("attacker")
930 mapObject.coord=coordAttacker;
931 mapObject.reportInfo=reportInfo;
932 listObject.push(mapObject);
933 mapObject={};
934 }
935 if(!tribemates.includes(nameDefender)){
936 // console.log("defender")
937 mapObject.coord=coordDefender;
938 mapObject.reportInfo=reportInfo;
939 listObject.push(mapObject);
940 }
941 }
942 else if(document.getElementsByClassName("unit-item unit-item-axe").length==1)
943 {
944 var typeSupporter="?";
945 var nrTroupesSupporter=0;
946 let time_report=document.getElementsByClassName("vis")[3].firstElementChild.children[1].children[1].innerText;
947 if(new Date()-new Date(time_report)>14*3600*1000)//report too old
948 return listObject;
949 var report=document.getElementsByClassName("vis")[3].innerHTML;
950 // report=lzw_encode(report);
951 reportInfo.time_report=time_report;
952 // reportInfo.report=report;
953
954 var text=document.getElementsByClassName("vis")[3].innerText.split("\n");
955 var nameSupporter=text[3].split(":")[1].trim();
956 var coordSupporter=text[4].split(":")[1].trim().match(/[0-9]{3}\|[0-9]{3}/)[0];
957 var supporterPlayerId=document.getElementsByClassName("vis")[3].getElementsByTagName("a")[1].href.split("id=")[1]
958 // var supporterPlayerId=document.getElementsByClassName("village_anchor contexted")[0].getAttribute("data-player")
959
960 reportInfo.nameSupporter=nameSupporter;
961 reportInfo.coordSupporter=coordSupporter;
962 reportInfo.supporterPlayerId=supporterPlayerId;
963
964
965 var axe_total=parseInt(document.getElementsByClassName("unit-item unit-item-axe")[0].innerText);
966 var light_total=parseInt(document.getElementsByClassName("unit-item unit-item-light")[0].innerText)*4;
967 var ram_total=parseInt(document.getElementsByClassName("unit-item unit-item-ram")[0].innerText)*5;
968
969 var spear_total=parseInt(document.getElementsByClassName("unit-item unit-item-spear")[0].innerText);
970 var sword_total=parseInt(document.getElementsByClassName("unit-item unit-item-sword")[0].innerText);
971 var archer_total=parseInt(document.getElementsByClassName("unit-item unit-item-archer")[0].innerText);
972 var heavy_total=parseInt(document.getElementsByClassName("unit-item unit-item-heavy")[0].innerText)*6;
973
974 var total_atac=axe_total+light_total+ram_total;
975 var total_aparare=spear_total+sword_total+archer_total+heavy_total;
976
977 if(total_atac>total_aparare && total_atac>=200){
978 typeSupporter="off";
979 nrTroupesSupporter=total_atac;
980 }
981 else if(total_aparare>total_atac && total_aparare>=200){
982 typeSupporter="def";
983 nrTroupesSupporter=total_aparare;
984 }
985 reportInfo.typeSupporter=typeSupporter;
986 reportInfo.nrTroupesSupporter=nrTroupesSupporter;
987
988 if(!tribemates.includes(nameSupporter) && !reportInfo.typeSupporter.includes("?")){
989 // console.log("supporter")
990 mapObject.coord=coordSupporter;
991 mapObject.reportInfo=reportInfo;
992 listObject.push(mapObject);
993 }
994 }
995 else if(document.getElementsByClassName("unit-item unit-item-axe").length==0 || document.getElementsByClassName("g-recaptcha").length>0
996 ||document.getElementsByClassName("unit-item unit-item-axe")==undefined || checkContainsCaptcha(document)==true){//recaptcha
997 console.log("recapthca")
998 return null;
999 }
1000
1001 return listObject;
1002 // }
1003 // // catch(e){
1004 // console.log("erorr in upload")
1005 // return 0;
1006 // }
1007
1008 }
1009
1010 function checkContainsCaptcha(docOrHtml) {
1011 var foundCaptcha = false;
1012 if (typeof docOrHtml == 'string') {
1013 foundCaptcha = !!docOrHtml.match(/data\-bot\-protect=/);
1014 } else {
1015 let $doc = $(docOrHtml);
1016 let $body = $doc.find('#ds_body');
1017 foundCaptcha = $body.length && !!$body.data('bot-protect')
1018 }
1019
1020 if (foundCaptcha) console.log('Found captcha!');
1021 return foundCaptcha;
1022 }
1023
1024 function calcDistance(coord1,coord2)
1025 {
1026 let x1=parseInt(coord1.split("|")[0])
1027 let y1=parseInt(coord1.split("|")[1])
1028 let x2=parseInt(coord2.split("|")[0])
1029 let y2=parseInt(coord2.split("|")[1])
1030
1031 return Math.sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
1032 }
1033
1034 ////////////////////////////////////////////////data compression////////////////////////////////////////////////////////////////////////////
1035 function lzw_encode (s) {
1036 if (!s) return s;
1037 var dict = new Map(); // Use a Map!
1038 var data = (s + "").split("");
1039 var out = [];
1040 var currChar;
1041 var phrase = data[0];
1042 var code = 256;
1043 for (var i = 1; i < data.length; i++) {
1044 currChar = data[i];
1045 if (dict.has(phrase + currChar)) {
1046 phrase += currChar;
1047 } else {
1048 out.push (phrase.length > 1 ? dict.get(phrase) : phrase.codePointAt(0));
1049 dict.set(phrase + currChar, code);
1050 code++;
1051 if (code === 0xd800) { code = 0xe000; }
1052 phrase = currChar;
1053 }
1054 }
1055 out.push (phrase.length > 1 ? dict.get(phrase) : phrase.codePointAt(0));
1056 for (var i = 0; i < out.length; i++) {
1057 out[i] = String.fromCodePoint(out[i]);
1058 }
1059 //console.log ("LZW MAP SIZE", dict.size, out.slice (-50), out.length, out.join("").length);
1060 return out.join("");
1061 }
1062 ////////////////////////////////////////////////data decompression////////////////////////////////////////////////////////////////////////////
1063 function lzw_decode (s) {
1064 var dict = new Map(); // Use a Map!
1065 var data = Array.from(s + "");
1066 //var data = (s + "").split("");
1067 var currChar = data[0];
1068 var oldPhrase = currChar;
1069 var out = [currChar];
1070 var code = 256;
1071 var phrase;
1072 for (var i = 1; i < data.length; i++) {
1073 var currCode = data[i].codePointAt(0);
1074 if (currCode < 256) {
1075 phrase = data[i];
1076 } else {
1077 phrase = dict.has(currCode) ? dict.get(currCode) : (oldPhrase + currChar);
1078 }
1079 out.push(phrase);
1080 var cp = phrase.codePointAt(0);
1081 currChar = String.fromCodePoint(cp); //phrase.charAt(0);
1082 dict.set(code, oldPhrase + currChar);
1083 code++;
1084 if (code === 0xd800) { code = 0xe000; }
1085 oldPhrase = phrase;
1086 }
1087 return out.join("");
1088 }
1089 ///////////////////////////////////////////////////////get request//////////////////////////////////////////////////////////////////////////
1090 function httpGet(theUrl)
1091 {
1092 var xmlHttp = new XMLHttpRequest();
1093 xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
1094 xmlHttp.send( null );
1095 return xmlHttp.responseText;
1096 }
1097
1098 ///////////////////////////////////////////////////////get all incomings//////////////////////////////////////////////////////////////////////////
1099
1100 function getIncomings(){
1101 return new Promise( (resolve,reject)=>{
1102
1103 if(document.getElementsByClassName("info").length>0)
1104 $(".info").remove()
1105 var current_href_incomings=window.location.href;
1106 let index=window.location.href.lastIndexOf("game.php")
1107 let incomings_href= window.location.href.substr(0,index)+"game.php?"+"screen=overview_villages&mode=incomings&type=all&subtype=attacks&group=0&page=-1";
1108 if(current_href_incomings.includes("t="))
1109 {
1110 incomings_href+="&t="+current_href_incomings.split("t=")[1].split("&")[0];
1111 }
1112 console.log("currentLink")
1113 console.log(incomings_href)
1114 document.body.innerHTML=httpGet(incomings_href);
1115 let list_href=[];
1116 if(document.getElementsByClassName("vis")[1].getElementsByTagName("select").length>0){
1117 Array.from(document.getElementsByClassName("vis")[1].getElementsByTagName("select")[0].options).forEach(el=>{
1118 list_href.push(el.value);
1119 })
1120 list_href.pop();
1121 }
1122 else if(document.getElementsByClassName("paged-nav-item").length>0){
1123 let arr=Array.from(document.getElementsByClassName("paged-nav-item"));
1124 for(let i=0;i<arr.length;i++)
1125 list_href.push(arr[i].getAttribute("href"))
1126 }
1127 else{
1128 list_href.push(incomings_href)
1129
1130 }
1131 if(document.getElementById("incomings_table")==null)
1132 throw new Error("you don't have any incomings");
1133
1134 console.log(list_href)
1135 let incomings_data=new Map();
1136
1137
1138 var indexIncoming=1;
1139 var url_length=list_href.length
1140 var start_ajax=new Date();
1141 function ajaxRequest (urls) {
1142 let current_url
1143 var time=0
1144 if(urls.length>0){
1145 current_url=urls.pop()
1146 }
1147 else{
1148 current_url="stop"
1149 }
1150 console.log("in functie in plm "+urls.length)
1151 // console.log(current_url)
1152
1153 if (urls.length >= 0 && current_url!="stop") {
1154 $.ajax({
1155 url: current_url,
1156 method: 'get',
1157 success: (data) => {
1158 document.body.innerHTML=data
1159 if(document.getElementById("incomings_table")==null)
1160 alert("turn off the filters");
1161 let table_incomings=document.getElementById("incomings_table").getElementsByTagName("tbody")[0].children
1162 for(let i=1;i<table_incomings.length-1;i++){
1163 if(table_incomings[i].children[0].innerText!="--"){
1164 let coord_dest=table_incomings[i].children[1].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0]
1165 let coord_origin=table_incomings[i].children[2].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0]
1166 let length_tr=table_incomings[i].children.length
1167 let time_land=table_incomings[i].children[length_tr-2].innerText
1168 let server_date=document.getElementById("serverDate").innerText.split("/")
1169 let date_land="";
1170 if(time_land.includes(wordsTranslate[1])){//wordsTranslate[1]==today
1171 date_land=server_date[1]+"/"+server_date[0]+"/"+server_date[2]+" "+time_land.split(" ")[2];
1172 }
1173 else if(time_land.includes(wordsTranslate[2])){//wordsTranslate[2]== tomorrow
1174 var tomorrow_date=new Date(server_date[1]+"/"+server_date[0]+"/"+server_date[2]);
1175 tomorrow_date.setDate(tomorrow_date.getDate()+1);
1176 date_land= ("0"+(tomorrow_date.getMonth()+1)).slice(-2)+"/"+("0"+tomorrow_date.getDate()).slice(-2)+"/"+tomorrow_date.getFullYear()+" "+time_land.split(" ")[2];
1177 }else if(time_land.includes(wordsTranslate[3])){//wordsTranslate[3]==on
1178 var on=time_land.split(" ")
1179 date_land=on[1].split(".")[1]+"/"+on[1].split(".")[0]+"/"+server_date[2]+" "+on[3];
1180 }
1181 // console.log(date_land)
1182 if(!incomings_data.has(coord_origin)){
1183 let list=[date_land]
1184 incomings_data.set(coord_origin,list)
1185
1186 }else{
1187 let list=incomings_data.get(coord_origin)
1188 list.push(date_land)
1189 incomings_data.set(coord_origin,list)
1190 }
1191 }
1192 }
1193
1194 UI.InfoMessage(indexIncoming+"/"+url_length)
1195 indexIncoming++;
1196 var stop_ajax=new Date();
1197 var dif_time=stop_ajax.getTime()-start_ajax.getTime()
1198 window.setTimeout(function(){
1199 ajaxRequest (list_href)
1200 },200)
1201 }
1202 })
1203
1204 }
1205 else
1206 {
1207 UI.SuccessMessage("done",2000)
1208 if(document.getElementById("incomings_table")!=null){
1209 // showButtons();
1210 }
1211
1212 if( document.getElementsByClassName("g-recaptcha").length>0){//recaptcha
1213 console.log("recapthca")
1214 UI.ErrorMessage("recapthca, upload again")
1215 resolve(null);
1216 }
1217
1218 window.setTimeout(function(){
1219 document.body.innerHTML=httpGet(current_href_incomings);
1220 console.log(incomings_data)
1221 resolve(incomings_data)
1222 },1000+Math.random()*500)
1223
1224
1225
1226 }
1227 }
1228 if(list_href.length>0)
1229 ajaxRequest(list_href);
1230 else
1231 reject("error on incomings")
1232 })
1233 }
1234 ///////////////////////////////////////////////////////upload all incomings//////////////////////////////////////////////////////////////////////////
1235
1236 function uploadIncomings(){
1237
1238 $.get(file_incomigs, function (data) {
1239 let map_incomings_dropbox=new Map(JSON.parse(lzw_decode(data)))
1240 let keys_dropbox=Array.from(map_incomings_dropbox.keys());
1241
1242 let server_date=document.getElementById("serverDate").innerText.split("/")
1243 let server_time=document.getElementById("serverTime").innerText
1244 let current_date=new Date(server_date[1]+"/"+server_date[0]+"/"+server_date[2]+" "+server_time);
1245 /////////////////////////////////eliminate old incomings from dropbox////////////////////////////////////
1246 let start=new Date();
1247 keys_dropbox.forEach(el=>{
1248 let list=map_incomings_dropbox.get(el);
1249 let update=false;
1250 for(let i=0;i<list.length;i++){
1251 let date_incomings=new Date(list[i])
1252 // console.log(date_incomings<current_date)
1253 if(date_incomings<current_date){
1254 list.splice(i,1);
1255 i--;
1256 update=true;
1257 }
1258 if(list[i]==""){
1259 list.splice(i,1);
1260 update=true;
1261 }
1262
1263 }
1264 if(update==true || list.length==0){
1265 if(list.length==0)
1266 map_incomings_dropbox.delete(el);
1267 else{
1268 map_incomings_dropbox.set(el,list);
1269 }
1270 }
1271 })
1272 let stop=new Date();
1273 console.log(stop-start)
1274 var incomings_data
1275 var getPromiseIncoming=getIncomings();
1276 getPromiseIncoming.then( result=>{
1277 incomings_data=result
1278 let keys_incomings=Array.from(incomings_data.keys());
1279 keys_incomings.forEach(el=>{
1280 let list=incomings_data.get(el)
1281 if(map_incomings_dropbox.has(el)){//update
1282 let list_dropbox=map_incomings_dropbox.get(el)
1283 list_dropbox=list_dropbox.concat(list);
1284 var list_concat =[...new Set([...list ,...list_dropbox])];
1285 map_incomings_dropbox.set(el,list_concat);
1286 }
1287 else{//add
1288 map_incomings_dropbox.set(el,list);
1289 }
1290 })
1291 console.log(map_incomings_dropbox)
1292 UI.SuccessMessage("compressing database, wait few seconds",2000)
1293 window.setTimeout(function(){
1294 var data=lzw_encode(JSON.stringify(Array.from(map_incomings_dropbox.entries())))
1295 console.log("scris in test2")
1296 // document.body.innerHTML=httpGet(current_href_incomings);
1297 addWindow();
1298 showButtons();
1299 document.getElementById("progress_incomings").innerText=incomings_data.size+" villages";
1300 document.getElementById("progress_all").innerText="done";
1301 UI.SuccessMessage("upload incomings done","slow")
1302 uploadFile(data,filename_incomings,dropboxToken)
1303 },400)
1304 }).catch(message=>alert(message))
1305 }).fail(function(){
1306 // alert("error upload")
1307 UI.ErrorMessage("error upload incomings")
1308 })
1309 }
1310
1311 //////////////////////////////////////////////////////upload all data to dropbox/////////////////////////////////////////////////////////////////
1312
1313 function uploadFile(data,filename,dropboxToken)
1314 {
1315 var file = new Blob([data], {type: "plain/text"});
1316 file.name=filename;
1317 var xhr = new XMLHttpRequest();
1318 xhr.upload.onprogress = function(evt) {
1319 var percentComplete = parseInt(100.0 * evt.loaded / evt.total);
1320 console.log(percentComplete)
1321 UI.SuccessMessage("progres upload: "+percentComplete+"%")
1322 };
1323
1324 xhr.onload = function() {
1325 if (xhr.status === 200) {
1326 var fileInfo = JSON.parse(xhr.response);
1327 // Upload succeeded. Do something here with the file info.
1328 UI.SuccessMessage("upload succes")
1329 }
1330 else {
1331 var errorMessage = xhr.response || 'Unable to upload file';
1332 // Upload failed. Do something here with the error.
1333 UI.SuccessMessage("upload failed")
1334 }
1335 };
1336
1337 xhr.open('POST', 'https://content.dropboxapi.com/2/files/upload');
1338 xhr.setRequestHeader('Authorization', 'Bearer ' + dropboxToken);
1339 xhr.setRequestHeader('Content-Type', 'application/octet-stream');
1340 xhr.setRequestHeader('Dropbox-API-Arg', JSON.stringify({
1341 path: '/' + file.name,
1342 mode: 'add',
1343 autorename: true,
1344 mode:'overwrite',
1345 mute: false
1346 }));
1347
1348 xhr.send(file);
1349 }
1350
1351
1352 //////////////////////////////////////////////////////buttons in incomings page/////////////////////////////////////////////////////////////////
1353
1354
1355 function showButtons(){
1356 if(document.getElementById("incomings_table")!=null){
1357 $("#table_incomings").remove();
1358 var incomingshtml=`
1359
1360 <table id="table_incomings" class="" border="1" style="width: 50%;">
1361 <tbody>
1362 <tr>
1363 <td style="text-align:center; width:auto;">
1364 <center style="margin:10px"><u><input class="btn" type="button" onclick="addWindow()"value="open upload"></center>
1365 </td>
1366 </tr>
1367 <tr>
1368 <td style="text-align:center; width:auto;">
1369 <center style="margin:10px"><u><input class="btn" type="button" onclick="moreInfo()" value="more info"></center>
1370 </td>
1371 </tr>
1372 <tr>
1373 <td style="text-align:center; width:auto;">
1374 <center style="margin:10px"><u><input class="btn" id="btn_tag" type="button" onclick="tagIncomings()" value="tag"></center>
1375 </td>
1376 </tr>
1377 </tbody>
1378 </table>
1379 </div>`
1380 $(".vis").eq(3).append(incomingshtml)
1381
1382
1383 var link = document.createElement('link');
1384 link.id = "style_popup";
1385 link.rel = 'stylesheet';
1386 link.type = 'text/css';
1387 link.href = 'https://dl.dropboxusercontent.com/s/ki0zhogjf0705c3/style_popup.css';
1388 link.media = 'all';
1389 document.getElementsByTagName('head')[0].appendChild(link);
1390 }
1391
1392
1393
1394
1395 }
1396 showButtons();
1397
1398 //////////////////////////////////////////////////////show info in incomings page/////////////////////////////////////////////////////////////////
1399
1400
1401
1402 function moreInfo(){
1403 let map_reports_dropbox
1404 let map_incomings_dropbox
1405 $("#div_container").remove();
1406
1407 console.log("inainte")
1408 $.ajax({
1409 url: file_reports,
1410 type: 'GET',
1411 before:function(){
1412 UI.InfoMessage("load reports..","fast")
1413 },
1414 complete:function(){
1415 UI.SuccessMessage("done reports","fast")
1416 },
1417 success: function(data_reports){
1418 map_reports_dropbox=new Map( JSON.parse( lzw_decode(data_reports)));
1419
1420 console.log(map_reports_dropbox)
1421 console.log("get reports")
1422
1423 $.ajax({
1424 url: file_incomigs,
1425 type: 'GET',
1426 before:function(){
1427 UI.InfoMessage("load incomings..","fast")
1428 },
1429 complete:function(){
1430 UI.SuccessMessage("done incomings","fast")
1431 },
1432 success: function(data_incomings){
1433 console.log("get incomings")
1434 $(".tr_delimitator").remove();
1435 map_incomings_dropbox=new Map(JSON.parse(lzw_decode(data_incomings)))
1436 console.log(map_incomings_dropbox)
1437 if(document.getElementsByClassName("info").length>0)
1438 $(".info").remove()
1439 else{
1440 let start=new Date();
1441
1442 let table=document.getElementById("incomings_table").lastElementChild.children;
1443 let list=[];
1444 let map_nr_atacuri=new Map();
1445
1446 //adaugare o noua coloana
1447 let coloana_nr=table[0].insertCell(3);
1448 coloana_nr.innerHTML="<a href=# id='id_nr'> nr</a>";
1449 coloana_nr.className="info"
1450
1451 let coloana_tribe=table[0].insertCell(4);
1452 coloana_tribe.innerHTML="<a href=# id='id_nr_tr'> nr_tribe</a>";
1453 coloana_tribe.className="info"
1454
1455 let coloana_type=table[0].insertCell(5);
1456 coloana_type.innerHTML="<a href=# id='id_type'> type</a>";
1457 coloana_type.className="info"
1458
1459 let coloana_pop=table[0].insertCell(6);
1460 coloana_pop.innerHTML="<a href=# id='id_pop'>pop</a>";
1461 coloana_pop.className="info"
1462
1463 let coloana_time=table[0].insertCell(7);
1464 coloana_time.innerHTML="<a href=# id='id_time'>time</a>";
1465 coloana_time.className="info"
1466
1467 let coloana_report=table[0].insertCell(8);
1468 coloana_report.innerHTML="<a href=# id='id_report'>report</a>";
1469 coloana_report.className="info"
1470 var list_coord_player=[]
1471 for(let i=1;i<table.length-1;i++){
1472 let coord=table[i].children[2].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
1473 let player_id=table[i].children[table[i].children.length-4].children[0].href.split("player&id=")[1]
1474 list_coord_player.push({
1475 coord:coord,
1476 player_id:player_id
1477 })
1478 if(map_nr_atacuri.has(coord))
1479 map_nr_atacuri.set(coord,parseInt(map_nr_atacuri.get(coord)) +1);
1480 else
1481 map_nr_atacuri.set(coord,1);
1482 }
1483 for(let i=1;i<table.length-1;i++){
1484 var html_nr="?"
1485 var html_nr_tribe="<center>0</center>"
1486 var html_type="?"
1487 var html_pop="?"
1488 var html_time="?"
1489 var html_report="?"
1490
1491 var length_tr=table[i].children.length
1492 let coord=list_coord_player[i-1].coord
1493 let player_id=list_coord_player[i-1].player_id
1494 html_nr="<h4>"+map_nr_atacuri.get(coord)+"</h4>";
1495
1496 if(map_incomings_dropbox.has(coord)){
1497 let list_incomings=map_incomings_dropbox.get(coord)
1498 html_nr_tribe=" <center><h4 style='color:red'>"+list_incomings.length+"</h4></center>";
1499 }
1500 if(map_reports_dropbox.has(coord) )
1501 {
1502 let idPlayer_dropbox
1503 let type_dropbox
1504 let nr_troupes_dropbox
1505
1506 var obj=map_reports_dropbox.get(coord);
1507 var traveling=false
1508 if(coord == obj.coordAttacker){
1509 idPlayer_dropbox=obj.attackingPlayerId;
1510 type_dropbox=obj.typeAttacker;
1511 nr_troupes_dropbox=obj.nrTroupesAttacker
1512 traveling=true;
1513 }
1514 else if(coord == obj.coordDefender){
1515 idPlayer_dropbox=obj.defendingPlayerId;
1516 type_dropbox=obj.typeDefender;
1517 nr_troupes_dropbox=obj.nrTroupesDefender
1518 traveling=false;
1519 }
1520 else{
1521 idPlayer_dropbox=obj.supporterPlayerId
1522 type_dropbox=obj.typeSupporter;
1523 nr_troupes_dropbox=obj.nrTroupesSupporter
1524 }
1525
1526 if(idPlayer_dropbox == player_id)
1527 {
1528 let date_start=new Date(obj.time_report);
1529 let date_stop=new Date();
1530 let days=("00"+parseInt((date_stop-date_start)/(24*3600*1000))).slice(-3);
1531 let hours=("0"+parseInt((date_stop-date_start)/(3600*1000)%24)).slice(-2);
1532 let minutes=("0"+parseInt(((date_stop-date_start)/(60*1000)%60))).slice(-2);
1533 let seconds=( "0"+parseInt((((date_stop-date_start)/1000)%60))).slice(-2);
1534
1535 //calculate population
1536 let date_landing_report=new Date(obj.time_report)
1537 let distance=parseFloat(table[i].children[length_tr-3].innerText);
1538 let time_attack=0;
1539 let time_land=table[i].children[length_tr-2].innerText
1540 let date_land=new Date(getLandTime(time_land))
1541 let labelName=""
1542 if(table[i].children[0].getElementsByTagName("img")[1]==undefined || table[i].children[0].getElementsByTagName("img")[1]==null )
1543 labelName="ram.png"
1544 else
1545 labelName=table[i].children[0].getElementsByTagName("img")[1].src
1546
1547 if(labelName.includes("snob.png")){
1548 time_attack=nobleSpeed*distance
1549 }else if(labelName.includes("ram.png")){
1550 time_attack=ramSpeed*distance
1551 }else if(labelName.includes("sword.png")){
1552 time_attack=swordSpeed*distance
1553 }else if(labelName.includes("axe.png")){
1554 time_attack=axeSpeed *distance
1555 }
1556 if(traveling==false)
1557 time_attack=0;
1558
1559 if(type_dropbox=="off"){
1560 console.log(date_land.getTime())
1561 console.log(time_attack)
1562 console.log(date_landing_report.getTime())
1563 let timeForRecruiting = (date_land.getTime()-time_attack)-date_landing_report.getTime()
1564 console.log(timeForRecruiting)
1565 nr_troupes_dropbox=calcProductionTroupes(timeForRecruiting,nr_troupes_dropbox)
1566 nr_troupes_dropbox=Math.round(nr_troupes_dropbox*10)/10+"%"
1567 console.log("final "+nr_troupes_dropbox)
1568 }
1569 else{
1570 nr_troupes_dropbox="?"
1571 }
1572
1573
1574 html_type=" <h4>"+type_dropbox+"</h4>"
1575 html_pop=" <h4>"+nr_troupes_dropbox+"</h4>"
1576 if(obj.time_return==0 || obj.time_return==undefined){
1577 html_time=" <h4>"+days+":"+hours+":"+minutes+":"+seconds+"</h4>";
1578 }
1579 else{
1580 html_time=" <h4 class='possible_fake' date-fake='"+obj.time_return+"'>"+days+":"+hours+":"+minutes+":"+seconds+"</h4>";
1581 }
1582
1583
1584 console.log(obj)
1585 html_report=`
1586 <div class="popup" onclick='var popup = document.getElementById("table`+i+`");popup.classList.toggle("show")'><h4>show</h4>
1587 <table class="popuptext" id="table`+i+'"'+
1588 createReport(obj)+
1589 '</table></div>';
1590 }
1591 }
1592 coloana_nr=table[i].insertCell(3);
1593 coloana_nr.innerHTML=html_nr
1594 coloana_nr.className="info test"
1595
1596 coloana_tribe=table[i].insertCell(4);
1597 coloana_tribe.innerHTML=html_nr_tribe
1598 coloana_tribe.className="info"
1599
1600 coloana_type=table[i].insertCell(5);
1601 coloana_type.innerHTML=html_type
1602 coloana_type.className="info"
1603
1604 coloana_pop=table[i].insertCell(6);
1605 coloana_pop.innerHTML=html_pop
1606 coloana_pop.className="info"
1607
1608 coloana_time=table[i].insertCell(7);
1609 coloana_time.innerHTML=html_time
1610 coloana_time.className="info"
1611
1612 coloana_report=table[i].insertCell(8);
1613 coloana_report.innerHTML=html_report
1614 coloana_report.className="info"
1615 }
1616
1617 var stop=new Date();
1618 console.log("add info: "+(stop-start))
1619 sortIncomings();
1620
1621 }
1622 }
1623 })
1624
1625 }
1626 });
1627 }
1628
1629 //////////////////////////////////////////////////////sort incomings by.. /////////////////////////////////////////////////////////////////
1630
1631 function sortIncomings()
1632 {
1633 var table=document.getElementById("incomings_table").lastElementChild.children;
1634 var new_table=document.getElementById("incomings_table").lastElementChild;
1635 var last_row=table[table.length-1];
1636 var list=[];
1637 var list_info=[]
1638 for(let i=1;i<table.length-1;i++){
1639 list.push(table[i]);
1640 }
1641
1642
1643 //sort by nr
1644 document.getElementById("id_nr").addEventListener("click",function()
1645 {
1646 var start=new Date();
1647
1648 $(".tr_delimitator").remove();
1649 list.sort( (a,b)=>{
1650 return (parseInt(a.children[3].innerText)<parseInt(b.children[3].innerText))?1:(parseInt(a.children[3].innerText)>parseInt(b.children[3].innerText))?-1:
1651 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1652 });
1653
1654
1655 //add new table in page
1656 for(let i=0;i<list.length;i++)
1657 {
1658 new_table.appendChild(list[i]);
1659 }
1660 new_table.appendChild(last_row);
1661
1662 for(let i=0;i<list.length;i++)
1663 {
1664 list_info.push({
1665 coord_attacker:list[i].children[2].innerText,
1666 nr:parseInt(list[i].children[3].innerText),
1667 })
1668 }
1669 var pozitie=2;
1670 for(let i=0;i<list.length-1;i++)
1671 {
1672 let nr_atacuri=list_info[i].nr
1673 if(nr_atacuri>1 && list_info[i].coord_attacker !=list_info[i+1].coord_attacker)
1674 {
1675 var tableRef = document.getElementById("incomings_table").lastElementChild;
1676 var newRow = tableRef.insertRow(pozitie);
1677 newRow.className="tr_delimitator"
1678 for(let i=0; i<1;i++){
1679 let cell = newRow.insertCell();
1680 var delimitator = document.createTextNode('--');
1681 cell.appendChild(delimitator);
1682
1683 }
1684 pozitie++;
1685 }
1686 else if(nr_atacuri==1){
1687 break;
1688 }
1689 pozitie++;
1690 }
1691 var stop=new Date();
1692 console.log(stop-start)
1693 })
1694
1695 //sort by nr tribe
1696 document.getElementById("id_nr_tr").addEventListener("click",function()
1697 {
1698 var start=new Date();
1699
1700 $(".tr_delimitator").remove();
1701 list.sort( (a,b)=>{
1702 return (parseInt(a.children[4].innerText)<parseInt(b.children[4].innerText))?1:(parseInt(a.children[4].innerText)>parseInt(b.children[4].innerText))?-1:
1703 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1704 });
1705
1706
1707 //add new table in page
1708 for(let i=0;i<list.length;i++)
1709 {
1710 new_table.appendChild(list[i]);
1711 }
1712 new_table.appendChild(last_row);
1713
1714 for(let i=0;i<list.length;i++)
1715 {
1716 list_info.push({
1717 coord_attacker:list[i].children[2].innerText,
1718 nr:parseInt(list[i].children[4].innerText),
1719 })
1720 }
1721 var pozitie=2;
1722 for(let i=0;i<list.length-1;i++)
1723 {
1724 let nr_atacuri=list_info[i].nr
1725 if(nr_atacuri>1 && list_info[i].coord_attacker !=list_info[i+1].coord_attacker)
1726 {
1727 var tableRef = document.getElementById("incomings_table").lastElementChild;
1728 var newRow = tableRef.insertRow(pozitie);
1729 newRow.className="tr_delimitator"
1730 for(let i=0; i<1;i++){
1731 let cell = newRow.insertCell();
1732 var delimitator = document.createTextNode('--');
1733 cell.appendChild(delimitator);
1734
1735 }
1736 pozitie++;
1737 }
1738 else if(nr_atacuri==1){
1739 break;
1740 }
1741 pozitie++;
1742 }
1743 var stop=new Date();
1744 console.log(stop-start)
1745 })
1746
1747
1748 //sort by type
1749 document.getElementById("id_type").addEventListener("click",function()
1750 {
1751 var start=new Date();
1752 $(".tr_delimitator").remove();
1753 list.sort( (a,b)=>{
1754 return (a.children[5].innerText<b.children[5].innerText)?1:(a.children[5].innerText>b.children[5].innerText)?-1:
1755 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1756 });
1757
1758 //add new table in page
1759 for(let i=0;i<list.length;i++)
1760 {
1761 new_table.appendChild(list[i]);
1762 }
1763 new_table.appendChild(last_row);
1764
1765 var pozitie=2;
1766 for(let i=0;i<list.length-1;i++)
1767 {
1768 let type=list[i].children[5].innerText;
1769 if(type!="?" && list[i].children[5].innerText !=list[i+1].children[5].innerText)
1770 {
1771 var tableRef = document.getElementById("incomings_table").lastElementChild;
1772 var newRow = tableRef.insertRow(pozitie);
1773 newRow.className="tr_delimitator"
1774 for(let i=0; i<8;i++){
1775 let cell = newRow.insertCell();
1776 var delimitator = document.createTextNode('--');
1777 cell.appendChild(delimitator);
1778 }
1779 pozitie++;
1780 }
1781 pozitie++;
1782 }
1783 var stop=new Date();
1784 console.log(stop-start)
1785 })
1786
1787 //sort by nr pop
1788 document.getElementById("id_pop").addEventListener("click",function()
1789 {
1790 var start=new Date();
1791
1792 $(".tr_delimitator").remove();
1793 list.sort( (a,b)=>{
1794 if(a.children[6].innerText=="?")
1795 var a_comp=2000000;
1796 else
1797 var a_comp=parseFloat(a.children[6].innerText);
1798
1799 if(b.children[6].innerText=="?")
1800 var b_comp=2000000;
1801 else
1802 var b_comp=parseFloat(b.children[6].innerText);
1803
1804 return (a_comp>b_comp)?1:(a_comp<b_comp)?-1:
1805 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1806 });
1807
1808 //add new table in page
1809 for(let i=0;i<list.length;i++)
1810 {
1811 new_table.appendChild(list[i]);
1812 }
1813 new_table.appendChild(last_row);
1814 var stop=new Date();
1815 console.log(stop-start)
1816 })
1817
1818 //sort by time
1819 document.getElementById("id_time").addEventListener("click",function()
1820 {
1821 var start=new Date();
1822
1823 $(".tr_delimitator").remove();
1824
1825 list.sort( (a,b)=>{
1826 if(a.children[7].innerText=="?")
1827 var a_comp=10000000000;
1828 else{
1829 var v=a.children[7].innerText.split(":");
1830 var a_comp=parseInt(v[0])*24*3600+parseInt(v[1])*3600 +parseInt(v[2])*60 +parseInt(v[3]);
1831 }
1832
1833 if(b.children[7].innerText=="?")
1834 var b_comp=10000000000;
1835 else{
1836 var v=b.children[7].innerText.split(":");
1837 var b_comp=parseInt(v[0])*24*3600+parseInt(v[1])*3600 +parseInt(v[2])*60 +parseInt(v[3]);
1838 }
1839
1840 return (a_comp>b_comp)?1:(a_comp<b_comp)?-1:
1841 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1842 });
1843
1844 //add new table in page
1845 for(let i=0;i<list.length;i++)
1846 {
1847 new_table.appendChild(list[i]);
1848 }
1849 new_table.appendChild(last_row);
1850 var stop=new Date();
1851 console.log(stop-start)
1852 })
1853 }
1854
1855 //////////////////////////////////////////////////////tag incomings /////////////////////////////////////////////////////////////////
1856
1857 function tagIncomings(){
1858
1859 if(document.getElementsByClassName("info").length==0){
1860 UI.ErrorMessage("press first the button 'more info'!")
1861 }
1862 else{
1863 $("#btn_tag").attr('disabled', true);
1864 $(".tr_delimitator").remove();
1865 let csrf = window.csrf_token;
1866 var list_incomings_href=[]
1867 var indexIncoming=1;
1868 var table_incomings=document.getElementById("incomings_table").children[1].children
1869 var speedWorld=1;
1870 var speedTroupes=1;
1871 var nobleSpeed=2100*1000/(speedWorld*speedTroupes)//ms
1872 var ramSpeed=1800*1000/(speedWorld*speedTroupes)//ms
1873 var swordSpeed=1260*1000/(speedWorld*speedTroupes)//ms
1874 var axeSpeed=1080*1000/(speedWorld*speedTroupes)//ms
1875
1876 for(let i=1;i<table_incomings.length-1;i++){
1877 let incomingId=table_incomings[i].children[0].children[2].getAttribute("data-id");
1878 let coordOrigin=table_incomings[i].children[2].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
1879 let href=window.location.href.split("&")[0]+`&screen=info_command&ajaxaction=edit_other_comment&id=${incomingId}&h=${csrf}`
1880 var nameTroupe=table_incomings[i].children[0].innerText.trim().split(/\s+/)[0];
1881 let nr=parseInt(table_incomings[i].children[3].innerText);
1882 let nr_tribe=table_incomings[i].children[4].innerText;
1883 let type=table_incomings[i].children[5].innerText;
1884 let pop= (table_incomings[i].children[6].innerText !="?")?parseInt(table_incomings[i].children[6].innerText):"?"
1885 let time=table_incomings[i].children[7].innerText;
1886 let length_tr=table_incomings[i].children.length
1887 let nameAttacker=table_incomings[i].children[length_tr-4].innerText
1888 ////////////////////////////////get land time///////////////////////////////
1889 let time_land=table_incomings[i].children[length_tr-2].innerText
1890 let date_land=getLandTime(time_land)
1891
1892 let fake=false;
1893
1894
1895 if(table_incomings[i].getElementsByClassName("possible_fake").length>0 && table_incomings[i].children[0].getElementsByTagName("img").length==2){
1896 let date_home=new Date(table_incomings[i].getElementsByClassName("possible_fake")[0].getAttribute("date-fake"))
1897 let distance=parseFloat(table_incomings[i].children[length_tr-3].innerText);
1898 let labelName=table_incomings[i].children[0].getElementsByTagName("img")[1].src
1899 let time_attack=0;
1900 if(labelName.includes("snob.png")){
1901 time_attack=nobleSpeed*distance
1902 }else if(labelName.includes("ram.png")){
1903 time_attack=ramSpeed*distance
1904 }else if(labelName.includes("sword.png")){
1905 time_attack=swordSpeed*distance
1906 }else if(labelName.includes("axe.png")){
1907 time_attack=axeSpeed *distance
1908 }
1909
1910 let dateLand=new Date(date_land)
1911 console.log(time_attack)
1912 if(time_attack+date_home.getTime()>dateLand.getTime() ){
1913 fake=true;
1914 console.log("fake from "+coordOrigin)
1915 }
1916 var days=parseInt(time.split(":")[0])*24*3600*1000
1917 var hours=parseInt(time.split(":")[1])*3600*1000
1918 var min=parseInt(time.split(":")[2])*60*1000
1919 var sec=parseInt(time.split(":")[3])*1000
1920 var total_time=days+hours+min+sec-time_attack
1921 time=total_time/(24*3600*1000)
1922 time+=":00:00:00"
1923 }
1924
1925 let obj={
1926 incomingId:incomingId,
1927 coordOrigin:coordOrigin,
1928 href:href,
1929 nameTroupe:nameTroupe,
1930 nr:nr,
1931 nr_tribe:nr_tribe,
1932 type:type,
1933 pop:pop,
1934 time:time,
1935 nameAttacker:nameAttacker,
1936 fake:fake,
1937 }
1938 if(!table_incomings[i].children[0].innerText.toLowerCase().includes("attack"))
1939 list_incomings_href.push(obj)
1940 }
1941 list_incomings_href=list_incomings_href.reverse();
1942
1943 var url_length=list_incomings_href.length
1944 var start_tagging=new Date()
1945 function ajaxRequest (urls) {
1946 let current_url
1947 let labelInfo=""
1948 let obj=null
1949 if(urls.length>0){
1950 obj=urls.pop()
1951 let clientTime = Math.round(new Date().valueOf() / 1000);
1952 current_url+="&"+clientTime
1953 current_url=obj.href;
1954 labelInfo=obj.nameTroupe;
1955 let nr
1956 if(obj.nr_tribe=="?")
1957 nr=parseInt(obj.nr)
1958 else{
1959 nr=Math.max(parseInt(obj.nr), parseInt(obj.nr_tribe) )
1960 }
1961
1962 if(obj.type!="?"){
1963 obj.time=parseInt(obj.time.split(":")[0]);
1964
1965 if(obj.nr==20000)
1966 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type;
1967 else if(obj.type=="new_off")
1968 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" off";
1969 else if(obj.type.includes("def"))
1970 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type+" "+obj.time+"d";
1971 else
1972 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type+" "+obj.pop+"% "+obj.time+"d"
1973 // if(obj.nr==20000)
1974 // labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type;
1975 // else if(obj.type=="new_off")
1976 // labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" off";
1977 // else if(obj.type.includes("def"))
1978 // labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type
1979 // else
1980 // labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type
1981
1982
1983
1984
1985 }
1986 else{
1987 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr
1988 }
1989 if(obj.fake==true){
1990 labelInfo+=" (fake)";
1991 }
1992 // console.log(labelInfo)
1993 }
1994 else{
1995 current_url="stop"
1996 }
1997 console.log("in functie in plm "+urls.length)
1998 // console.log(current_url)
1999 var start_ajax=new Date();
2000 if (urls.length >= 0 && current_url!="stop") {
2001 // console.log("rename "+labelInfo)
2002 $.ajax({
2003 url: current_url,
2004 method: 'POST',
2005 dataType: "json",
2006 data: { text: labelInfo },
2007 headers: { 'TribalWars-Ajax': 1 },
2008 success: (data) => {
2009 $("span[data-id="+obj.incomingId+"]").find(".quickedit-label").text(labelInfo)
2010 UI.InfoMessage(indexIncoming+"/"+url_length)
2011 indexIncoming++;
2012 var stop_ajax=new Date();
2013 var dif_time=stop_ajax.getTime()-start_ajax.getTime();
2014 console.log("dif_time "+dif_time+" wait "+(200-dif_time))
2015 window.setTimeout(function(){
2016 ajaxRequest (list_incomings_href)
2017
2018 },200-dif_time)
2019 }
2020 })
2021
2022 }
2023 else
2024 {
2025 UI.SuccessMessage("done",2000)
2026 var stop_tagging=new Date();
2027 console.log("total time "+stop_tagging.getTime()-start_tagging.getTime())
2028
2029 }
2030 }
2031 ajaxRequest(list_incomings_href);
2032
2033 }
2034
2035
2036 }
2037
2038function getLandTime(time_land){
2039 var date_land=""
2040 let server_date=document.getElementById("serverDate").innerText.split("/")
2041 if(time_land.includes("today")){
2042 date_land=server_date[1]+"/"+server_date[0]+"/"+server_date[2]+" "+time_land.split(" ")[2];
2043 }
2044 else if(time_land.includes("tomorrow")){
2045 var tomorrow_date=new Date(server_date[1]+"/"+server_date[0]+"/"+server_date[2]);
2046 tomorrow_date.setDate(tomorrow_date.getDate()+1);
2047 date_land= ("0"+(tomorrow_date.getMonth()+1)).slice(-2)+"/"+("0"+tomorrow_date.getDate()).slice(-2)+"/"+tomorrow_date.getFullYear()+" "+time_land.split(" ")[2];
2048 }else if(time_land.includes("on")){
2049 var on=time_land.split(" ")
2050 date_land=on[1].split(".")[1]+"/"+on[1].split(".")[0]+"/"+server_date[2]+" "+on[3];
2051 }
2052 return date_land;
2053}
2054
2055function calcProductionTroupes(time,popReport){
2056 var maxPop=popReport;
2057 let nrAxemax=6000,nrLcMax=3000,nrRamMax=400;
2058 let countAxe=0,countLc=0,countRam=0;
2059 let time_temp=time
2060 while(maxPop<20000 && time_temp>0){
2061 if(countAxe<nrAxemax){
2062 countAxe++;
2063 time_temp-=axeTime;
2064 maxPop+=1
2065 }
2066 else break;
2067 }
2068 time_temp=time
2069 while(maxPop<20000 && time_temp>0){
2070 if(countLc<nrLcMax){
2071 countLc++;
2072 time_temp-=lhTime;
2073 maxPop+=4
2074 }
2075 else break;
2076 }
2077 time_temp=time
2078 while(maxPop<20000 && time_temp>0){
2079 if(countRam<nrRamMax){
2080 countRam++;
2081 time_temp-=ramTime;
2082 maxPop+=5
2083 }
2084 else break;
2085 }
2086
2087 console.log("axe "+countAxe+" lc "+countLc+" ram "+countRam)
2088 console.log(maxPop)
2089 maxPop=(maxPop/20000)*100
2090 return maxPop
2091}
2092 //////////////////////////////////////////////////////search reports /////////////////////////////////////////////////////////////////
2093
2094 var map_search
2095 function loadReports(){
2096 $.get(file_reports, function (data) {
2097 map_search=new Map( JSON.parse( lzw_decode(data) ));
2098
2099 console.log(map_search)
2100 loadReportsOk=true;
2101 $("#input_search").on("input",function(){
2102 let current_value=$("#input_search").val()
2103 if(current_value.match(/[0-9]{3}\|[0-9]{3}/)!=null){
2104 coords=current_value.match(/[0-9]{3}\|[0-9]{3}/g)
2105 console.log(coords)
2106 $("#report_view").empty()
2107 let contentHtml=""
2108 let nr_found=0;
2109 for(let i=0;i<coords.length;i++){
2110 if(map_search.has(coords[i])){
2111 let obj=map_search.get(coords[i]);
2112 console.log(coords[i])
2113 contentHtml+= `<div>
2114 <center style="margin:10px"><input class="btn evt-confirm-btn btn-confirm-yes" type="button"onclick="$('#table`+i+`').toggle('slow')" value="`+coords[i]+`"></center>
2115
2116 <table class="table_hide" id="table`+i+'"'+
2117 createReport(obj)+
2118 `</table></div>`;
2119 nr_found++;
2120 }
2121 }
2122 $("#report_view").append(contentHtml)
2123 $(".table_hide").hide();
2124 $("#progress_search").text("found: "+nr_found)
2125 }else{
2126 $("#report_view").empty()
2127 }
2128
2129 })
2130 $("#input_search").mouseout(function(){
2131 let current_value=$("#input_search").val()
2132 if(current_value.match(/[0-9]{3}\|[0-9]{3}/)!=null){
2133 let coords=current_value.match(/[0-9]{3}\|[0-9]{3}/g)
2134 $("#input_search").val(Array.from(coords).join(","))
2135 }
2136 })
2137
2138
2139
2140 }).done(function(){
2141 UI.SuccessMessage("load reports","fast")
2142
2143 })
2144 }
2145
2146///////////////////////////////////////////////////////create table for view report//////////////////////////////////////////////////////
2147function createReport(obj){
2148 var tableHTML=``;
2149 if(obj.attackingArmy!=undefined){
2150 tableHTML=`
2151 <tbody>
2152 <tr>
2153 <td>Battle time </td>
2154 <td>`+ obj.time_report +`</td>
2155 </tr>
2156 <tr>
2157 <td colspan="2" valign="top" height="160" style="border: solid 1px ; padding 4px;" class="report_ReportAttack">
2158 <table id="attack_info_att" width=100% style="border: 1px solid #DED3B9">
2159 <tbody>
2160 <tr>
2161 <th style="width:20%">Attacker:</th>
2162 <th >`+obj.nameAttacker+`</th>
2163 </tr>
2164 <tr>
2165 <td >Origin:</td>
2166 <td >`+obj.coordAttacker+`</td>
2167 </tr>
2168 <tr>
2169 <td colspan="2" style="padding:0px">`+
2170 createTableTroupes(obj.attackingArmy,obj.attackingArmyLosses)+
2171 `</td>
2172 </tr>
2173 </tbody>
2174 </table>
2175 </td>
2176 </tr>`
2177 }
2178 if(obj.defendingArmy!=undefined){
2179 tableHTML+= `
2180 <tr>
2181 <td colspan="2" valign="top" height="160" style="border: solid 1px ; padding 4px;" >
2182 <table id="attack_info_def" width=100% style="border: 1px solid #DED3B9">
2183 <tbody>
2184 <tr>
2185 <th style="width:20%">Defender:</th>
2186 <th >`+obj.nameDefender+`</th>
2187 </tr>
2188 <tr>
2189 <td >Origin:</td>
2190 <td >`+obj.coordDefender+`</td>
2191 </tr>
2192 <tr>
2193 <td colspan="2" style="padding:0px">`+
2194 createTableTroupes(obj.defendingArmy,obj.defendingArmyLosses)+
2195 `</td>
2196 </tr>
2197 </tbody>
2198 </table>
2199 </td>
2200 </tr>
2201 `
2202 }
2203
2204 if(obj.travelingTroops!=undefined){
2205 tableHTML+= `
2206 <tr>
2207 <td colspan="2" valign="top" height="160" style="border: solid 1px ; padding 4px;">
2208 <table id="attack_spy_away" width=100% style="border: 1px solid #DED3B9; width:100%; margin-top:5px;">
2209 <tbody>
2210 <tr>
2211 <th colspan="2">Units outside of village:</th>
2212 </tr>
2213
2214 <tr>
2215 <td colspan="2" >`+
2216 createTableTroupesAway(obj.travelingTroops)+
2217 `</td>
2218 </tr>
2219 </tbody>
2220 </table>
2221 </td>
2222 </tr>
2223 `
2224 }
2225 if(obj.attackingArmy!=undefined){
2226 tableHTML+="</tbody>"
2227 }
2228
2229 return tableHTML
2230}
2231
2232function createTableTroupes(totalArmy,lostArmy){
2233 let tableHTML=`
2234<table class="vis" >
2235 <tbody>
2236 <tr class="center">
2237 <td width="20"></td>`
2238
2239 let units=game_data.units
2240 for(let i=0;i<totalArmy.length;i++){
2241 if(units[i]!="militia"){
2242 if(totalArmy[i].count==0 )
2243 tableHTML+=`<td width="35"><img src="https://dsen.innogamescdn.com/asset/3ec301e5/graphic/unit/unit_`+units[i]+`.png" alt class="faded"</td>`
2244 else
2245 tableHTML+=`<td width="35"><img src="https://dsen.innogamescdn.com/asset/3ec301e5/graphic/unit/unit_`+units[i]+`.png"</td>`
2246 }
2247 }
2248 tableHTML+="</tr>"
2249 tableHTML+=`
2250 <tr>
2251 <td width="20">Quantity:</td>`
2252 for(let i=0;i<totalArmy.length;i++){
2253 if(units[i]!="militia"){
2254 if(totalArmy[i].count==0)
2255 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+units[i]+` hidden">`+totalArmy[i].count+"</td>"
2256 else
2257 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+units[i]+`">`+totalArmy[i].count+"</td>"
2258 }
2259 }
2260 tableHTML+="</tr>"
2261 tableHTML+=`
2262 <tr>
2263 <td width="20">Losses:</td>`
2264 for(let i=0;i<lostArmy.length;i++){
2265 if(units[i]!="militia"){
2266 if(lostArmy[i].count==0)
2267 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+units[i]+` hidden">`+lostArmy[i].count+"</td>"
2268 else
2269 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+units[i]+`">`+lostArmy[i].count+"</td>"
2270 }
2271 }
2272 tableHTML+="</tr>"
2273
2274
2275
2276
2277 tableHTML+="</tr></tbody></table>"
2278 return tableHTML
2279}
2280
2281
2282function createTableTroupesAway(totalArmy){
2283 let tableHTML=`
2284<table class="vis">
2285 <tbody>
2286 <tr class="center">`
2287
2288 let units=game_data.units
2289 Object.keys(totalArmy).forEach(key=>{
2290 if(totalArmy[key]==0)
2291 tableHTML+=`<th width="35"><img src="https://dsen.innogamescdn.com/asset/3ec301e5/graphic/unit/unit_`+key+`.png" alt class="faded"</th>`
2292 else
2293 tableHTML+=`<th width="35"><img src="https://dsen.innogamescdn.com/asset/3ec301e5/graphic/unit/unit_`+key+`.png"</th>`
2294
2295 })
2296
2297
2298 tableHTML+="</tr>"
2299 tableHTML+=`<tr>`
2300 Object.keys(totalArmy).forEach(key=>{
2301 if(totalArmy[key]==0)
2302 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+key+` hidden">`+totalArmy[key]+"</td>"
2303 else
2304 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+key+`">`+totalArmy[key]+"</td>"
2305
2306 })
2307 tableHTML+="</tr>"
2308
2309 tableHTML+="</tr></tbody></table>"
2310 return tableHTML
2311}