Menel Szukacz

By lobo16 Last update Mar 23, 2010 — Installed 1,847 times.

There are 2 previous versions of this script.

// ==UserScript==
// @name           Menel Szukacz
// @version        0.1.5b
// @namespace      http://userscripts.org/users/101110
// @description    Wyszukuje przeciwników do zaatakowania wg podanych kryteriów
// @author         lobo16
// @copyright      2010, lobo16 
// @include        http://*menelgame.pl/fight/*
// ==/UserScript==

//#Region Global Variables
var link = 'http://www.menelgame.pl';
var siglink = 'http://img.menelgame.pl';
//#EndRegion Global Variables

//#Region Test Functions
/** Funkcja wykonuje test mający na celu określenie czy z podanej zmiennej 
  * można bezpiecznie korzystać.
  * @param variable - zmienna do przetestowania
  * @returns 0 - zmienna niezdefiniowana bądź nie zainicjowana
  * @returns 1 - zmienna zainicjowana
  */
function varTest(variable){
  if ((variable == null)||(variable == undefined)) return 0;

  return 1;
}

function testInputs(){
  var minPoints = Number(document.getElementById('min_points').value);
  var maxPoints = Number(document.getElementById('max_points').value);
  var minCash = Number(document.getElementById('min_cash').value);
  var maxSites = Number(document.getElementById('max_sites').value);
  var alertMsg ='Błędne dane w:';
  var showAlert =false;
  
  if((isNaN(minPoints))||(minPoints < 0)){
    alertMsg += '\n- minimalnej ilości punktów';
    
    showAlert = true;
  }

  if((isNaN(maxPoints))||(maxPoints < 0)){
    alertMsg += '\n- maksymalnej ilości punktów';
    
    showAlert = true;
  }

  if((isNaN(minCash))||(minCash < 0)){
    alertMsg += '\n- minimalnej ilości pieniędzy';
    
    showAlert = true;
  }
  
  if((isNaN(maxSites))||(maxSites < 1)){
    alertMsg += '\n- ilości stron';
    
    showAlert = true;
  }

  if(showAlert){
    alert(alertMsg);
    showAlert = false;

    return 0;
  }

  if(minPoints > maxPoints){
    alert('Wartość minimalna punktów większa od maksymalnej.');
    
    return 0;
  }

  GM_setValue('minPoints', minPoints);
  GM_setValue('maxPoints', maxPoints);
  GM_setValue('minCash', minCash);
  GM_setValue('maxSites', maxSites);
  
  return 1;
}
//#EndRegion Test Functions

//#Region Opponent Data
function readUserInfo(xml){
  var userInfo = xml.getElementsByTagName('user')[0];
  var gangInfo = xml.getElementsByTagName('gang')[0];
  var user = {}; //new Object();
  var cash;
  
  user.id = userInfo.getElementsByTagName('id')[0].textContent;
  user.name = userInfo.getElementsByTagName('name')[0].textContent;
  user.gangId = gangInfo.getElementsByTagName('id')[0].textContent;
  user.gangName = gangInfo.getElementsByTagName('name')[0].textContent;
  user.position = userInfo.getElementsByTagName('position')[0].textContent;
  user.points = userInfo.getElementsByTagName('points')[0].textContent;
 
  try{
    user.cash = userInfo.getElementsByTagName('cash')[0].textContent;
  }catch(e){
    user.cash = '-';
  }

  if(!isNaN(Number(user.cash))){
    user.cash = Number(user.cash)/100;
  }
  
  return user;
}

function getOpponentInfo(id, minCash, attempt){
  GM_xmlhttpRequest({
    method: 'GET',
    url:    link + '/dev/api/user.' + id + '.xml',
    onload: function(response){
      if(response.responseText.search(/<\/Pennergame>/i) == -1){
        if(attempt > 5){
          return 0;
        }

        getOpponentInfo(id, minCash, attempt+1);
        
        return 0;
      }

      var opponentsTab = document.getElementById('opponentsTab').getElementsByTagName('tbody')[0];
      var parser = new DOMParser();
      var xml = parser.parseFromString(response.responseText, 'application/xml');
      var tr = document.createElement('tr');
      var user = readUserInfo(xml);
      
      if(user.cash >= minCash){
        tr.setAttribute('style', 'background-color: #444444;');

        tr.appendChild(createTableCell(user.position, 'style', 
          'font-weight: bold; color: white;'));
        tr.appendChild(createTableCell('<a href="/profil/id:' + user.id + '/" ' + 
          'style="text-decoration: none;">' + user.name + '</a>'));
        tr.appendChild(createTableCell('<a href="/profil/bande:' + user.gangId + '/" ' +
          'style="text-decoration: none;">' + user.gangName + '</a>'));
        tr.appendChild(createTableCell(user.points));
        tr.appendChild(createTableCell(user.cash.toFixed(2).replace('.', ',') + ' zł', 'style', 'text-align: right;'));
        tr.appendChild(createTableCell(' '));
        tr.appendChild(createTableCell('<a href="/messages/write/?to=' + user.id + '">' +
          '<img width="17" height="10" border="0" ' +
          'src="http://media.pennergame.de/img/overview/new_msg.gif"/></a>'));
        tr.appendChild(createTableCell('<a href="/fight/?to=' + user.name + '">' +
          '<img border="0" src="http://media.pennergame.de/img/att.gif"/></a>'));

        opponentsTab.appendChild(tr);
      }
    }
  });
}
//#EndRegion Opponent Data

//#Region Get Opponents
function getOpponentsList(index, min, max, minCash){
  GM_xmlhttpRequest({
    method: 'GET',
    url:    link + '/highscore/user/' + index + '/?max=' + max + '&min=' + min,
    onload: function(response){
      var div = document.createElement('div');
      div.innerHTML = response.responseText;
      var tabs = div.getElementsByTagName('table');
      var tab =null;
      var process = document.getElementById('process');
      var processCounter = document.getElementById('process_counter');
      var processValue =0;
      
      if(!varTest(tabs)){
        getOpponentsList(index, min, max, minCash);

        return 0;
      }

      for(i =0; i < tabs.length; i++){
        if(tabs[i].rows[0].cells[0].innerHTML.search(/ranking/i) != -1){
          tab = tabs[i];
        }
      }      

      if(!varTest(tab)) return 0;

      if(tab.rows.length - 2 < 1){
        return 0;
      }
      
      var reResp ='';
      for(i =1; i < tab.rows.length; i++){
        reResp = tab.rows[i].cells[1].innerHTML.match(/\/id:[\d]+/ig);
        
        if(reResp.length > 0){
          reResp = reResp[0].match(/[\d]+/g);
          
          getOpponentInfo(reResp[0], minCash, 0);
        }
      }
      
      processValue = parseInt(index/GM_getValue('maxSites')*100);
      process.setAttribute('style', 'width: ' + processValue + '%;');
      processCounter.innerHTML = processValue + '%';

      if(index < GM_getValue('maxSites')){
        getOpponentsList(index + 1, min, max, minCash);
      }
    }
  });
}

function searchOpponents(){
  if(!testInputs()){
    return 0;
  }

  document.getElementById('processbar_bg').removeAttribute('style');
  createOpponentsTable();

  getOpponentsList(1, GM_getValue('minPoints'), GM_getValue('maxPoints'),
    GM_getValue('minCash'));
}
//#EndRegion Get Opponents

//#Region SearchDiv
function createTableHeader(text, attrib, attribValue){
  var th = document.createElement('th');
  
  
  if(varTest(attrib)){
    if(attrib.length > 0){
      th.setAttribute(attrib, attribValue);
    }
  }
   
  th.innerHTML = text;

  return th;
}

function createTableCell(text, attrib, attribValue){
  var td = document.createElement('td');
  
  if(varTest(attrib)){
    if(attrib.length > 0){
      td.setAttribute(attrib, attribValue);
    }
  }

  td.innerHTML = text;

  return td;
}

function createOpponentsTable(){
  var opponentsTab = document.getElementById('opponentsTab');
  var tabBody = document.createElement('tbody');
  var row = document.createElement('tr');
  
  if(varTest(opponentsTab)){
    opponentsTab.parentNode.removeChild(opponentsTab);
  }

  opponentsTab = document.createElement('table'); 
  opponentsTab.setAttribute('id', 'opponentsTab');
  opponentsTab.setAttribute('border', '1');
  opponentsTab.setAttribute('style', 'margin-top: 20px;' +
    'border:1px solid #272727;' +
    'border-collapse: collapse;' +
    'table-layout: auto;' +
    'width: 740px;');

  row.setAttribute('bgColor', '#272727');

  row.appendChild(createTableHeader('Miejsce', 'width', '60'));
  row.appendChild(createTableHeader('Menel', 'width', '150'));
  row.appendChild(createTableHeader('Banda', 'width', '200'));
  row.appendChild(createTableHeader('Punkty', 'width', '85'));
  row.appendChild(createTableHeader('Pieniądze', 'width', '85'));
  row.appendChild(createTableHeader('Zwierzak', 'width', '120'));
  row.appendChild(createTableHeader('', 'width', '20'));
  row.appendChild(createTableHeader('', 'width', '20'));
  
  tabBody.appendChild(row);
  opponentsTab.appendChild(tabBody);
  document.getElementById('searchPanel').appendChild(opponentsTab);
}

function searchDiv(){
  var lsDivs = document.getElementsByClassName("listshop");
  var contentDiv =null;
  var searchPanel = document.createElement('div');

  for(i =0; i < lsDivs.length; i++){
    if(lsDivs[i].innerHTML.search(/atakuj gracza/i) != -1){
      contentDiv = lsDivs[i];
    }
  }

  if(varTest(contentDiv)){
    var processbar = document.createElement('div');
    var btnSearch = document.createElement('input');

    processbar.setAttribute('class', 'processbar_bg_ov');
    processbar.setAttribute('id', 'processbar_bg');
    processbar.setAttribute('style', 'display: none;');
    processbar.innerHTML = 
      '<div class="processbar_clean" id="process" style="width: 0%;"></div>' +
      ' Postęp: <span id="process_counter">0%</span>' +
      '</div>';

    btnSearch.type = "button";
    btnSearch.value = "Szukaj";
    btnSearch.addEventListener('click', searchOpponents, true);    

    searchPanel.setAttribute('id', 'searchPanel');
    searchPanel.setAttribute('class', 'listshop');
    searchPanel.innerHTML = 
      '       <table class="tieritemA" cellspacing="1" cellpadding="0" border="0">' +
      '         <tbody>' +
      '           <tr>' +
      '             <td colspan="2">' +
      '               <span class="tiername">Zaawansowane wyszukiwanie przeciwników | by lobo16</span>' +
      '               <hr size="1" />' +
      '             </td>' +
      '           </tr>' +
      '           <tr>' +
      '             <td style="width: 230px;">Minimalna ilość punktów przeciwnika:</td>' +
      '             <td><input id="min_points" type="text" value="' + GM_getValue('minPoints') + '" size="7" maxlength="7" style="margin: 0;" /></td>' +
      '           </tr>' +
      '           <tr>' +
      '             <td>Maksymalna ilość punktów przeciwnika:</td>' +
      '             <td><input id="max_points" type="text" value="' + GM_getValue('maxPoints') + '" size="7" maxlength="7" style="margin: 0;" /></td>' +
      '           </tr>' +
      '           <tr>' +
      '             <td>Minimalna  ilość pieniędzy przeciwnika:</td>' +
      '             <td><input id="min_cash" type="text" value="' + GM_getValue('minCash') + '" size="7" maxlength="7" style="margin: 0;" /></td>' +
      '           </tr>' +
      '            <tr>' +
      '             <td>Ilość stron do przejrzenia:</td>' +
      '             <td><input id="max_sites" type="text" value="5" maxlength="5" size="7" style="margin: 0;" /></td>' +
      '           </tr>' +
      '         </tbody>' +
      '       </table>';

    searchPanel.appendChild(btnSearch);
    searchPanel.appendChild(processbar);
    contentDiv.parentNode.insertBefore(searchPanel, contentDiv);
    contentDiv.parentNode.removeChild(contentDiv);
  }
}
//#EndRegion SearchDiv

function extendFightMenu(){
  var subMenus = document.getElementsByClassName('submenu');
  var fightMenu =null;

  for(i =0; i < subMenus.length; i++){
    if(subMenus[i].innerHTML.match(/\/fight\/overview\//ig).length > 0){
      fightMenu = subMenus[i];
    }
  }
  
  if (varTest(fightMenu)){
    var menuItem = document.createElement("li");
    menuItem.innerHTML = "<a style='height: 30px;' href='javascript:void(0);'>Zaawansowane szukanie</a>";
    menuItem.addEventListener("click", searchDiv, false);
    
    fightMenu.appendChild(menuItem);
    
    return 1;
  }
  
  return 0;
}

function getPointsRange(){
  var reRes = document.documentElement.textContent.match(/od [\d]+ do [\d]+ punkt/ig);

  if(varTest(reRes)){
    if(reRes.length > 0){
      reRes = reRes[0].match(/[\d]+/g);

      GM_setValue('minPoints', reRes[0]);
      GM_setValue('maxPoints', reRes[1]);
    }
  }
}

if(GM_getValue('minCash') == undefined){
  GM_setValue('minCash', '50000');
}

getPointsRange();
extendFightMenu();