Tikabum

Tribe troop counter

Aug 17th, 2020
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.49 KB | None | 0 0
  1. function openUI(){
  2. html='<head></head><body><h1>Tribe troop counter</h1><form><fieldset><legend>Settings</legend><p><input type="radio" name="mode" id="of" value="Read troops of the village" onchange="setMode(\'members_troops\')">Read troops of the village</input></p><p><input type="radio" name="mode" id="in" value="Read defenses in the village" onchange="setMode(\'members_defense\')">Read defenses in the village</input></p></fieldset><fieldset><legend>Filters</legend><select id="variable"><option value="x">x</option><option value="y">y</option>'+createUnitOption()+'</select><select id="kind"><option value=">">\></option><option value="<">\<</option></select><input type="text" id="value"></input><input type="button" class="btn evt-confirm-btn btn-confirm-yes" onclick="addFilter()" value="Save filter"></input><p><table><tr><th>Variable filtered</th><th>Operatore</th><th>Value</th><th></th></tr>'+createFilterTable()+'</form></p></fieldset><div><p><input type="button" class="btn evt-confirm-btn btn-confirm-yes" id="run" onclick="readData()" value="Read data"></input></p></div></body>';
  3. Dialog.show("Troop counter",html);
  4. if(localStorage.troopCounterMode){
  5. if(localStorage.troopCounterMode == "members_troops"){
  6. document.getElementById("of").checked=true;
  7. }
  8. else{
  9. document.getElementById("in").checked=true;
  10. }
  11. }
  12. else{
  13. document.getElementById("of").checked=true;
  14. }
  15. }
  16.  
  17. function setMode(a){
  18. localStorage.troopCounterMode=a;
  19. }
  20.  
  21. function download(filename, text) {
  22. var element = document.createElement('a');
  23. element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
  24. element.setAttribute('download', filename);
  25.  
  26. element.style.display = 'none';
  27. document.body.appendChild(element);
  28.  
  29. element.click();
  30.  
  31. document.body.removeChild(element);
  32. }
  33.  
  34. function downloadInfo(url){
  35. var request = new XMLHttpRequest();
  36. request.open('GET', url, false);
  37. request.send(null);
  38. return request.response;
  39. }
  40.  
  41. function getPlayerDict(){
  42. playerDict={};
  43. now=new Date();
  44. server=window.location.host;
  45. if(localStorage.playerDictFake){
  46. if(localStorage.playerDictFake.split(":::")[0] == server){
  47. savedDate=new Date(localStorage.playerDictFake.split(":::")[1])
  48. if(now - savedDate < 1000*60*60){
  49. playerDict=JSON.parse(localStorage.playerDictFake.split(":::")[2]);
  50. return playerDict;
  51. }
  52. }
  53. }
  54. playerUrl="https://"+window.location.host+"/map/player.txt";
  55. playerList=downloadInfo(playerUrl).split("\n");
  56. for(i=0;i<playerList.length;i++){
  57. if (playerList[i] != ""){
  58. row=playerList[i].split(",");
  59. playerDict[row[0]]=row[1].replace(/\+/g, " ");
  60. }
  61. }
  62. localStorage.playerDictFake=server+":::"+now+":::"+JSON.stringify(playerDict);
  63. return playerDict;
  64.  
  65. }
  66.  
  67. function addFilter(){
  68. filters={};
  69. if (localStorage.troopCounterFilter){
  70. filters=JSON.parse(localStorage.troopCounterFilter);
  71. }
  72. if(filters[document.getElementById("variable").value]){
  73. if(isNaN(document.getElementById("value").value)){
  74. UI.ErrorMessage("Insert a valid value",3000);
  75. }
  76. else{
  77. filters[document.getElementById("variable").value].push([document.getElementById("kind").value,document.getElementById("value").value]);
  78. }
  79. }
  80. else{
  81. if(isNaN(document.getElementById("value").value)){
  82. UI.ErrorMessage("Insert a valid value",3000);
  83. }
  84. else{
  85. filters[document.getElementById("variable").value]=[[document.getElementById("kind").value,document.getElementById("value").value]];
  86. }
  87. }
  88. localStorage.troopCounterFilter=JSON.stringify(filters);
  89. openUI();
  90. }
  91.  
  92. function createUnitOption(){
  93. unitsList=game_data.units;
  94. menu="";
  95. for(i=0;i<unitsList.length;i++){
  96. menu=menu+'<option value="'+unitsList[i]+'">'+unitsList[i]+'</option>';
  97. }
  98. return menu;
  99. }
  100.  
  101. function createFilterTable(){
  102. filters={};
  103. if (localStorage.troopCounterFilter){
  104. filters=JSON.parse(localStorage.troopCounterFilter);
  105. }
  106. rows=""
  107. for (filter in filters){
  108. for(i=0;i<filters[filter].length;i++){
  109. rows=rows+'<tr><td>'+filter+'</td><td>'+filters[filter][i][0]+'</td><td>'+filters[filter][i][1]+'</td><td><input type="image" src="https://dsit.innogamescdn.com/asset/cbd6f76/graphic/delete.png" onclick="deleteFilter(\''+filter+'\',\''+i.toString()+'\')"></input></td></tr>';
  110. }
  111. }
  112. return rows;
  113. }
  114.  
  115. function deleteFilter(filter,i){
  116. if(localStorage.troopCounterFilter){
  117. filtres=JSON.parse(localStorage.troopCounterFilter);
  118. if(filter in filtres){
  119. if(parseInt(i)<filtres[filter].length){
  120. filtres[filter].splice(parseInt(i),1);
  121. }
  122. }
  123. }
  124. localStorage.troopCounterFilter=JSON.stringify(filtres);
  125. openUI();
  126. }
  127.  
  128. function readData(){
  129. if (game_data.mode=="members"){
  130. var html= '<label> Reading... </label><progress id="bar" max="1" value="0"> </progress>';
  131. Dialog.show("Progress bar", html);
  132. filtres={};
  133. if (localStorage.troopCounterFilter){
  134. filtres=JSON.parse(localStorage.troopCounterFilter);
  135. }
  136. table=document.getElementsByClassName("vis");
  137. nMembers=table[2].rows.length;
  138. id=[];
  139. for(i=1;i<nMembers-1;i++){
  140. id.push(table[2].rows[i].innerHTML.split("[")[1].split("]")[0]);
  141. }
  142. mode=localStorage.troopCounterMode;
  143. data="Coords,Player,";
  144. unitsList=game_data.units;
  145. for(k=0;k<unitsList.length;k++){
  146. data=data+unitsList[k]+",";
  147. }
  148. players=getPlayerDict();
  149. data=data+"\n";
  150. i=0;
  151. (function loop(){
  152. page=$.ajax({url: "https://"+window.location.host+"/game.php?screen=ally&mode="+mode+"&player_id="+id[i],async: false, function(result){return result.responseText;}});
  153. document.getElementById("bar").value=(i/id.length);
  154. if(page.responseText.split("vis w100").length == 1){}
  155. else{
  156. rows=page.responseText.split("vis w100")[1].split("<tr>");
  157. step=1;
  158. if(mode == "members_defense"){
  159. step=2;
  160. }
  161. for(j=2;j+step<rows.length;j=j+step){
  162. villageData={};
  163. villageData["x"]=rows[j].match(/\d\d\d\|\d\d\d/g)[0].split("|")[0];
  164. villageData["y"]=rows[j].match(/\d\d\d\|\d\d\d/g)[0].split("|")[1];
  165. units=rows[j].split(/<td class="">|<td class="hidden">/g);
  166. for(k=1;k<units.length;k++){
  167. villageData[unitsList[k-1]]=units[k].split("</td>")[0].replace(/ /g,"").replace(/\n/g,"").replace(/<spanclass="grey">\.<\/span>/g,"");
  168. }
  169. filtered=true; //filtered==true ok, ==false hide
  170. for(key in filtres){
  171. for(k=0;k<filtres[key].length;k++){
  172. if(filtres[key][k][0] == ">"){
  173. if(parseInt(villageData[key])<parseInt(filtres[key][k][1])){
  174. filtered=false;
  175. }
  176. }
  177. else if(filtres[key][k][0] == "<"){
  178. if(parseInt(villageData[key])>parseInt(filtres[key][k][1])){
  179. filtered=false;
  180. }
  181. }
  182. }
  183. }
  184. if(filtered){
  185. data=data+villageData["x"]+"|"+villageData["y"]+",";
  186. data=data+players[id[i]]+",";
  187. for(k=0;k<unitsList.length;k++){
  188. data=data+villageData[unitsList[k]]+",";
  189. }
  190. data=data+"\n";
  191. }
  192. }
  193. }
  194. i++;
  195. if(i<id.length){
  196. setTimeout(loop, 200);
  197. }
  198. else{
  199. showData(data, mode);
  200. }
  201. })();
  202. }
  203. }
  204.  
  205. function showData(data){
  206. html= '<head></head><body><p><h2>Tribe data</h2>Mode selected: '+mode+'</p><p><textarea readonly=true>'+data+'</textarea></p><p><input type="button" class="btn evt-confirm-btn btn-confirm-yes" id="download" onclick="download(\'tribe info\',data)" value="Download as csv"></input><input type="button" class="btn evt-confirm-btn btn-confirm-no" onclick="openUI()" value="Back to main menu"></input></p></body>';
  207. Dialog.show("Tribe data", html);
  208. }
  209.  
  210.  
  211. openUI();
Add Comment
Please, Sign In to add comment