Advanced Battle [GW]

Расширенный список врагов. Сортировка противников по дальности.

// ==UserScript==
// @name             Advanced Battle [GW]
// @namespace        http://worm.vline.ru/gw/
// @description      Расширенный список врагов. Сортировка противников по дальности.
// @include          http://www.ganjawars.ru/b0/b.php*
// @version          1.01
// @author           W_or_M
// ==/UserScript==

(function() {

// настройки. 1 - вкл. 0 - выкл.
    
var sortEnemys  = 1; // сортировка, если ненужна ставьте 0
var showHp      = 1; // показ хп
var showVisible = 1; // показ видимости
var showWeapon  = 1; // показ оружия
var showPower   = 0; // показ мощности

    
// сортировка
function cmp(a, b) {
    
    a = a.dist;
    b = b.dist;
    
    if (a < b) return -1;
    if (a > b) return 1;
    
    return 0;
    
}

var root = typeof unsafeWindow != 'undefined' ? unsafeWindow : window;

if (root.location.href.indexOf('http://www.ganjawars.ru/b0/b.php') >= 0) {
    
    // ищем список врагов
    var o = root.document.getElementsByTagName('select');
    for (var i = 0, l = o.length; i < l; i++) {
        
        if (o[i].name == 'enemy') {
            
            // список
            var select = o[i];
            
            break;
            
        }
        
    }
    
    if (typeof select != 'undefined') {
        
        // тут храним список врагов
        var enemys = [];
        
        // пробегаем по списку и составляем массив врагов
        for (i = 0; i < select.childNodes.length; i++) {
            
            // ыде персонажа
            var pers_id = select.childNodes[i].value;
            
            // перс
            var pers = /(\d+)\. (.*)\[(\d+)\] - (\d+)/.exec(select.childNodes[i].innerHTML);
            var temp = {};
            
            if (pers != null) {
                
                temp.n = pers[1];
                temp.nick  = pers[2];
                temp.level = parseInt(pers[3]);
                temp.dist  = parseInt(pers[4]);
                
                // id
                temp.id = select.childNodes[i].value;
                // цвет
                temp.color = select.childNodes[i].style.backgroundColor;
                
                // пробегаем по списку персов
                var a = root.document.getElementsByTagName('a');
                for (var k = 0; k < a.length; k++ ) {
                    
                    // нашли перса
                    if (a[k].id == ('userheader'+ pers_id)) {
                        
                        var node = a[k].nextSibling.nextSibling;
                        
                        // колво хп
                        temp.hp = node.firstChild.nodeValue.replace(/\-\s+/, '; ');
                        
                        // видимость
                        temp.visible = node.childNodes[11].nodeValue.replace(/\-\s+/, '; ');
                        
                        // мощность
                        temp.power = node.childNodes[5].nodeValue.replace(/\-\s+/, '; ');
                        
                        // оружие
                        temp.weapon = '; '+ node.childNodes[13].firstChild.innerHTML;
                        
                        enemys[i] = temp;
                        
                    }
                    
                }
                
            }
            
        }
        
        // список есть
        if (enemys.length) {
            
            // очищаем список
            for (i = 0, l = select.childNodes.length; i < l; i++) {
                
                select.removeChild(select.firstChild);
                
            }
            
            // сортируем врагов по дальности
            if (sortEnemys != 0) {
                
                enemys.sort(cmp);
                
            }
            
            // составляем новый список
            for (i in enemys) {
                
                var option = root.document.createElement('option');
                option.value = enemys[i].id;
                option.style.backgroundColor = enemys[i].color;
                //option.setAttribute('style', 'background-color: '+ enemys[i].color);
                option.innerHTML = enemys[i].n +'. '+ enemys[i].nick + ' ['+ enemys[i].level +']; расстояние: '+ enemys[i].dist + (showHp != 0 ?  enemys[i].hp : '') + (showPower != 0 ? enemys[i].power : '') + ( showVisible != 0 ? enemys[i].visible : '') + ( showWeapon != 0 ? enemys[i].weapon : '');
                select.appendChild(option);
                
            }
            
        }
        
        
    }
    
}

})();