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