· 4 years ago · Apr 07, 2021, 07:16 PM
1var backgroundColor = "#32313f";
2var borderColor = "#3e6147";
3var headerColor = "#202825";
4var titleColor = "#ffffdf";
5var dropboxToken='wL-gSkCHJVYAAAAAAAAAAe_3JcxTnknKAEV6x7oa7yr07D_XKhQzQVYSIbFLk7NI'
6var databaseName="databaseW112/"
7
8
9var filename_reports=`${databaseName}Reports.txt`;
10var filename_incomings=`${databaseName}Incomings.txt`;
11var filename_users=`${databaseName}Users.txt`;
12
13var speedWorld=getSpeedConstant().worldSpeed;
14var speedTroupes=getSpeedConstant().unitSpeed;
15
16
17
18
19
20var speedWorld=getSpeedConstant().worldSpeed;
21var speedTroupes=getSpeedConstant().unitSpeed;
22
23
24
25var nobleSpeed=2100*1000/(speedWorld*speedTroupes)//ms
26var ramSpeed=1800*1000/(speedWorld*speedTroupes)//ms
27var swordSpeed=1320*1000/(speedWorld*speedTroupes)//ms
28var axeSpeed=1080*1000/(speedWorld*speedTroupes)//ms
29
30//formula ((base time/100)/speedWorld) * stable time factor //https://forum.tribalwars.net/index.php?threads/next-lvl-of-barracks-unit-production-speed.54638/
31var axeTime=Math.round( ((1320/100.0)/speedWorld) * 15.58823529 ) *1000//milisec
32var lhTime=Math.round( ((1800/100.0)/speedWorld) * 20.88235294 ) *1000//milisec
33var ramTime=Math.round( ((4800/100.0)/speedWorld) * 27.84313725 ) *1000//milisec
34
35
36
37
38//verify acces users
39let response_users= getUsers()
40var tribemates=response_users.split("\n").map(e=>{return e.trim().toLowerCase()})
41console.log(tribemates)
42if(!tribemates.includes(game_data.player.name.toLowerCase())){
43 UI.ErrorMessage("try later","slow")
44 throw new Error("you do not have acces");
45 // console.log("you do not have acces" )
46}
47if(game_data.locale!="en_DK" && game_data.world!="en112" )
48 throw new Error("it doesn't work");
49
50
51var engWord=[
52 "supports",
53 "today",
54 "tomorrow",
55 "on",
56 "attack"
57]
58var roWord=[
59 "sprijină",
60 "astăzi",
61 "mâine",
62 "data",
63 "atac"
64]
65var wordsTranslate=engWord
66
67var troopsPop = {
68 spear : 1,
69 sword : 1,
70 axe : 1,
71 archer : 1,
72 spy : 2,
73 light : 4,
74 marcher : 5,
75 heavy : 4,
76 ram : 5,
77 catapult : 8,
78 knight : 10,
79 snob : 100
80};
81
82
83html = `
84<div id="div_container" class="ui-widget-content" style="width:600px;background-color:${backgroundColor};cursor:move;z-index:50;">
85 <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>
86 <h2><center style="margin:10px"><u><font color="${titleColor}">Upload data</font></u></center></h2>
87 <table id="table_upload" class="" border="1" style="width: 100%;background-color:${backgroundColor};border-color:${borderColor}">
88 <tr>
89 <td style="text-align:center; width:auto; background-color:${headerColor}">
90 <h2><center style="margin:10px"><u><font color="${titleColor}">reports</font></u></center></h2>
91 </td>
92 <td style="text-align:center; width:auto; background-color:${headerColor}">
93 <center style="margin:10px"><u><input class="btn" type="button" id="upload_reports" onclick="uploadReportsManual()" value="Upload manual"></center>
94 <center style="margin:10px"><u><input class="btn" type="button" id="upload_reports" onclick="uploadReports()" value="Upload auto"></center>
95
96 </td>
97
98 <td style="text-align:center; width:auto; background-color:${headerColor}">
99 <p><center style="margin:10px"><font color="${titleColor}" id="progress_reports">progress</font></center></p>
100 </td>
101 </tr>
102 <tr>
103 <td style="text-align:center; width:auto; background-color:${headerColor}">
104 <h2><center style="margin:10px"><u><font color="${titleColor}">incomings</font></u></center></h2>
105 </td>
106 <td style="text-align:center; width:auto; background-color:${headerColor}">
107 <center style="margin:10px"><u><input class="btn" type="button" id="upload_incomings" onclick="uploadIncomings()" value="Upload"></center>
108 </td>
109 <td style="text-align:center; width:auto; background-color:${headerColor}">
110 <p><center style="margin:10px" ><font color="${titleColor}" id="progress_incomings">progress</font></center></p>
111 </td>
112 </tr>
113 <tr>
114 <td style="text-align:center; width:auto; background-color:${headerColor}">
115 <h2><center style="margin:10px"><u><font color="${titleColor}">All info</font></u></center></h2>
116 </td>
117 <td style="text-align:center; width:auto; background-color:${headerColor}">
118 <center style="margin:10px"><u><input class="btn" type="button" onclick="uploadAll()" value="Upload all"></center>
119 </td>
120 <td style="text-align:center; width:auto; background-color:${headerColor}">
121 <p><center style="margin:10px" ><font color="${titleColor}" id="progress_all">progress</font></center></p>
122 </td>
123 </tr>
124 </table>
125 <h2><center style="margin:10px"><u><font color="${titleColor}">Search reports</font></u></center></h2>
126 <table id="table_upload" class="" border="1" style="width: 100%;background-color:${backgroundColor};border-color:${borderColor}">
127 <tr>
128 <td style="text-align:center; width:auto; background-color:${headerColor}">
129 <center style="margin:10px"><u><input class="btn" type="button" onclick="loadReports()" value="Load reports"></center>
130 </td>
131 <td style="text-align:center; width:auto; background-color:${headerColor}">
132 <center style="margin:10px"><u><input style="text-align: center;" type="text" id="input_search" onclick="" placeholder="coord" ></center>
133 </td>
134 <td style="text-align:center; width:auto; background-color:${headerColor}">
135 <p><center style="margin:10px"><font color="${titleColor}" id="progress_search">status</font></center></p>
136 </td>
137 </tr>
138 </table>
139 <center style="margin:10px"><div id="report_view" style="background-color:#d2c09e"> report view <div><center>
140
141</div>
142`;
143////////////////////////////////////////add and remove window from page///////////////////////////////////////////
144if(document.getElementById("incomings_table")==null){
145 $("#div_container").remove()
146 $("#contentContainer").eq(0).prepend(html);
147 $("#mobileContent").eq(0).prepend(html);
148
149 if(game_data.device=="desktop"){
150 $("#div_container").css("position","fixed");
151 $("#div_container").draggable();
152 }
153}
154function closeWindow(){
155 $(".div_remove").remove()
156 list_href=[]
157 // window.location.reload();
158}
159
160function getUsers(){
161 var result
162 $.ajax({
163 url: "https://content.dropboxapi.com/2/files/download",
164 method: 'POST',
165 dataType: "text",
166 async: false,
167 headers: { 'Authorization': 'Bearer ' + dropboxToken,
168 'Dropbox-API-Arg': JSON.stringify({path: "/"+filename_users})},
169
170 success: (data) => {
171 result=data
172
173 },error:(err)=>{
174 alert(err)
175 reject(err)
176 }
177 })
178 return result
179}
180
181function addWindow(){
182 $("#contentContainer").eq(0).prepend(html);
183 $("#mobileContent").eq(0).prepend(html);
184
185 if(game_data.device=="desktop"){
186 $("#div_container").css("position","fixed");
187 $("#div_container").draggable();
188 }
189}
190
191var loadReportsOk=false;
192$("#input_search").on("input",function(){
193 if(loadReportsOk==false)
194 UI.ErrorMessage("upload reports first","fast")
195 })
196 $("#input_search").mouseout(function(){
197 if(loadReportsOk==false)
198 $("#input_search").val("");
199 })
200
201if(document.getElementById("incomings_table")!=null){
202 window.setInterval(function(){
203
204 var rows= $(".row_a,.row_b")
205 console.log("check incomings")
206 for(let i=0;i<rows.length;i++)
207 {
208 let currentHour=rows[i].children[rows[i].children.length-1].innerText.split(":")
209 if(parseInt(currentHour[0])==0 && parseInt(currentHour[1])==0 && parseInt(currentHour[2])<20){
210 rows[i].remove();
211 }
212 // else{
213 // break;
214 // }
215 }
216 },10000)
217}
218
219
220async function uploadAll(){
221 let resultReports= await uploadReports().catch(err=>alert(err))
222 console.log("status uploads",resultReports)
223 let resultIncomings= await uploadIncomings().catch(err=>alert(err))
224 console.log("status incomings",resultIncomings)
225 let resultSupports= await uploadSupports().catch(err=>alert(err))
226 console.log("status support",resultSupports)
227
228
229
230
231}
232
233
234/////////////////////////////////////////////////get all reports info//////////////////////////////////////////////////////////////////
235async function uploadReports(){
236
237
238 document.getElementById("progress_reports").innerText="get links..";
239
240 let nameHistoryReports=game_data.world +"HistoryReports"
241 let map_idReports=new Map();
242 let current_page=window.location.href;
243 if(localStorage.getItem(nameHistoryReports)==null){
244 localStorage.setItem(nameHistoryReports,JSON.stringify(Array.from(new Map().entries())))
245 }
246 else{
247 map_idReports=new Map(JSON.parse(localStorage.getItem(nameHistoryReports)));
248 Array.from(map_idReports.keys()).forEach(el=>{
249 let currentDate=new Date();
250 let reportDate=new Date(map_idReports.get(el))
251 if(currentDate.getTime()- reportDate.getTime() > 20*24*3600*1000){
252 console.log("remove: "+map_idReports.get(el))
253 map_idReports.delete(el)
254 }
255 })
256
257 }
258 var [list_href, map_dropbox]=await Promise.all([getLinks(true,map_idReports), readFileDropbox(filename_reports)]).catch(err=>{alert(err)})
259 map_dropbox=new Map( JSON.parse( lzw_decode(map_dropbox) ));
260
261
262 console.log("aici baaa")
263 console.log(map_idReports)
264
265 $(document).on('click','.autoHideBox',function(){
266 UI.SuccessMessage("stop",2000)
267 list_href=[]
268 })
269
270
271 list_href=list_href.reverse();
272 console.log(list_href)
273 var list_data_reports=[]
274 var nr_reports=0;
275 var nr_reports_total=list_href.length
276 addWindow();
277 document.getElementById("progress_reports").innerText=nr_reports+"/"+nr_reports_total+" reports";
278 // UI.InfoMessage(nr_reports+"/"+nr_reports_total+" reports")
279 var current_url
280
281 return new Promise(async(resolve,reject)=>{
282 async function ajaxRequest (urls) {
283 var time= 0
284 if(urls.length>0)
285 current_url=urls.pop().href;
286 else
287 current_url="stop"
288 console.log("inside function "+urls.length)
289 if (urls.length >= 0 && current_url!= "stop") {
290 var start_ajax=new Date()
291 $.ajax({
292 method: 'GET',
293 url: current_url,
294 })
295 .done(function (result) {
296 document.body.innerHTML= result;
297 result=null
298 // addWindow();
299 var startReport=new Date().getTime();
300 let list=getDataReport(tribemates);
301 var stopReport=new Date().getTime();
302 console.log(stopReport-startReport)
303 console.log(list)
304 if(list==null ){
305 console.log("recaptcha, upload again")
306 UI.ErrorMessage("recaptcha, upload again","slow")
307 addWindow();
308 document.getElementById("progress_reports").innerText="recaptcha";
309 list_href=[]
310
311 }
312 else{
313 console.log("reports info "+list.length)
314 for(let j=0;j<list.length;j++){
315 list_data_reports.push({"coord":list[j].coord,"reportInfo":list[j].reportInfo});
316 }
317 // document.getElementById("progress_reports").innerText=nr_reports+"/"+nr_reports_total+" reports";
318 UI.SuccessMessage(nr_reports+"/"+nr_reports_total+" reports")
319
320 nr_reports++;
321 let idReport= parseInt(current_url.match(/view=(\d+)/)[1]);
322 let currentDate=new Date().getFullYear()+"-"+(new Date().getMonth()+1)+"-"+new Date().getDate();
323 if(document.getElementsByClassName("unit-item unit-item-axe").length>0){
324 var time_report=document.getElementsByClassName("vis")[3].firstElementChild.children[1].children[1].innerText;
325 map_idReports.set(idReport,time_report)
326 }
327 else{
328 map_idReports.set(idReport,currentDate)
329 }
330 }
331 console.log("id_report "+map_idReports.size)
332 var stop_ajax=new Date();
333 var dif_time=stop_ajax.getTime()-start_ajax.getTime();
334 console.log("dif_time "+dif_time+" wait "+(200-dif_time))
335 window.setTimeout(function(){
336 ajaxRequest(list_href);
337 },200-dif_time)
338 });
339
340 }
341 else
342 {
343 ////////////////////////////////////extract data from dropbox/////////////////////////////////////////
344 console.log("before reading map from dropbox")
345
346
347
348 console.log(map_dropbox)
349 // map_dropbox=new Map( JSON.parse( lzw_decode(map_dropbox) ));
350 console.log("map_dropbox")
351 console.log(map_dropbox);
352 console.log("list_data_reports")
353 console.log(list_data_reports);
354
355
356 document.body.innerHTML= httpGet(current_page);
357 addWindow();
358 let nr_update=0;
359 let nr_write=0;
360 list_data_reports.forEach(function(el){
361 if(map_dropbox.has(el.coord)){//update el[0]=key
362 if(el.coord==el.reportInfo.coordAttacker){
363 console.log("update for offensive" && el.reportInfo.typeAttacker!="?")
364 if(el.reportInfo.typeAttacker=="new_off"){
365 console.log("new_off, don't do anything")
366 }else{
367 console.log("coord exists in dropbox already")
368 let time_prev=new Date(map_dropbox.get(el.coord).time_report);
369 let time_current=new Date(el.reportInfo.time_report);
370 console.log(time_current-time_prev)
371 if(time_current-time_prev<48*3600*1000 && (el.reportInfo.typeAttacker=="def" )){//48 hours
372 console.log("it was def_cat")
373 map_dropbox.set(el.coord,el.reportInfo)
374 nr_update++;
375 }
376 else if(time_current-time_prev>0 ){
377 console.log("update coord: "+el.coord+" in dropbox")
378 map_dropbox.set(el.coord,el.reportInfo)
379 nr_update++;
380 }
381
382 }
383 }
384 if(el.coord==el.reportInfo.coordDefender && el.reportInfo.typeDefender!="?"){
385 console.log("update for defensive")
386 if(el.reportInfo.typeDefender=="new_off"){
387 console.log("new_off, don't do anything")
388 }else{
389 console.log("coord exists in dropbox already")
390 let time_prev=new Date(map_dropbox.get(el.coord).time_report);
391 let time_current=new Date(el.reportInfo.time_report);
392 console.log(time_current-time_prev)
393 if(time_current-time_prev<48*3600*1000 && (el.reportInfo.typeDefender=="def" )){//48 hours
394 console.log("it was def_cat")
395 map_dropbox.set(el.coord,el.reportInfo)
396 nr_update++;
397 }
398 else if(time_current-time_prev>0 ){
399 console.log("update coord: "+el.coord+" in dropbox")
400 map_dropbox.set(el.coord,el.reportInfo)
401 nr_update++;
402 }
403
404 }
405 }
406 }
407 else{//write
408 console.log("write coord in dropbox")
409 map_dropbox.set(el.coord,el.reportInfo)
410 nr_write++;
411 }
412 })
413 UI.SuccessMessage("compressing database, wait few seconds",2000)
414
415 var nr_start=new Date().getTime()
416 var length_data=JSON.stringify(Array.from(map_dropbox.entries())).length;
417
418 var data=JSON.stringify(Array.from(map_dropbox.entries()))
419 data=replaceSpecialCaracters(data)
420 data=lzw_encode(data)
421 var length_data_compressed=data.length;
422
423 var nr_stop=new Date().getTime()
424 console.log("after")
425 console.log(map_dropbox)
426 console.log("compressing data: "+(nr_stop-nr_start))
427 console.log("length before: "+length_data+" length after compression: "+length_data_compressed)
428 console.log("compression factor: "+(length_data/length_data_compressed) )
429
430 let result=await uploadFile(data,filename_reports,dropboxToken).catch(err=>alert(err))
431 if(result=="succes"){
432 localStorage.setItem(nameHistoryReports,JSON.stringify(Array.from(map_idReports.entries())))
433 console.log("save reports "+map_idReports.size)
434 document.getElementById("progress_reports").innerText="done";
435 UI.SuccessMessage("upload reports done\n update: "+nr_update+" \nwrite: "+nr_write,2000)
436 resolve("succes")
437
438 }
439 else
440 reject("error")
441
442 }
443 }
444 ajaxRequest(list_href);
445 })
446
447
448}
449
450/////////////////////////////////////////////////get all reports info MANUAL//////////////////////////////////////////////////////////////////
451async function uploadReportsManual(){
452 let types=["off","new_off","def","def_cat",'def_spy',"spy","def??","none"]
453 document.getElementById("progress_reports").innerText="get links..";
454
455 let nameHistoryReports=game_data.world +"HistoryReports"
456 var map_idReports=new Map();
457 var current_page=window.location.href;
458 if(localStorage.getItem(nameHistoryReports)==null){
459 localStorage.setItem(nameHistoryReports,JSON.stringify(Array.from(new Map().entries())))
460 }
461 else{
462 map_idReports=new Map(JSON.parse(localStorage.getItem(nameHistoryReports)));
463 Array.from(map_idReports.keys()).forEach(el=>{
464 let currentDate=new Date();
465 let reportDate=new Date(map_idReports.get(el))
466 if(currentDate.getTime()- reportDate.getTime() > 20*24*3600*1000){
467 console.log("remove: "+map_idReports.get(el))
468 map_idReports.delete(el)
469 }
470 })
471
472 }
473
474 var [list_href, map_dropbox]=await Promise.all([getLinks(true,map_idReports), readFileDropbox(filename_reports)]).catch(err=>{alert(err)})
475 map_dropbox=new Map( JSON.parse( lzw_decode(map_dropbox) ));
476
477 $(document).on('click','.autoHideBox',function(){
478 UI.SuccessMessage("stop",2000)
479 list_href=[]
480 })
481
482 list_href=list_href.reverse();
483 console.log(list_href)
484 var list_data_reports=[]
485 var nr_reports=0;
486 var nr_reports_total=list_href.length
487 addWindow();
488 document.getElementById("progress_reports").innerText=nr_reports+"/"+nr_reports_total+" reports";
489 // UI.InfoMessage(nr_reports+"/"+nr_reports_total+" reports")
490 var current_url
491 async function ajaxRequest (urls) {
492 var time= 0
493 if(urls.length>0)
494 current_url=urls.pop().href;
495 else
496 current_url="stop"
497 console.log("inside function "+urls.length)
498 if (urls.length >= 0 && current_url!= "stop") {
499 var start_ajax=new Date()
500 $.ajax({
501 method: 'GET',
502 url: current_url,
503 })
504 .done(function (result) {
505 document.body.innerHTML= result;
506 result=null
507 // addWindow();
508 let list=getDataReport(tribemates);
509 console.log(list)
510 if(list==null ){
511 console.log("recaptcha, upload again")
512 UI.ErrorMessage("recaptcha, upload again","slow")
513 addWindow();
514 document.getElementById("progress_reports").innerText="recaptcha";
515 list_href=[]
516
517 }
518 else{
519 console.log("reports info "+list.length)
520 for(let j=0;j<list.length;j++){
521
522 if(document.getElementById("select_type_attacker")==null && !tribemates.includes(list[j].reportInfo.nameAttacker)){
523 let type=(list[j].reportInfo.typeAttacker!="?")?list[j].reportInfo.typeAttacker:"none"
524
525 console.log(type)
526 let htmlSelect='<select id="select_type_attacker" style="width: 100%">';
527 for(let k=types.length-1;k>=0;k--){
528 htmlSelect+='<option value="'+types[k]+'">'+types[k]+'</option>'
529 }
530 htmlSelect+='</select>';
531 $("#attack_info_att").append(htmlSelect)
532 document.getElementById("select_type_attacker").value=type
533 }
534 if(document.getElementById("select_type_defender")==null && !tribemates.includes(list[j].reportInfo.nameDefender)){
535 let type=(list[j].reportInfo.typeDefender!="?")?list[j].reportInfo.typeDefender:"none"
536 console.log(type)
537 let htmlSelect='<select id="select_type_defender" style="width: 100%">';
538 for(let k=types.length-1;k>=0;k--){
539 htmlSelect+='<option value="'+types[k]+'">'+types[k]+'</option>'
540 }
541 htmlSelect+='</select>';
542 $("#attack_info_def").append(htmlSelect)
543 document.getElementById("select_type_defender").value=type
544
545 }
546
547 }
548 // document.getElementById("progress_reports").innerText=nr_reports+"/"+nr_reports_total+" reports";
549 UI.SuccessMessage(nr_reports+"/"+nr_reports_total+" reports")
550
551 nr_reports++;
552 let idReport= parseInt(current_url.match(/view=(\d+)/)[1]);
553 let currentDate=new Date().getFullYear()+"-"+(new Date().getMonth()+1)+"-"+new Date().getDate();
554 if(document.getElementsByClassName("unit-item unit-item-axe").length>0){
555 var time_report=document.getElementsByClassName("vis")[3].firstElementChild.children[1].children[1].innerText;
556 map_idReports.set(idReport,time_report)
557 }
558 else{
559 map_idReports.set(idReport,currentDate)
560 }
561 }
562 var stop_ajax=new Date();
563 var dif_time=stop_ajax.getTime()-start_ajax.getTime();
564 console.log("dif_time "+dif_time+" wait "+(200-dif_time))
565
566 window.onkeyup = function(e) {
567 console.log(e.which)
568 if(e.which==13 && current_url!= "stop"){
569 console.log("next")
570 window.onkeyup = function(e){}
571
572 for(let j=0;j<list.length;j++){
573 if(document.getElementById("select_type_attacker")!=null){
574 let type=document.getElementById("select_type_attacker").value
575 if(type!="none"){
576 list[j].reportInfo.typeAttacker=type
577 list_data_reports.push({"coord":list[j].coord,"reportInfo":list[j].reportInfo});
578 }
579 }
580 if(document.getElementById("select_type_defender")!=null){
581 let type=document.getElementById("select_type_defender").value
582 if(type!="none"){
583 list[j].reportInfo.typeDefender=type
584 list_data_reports.push({"coord":list[j].coord,"reportInfo":list[j].reportInfo});
585 }
586 }
587
588 }
589 console.log("new list")
590 console.log(list)
591 console.log("big list")
592 console.log(list_data_reports)
593
594 window.setTimeout(function(){
595 ajaxRequest(list_href);
596 },200-dif_time)
597 }
598 e.preventDefault()
599 }
600 });
601
602 }
603 else
604 {
605 ////////////////////////////////////extract data from dropbox/////////////////////////////////////////
606 console.log("before extracting data from dropbox")
607
608
609 console.log("map_dropbox")
610 console.log(map_dropbox);
611 console.log("list_data_reports")
612 console.log(list_data_reports);
613
614
615 document.body.innerHTML= httpGet(current_page);
616 addWindow();
617 let nr_update=0;
618 let nr_write=0;
619 list_data_reports.forEach(function(el){
620 if(map_dropbox.has(el.coord)){//update el[0]=key
621 if(el.coord==el.reportInfo.coordAttacker){
622 console.log("update for offensive" && el.reportInfo.typeAttacker!="?")
623 if(el.reportInfo.typeAttacker=="new_off"){
624 console.log("new_off, don't do anything")
625 }else{
626 console.log("coord exists in dropbox already")
627 let time_prev=new Date(map_dropbox.get(el.coord).time_report);
628 let time_current=new Date(el.reportInfo.time_report);
629 console.log(time_current-time_prev)
630 if(time_current-time_prev<48*3600*1000 && (el.reportInfo.typeAttacker=="def" )){//48 hours
631 console.log("a fost def_cat")
632 map_dropbox.set(el.coord,el.reportInfo)
633 nr_update++;
634 }
635 else if(time_current-time_prev>0 ){
636 console.log("update coord: "+el.coord+" in dropbox")
637 map_dropbox.set(el.coord,el.reportInfo)
638 nr_update++;
639 }
640
641 }
642 }
643 if(el.coord==el.reportInfo.coordDefender && el.reportInfo.typeDefender!="?"){
644 console.log("update for defensive")
645 if(el.reportInfo.typeDefender=="new_off"){
646 console.log("new_off, don't do anything")
647 }else{
648 console.log("coord exists in dropbox already")
649 let time_prev=new Date(map_dropbox.get(el.coord).time_report);
650 let time_current=new Date(el.reportInfo.time_report);
651 console.log(time_current-time_prev)
652 if(time_current-time_prev<48*3600*1000 && (el.reportInfo.typeDefender=="def" )){//48 hours
653 console.log("a fost def_cat")
654 map_dropbox.set(el.coord,el.reportInfo)
655 nr_update++;
656 }
657 else if(time_current-time_prev>0 ){
658 console.log("update coord: "+el.coord+" in dropbox")
659 map_dropbox.set(el.coord,el.reportInfo)
660 nr_update++;
661 }
662
663 }
664 }
665 }
666 else{//write
667 console.log("write coord in dropbox")
668 map_dropbox.set(el.coord,el.reportInfo)
669 nr_write++;
670 }
671 })
672 UI.SuccessMessage("compressing database, wait few seconds",2000)
673
674 var nr_start=new Date().getTime()
675 var length_data=JSON.stringify(Array.from(map_dropbox.entries())).length;
676
677 var data=JSON.stringify(Array.from(map_dropbox.entries()))
678 data=replaceSpecialCaracters(data)
679 data=lzw_encode(data)
680 var length_data_compressed=data.length;
681
682 var nr_stop=new Date().getTime()
683 console.log("after")
684 console.log(map_dropbox)
685 console.log("compressing data: "+(nr_stop-nr_start))
686 console.log("length before: "+length_data+" length after compression: "+length_data_compressed)
687 console.log("compression factor: "+(length_data/length_data_compressed) )
688
689 let result=await uploadFile(data,filename_reports,dropboxToken).catch(err=>alert(err))
690 if(result=="succes")
691 console.log("status upload succesc")
692 else
693 console.log("status upload error")
694
695 localStorage.setItem(nameHistoryReports,JSON.stringify(Array.from(map_idReports.entries())))
696 console.log("save reports "+map_idReports.size)
697 document.getElementById("progress_reports").innerText="done";
698 window.setTimeout(()=>{
699 UI.SuccessMessage("upload reports done\n update: "+nr_update+" \nwrite: "+nr_write,2000)
700 },1000)
701
702
703
704
705 }
706 }
707 ajaxRequest(list_href);
708
709}
710///////////////////////////////////////////////////////////////////get all links////////////////////////////////////////////////////////////////
711function getLinks(all,map_idReports){
712
713 // var currentPage=document.body.innerHTML;
714 return new Promise((resolve,reject)=>{
715 let list_pages=[]
716 let current_href=window.location.href;
717 if(current_href.includes("screen=report"))
718 all=false;
719 if(all){// all pages from all folders
720 let href= game_data.link_base_pure+"report&mode=all&group_id=-1";
721 document.body.innerHTML=httpGet(href)
722 }
723 let page_size=parseInt(document.getElementsByName("page_size")[0].value)
724 if(document.getElementsByClassName("vis")[1].getElementsByTagName("select").length>0){
725 Array.from(document.getElementsByClassName("vis")[1].getElementsByTagName("select")[0]).forEach(function(item){
726 list_pages.push(item.value)
727 })
728 }
729 else if(document.getElementsByClassName("paged-nav-item").length>0){//all pages from the current folder
730 let length_page=document.getElementsByClassName("paged-nav-item").length
731 for(let i=0;i<length_page+1;i++){
732 let current=game_data.link_base_pure+`report&mode=all&from=${i*page_size}`
733 list_pages.push(current);
734
735 }
736 }
737 else{
738 let current_link=game_data.link_base_pure+`report&mode=all&from=0`
739 list_pages.push(current_link);
740 }
741 list_pages=list_pages.reverse();
742
743 console.log("list pages")
744 console.log(list_pages)
745
746 let list_href=[];
747 var indexIncoming=1;
748 var url_length=list_pages.length
749 function ajaxRequest (urls) {
750 let current_url
751
752 if(urls.length>0){
753 current_url=urls.pop()
754 }
755 else{
756 current_url="stop"
757 }
758 console.log("in functie in plm "+urls.length)
759 // console.log(current_url)
760 var start_ajax=new Date();
761 if (urls.length >= 0 && current_url!="stop") {
762 $.ajax({
763 url: current_url,
764 method: 'get',
765 success: (data) => {
766 document.body.innerHTML=data
767 let table_report= document.getElementById("report_list").firstElementChild.children;
768 let year=document.getElementById("serverDate").innerText.split("/")[2];
769 for(let i=1;i<table_report.length-1;i++){
770 let month_day=table_report[i].children[2].innerText;
771 let date_report=new Date(year+" "+month_day)
772 let current_date=new Date();
773 if(Math.abs(current_date-date_report)<19*24*3600*1000){//old
774
775 let img_icon=table_report[i].children[1].children[0].children.length;
776 if(img_icon>0){//wordsTranslate[0]=supports ///// || table_report[i].innerText.includes(wordsTranslate[0])
777 let obj={
778 id:table_report[i].getElementsByTagName("a")[0].getAttribute("data-id"),
779 href:table_report[i].getElementsByTagName("a")[0].href
780 }
781 if(!map_idReports.has(parseInt(obj.id)))
782 list_href.push(obj)
783 }
784 }
785 }
786
787
788 UI.InfoMessage("page "+indexIncoming+"/"+url_length)
789 indexIncoming++;
790 var stop_ajax=new Date();
791 var dif_time=stop_ajax.getTime()-start_ajax.getTime();
792 window.setTimeout(function(){
793 ajaxRequest (list_pages)
794 },200-dif_time)
795 }
796 })
797
798 }
799 else
800 {
801 UI.SuccessMessage("done",2000)
802 resolve(list_href)
803 }
804 }
805 if(list_pages.length>0)
806 ajaxRequest(list_pages);
807 else
808 reject("error??")
809
810 })
811
812}
813
814
815
816
817////////////////////////////////////////////////////////////get data from report////////////////////////////////////////////////////////////////////
818
819function getDataReport(tribemates){
820 var mapObject={};
821 var listObject=[];
822
823 // tribemates=[]
824 var reportInfo={};
825 try{
826 if($("#attack_info_att").length>0){
827 var attackInfo=$("#attack_info_att");
828 if(attackInfo.text().includes("deleted") || attackInfo.text().includes("---")){
829 console.log("error upload")
830 return 0;
831 }
832 var defenseInfo = $("#attack_info_def");
833 if(defenseInfo.text().includes("deleted") || defenseInfo.text().includes("---")){
834 console.log("error upload")
835 return 0;
836 }
837
838 var attackingPlayer = attackInfo.find('a[href*=info_player]');
839 var defendingPlayer = defenseInfo.find('a[href*=info_player]');
840 var attackingPlayerId=attackingPlayer.prop('href').match(/id=(\w+)/)[1];
841 var defendingPlayerId=defendingPlayer.prop('href').match(/id=(\w+)/)[1];
842 reportInfo.attackingPlayerId=attackingPlayerId;
843 reportInfo.defendingPlayerId=defendingPlayerId;
844 }
845 ///////////////////////////////////////////////////////////////////////////
846
847
848 if(document.getElementsByClassName("unit-item unit-item-axe").length>1)
849 {
850 var time_report=document.getElementsByClassName("vis")[3].firstElementChild.children[1].children[1].innerText;
851 // if(new Date()-new Date(time_report)>14*24*3600*1000)//report too old
852 // return listObject;
853 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()) } })
854 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()) } })
855
856 reportInfo.time_report=time_report
857 var report=document.getElementsByClassName("vis")[3].innerHTML;
858 var index=report.indexOf('<div class="no-preview">');
859 report=report.substring(0,index);
860 // report=lzw_encode(report);
861 // reportInfo.report=report;
862
863 ///////////////////////////defender date////////////////////
864 var nameAttacker=document.getElementById("attack_info_att").children[0].children[0].children[1].innerText;
865 var coordAttacker=document.getElementsByClassName("village_anchor")[0].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
866 var nameDefender=document.getElementById("attack_info_def").children[0].children[0].children[1].innerText;
867 var coordDefender=document.getElementsByClassName("village_anchor")[1].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
868 reportInfo.nameAttacker=nameAttacker;
869 reportInfo.coordAttacker=coordAttacker;
870 reportInfo.nameDefender=nameDefender;
871 reportInfo.coordDefender=coordDefender;
872
873 if(reportInfo.attackingArmy[3].type=="archer"){
874 var spear_atac_total =reportInfo.attackingArmy[0].count
875 var sword_atac_total =reportInfo.attackingArmy[1].count
876 var axe_atac_total =reportInfo.attackingArmy[2].count
877 var archer_atac_total=reportInfo.attackingArmy[3].count
878 var spy_atac_total =reportInfo.attackingArmy[4].count*2
879 var light_atac_total =reportInfo.attackingArmy[5].count*4
880 var heavy_atac_total =reportInfo.attackingArmy[7].count*6
881 var ram_atac_total =reportInfo.attackingArmy[8].count*5
882 var cat_atac_total =reportInfo.attackingArmy[9].count*8
883 var noble=parseInt(document.getElementsByClassName("unit-item unit-item-snob")[0].innerText)*100;
884
885 var spear_atac_lost =reportInfo.attackingArmyLosses[0].count
886 var sword_atac_lost =reportInfo.attackingArmyLosses[1].count
887 var axe_atac_lost =reportInfo.attackingArmyLosses[2].count
888 var archer_atac_lost=reportInfo.attackingArmyLosses[3].count
889 var spy_atac_lost =reportInfo.attackingArmyLosses[4].count*2
890 var light_atac_lost =reportInfo.attackingArmyLosses[5].count*4
891 var heavy_atac_lost =reportInfo.attackingArmyLosses[7].count*6
892 var ram_atac_lost =reportInfo.attackingArmyLosses[8].count*5
893 var cat_atac_lost =reportInfo.attackingArmyLosses[9].count*8
894 }
895 else{
896 var spear_atac_total=reportInfo.attackingArmy[0].count
897 var sword_atac_total=reportInfo.attackingArmy[1].count
898 var axe_atac_total =reportInfo.attackingArmy[2].count
899 var spy_atac_total =reportInfo.attackingArmy[3].count*2
900 var light_atac_total=reportInfo.attackingArmy[4].count*4
901 var heavy_atac_total=reportInfo.attackingArmy[5].count*6
902 var ram_atac_total =reportInfo.attackingArmy[6].count*5
903 var cat_atac_total =reportInfo.attackingArmy[7].count*8
904 var noble=parseInt(document.getElementsByClassName("unit-item unit-item-snob")[0].innerText)*100;
905 var archer_atac_total=0;
906
907 var spear_atac_lost=reportInfo.attackingArmyLosses[0].count
908 var sword_atac_lost=reportInfo.attackingArmyLosses[1].count
909 var axe_atac_lost =reportInfo.attackingArmyLosses[2].count
910 var spy_atac_lost =reportInfo.attackingArmyLosses[3].count*2
911 var light_atac_lost=reportInfo.attackingArmyLosses[4].count*4
912 var heavy_atac_lost=reportInfo.attackingArmyLosses[5].count*6
913 var ram_atac_lost =reportInfo.attackingArmyLosses[6].count*5
914 var cat_atac_lost =reportInfo.attackingArmyLosses[7].count*8
915
916 }
917
918
919
920 var typeAttacker="?";
921 var nrTroupesAttacker=0;
922 var nrTroupesAttackerTotal=0;
923 var time_return=0;
924
925
926 if(axe_atac_total+light_atac_total+ram_atac_total >=2500 && axe_atac_total>=2500)
927 {
928 typeAttacker="off";
929 nrTroupesAttacker=(axe_atac_total-axe_atac_lost)+(light_atac_total-light_atac_lost) + (ram_atac_total-ram_atac_lost);
930 console.log("ianinte")
931 if(ram_atac_total>0 && noble==0 && axe_atac_total>=2000){
932 console.log("aici")
933 nrTroupesAttackerTotal=axe_atac_total+light_atac_total+ram_atac_total
934 let time_attack=ramSpeed*calcDistance(coordAttacker,coordDefender)
935 time_return=new Date(time_report).getTime()+time_attack;
936 time_return=new Date(time_return)
937 let date=new Date(time_return).toDateString().split(" ").slice(1).join(" ")
938 time_return=date+" "+new Date(time_return).toTimeString().split(" ")[0]
939
940 }else if(axe_atac_total>=2000 && noble==0 ){
941 nrTroupesAttackerTotal=axe_atac_total+light_atac_total
942 time_attack=axeSpeed*calcDistance(coordAttacker,coordDefender)
943 time_return=new Date(time_report).getTime()+time_attack;
944 time_return=new Date(time_return)
945 let date=new Date(time_return).toDateString().split(" ").slice(1).join(" ")
946 time_return=date+" "+new Date(time_return).toTimeString().split(" ")[0]
947
948 }else if(axe_atac_total>=2000 && noble>0){
949 nrTroupesAttackerTotal=axe_atac_total+light_atac_total+ram_atac_total
950 time_attack=axeSpeed*calcDistance(coordAttacker,coordDefender)
951 time_return=new Date(time_report).getTime()+time_attack;
952 time_return=new Date(time_return)
953 let date=new Date(time_return).toDateString().split(" ").slice(1).join(" ")
954 time_return=date+" "+new Date(time_return).toTimeString().split(" ")[0]
955 }
956 }
957 else if(spy_atac_total>10000){
958 typeAttacker="spy";
959 nrTroupesAttacker=spy_atac_total-spy_atac_lost;
960 }
961 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)
962 {
963 typeAttacker="new_off";
964 }
965 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){
966 typeAttacker="def";
967 }
968 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)
969 typeAttacker="def_spy";
970
971 if((cat_atac_total>=50*8 && typeAttacker=="def") || (cat_atac_total>=50*8 && axe_atac_total+light_atac_total+ram_atac_total<20)){
972 typeAttacker="def_cat";
973 nrTroupesAttacker=cat_atac_total-cat_atac_lost;
974 if(noble==0){
975 nrTroupesAttackerTotal=heavy_atac_total+cat_atac_total
976 time_attack=ramSpeed*calcDistance(coordAttacker,coordDefender)
977 time_return=new Date(time_report).getTime()+time_attack;
978 time_return=new Date(time_return)
979 let date=new Date(time_return).toDateString().split(" ").slice(1).join(" ")
980 time_return=date+" "+new Date(time_return).toTimeString().split(" ")[0]
981 }
982 }
983
984 reportInfo.time_return=time_return
985 reportInfo.nrTroupesAttackerTotal=nrTroupesAttackerTotal
986 reportInfo.typeAttacker=typeAttacker;
987 reportInfo.nrTroupesAttacker=nrTroupesAttacker;
988
989
990
991 /////////////////////////////////////////////////defender date/////////////////////
992 var nrTroupesDefender=0;
993 var typeDefender="?";
994 if(document.getElementsByClassName("unit-item unit-item-axe").length>2){
995
996 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()) } })
997 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()) } })
998
999
1000 if(reportInfo.defendingArmy[3].type=="archer"){
1001 var spear_def_total =reportInfo.defendingArmy[0].count
1002 var sword_def_total =reportInfo.defendingArmy[1].count
1003 var axe_def_total =reportInfo.defendingArmy[2].count
1004 var archer_def_total=reportInfo.defendingArmy[3].count
1005 var spy_def_total =reportInfo.defendingArmy[4].count*2
1006 var light_def_total =reportInfo.defendingArmy[5].count*4
1007 var heavy_def_total =reportInfo.defendingArmy[7].count*6
1008 var ram_def_total =reportInfo.defendingArmy[8].count*5
1009 var cat_def_total =reportInfo.defendingArmy[9].count*8
1010
1011 var spear_def_lost =reportInfo.defendingArmyLosses[0].count
1012 var sword_def_lost =reportInfo.defendingArmyLosses[1].count
1013 var axe_def_lost =reportInfo.defendingArmyLosses[2].count
1014 var archer_def_lost=reportInfo.defendingArmyLosses[3].count
1015 var spy_def_lost =reportInfo.defendingArmyLosses[4].count*2
1016 var light_def_lost =reportInfo.defendingArmyLosses[5].count*4
1017 var heavy_def_lost =reportInfo.defendingArmyLosses[7].count*6
1018 var ram_def_lost =reportInfo.defendingArmyLosses[8].count*5
1019 var cat_def_lost =reportInfo.defendingArmyLosses[9].count*8
1020
1021 }
1022 else{
1023 var spear_adef_total=reportInfo.defendingArmy[0].count
1024 var sword_def_total =reportInfo.defendingArmy[1].count
1025 var axe_def_total =reportInfo.defendingArmy[2].count
1026 var spy_def_total =reportInfo.defendingArmy[3].count*2
1027 var light_def_total =reportInfo.defendingArmy[4].count*4
1028 var heavy_def_total =reportInfo.defendingArmy[5].count*6
1029 var ram_def_total =reportInfo.defendingArmy[6].count*5
1030 var cat_def_total =reportInfo.defendingArmy[7].count*8
1031 var archer_def_total=0;
1032
1033 var spear_def_lost=reportInfo.defendingArmyLosses[0].count
1034 var sword_def_lost =reportInfo.defendingArmyLosses[1].count
1035 var axe_def_lost =reportInfo.defendingArmyLosses[2].count
1036 var spy_def_lost =reportInfo.defendingArmyLosses[3].count*2
1037 var light_def_lost =reportInfo.defendingArmyLosses[4].count*4
1038 var heavy_def_lost =reportInfo.defendingArmyLosses[5].count*6
1039 var ram_def_lost =reportInfo.defendingArmyLosses[6].count*5
1040 var cat_def_lost =reportInfo.defendingArmyLosses[7].count*8
1041 var archer_def_lost=0;
1042
1043 }
1044
1045
1046
1047 nrTroupesDefender=(axe_def_total-axe_def_lost)+(light_def_total-light_def_lost) + (ram_def_total-ram_def_lost);
1048 if(axe_def_total+light_def_total+ram_def_total >=2500 && axe_def_total>=2500){
1049 typeDefender="off";
1050 }
1051
1052
1053 }
1054
1055 if(document.getElementsByClassName("unit-item unit-item-axe").length>4){
1056 let travelingTroopsContainer = $(document).find('#attack_spy_away');
1057 if (travelingTroopsContainer.length)
1058 {
1059 reportInfo.travelingTroops = {};
1060
1061 travelingTroopsContainer.find('.unit-item').each((i, el) => {
1062 let $el = $(el);
1063 let cls = $el.prop('class');
1064 let unitType = cls.match(/unit\-item\-(\w+)/)[1];
1065 reportInfo.travelingTroops[unitType] = parseInt($el.text().trim());
1066 });
1067
1068 var axe_def_spy=reportInfo.travelingTroops.axe
1069 var light_def_spy=reportInfo.travelingTroops.light*4;
1070 var ram_def_spy=reportInfo.travelingTroops.ram*5;
1071 nrTroupesDefender+=axe_def_spy+(light_def_spy) + (ram_def_spy);
1072
1073 if(axe_def_total+axe_def_spy>2500)
1074 typeDefender="off";
1075 else if(nrTroupesDefender>=2500 && axe_def_spy>=2500)
1076 typeDefender="off";
1077
1078
1079
1080 var spear_def_spy=reportInfo.travelingTroops.spear
1081 var sword_def_spy=reportInfo.travelingTroops.sword
1082 if(document.getElementsByClassName("unit-item unit-item-archer").length>0)
1083 var archer_def_spy=reportInfo.travelingTroops.archer
1084 else
1085 var archer_def_spy=0
1086
1087 var heavy_def_spy=reportInfo.travelingTroops.heavy*6;
1088 var trupe_def_total=spear_def_total+sword_def_total+archer_def_total+heavy_def_total;
1089 var total_def_spy=spear_def_spy+sword_def_spy+archer_def_spy+heavy_def_spy;
1090
1091 if(total_def_spy>1000){
1092 typeDefender="def";
1093 nrTroupesDefender=total_def_spy;
1094 }
1095 else if(axe_def_spy+light_def_spy <10 && axe_def_total+light_def_total<100 && trupe_def_total>5000 && total_def_spy<=1000){
1096 typeDefender="def??";
1097 }
1098 }
1099
1100 }
1101 reportInfo.typeDefender=typeDefender;
1102 reportInfo.nrTroupesDefender=nrTroupesDefender;
1103
1104
1105
1106 if(!tribemates.includes(nameAttacker)){//!reportInfo.typeAttacker.includes("?")
1107 // console.log("attacker")
1108 mapObject.coord=coordAttacker;
1109 mapObject.reportInfo=reportInfo;
1110 listObject.push(mapObject);
1111 mapObject={};
1112 }
1113 if(!tribemates.includes(nameDefender)){
1114 // console.log("defender")
1115 mapObject.coord=coordDefender;
1116 mapObject.reportInfo=reportInfo;
1117 listObject.push(mapObject);
1118 }
1119 }
1120 else if(document.getElementsByClassName("unit-item unit-item-axe").length==1)
1121 {
1122 var typeSupporter="?";
1123 var nrTroupesSupporter=0;
1124 let time_report=document.getElementsByClassName("vis")[3].firstElementChild.children[1].children[1].innerText;
1125 if(new Date()-new Date(time_report)>14*3600*1000)//report too old
1126 return listObject;
1127 var report=document.getElementsByClassName("vis")[3].innerHTML;
1128 // report=lzw_encode(report);
1129 reportInfo.time_report=time_report;
1130 // reportInfo.report=report;
1131
1132 var text=document.getElementsByClassName("vis")[3].innerText.split("\n");
1133 var nameSupporter=text[3].split(":")[1].trim();
1134 var coordSupporter=text[4].split(":")[1].trim().match(/[0-9]{3}\|[0-9]{3}/)[0];
1135 var supporterPlayerId=document.getElementsByClassName("vis")[3].getElementsByTagName("a")[1].href.split("id=")[1]
1136 // var supporterPlayerId=document.getElementsByClassName("village_anchor contexted")[0].getAttribute("data-player")
1137
1138 reportInfo.nameSupporter=nameSupporter;
1139 reportInfo.coordSupporter=coordSupporter;
1140 reportInfo.supporterPlayerId=supporterPlayerId;
1141
1142
1143 var axe_total=parseInt(document.getElementsByClassName("unit-item unit-item-axe")[0].innerText);
1144 var light_total=parseInt(document.getElementsByClassName("unit-item unit-item-light")[0].innerText)*4;
1145 var ram_total=parseInt(document.getElementsByClassName("unit-item unit-item-ram")[0].innerText)*5;
1146
1147 var spear_total=parseInt(document.getElementsByClassName("unit-item unit-item-spear")[0].innerText);
1148 var sword_total=parseInt(document.getElementsByClassName("unit-item unit-item-sword")[0].innerText);
1149 var archer_total=parseInt(document.getElementsByClassName("unit-item unit-item-archer")[0].innerText);
1150 var heavy_total=parseInt(document.getElementsByClassName("unit-item unit-item-heavy")[0].innerText)*6;
1151
1152 var total_atac=axe_total+light_total+ram_total;
1153 var total_def=spear_total+sword_total+archer_total+heavy_total;
1154
1155 if(total_atac>total_def && total_atac>=200){
1156 typeSupporter="off";
1157 nrTroupesSupporter=total_atac;
1158 }
1159 else if(total_def>total_atac && total_def>=200){
1160 typeSupporter="def";
1161 nrTroupesSupporter=total_def;
1162 }
1163 reportInfo.typeSupporter=typeSupporter;
1164 reportInfo.nrTroupesSupporter=nrTroupesSupporter;
1165
1166 if(!tribemates.includes(nameSupporter) && !reportInfo.typeSupporter.includes("?")){
1167 // console.log("supporter")
1168 mapObject.coord=coordSupporter;
1169 mapObject.reportInfo=reportInfo;
1170 listObject.push(mapObject);
1171 }
1172 }
1173 else if(document.getElementsByClassName("unit-item unit-item-axe").length==0 || document.getElementsByClassName("g-recaptcha").length>0
1174 ||document.getElementsByClassName("unit-item unit-item-axe")==undefined || checkContainsCaptcha(document)==true){//recaptcha
1175 console.log("recapthca")
1176 return null;
1177 }
1178
1179 return listObject;
1180 }
1181 catch(e){
1182 console.log("erorr in upload")
1183 return 0;
1184 }
1185
1186}
1187
1188function checkContainsCaptcha(docOrHtml) {
1189 var foundCaptcha = false;
1190 if (typeof docOrHtml == 'string') {
1191 foundCaptcha = !!docOrHtml.match(/data\-bot\-protect=/);
1192 } else {
1193 let $doc = $(docOrHtml);
1194 let $body = $doc.find('#ds_body');
1195 foundCaptcha = $body.length && !!$body.data('bot-protect')
1196 }
1197
1198 if (foundCaptcha) console.log('Found captcha!');
1199 return foundCaptcha;
1200}
1201
1202function calcDistance(coord1,coord2){
1203 let x1=parseInt(coord1.split("|")[0])
1204 let y1=parseInt(coord1.split("|")[1])
1205 let x2=parseInt(coord2.split("|")[0])
1206 let y2=parseInt(coord2.split("|")[1])
1207
1208 return Math.sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
1209}
1210
1211////////////////////////////////////////////////data compression////////////////////////////////////////////////////////////////////////////
1212function lzw_encode (s) {
1213
1214}
1215////////////////////////////////////////////////data decompression////////////////////////////////////////////////////////////////////////////
1216function lzw_decode (s) {
1217
1218}
1219///////////////////////////////////////////////////////get request//////////////////////////////////////////////////////////////////////////
1220function httpGet(theUrl){
1221 var xmlHttp = new XMLHttpRequest();
1222 xmlHttp.open( "GET", theUrl, false ); // false for synchronous request
1223 xmlHttp.send( null );
1224 return xmlHttp.responseText;
1225}
1226
1227
1228
1229
1230
1231///////////////////////////////////////////////////////get all incomings//////////////////////////////////////////////////////////////////////////
1232
1233function getIncomings(){
1234 return new Promise( (resolve,reject)=>{
1235
1236 if(document.getElementsByClassName("info").length>0)
1237 $(".info").remove()
1238 var current_href_incomings=window.location.href;
1239 let incomings_href= game_data.link_base_pure+"overview_villages&mode=incomings&type=all&subtype=attacks&group=0&page=-1";
1240
1241 console.log("currentLink")
1242 console.log(incomings_href)
1243 document.body.innerHTML=httpGet(incomings_href);
1244 let list_href=[];
1245 if(document.getElementsByClassName("vis")[1].getElementsByTagName("select").length>0){
1246 Array.from(document.getElementsByClassName("vis")[1].getElementsByTagName("select")[0].options).forEach(el=>{
1247 list_href.push(el.value);
1248 })
1249 list_href.pop();
1250 }
1251 else if(document.getElementsByClassName("paged-nav-item").length>0){
1252 let arr=Array.from(document.getElementsByClassName("paged-nav-item"));
1253 for(let i=0;i<arr.length;i++)
1254 list_href.push(arr[i].getAttribute("href"))
1255 }
1256 else{
1257 list_href.push(incomings_href)
1258
1259 }
1260 if(document.getElementById("incomings_table")==null)
1261 throw new Error("you don't have any incomings");
1262
1263 console.log(list_href)
1264 let incomings_data=new Map();
1265
1266
1267 var indexIncoming=1;
1268 var url_length=list_href.length
1269 var start_ajax=new Date();
1270 function ajaxRequest (urls) {
1271 let current_url
1272 var time=0
1273 if(urls.length>0){
1274 current_url=urls.pop()
1275 }
1276 else{
1277 current_url="stop"
1278 }
1279 console.log("in functie in plm "+urls.length)
1280 // console.log(current_url)
1281
1282 if (urls.length >= 0 && current_url!="stop") {
1283 $.ajax({
1284 url: current_url,
1285 method: 'get',
1286 success: (data) => {
1287 document.body.innerHTML=data
1288 if(document.getElementById("incomings_table")==null)
1289 alert("turn off the filters");
1290 let table_incomings=document.getElementById("incomings_table").getElementsByTagName("tbody")[0].children
1291 for(let i=1;i<table_incomings.length-1;i++){
1292 if(table_incomings[i].children[0].innerText!="--"){
1293 let coord_def=table_incomings[i].children[1].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0]
1294 let coord_off=table_incomings[i].children[2].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0]
1295 let length_tr=table_incomings[i].children.length
1296 let time_land=table_incomings[i].children[length_tr-2].innerText
1297
1298 let player_off=table_incomings[i].children[length_tr-4].innerText
1299 let player_def=game_data.player.name
1300
1301 let id_player_def=game_data.player.id
1302 let id_player_off=table_incomings[i].children[length_tr-4].getElementsByTagName("a")[0].href.split("id=")[1]
1303
1304 let id_coord_def=table_incomings[i].children[2].getElementsByTagName("a")[0].href.split("village=")[1].split("&")[0]
1305 let id_coord_off=table_incomings[i].children[2].getElementsByTagName("a")[0].href.split("id=")[1]
1306
1307
1308 let server_date=document.getElementById("serverDate").innerText.split("/")
1309 let date_land=getLandTime(time_land)
1310 let labelName="none"
1311 let type_attack=table_incomings[i].getElementsByClassName("quickedit")[0].getElementsByTagName("img")[0].src.split("command/")[1]
1312 if(table_incomings[i].children[0].getElementsByTagName("img").length==2){
1313 labelName=table_incomings[i].getElementsByClassName("quickedit")[0].getElementsByTagName("img")[1].src.split("tiny/")[1]
1314 if(labelName==undefined)
1315 labelName=table_incomings[i].getElementsByClassName("quickedit")[0].getElementsByTagName("img")[1].src.split("command/")[1]
1316
1317 }
1318
1319
1320
1321 // console.log(date_land)
1322 if(!incomings_data.has(coord_off)){
1323 let list=[{
1324 date_land:date_land,
1325 coord_def:coord_def,
1326 coord_off:coord_off,
1327 player_off:player_off,
1328 player_def:player_def,
1329 labelName:labelName,
1330 type_attack:type_attack,
1331 id_player_def:id_player_def,
1332 id_player_off:id_player_off,
1333 id_coord_def:id_coord_def,
1334 id_coord_off:id_coord_off
1335 }]
1336 incomings_data.set(coord_off,list)
1337
1338 }else{
1339 let list=incomings_data.get(coord_off)
1340 list.push({
1341 date_land:date_land,
1342 coord_def:coord_def,
1343 coord_off:coord_off,
1344 player_off:player_off,
1345 player_def:player_def,
1346 labelName:labelName,
1347 type_attack:type_attack,
1348 id_player_def:id_player_def,
1349 id_player_off:id_player_off,
1350 id_coord_def:id_coord_def,
1351 id_coord_off:id_coord_off
1352 })
1353 incomings_data.set(coord_off,list)
1354 }
1355 }
1356 }
1357
1358 UI.InfoMessage(indexIncoming+"/"+url_length)
1359 indexIncoming++;
1360 var stop_ajax=new Date();
1361 var dif_time=stop_ajax.getTime()-start_ajax.getTime()
1362 window.setTimeout(function(){
1363 ajaxRequest (list_href)
1364 },200)
1365 }
1366 })
1367
1368 }
1369 else
1370 {
1371 UI.SuccessMessage("done",2000)
1372 if(document.getElementById("incomings_table")!=null){
1373 // showButtons();
1374 }
1375
1376 if( document.getElementsByClassName("g-recaptcha").length>0){//recaptcha
1377 console.log("recapthca")
1378 UI.ErrorMessage("recapthca, upload again")
1379 resolve(null);
1380 }
1381
1382 window.setTimeout(function(){
1383 document.body.innerHTML=httpGet(current_href_incomings);
1384 console.log(incomings_data)
1385 resolve(incomings_data)
1386 },1000+Math.random()*500)
1387
1388
1389
1390 }
1391 }
1392 if(list_href.length>0)
1393 ajaxRequest(list_href);
1394 else
1395 reject("error on incomings")
1396 })
1397}
1398///////////////////////////////////////////////////////upload all incomings//////////////////////////////////////////////////////////////////////////
1399
1400async function uploadIncomings(){
1401
1402 var [incomings_data, map_incomings_dropbox]=await Promise.all([getIncomings(), readFileDropbox(filename_incomings)]).catch(err=>{alert(err)})
1403 map_incomings_dropbox=new Map(JSON.parse(lzw_decode(map_incomings_dropbox)))
1404
1405 return new Promise(async(resolve,reject)=>{
1406 let keys_dropbox=Array.from(map_incomings_dropbox.keys());
1407
1408 let server_date=document.getElementById("serverDate").innerText.split("/")
1409 let server_time=document.getElementById("serverTime").innerText
1410 let current_date=new Date(server_date[1]+"/"+server_date[0]+"/"+server_date[2]+" "+server_time);
1411 /////////////////////////////////eliminate old incomings from dropbox////////////////////////////////////
1412 let start=new Date();
1413 keys_dropbox.forEach(el=>{
1414 let list=map_incomings_dropbox.get(el);
1415 let update=false;
1416 for(let i=0;i<list.length;i++){
1417 let date_incomings=new Date(list[i].date_land)
1418 // console.log(date_incomings<current_date)
1419 if(date_incomings<current_date){
1420 list.splice(i,1);
1421 i--;
1422 update=true;
1423 }
1424 if(list[i]==""){
1425 list.splice(i,1);
1426 update=true;
1427 }
1428
1429 }
1430 if(update==true || list.length==0){
1431 if(list.length==0)
1432 map_incomings_dropbox.delete(el);
1433 else{
1434 map_incomings_dropbox.set(el,list);
1435 }
1436 }
1437 })
1438 console.log(map_incomings_dropbox)
1439 let stop=new Date();
1440 console.log(stop-start)
1441
1442 let keys_incomings=Array.from(incomings_data.keys());
1443 keys_incomings.forEach(el=>{
1444 let list=incomings_data.get(el)
1445 if(map_incomings_dropbox.has(el)){//update
1446 let list_dropbox=map_incomings_dropbox.get(el)
1447 list_dropbox=list_dropbox.concat(list);
1448 var list_concat =[...new Map(list_dropbox.map(item => [item["date_land"], item])).values()]
1449 map_incomings_dropbox.set(el,list_concat);
1450 }
1451 else{//add
1452 map_incomings_dropbox.set(el,list);
1453 }
1454 })
1455 console.log(map_incomings_dropbox)
1456 UI.SuccessMessage("compressing database, wait few seconds",2000)
1457 var data=JSON.stringify(Array.from(map_incomings_dropbox.entries()))
1458 data=replaceSpecialCaracters(data);
1459 data=lzw_encode(data)
1460
1461 console.log("scris in test2")
1462 // document.body.innerHTML=httpGet(current_href_incomings);
1463 addWindow();
1464 showButtons();
1465 document.getElementById("progress_incomings").innerText=incomings_data.size+" coords";
1466 document.getElementById("progress_all").innerText="done";
1467 UI.SuccessMessage("upload incomings done","slow")
1468 let result=await uploadFile(data,filename_incomings,dropboxToken)
1469 if(result=="succes")
1470 resolve("succes")
1471 else
1472 reject("error")
1473
1474 })
1475}
1476
1477//////////////////////////////////////////////////////upload all data to dropbox/////////////////////////////////////////////////////////////////
1478
1479function uploadFile(data,filename,dropboxToken){
1480
1481}
1482
1483/////////////////////////////////////////////////////read file from dropbox///////////////////////////////////
1484function readFileDropbox(filename){
1485
1486}
1487
1488
1489
1490//////////////////////////////////////////////////////buttons in incomings page/////////////////////////////////////////////////////////////////
1491
1492
1493function showButtons(){
1494 if(document.getElementById("incomings_table")!=null){
1495 $("#table_incomings").remove();
1496 var incomingshtml=`
1497
1498 <table id="table_incomings" class="" border="1" style="width: 50%;">
1499 <tbody>
1500 <tr>
1501 <td style="text-align:center; width:auto;">
1502 <center style="margin:10px"><u><input class="btn" type="button" onclick="addWindow()"value="open upload"></center>
1503 </td>
1504
1505 <td style="text-align:center; width:auto;">
1506 <center style="margin:10px"><u><input class="btn" type="button" onclick="moreInfo()" value="more info"></center>
1507 </td>
1508 <td style="text-align:center; width:auto;">
1509 <center style="margin:10px"><u><input class="btn" id="btn_tag" type="button" onclick="tagIncomings()" value="tag"></center>
1510 </td>
1511 <td style="text-align:center; width:auto;">
1512 <center style="margin:10px"><u><input class="btn" type="button" onclick="setIntervalIncomings()" value="get incomings"></center>
1513 </td>
1514 <td style="text-align:center; width:auto;">
1515 <center style="margin:10px"><u><input id="btn_highlight" class="btn" type="button" onclick="toggleHighLight()" value="highlight"></center>
1516 </td>
1517 </tr>
1518 </tbody>
1519 </table>
1520 </div>`
1521 // $(".vis").eq(3).append(incomingshtml)
1522 $(".overview_filters").before(incomingshtml)
1523
1524 var link = document.createElement('link');
1525 link.id = "style_popup";
1526 link.rel = 'stylesheet';
1527 link.type = 'text/css';
1528 link.href = 'https://dl.dropboxusercontent.com/s/ki0zhogjf0705c3/style_popup.css';
1529 link.media = 'all';
1530 document.getElementsByTagName('head')[0].appendChild(link);
1531 }
1532
1533
1534
1535
1536}
1537showButtons();
1538
1539//////////////////////////////////////////////////////show info in incomings page/////////////////////////////////////////////////////////////////
1540
1541async function moreInfo(){
1542 $("#div_container").remove();
1543 $(".deleteTh").remove();
1544
1545 console.log("inainte")
1546 var [map_reports_dropbox, map_incomings_dropbox]=await Promise.all([readFileDropbox(filename_reports), readFileDropbox(filename_incomings)]).catch(err=>{alert(err)})
1547 map_reports_dropbox=new Map(JSON.parse(lzw_decode(map_reports_dropbox)))
1548 map_incomings_dropbox=new Map(JSON.parse(lzw_decode(map_incomings_dropbox)))
1549 UI.SuccessMessage("get data",1000)
1550
1551 console.log("get incomings")
1552 $(".tr_delimitator").remove();
1553 console.log(map_incomings_dropbox)
1554 if(document.getElementsByClassName("info").length>0)
1555 $(".info").remove()
1556 else{
1557 let start=new Date();
1558
1559
1560 // let table=document.getElementById("incomings_table").lastElementChild.children
1561 let incomings_table=document.getElementById("incomings_table").cloneNode(true)
1562 let table=incomings_table.lastElementChild.children
1563 let list=[];
1564 let map_nr_atacuri=new Map();
1565 let map_nr_destination=new Map();
1566
1567 //adaugare o noua coloana
1568 let coloana_nr=table[0].insertCell(3);
1569 coloana_nr.outerHTML="<th class='deleteTh'><a href=# id='id_nr'> nr</a></th>";
1570 coloana_nr.className="info"
1571
1572 let coloana_tribe=table[0].insertCell(4);
1573 coloana_tribe.outerHTML="<th class='deleteTh'><a href=# id='id_nr_tr'> nr_tribe</a></th>";
1574 coloana_tribe.className="info"
1575
1576 let coloana_type=table[0].insertCell(5);
1577 coloana_type.outerHTML="<th class='deleteTh'><a href=# id='id_type'> type</a></th>";
1578 coloana_type.className="info"
1579
1580 let coloana_pop=table[0].insertCell(6);
1581 coloana_pop.outerHTML="<th class='deleteTh'><a href=# id='id_pop'>pop</a></th>";
1582 coloana_pop.className="info"
1583
1584 let coloana_time=table[0].insertCell(7);
1585 coloana_time.outerHTML="<th class='deleteTh'><a href=# id='id_time'>time</a></th>";
1586 coloana_time.className="info"
1587
1588 let coloana_report=table[0].insertCell(8);
1589 coloana_report.outerHTML="<th class='deleteTh'><a href=# id='id_report'>report</a></th>";
1590 coloana_report.className="info"
1591
1592 var list_coord_player=[]
1593 for(let i=1;i<table.length-1;i++){
1594 let coord=table[i].children[2].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
1595 let coord_destination=table[i].children[1].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
1596 let player_id=table[i].children[table[i].children.length-4].children[0].href.split("player&id=")[1]
1597 list_coord_player.push({
1598 coord:coord,
1599 player_id:player_id
1600 })
1601 //origin coord
1602 if(map_nr_atacuri.has(coord))
1603 map_nr_atacuri.set(coord,parseInt(map_nr_atacuri.get(coord)) +1);
1604 else
1605 map_nr_atacuri.set(coord,1);
1606 //destination coord
1607 if(map_nr_destination.has(coord_destination))
1608 map_nr_destination.set(coord_destination,parseInt(map_nr_destination.get(coord_destination)) +1);
1609 else
1610 map_nr_destination.set(coord_destination,1);
1611 }
1612 var stop=new Date();
1613 console.log("add info: "+(stop-start))
1614
1615 for(let i=1;i<table.length-1;i++){
1616 var html_nr="?"
1617 var html_nr_tribe="<center>0</center>"
1618 var html_type="?"
1619 var html_pop="?"
1620 var html_time="?"
1621 var html_report="?"
1622
1623 var length_tr=table[i].children.length
1624 let coord=list_coord_player[i-1].coord
1625 let player_id=list_coord_player[i-1].player_id
1626 let coord_destination=table[i].children[1].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
1627 let duplicate_destination=map_nr_destination.get(coord_destination)
1628 table[i].children[1].setAttribute("data-nr",duplicate_destination)
1629
1630
1631 html_nr="<h4>"+map_nr_atacuri.get(coord)+"</h4>";
1632
1633
1634 if(map_incomings_dropbox.has(coord)){
1635 let list_incomings=map_incomings_dropbox.get(coord)
1636 // html_nr_tribe=" <center><h4 style='color:black'>"+list_incomings.length+"</h4></center>";
1637 console.log(list_incomings)
1638 list_incomings.sort((o1,o2)=>{
1639 return (new Date(o1.date_land).getTime()<new Date(o2.date_land).getTime())?1:
1640 (new Date(o1.date_land).getTime()>new Date(o2.date_land).getTime())?-1:0
1641 })
1642 html_nr_tribe=`
1643 <div class="popup" onclick='var popup = document.getElementById("tableInc`+i+`");popup.classList.toggle("show")'><center><h4 style='color:black'>${list_incomings.length}</h4></center>
1644 <table class="popuptext" border="1" style="background-color:#f4e4bc;border-color:#c1a264" id="tableInc`+i+'"'+
1645 createTableIncomings(list_incomings)+
1646 '</table></div>';
1647
1648
1649
1650
1651 }
1652 if(map_reports_dropbox.has(coord) )
1653 {
1654 let idPlayer_dropbox
1655 let type_dropbox
1656 let nr_troupes_dropbox
1657
1658 var obj=map_reports_dropbox.get(coord);
1659 var traveling=false
1660 if(coord == obj.coordAttacker){
1661 idPlayer_dropbox=obj.attackingPlayerId;
1662 type_dropbox=obj.typeAttacker;
1663 nr_troupes_dropbox=obj.nrTroupesAttacker
1664 traveling=true;
1665 }
1666 else if(coord == obj.coordDefender){
1667 idPlayer_dropbox=obj.defendingPlayerId;
1668 type_dropbox=obj.typeDefender;
1669 nr_troupes_dropbox=obj.nrTroupesDefender
1670 traveling=false;
1671 }
1672 else{
1673 idPlayer_dropbox=obj.supporterPlayerId
1674 type_dropbox=obj.typeSupporter;
1675 nr_troupes_dropbox=obj.nrTroupesSupporter
1676 }
1677
1678 if(idPlayer_dropbox == player_id)
1679 {
1680 let date_start=new Date(obj.time_report);
1681 let date_stop=new Date();
1682 let days=("00"+parseInt((date_stop-date_start)/(24*3600*1000))).slice(-3);
1683 let hours=("0"+parseInt((date_stop-date_start)/(3600*1000)%24)).slice(-2);
1684 let minutes=("0"+parseInt(((date_stop-date_start)/(60*1000)%60))).slice(-2);
1685 let seconds=( "0"+parseInt((((date_stop-date_start)/1000)%60))).slice(-2);
1686
1687 //calculate population
1688 let date_landing_report=new Date(obj.time_report)
1689 let distance=parseFloat(table[i].children[length_tr-3].innerText);
1690 let time_attack=0;
1691 let time_land=table[i].children[length_tr-2].innerText
1692 let date_land=new Date(getLandTime(time_land))
1693 let labelName=""
1694 if(table[i].children[0].getElementsByTagName("img")[1]==undefined || table[i].children[0].getElementsByTagName("img")[1]==null )
1695 labelName="ram.png"
1696 else
1697 labelName=table[i].children[0].getElementsByTagName("img")[1].src
1698
1699 if(labelName.includes("snob.png")){
1700 time_attack=nobleSpeed*distance
1701 }else if(labelName.includes("ram.png") || labelName.includes("catapult.png")){
1702 time_attack=ramSpeed*distance
1703 }else if(labelName.includes("sword.png")){
1704 time_attack=swordSpeed*distance
1705 }else if(labelName.includes("axe.png")){
1706 time_attack=axeSpeed *distance
1707 }
1708 if(traveling==false)
1709 time_attack=0;
1710
1711 if(type_dropbox=="off"){
1712 // console.log(date_land.getTime())
1713 // console.log(time_attack)
1714 // console.log(date_landing_report.getTime())
1715 let timeForRecruiting = (date_land.getTime()-time_attack)-date_landing_report.getTime()
1716 nr_troupes_dropbox=calcProductionTroupes(timeForRecruiting,nr_troupes_dropbox)
1717 nr_troupes_dropbox=Math.round(nr_troupes_dropbox*10)/10+"%"
1718 // console.log("final "+nr_troupes_dropbox)
1719 }
1720 else{
1721 nr_troupes_dropbox="?"
1722 }
1723
1724
1725 html_type=" <h4 class='cls_type'>"+type_dropbox+"</h4>"
1726 html_pop=" <h4 class='cls_pop'>"+nr_troupes_dropbox+"</h4>"
1727 if(obj.time_return==0 || obj.time_return==undefined){
1728 html_time=" <h4>"+days+":"+hours+":"+minutes+":"+seconds+"</h4>";
1729 }
1730 else{
1731 html_time=" <h4 class='possible_fake' date-fake='"+obj.time_return+"'>"+days+":"+hours+":"+minutes+":"+seconds+"</h4>";
1732 }
1733
1734 // createTableIncomings
1735 // console.log(obj)
1736 html_report=`
1737 <div class="popup" onclick='var popup = document.getElementById("table`+i+`");popup.classList.toggle("show")'><h4>show</h4>
1738 <table class="popuptext" style="background-color:#f4e4bc" id="table`+i+'"'+
1739 createReport(obj)+
1740 '</table></div>';
1741 }
1742 }
1743 coloana_nr=table[i].insertCell(3);
1744 coloana_nr.innerHTML=html_nr
1745 coloana_nr.className="info test"
1746
1747 coloana_tribe=table[i].insertCell(4);
1748 coloana_tribe.innerHTML=html_nr_tribe
1749 coloana_tribe.className="info"
1750
1751 coloana_type=table[i].insertCell(5);
1752 coloana_type.innerHTML=html_type
1753 coloana_type.className="info"
1754
1755 coloana_pop=table[i].insertCell(6);
1756 coloana_pop.innerHTML=html_pop
1757 coloana_pop.className="info"
1758
1759 coloana_time=table[i].insertCell(7);
1760 coloana_time.innerHTML=html_time
1761 coloana_time.className="info"
1762
1763 coloana_report=table[i].insertCell(8);
1764 coloana_report.innerHTML=html_report
1765 coloana_report.className="info"
1766 }
1767 console.log(incomings_table)
1768 $("#incomings_table tbody tr").remove()
1769 $("#incomings_table tbody").append(table)
1770 sortIncomings();
1771 highLightIncomings();
1772 counterTime();
1773 var stop=new Date();
1774 console.log("add inf final: "+(stop-start))
1775
1776
1777 $('document').ready(function() {
1778 CommandsOverview.init();
1779 UI.ToolTip('.icon_village_notes');
1780
1781 $('.quickedit').QuickEdit({url: TribalWars.buildURL('POST', 'info_command', {ajaxaction: 'edit_other_comment', id: '__ID__'})});
1782 Command.init();
1783 });
1784
1785
1786 }
1787
1788
1789}
1790
1791//////////////////////////////////////////////////////sort incomings by.. /////////////////////////////////////////////////////////////////
1792
1793function sortIncomings(){
1794 var table=document.getElementById("incomings_table").lastElementChild.children;
1795 var new_table=document.getElementById("incomings_table").lastElementChild;
1796 var last_row=table[table.length-1];
1797 var list=[];
1798 var list_info=[]
1799 for(let i=1;i<table.length-1;i++){
1800 if(table[i].classList.contains("row_a")){
1801 table[i].classList.remove("row_a")
1802 table[i].classList.add("row_b")
1803 }
1804 if(table[i].classList.contains("selected")){
1805 table[i].classList.remove("selected")
1806 }
1807
1808 list.push(table[i]);
1809 }
1810 var length_table=1
1811 if(table.length>2){
1812 length_table=table[1].children.length
1813 }
1814
1815
1816 //sort by nr
1817 document.getElementById("id_nr").addEventListener("click",function()
1818 {
1819 var start=new Date();
1820 $(".tr_delimitator").remove();
1821 list.sort( (a,b)=>{
1822 return (parseInt(a.children[3].innerText)<parseInt(b.children[3].innerText))?1:(parseInt(a.children[3].innerText)>parseInt(b.children[3].innerText))?-1:
1823 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1824 });
1825
1826
1827 //add new table in page
1828 for(let i=0;i<list.length;i++)
1829 {
1830 new_table.appendChild(list[i]);
1831 }
1832 new_table.appendChild(last_row);
1833
1834 for(let i=0;i<list.length;i++)
1835 {
1836 list_info.push({
1837 coord_attacker:list[i].children[2].innerText,
1838 nr:parseInt(list[i].children[3].innerText),
1839 })
1840 }
1841 var pozitie=2;
1842 for(let i=0;i<list.length-1;i++)
1843 {
1844 let nr_atacuri=list_info[i].nr
1845 if(nr_atacuri>1 && list_info[i].coord_attacker !=list_info[i+1].coord_attacker)
1846 {
1847 var tableRef = document.getElementById("incomings_table").lastElementChild;
1848 var newRow = tableRef.insertRow(pozitie);
1849 newRow.className="tr_delimitator"
1850 for(let i=0; i<1;i++){
1851 let cell = newRow.insertCell();
1852 cell.setAttribute("colspan",length_table)
1853 cell.classList.add("selected")
1854 var delimitator = document.createTextNode('--');
1855 cell.appendChild(delimitator);
1856
1857 }
1858 pozitie++;
1859 }
1860 else if(nr_atacuri==1){
1861 break;
1862 }
1863 pozitie++;
1864 }
1865 list_info=[]
1866 var stop=new Date();
1867 console.log(stop-start)
1868 })
1869
1870 //sort by nr tribe
1871 document.getElementById("id_nr_tr").addEventListener("click",function()
1872 {
1873 var start=new Date();
1874
1875 $(".tr_delimitator").remove();
1876 list.sort( (a,b)=>{
1877 return (parseInt(a.children[4].innerText)<parseInt(b.children[4].innerText))?1:(parseInt(a.children[4].innerText)>parseInt(b.children[4].innerText))?-1:
1878 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1879 });
1880
1881
1882 //add new table in page
1883 for(let i=0;i<list.length;i++)
1884 {
1885 new_table.appendChild(list[i]);
1886 }
1887 new_table.appendChild(last_row);
1888
1889 for(let i=0;i<list.length;i++)
1890 {
1891 list_info.push({
1892 coord_attacker:list[i].children[2].innerText,
1893 nr:parseInt(list[i].children[4].innerText),
1894 })
1895 }
1896 var pozitie=2;
1897 for(let i=0;i<list.length-1;i++)
1898 {
1899 let nr_atacuri=list_info[i].nr
1900 if(nr_atacuri>1 && list_info[i].coord_attacker !=list_info[i+1].coord_attacker)
1901 {
1902 var tableRef = document.getElementById("incomings_table").lastElementChild;
1903 var newRow = tableRef.insertRow(pozitie);
1904 newRow.className="tr_delimitator"
1905 for(let i=0; i<1;i++){
1906 let cell = newRow.insertCell();
1907 cell.setAttribute("colspan",length_table)
1908 cell.classList.add("selected")
1909 var delimitator = document.createTextNode('--');
1910 cell.appendChild(delimitator);
1911
1912 }
1913 pozitie++;
1914 }
1915 else if(nr_atacuri==1){
1916 break;
1917 }
1918 pozitie++;
1919 }
1920 list_info=[]
1921 var stop=new Date();
1922 console.log(stop-start)
1923 })
1924
1925
1926 //sort by type
1927 document.getElementById("id_type").addEventListener("click",function()
1928 {
1929 var start=new Date();
1930 $(".tr_delimitator").remove();
1931 list.sort( (a,b)=>{
1932 return (a.children[5].innerText<b.children[5].innerText)?1:(a.children[5].innerText>b.children[5].innerText)?-1:
1933 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1934 });
1935
1936 //add new table in page
1937 for(let i=0;i<list.length;i++)
1938 {
1939 new_table.appendChild(list[i]);
1940 }
1941 new_table.appendChild(last_row);
1942
1943 var pozitie=2;
1944 for(let i=0;i<list.length-1;i++)
1945 {
1946 let type=list[i].children[5].innerText;
1947 if(type!="?" && list[i].children[5].innerText !=list[i+1].children[5].innerText)
1948 {
1949 var tableRef = document.getElementById("incomings_table").lastElementChild;
1950 var newRow = tableRef.insertRow(pozitie);
1951 newRow.className="tr_delimitator"
1952 for(let i=0; i<1;i++){
1953 let cell = newRow.insertCell();
1954 cell.setAttribute("colspan",length_table)
1955 cell.classList.add("selected")
1956 var delimitator = document.createTextNode('--');
1957 cell.appendChild(delimitator);
1958 }
1959 pozitie++;
1960 }
1961 pozitie++;
1962 }
1963 list_info=[]
1964 var stop=new Date();
1965 console.log(stop-start)
1966 })
1967
1968 //sort by nr pop
1969 document.getElementById("id_pop").addEventListener("click",function()
1970 {
1971 var start=new Date();
1972 console.log("aici baaaa")
1973 console.log($(".tr_delimitator"))
1974 $(".tr_delimitator").remove();
1975 list.sort( (a,b)=>{
1976 if(a.children[6].innerText=="?")
1977 var a_comp=2000000;
1978 else
1979 var a_comp=parseFloat(a.children[6].innerText);
1980
1981 if(b.children[6].innerText=="?")
1982 var b_comp=2000000;
1983 else
1984 var b_comp=parseFloat(b.children[6].innerText);
1985
1986 return (a_comp>b_comp)?1:(a_comp<b_comp)?-1:
1987 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
1988 });
1989
1990 //add new table in page
1991 for(let i=0;i<list.length;i++)
1992 {
1993 new_table.appendChild(list[i]);
1994 }
1995 list_info=[]
1996 new_table.appendChild(last_row);
1997
1998 let pozitie=1
1999 for(let i=0;i<list.length;i++)
2000 {
2001 console.log(i)
2002 if(i%4==0 && i>0){
2003 console.log("inside "+i)
2004 var tableRef = document.getElementById("incomings_table").lastElementChild;
2005 var newRow = tableRef.insertRow(pozitie);
2006 newRow.className="tr_delimitator"
2007 for(let i=0; i<1;i++){
2008 let cell = newRow.insertCell();
2009 cell.setAttribute("colspan",length_table)
2010 cell.classList.add("selected")
2011 var delimitator = document.createTextNode('--');
2012 cell.appendChild(delimitator);
2013 }
2014 pozitie++;
2015
2016 }
2017 pozitie++;
2018 }
2019
2020
2021
2022
2023 var stop=new Date();
2024 console.log(stop-start)
2025 })
2026
2027 //sort by time
2028 document.getElementById("id_time").addEventListener("click",function()
2029 {
2030 var start=new Date();
2031
2032 $(".tr_delimitator").remove();
2033
2034 list.sort( (a,b)=>{
2035 if(a.children[7].innerText=="?")
2036 var a_comp=10000000000;
2037 else{
2038 var v=a.children[7].innerText.split(":");
2039 var a_comp=parseInt(v[0])*24*3600+parseInt(v[1])*3600 +parseInt(v[2])*60 +parseInt(v[3]);
2040 }
2041
2042 if(b.children[7].innerText=="?")
2043 var b_comp=10000000000;
2044 else{
2045 var v=b.children[7].innerText.split(":");
2046 var b_comp=parseInt(v[0])*24*3600+parseInt(v[1])*3600 +parseInt(v[2])*60 +parseInt(v[3]);
2047 }
2048
2049 return (a_comp>b_comp)?1:(a_comp<b_comp)?-1:
2050 (a.children[2].innerText<b.children[2].innerText) ? 1: (a.children[2].innerText>b.children[2].innerText)?-1:0;
2051 });
2052
2053 //add new table in page
2054 for(let i=0;i<list.length;i++)
2055 {
2056 new_table.appendChild(list[i]);
2057 }
2058 list_info=[]
2059 new_table.appendChild(last_row);
2060
2061 let pozitie=1
2062 for(let i=0;i<list.length;i++)
2063 {
2064 console.log(i)
2065 if(i%4==0 && i>0){
2066 console.log("inside "+i)
2067 var tableRef = document.getElementById("incomings_table").lastElementChild;
2068 var newRow = tableRef.insertRow(pozitie);
2069 newRow.className="tr_delimitator"
2070 for(let i=0; i<1;i++){
2071 let cell = newRow.insertCell();
2072 cell.setAttribute("colspan",length_table)
2073 cell.classList.add("selected")
2074 var delimitator = document.createTextNode('--');
2075 cell.appendChild(delimitator);
2076 }
2077 pozitie++;
2078
2079 }
2080 pozitie++;
2081 }
2082
2083
2084 var stop=new Date();
2085 console.log(stop-start)
2086 })
2087
2088 //sort by coord destination
2089 var destination_th=document.getElementById("incomings_table").lastElementChild.children[0].children[1]
2090 destination_th=destination_th.getElementsByTagName("a")[0]
2091 destination_th.outerHTML="<a href='#' id='nr_dest'>"+destination_th.innerHTML+"</a>"
2092
2093 document.getElementById("nr_dest").addEventListener("click",function()
2094 {
2095 console.log("aici")
2096 var start=new Date();
2097 let lengthTr=list[0].children.length
2098 $(".tr_delimitator").remove();
2099 list.sort( (a,b)=>{
2100 return (new Date(getLandTime(a.children[lengthTr-2].innerText)).getTime()>new Date(getLandTime(b.children[lengthTr-2].innerText)).getTime())?1:
2101 (new Date(getLandTime(a.children[lengthTr-2].innerText)).getTime()<new Date(getLandTime(b.children[lengthTr-2].innerText)).getTime())?-1:0
2102 })
2103 list.sort( (a,b)=>{
2104 return (parseInt(a.children[1].getAttribute("data-nr"))<parseInt(b.children[1].getAttribute("data-nr")))?1:
2105 (parseInt(a.children[1].getAttribute("data-nr"))>parseInt(b.children[1].getAttribute("data-nr")))?-1:
2106 (a.children[1].innerText<b.children[1].innerText) ? 1: (a.children[1].innerText>b.children[1].innerText)?-1:0;
2107 });
2108
2109
2110 //add new table in page
2111 for(let i=0;i<list.length;i++)
2112 {
2113 new_table.appendChild(list[i]);
2114 }
2115 new_table.appendChild(last_row);
2116 //
2117 for(let i=0;i<list.length;i++)
2118 {
2119 list_info.push({
2120 coord_deff:list[i].children[1].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0],
2121 nr:parseInt(list[i].children[1].getAttribute("data-nr")),
2122 id_coord:list[i].children[1].children[0].href.split("village=")[1].split("&")[0]
2123 })
2124 }
2125 console.log(list_info)
2126
2127 //add delimiter on the first row
2128 var tableRef = document.getElementById("incomings_table").lastElementChild;
2129 var newRow = tableRef.insertRow(1);
2130 newRow.className="tr_delimitator"
2131 let cell = newRow.insertCell();
2132
2133 cell.setAttribute("colspan",length_table)
2134 cell.classList.add("selected")
2135 var delimitator = document.createElement("button")
2136 delimitator.innerText="load: ("+list_info[0].coord_deff+")"
2137 delimitator.setAttribute("data-id",list_info[0].id_coord)
2138 delimitator.setAttribute("data-nr",list_info[0].nr)
2139 delimitator.style.margin="10px"
2140 delimitator.classList.add("btn","load_troops")
2141 cell.appendChild(delimitator);
2142
2143 //add delimiter after each village destination
2144 var pozitie=3;
2145 for(let i=0;i<list.length-1;i++)
2146 {
2147 if(list_info[i].coord_deff !=list_info[i+1].coord_deff)
2148 {
2149 var tableRef = document.getElementById("incomings_table").lastElementChild;
2150 var newRow = tableRef.insertRow(pozitie);
2151 newRow.className="tr_delimitator"
2152 let cell = newRow.insertCell();
2153
2154 cell.setAttribute("colspan",length_table)
2155 cell.classList.add("selected")
2156 var delimitator = document.createElement("button")
2157 delimitator.innerText="load: ("+list_info[i+1].coord_deff+")"
2158 delimitator.setAttribute("data-id",list_info[i+1].id_coord)
2159 delimitator.setAttribute("data-nr",list_info[i+1].nr)
2160 delimitator.style.margin="10px"
2161 delimitator.classList.add("btn","load_troops")
2162 cell.appendChild(delimitator);
2163
2164
2165 pozitie++;
2166 }
2167 pozitie++;
2168 }
2169 list_info=[]
2170 var stop=new Date();
2171 console.log(stop-start)
2172 eventGetTroops();
2173 })
2174
2175
2176}
2177
2178//////////////////////////////////////////////////////tag incomings /////////////////////////////////////////////////////////////////
2179function tagIncomings(){
2180
2181 if(document.getElementsByClassName("info").length==0){
2182 UI.ErrorMessage("press first the button 'more info'!")
2183 }
2184 else{
2185 $("#btn_tag").attr('disabled', true);
2186 $(".tr_delimitator").remove();
2187 let csrf = window.csrf_token;
2188 var list_incomings_href=[]
2189 var indexIncoming=1;
2190 var table_incomings=document.getElementById("incomings_table").children[1].children
2191
2192 var nobleSpeed=2100*1000/(speedWorld*speedTroupes)//ms
2193 var ramSpeed=1800*1000/(speedWorld*speedTroupes)//ms
2194 var swordSpeed=1260*1000/(speedWorld*speedTroupes)//ms
2195 var axeSpeed=1080*1000/(speedWorld*speedTroupes)//ms
2196
2197 var map_tagged=localStorage.getItem(game_data.world+"map_tagged")
2198 if(map_tagged!=undefined)
2199 map_tagged=new Map(JSON.parse(lzw_decode(map_tagged)))
2200 else
2201 map_tagged=new Map()
2202
2203 let list_incomingId=[]
2204 for(let i=1;i<table_incomings.length-1;i++){
2205 let incomingId=table_incomings[i].children[0].children[2].getAttribute("data-id");
2206 let coordOrigin=table_incomings[i].children[2].innerText.match(/[0-9]{3}\|[0-9]{3}/)[0];
2207 let href=window.location.href.split("&")[0]+`&screen=info_command&ajaxaction=edit_other_comment&id=${incomingId}&h=${csrf}`
2208 let current_tag=table_incomings[i].children[0].innerText.trim()
2209 var nameTroupe=table_incomings[i].children[0].innerText.trim().split(/\s+/)[0];
2210 let nr=parseInt(table_incomings[i].children[3].innerText);
2211 let nr_tribe=table_incomings[i].children[4].innerText;
2212 let type=table_incomings[i].children[5].innerText;
2213 let pop= (table_incomings[i].children[6].innerText !="?")?parseInt(table_incomings[i].children[6].innerText):"?"
2214 let time=table_incomings[i].children[7].innerText;
2215 let length_tr=table_incomings[i].children.length
2216 let nameAttacker=table_incomings[i].children[length_tr-4].innerText
2217 ////////////////////////////////get land time///////////////////////////////
2218 let time_land=table_incomings[i].children[length_tr-2].innerText
2219 let date_land=getLandTime(time_land)
2220 let fake=false;
2221
2222 list_incomingId.push(incomingId)
2223
2224
2225 if(table_incomings[i].getElementsByClassName("possible_fake").length>0 && table_incomings[i].getElementsByClassName("quickedit")[0].getElementsByTagName("img").length==2){
2226 let date_home=new Date(table_incomings[i].getElementsByClassName("possible_fake")[0].getAttribute("date-fake"))
2227 let distance=parseFloat(table_incomings[i].children[length_tr-3].innerText);
2228 let labelName=table_incomings[i].getElementsByClassName("quickedit")[0].getElementsByTagName("img")[1].src
2229 let time_attack=0;
2230 if(labelName.includes("snob.png")){
2231 time_attack=nobleSpeed*distance
2232 }else if(labelName.includes("ram.png") || labelName.includes("catapult.png")){
2233 time_attack=ramSpeed*distance
2234 }else if(labelName.includes("sword.png")){
2235 time_attack=swordSpeed*distance
2236 }else if(labelName.includes("axe.png")){
2237 time_attack=axeSpeed *distance
2238 }
2239
2240 let dateLand=new Date(date_land)
2241 console.log(time_attack)
2242 if(time_attack+date_home.getTime()>dateLand.getTime() ){
2243 fake=true;
2244 console.log("fake from "+coordOrigin)
2245 }
2246 var days=parseInt(time.split(":")[0])*24*3600*1000
2247 var hours=parseInt(time.split(":")[1])*3600*1000
2248 var min=parseInt(time.split(":")[2])*60*1000
2249 var sec=parseInt(time.split(":")[3])*1000
2250 var total_time=days+hours+min+sec-time_attack
2251 time=total_time/(24*3600*1000)
2252 time+=":00:00:00"
2253 }
2254
2255 let obj={
2256 incomingId:incomingId,
2257 coordOrigin:coordOrigin,
2258 href:href,
2259 nameTroupe:nameTroupe,
2260 nr:nr,
2261 nr_tribe:nr_tribe,
2262 type:type,
2263 pop:pop,
2264 time:time,
2265 nameAttacker:nameAttacker,
2266 fake:fake,
2267 current_tag:current_tag,
2268 }
2269 if(!table_incomings[i].children[0].innerText.toLowerCase().includes(wordsTranslate[4]) && !table_incomings[i].children[0].innerText.toLowerCase().includes('"'))
2270 list_incomings_href.push(obj)
2271 }
2272 list_incomings_href=list_incomings_href.reverse();
2273
2274 //eliminate old incomingId
2275 console.log(list_incomingId)
2276 Array.from(map_tagged.keys()).forEach((key)=>{
2277 if(!list_incomingId.includes(key)){
2278 map_tagged.delete(key)
2279 console.log("delete id: "+key)
2280 }
2281 })
2282
2283
2284 var url_length=list_incomings_href.length
2285 var start_tagging=new Date()
2286 function ajaxRequest (urls) {
2287 let current_url
2288 let labelInfo=""
2289 let current_tag
2290 let obj=null
2291 if(urls.length>0){
2292 obj=urls.pop()
2293 current_url=obj.href;
2294 labelInfo=obj.nameTroupe;
2295 current_tag=obj.current_tag;
2296 let nr
2297 if(obj.nr_tribe=="?")
2298 nr=parseInt(obj.nr)
2299 else{
2300 nr=Math.max(parseInt(obj.nr), parseInt(obj.nr_tribe) )
2301 }
2302
2303 if(obj.type!="?"){
2304 obj.time=parseInt(obj.time.split(":")[0]);
2305
2306 if(obj.nr==20000)
2307 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type;
2308 else if(obj.type=="new_off")
2309 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" off";
2310 else if(obj.type.includes("def"))
2311 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type+" "+obj.time+"d";
2312 else
2313 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type+" "+obj.pop+"% "+obj.time+"d"
2314 // if(obj.nr==20000)
2315 // labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type;
2316 // else if(obj.type=="new_off")
2317 // labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" off";
2318 // else if(obj.type.includes("def"))
2319 // labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type
2320 // else
2321 // labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr+" "+obj.type
2322
2323
2324
2325
2326 }
2327 else{
2328 labelInfo=labelInfo+" "+obj.nameAttacker+" "+nr
2329 }
2330 if(obj.fake==true){
2331 labelInfo+=' ("fake")';
2332 }
2333 // console.log(labelInfo)
2334 }
2335 else{
2336 current_url="stop"
2337 }
2338 console.log("in functie in plm "+urls.length)
2339 // console.log(current_url)
2340 var start_ajax=new Date();
2341 if (urls.length >= 0 && current_url!="stop") {
2342
2343 let commandId=current_url.split("id=")[1].split("&")[0]
2344 if(map_tagged.get(commandId)!=labelInfo || current_tag!=labelInfo)
2345 {
2346 map_tagged.set(commandId,labelInfo.trim())
2347
2348 $.ajax({
2349 url: current_url,
2350 method: 'POST',
2351 dataType: "json",
2352 data: { text: labelInfo },
2353 headers: { 'TribalWars-Ajax': 1 },
2354 success: (data) => {
2355 $("span[data-id="+obj.incomingId+"]").find(".quickedit-label").text(labelInfo)
2356 UI.InfoMessage(indexIncoming+"/"+url_length)
2357 indexIncoming++;
2358 var stop_ajax=new Date();
2359 var dif_time=stop_ajax.getTime()-start_ajax.getTime();
2360 console.log("dif_time "+dif_time+" wait "+(200-dif_time))
2361 window.setTimeout(function(){
2362 ajaxRequest (list_incomings_href)
2363
2364 },200-dif_time)
2365 }
2366 })
2367 }
2368 else{
2369 console.log("id: "+commandId+" already tagged")
2370 ajaxRequest (list_incomings_href)
2371 indexIncoming++;
2372 }
2373
2374
2375
2376 }
2377 else
2378 {
2379 UI.SuccessMessage("done",2000)
2380 var stop_tagging=new Date();
2381 console.log("total time "+stop_tagging.getTime()-start_tagging.getTime())
2382 let data=lzw_encode(JSON.stringify(Array.from(map_tagged.entries())))
2383 localStorage.setItem(game_data.world+"map_tagged",data)
2384
2385 }
2386 }
2387 ajaxRequest(list_incomings_href);
2388
2389 }
2390
2391
2392}
2393
2394function getLandTime(time_land){
2395 var date_land=""
2396 let server_date=document.getElementById("serverDate").innerText.split("/")
2397 if(time_land.includes(wordsTranslate[1])){ //today
2398 console.log("here")
2399 date_land=server_date[1]+"/"+server_date[0]+"/"+server_date[2]+" "+time_land.match(/\d+:\d+:\d+:\d+/)[0]
2400 }
2401 else if(time_land.includes(wordsTranslate[2])){ //tomorrow
2402 var tomorrow_date=new Date(server_date[1]+"/"+server_date[0]+"/"+server_date[2]);
2403 tomorrow_date.setDate(tomorrow_date.getDate()+1);
2404 date_land= ("0"+(tomorrow_date.getMonth()+1)).slice(-2)+"/"+("0"+tomorrow_date.getDate()).slice(-2)+"/"+tomorrow_date.getFullYear()+" "+time_land.match(/\d+:\d+:\d+:\d+/)[0];
2405 }else if(time_land.includes(wordsTranslate[3])){ //on
2406 var on=time_land.match(/\d+.\d+/)[0].split(".");
2407 date_land=on[1]+"/"+on[0]+"/"+server_date[2]+" "+time_land.match(/\d+:\d+:\d+:\d+/)[0];
2408 }
2409 return date_land;
2410}
2411
2412function calcProductionTroupes(time,popReport){
2413 var maxPop=popReport;
2414 let nrAxemax=6000,nrLcMax=3000,nrRamMax=400;
2415 let countAxe=0,countLc=0,countRam=0;
2416 let time_temp=time
2417 while(maxPop<20000 && time_temp>0){
2418 if(countAxe<nrAxemax){
2419 countAxe++;
2420 time_temp-=axeTime;
2421 maxPop+=1
2422 }
2423 else break;
2424 }
2425 time_temp=time
2426 while(maxPop<20000 && time_temp>0){
2427 if(countLc<nrLcMax){
2428 countLc++;
2429 time_temp-=lhTime;
2430 maxPop+=4
2431 }
2432 else break;
2433 }
2434 time_temp=time
2435 while(maxPop<20000 && time_temp>0){
2436 if(countRam<nrRamMax){
2437 countRam++;
2438 time_temp-=ramTime;
2439 maxPop+=5
2440 }
2441 else break;
2442 }
2443
2444 // console.log("axe "+countAxe+" lc "+countLc+" ram "+countRam)
2445 // console.log(maxPop)
2446 maxPop=(maxPop/20000)*100
2447 return maxPop
2448}
2449 //////////////////////////////////////////////////////search reports /////////////////////////////////////////////////////////////////
2450
2451async function loadReports(){
2452
2453 var map_search=await readFileDropbox(filename_reports).catch(err=>alert(err))
2454 map_search=new Map( JSON.parse( lzw_decode(map_search) ));
2455 UI.SuccessMessage("load reports")
2456 console.log(map_search)
2457 loadReportsOk=true;
2458 $("#input_search").on("input",function(){
2459 let current_value=$("#input_search").val()
2460 if(current_value.match(/[0-9]{3}\|[0-9]{3}/)!=null){
2461 coords=current_value.match(/[0-9]{3}\|[0-9]{3}/g)
2462 console.log(coords)
2463 $("#report_view").empty()
2464 let contentHtml=""
2465 let nr_found=0;
2466 for(let i=0;i<coords.length;i++){
2467 if(map_search.has(coords[i])){
2468 let obj=map_search.get(coords[i]);
2469 console.log(coords[i])
2470 contentHtml+= `<div>
2471 <center style="margin:10px"><input class="btn evt-confirm-btn btn-confirm-yes" type="button"onclick="$('#table`+i+`').toggle('slow')" value="`+coords[i]+`"></center>
2472
2473 <table class="table_hide" id="table`+i+'"'+
2474 createReport(obj)+
2475 `</table></div>`;
2476 nr_found++;
2477 }
2478 }
2479 $("#report_view").append(contentHtml)
2480 $(".table_hide").hide();
2481 $("#progress_search").text("found: "+nr_found)
2482 }else{
2483 $("#report_view").empty()
2484 }
2485
2486 })
2487 $("#input_search").mouseout(function(){
2488 let current_value=$("#input_search").val()
2489 if(current_value.match(/[0-9]{3}\|[0-9]{3}/)!=null){
2490 let coords=current_value.match(/[0-9]{3}\|[0-9]{3}/g)
2491 $("#input_search").val(Array.from(coords).join(","))
2492 }
2493 })
2494
2495
2496}
2497
2498///////////////////////////////////////////////////////create table for view report//////////////////////////////////////////////////////
2499function createReport(obj){
2500 var tableHTML=``;
2501 if(obj.attackingArmy!=undefined){
2502 tableHTML=`
2503 <tbody>
2504 <tr>
2505 <td>Battle time </td>
2506 <td>`+ obj.time_report +`</td>
2507 </tr>
2508 <tr>
2509 <td colspan="2" valign="top" height="160" style="border: solid 1px ; padding 4px;" class="report_ReportAttack">
2510 <table id="attack_info_att" width=100% style="border: 1px solid #DED3B9">
2511 <tbody>
2512 <tr>
2513 <th style="width:20%">Attacker:</th>
2514 <th >`+obj.nameAttacker+`</th>
2515 </tr>
2516 <tr>
2517 <td >Origin:</td>
2518 <td >`+obj.coordAttacker+`</td>
2519 </tr>
2520 <tr>
2521 <td colspan="2" style="padding:0px">`+
2522 createTableTroupes(obj.attackingArmy,obj.attackingArmyLosses)+
2523 `</td>
2524 </tr>
2525 </tbody>
2526 </table>
2527 </td>
2528 </tr>`
2529 }
2530 if(obj.defendingArmy!=undefined){
2531 tableHTML+= `
2532 <tr>
2533 <td colspan="2" valign="top" height="160" style="border: solid 1px ; padding 4px;" >
2534 <table id="attack_info_def" width=100% style="border: 1px solid #DED3B9">
2535 <tbody>
2536 <tr>
2537 <th style="width:20%">Defender:</th>
2538 <th >`+obj.nameDefender+`</th>
2539 </tr>
2540 <tr>
2541 <td >Origin:</td>
2542 <td >`+obj.coordDefender+`</td>
2543 </tr>
2544 <tr>
2545 <td colspan="2" style="padding:0px">`+
2546 createTableTroupes(obj.defendingArmy,obj.defendingArmyLosses)+
2547 `</td>
2548 </tr>
2549 </tbody>
2550 </table>
2551 </td>
2552 </tr>
2553 `
2554 }
2555
2556 if(obj.travelingTroops!=undefined){
2557 tableHTML+= `
2558 <tr>
2559 <td colspan="2" valign="top" height="160" style="border: solid 1px ; padding 4px;">
2560 <table id="attack_spy_away" width=100% style="border: 1px solid #DED3B9; width:100%; margin-top:5px;">
2561 <tbody>
2562 <tr>
2563 <th colspan="2">Units outside of village:</th>
2564 </tr>
2565
2566 <tr>
2567 <td colspan="2" >`+
2568 createTableTroupesAway(obj.travelingTroops)+
2569 `</td>
2570 </tr>
2571 </tbody>
2572 </table>
2573 </td>
2574 </tr>
2575 `
2576 }
2577 if(obj.attackingArmy!=undefined){
2578 tableHTML+="</tbody>"
2579 }
2580
2581 return tableHTML
2582}
2583
2584function createTableTroupes(totalArmy,lostArmy){
2585 let tableHTML=`
2586 <table class="vis" >
2587 <tbody>
2588 <tr class="center">
2589 <td width="20"></td>`
2590
2591 let units=game_data.units
2592 for(let i=0;i<totalArmy.length;i++){
2593 if(units[i]!="militia"){
2594 if(totalArmy[i].count==0 )
2595 tableHTML+=`<td width="35"><img src="https://dsen.innogamescdn.com/asset/3ec301e5/graphic/unit/unit_`+units[i]+`.png" alt class="faded"</td>`
2596 else
2597 tableHTML+=`<td width="35"><img src="https://dsen.innogamescdn.com/asset/3ec301e5/graphic/unit/unit_`+units[i]+`.png"</td>`
2598 }
2599 }
2600 tableHTML+="</tr>"
2601 tableHTML+=`
2602 <tr>
2603 <td width="20">Quantity:</td>`
2604 for(let i=0;i<totalArmy.length;i++){
2605 if(units[i]!="militia"){
2606 if(totalArmy[i].count==0)
2607 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+units[i]+` hidden">`+totalArmy[i].count+"</td>"
2608 else
2609 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+units[i]+`">`+totalArmy[i].count+"</td>"
2610 }
2611 }
2612 tableHTML+="</tr>"
2613 tableHTML+=`
2614 <tr>
2615 <td width="20">Losses:</td>`
2616 for(let i=0;i<lostArmy.length;i++){
2617 if(units[i]!="militia"){
2618 if(lostArmy[i].count==0)
2619 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+units[i]+` hidden">`+lostArmy[i].count+"</td>"
2620 else
2621 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+units[i]+`">`+lostArmy[i].count+"</td>"
2622 }
2623 }
2624 tableHTML+="</tr>"
2625
2626
2627
2628
2629 tableHTML+="</tr></tbody></table>"
2630 return tableHTML
2631}
2632
2633
2634function createTableTroupesAway(totalArmy){
2635 let tableHTML=`
2636 <table class="vis">
2637 <tbody>
2638 <tr class="center">`
2639
2640 let units=game_data.units
2641 Object.keys(totalArmy).forEach(key=>{
2642 if(totalArmy[key]==0)
2643 tableHTML+=`<th width="35"><img src="https://dsen.innogamescdn.com/asset/3ec301e5/graphic/unit/unit_`+key+`.png" alt class="faded"</th>`
2644 else
2645 tableHTML+=`<th width="35"><img src="https://dsen.innogamescdn.com/asset/3ec301e5/graphic/unit/unit_`+key+`.png"</th>`
2646
2647 })
2648
2649
2650 tableHTML+="</tr>"
2651 tableHTML+=`<tr>`
2652 Object.keys(totalArmy).forEach(key=>{
2653 if(totalArmy[key]==0)
2654 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+key+` hidden">`+totalArmy[key]+"</td>"
2655 else
2656 tableHTML+=`<td style="text-align:center" class="unit-item unit-item-`+key+`">`+totalArmy[key]+"</td>"
2657
2658 })
2659 tableHTML+="</tr>"
2660
2661 tableHTML+="</tr></tbody></table>"
2662 return tableHTML
2663}
2664
2665function createTableIncomings(list){
2666 let serverTime=document.getElementById("serverTime").innerText
2667 let serverDate=document.getElementById("serverDate").innerText.split("/")
2668 serverDate=serverDate[1]+"/"+serverDate[0]+"/"+serverDate[2]
2669 let date_current=new Date(serverDate+" "+serverTime).getTime()
2670 let html_incomings=`
2671 <tbody>
2672 <tr>
2673 <th><img src="https://dsen.innogamescdn.com/asset/056b9c0b/graphic/unit/att.png"></<th>
2674 <th >speed</th>
2675 <th colspan="2">destination</th>
2676 <th colspan="2">origin</th>
2677 <th >Arrival time</th>
2678 <th >Arrives in</th>
2679 </tr>`
2680
2681 for(let i=0;i<list.length;i++){
2682 console.log(list[i])
2683 let labelName
2684 console.log(list[i].labelName)
2685 if(list[i].labelName=="none")
2686 labelName="https://dsen.innogamescdn.com/asset/056b9c0b/graphic/delete.png"
2687 else
2688 labelName=`https://dsen.innogamescdn.com/asset/a9e85669/graphic/unit/tiny/${list[i].labelName}`
2689
2690 console.log(list[i].labelName)
2691 let arrived=new Date(list[i].date_land).getTime()
2692 if(arrived>date_current){
2693 html_incomings+=`
2694 <tr>
2695 <td><img src="https://dsen.innogamescdn.com/asset/a9e85669/graphic/command/${list[i].type_attack}"> </td>
2696 <td><img src="${labelName}"> </td>
2697 <td><a href="${game_data.link_base_pure}info_village&id=${list[i].id_coord_def}"> (${list[i].coord_def})</a> </td>
2698 <td><a href="${game_data.link_base_pure}info_player&id=${list[i].id_player_def}"> ${list[i].player_def}</a> </td>
2699 <td><a href="${game_data.link_base_pure}info_village&id=${list[i].id_coord_off}">(${list[i].coord_off}) </a> </td>
2700 <td><a href="${game_data.link_base_pure}info_player&id=${list[i].id_player_off}">${list[i].player_off} </a> </td>
2701 <td>${list[i].date_land.split(" ")[0]} <b>${list[i].date_land.split(" ")[1]}</b></td>
2702 <td date-time=${arrived} class="counterTime"></td>
2703 </tr>
2704 `
2705 }
2706 }
2707 html_incomings+="</tbody>"
2708 return html_incomings
2709}
2710
2711function counterTime(){
2712
2713 window.setInterval(()=>{
2714
2715 $(".counterTime").each((index,item)=>{
2716 let serverTime=document.getElementById("serverTime").innerText
2717 let serverDate=document.getElementById("serverDate").innerText.split("/")
2718 serverDate=serverDate[1]+"/"+serverDate[0]+"/"+serverDate[2]
2719 let date_current=new Date(serverDate+" "+serverTime).getTime()
2720 // console.log(date_current)
2721
2722 let time=parseInt(item.getAttribute("date-time"))
2723 let hours=("0"+parseInt((time-date_current)/(3600*1000))).slice(-3);
2724 let minutes=("0"+parseInt(((time-date_current)/(60*1000)%60))).slice(-2);
2725 let seconds=( "0"+parseInt((((time-date_current)/1000)%60))).slice(-2);
2726 result=hours+":"+minutes+":"+seconds
2727 item.innerText=result
2728 })
2729 },1000)
2730
2731
2732}
2733
2734
2735////////////////////////////////////////////////////////get speed world///////////////////////////////////////////////////
2736
2737
2738function getSpeedConstant() { //Get speed constant (world speed * unit speed) for world
2739 if (localStorage.getItem(game_data.world+"speedWorld") !== null) {
2740 let obj=JSON.parse(localStorage.getItem(game_data.world+"speedWorld"))
2741 console.log("speed world already exist")
2742 return obj
2743 }
2744 else { //Get data from xml and save it in localStorage to avoid excessive XML requests to server
2745 let currentHtml=document.body.innerHTML
2746 document.body.innerHTML = httpGet("/interface.php?func=get_config") //Load world data
2747 let obj={}
2748 let worldSpeed = Number(document.getElementsByTagName("speed")[0].innerHTML)
2749 let unitSpeed = Number(document.getElementsByTagName("unit_speed")[0].innerHTML);
2750 obj.unitSpeed=unitSpeed
2751 obj.worldSpeed=worldSpeed
2752 document.body.innerHTML=currentHtml
2753 localStorage.setItem(game_data.world+"speedWorld",JSON.stringify(obj));
2754 console.log("save speed world")
2755 return obj
2756 }
2757}
2758
2759
2760/////////////////////////////////////////////////////// interface for get all tr from incomings page/////////////////////////////////////////
2761function setIntervalIncomings(){
2762 htmlInc = `
2763 <div id="div_container" class="ui-widget-content div_remove" style="width:600px;background-color:${backgroundColor};cursor:move;z-index:50;">
2764 <div class="close-btn" btn_close="btn_close" onclick="closeWindow()" style="position:absolute;top:10px;right: 10px;"><b><a href=#><font color="${titleColor}">X</font></b></a></div>
2765 <h2><center style="margin:10px"><u><font color="${titleColor}">get all incomings</font></u></center></h2>
2766 <table id="table_upload" class="" border="1" style="width: 100%;background-color:${backgroundColor};border-color:${borderColor}">
2767 <tr>
2768 <td style="text-align:center; width:auto; background-color:${headerColor}">
2769 <p><center style="margin:10px"><font color="${titleColor}">between hours </font></center></p>
2770 </td>
2771 <td style="text-align:center; width:auto; background-color:${headerColor}">
2772 <p><center style=""><input type="number" id="id_start" size="5" style="text-align:center" class=" input-nicer show" value="0"><br><br></center></p>
2773 </td>
2774 <td style="text-align:center; width:auto; background-color:${headerColor}">
2775 <p><center style=""><input type="number" id="id_stop" size="5" style="text-align:center" class=" input-nicer show" value="100"><br><br></center></p>
2776 </td>
2777
2778 </tr>
2779 </table>
2780 <center style="margin:10px"><u><input class="btn" type="button" id="btn_village" onclick="getTrIncomings()" value="Start"></center>
2781
2782
2783
2784 </div>
2785 `;
2786 ////////////////////////////////////////add and remove window from page/////////////////////////////////////////////////////////////////
2787 $("#div_container").remove()
2788 $("#contentContainer").eq(0).prepend(htmlInc);
2789 $("#mobileContent").eq(0).prepend(htmlInc);
2790
2791 if(game_data.device=="desktop"){
2792 $("#div_container").css("position","fixed");
2793 $("#div_container").draggable();
2794 }
2795 $('#id_start').on('input',function(e){
2796 let value=this.value;
2797 localStorage.setItem(game_data.world+"startInc",value)
2798 });
2799 $('#id_stop').on('input',function(e){
2800 let value=this.value;
2801 localStorage.setItem(game_data.world+"stopInc",value)
2802 });
2803 if(localStorage.getItem(game_data.world+"startInc")!=null)
2804 $('#id_start').val(localStorage.getItem(game_data.world+"startInc"))
2805 if(localStorage.getItem(game_data.world+"stopInc")!=null)
2806 $('#id_stop').val(localStorage.getItem(game_data.world+"stopInc"))
2807
2808
2809}
2810
2811//////////////////////////////////////////////get a list with all tr ///////////////////////////////////////////////////////////////////
2812function getTrIncomings(){
2813
2814 //get pages for all incoming
2815 let list_pages=[]
2816 let start=parseInt(document.getElementById("id_start").value)
2817 let stop=parseInt(document.getElementById("id_stop").value)
2818
2819 if(document.getElementsByClassName("vis")[1].getElementsByTagName("select").length>0){
2820 Array.from(document.getElementsByClassName("vis")[1].getElementsByTagName("select")[0]).forEach(function(item){
2821 list_pages.push(item.value)
2822 })
2823 list_pages.pop();
2824 }
2825 else if(document.getElementsByClassName("paged-nav-item").length>0){//all pages from the current folder
2826 let nr=0;
2827 Array.from(document.getElementsByClassName("paged-nav-item")).forEach(function(item){
2828 let current=item.href;
2829 current=current.split("page=")[0]+"page="+nr
2830 nr++;
2831 list_pages.push(current);
2832 })
2833 }
2834 else{
2835 let current_link=window.location.href;
2836 list_pages.push(current_link);
2837 }
2838 list_pages=list_pages.reverse();
2839
2840
2841 // go to every page and get incoming
2842 var rows=[]
2843 function ajaxRequest (urls) {
2844 let current_url
2845 var startAjax=new Date().getTime();
2846 if(urls.length>0){
2847 current_url=urls.pop()
2848 }
2849 else{
2850 current_url="stop"
2851 }
2852 console.log(current_url)
2853 if (urls.length >= 0 && current_url!="stop") {
2854 $.ajax({
2855 url: current_url,
2856 method: 'get',
2857 success: (data) => {
2858 document.body.innerHTML=data
2859 var table_incomings=document.getElementById("incomings_table").children[1].children
2860 for(let i=1;i<table_incomings.length-1;i++){
2861 rows.push(table_incomings[i])
2862 }
2863 var stopAjax=new Date().getTime();
2864 var diff=stopAjax-startAjax
2865 console.log("wait inc: "+(200-diff))
2866 window.setTimeout(function(){
2867 ajaxRequest (list_pages)
2868 },200-diff)
2869 }
2870 })
2871
2872 }
2873 else
2874 {
2875 $(".row_a").remove();
2876 $(".row_b").remove();
2877 var table_incomings=document.getElementById("incomings_table")
2878 var lastRow=table_incomings.children[1].children[1];
2879 table_incomings.children[1].children[1].remove();
2880 var nr_row=0;
2881 for(let i=0;i<rows.length;i++){
2882 var hours=rows[i].children[ rows[i].children.length-1 ].innerText.split(":")[0]
2883 if(hours>=start && hours< stop){
2884 $(table_incomings).append(rows[i])
2885 nr_row++;
2886 }
2887 }
2888 table_incomings.children[1].children[0].children[0].innerText="Command ("+nr_row+")"
2889 $(table_incomings).append(lastRow)
2890
2891 //activate renaming
2892 $('document').ready(function() {
2893 CommandsOverview.init();
2894 UI.ToolTip('.icon_village_notes');
2895
2896 $('.quickedit').QuickEdit({url: TribalWars.buildURL('POST', 'info_command', {ajaxaction: 'edit_other_comment', id: '__ID__'})});
2897 Command.init();
2898 });
2899 UI.SuccessMessage("done")
2900 console.log(rows)
2901 showButtons();
2902
2903 }
2904 }
2905 ajaxRequest(list_pages);
2906
2907}
2908
2909/////////////////////////////////////////////highlight trains->yellow, nobles->red, nukes-> green////////////////////////////////////////
2910function highLightIncomings(){
2911 let table=document.querySelectorAll(".row_a,.row_b")
2912 if(localStorage.getItem(game_data.world+"highlight")=="true"){
2913 let colors = {
2914 yellow: '#ffff66',
2915 red: '#ff8080',
2916 green: '#4dff4d'
2917 };
2918 document.getElementById("btn_highlight").classList.remove("btn-confirm-no")
2919 document.getElementById("btn_highlight").classList.add("btn-confirm-yes")
2920 for(let i=0;i<table.length;i++){
2921 let length_tr=table[i].children.length
2922 table[i].classList.remove("selected")
2923 //highlight nukes if has more than 70% pop
2924 if(document.getElementById("id_type")!=null){
2925 let watchTower=table[i].children[0].getElementsByTagName("img")[0].src.includes("attack_large.png")
2926 let watchTowerSmall=table[i].children[0].getElementsByTagName("img")[0].src.includes("attack_small.png")
2927 let hasNuke=false
2928 if(table[i].getElementsByClassName("cls_type").length>0){
2929 let type=table[i].getElementsByClassName("cls_type")[0].innerText
2930 let pop=parseFloat(table[i].getElementsByClassName("cls_pop")[0].innerText)
2931 if(((type=="off" && pop>70)|| watchTower==true) && watchTowerSmall==false){//must be tested
2932 hasNuke=true;
2933 }
2934 }
2935 if(hasNuke==true || watchTower==true ){
2936 $(table[i]).find('td').each(function(){
2937 $(this).css('background-color', colors.green);
2938 });
2939 }
2940 }
2941
2942 //highlight all possible trains
2943 for(let j=i+1;j<table.length;j++){
2944 let tr1=table[i].children[length_tr-2].innerText.match(/[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{3}/)[0]
2945 let tr2=table[j].children[length_tr-2].innerText.match(/[0-9]{2}\:[0-9]{2}\:[0-9]{2}\:[0-9]{3}/)[0]
2946 let time1=parseInt(tr1.split(":")[0])*3600*1000+parseInt(tr1.split(":")[1])*60*1000+parseInt(tr1.split(":")[2])*1000+parseInt(tr1.split(":")[3])
2947 let time2=parseInt(tr2.split(":")[0])*3600*1000+parseInt(tr2.split(":")[1])*60*1000+parseInt(tr2.split(":")[2])*1000+parseInt(tr2.split(":")[3])
2948
2949 if(table[i].children[2].innerHTML==table[j].children[2].innerHTML){//if origin coord is the same
2950 if(Math.abs(time1-time2)==50 || Math.abs(time1-time2)==100 || Math.abs(time1-time2)==150){
2951 // console.log(tr1+" === "+tr2)
2952 // console.log(time1+" === "+time2)
2953 // console.log("diference tr: "+(time2-time1))
2954
2955 $(table[i]).find('td').each(function(){
2956 $(this).css('background-color', colors.yellow);
2957 });
2958 $(table[j]).find('td').each(function(){
2959 $(this).css('background-color', colors.yellow);
2960 });
2961 break;
2962 }
2963 }
2964 if(Math.abs(time1-time2)>200)
2965 break;
2966 }
2967 // highlist if it is tagged as noble
2968 if(table[i].children[0].getElementsByTagName("img").length==2){
2969 let hasNoble=table[i].children[0].getElementsByTagName("img")[1].src.includes("snob.png")
2970 if(hasNoble==true){
2971 $(table[i]).find('td').each(function(){
2972 $(this).css('background-color', colors.red);
2973 });
2974 }
2975 }
2976
2977 }
2978 }
2979 else{
2980 for(let i=0;i<table.length;i++){
2981 $(table[i]).find('td').each(function(){
2982 $(this).css('background-color', "");
2983 });
2984 }
2985 document.getElementById("btn_highlight").classList.remove("btn-confirm-yes")
2986 document.getElementById("btn_highlight").classList.add("btn-confirm-no")
2987 }
2988
2989
2990
2991}
2992if(window.location.href.includes("mode=incomings"))
2993 highLightIncomings();
2994
2995function toggleHighLight(){
2996
2997 if(localStorage.getItem(game_data.world+"highlight")!=null){
2998 let isHighLight=localStorage.getItem(game_data.world+"highlight")
2999 if(isHighLight=="true"){
3000 localStorage.setItem(game_data.world+"highlight","false")
3001 // UI.ErrorMessage("highlight off",500)
3002 highLightIncomings();
3003 }
3004 else{
3005 localStorage.setItem(game_data.world+"highlight","true")
3006 // UI.SuccessMessage("highlit on",500)
3007 highLightIncomings();
3008 }
3009
3010 }
3011 else{
3012 localStorage.setItem(game_data.world+"highlight","true")
3013 highLightIncomings();
3014 }
3015}
3016
3017/////////////////////////////////////////////get and add troops on incoming page for each village////////////////////////////////////////////
3018function eventGetTroops(){
3019 var units=game_data.units
3020
3021
3022 $(".load_troops").on("click",function(event){
3023 event.preventDefault()
3024 $(".load_troops").attr("disabled", true)
3025 let villageId=this.getAttribute("data-id")
3026 let nr_attacks=this.getAttribute("data-nr")
3027 let link_home_troops=game_data.link_base_pure + `map&ajax=map_info&source=${villageId}&target=${villageId}&`
3028 let link_coming_troops=window.location.href.split("village=")[0]+`village=${villageId}&screen=place&mode=call&target=${villageId}`
3029 let coord=this.innerText.match(/[0-9]{3}\|[0-9]{3}/)[0]
3030 let button=this
3031 console.log(link_home_troops)
3032 this.parentElement.classList.remove("selected")
3033
3034
3035
3036 let time_start=new Date().getTime();
3037 $.get(link_home_troops,function(response){
3038 console.log(response)
3039 let obj_troops={}
3040 for(let i=0;i<units.length-1;i++){
3041 obj_troops[units[i]]=parseInt(response.units[units[i]].count.home)+parseInt(response.units[units[i]].count.foreign)
3042 }
3043 let wallLevel,farmLevel,flagName,LoyaltyLevel
3044 wallLevel=response.buildings.wall
3045 farmLevel=response.buildings.farm
3046 LoyaltyLevel=response.mood
3047 console.log(response.flag)
3048 if(response.flag!=undefined)
3049 flagName =response.flag.short_desc
3050 else
3051 flagName="none"
3052 console.log(obj_troops)
3053 console.log("wallLevel: "+wallLevel)
3054 console.log("farmLevel: "+farmLevel)
3055 console.log("flagName: "+flagName)
3056 console.log("LoyaltyLevel: "+LoyaltyLevel)
3057
3058
3059
3060 let htmlDiv=`<div id="div_coming_troops" hidden></div>`
3061 $("#contentContainer").eq(0).prepend(htmlDiv)
3062 console.log(link_coming_troops)
3063
3064 $.get(link_coming_troops,function(data){
3065 document.getElementById("div_coming_troops").innerHTML=data
3066
3067 let obj_troops_coming={snob:0}
3068 let troops_coming=document.getElementById("div_coming_troops").querySelectorAll("#support_sum td")
3069 console.log(troops_coming)
3070 for(let i=0;i<troops_coming.length-1;i++){
3071 let name=troops_coming[i].getAttribute("data-unit")
3072 let value=parseInt(troops_coming[i].innerText)
3073 obj_troops_coming[name]=value
3074 }
3075 document.getElementById("div_coming_troops").remove()
3076
3077
3078
3079
3080 let html=`
3081 <div style="width:600px;background-color:${backgroundColor};cursor:move;width:50%;margin:10px auto">
3082
3083 <table class="" border="1" style="width: 100%;background-color:${backgroundColor};border-color:${borderColor}">
3084 <tr>
3085 <td style="text-align:center; width:auto; background-color:${headerColor}">
3086 <p><center style="margin:10px"><font color="${titleColor}">coord </font></center></p>
3087 </td>
3088 <td style="text-align:center; width:auto; background-color:${headerColor}">
3089 <p><center style="margin:10px"><font color="${titleColor}"><img src="https://dsen.innogamescdn.com/asset/4ba99e83/graphic/unit/att.png"> </font></center></p>
3090 </td>
3091 <td style="text-align:center; width:auto; background-color:${headerColor}">
3092 <p><center style="margin:10px"><font color="${titleColor}"><img src="https://dsen.innogamescdn.com/asset/4ba99e83/graphic/flags/small/3.png"> </font></center></p>
3093 </td>
3094 <td style="text-align:center; width:auto; background-color:${headerColor}">
3095 <p><center style="margin:10px"><font color="${titleColor}"><img src="https://dsen.innogamescdn.com/asset/1d2499b/graphic/buildings/snob.png"> </font></center></p>
3096 </td>
3097 <td style="text-align:center; width:auto; background-color:${headerColor}">
3098 <p><center style="margin:10px"><font color="${titleColor}"><img src="https://dsen.innogamescdn.com/asset/1d2499b/graphic/buildings/wall.png"> </font></center></p>
3099 </td>
3100 <td style="text-align:center; width:auto; background-color:${headerColor}">
3101 <p><center style="margin:10px"><font color="${titleColor}"><img src="https://dsen.innogamescdn.com/asset/1d2499b/graphic/buildings/farm.png"> </font></center></p>
3102 </td>
3103 <td style="text-align:center; width:auto; background-color:${headerColor}">
3104 <p><center style="margin:10px"><font color="${titleColor}">troops </font></center></p>
3105 </td>
3106
3107 `;
3108 for(let i=0;i<units.length-1;i++){
3109 html+=`<td class="fm_unit" style="width:30px;text-align:center;width:auto; background-color:${headerColor}"><img src="https://dsen.innogamescdn.com/asset/1d2499b/graphic/unit/unit_${units[i]}.png"></td>`
3110 }
3111 html+=`
3112 <td style="text-align:center; width:auto; background-color:${headerColor}">
3113 <p><center style="margin:10px"><font color="${titleColor}">pop</font></center></p>
3114 </td>`
3115 html+=`</tr>
3116 <tr>`
3117
3118 html+=`
3119 <td rowspan="3" class="" style="width:30px;height:30px;text-align:center; background-color:${headerColor};color:white">${coord}</td>
3120 <td rowspan="3" class="" style="width:70px;height:30px;text-align:center; background-color:${headerColor};color:white">${nr_attacks}</td>
3121 <td rowspan="3" class="" style="width:70px;height:30px;text-align:center; background-color:${headerColor};color:white">${flagName}</td>
3122 <td rowspan="3" class="" style="width:30px;height:30px;text-align:center; background-color:${headerColor};color:white">${LoyaltyLevel}</td>
3123 <td rowspan="3" class="" style="width:30px;height:30px;text-align:center; background-color:${headerColor};color:white">${wallLevel}</td>
3124 <td rowspan="3" class="" style="width:30px;height:30px;text-align:center; background-color:${headerColor};color:white">${farmLevel}</td>
3125 <td style="text-align:center; width:auto; background-color:${headerColor}">
3126 <p><center style="margin:10px"><font color="${titleColor}">home</font></center></p>
3127 </td>
3128 `
3129 //home troops
3130 let total_pop=0;
3131 for(let i=0;i<units.length-1;i++){
3132 let value_troop=obj_troops[units[i]]
3133 let name_troop=units[i]
3134 if(name_troop!="spy" && name_troop!="light" && name_troop!="marcher" && name_troop!="ram"&& name_troop!="catapult" && name_troop!="axe"){
3135 total_pop+=value_troop*troopsPop[name_troop]
3136 }
3137 html+=`<td style="width:30px;height:30px;text-align:center; background-color:${headerColor};color:white">`+value_troop+"</td>"
3138 }
3139 html+=`<td style="width:60px;height:30px;text-align:center; background-color:${headerColor};color:white">`+total_pop+"</td>"
3140 html+=`</tr>
3141 <tr>
3142 <td style="text-align:center; width:auto; background-color:${headerColor}">
3143 <p><center style="margin:10px"><font color="${titleColor}">coming</font></center></p>
3144 </td>`
3145 //coming troops
3146 total_pop=0;
3147 for(let i=0;i<units.length-1;i++){
3148 let value_troop_coming=obj_troops_coming[units[i]]
3149 let name_troop=units[i]
3150 if(name_troop!="spy" && name_troop!="light" && name_troop!="marcher" && name_troop!="ram"&& name_troop!="catapult" && name_troop!="axe"){
3151 total_pop+=value_troop_coming*troopsPop[name_troop]
3152 }
3153 html+=`<td style="width:30px;height:30px;text-align:center; background-color:${headerColor};color:white">`+value_troop_coming+"</td>"
3154 }
3155 html+=`<td style="width:60px;height:30px;text-align:center; background-color:${headerColor};color:white">`+total_pop+"</td>"
3156
3157 html+=`</tr>
3158 <tr>
3159 <td style="text-align:center; width:auto; background-color:${headerColor}">
3160 <p><center style="margin:10px"><font color="${titleColor}">total </font></center></p>
3161 </td>`
3162 //total troops
3163 total_pop=0;
3164 for(let i=0;i<units.length-1;i++){
3165 let value_troop=obj_troops[units[i]]+obj_troops_coming[units[i]]
3166 let name_troop=units[i]
3167 if(name_troop!="spy" && name_troop!="light" && name_troop!="marcher" && name_troop!="ram"&& name_troop!="catapult" && name_troop!="axe"){
3168 total_pop+=value_troop*troopsPop[name_troop]
3169 }
3170 html+=`<td style="width:30px;height:30px;text-align:center; background-color:${headerColor};color:white">`+value_troop+"</td>"
3171 }
3172 html+=`<td style="width:60px;height:30px;text-align:center; background-color:${headerColor};color:white">`+total_pop+"</td>"
3173
3174 html+=`</tr></table></div>`
3175
3176 button.outerHTML=html
3177
3178
3179 let time_stop=new Date().getTime()
3180 console.log("load troops: "+(time_stop-time_start))
3181 $(".load_troops").attr("disabled", false)
3182
3183
3184
3185
3186
3187
3188 })
3189
3190
3191 })
3192
3193
3194 })
3195}
3196eventGetTroops();