// ==UserScript== // @name WoTStatScript - Tournament Teams // @version 0.9.14.0.1 // @description More info for World of Tanks tournament teams // @author Orrie // @namespace http://forum.worldoftanks.eu/index.php?/topic/263423- // @icon http://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img/icon.png // @include http://worldoftanks.eu/*/teams/*/* // @include http://worldoftanks.com/*/teams/*/* // @include http://worldoftanks.ru/*/teams/*/* // @include http://worldoftanks.asia/*/teams/*/* // @include http://worldoftanks.kr/*/teams/*/* // @grant GM_xmlhttpRequest // @connect www.wnefficiency.net // @connect api.worldoftanks.eu // @connect api.worldoftanks.ru // @connect api.worldoftanks.com // @connect api.worldoftanks.asia // @connect api.worldoftanks.kr // @license MIT License // @downloadURL none // ==/UserScript== (function () { // global vars var d = document, c = d.cookie; // get server info and webpage var wg = { srv: d.location.host.match(/\.(eu|ru|com|asia|kr)/)[1] }; // server, API and cluster settings var sc = { vers: "0.9.14.0.1", host: "http://greasyfork.org/en/scripts/13064-wotstatscript-tournament-teams", user: { wl: "http://forum.wotlabs.net/index.php?/user/1618-orrie/", wot: "http://worldoftanks.eu/community/accounts/505838943-Orrie/" }, top: { eu: "http://forum.worldoftanks.eu/index.php?showtopic=263423", na: "http://forum.worldoftanks.com/index.php?showtopic=404652" }, api: { ru: "98ca7c4fb108175b67d6505b9c3f3ebd", eu: "a7595640a90bf2d19065f3f2683b171c", com: "bf5dba0efd444d75147b6222dd903fd2", asia: "95f8713eccd322e52dbf521dbd28b19c", kr: "ffea0f1c3c5f770db09357d94fe6abfb" }, sym: ",", wn: "http://www.wnefficiency.net/exp/expected_tank_values_latest.json", loc: c.match(/hllang=(\w+)/)[1], locSup: ["en", "ru", "cs", "de", "fr", "pl", "es", "tr"], date: Date.now() }; // script threadlink sc.link = "
"; // script functions var sf = { apiInfoHnd: function (resp) { // processing information from player API var data = JSON.parse(resp).data; for (var a in data) { if (data.hasOwnProperty(a)) { var pData = data[a]; if (pData !== null) { // store stats var pDataStats = pData.statistics.all; s.user[pData.account_id].u = { name: pData.nickname, id: pData.account_id, cid: pData.clan_id, bat: pDataStats.battles, win: (pDataStats.wins/pDataStats.battles)*100, dmg: pDataStats.damage_dealt/pDataStats.battles, frag: pDataStats.frags/pDataStats.battles, spot: pDataStats.spotted/pDataStats.battles, def: pDataStats.dropped_capture_points/pDataStats.battles, wgr: pData.global_rating, lng: pData.client_language }; s.clan.win += (!isNaN(s.user[pData.account_id].u.win)) ? s.user[pData.account_id].u.win : 0; } } } sf.request(sc.api.v, sf.apiVehHnd); }, apiVehHnd: function (resp) { // processing information from vehicle API and calculate WN8 var data = JSON.parse(resp).data; for (var p in data) { if (data.hasOwnProperty(p)) { var vData = data[p]; if (vData !== null) { var rWin, rDmg, rFrag, rSpot, rDef, wn8 = 0; if (s.user[p].u.bat > 0) { for (var v in vData) { if (vData.hasOwnProperty(v)) { for (var _so=0, _so_len = statArr.length; _so<_so_len; _so++) { if (statArr[_so].IDNum == vData[v].tank_id) { var vehStat = statArr[_so], dataBattles = vData[v].statistics.battles; s.user[p].v.frag += vehStat.expFrag * dataBattles; s.user[p].v.dmg += vehStat.expDamage * dataBattles; s.user[p].v.spot += vehStat.expSpot * dataBattles; s.user[p].v.def += vehStat.expDef * dataBattles; s.user[p].v.win += vehStat.expWinRate * dataBattles; break; } } } } rWin = Math.max(((s.user[p].u.win /(s.user[p].v.win /s.user[p].u.bat)-0.71)/(1-0.71)),0); rDmg = Math.max(((s.user[p].u.dmg /(s.user[p].v.dmg /s.user[p].u.bat)-0.22)/(1-0.22)),0); rFrag = Math.max(Math.min(rDmg+0.2,((s.user[p].u.frag/(s.user[p].v.frag/s.user[p].u.bat)-0.12)/(1-0.12))),0); rSpot = Math.max(Math.min(rDmg+0.1,((s.user[p].u.spot/(s.user[p].v.spot/s.user[p].u.bat)-0.38)/(1-0.38))),0); rDef = Math.max(Math.min(rDmg+0.1,((s.user[p].u.def /(s.user[p].v.def /s.user[p].u.bat)-0.10)/(1-0.10))),0); wn8 = 980*rDmg + 210*rDmg*rFrag + 155*rFrag*rSpot + 75*rDef*rFrag + 145*Math.min(1.8,rWin); } // store wn8 and add to clan total s.user[p].wn8 = sf.color(wn8,"wn8",0); s.clan.wn8 += wn8; } } } // calculate average wn8 / winrate s.clan.wn8 = s.clan.wn8/s.clan.mem; s.clan.win = s.clan.win/s.clan.mem; sf.statInsert(); }, statInsert: function () { // insert stats and links to every post var teamTable = d.getElementsByClassName("t-table")[0]; teamTable.rows[0].cells[0].colSpan = "1"; teamTable.rows[0].appendChild(sf.elem("th", "stat-total", "WN8: "+sf.color(s.clan.wn8,"wn8",0)+"WR: "+sf.color(s.clan.win,"wr",2,"%")+"")); for (var y in s.user) { if (s.user.hasOwnProperty(y)) { var iCell = postObj.ids.indexOf(y); if (iCell >- 1) { for (var _i=0, _i_len = postObj.num[iCell].length; _i<_i_len; _i++) { var cell = postObj.cls[postObj.num[iCell][_i]], flag = sf.elem("img", "xvm-lang", "", "", "https://bytebucket.org/seriych/worldoftanksforumextendedstat.user.js/raw/tip/data/img/lang/"+s.user[y].u.lng+".png"); flag.title = s.user[y].u.lng.toUpperCase()+" Client"; if (wg.srv !== "ru") { cell.appendChild(flag); } cell.appendChild(sf.elem("div", "stat", ""+sf.color((s.user[y].u.bat > 0) ? s.user[y].u.win : 0,"wr",2,"%")+""+s.user[y].wn8+"= 1000) { output = input.toFixed(dec).toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1"+sc.sym); } for (var c in colArr) { if (colArr.hasOwnProperty(c)) { if (input >= colArr[c][colArr.id[type]]) { color = colArr[c][0]; break; } } } return ""+output+""; }, elem: function (tag, name, html, type, src) { // element creation var element = d.createElement(tag); if (name) {element.className = name;} if (html) { if (/= sc.date, // true if timestamp is less than 2 weeks old, refresh list if false. vers: sf.storage("wnExpVers", "", "get", "parse") || "" }, statArr = []; if (wn.vers[0]==sc.vers && wn.values && wn.date) { statArr = wn.values.data; } else { // add animated loading icon for progress indication var pageWrpr = d.getElementsByClassName('page-wrapper')[0], loadGif = sf.elem("div", "processing", "
"+loc[2]+" Orrie