ClanMembers

Статистика по защитам клана

От 22.11.2016. Виж последната версия.

// ==UserScript==
// @name        ClanMembers
// @author      Sweag
// @namespace   clan
// @description Статистика по защитам клана
// @include     http://www.heroeswm.ru/clan_info.php*
// @version     1.1
// @grant       none
// ==/UserScript==

var start_index = 0;
var ifrom;
var ito;
var arr_index = 1;
var arr = [];
var masDef = [];
var masWinDef = [];
var masPlayer = [];
var sign_sort_num = -1, sign_sort_online = -1, sign_sort_lvl = -1, sign_sort_def = -1;
var Defstr;
var hrefs = document.getElementsByTagName('a');
var clan_online = document.querySelectorAll("img[src$='clans/online.gif']");
var clan_offline = document.querySelectorAll("img[src$='clans/offline.gif']");
if ( clan_offline[0] ) {
		var clan_table = clan_offline[0].parentNode;
		var str = clan_offline[0].parentNode.parentNode.parentNode.innerHTML;
} else if ( clan_online[0] ) {
		var clan_table = clan_online[0].parentNode;
		var str = clan_online[0].parentNode.parentNode.parentNode.innerHTML;
}
if ( clan_table ) {
		while ( clan_table.tagName != 'TR' ) { clan_table = clan_table.parentNode; }
		clan_table = clan_table.parentNode.childNodes;
}
var clan_table_length = clan_table.length;
var cel = '<tr><td class="wbwhite" width="30" id=sort_number title="Сортировать по номеру"><b>№</b></td><td class="wbwhite" width="15" id=sort_online title="Сортировать по онлайну"><img src="http://dcdn.heroeswm.ru/i/clans/offline.gif" align="absmiddle" border="0" width="15" height="15"></td><td class="wbwhite" width="150">&nbsp;&nbsp;Имя персонажа</td><td class="wbwhite" align="center" width="10" id=sort_lvl title="Сортировать по боевому уровню">&nbsp;lvl</td><td class="wbwhite" align="center">Описание</td><td class="wbwhite" width="30" id=sort_defs title="Сортировать по количеству защит">&nbsp;Дефы</td><td class="wbwhite" width="30">&nbsp;Побед</td><td class="wbwhite" width="30">&nbsp;%побед</td></tr>'+str;
if ( clan_offline[0] ) {
		clan_offline[0].parentNode.parentNode.parentNode.innerHTML = cel;
} else if ( clan_online[0] ) {
		clan_online[0].parentNode.parentNode.parentNode.innerHTML = cel;
}
document.getElementById('sort_number').onclick = function(){fn_sort_number();};
document.getElementById('sort_online').onclick = function(){fn_sort_online();};
document.getElementById('sort_lvl').onclick = function(){fn_sort_lvl();};
document.getElementById('sort_defs').onclick = function(){fn_sort_defs();};

for(var i = 0; i < hrefs.length; i++)
{
	if(hrefs[i].href.indexOf('clan_log.php') > -1)
	{
		var myform = document.createElement('div');
		myform.id = 'sform';
		str = "<table><tr><td bgcolor='#6b6c6a' align='center' colspan='2'><font color='#ffd875'><b>Обсчет дефов за период</b></font></td></tr><tr><td>С: </td><td><input type=text id=datfrom value='01-" + getCurrentMonth() + "'></td></tr>";
		str += "<tr><td>По: </td><td><input type=text id=datto value='"+getCurrentDate()+"'></td></tr>";
		str += "<tr><td colspan=2><center><input type=button value='Загрузить' id=startscan></center></td></tr>";
		str += "</table></div>";
		myform.innerHTML = str;
		hrefs[i].parentNode.appendChild(myform);
		i = hrefs.length;
		document.getElementById('startscan').onclick = function(){prescaning();};
	}
}
for ( var i=1; i<clan_table_length+1; i++ ){
	masDef[i] = 0;
	masWinDef[i] = 0;
	Defstr = clan_table[i].innerHTML;
	if(clan_table[i].innerHTML.indexOf("offline.gif") > -1){
		Defstr += "<td class=wbwhite width=30> </td><td class=wbwhite width=30> </td><td class=wbwhite width=30> </td>";
	}else{
		Defstr += "<td class=wblight width=30> </td><td class=wblight width=30> </td><td class=wblight width=30> </td>";
	}
	clan_table[i].innerHTML = Defstr;
	clan_table[0].childNodes[0].setAttribute("style", "cursor: pointer;");
	clan_table[0].childNodes[1].setAttribute("style", "cursor: pointer;");
	clan_table[0].childNodes[3].setAttribute("style", "cursor: pointer;");
	clan_table[0].childNodes[5].setAttribute("style", "cursor: pointer;");
}

function init_clan()
{
	for ( var i=1; i<clan_table_length+1; i++ )
	{
		masPlayer[i] = Number(clan_table[i].childNodes[2].innerHTML.split("pl_info.php?id=")[1].split('" class=')[0]);
	}
}

function sort_mas(sign_sort, NumberC)
{
	var sorted = [];
	var m, t, p, f;
	for(var i=1; i< clan_table_length+1; i++){
		sorted[i] = [];
		for(var j=0; j<8; j++){
			sorted[i][j] = clan_table[i].childNodes[j].innerHTML;
		}
		if(NumberC == 1){
			if(sorted[i][1].indexOf("offline.gif") > -1){
				sorted[i][1] = -1;
			}else {
				sorted[i][1] = 1;
			}
		}
		sorted[i][8] = clan_table[i].childNodes[0].getAttribute("class");
	}
	
	while(true){
		f = 0;
		for(var i=1; i<clan_table_length; i++){
			m = sign_sort*Number(sorted[i][NumberC]);
			t = sign_sort*Number(sorted[i+1][NumberC]);
			if(m<t){
				f = 1;
				for(var j=0; j<9; j++){
					p = sorted[i][j];
					sorted[i][j]=sorted[i+1][j];
					sorted[i+1][j] = p;
				}
			}
		}
		if(f == 0)break;
	}
	for(var i=1; i<clan_table_length+1; i++){
		for(var j=0; j<8; j++){
			clan_table[i].childNodes[j].innerHTML = sorted[i][j];
			clan_table[i].childNodes[j].setAttribute("class", sorted[i][8]);
		}
		if(NumberC == 1){
			if(sorted[i][1] > 0){
				clan_table[i].childNodes[1].innerHTML = '<img src="http://dcdn.heroeswm.ru/i/clans/online.gif" align="absmiddle" border="0" height="15" width="15">';
			}else {
				clan_table[i].childNodes[1].innerHTML = '<img src="http://dcdn.heroeswm.ru/i/clans/offline.gif" align="absmiddle" border="0" height="15" width="15">';
			}
		}
	}
}

function fn_sort_online()
{
	//сортировка по онлайну
	sign_sort_online *= -1;
	sort_mas(sign_sort_online, 1);
	sign_sort_def = -1;
	sign_sort_lvl = -1;
	sign_sort_num = 1;
	if(sign_sort_online>0){
		clan_table[0].childNodes[1].innerHTML = '<img src="http://dcdn.heroeswm.ru/i/clans/online.gif" align="absmiddle" border="0" height="15" width="15">';
	}else{
		clan_table[0].childNodes[1].innerHTML = '<img src="http://dcdn.heroeswm.ru/i/clans/offline.gif" align="absmiddle" border="0" height="15" width="15">';
	}
	clan_table[0].childNodes[0].innerHTML = "&nbsp;№";
	clan_table[0].childNodes[3].innerHTML = "&nbsp;lvl";
	clan_table[0].childNodes[5].innerHTML = "&nbsp;Дефы";
	Paint();
}

function fn_sort_number()
{	
	sign_sort_num *= -1;
	sort_mas(sign_sort_num, 0);
	sign_sort_def = -1;
	sign_sort_lvl = -1;
	sign_sort_online = -1;
	clan_table[0].childNodes[0].innerHTML = "<b>&nbsp;№</b>";
	clan_table[0].childNodes[3].innerHTML = "&nbsp;lvl";
	clan_table[0].childNodes[5].innerHTML = "&nbsp;Дефы";
	clan_table[0].childNodes[1].innerHTML = '<img src="http://dcdn.heroeswm.ru/i/clans/offline.gif" align="absmiddle" border="0" height="15" width="15">';
	Paint();
}
function fn_sort_lvl()
{
	// Сортировка по уровню
	sign_sort_lvl *= -1;
	sort_mas(sign_sort_lvl, 3);
	sign_sort_def = -1;
	sign_sort_num = 1;
	sign_sort_online = -1;
	clan_table[0].childNodes[0].innerHTML = "&nbsp;№";
	clan_table[0].childNodes[3].innerHTML = "<b>&nbsp;lvl</b>";
	clan_table[0].childNodes[5].innerHTML = "&nbsp;Дефы";
	clan_table[0].childNodes[1].innerHTML = '<img src="http://dcdn.heroeswm.ru/i/clans/offline.gif" align="absmiddle" border="0" height="15" width="15">';
	Paint();
}

function fn_sort_defs()
{
	// Сортировка по количеству дефов
	sign_sort_def *= -1;
	sort_mas(sign_sort_def, 5);
	sign_sort_lvl = -1;
	sign_sort_num = 1;
	sign_sort_online = -1;
	clan_table[0].childNodes[0].innerHTML = "&nbsp;№";
	clan_table[0].childNodes[3].innerHTML = "&nbsp;lvl";
	clan_table[0].childNodes[5].innerHTML = "<b>&nbsp;Дефы</b>";
	clan_table[0].childNodes[1].innerHTML = '<img src="http://dcdn.heroeswm.ru/i/clans/offline.gif" align="absmiddle" border="0" height="15" width="15">';
	Paint();
}

function getCurrentDate()
{
	var dt=new Date(); 	var month = dt.getMonth()+1; 	if (month<10) month='0'+month;	var day = dt.getDate(); 	if (day<10)  day='0'+day;	var year = dt.getFullYear(); 	
	return day + "-" + month + "-" + (year + '')[2] + (year + '')[3];
}

function getCurrentMonth()
{
	var dt=new Date(); 	
	var month = dt.getMonth()+1;
	if (month<10) month='0'+month;
	var year = dt.getFullYear(); 	
	return month + "-" + (year + '')[2] + (year + '')[3];
}
function prescaning()
{
	var t = document.getElementById('datfrom').value.split('-');
	ifrom = new Date("20" + t[2] + "-" + t[1] + "-" + t[0]);
	t = document.getElementById('datto').value.split('-');
	ito = new Date("20" + t[2] + "-" + t[1] + "-" + t[0]);
	init_clan();
	start_index = 0;
	scaning();
}

function listen()
{
	if(arr_index > arr.length-1){
		document.getElementById('startscan').value = "Загружено: " + start_index;
		setTimeout(scaning,1000);
		return;
	}
	var cur = getCurTimestamp(arr[arr_index]);
	if(cur >= ifrom && cur <= ito){
		var s = arr[arr_index].split(': ')[1];
		if(s.indexOf('Нападение') > -1){
			var ss = "http://www.heroeswm.ru/" + arr[arr_index].split('<a href="')[3].split('">история')[0];
			var ans = new XMLHttpRequest();
			ans.open("GET", ss, true);
			ans.overrideMimeType('text/html; charset=windows-1251');
			ans.send();
			ans.onreadystatechange = function() { 
				if (ans.readyState != 4){ return;}
				if (ans.status == 200) {
					var text_history = ans.responseText;
					text_history = text_history.split('Нападение Сурвилургов')[1].split('<!--</td></tr></table>-->')[0].replace('<!--0-->','');
					var arr_history = text_history.split('Сурвилурги');
					for(var j = 1; j < arr_history.length; j++){
						for(var k=0; k<masPlayer.length; k++){
							if(arr_history[j].indexOf(masPlayer[k]) > -1 ){
								masDef[k]++;
								if(arr_history[j].indexOf('получено') > -1 )masWinDef[k]++;
							}
						}
					}
					arr_index++;
					listen();
				}
			}
		}else{
			arr_index++;
			listen();
		}
	}
	else if(cur < ifrom){
		document.getElementById('startscan').value = "Готово";
		for(var i=1; i<clan_table_length+1; i++){
			clan_table[i].childNodes[5].innerHTML = masDef[i];
			clan_table[i].childNodes[6].innerHTML = masWinDef[i];
			if( masDef[i] != 0 ){
				var percent_win = Math.round(masWinDef[i]/masDef[i]*100);
				clan_table[i].childNodes[7].innerHTML = percent_win;
			}else{
				clan_table[i].childNodes[7].innerHTML = 0;
			}
		}
		Paint();
	}		
}

function scaning()
{
	var st=document.location.href;
	var xhr = new XMLHttpRequest();	
	var uri = st.replace('info', 'log')+"&page="+start_index;
	start_index++;
	arr_index = 1;
	xhr.open("GET", uri, true);
	xhr.overrideMimeType('text/html; charset=windows-1251');
    xhr.send();
	xhr.onreadystatechange = function() { 
		if (xhr.readyState != 4) return;
		if (xhr.status == 200) {
			text = xhr.responseText;
			text = text.split('<!-- big table -->')[1];
			text = text.split('&gt;</a></center>')[1];
			text = text.split('</td></tr></table>')[0];
			arr = text.split('&nbsp;&nbsp;');
			listen();
		}
	}
}

function Paint()
{
	var def, win;
	for(var i=1; i<clan_table_length+1; i++){
		def = Number(clan_table[i].childNodes[5].innerHTML);
		win = Number(clan_table[i].childNodes[6].innerHTML);
		if( def < 10 ){
			clan_table[i].childNodes[5].setAttribute("style", "color: red;");
		}else{
			clan_table[i].childNodes[5].setAttribute("style", "color: green;");
		}
		if( def == 0 ){
			clan_table[i].childNodes[7].setAttribute("style", "color: black;");
		}else{
			if(100*win/def < 75){
				clan_table[i].childNodes[7].setAttribute("style", "color: red;");
			}else{
				clan_table[i].childNodes[7].setAttribute("style", "color: green;");
			}
		}
		clan_table[i].childNodes[5].setAttribute("align", "center");
		clan_table[i].childNodes[6].setAttribute("align", "center");
		clan_table[i].childNodes[7].setAttribute("align", "center");
	}
}

function getCurTimestamp(str)
{
	var t = str.split(' ')[0].split('-');
	return (new Date("20" + t[2] + "-" + t[1] + "-" + t[0]))
}