[GW] Sind Online Statement

Сортировка бойцов синдиката в онлайне по значку, расширенная информация по каждому и сортировка основы по боевому уровню.

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name           [GW] Sind Online Statement
// @description    Сортировка бойцов синдиката в онлайне по значку, расширенная информация по каждому и сортировка основы по боевому уровню.
// @include        http://www.ganjawars.ru/syndicate.php?id=*&page=online
// @version        1.6
// @author         z0man
// @namespace https://greasyfork.org/users/18502
// ==/UserScript==

(function() {

var sound_end = 1; // номер звука после сканирования всех бойцов
var color_rent = '#B22222'; // цвет аренды
var color_imen = '#FF9900'; // цвет именных
var time_out = 3001; // интервал в мсек: "скрипты которые показывают какую-то дополнительную информацию и при этом обращаются к серверу реже раза в 3-5 секунд - разрешены."© Ilia Sprite (adm)

var Opera = navigator.appName.indexOf('pera') >= 0;
var request = new XMLHttpRequest();
var answer_page = new String();
var url_pers = '';
var weapons_table = new Array();
var weapons_str = new Array();

// сортировка
var root = typeof unsafeWindow != 'undefined' ? unsafeWindow : window;

	// ищем таблицу с онлайном
	var tmp_tr = root.document.getElementsByTagName('tr');
	
	for (i = 0; i < tmp_tr.length; i++) {
		
		// нашли
		if (/(\d+) бойцов онлайн/.test(tmp_tr[i].textContent)) {
			
			var pers_online = /(\d+)/.exec(tmp_tr[i].textContent);
			pers_online = pers_online[1];
			
			// есть бойцы?
			if (pers_online != 0) {
				
				// для %
				var time_all = pers_online * time_out;
				var percent = 0;
				var step = 100/pers_online;
				var percent_int = step;
				
				// критерий сортировки
				var sind_id = /^http:\/\/www\.ganjawars\.ru\/syndicate\.php\?id=(\d+)/.exec(location.href);
				sind_id = sind_id[1];
				var sind_pic = 'http://images.ganjawars.ru/img/synds/' + sind_id + '.gif';
				
				// добавляем 'Сортировка по значку'
				var a = root.document.getElementsByTagName('a');
				for (j = 0; j < a.length; j++) {
					
					if (a[j].textContent == 'Протокол боёв') { var log_wars = a[j] }
					
				}
				
				var sind_state = root.document.createElement('span');
				sind_state.setAttribute('id', 'button_state');
				sind_state.innerHTML = ' | <span style = "cursor: pointer;">Сортировка по значку</span>';
				log_wars.parentNode.insertBefore(sind_state, log_wars.nextSibling);
				
				// вешаем и обрабтываем клик
				root.document.getElementById('button_state').onclick = function() {
					
					// здесь удивил FF
					if (Opera) { tr_first = 1 } else { tr_first = 2 }
					if (Opera) { tr_last = tmp_tr[i].parentNode.childNodes.length } else { tr_last = tmp_tr[i].parentNode.childNodes.length - 1 }
					
					result = sort1();
					
					tmp_tr[i].parentNode.childNodes[0].innerHTML = '<td colspan="5" class="wb" align="center" bgcolor="#d0eed0"><b>' + tmp_tr[i].parentNode.childNodes[0].textContent + '</b>' + ' (' + result + ' co значком)' + '</td>';
					
					sind_state.innerHTML = ' | <span style = "cursor: pointer;">Состояние бойцов</span>';
					sind_state.onclick = function() {
						
						var title_test = title_change();
						if (title_test == undefined) { root.document.title = '0%' }
						
					}
					
				}
				
			}
			
			// нет бойцов
			break;
			
		}
		
	}
	
// состояние бойцов
function info(tr_first) {
	
	url_pers = /info\.php\?id=(\d+)/.exec(tmp_tr[i].parentNode.childNodes[tr_first].innerHTML);
	url_pers = 'http://www.ganjawars.ru/' + url_pers[0];
	
	REQ(url_pers, 'GET', null, false, function (req) { answer_page = req.responseText });
	var span = root.document.createElement('span');
	span.innerHTML = answer_page;
	
	// здоровье
	tmp = span.getElementsByTagName('td');
	for (j = 0; j < tmp.length; j++) {
		
		if (/(\d*)\s\/\s(\d*)/.test(tmp[j].textContent)) {
			
			var re = new RegExp('(\d*)\s\D\s(\d*)', 'ig');
			var res = re.exec(tmp[j].innerHTML);
			var xp = Math.round(RegExp.$1 / RegExp.$2 * 100);
			
			break;
			
		}
		
	}
	
	// боевой уровень
	tmp = span.getElementsByTagName('td');
	for (j = 0; j < tmp.length; j++) {
		
		if (/Боевой:/.test(tmp[j].textContent)) {
			
			var lvl = parseInt(tmp[j+2].textContent);
			
			break;
			
		}
		
	}
	
	// синдикатный уровень
	tmp = span.getElementsByTagName('td');
	for (j = 0; j < tmp.length; j++) {
		
		if (/Основной синдикат:/.test(tmp[j].textContent)) {
			
			var lvl_sind = /\[\s(\d+)\s\(/.exec(tmp[j].textContent);
			lvl_sind = '[' + lvl_sind[1] + ']';
			
			break;
			
		} else { lvl_sind = '' }
		
	}
	
	// район
	tmp = span.getElementsByTagName('b');
	for (j = 0; j < tmp.length; j++) {
		
		if (/Район:/.test(tmp[j].textContent)) {
			
			var sector = '<nobr><a href=' + tmp[j].nextSibling.nextSibling.href + ' style="color: #004400; text-decoration: none;" target="blank">&nbsp;'+tmp[j].nextSibling.nextSibling.textContent+'&nbsp;</a></nobr>';
			
			break;
			
		}
		
	}
	
	// вооружение
	tmp = span.getElementsByTagName('td');
	for (j = 0; j < tmp.length; j++) {
		
		if (/Вооружение/.test(tmp[j].textContent)) {
		
			weapons_table[tr_first] = root.document.createElement('div');
			weapons_table[tr_first].innerHTML = tmp[j+1].innerHTML;
			weapons_table[tr_first].innerHTML = '<table cellspacing="3" cellpadding="5" border="1"><tr><td>' + weapons_table[tr_first].innerHTML + '</td></tr></table>';
			weapons_table[tr_first].style.visibility = 'hidden';
			weapons_table[tr_first].style.top = '0';
			weapons_table[tr_first].style.left = '0';
			weapons_table[tr_first].style.position = 'absolute';
			weapons_table[tr_first].style.zIndex = 1001;
			weapons_table[tr_first].style.padding = '0px';
			weapons_table[tr_first].style.backgroundColor = '#f5fff5';
			
			// совсем голые лесом
			if (weapons_table[tr_first].textContent != 0) {
			
				root.document.body.appendChild(weapons_table[tr_first]);
				tooltip(tr_first);
				
			}
			
			break;
			
		}
		
	}
	
	// именное
	var weapons_l_r = '';
	
	if (Opera) { weapons_str = weapons_table[tr_first].innerHTML.split('<BR>') } else { weapons_str = weapons_table[tr_first].innerHTML.split('<br>') }
	for (q = 0; q < weapons_str.length; q++) {
		
		if (weapons_str[q].indexOf('рука') >= 0) {
			
			var re = new RegExp('<b>(.*)<\/b>', 'i');
			var weapons_l_r_tmp = re.exec(weapons_str[q]);
			weapons_l_r += weapons_l_r_tmp[1];
			
		}
		
	}
	
	var status_new = root.document.createElement('span');
	status_new.innerHTML = '<td width=80%><table border=0 cellPadding=0 cellSpacing=0><tr><td width=30 align=right><nobr>[' + lvl +  ']</nobr></td><td align=right width=35><nobr>' + lvl_sind + '</nobr></td><td align=right width=45 style=color:' + status_color(weapons_l_r) + '><nobr>' + xp + '%</nobr></td><td><nobr>&nbsp;&nbsp;' + sector + '</nobr></td></tr></table></td>';
	tmp_tr[i].parentNode.childNodes[tr_first].childNodes[3].innerHTML = status_new.innerHTML;
	
}

function next_func() {
	
	sind_state.innerHTML = ' | <span style = "cursor: pointer;">Упорядочить основу</span>';
	
	sind_state.onclick = function() {
	
		// сортировка по боевому уровню среди значков
		if (Opera) { tr_first = 1 } else { tr_first = 2 }
		tr_last = tr_first + result;
		for (c1 = tr_first; c1 < tr_last; c1++) {
			
			tmp_c1 = /(\d+)/.exec(tmp_tr[i].parentNode.childNodes[c1].childNodes[3].textContent);
			tmp_c1 = tmp_c1[0];
			
			for (c2 = tr_first; c2 < tr_last; c2++) {
				
				tmp_c2 = /(\d+)/.exec(tmp_tr[i].parentNode.childNodes[c2].childNodes[3].textContent);
				tmp_c2 = tmp_c2[0];
				
				if (tmp_c2 <= tmp_c1) {
					
					tmp_tr[i].parentNode.childNodes[c2].parentNode.insertBefore(tmp_tr[i].parentNode.childNodes[c1], tmp_tr[i].parentNode.childNodes[c2]);
					break;
				
				}
			
			}
		
		}
		
		sind_state.innerHTML = '<span style = "cursor: pointer;"></span>';
		
	}
	
	play_s(sound_end);
	
}

function title_change() {
	
	root.document.title = percent + '%';
	
	if (percent == Math.round(percent_int) && (tr_last - tr_first > 0)) { info(tr_first); percent_int += step; tr_first++; }
	if (percent < 100) { percent++;	setTimeout(function(){title_change()}, time_all/100); }
	else { next_func() }
	
}

function sort1() {

var result = 0;
	
	for (c1 = tr_first; c1 < tr_last; c1++) {
		
		// кол-во со значками в result
		if (tmp_tr[i].parentNode.childNodes[c1].innerHTML.indexOf(sind_pic) != -1) { result++ }
		
		for (c2 = tr_first; c2 < tr_last; c2++) {
			
			if (tmp_tr[i].parentNode.childNodes[c2].innerHTML.indexOf(sind_pic) == -1) {
				
				// обмен
				tmp_tr[i].parentNode.childNodes[c2].parentNode.insertBefore(tmp_tr[i].parentNode.childNodes[c1], tmp_tr[i].parentNode.childNodes[c2]);
				break;
				
			}
			
		}
		
	}

return(result);
	
}

function status_color(weapons_l_r) {

// предположим, что у всех именной ствол длинною с дальность
var result = color_imen;

var guns_rent_all = 'Heavy Minigun,SIG MG-50,Colt M4 Extreme,LR-300 5.56,Blaser Light,Blaser 93,Blaser Tactical';
var guns_rent = guns_rent_all.split(',');

// гос. стволы (182 гос. ствола на 7-летие игры)
var guns_gos_all = 'Авторучка Бонда,Ruger BeerCat 22lr,Пистолет ТТ,Desert Eagle .50,Пистолет 9мм,Schmeisser MKb42,АК-74,M-16,Enfield L1A1,АКС,HK-53,SG 541,XM8,Steyr AUG,TRW LMR,SIG-550,STG-44,M14,SAR-5.56,CZ SA Vz.58,Винтовка G3,FARA 83,G3-AA,Beretta ARX-160,CIS SR-88,FN-FAL,M-82 Valmet,Винтовка FS2000,FN SCAR Mk.16,Bofors AK-5,Bushmaster M17s,HK 417,Vektor R4,L96 A1,Vapensmia 149-F1,CZ 527 Varmint,Винтовка M40,Police Rifle,Mauser M-86,Remington 700 VTR,PSG-1,SSG 550,M-76,СВД,OM50 Nemesis,SSG 2000,B-94,SSG 3000 Black,Falcon,FR-F2,M-24 Light,Savage 10FP,Steyr IWS-2007,Savage 100FP,Tikka T3 Tactical,CZ 700 M1,Bora JNG-90,ПП Узи,Calico M960,LF-57,UMP,GG-95,M-4 Спектр,MAS-38,ПП Каштан,Suomi M-1931,Ingram M6,Colt 633,Walther MPL,FMK-3,ПП Вихрь,S.A.F,Steyr Mpi 81,Agram 2000,ПП-19 Бизон,ПП Кедр,Colt m636,FN-Minimi,Lewis MG,Type 95 MG,Пулемёт FN MAG,Брен L4,LSW L-86,M16A2 Heavy Gun,Пулемёт MG-3,Rising Sun T62,AR70/84 "Beretta",Печенег,M249 SAW,пулемет ZB 53,НСВ,Type 67 HMG,АRM "Галил",SIG MG 710,M-60,Vickers MG Light,VZ-59 Heavy Gun,HK MG-36,M-61 Volcano,AAT m.52,XM-312,MG-45 Sturm,Дробовик Hunter,Remington 870,Nova Tactical,M-37,ТОЗ-194,Jackhammer,SPAS 12,Страйкер,Сайга,Рысь,Neostead,XM-26 LSS,HAWK 97,Benelli M4,Liberator mk3,РПГ,Гранатомёт,GRG-48,PAW-20,РПГ-У,РПГ-16 "Гром",АГС-30,ГМ-94,GL-06 40mm,HK GMG,Рогатка,SAW Airsoft MG,Пейнтбольный маркер,Картофелемёт #2,АН-94,Винтовка F2000,FN FNC,HK416,Гроза-1,KA-90,АБ-762 Тайга,XCR 5.56,ТКБ-517,AK-103,HK G36,HK G41,SG-552 SWAT,Амели,HK-21 Wiper,РПК,ПКМ,Colt M16 LMG,АА-52 Attaque,HK MG-43,ПССГ,FN BRG-17 Spitfire,ПКМС 7,62,MiniGun 7.62,MG-50,Ultimax HMG,Barret M99,BFG-50,Tactical M-600,PGM Mini-Hecate .338,TEI M89-SR,Barrett M107,ВССК "Выхлоп",RT-20 Silent Shot,Barret XM500,Parker-Hale M-85,Steyr Scout Tactical,RPA Rangemaster,MP-5,Beretta M12,Scorpion,Kinetics CPW,P-90,ПП-90М1,HK MP-7,TDI Kriss V2,Mossberg 590,Вепрь-12,MAG-7,USAS-12,USAS-15';
var guns_gos = guns_gos_all.split(',');

	// не именное, мож аренда?
	for (f = 0; f < guns_rent.length; f++) {
		
		if (weapons_l_r.indexOf(guns_rent[f]) >= 0) {
			
			result = color_rent;
			return(result);
		}
		
	}
	
	// мож тогда арт или гос пушка?
	for (f = 0; f < guns_gos.length; f++) {
		
		if (weapons_l_r.indexOf(guns_gos[f]) >= 0) {
			
			result = '#004400';
			return(result);
		}
		
	}
	
	// а может быть корова?
	if (weapons_l_r.length == 0) {
	
		result = '#004400';
		return(result);
	
	}

return(result);

}

function tooltip(tr_first) {

tmp_tr[i].parentNode.childNodes[tr_first].childNodes[1].onmouseover = function(e) { weapons_table[tr_first].style.visibility = 'hidden' }

tmp_tr[i].parentNode.childNodes[tr_first].childNodes[1].onmouseout = function(e) { weapons_table[tr_first].style.visibility = 'hidden' }

tmp_tr[i].parentNode.childNodes[tr_first].childNodes[1].onmousemove = function(e) {

	oCanvas = document.getElementsByTagName((document.compatMode && document.compatMode == "CSS1Compat") ? "HTML" : "BODY")[0];
	x = window.event ? event.clientX + oCanvas.scrollLeft : e.pageX;
	y = window.event ? event.clientY + oCanvas.scrollTop : e.pageY;	
	
	w_width = oCanvas.clientWidth ? oCanvas.clientWidth + oCanvas.scrollLeft : window.innerWidth + window.pageXOffset;
	w_height = window.innerHeight ? window.innerHeight + window.pageYOffset : oCanvas.clientHeight + oCanvas.scrollTop; 
	
	c_height = document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
	
	t_width = weapons_table[tr_first].offsetWidth;
	t_height = weapons_table[tr_first].offsetHeight;
	
	weapons_table[tr_first].style.left = x + "px";
	weapons_table[tr_first].style.top =  y - 10 - t_height + "px";
	
	if (x + t_width > w_width) weapons_table[tr_first].style.left = w_width - t_width + "px";
	if (y - t_height < w_height - c_height) weapons_table[tr_first].style.top = y + 10 + "px";
	if (y - t_height > w_height) weapons_table[tr_first].style.top = w_height - t_height + "px";
	
	weapons_table[tr_first].style.visibility = 'visible';
	
}

}

function REQ(url, method, param, async, onsuccess, onfailure) {

	request.open(method, url, async);
	request.send(param);
	
	if (request.readyState == 4 && request.status == 200 && typeof onsuccess != 'undefined') onsuccess(request);
	
	else if (request.readyState == 4 && request.status != 200 && typeof onfailure != 'undefined') onfailure(request);
	
}

function play_s(sound_id) {

    if (root.document.getElementById('flashcontent') == null) {
        
        var div = root.document.createElement('div');
        div.id = 'flashcontent';
        root.document.body.appendChild(div);
        
    }

    root.document.getElementById('flashcontent').innerHTML = '<embed height="1" width="1" flashvars="soundPath=/sounds/'+ sound_id +'.mp3" allowscriptaccess="always" quality="high" bgcolor="#F5fff5" name="gr_server" id="gr_server" src="http://images.ganjawars.ru/i/play.swf" type="application/x-shockwave-flash"/>';
    
}

})();