TheTintin

Fast Garden Plus - Fix Team

Sep 27th, 2016
179
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name          [Leek Wars] Fast Garden Plus
  3. // @namespace       https://github.com/AlucardDH/leekwars
  4. // @version       0.12.3
  5. // @description   Permet de lancer plus rapidement ses combats
  6. // @author        jojo123 & AlucardDH
  7. // @namespace       https://github.com/AlucardDH/leekwars
  8. // @namespace       https://github.com/AlucardDH/leekwars/raw/master/leekwars_v2_garden_plus.user.js
  9. // @namespace       https://github.com/AlucardDH/leekwars/raw/master/leekwars_v2_garden_plus.user.js
  10. // @match           *://*.leekwars.com/*
  11. // @grant         GM_addStyle
  12. // @grant         GM_getValue
  13. // @grant         GM_setValue
  14. // @grant         GM_deleteValue
  15. // @grant         GM_listValues
  16. // ==/UserScript==
  17.  
  18. var GM_STORAGE = "leekwars.fights";
  19. function getFights() {
  20.     var saved = GM_getValue(GM_STORAGE);
  21.     if(saved) {
  22.         return JSON.parse(saved);
  23.     } else {
  24.         return {};
  25.     }
  26. }
  27.  
  28. var FIGHTS;
  29.  
  30. var LW_RED = "#ffb3ae";
  31. var LW_GREEN = "#b8ffb3";
  32. var LW_GREY = "#dcdcdc";
  33.  
  34. function rgbToHex(rgb) {
  35.     return "#" + ((1 << 24) + (rgb.r << 16) + (rgb.g << 8) + rgb.b).toString(16).slice(1);
  36. }
  37.  
  38. function hexToRgb(hex) {
  39.     return {
  40.         r: parseInt(hex.substring(1,3), 16),
  41.         g: parseInt(hex.substring(3,5), 16),
  42.         b: parseInt(hex.substring(5,7), 16)
  43.     };
  44. }
  45.  
  46. function averageColor(colorsMap) {
  47.     var resultRgb = {r:0,g:0,b:0};
  48.     var totalCount = 0;
  49.     $.each(colorsMap,function(hex,count) {
  50.         totalCount += count;
  51.         var rgb = hexToRgb(hex);
  52.      //   console.log(hex+" > ");
  53.      //   console.log(rgb);
  54.         resultRgb.r += rgb.r*count;
  55.         resultRgb.g += rgb.g*count;
  56.         resultRgb.b += rgb.b*count;
  57.     });
  58.     if(totalCount==0) {
  59.         return "#dcdcdc";
  60.     }
  61.    
  62.     resultRgb.r = Math.floor(resultRgb.r/totalCount);
  63.     resultRgb.g = Math.floor(resultRgb.g/totalCount);
  64.     resultRgb.b = Math.floor(resultRgb.b/totalCount);
  65.  
  66.     return rgbToHex(resultRgb);
  67. }
  68.  
  69. function getWaitingFight(source,target,fightId,fightIndex) {
  70.     _.get('fight/get/'+fightId, function(data){
  71.         if (data.success && data.fight.status == 1) {
  72.             switch (data.fight.winner) {
  73.                 case 1:
  74.                     FIGHTS[source][target].win++;
  75.                     break;
  76.                 case 2:
  77.                     FIGHTS[source][target].defeat++;
  78.                     break;
  79.                 default:
  80.                     FIGHTS[source][target].draw++;
  81.             }
  82.             FIGHTS[source][target].waiting.splice(fightIndex,1);
  83.             saveFights();
  84.         } else {
  85.             setTimeout(function(){
  86.                 getWaitingFight(source,target,fightId,fightIndex);
  87.             },5000);
  88.         }
  89.     });
  90. }
  91.  
  92. function getWaitingFights() {
  93.     $.each(FIGHTS,function(source,targets) {
  94.         $.each(targets,function(target,scores) {
  95.             if(scores!=null) {
  96.                 var newWaiting = [];
  97.                 $.each(scores.waiting,function(index,waiting) {
  98.                     getWaitingFight(source,target,waiting,index);
  99.                 });
  100.             }
  101.         });
  102.     });
  103. }
  104.    
  105. function saveFights() {
  106.     GM_setValue(GM_STORAGE,JSON.stringify(FIGHTS));
  107. }
  108.  
  109. function addFight(type,params,fightId) {
  110.     var source = null;
  111.     if(type=="solo") {
  112.         source = "solo_"+params.leek_id;
  113.     } else if(type=="team") {
  114.         source = "team_"+params.composition_id;
  115.     } else if(type=="farmer") {
  116.         source = "farmer_"+LW.farmer.id;
  117.     }
  118.     var target = type+"_"+params.target_id;
  119.    
  120.     var sourceFights = FIGHTS[source];
  121.     if(!sourceFights) {
  122.         FIGHTS[source] = {};
  123.         sourceFights = FIGHTS[source];
  124.     }
  125.     var targetResults = sourceFights[target];
  126.     if(!targetResults) {
  127.         FIGHTS[source][target] = {win:0,defeat:0,draw:0,waiting:[]};
  128.     }
  129.     FIGHTS[source][target].waiting.push(fightId);
  130.    
  131.     saveFights();
  132.     getWaitingFight(source,target,fightId,FIGHTS[source][target].waiting.length-1);
  133. }
  134.  
  135. function getScores(source,target) {
  136.     return FIGHTS[source] && FIGHTS[source][target] ? FIGHTS[source][target] : null;
  137. }
  138.  
  139. function refreshScores() {
  140.     //console.log("Current stats :");
  141.     //console.log(FIGHTS);
  142.    
  143.     // solo
  144.     var leeksEnemies = $("div.enemies");
  145.     $.each(leeksEnemies,function(index,leekEnemies) {
  146.         leekEnemies = $(leekEnemies);
  147.         var source = "solo_"+leekEnemies.attr("ofleek");
  148.     //  console.log("searching source : "+source);
  149.         $.each(leekEnemies.children(),function(index2,enemy){
  150.             enemy = $(enemy);
  151.             var target = "solo_"+enemy.attr("leek");
  152.         //  console.log("searching target : "+target);
  153.             var scores = getScores(source,target);
  154.             if(scores) {
  155.                 //console.log("Found ! "+source+" > "+target+" : "+scores);
  156.                 var span = enemy.find("span.scores");
  157.                 if(span.length==0) {
  158.                     span = $('<span class="scores" style="font-size:75%"></span>');
  159.                     enemy.append("<br/>");
  160.                     enemy.append(span);
  161.                 }
  162.                 span.html('<span style="color:green">Win:'+scores.win+'</span> <span style="color:grey">Draw:'+scores.draw+'</span> <span style="color:red">Defeat:'+scores.defeat+'</span>');
  163.                
  164.                 var colors = {"#b8ffb3":scores.win,"#dcdcdc":scores.draw,"#ffb3ae":scores.defeat};
  165.                 enemy.css("background",averageColor(colors));
  166.             }
  167.         });
  168.     });
  169.    
  170.     leeksEnemies = $("div.enemy.farmer");
  171.     var source = "farmer_"+LW.farmer.id;
  172.     $.each(leeksEnemies,function(index,enemy){
  173.         enemy = $(enemy);
  174.         var target = "farmer_"+enemy.attr("id");
  175.         //console.log("searching "+source+" > "+target);
  176.         var scores = getScores(source,target);
  177.         if(scores) {
  178.             //console.log("Found ! "+source+" > "+target+" : "+scores);
  179.             var span = enemy.find("span.scores");
  180.             if(span.length==0) {
  181.                 span = $('<span class="scores" style="font-size:75%"></span>');
  182.                 enemy.append("<br/>");
  183.                 enemy.append(span);
  184.             }
  185.             span.html('<span style="color:green">Win:'+scores.win+'</span> <span style="color:grey">Draw:'+scores.draw+'</span> <span style="color:red">Defeat:'+scores.defeat+'</span>');
  186.            
  187.             var colors = {"#b8ffb3":scores.win,"#dcdcdc":scores.draw,"#ffb3ae":scores.defeat};
  188.             enemy.css("background",averageColor(colors));
  189.         }
  190.     });
  191.    
  192.     leeksEnemies = $("div.enemies-compos");
  193.     $.each(leeksEnemies,function(index,leekEnemies) {
  194.         leekEnemies = $(leekEnemies);
  195.         var source = "team_"+leekEnemies.attr("compo");
  196.     //  console.log("searching source : "+source);
  197.         $.each(leekEnemies.children(),function(index2,enemy){
  198.             enemy = $(enemy);
  199.             var target = "team_"+enemy.attr("id");
  200.         //  console.log("searching target : "+target);
  201.             var scores = getScores(source,target);
  202.             if(scores) {
  203.                 //console.log("Found ! "+source+" > "+target+" : "+scores);
  204.                 var span = enemy.find("span.scores");
  205.                 if(span.length==0) {
  206.                     span = $('<span class="scores" style="font-size:75%"></span>');
  207.                     enemy.append("<br/>");
  208.                     enemy.append(span);
  209.                 }
  210.                 span.html('<span style="color:green">Win:'+scores.win+'</span> <span style="color:grey">Draw:'+scores.draw+'</span> <span style="color:red">Defeat:'+scores.defeat+'</span>');
  211.                
  212.                 var colors = {"#b8ffb3":scores.win,"#dcdcdc":scores.draw,"#ffb3ae":scores.defeat};
  213.                 enemy.css("background",averageColor(colors));
  214.             }
  215.         });
  216.     });
  217. }
  218.  
  219.  
  220. (function()
  221. {
  222.  
  223.     FIGHTS = getFights();
  224.     getWaitingFights();
  225.    
  226.     setInterval(refreshScores,1000);
  227.    
  228.     var loading = false;
  229.  
  230.     var request_counter = 0;
  231.  
  232.     var scrollTop_value = $(window).scrollTop();
  233.  
  234.     // Click d'un adversaire
  235.     $('body').on('mouseup', '#garden-solo .opponents .leek', function()
  236.     {        
  237.         $(this).unbind("click");
  238.     });
  239.     $('body').on('click', '#garden-solo .opponents .leek', function(e)
  240.     {
  241.         e.stopPropagation();
  242.         submitFight("solo", {
  243.             leek_id: localStorage["garden/leek"],
  244.             target_id: $(this).attr('leek')
  245.         });
  246.     });
  247.    
  248.     // Click d'un farmer
  249.     $('body').on('mouseup', '#garden-farmer .opponents .farmer', function()
  250.     {        
  251.         $(this).unbind("click");
  252.     });
  253.     $('body').on('click', '#garden-farmer .opponents .farmer', function(e)
  254.     {
  255.         e.stopPropagation();
  256.         submitFight("farmer", {
  257.             target_id: $(this).attr('id')
  258.         });
  259.     });
  260.  
  261.     // Click d'une compo adverse
  262.     $('body').on('mouseup', '#garden-team .opponents .compo', function()
  263.     {
  264.         $(this).unbind("click");
  265.     });
  266.     $('body').on('click', '#garden-team .opponents .compo', function(e)
  267.     {
  268.         e.stopPropagation();
  269.         submitFight("team", {
  270.             composition_id: localStorage["garden/compo"],
  271.             target_id: $(this).attr('compo')
  272.         });
  273.     });
  274.  
  275.     // Changement de poireau
  276.     $('body').on('click', '#garden-solo .myleek', function()
  277.     {
  278.         var myleek_id = $(this).attr('leek');
  279.         $('#garden-solo .fight-history').hide();
  280.         $('#garden-solo .fight-history[element_id='+myleek_id+']').show();
  281.     });
  282.  
  283.     // Changement de compo
  284.     $('body').on('click', '#garden-team .myCompo', function()
  285.     {
  286.         var myCompo_id = $(this).attr('id');
  287.         $('#garden-team .fight-history').hide();
  288.         $('#garden-team .fight-history[element_id='+myCompo_id+']').show();
  289.     });
  290.  
  291.     // Lancement du combat
  292.     function submitFight(type, params)
  293.     {
  294.         if (!loading)
  295.         {
  296.             loading = true;
  297.  
  298.             _.post('garden/start-'+type+'-fight', params, function(data)
  299.             {
  300.                 if (data.success)
  301.                 {
  302.                     var fight_id = data.fight;
  303.                     addFight(type, params, fight_id);
  304.                     addHistory(type, params, fight_id);
  305.                    
  306.                 }
  307.                 refreshInterface();
  308.             });
  309.         }
  310.     }
  311.  
  312.     // Affichage de l'historique des combats
  313.     function addHistory(type, params, fight_id)
  314.     {
  315.  
  316.         if (type == "solo")
  317.         {
  318.             var myleek_id = $('#garden-solo .myleek.selected').attr('leek');
  319.             var myleek_name = $('#garden-solo .myleek.selected').attr('name');
  320.  
  321.             var enemy_name = $('#garden-solo .leek[leek='+params.target_id+']').html().split('<br>')[0].split('</svg></div>')[1].replace(/\s/g,"");
  322.  
  323.             if (!$('#garden-solo .fight-history[element_id='+myleek_id+']').length)
  324.                 $('#garden-solo').append('<div class="fight-history" type="solo" element_id="'+myleek_id+'"></div>');
  325.             $('#garden-solo .fight-history[element_id='+myleek_id+']').append('<div class="fight-wrapper" fight="'+fight_id+'"><div class="fight generating"><div class="fighters"><a href="/leek/'+myleek_id+'"><div class="fighter">'+myleek_name+'</div></a><div class="center"><a href="/fight/'+fight_id+'"><img src="http://leekwars.com/static/image/icon/garden.png"></a></div><a href="/leek/'+params.target_id+'"><div class="fighter">'+enemy_name+'</div></a></div></div></div>');
  326.         }
  327.  
  328.         if (type == "farmer")
  329.         {
  330.             var enemy_name = $('#garden-farmer .farmer[id='+params.target_id+']').html().split('<br>')[1].replace(/\s/g,"");
  331.  
  332.             if (!$('#garden-farmer .fight-history').length)
  333.                 $('#garden-farmer').append('<div class="fight-history" type="farmer" element_id="0"></div>');
  334.             $('#garden-farmer .fight-history').append('<div class="fight-wrapper" fight="'+fight_id+'"><div class="fight generating"><div class="fighters"><a href="/farmer/'+LW.farmer.id+'"><div class="fighter">'+LW.farmer.name+'</div></a><div class="center"><a href="/fight/'+fight_id+'"><img src="http://leekwars.com/static/image/icon/garden.png"></a></div><a href="/farmer/'+params.target_id+'"><div class="fighter">'+enemy_name+'</div></a></div></div></div>');
  335.         }
  336.  
  337.         if (type == "team")
  338.         {
  339.             var myCompo_id = $('#my-compos .compo.selected').attr('compo');
  340.             var myCompo_name = $('#my-compos .compo.selected').attr('name');
  341.             var enemy_name = $('#garden-team .compo[compo='+params.target_id+']').attr('name');
  342.  
  343.             if (!$('#garden-team .fight-history[element_id='+myCompo_id+']').length)
  344.                 $('#garden-team').append('<div class="fight-history" type="team" element_id="'+myCompo_id+'"></div>');
  345.             $('#garden-team .fight-history[element_id='+myCompo_id+']').append('<div class="fight-wrapper" fight="'+fight_id+'"><div class="fight generating"><div class="fighters"><div class="fighter">'+myCompo_name+'</div><div class="center"><a href="/fight/'+fight_id+'"><img src="http://leekwars.com/static/image/icon/garden.png"></a></div><div class="fighter">'+enemy_name+'</div></div></div></div>');
  346.         }
  347.  
  348.     }
  349.  
  350.     // Récupération du résultat des combats
  351.     function refreshResults()
  352.     {
  353.         if (!loading)
  354.         {
  355.             var waitlist = [];
  356.  
  357.             $('#garden-page .fight-wrapper').each(function()
  358.             {
  359.                 if ($(this).children('.generating').length)
  360.                     waitlist.push($(this).attr('fight'));
  361.             });
  362.  
  363.             for (var i = 0; i < waitlist.length; i++)
  364.             {
  365.                 if (request_counter < 10)
  366.                 {
  367.                     request_counter++;
  368.                     _.get('fight/get/' + waitlist[i], function(data)
  369.                     {
  370.                         request_counter--;
  371.                         if (!loading && data.success && data.fight.status == 1)
  372.                         {
  373.                             var fight = $('#garden-page .fight-wrapper[fight='+data.fight.id+'] .fight');
  374.                             fight.removeClass('generating');
  375.                             switch (data.fight.winner)
  376.                             {
  377.                                 case 1:
  378.                                     fight.addClass('win');
  379.                                     break;
  380.                                 case 2:
  381.                                     fight.addClass('defeat');
  382.                                     break;
  383.                                 default:
  384.                                     fight.addClass('draw');
  385.                             }
  386.                         }
  387.                     });
  388.                 }
  389.             }
  390.         }
  391.     }
  392.  
  393.     setInterval(refreshResults, 2500);
  394.  
  395.     var fight_history = [];
  396.  
  397.     function refreshInterface()
  398.     {
  399.         scrollTop_value = $(window).scrollTop();
  400.  
  401.         localStorage["garden/leek"] = $('#garden-solo .myleek.selected').attr('leek');
  402.         localStorage["garden/compo"] = $('#my-compos .compo.selected').attr('compo');
  403.  
  404.         fight_history = [];
  405.         $('#garden-page .fight-history').each(function()
  406.         {
  407.             fight_history.push({
  408.                 type : $(this).attr('type'),
  409.                 id : $(this).attr('element_id'),
  410.                 content : $(this).html()
  411.             });
  412.         });
  413.  
  414.         LW.loadPage('garden');
  415.  
  416.     }
  417.  
  418.     LW.on('pageload', function()
  419.     {
  420.         if (LW.currentPage == "garden")
  421.         {
  422.             for (var i = 0; i < fight_history.length; i++)
  423.             {
  424.                 var history = fight_history[i];
  425.                 $('#garden-'+history.type).append('<div class="fight-history" type="'+history.type+'" element_id="'+history.id+'"></div>');
  426.                
  427.                 if (!(history.type == "solo" && history.id == localStorage["garden/leek"]) && !(history.type == "farmer") && !(history.type == "team" && history.id == localStorage["garden/compo"]))
  428.                     $('#garden-'+history.type+' .fight-history[element_id='+history.id+']').hide();
  429.                 $('#garden-'+history.type+' .fight-history[element_id='+history.id+']').html(history.content);
  430.             }
  431.  
  432.             var intervalRefresh = setInterval(function()
  433.             {
  434.                 $(window).scrollTop(scrollTop_value);
  435.                 if ($(window).scrollTop() == scrollTop_value)
  436.                     clearInterval(intervalRefresh);
  437.             }, 1);
  438.  
  439.             setTimeout(function()
  440.             {
  441.                 clearInterval(intervalRefresh);
  442.             }, 100);
  443.  
  444.             loading = false;
  445.         }
  446.     });
  447.  
  448. })();
Add Comment
Please, Sign In to add comment