您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Расширенная статистика и функционал.
当前为
// ==UserScript== // @name WoWsInfo // @author Vov_chiK // @description Расширенная статистика и функционал. // @copyright 2015+, Vov_chiK // @license GPL version 3 or any later version; http://www.gnu.org/copyleft/gpl.html // @namespace http://forum.walkure.pro/ // @version 0.3.0.1 // @creator Vov_chiK // @include http://worldofwarships.ru/cbt/accounts/* // @match http://worldofwarships.ru/cbt/accounts/* // @grant GM_xmlhttpRequest // ==/UserScript== // @Vov_chiK (function(window){ /* ===== Main function ===== */ function WoWsInfo(){ var VersionWoWsInfo = '0.3.0.1'; var WoWsInfoLink = '#'; var WoWsInfoLinkName = '[0.3.0] [WoWsInfo] Расширенная статистика на оф. сайте.'; var lang = 'ru'; if(window.location.host.indexOf(".wargaming.net") > -1){ lang = getCookie('wgccfe_language'); }else if(window.location.host.indexOf("worldoftanks") > -1){ lang = getCookie('hllang'); } var localization = getLocalization(lang); var realm = localization['realm']; /* ===== Message UserScript ===== */ { } var navigatorInfo = getBrowser(); window.onerror = function(message, source, lineno, column, errorObj){ if(source == ''){source = window.location.href;} else if(source.indexOf("conversion_async.js") != -1){return false;} else if(source.indexOf("map_widgets.js") != -1){return false;} else if(source.indexOf("tooltips.js") != -1){return false;} else if(source.indexOf("strongholds.build.js") != -1){return false;} else if(source.indexOf("clans_leaderboard.js") != -1){return false;} else if(source.indexOf("clan_treasury.js") != -1){return false;} if(message == 'Script error.' && errorObj == null){console.log('message == \'Script error.\' && errorObj == null'); return false;} lineno += 17; var agent = ''; var agentArr = navigator.userAgent.split(')'); for(var i = 0; i < agentArr.length; i++){ if(agent != ''){agent += ')\n';} agent += agentArr[i]; } var error = localization['ErrorScript']+"\n\n" + "Browser name: "+navigatorInfo['browserName']+"\n"+ "Full version: "+navigatorInfo['fullVersion']+"\n"+ "Major version: "+navigatorInfo['majorVersion']+"\n"+ "AppName: "+navigatorInfo['appName']+"\n"+ "UserAgent: "+agent+"\n\n"+ "Error: "+message+"\n"+ "URL: " +source+"\n"+ "Line: "+lineno+"\n"+ "Column: "+column+"\n"+ "StackTrace: "+errorObj+"\n\n"+ localization['ErrorSendDeveloper']; console.log(error); alert(error); error = error.split('\n').join('<br />'); // onShowMessage( // localization['Box'], // 'different_error', // error, // onCloseMessage, // localization['Ok'], // false // ); return true; } function getBrowser(){ var nVer = navigator.appVersion; var nAgt = navigator.userAgent; var browserName = navigator.appName; var fullVersion = ''+parseFloat(navigator.appVersion); var majorVersion = parseInt(navigator.appVersion, 10); var nameOffset, verOffset, ix; // In Opera 15+, the true version is after "OPR/" if((verOffset = nAgt.indexOf("OPR/")) != -1){ browserName = "Opera"; fullVersion = nAgt.substring(verOffset + 4); } // In older Opera, the true version is after "Opera" or after "Version" else if((verOffset = nAgt.indexOf("Opera")) != -1){ browserName = "Opera"; fullVersion = nAgt.substring(verOffset + 6); if((verOffset = nAgt.indexOf("Version")) != -1) fullVersion = nAgt.substring(verOffset + 8); } // In MSIE, the true version is after "MSIE" in userAgent else if((verOffset = nAgt.indexOf("MSIE")) != -1){ browserName = "Microsoft Internet Explorer"; fullVersion = nAgt.substring(verOffset + 5); } // In Chrome, the true version is after "Chrome" else if((verOffset = nAgt.indexOf("Chrome")) != -1) { browserName = "Chrome"; fullVersion = nAgt.substring(verOffset + 7); } // In Safari, the true version is after "Safari" or after "Version" else if((verOffset = nAgt.indexOf("Safari")) != -1){ browserName = "Safari"; fullVersion = nAgt.substring(verOffset + 7); if((verOffset = nAgt.indexOf("Version")) != -1) fullVersion = nAgt.substring(verOffset + 8); } // In Firefox, the true version is after "Firefox" else if((verOffset = nAgt.indexOf("Firefox")) != -1){ browserName = "Firefox"; fullVersion = nAgt.substring(verOffset + 8); } // In most other browsers, "name/version" is at the end of userAgent else if((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))){ browserName = nAgt.substring(nameOffset, verOffset); fullVersion = nAgt.substring(verOffset + 1); if(browserName.toLowerCase() == browserName.toUpperCase()){ browserName = navigator.appName; } } // trim the fullVersion string at semicolon/space if present if((ix = fullVersion.indexOf(";")) != -1) fullVersion = fullVersion.substring(0, ix); if((ix = fullVersion.indexOf(" ")) != -1) fullVersion = fullVersion.substring(0, ix); majorVersion = parseInt(''+fullVersion, 10); if(isNaN(majorVersion)){ fullVersion = ''+parseFloat(navigator.appVersion); majorVersion = parseInt(navigator.appVersion, 10); } console.log('' +'Browser name = '+browserName+'\n' +'Full version = '+fullVersion+'\n' +'Major version = '+majorVersion+'\n' +'navigator.appName = '+navigator.appName+'\n' +'navigator.userAgent = '+navigator.userAgent+'\n' ); var navigatorInfo = []; navigatorInfo['browserName'] = browserName; navigatorInfo['fullVersion'] = fullVersion; navigatorInfo['majorVersion'] = majorVersion; navigatorInfo['appName'] = navigator.appName; navigatorInfo['userAgent'] = navigator.userAgent; return navigatorInfo; } /* ===== Style UserScript ===== */ { var StyleWoTClanInfo = '' + 'div.div-link-block{font-size:13px; color: #fff; text-align: right; padding-top: 10px; padding-bottom: 10px;}' + 'span.link-block:hover{border-bottom: 1px dotted #fff; cursor: pointer;}' + 'span.link-block div.icon-link-block{background: url("http://'+realm+'.wargaming.net/clans/static/0.1.0.1/images/table-sorter/table-sorter_arrow_sprite.png") no-repeat 0 0; width: 10px; height: 10px; margin: -15px 100%;}' + 'span.hide-block div.icon-link-block{background-position: 100% -26px;}' + 'span.show-block div.icon-link-block{background-position: 100% -16px;}' + 'div#userscript-block{border-radius: 2px; background-color: rgba(255, 255, 255, 0.03); border: 1px solid rgba(255, 255, 255, 0.1); padding: 10px; margin: 10px 0; line-height: 20px;}' + 'div.hide-block{display: none;}' + 'div.wowsinfo-stat{text-align: center; margin-top: 10px; color: white; font-size: 16px;}' + 'span.name-stat{color: #ffcc33;}' + ''; var StyleWoTClanInfoAdd = document.createElement("style"); StyleWoTClanInfoAdd.textContent = StyleWoTClanInfo.toString(); document.head.appendChild(StyleWoTClanInfoAdd); } var MembersArray = []; var typeStat = ["pvp", "pve"]; var color = new Array(); color['very_bad'] = '#FE0E00'; // очень плохо color['bad'] = '#FE7903'; // плохо color['normal'] = '#F8F400'; // средне color['good'] = '#60FF00'; // хорошо color['very_good'] = '#02C9B3'; // очень хорошо color['unique'] = '#D042F3'; // уникально /* ===== Check load page ===== */ if(window.location.href.indexOf("accounts") > -1 && window.location.href.split('/').length == 7 && window.location.href.split('/')[5].match(/[0-9]+/) != null){ var account_id = window.location.href.split('/')[5].match(/[0-9]+/); MemberProfilePage(); } jQ('.link-block').click(function(){onViewBlock(this);}); /* ===== Pages function ===== */ function MemberProfilePage(){ getMemberStatistic(); var content = document.getElementsByClassName('content')[0]; var row = content.getElementsByClassName('row')[0]; row.outerHTML += '' + '<div id="userscript-block-list">' + getUserScriptDeveloperBlock() + '' + '</div>' + ''; for(var t = 0; t < typeStat.length; t++){ var type = typeStat[t]; var account_statistics__general = document.getElementsByClassName('account_statistics__general')[t]; if(account_statistics__general !== undefined){ var stat_main_middle = account_statistics__general.getElementsByClassName('stat-main-middle')[0]; stat_main_middle.getElementsByClassName('value')[0].style.color = colorBattlesAvgXP(MembersArray[0][type]['avg_xp']); var stat = account_statistics__general.getElementsByClassName('stat'); stat[0].getElementsByClassName('value')[0].style.color = colorBattles(MembersArray[0][type]['battles']); stat[1].getElementsByClassName('value')[0].style.color = colorWinsPercents(MembersArray[0][type]['wins_percents']); stat[2].getElementsByClassName('value')[0].style.color = colorAvgDamage(MembersArray[0][type]['avg_damage'], MembersArray[0][type]['avg_level_battles']); stat[3].getElementsByClassName('value')[0].style.color = colorKillDead(MembersArray[0][type]['kill_dead']); account_statistics__general.outerHTML += '' + '<div id="wowsinfo-'+type+'" class="wowsinfo-stat">' + '<span class="name-stat">'+localization['wr']+':</span> ' + '<font color="'+colorWalkureRating(MembersArray[0][type]['wr'])+'">'+(MembersArray[0][type]['wr']).toFixed(2)+'</font>' + '</div>' + ''; } } } /* ===== MemberProfilePage function ===== */ function getMemberStatistic(){ var index = MembersArray.length; MembersArray[index] = []; for(var t = 0; t < typeStat.length; t++){ var type = typeStat[t]; MembersArray[index][type] = []; var account_statistic = document.getElementById('account_statistic-'+type); var account_statistics = account_statistic.getElementsByClassName('account_statistics__rates-small-border'); if(account_statistics.length == 3){ MembersArray[index][type]['battles'] = htmlParseMemberStatistic(account_statistics[0].rows[1].cells[1]); MembersArray[index][type]['wins'] = htmlParseMemberStatistic(account_statistics[0].rows[2].cells[1]); MembersArray[index][type]['losses'] = htmlParseMemberStatistic(account_statistics[0].rows[3].cells[1]); MembersArray[index][type]['draws'] = htmlParseMemberStatistic(account_statistics[0].rows[4].cells[1]); MembersArray[index][type]['survived_battles'] = htmlParseMemberStatistic(account_statistics[0].rows[5].cells[1]); MembersArray[index][type]['hits_percents'] = htmlParseMemberStatistic(account_statistics[0].rows[6].cells[1]); MembersArray[index][type]['damage'] = htmlParseMemberStatistic(account_statistics[0].rows[7].cells[1]); MembersArray[index][type]['frags_ships'] = htmlParseMemberStatistic(account_statistics[0].rows[8].cells[1]); MembersArray[index][type]['frags_planes'] = htmlParseMemberStatistic(account_statistics[0].rows[9].cells[1]); MembersArray[index][type]['capture_base'] = htmlParseMemberStatistic(account_statistics[0].rows[10].cells[1]); MembersArray[index][type]['defend_base'] = htmlParseMemberStatistic(account_statistics[0].rows[11].cells[1]); MembersArray[index][type]['avg_xp'] = htmlParseMemberStatistic(account_statistics[1].rows[1].cells[1]); MembersArray[index][type]['avg_damage'] = htmlParseMemberStatistic(account_statistics[1].rows[2].cells[1]); MembersArray[index][type]['avg_frags_ships'] = htmlParseMemberStatistic(account_statistics[1].rows[3].cells[1]); MembersArray[index][type]['avg_frags_planes'] = htmlParseMemberStatistic(account_statistics[1].rows[4].cells[1]); MembersArray[index][type]['avg_capture_base'] = htmlParseMemberStatistic(account_statistics[1].rows[5].cells[1]); MembersArray[index][type]['avg_defend_base'] = htmlParseMemberStatistic(account_statistics[1].rows[6].cells[1]); MembersArray[index][type]['max_xp'] = htmlParseMemberStatistic(account_statistics[2].rows[1].cells[1]); MembersArray[index][type]['max_damage'] = htmlParseMemberStatistic(account_statistics[2].rows[2].cells[1]); MembersArray[index][type]['max_frags_ships'] = htmlParseMemberStatistic(account_statistics[2].rows[3].cells[1]); MembersArray[index][type]['max_frags_planes'] = htmlParseMemberStatistic(account_statistics[2].rows[4].cells[1]); var ships__avg_params = account_statistic.getElementsByClassName('ships__avg-params')[0] MembersArray[index][type]['avg_level_battles'] = htmlParseMemberStatistic(ships__avg_params.getElementsByClassName('_value')[0]); }else{ MembersArray[index][type]['battles'] = 0; MembersArray[index][type]['wins'] = 0; MembersArray[index][type]['losses'] = 0; MembersArray[index][type]['draws'] = 0; MembersArray[index][type]['survived_battles'] = 0; MembersArray[index][type]['hits_percents'] = 0; MembersArray[index][type]['damage'] = 0; MembersArray[index][type]['frags_ships'] = 0; MembersArray[index][type]['frags_planes'] = 0; MembersArray[index][type]['capture_base'] = 0; MembersArray[index][type]['defend_base'] = 0; MembersArray[index][type]['avg_xp'] = 0; MembersArray[index][type]['avg_damage'] = 0; MembersArray[index][type]['avg_frags_ships'] = 0; MembersArray[index][type]['avg_frags_planes'] = 0; MembersArray[index][type]['avg_capture_base'] = 0; MembersArray[index][type]['avg_defend_base'] = 0; MembersArray[index][type]['max_xp'] = 0; MembersArray[index][type]['max_damage'] = 0; MembersArray[index][type]['max_frags_ships'] = 0; MembersArray[index][type]['max_frags_planes'] = 0; MembersArray[index][type]['avg_level_battles'] = 0; } /* ===== Calc Statistic ===== */ { MembersArray[index][type]['wins_percents'] = (MembersArray[index][type]['wins']/MembersArray[index][type]['battles'])*100; MembersArray[index][type]['kill_dead'] = MembersArray[index][type]['frags_ships']/(MembersArray[index][type]['battles']-MembersArray[index][type]['survived_battles']); var avg_damage = MembersArray[index][type]['avg_damage']; var avg_frags_ships = MembersArray[index][type]['avg_frags_ships']; var avg_frags_planes = MembersArray[index][type]['avg_frags_planes']; var avg_capture_base = MembersArray[index][type]['avg_capture_base']; var avg_defend_base = MembersArray[index][type]['avg_defend_base']; var avg_level_battles = MembersArray[index][type]['avg_level_battles']; var wr = avg_damage/(avg_level_battles*10) + avg_frags_ships*200 + (avg_frags_planes/6)*120 + avg_capture_base*35 + avg_defend_base*35; if(isNaN(wr)){wr = 0;} MembersArray[index][type]['wr'] = wr; } } //console.log(MembersArray[index]); } function htmlParseMemberStatistic(element){ var value = element.innerText.trim().replace(new RegExp(' ', 'g'), ''); value = value.replace('%', ''); value = value.replace(',', '.'); if(value.indexOf('(') > -1 && value.indexOf(')') > -1){ value = (value.split(' '))[0]; } return value; } /* ===== Color function ===== */ function findColor(value, colorsBorders) { if (isNaN(value) || value <= colorsBorders[0]) { return color['very_bad']; } else if (value <= colorsBorders[1]) { return color['bad']; } else if (value <= colorsBorders[2]) { return color['normal']; } else if (value <= colorsBorders[3]) { return color['good']; } else if (value <= colorsBorders[4]) { return color['very_good']; } else if (value <= colorsBorders[5]) { return color['unique']; } else { return color['very_bad']; } } function colorBattles(b){ return findColor(b / 1000, [0.5, 1.5, 4, 7.5, 10, 999]); } function colorWinsPercents(wp){ return findColor(wp, [46, 48, 51, 56, 64, 100]); } function colorBattlesAvgXP(baxp) { return findColor(baxp, [1000, 1150, 1375, 1600, 1825, 9999]); } function colorWalkureRating(wr) { return findColor(wr, [609, 849, 1144, 1474, 1774, 9999]); } function colorAvgDamage(ad, alb) { return findColor(ad/(alb*10), [300, 500, 700, 850, 1000, 9999]); } function colorKillDead(kd) { return findColor(kd, [1.3, 1.7, 2.1, 2.5, 2.7, 99]); } /* ===== UserScript function ===== */ function getUserScriptDeveloperBlock(){ var html = '' + '<div class="div-link-block">' + '<span id="userscriptwotclainfo" class="link-block hide-block">' + 'UserScript WoTClanInfo ' + VersionWoWsInfo + '<div class="icon-link-block"></div>'+ '</span>' + '</div>' + '<div id="userscript-block" class="userscriptwotclainfo hide-block" style="text-align: center;">' + '<span class="userscript-developer" align="center">' + localization['userscript-developer'] + ' <a target="_blank" style="color: #658C4C; font-weight: bold; border-bottom: 1px dotted #658C4C;" href="http://worldofwarships.ru/cbt/accounts/635939-Vov_chiK/">Vov_chiK</a> ' + localization['userscript-alliance'] + ' <a target="_blank" style="color: #2CA8C7; font-weight: bold; border-bottom: 1px dotted #2CA8C7;" href="http://'+realm+'.wargaming.net/clans/search/#wgsearch&offset=0&limit=10&search=Walkure">Walkure</a> '+ '.<br /><br />' + localization['userscript-topic']+' '+ '<a target="_blank" href="'+WoWsInfoLink+'">' + WoWsInfoLinkName + '</a>' + '<br /><br />' + '<font style="font-size: 16px; color: #658C4C;">'+localization['userscript-developer-support']+'</font><br />'+ '<font style="color: #2CA8C7;">Web-Money WMR</font> R295712009837 <br />'+ '<font style="color: #2CA8C7;">Web-Money WMZ</font> Z226959724402 <br />'+ '<font style="color: #2CA8C7;">Yandex Money</font> 41001290117791 <br />'+ '<font style="color: #2CA8C7;">RBK Money</font> RU353257918 <br />'+ '</span>' + '</div>' + ''; return html; } function onViewBlock(element){ if(null != element.getAttribute('id')){ var viewId = element.getAttribute('id'); var viewClassLink = element.getAttribute('class'); var viewBlock = document.getElementsByClassName(viewId)[0]; if(viewClassLink == 'link-block hide-block'){ element.setAttribute('class', 'link-block show-block'); viewBlock.setAttribute('class', viewBlock.getAttribute('class').replace('hide-block', 'show-block')); setLocalStorage(viewId, 'show', false); }else{ element.setAttribute('class', 'link-block hide-block'); viewBlock.setAttribute('class', viewBlock.getAttribute('class').replace('show-block', 'hide-block')); setLocalStorage(viewId, 'hide', false); } } } function checkLocalStorage(){ try{ return 'localStorage' in window && window['localStorage'] !== null; }catch (e){ return false; } } function setLocalStorage(key, value, allPageHost){ if(checkLocalStorage()){ if(allPageHost){key = key+ClanId;} window.localStorage.setItem(key, value); }else{ setCookie(key, value, allPageHost); } } function getLocalStorage(key, allPageHost){ var value = null; if(checkLocalStorage()){ if(allPageHost){key = key+ClanId;} value = window.localStorage.getItem(key); }else{ value = getCookie(key); } return value; } function setCookie(c_name, value, allPageHost){ var exdate = new Date(); exdate.setDate(exdate.getDate() + 365); if(allPageHost){ var c_value = escape(value) + ((365 == null) ? "" : "; expires="+exdate.toUTCString()+"; domain=" +window.location.hostname+"; path=/"); document.cookie = c_name + "=" + c_value; }else{ var c_value = escape(value) + ((365 == null) ? "" : "; expires="+exdate.toUTCString()); document.cookie = c_name + "=" + c_value; } } function getCookie(c_name){ var c_value = document.cookie; var c_start = c_value.indexOf(" " + c_name + "="); if(c_start == -1){ c_start = c_value.indexOf(c_name + "="); } if(c_start == -1){ c_value = null; }else{ c_start = c_value.indexOf("=", c_start) + 1; var c_end = c_value.indexOf(";", c_start); if(c_end == -1){ c_end = c_value.length; } c_value = unescape(c_value.substring(c_start,c_end)); } return c_value; } function onShowMessage(title, icon, content, funcOk, OkText, viewCancel){ } function onCloseMessage(){ } function getLocalization(lang){ var localization = []; {/* Русский */ localization['ru'] = []; localization['ru']['realm'] = 'ru'; localization['ru']['Box'] = 'Оповещение'; localization['ru']['Ok'] = 'Ok'; localization['ru']['Cancel'] = 'Отмена'; localization['ru']['ErrorScript'] = 'Во время работы UserScript WoWsInfo '+VersionWoWsInfo+', возникла ошибка:'; localization['ru']['ErrorSendDeveloper'] = 'Сообщите об ошибке разработчику скрипта.'; localization['ru']['userscript-developer'] = 'Разработчик UserScript WoWsInfo:'; localization['ru']['userscript-alliance'] = 'член альянса'; localization['ru']['userscript-topic'] = 'Тема на форуме:'; localization['ru']['userscript-developer-support'] = 'Поддержать автора скрипта:'; localization['ru']['wr'] = 'Walkure Rating'; } return localization[lang]; } } /* ===== Load UserScript ===== */ function addJQuery(callback){ var script = document.createElement("script"); script.async = true; script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/2.0.1/jquery.min.js"); script.addEventListener( 'load', function(){ var script = document.createElement("script"); script.async = true; script.textContent = "window.jQ = jQuery.noConflict(true);"+ "("+callback.toString()+")();"; document.head.appendChild(script); }, false ); document.head.appendChild(script); } if(window.location.host.indexOf("worldofwarships") > -1){ addJQuery(WoWsInfo); } })(window);