WoTStatScript

More info for World of Tanks profile page. Updated for the new style.

当前为 2016-07-09 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WoTStatScript
  3. // @version 0.9.15.1.5
  4. // @description More info for World of Tanks profile page. Updated for the new style.
  5. // @author Orrie
  6. // @namespace http://forum.worldoftanks.eu/index.php?/topic/263423-
  7. // @icon https://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img/icon.png
  8. // @include http*://worldoftanks.eu/*/accounts/*/*
  9. // @include http*://worldoftanks.ru/*/accounts/*/*
  10. // @include http*://worldoftanks.com/*/accounts/*/*
  11. // @include http*://worldoftanks.asia/*/accounts/*/*
  12. // @include http*://worldoftanks.kr/*/accounts/*/*
  13. // @grant GM_xmlhttpRequest
  14. // @connect www.wnefficiency.net
  15. // @connect jaj22.org.uk
  16. // @connect api.worldoftanks.eu
  17. // @connect api.worldoftanks.ru
  18. // @connect api.worldoftanks.com
  19. // @connect api.worldoftanks.asia
  20. // @connect api.worldoftanks.kr
  21. // @connect clanapi-wotcs-eu.herokuapp.com
  22. // @license MIT License
  23. // ==/UserScript==
  24. (function() {
  25. // global vars
  26. var d = document, c = d.cookie, n = navigator, fragment = d.createDocumentFragment();
  27.  
  28. // get server info and webpage
  29. var wg = {host:d.location.host, href:d.location.href, clan:{}};
  30. wg.srv = wg.host.match(/\.(eu|ru|com|asia|kr)/)[1].replace(/com/,"na");
  31.  
  32. // getting userinfo and checking if own profile
  33. var profileName_header = d.getElementById('js-profile-name');
  34. wg.name = profileName_header.innerHTML;
  35. wg.id = wg.href.match(/\/(\d+)/)[1];
  36. wg.login = (c.match(/user_name=(\w+)/) || false)[1];
  37. wg.own = wg.login == wg.name;
  38.  
  39. // script variables
  40. var sc = {
  41. vers: ((GM_info) ? GM_info.script.version : ""),
  42. host: "http://greasyfork.org/scripts/661-wotstatscript",
  43. user: {
  44. wl: "http://forum.wotlabs.net/index.php?/user/1618-orrie/",
  45. wot: "http://worldoftanks.eu/community/accounts/505838943-Orrie/"
  46. },
  47. top: {
  48. eu: "http://forum.worldoftanks.eu/index.php?showtopic=263423",
  49. na: "http://forum.worldoftanks.com/index.php?showtopic=404652"
  50. },
  51. cred: { // translators
  52. cs: "<tr><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/500744969/'>Crabtr33</a></td><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/508323506/'>Ragnarocek</a></td></tr><tr><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/508904714/'>jViks</a></td></tr>" ,
  53. de: "<tr><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/504873051/'>ArtiOpa</a></td><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/501118529/'>Crakker</a></td></tr><tr><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/501072645/'>multimill</a></td><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/500373105/'>coolathlon</a></td></tr>",
  54. fr: "<tr><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/506641783/'>SuperPommeDeTerre</a></td></tr>",
  55. pl: "<tr><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/501801562/'>KeluMocy</a></td><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/504412736/'>pokapokami</a></td></tr>",
  56. es: "<tr><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/512759883/'>Frodo45127</a></td></tr>",
  57. tr: "<tr><td><a class='b-orange-arrow' href='http://worldoftanks.eu/community/accounts/500400806/'>Ufuko</a></td></tr>",
  58. ru: "<tr><td><a class='b-orange-arrow' href='http://worldoftanks.ru/community/accounts/291063/'>Bananium</a></td><td><a class='b-orange-arrow' href='http://worldoftanks.ru/community/accounts/147060/'>Minamoto</a></td></tr>"
  59. },
  60. api: {
  61. ru: "98ca7c4fb108175b67d6505b9c3f3ebd",
  62. eu: "a7595640a90bf2d19065f3f2683b171c",
  63. na: "bf5dba0efd444d75147b6222dd903fd2",
  64. asia: "95f8713eccd322e52dbf521dbd28b19c",
  65. kr: "ffea0f1c3c5f770db09357d94fe6abfb"
  66. },
  67. srv: {
  68. wl: false, // wotlabs
  69. nm: false, // noobmeter
  70. vb: false, // vbaddict
  71. ws: false, // wotstats
  72. cs: false, // wotcs
  73. wlf: false, // wot-life
  74. ct: false, // clan tools
  75. aos: false, // age of strife
  76. kttc: false, // kttc
  77. wots: false, // wots
  78. ch: false, // clan history
  79. wr: false, // wotreplays
  80. we: false // wot event stats
  81. },
  82. stat: {
  83. wn8: "http://www.wnefficiency.net/exp/expected_tank_values_latest.json",
  84. wn9: "http://jaj22.org.uk/tankdata/exp_wn9.json"
  85. },
  86. nm: {
  87. id: "orrie_js_174043" // noobmeter api id
  88. },
  89. loc: {
  90. cur: [c.match(/hllang=(\w+)/)[1], wg.href.match(/\.\w+\/([\w-]+)\//)[1]],
  91. sup: ["en", "ru", "cs", "de", "fr", "pl", "es", "tr"],
  92. miss: 0
  93. },
  94. date: {
  95. raw: new Date(),
  96. now: Date.now(),
  97. format: {ru: "ru-RU", eu: "en-GB", na: "en-US", asia: "en-AU", kr: "ko-KR"}
  98. },
  99. col: {
  100. // col wr lr bat sr hr dmg wgr wn9 wn8 wn7 eff nm
  101. sUni: [ "#5A3175", 65, 35, 30000, 50, 80, 270, 9900, 1000, 2900, 2050, 2050, 2000 ], // 99.99% super unicum
  102. uni: [ "#83579D", 60, 40, 25000, 46, 75, 240, 9000, 900, 2450, 1850, 1800, 1950 ], // 99.90% unicum
  103. gr8: [ "#3972C6", 56, 44, 21000, 42, 70, 210, 8500, 800, 2000, 1550, 1500, 1750 ], // 99.00% great
  104. vGud: [ "#4099BF", 54, 46, 17000, 38, 65, 180, 6500, 700, 1600, 1350 ], // 95.00% very good
  105. good: [ "#4D7326", 52, 48, 13000, 34, 60, 150, 5000, 600, 1200, 1100, 1200, 1450 ], // 82.00% good
  106. aAvg: [ "#849B24", 50, 50, 10000, 30, 55, 120, 4000, 500, 900 ], // 63.00% above average
  107. avg: [ "#CCB800", 48, 52, 7000, 25, 50, 90, 3000, 400, 650, 900, 900, 1250 ], // 40.00% average
  108. bAvg: [ "#CC7A00", 47, 53, 3000, 20, 45, 60, 2000, 300, 450, 700, 600, 1150 ], // 20.00% below average
  109. bas: [ "#CD3333", 46, 54, 1000, 15, 40, 30, 1500, 200, 300, 500 ], // 6.00% basic
  110. beg: [ "#930D0D", 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], // 0.00% beginner
  111. dft: [ "#6B6B6B" ], // default
  112. id: { col: 0, wr: 1, lr: 2, bat: 3, sr: 4, hr: 5, dmg: 6, wgr: 7, wn9: 8, wn8: 9, wn7: 10, eff: 11, nm: 12 } // type identifier
  113. },
  114. web: {
  115. gecko: typeof InstallTrigger !== 'undefined',
  116. opera: !!window.opera || /opera|opr/i.test(n.userAgent),
  117. chrome: !!window.chrome && !!window.chrome.webstore,
  118. safari: /constructor/i.test(window.HTMLElement)
  119. },
  120. debug: false
  121. };
  122.  
  123. // script functions
  124. var sf = {
  125. apiInfoHnd: function (resp) { // processing information from player API
  126. var data = resp.data[wg.id],
  127. allStats = data.statistics.all;
  128.  
  129. // add client language as a flag
  130. profileName_header.appendChild(sf.elem("img", "i-profile-flag", "", {src:"https://bytebucket.org/seriych/worldoftanksforumextendedstat.user.js/raw/tip/data/img/lang/"+data.client_language+".png"}));
  131.  
  132. // last battle if it exists
  133. if (data.last_battle_time) {
  134. var lastBattle_div = d.getElementById('js-lastBattle');
  135. lastBattle_div.textContent = new Date(data.last_battle_time*1000).toLocaleString(sc.date.format[wg.srv]);
  136. lastBattle_div.parentNode.parentNode.parentNode.classList.add("b-display-block");
  137. }
  138.  
  139. // ban time if it exists
  140. if (data.ban_time) {
  141. var banInfo_div = d.getElementById('js-banInfo');
  142. banInfo_div.textContent = new Date(data.ban_time*1000).toLocaleString(sc.date.format[wg.srv]);
  143. banInfo_div.parentNode.parentNode.parentNode.classList.add("b-display-block");
  144. }
  145.  
  146. // add stats in existing tables
  147. or_table.appendChild(sf.elem("tr", "", "<td class='t-dotted_minor'>"+loc[98]+"</td><td class='t-dotted_value'></td><td class='t-dotted_value'>"+allStats.tanking_factor+"</td>"));
  148. bp_table.lastElementChild.innerHTML = "<td class='t-dotted_minor'>"+loc[50]+"</td><td class='t-dotted_value'>"+sf.color(allStats.hits/allStats.shots*100, "hr", 2, "%")+"</td><td class='t-dotted_value'>"+sf.format(allStats.hits,2)+"</td>";
  149. bp_table.appendChild(sf.elem("tr", "", "<td class='t-dotted_minor'>"+loc[114]+"</td><td class='t-dotted_value'>"+sf.color(allStats.piercings/allStats.hits*100, "", 2, "%")+"</td><td class='t-dotted_value'>"+sf.format(allStats.piercings,2)+"</td>"));
  150. bp_table.appendChild(sf.elem("tr", "", "<td class='t-dotted_minor'>"+loc[97]+"</td><td class='t-dotted_value'>"+sf.format(data.statistics.trees_cut/allStats.battles,2,2)+"</td><td class='t-dotted_value'>"+sf.format(data.statistics.trees_cut,2)+"</td>"));
  151.  
  152. // add new tables for API stats
  153. var statTabMore = sf.elem("div", "b-tab-more"),
  154. newTables = [
  155. [
  156. [loc[86], d.querySelectorAll("[data-vehicle-cd='"+allStats.max_damage_tank_id+"']")[0].previousElementSibling.firstElementChild.lastElementChild.innerHTML, sf.format(allStats.max_damage,2)],
  157. [loc[87], d.querySelectorAll("[data-vehicle-cd='"+allStats.max_frags_tank_id+"']")[0].previousElementSibling.firstElementChild.lastElementChild.innerHTML, sf.format(allStats.max_frags,2)],
  158. [loc[88], d.querySelectorAll("[data-vehicle-cd='"+allStats.max_xp_tank_id+"']")[0].previousElementSibling.firstElementChild.lastElementChild.innerHTML, sf.format(allStats.max_xp,2)],
  159. [loc[89], sf.format(allStats.avg_damage_assisted,2), sf.format(allStats.avg_damage_assisted*allStats.battles,2)],
  160. [loc[90], sf.format(allStats.avg_damage_assisted_radio,2), sf.format(allStats.avg_damage_assisted_radio*allStats.battles,2)],
  161. [loc[91], sf.format(allStats.avg_damage_assisted_track,2), sf.format(allStats.avg_damage_assisted_track*allStats.battles,2)]
  162. ],
  163. [
  164. [loc[92], sf.color(100, "", 2, "%"), sf.format(allStats.direct_hits_received,2)],
  165. [loc[93], sf.color(allStats.piercings_received/allStats.direct_hits_received*100, "", 2, "%"), sf.format(allStats.piercings_received,2)],
  166. [loc[94], sf.color(allStats.no_damage_direct_hits_received/allStats.direct_hits_received*100, "", 2, "%"), sf.format(allStats.no_damage_direct_hits_received,2)],
  167. [loc[95], sf.color(allStats.explosion_hits_received/allStats.direct_hits_received*100, "", 2, "%"), sf.format(allStats.explosion_hits_received,2)],
  168. [loc[96], sf.format(allStats.avg_damage_blocked,2), sf.format(allStats.avg_damage_blocked*allStats.battles,2)],
  169. [loc[98], "", allStats.tanking_factor]
  170. ],
  171. [
  172. loc[84],
  173. loc[85]
  174. ]
  175. ];
  176. for (var _a=0, _a_len = newTables.length; _a<(_a_len-1); ++_a) {
  177. var newTable = sf.elem("div", "b-result b-result-api", "<h3>"+newTables[2][_a]+"</h3><table class='t-dotted t-dotted__fixed'></table>");
  178. for (var _ar=0, _ar_len = newTables[_a].length; _ar<_ar_len; ++_ar) {
  179. newTable.lastElementChild.appendChild(sf.elem("tr", "", "<td class='t-dotted_minor'>"+newTables[_a][_ar][0]+"</td><td class='t-dotted_value'>"+newTables[_a][_ar][1]+"</td><td class='t-dotted_value'>"+newTables[_a][_ar][2]+"</td>"));
  180. }
  181. statTabMore.appendChild(newTable);
  182. }
  183. statTabsParent.appendChild(statTabMore);
  184.  
  185. // add new tables for each gamemode
  186. var modeTables = [
  187. [
  188. ["globalmap_absolute", loc[104]],
  189. ["globalmap_champion", loc[103]],
  190. ["globalmap_middle", loc[102]]
  191. ],
  192. [
  193. ["stronghold_skirmish", loc[106]],
  194. ["stronghold_defense", loc[107]]
  195. ],
  196. [
  197. ["team", loc[108]],
  198. ["regular_team", loc[109]]
  199. ],
  200. [
  201. ["fallout", loc[111]],
  202. ["historical", loc[112]],
  203. ["company", loc[113]]
  204. ],
  205. [
  206. "clan",
  207. "strong",
  208. "team",
  209. "other"
  210. ]
  211. ];
  212. for (var _mt=0, _mt_len = modeTables.length; _mt<(_mt_len-1); ++_mt) {
  213. var newModeTab = sf.elem("div", "b-tab-"+modeTables[4][_mt]);
  214. for (var _gm=0, _gm_len = modeTables[_mt].length; _gm<_gm_len; ++_gm) {
  215. var modeStats = data.statistics[modeTables[_mt][_gm][0]],
  216. modeStatsArr = [
  217. [loc[38], "", sf.format(modeStats.battles,2)],
  218. [loc[39], sf.color(modeStats.wins/modeStats.battles*100, "wr", 2, "%"), sf.format(modeStats.wins,2)],
  219. [loc[40], sf.color(modeStats.losses/modeStats.battles*100, "lr", 2, "%"), sf.format(modeStats.losses,2)],
  220. [loc[41], sf.color(modeStats.draws/modeStats.battles*100, "", 2, "%"), sf.format(modeStats.draws,2)],
  221. [loc[42], sf.color(modeStats.survived_battles/modeStats.battles*100, "sr", 2, "%"), sf.format(modeStats.survived_battles,2)],
  222. [loc[44], sf.format(modeStats.xp/modeStats.battles,2), sf.format(modeStats.xp,2)],
  223. [loc[51], sf.format(modeStats.damage_dealt/modeStats.battles,2), sf.format(modeStats.damage_dealt,2)],
  224. [loc[98], "", sf.format(modeStats.tanking_factor,2,2)],
  225. [loc[50], "", sf.color(modeStats.hits/modeStats.shots*100, "hr", 2, "%")]
  226. ],
  227. newTableMode = sf.elem("div", "b-result b-result-api", "<h3>"+modeTables[_mt][_gm][1]+"</h3><table class='t-dotted t-dotted__fixed'></table>");
  228. for (var _ms=0, _ms_len = modeStatsArr.length; _ms<_ms_len; ++_ms) {
  229. newTableMode.lastElementChild.appendChild(sf.elem("tr", "", "<td class='t-dotted_minor'>"+modeStatsArr[_ms][0]+"</td><td class='t-dotted_value'>"+modeStatsArr[_ms][1]+"</td><td class='t-dotted_value'>"+modeStatsArr[_ms][2]+"</td>"));
  230. }
  231. newModeTab.appendChild(newTableMode);
  232. }
  233. statTabsParent.appendChild(newModeTab);
  234. }
  235. },
  236. apiVehHnd: function (resp) { // processing information from vehicle API
  237. var data = resp.data[wg.id],
  238. account = {b: 0, bRan: 0, wn9: 0, wn9nerf: 0, wn9tot: 0, wn8: 0},
  239. weight = {total: 0, used: 0, use: 0},
  240. tankList = [],
  241. tiers = ["",{b:0,w:0,wn8:0},{b:0,w:0,wn8:0},{b:0,w:0,wn8:0},{b:0,w:0,wn8:0},{b:0,w:0,wn8:0},{b:0,w:0,wn8:0},{b:0,w:0,wn8:0},{b:0,w:0,wn8:0},{b:0,w:0,wn8:0},{b:0,w:0,wn8:0}],
  242. types = {lighttank:{b:0,w:0,wn8:0},mediumtank:{b:0,w:0,wn8:0},heavytank:{b:0,w:0,wn8:0},"at-spg":{b:0,w:0,wn8:0},spg:{b:0,w:0,wn8:0},prem:{b:0,w:0,wn8:0},ten:{b:0,w:0,wn8:0},test:{b:0,w:0,wn8:0}},
  243. nations = {germany:{b:0,w:0,wn8:0,cl:"de"},usa:{b:0,w:0,wn8:0,cl:"usa"},ussr:{b:0,w:0,wn8:0,cl:"ussr"},china:{b:0,w:0,wn8:0,cl:"cn"},france:{b:0,w:0,wn8:0,cl:"fr"},uk:{b:0,w:0,wn8:0,cl:"uk"},japan:{b:0,w:0,wn8:0,cl:"ja"},czech:{b:0,w:0,wn8:0,cl:"cz"}},
  244. tierAvg = [ // from 150816 EU avgs exc scout/arty
  245. { win:0.477, dmg:88.9, frag:0.68, spot:0.90, def:0.53, cap:1.0, weight:0.40 },
  246. { win:0.490, dmg:118.2, frag:0.66, spot:0.85, def:0.65, cap:1.0, weight:0.41 },
  247. { win:0.495, dmg:145.1, frag:0.59, spot:1.05, def:0.51, cap:1.0, weight:0.44 },
  248. { win:0.492, dmg:214.0, frag:0.60, spot:0.81, def:0.55, cap:1.0, weight:0.44 },
  249. { win:0.495, dmg:388.3, frag:0.75, spot:0.93, def:0.63, cap:1.0, weight:0.60 },
  250. { win:0.497, dmg:578.7, frag:0.74, spot:0.93, def:0.52, cap:1.0, weight:0.70 },
  251. { win:0.498, dmg:791.1, frag:0.76, spot:0.87, def:0.58, cap:1.0, weight:0.82 },
  252. { win:0.497, dmg:1098.7, frag:0.79, spot:0.87, def:0.58, cap:1.0, weight:1.00 },
  253. { win:0.498, dmg:1443.2, frag:0.86, spot:0.94, def:0.56, cap:1.0, weight:1.23 },
  254. { win:0.498, dmg:1963.8, frag:1.04, spot:1.08, def:0.61, cap:1.0, weight:1.60 }
  255. ];
  256. for (var _v=0, _v_len = data.length; _v<_v_len; _v++) {
  257. var veh = {wn8:{}, wn9:{}},
  258. vehAll = data[_v].all,
  259. vehRan = data[_v].random,
  260. vehExp = false, vehExp9 = false;
  261. for (var _wn8=0, _wn8_len = wn.wn8.length; _wn8<_wn8_len; _wn8++) {
  262. if (wn.wn8[_wn8].IDNum == data[_v].tank_id) {
  263. vehExp = wn.wn8[_wn8];
  264. break;
  265. }
  266. }
  267. for (var _wn9=0, _wn9_len = wn.wn9.length; _wn9<_wn9_len; _wn9++) {
  268. if (wn.wn9[_wn9].id == data[_v].tank_id) {
  269. vehExp9 = wn.wn9[_wn9];
  270. break;
  271. }
  272. }
  273. if (vehExp && vehExp9) {
  274. if (vehAll.battles <= 0) continue; // ignore ids with 0 battle
  275.  
  276. // battles and winrate
  277. veh.bats = vehAll.battles;
  278. veh.batsRan = vehRan.battles;
  279.  
  280. // wn8 rating
  281. veh.wn8.win = Math.max((100*vehAll.wins/(veh.bats*vehExp.expWinRate)-0.71)/(1-0.71),0);
  282. veh.wn8.dmg = Math.max((vehAll.damage_dealt/(veh.bats*vehExp.expDamage)-0.22)/(1-0.22),0);
  283. veh.wn8.frag = Math.max(Math.min(veh.wn8.dmg+0.2,(vehAll.frags/(veh.bats*vehExp.expFrag)-0.12)/(1-0.12)),0);
  284. veh.wn8.spot = Math.max(Math.min(veh.wn8.dmg+0.1,(vehAll.spotted/(veh.bats*vehExp.expSpot)-0.38)/(1-0.38)),0);
  285. veh.wn8.def = Math.max(Math.min(veh.wn8.dmg+0.1,(vehAll.dropped_capture_points/(veh.bats*vehExp.expDef)-0.10)/(1-0.10)),0);
  286. veh.wn8.rat = 980*veh.wn8.dmg + 210*veh.wn8.dmg*veh.wn8.frag + 155*veh.wn8.frag*veh.wn8.spot + 75*veh.wn8.frag*veh.wn8.def + 145*Math.min(1.8,veh.wn8.win);
  287.  
  288. // wn9 rating
  289. var avg = tierAvg[vehExp9.mmrange >= 3 ? vehExp9.tier : vehExp9.tier-1];
  290. veh.wn9 = {
  291. dmg: vehRan.damage_dealt/(veh.batsRan*avg.dmg),
  292. frag: vehRan.frags/(veh.batsRan*avg.frag),
  293. spot: vehRan.spotted/(veh.batsRan*avg.spot),
  294. def: vehRan.dropped_capture_points/(veh.batsRan*avg.def),
  295. win: vehRan.wins/(veh.batsRan*avg.win)
  296. };
  297. veh.wn9.base = 0.7*veh.wn9.dmg+((veh.batsRan < 5) ? 0.14*veh.wn9.frag+0.13*Math.sqrt(veh.wn9.spot)+0.03*Math.sqrt(veh.wn9.def) : 0.25*Math.sqrt(veh.wn9.frag*veh.wn9.spot)+0.05*Math.sqrt(veh.wn9.frag*Math.sqrt(veh.wn9.def)));
  298. veh.wn9.rat = 666*(1+(veh.wn9.base/vehExp9.wn9exp-1)/vehExp9.wn9scale);
  299. veh.wn9.ratNerf = 666*(1+(veh.wn9.base/(vehExp9.wn9exp*(1+vehExp9.wn9nerf))-1)/vehExp9.wn9scale);
  300.  
  301. // store ratings
  302. var vehTier = tiers[vehExp.tier],
  303. vehType = types[vehExp.type],
  304. vehNation = nations[vehExp.nation];
  305.  
  306. // tier ratings
  307. vehTier.b += veh.bats;
  308. vehTier.wn8 += veh.wn8.rat * veh.bats;
  309. vehTier.wn9 += veh.wn9.rat * veh.batsRan;
  310. vehTier.wn9nerf += veh.wn9.ratNerf * veh.batsRan;
  311.  
  312. // type ratings
  313. vehType.b += veh.bats;
  314. vehType.wn8 += veh.wn8.rat * veh.bats;
  315.  
  316. // nation ratings
  317. vehNation.b += veh.bats;
  318. vehNation.wn8 += veh.wn8.rat * veh.bats;
  319.  
  320. // prem ratings
  321. if (vehExp.prem) {
  322. vehType = types.prem;
  323. vehType.b += veh.bats;
  324. vehType.wn8 += veh.wn8.rat * veh.bats;
  325. }
  326.  
  327. // super test ratings
  328. if (vehExp.test) {
  329. vehType = types.test;
  330. vehType.b += veh.bats;
  331. vehType.wn8 += veh.wn8.rat * veh.bats;
  332. }
  333.  
  334. // ten ratings
  335. if (vehExp.tier == 10) {
  336. vehType = types.ten;
  337. vehType.b += veh.bats;
  338. vehType.wn8 += veh.wn8.rat * veh.bats;
  339. }
  340.  
  341. // total ratings
  342. account.b += veh.bats;
  343. account.bRan += veh.batsRan;
  344. account.wn8 += veh.wn8.rat * veh.bats;
  345. account.wn9 += veh.wn9.rat * veh.bRan;
  346. account.wn9nerf += veh.wn9.ratNerf * veh.bRan;
  347.  
  348. // insert wn8 into vehicle tables
  349. var tankRows = d.getElementsByClassName('js-'+data[_v].tank_id);
  350. for (var _tr=0, _tr_len = tankRows.length; _tr<_tr_len; _tr++) {
  351. tankRows[_tr].cells[0].appendChild(sf.elem("span", "b-rating-vehicle", sf.color(veh.wn8.rat,"wn8",2,"","f")));
  352. }
  353. // push vehicle stats into array for future use
  354. tankList.push(veh);
  355. }
  356. }
  357.  
  358. // adjust tier values accordingly and insert
  359. for (var _ta=1; _ta<11; _ta++) {
  360. var tier = tiers[_ta];
  361. if (tier.b > 0) {
  362. tier.wn8 /= tier.b;
  363. d.getElementById('js-tier_'+_ta).innerHTML = sf.color(tier.wn8,"wn8",2,"","f");
  364. }
  365. }
  366.  
  367. // adjust type values accordingly and insert
  368. for (var _ty in types) {
  369. if (types.hasOwnProperty(_ty)) {
  370. var type = types[_ty];
  371. if (type.b > 0) {
  372. type.wn8 /= type.b;
  373. var typeRow = d.getElementsByClassName('b-diagram-ico__'+_ty)[0],
  374. typeTable = d.getElementsByClassName('b-tankstype-ico__'+_ty)[0].parentNode;
  375. typeTable.appendChild(sf.elem("span", "b-rating-vehicle", sf.color(type.wn8,"wn8",2,"","f")));
  376. if (typeRow) {
  377. typeRow.previousElementSibling.insertBefore(sf.elem("span", "t-diagram_rating", sf.color(type.wn8,"wn8",2,"","f")), typeRow.previousElementSibling.firstChild);
  378. }
  379. }
  380. }
  381. }
  382.  
  383. // adjust nation values accordingly and insert
  384. for (var _na in nations) {
  385. if (nations.hasOwnProperty(_na)) {
  386. var nation = nations[_na];
  387. if (nation.b > 0) {
  388. nation.wn8 /= nation.b;
  389. var natRow = d.getElementsByClassName('b-diagram-ico__'+nation.cl)[0].previousElementSibling;
  390. natRow.insertBefore(sf.elem("span", "t-diagram_rating", sf.color(nation.wn8,"wn8",2,"","f")), natRow.firstChild);
  391. }
  392. }
  393. }
  394.  
  395. // adjust wn8 and wn9 values accordingly
  396. account.wn8 /= account.b;
  397. account.wn9 /= account.bRan;
  398. account.wn9nerf /= account.bRan;
  399.  
  400. // filter out tanks less than 300 battles for account wn9
  401. for (var _w=0, _w_len = tankList.length; _w<_w_len; _w++) {
  402. tankList[_w].batsRan = Math.min(tankList[_w].batsRan, 200+(account.bRan/50));
  403. weight.total += tankList[_w].batsRan;
  404. }
  405.  
  406. // sort tanks by wn9 descending
  407. tankList.sort(function(a, b) {
  408. return b.wn9.ratNerf - a.wn9.ratNerf;
  409. });
  410.  
  411. // add up account wn9 over top 65% of battles
  412. weight.use = 0.65*weight.total;
  413. for (var _uw = 0; weight.used+tankList[_uw].batsRan <= weight.use; _uw++) {
  414. account.wn9tot += tankList[_uw].wn9.ratNerf*tankList[_uw].batsRan;
  415. weight.used += tankList[_uw].batsRan;
  416. }
  417. // last tank before cutoff uses remaining weight, not its battle count
  418. account.wn9tot += tankList[_uw].wn9.ratNerf*(weight.use-weight.used);
  419. account.wn9tot /= weight.use;
  420.  
  421. // insert new WN9
  422. d.getElementById('js-wn').innerHTML = sf.color(account.wn9tot,"wn9",2,"","f");
  423. },
  424. clan: function () { // clanBlock function
  425. wg.clan.id = cl_class.getAttribute('href').match(/\/(\d+)/)[1];
  426. wg.clan.name = cl_class.getElementsByTagName('span')[0].innerHTML.match(/[\w.+\-]+/)[0];
  427. // clan statistic links
  428. var clanStat_table_cells = [
  429. [
  430. [loc[65]],
  431. [sc.srv.wl, "<a target='_blank' href='http://wotlabs.net/"+sc.srv.wl+"/clan/"+wg.clan.name+"'>WoTLabs</a>"],
  432. [sc.srv.nm, "<a target='_blank' href='http://noobmeter.com/clan/"+sc.srv.nm+"/"+wg.clan.name+"/"+wg.clan.id+"'>Noobmeter</a>"],
  433. [sc.srv.ct, "<a target='_blank' href='http://clantools.us/servers/"+sc.srv.ct+"/clans?id="+wg.clan.id+"'>Clan Tools</a>"]
  434. ],
  435. [
  436. [""],
  437. [sc.srv.cs, "<a target='_blank' href='http://wotcs.com/clan.php?wid="+wg.clan.id+"'>WoT-CS</a>"],
  438. [sc.srv.vb, "<a target='_blank' href='http://www.vbaddict.net/clan/worldoftanks."+sc.srv.vb+"/"+wg.clan.id+"/clan-"+wg.clan.name.toLowerCase()+"'>vBAddict</a>"],
  439. (wg.srv=="ru") ? [sc.srv.kttc, "<a target='_blank' href='http://kttc.ru/clan/"+wg.clan.id+"/'>KTTC</a>"] : [sc.srv.wlf, "<a target='_blank' href='http://en.wot-life.com/"+sc.srv.wlf+"/clan/"+wg.clan.name+"-"+wg.clan.id+"/'>WoT-Life</a>"]
  440. ],
  441. [
  442. [loc[66]],
  443. [sc.srv.wr, "<a target='_blank' href='http://wotreplays."+sc.srv.wr+"/clan/"+wg.clan.name+"'>WoTReplays</a>"]
  444. ],
  445. [
  446. [sc.srv.we, loc[80]],
  447. [sc.srv.we, "<a target='_blank' href='http://wotevent.guildity.com/clans/"+wg.clan.name+"/'>WoT Event Stats</a>"]
  448. ]
  449. ];
  450. sf.links(clanStat_table, clanStat_table_cells, "table");
  451. clanBlock.appendChild(clanStat_table);
  452. },
  453. medals: function () { // special medals function
  454. if (medalSpecial_class) {
  455. var medals = medalSpecial_class.getElementsByTagName('li'),
  456. medalsFull = Math.floor(medals.length/12)*12,
  457. medalsRest = 12-(medals.length-medalsFull),
  458. medalsHelper = medals[medalsFull];
  459. if (medalsRest !== 12) {
  460. medalsHelper.style.marginLeft = (medalsRest*37.5)+"px";
  461. }
  462. }
  463. },
  464. format: function (input, type, dec) { // input and output formatting
  465. var inputReg = new RegExp("\\"+loc[0], "g");
  466. switch(type) {
  467. case (1): // input string into number
  468. return parseFloat(input.replace(inputReg,"").replace(",","."));
  469. case (2): // output number with locale symbol
  470. if (isNaN(input)) {return 0;}
  471. dec = dec ? dec : 0;
  472. input = input.toFixed(dec).toString().replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1"+loc[0]);
  473. return (loc[0] !== "," && dec !== 0) ? input.replace(/\.(\d+)*$/g,",$1") : input;
  474. default:
  475. console.error("Error filtering: ", input);
  476. return input;
  477. }
  478. },
  479. color: function (input, type, dec, sym, ext) { // color formatting
  480. if (isNaN(input)) {return 0;}
  481. var color, output = input.toFixed(dec);
  482. if (type == "dmg") {
  483. output = sf.format(ext,2,0);
  484. }
  485. else if (input >= 1000) {
  486. output = sf.format(input,2,dec);
  487. }
  488. if (type !== "") {
  489. if (s.h[type] && ext !== "f") {
  490. color = s.h[type];
  491. }
  492. else {
  493. for (var _c in sc.col) {
  494. if (sc.col.hasOwnProperty(_c)) {
  495. if (type == "lr") {
  496. if (input <= sc.col[_c][sc.col.id[type]]) {
  497. color = sc.col[_c][0]; break;
  498. }
  499. }
  500. else {
  501. if (input >= sc.col[_c][sc.col.id[type]]) {
  502. color = sc.col[_c][0]; break;
  503. }
  504. }
  505. }
  506. }
  507. if (sym !== "%") {
  508. s.h[type] = color;
  509. }
  510. }
  511. }
  512. if (loc[0] !== "," && dec !== 0) {
  513. output = output.replace(/\.(\d+)*$/g,",$1");
  514. }
  515. if (sym) {
  516. output += sym;
  517. }
  518. return "<span style='color:"+color+"'>"+output+"</span>";
  519. },
  520. elem: function (tag, name, html, extra) { // element creation
  521. var element = d.createElement(tag);
  522. if (name) {
  523. element.className = name;
  524. }
  525. if (html) {
  526. if (/</.test(html)) {
  527. element.innerHTML = html;
  528. }
  529. else {
  530. element.textContent = html;
  531. }
  532. }
  533. if (extra) {
  534. for (var _e in extra) {
  535. if (extra.hasOwnProperty(_e)) {
  536. element[_e] = extra[_e];
  537. }
  538. }
  539. }
  540. return element;
  541. },
  542. settings: function (name, text) { // script menu handler
  543. var setItem = sf.elem("li", "b-settingItem"),
  544. setDiv = sf.elem("div", "b-settingParent b-"+name, "<a>"+text+"</a>");
  545. switch(name) {
  546. case ("wnRefresh"):
  547. setDiv.addEventListener('click', function() {localStorage.removeItem("wnExpValues"); localStorage.removeItem("wn9ExpValues"); location.reload();}, false);
  548. break;
  549. case ("copyClipboard"):
  550. setDiv.addEventListener('click', function() {window.prompt(loc[63], d.getElementById('js-clipBoard').innerHTML);}, false);
  551. break;
  552. default: break;
  553. }
  554. setItem.appendChild(setDiv);
  555. return setItem;
  556. },
  557. links: function (parent, links, type) { // statistic links handler
  558. var linksFragment = d.createDocumentFragment();
  559. for (var _l=0, _l_len = links.length; _l<_l_len; ++_l) {
  560. switch(type) {
  561. case ("table"):
  562. var link = sf.elem("tr");
  563. for (var _lr=0, _lr_len = links[_l].length; _lr<_lr_len; ++_lr) {
  564. link.appendChild((links[_l][_lr][0] && links[_l][_lr][1]) ? sf.elem("td", "", links[_l][_lr][1]) : sf.elem("td", "", links[_l][_lr][0]));
  565. }
  566. linksFragment.appendChild(link);
  567. break;
  568. case ("list"):
  569. if (links[_l] instanceof HTMLElement) {
  570. linksFragment.appendChild(links[_l]);
  571. }
  572. else {
  573. linksFragment.appendChild((links[_l][0] && links[_l][1]) ? sf.elem("li", "", links[_l][1]) : sf.elem("li", "statname", links[_l][0]));
  574. }
  575. break;
  576. default: break;
  577. }
  578. }
  579. parent.appendChild(linksFragment);
  580. },
  581. tabs: function (elem) { // statistic tabs handler
  582. var tab = elem.target.parentNode;
  583. if (!tab.classList.contains("js-tabs__active")) {
  584. d.getElementsByClassName('b-statistics-wrpr')[0].getElementsByClassName('js-tabs__active')[0].classList.remove('js-tabs__active');
  585. tab.classList.add("js-tabs__active");
  586. d.getElementsByClassName('js-stat_active')[0].classList.remove("js-stat_active");
  587. d.getElementsByClassName(tab.getAttribute('data-ref'))[0].classList.add("js-stat_active");
  588. }
  589. },
  590. storage: function (name, data, type, mode) { // localstorage handler
  591. var storage;
  592. switch(type) {
  593. case ("set"):
  594. if (mode == "string") {
  595. data = JSON.stringify(data);
  596. }
  597. storage = localStorage.setItem(name, data);
  598. break;
  599. case ("get"):
  600. storage = localStorage.getItem(name);
  601. if (mode == "parse") {
  602. storage = JSON.parse(storage);
  603. }
  604. break;
  605. default: break;
  606. }
  607. return storage;
  608. },
  609. stat: {
  610. wn8: function (resp) { // wnefficiency.net/exp/expected_tank_values_latest.json handler
  611. wn.run++;
  612. sf.storage("wnExpValues", resp, "set", "string");
  613. sf.storage("wnExpDate", sc.date.now, "set");
  614. if (wn.run == 2) {
  615. sf.storage("wnExpVers", sc.vers, "set");
  616. location.reload();
  617. }
  618. },
  619. wn9: function (resp) { // jaj22.org.uk/tankdata/exp_wn9.json handler
  620. wn.run++;
  621. sf.storage("wn9ExpValues", resp, "set", "string");
  622. if (wn.run == 2) {
  623. sf.storage("wnExpVers", sc.vers, "set");
  624. location.reload();
  625. }
  626. }
  627. },
  628. ch: { // clan history handler
  629. hnd: function (resp) {
  630. var history = resp.changes, _h_len = history.length, clansCount = 0, prevClan,
  631. clanHistFragment = d.createDocumentFragment();
  632. clanHist_div.lastElementChild.classList.add("b-display-none");
  633. if (_h_len > 0) {
  634. for (var _h=_h_len-1; _h>=0; --_h) {
  635. clansCount ++;
  636. if (!!history[_h].clan_tag && prevClan !== history[_h].clan_tag && (clansCount == 1 || history[_h].joined)) {
  637. var clanHist_span = sf.elem("span", (history[_h].clan_tag == wg.clan.name) ? "clantag curr" : "clantag", "<a href='http://"+sc.srv.ch+".wargaming.net/clans/"+history[_h].clan_id+"/' target='_blank'>["+history[_h].clan_tag+"]</a>");
  638. clanHistFragment.appendChild(clanHist_span);
  639. prevClan = history[_h].clan_tag;
  640. }
  641. }
  642. if (wg.clan.name && prevClan !== wg.clan.name) {
  643. clanHistFragment.appendChild(sf.elem("span", "clantag curr", "<a href='http://"+sc.srv.ch+".wargaming.net/clans/"+wg.clan.id+"/' target='_blank'>["+wg.clan.name+"]</a>"));
  644. }
  645. clanHist_div.appendChild(clanHistFragment);
  646. }
  647. else {
  648. clanHist_div.appendChild(sf.elem("span", "clantag", loc[75]));
  649. }
  650. },
  651. error: function () {
  652. clanHist_div.appendChild(sf.elem("span", "", loc[76]));
  653. }
  654. },
  655. request: function (name, api, handler, error) { // request handler
  656. GM_xmlhttpRequest({
  657. method: "GET",
  658. url: api,
  659. headers: {
  660. "Accept": "application/json"
  661. },
  662. onload: function(resp) {
  663. var data = JSON.parse(resp.responseText);
  664. if (resp.status == 200) {
  665. if (sc.debug) {console.info(name, data);}
  666. handler(data);
  667. }
  668. else {
  669. console.error("Error:", name, api, resp);
  670. if (error) {error();}
  671. }
  672. },
  673. onerror: function(resp) {
  674. console.error("Error:", name, api, resp);
  675. if (error) {error();}
  676. }
  677. });
  678. }
  679. };
  680.  
  681. // make sure correct localization is displayed, and reload page with user language if not
  682. if (sc.loc.cur[0] == sc.loc.cur[1]) {
  683. sc.loc.cur = sc.loc.cur[0];
  684. }
  685. else {
  686. sc.loc.cur = sc.loc.cur[0];
  687. window.location.href = "http://"+wg.host+"/"+sc.loc.cur+"/community/accounts/"+wg.id+"-"+wg.name+"/";
  688. }
  689.  
  690. // fetch wnefficiency values - check if array exists in localStorage, otherwise fetch and reload page
  691. var wn = {
  692. wn8: sf.storage("wnExpValues", "", "get", "parse"),
  693. wn9: sf.storage("wn9ExpValues", "", "get", "parse"),
  694. date: sf.storage("wnExpDate", "", "get", "parse")+12096e5 >= sc.date.now, // true if timestamp is less than 2 weeks old, refresh list if false.
  695. vers: [sf.storage("wnExpVers", "", "get")],
  696. run: 0
  697. };
  698. if (wn.vers[0] == sc.vers && (wn.wn8 && wn.wn9) && wn.date) {
  699. wn.vers.push(wn.wn8.header.version, wn.wn9.header.version);
  700. wn.wn8 = wn.wn8.data;
  701. wn.wn9 = wn.wn9.data;
  702. }
  703. else {
  704. // add animated loading icon for progress indication
  705. var pageWrpr = d.getElementsByClassName('page-wrapper')[0],
  706. loadGif = sf.elem("div", "processing", "<div class='processing_loader'><img src='http://eu.wargaming.net/clans/static/2.2.8/images/processing/loader.gif' alt='Processing...'></div>");
  707. pageWrpr.appendChild(loadGif);
  708. sf.request("wn8Data", sc.stat.wn8, sf.stat.wn8);
  709. sf.request("wn9Data", sc.stat.wn9, sf.stat.wn9);
  710. }
  711.  
  712. // inserting style into head
  713. var style = sf.elem("style", "wotstatscript", "", {type:"text/css"}),
  714. styleText = [
  715. // processing loader rules
  716. ".processing {width: 100%; height: 100%; position: fixed; top: 0; left: 0; z-index: 500; background: url(http://eu.wargaming.net/clans/static/2.2.9/images/processing/processing_overlay-pattern.png);}",
  717. ".processing_loader {width: 56px; height: 54px; position: absolute; top: 50%; left: 50%; margin-top: -27px; margin-left: -28px;}",
  718. // settings menu rules
  719. "#common_menu .menu-settings {color: #7C7E80; display: inline-block;}",
  720. "#common_menu .menu-settings .cm-user-menu-link {margin: 0 10px 0 0;}",
  721. "#common_menu .menu-settings .cm-user-menu-link_cutted-text {max-width: unset;}",
  722. "#common_menu .menu-settings .cm-user-menu {min-width: 200px; padding: 15px;}",
  723. "#common_menu .menu-settings .cm-parent-link:hover {cursor: pointer;}",
  724. "#common_menu .menu-settings .b-settingItem {margin: 6px 0px; text-align: center;}",
  725. "#common_menu .menu-settings label {display: table; line-height: normal; cursor: pointer; margin: 0 auto;}",
  726. "#common_menu .menu-settings .l-box {display: none;}",
  727. "#common_menu .menu-settings .b-checkbox {height: 16px; width: 16px; float: left; margin-right: 5px;}",
  728. "#common_menu .menu-settings .b-checkbox span {height: 16px; width: 16px;}",
  729. "#common_menu .menu-settings .b-combobox-label__checked {color: #DCDCDC;}",
  730. "#common_menu .menu-settings .b-settingItem .b-combobox-label:hover {color: #DCDCDC;}",
  731. "#common_menu .menu-settings .b-settingItem .b-combobox-label:hover .b-checkbox {background-position: 0px -34px; box-shadow: 0px 0px 10px 1px rgba(191, 166, 35, 0.15), 0px 0px 3px 1px rgba(191, 166, 35, 0.25);}",
  732. "#common_menu .menu-settings .b-settingItem .b-combobox-label:hover .b-checkbox.b-checkbox__checked {background-position: 0px -68px;}",
  733. "#common_menu .menu-settings textarea.l-textarea {background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); border-radius: 2px; color: #FFFFFF; line-height: normal; padding: 5px; min-height: 50px; margin: 5px 0 5px 0; min-width: 175px;}",
  734. "#common_menu .menu-settings textarea::-webkit-input-placeholder {color: #FFFFFF;}",
  735. "#common_menu .menu-settings textarea::-moz-placeholder {color: #FFFFFF;}",
  736. "#common_menu .menu-settings .b-settingParent {line-height: 26px;}",
  737. "#common_menu .menu-settings .b-settingParent a {cursor: pointer; color: #B1B2B3; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.5);}",
  738. "#common_menu .menu-settings .b-settingParent a:hover {color: #FFFFFF; text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.75); text-decoration: underline;}",
  739. "#common_menu .menu-settings .settingCredits {margin: 2px 0px;}",
  740. "#common_menu .menu-settings .settingCredits h1 {color: #B1B2B3;}",
  741. "#common_menu .menu-settings .settingCredits table {font-size: 12px; margin: 0 auto; width: unset;}",
  742. "#common_menu .menu-settings .settingCredits table td {padding: 0 5px;}",
  743. "#common_menu .menu-settings .settingCredits p {font-size: 12px; padding: 2px 0;}",
  744. "#common_menu .menu-settings .settingCredits .b-orange-arrow {color: #F25322; line-height: 14px; padding-right: 9px;}",
  745. "#common_menu .menu-settings .settingCredits .b-orange-arrow:hover {color: #FF7432;}",
  746. "#common_menu .menu-settings .settingCredits.settingSeperator {border-top: 1px dashed #212123; margin-top: 6px; padding-top: 12px;}",
  747. "#common_menu .menu-settings .settingCredits.settingLinks {margin: 5px 0;}",
  748. "#common_menu .menu-settings .settingCredits.settingLinks a {margin: 0 5px;}"
  749. ];
  750. d.head.appendChild(style);
  751.  
  752. // localization
  753. var loc = [
  754. { i:0, en: ",", ru: " ", cs: " ", de: ".", fr: " ", pl: " ", es:".", tr: "."}, // thousands separator
  755. { i:1, en: "Go to Bottom", ru: "Пролистать вниз", cs: "Konec stránky", de: "nach unten", fr: "Aller à la fin", pl: "Koniec strony", es: "Ir al final", tr: "Aşağı İn"},
  756. { i:2, en: "Go to Top", ru: "Пролистать наверх", cs: "Začátek stránky", de: "nach oben", fr: "Aller au début", pl: "Początek strony", es: "Ir al principio", tr: "Yukarı Çık"},
  757. { i:3, en: "Days Ago", ru: "Дней назад", cs: "dnů", de: "Tage in WOT aktiv", fr: "jours", pl: "Dni temu", es: "Días", tr: "Gün Önce"},
  758. { i:4, en: "Player Stats:", ru: "Статистика игрока:", cs: "Stat. hráče:", de: "Spielerstatistik", fr: "Statistiques du joueur:", pl: "Statystyki gracza:", es: "Estadísticas del jugador:", tr: "Oyuncu Statları"},
  759. { i:5, en: "Signature:", ru: "Подпись:", cs: "Podpis:", de: "Forumsignatur", fr: "Signature:", pl: "Sygnatura do forum:", es: "Firma", tr: "İmza"},
  760. { i:6, en: "Light", ru: "Светлые тона", cs: "Světlý", de: "Signatur Weiß", fr: "Claire", pl: "Jasna", es: "Clara", tr: "Açık"},
  761. { i:7, en: "Dark", ru: "Тёмные тона", cs: "Tmavý", de: "Signatur Schwarz", fr: "Foncée", pl: "Ciemna", es: "Oscura", tr: "Koyu"},
  762. { i:8, en: "Replays:", ru: "Реплеи:", cs: "Záznamy:", de: "Replays", fr: "Replays:", pl: "Powtórki:", es: "Repeticiones:", tr: "Replayler"},
  763. { i:9, en: "Victories", ru: "Победы", cs: "Vítězství", de: "Siege", fr: "Victoires", pl: "Zwycięstw", es: "Victorias", tr: "Zaferler"},
  764. { i:10, en: "Battles Participated", ru: "Участий в битвах", cs: "Počet bitev", de: "Gefechte geführt", fr: "Batailles participées", pl: "Bitew", es: "Batallas jugadas", tr: "Savaş Katılımı"},
  765. { i:11, en: "Average Experience", ru: "Средний опыт", cs: "Průměrné zkušenosti", de: "Durchnittl. Erfahrung", fr: "Expérience moyenne", pl: "Średnie doświadczenie", es: "Experiencia media", tr: "Ortalama Deneyim"},
  766. { i:12, en: "Average Tier", ru: "Средний уровень танка", cs: "Průměrný Tier", de: "Durchschnittl. Stufe", fr: "Tiers moyen", pl: "Średni poziom pojazdu", es: "Tier medio", tr: "Ortalama Seviye"},
  767. { i:13, en: "Win/Loss Ratio", ru: "Отношение Победы/Поражения", cs: "Poměr vítězství/porážek", de: "Verhältnis Siege/ Niederlagen", fr: "Ratio Victoires/Défaites", pl: "Zwycięstwa/porażki", es: "Ratio de victorias/derrotas", tr: "Zafer/Kayıp Oranı"},
  768. { i:14, en: "Performance Ratings", ru: "Рейтинги производительности", cs: "Hodnocení bojového výkonu", de: "Leistungsverhältnis", fr: "Indices de performances", pl: "Statystyki wydajności", es: "Ratios de rendimiento", tr: "Performans Değerleri"},
  769. { i:15, en: "Fetching...", ru: "Загрузка...", cs: "Načítám...", de: "abrufen...", fr: "Récupération...", pl: "Pobieranie...", es: "Recuperando...", tr: "Getiriliyor..."},
  770. { i:16, en: "Performance Rating Calculations", ru: "Вычисления рейтинга производительности", cs: "Výpočet hodnocení bojového výkonu", de: "Leistungsberechnung", fr: "Calculs des indicateurs de performances", pl: "Obliczenia statystyk wydajności", es: "Cálculos del ratio de rendimiento", tr: "Performans Değeri Hesaplamaları"},
  771. { i:17, en: "Formula Type", ru: "Тип формулы", cs: "Typ výpočtu", de: "Formel", fr: "Type de formule", pl: "Formuła", es: "Tipo de fórmula", tr: "Formül Tipi"},
  772. { i:18, en: "Total", ru: "Всего", cs: "Celkem", de: "Gesamt", fr: "Total", pl: "Wynik", es: "Total", tr: "Toplam"},
  773. { i:19, en: "Scaled", ru: "Шкала", cs: "Stupnice", de: "Skaliert", fr: "A l'échelle", pl: "Skalowanie", es: "Escala", tr: "Ölçek"},
  774. { i:20, en: "Destroyed", ru: "Уничтожено", cs: "Zničeno", de: "Zerstört", fr: "Détruits", pl: "Fragi", es: "Destruidos", tr: "imha"},
  775. { i:21, en: "Damage", ru: "Урон", cs: "Poškození", de: "Schaden", fr: "Dommages", pl: "Obrażenia", es: "Daño", tr: "Hasar"},
  776. { i:22, en: "Detected", ru: "Обнаружено", cs: "Detekováno", de: "Aufgeklärt", fr: "Détectés", pl: "Wykrycia", es: "Detectados", tr: "Tespit"},
  777. { i:23, en: "Capping", ru: "Захват", cs: "Obsazení", de: "Erobert", fr: "Capture", pl: "Zdobycie bazy", es: "Capturando", tr: "İşgal"},
  778. { i:24, en: "Defense", ru: "Оборона", cs: "Obrana", de: "Verteidigt", fr: "Défense", pl: "Obrona bazy", es: "Defendiendo", tr: "Savunma"},
  779. { i:25, en: "Victories", ru: "Победы", cs: "Vítězství", de: "Siege", fr: "Victoires", pl: "Zwycięstwa", es: "Victorias", tr: "Zaferler"},
  780. { i:26, en: "WN9", ru: "WN9", cs: "WN9", de: "WN9", fr: "WN9", pl: "WN9", es: "WN9", tr: "WN9", f:1},
  781. { i:27, en: "WN8", ru: "WN8", cs: "WN8", de: "WN8", fr: "WN8", pl: "WN8", es: "WN8", tr: "WN8", f:1},
  782. { i:28, en: "WN7", ru: "WN7", cs: "WN7", de: "WN7", fr: "WN7", pl: "WN7", es: "WN7", tr: "WN7", f:1},
  783. { i:29, en: "Efficiency", ru: "Эффективность", cs: "Efektivita", de: "Effizienz", fr: "Efficacité", pl: "Efficiency", es: "Eficiencia", tr: "Efficiency", f:1},
  784. { i:30, en: "NoobMeter", ru: "NoobMeter", cs: "NoobMeter", de: "NoobMeter", fr: "NoobMeter", pl: "NoobMeter", es: "NoobMeter", tr: "NoobMeter", f:1},
  785. { i:31, en: "What is WN Efficiency?", ru: "Что такое WN эффективность?", cs: "Co je WN hodnocení?", de: "Was bedeutet WN Effizienz", fr: "Qu'est que l'efficacité WN ?", pl: "Czym jest statystyka wydajności WN?", es: "¿Qué es la eficiencia WN?", tr: "WN Efficiency Nedir?"},
  786. { i:32, en: "Ace Tanker", ru: "Мастер", cs: "Hrdina", de: "Panzer Ass", fr: "As du char", pl: "As Pancerny", es: "As de tanques", tr: "Tank Ası"},
  787. { i:33, en: "1st Class", ru: "1 степень", cs: "1. třídy", de: "1ter Klasse", fr: "Classe 1", pl: "Pierwsza Klasa", es: "Clase I", tr: "1. Sınıf"},
  788. { i:34, en: "2nd Class", ru: "2 степень", cs: "2. třídy", de: "2ter Klasse", fr: "Classe 2", pl: "Druga Klasa", es: "Clase II", tr: "2. Sınıf"},
  789. { i:35, en: "3rd Class", ru: "3 степень", cs: "3. třídy", de: "3ter Klasse", fr: "Classe 3", pl: "Trzecia Klasa", es: "Clase III", tr: "3. Sınıf"},
  790. { i:36, en: "No Badge", ru: "Нет значка", cs: "Nezískáno", de: "kein Orden", fr: "Aucun badge", pl: "Bez odznaki", es: "Sin medalla", tr: "Rozetsiz"},
  791. { i:37, en: "Total Vehicles", ru: "Общее количество танки", cs: "Celkem vozidel", de: "Alle Fahrzeuge", fr: "Nombre total de véhicules", pl: "Całkowita liczba pojazdów", es: "Total de vehículos", tr: "Toplam Araçlar"},
  792. { i:38, en: "Battles Participated", ru: "Участий в битвах", cs: "Počet bitev", de: "An Gefechten teilgenommen", fr: "Batailles participées", pl: "Bitwy", es: "Batallas jugadas", tr: "Savaş Katılımı"},
  793. { i:39, en: "Victories", ru: "Победы", cs: "Vítězství", de: "Siege", fr: "Victoires", pl: "Zwycięstwa", es: "Victorias", tr: "Zaferler"},
  794. { i:40, en: "Defeats", ru: "Поражения", cs: "Porážek", de: "Niederlagen", fr: "Défaites", pl: "Porażki", es: "Derrotas", tr: "Yenilgiler"},
  795. { i:41, en: "Draws", ru: "Ничья", cs: "Remíza", de: "Unentschieden", fr: "Egalités", pl: "Remisy", es: "Empates", tr: "Beraberlikler"},
  796. { i:42, en: "Battles Survived", ru: "Битв пережито", cs: "Přežito bitev", de: "Gefechte überlebt", fr: "Batailles survécues", pl: "Przetrwane bitwy", es: "Batallas como superviviente", tr: "Hayatta Kalma"},
  797. { i:43, en: "Average Battles per Day", ru: "Среднее число битв за день", cs: "Průměrný počet bitev za den", de: "Durschnittliche Gefechte pro Tag", fr: "Nombre moyen de batailles par jour", pl: "Średnia bitew na dzień", es: "Media de batallas por día", tr: "Günlük Ortalama Savaş"},
  798. { i:44, en: "Experience", ru: "Опыт", cs: "Zkušenosti", de: "Erfahrung", fr: "Expérience", pl: "Doświadczenie", es: "Experiencia", tr: "Deneyim"},
  799. { i:45, en: "Average Experience per Battle", ru: "Средний опыт за битву", cs: "Průměrné zkušenosti za bitvu", de: "Durchschnittserfahrung", fr: "Expérience moyenne par bataille", pl: "Średnie doświadczenie na bitwę", es: "Experiencia media por batalla", tr: "Savaş Başına Ortalama Deneyim"},
  800. { i:46, en: "Maximum Experience per Battle", ru: "Максимальный опыт за битву", cs: "Maximální zkušenosti za bitvu", de: "Höchste Gefechtserfahrung", fr: "Expérience maximum par bataille", pl: "Maksymalne doświadczenie na bitwę", es: "Experiencia máxima por batalla", tr: "Savaş Başına Maksimum Deneyim"},
  801. { i:47, en: "Destroyed", ru: "Уничтожено", cs: "Zničeno", de: "Zerstört", fr: "Détruits", pl: "Zniszczeni przeciwnicy", es: "Destruidos", tr: "İmhalar"},
  802. { i:48, en: "Deaths", ru: "Смертей", cs: "Nepřežil", de: "Tode", fr: "Morts", pl: "Zniszczony", es: "Muertes", tr: "Ölümler"},
  803. { i:49, en: "Detected", ru: "Обнаружено", cs: "Detekováno", de: "Aufgeklärt", fr: "Détectés", pl: "Wykrytych", es: "Detectados", tr: "Tespitler"},
  804. { i:50, en: "Hit Ratio", ru: "Коэффициент попаданий", cs: "Přesnost střelby", de: "Trefferquote", fr: "Ratio de hit", pl: "Celność", es: "Ratio de impactos", tr: "İsabet Oranı"},
  805. { i:51, en: "Damage Caused", ru: "Урона нанесено", cs: "Udělené poškození", de: "Schaden verursacht", fr: "Dommages causés", pl: "Zadane obrażenia", es: "Daño causado", tr: "Yapılan Hasar"},
  806. { i:52, en: "Damage Received", ru: "Урона получено", cs: "Přijaté poškození", de: "Schaden erhalten", fr: "Dommages reçus", pl: "Otrzymane obrażenia", es: "Daño recibido", tr: "Alınan Hasar"},
  807. { i:53, en: "Base Capture Points", ru: "Очки захвата", cs: "Bodů obsazení základny", de: "Eroberungspunkte", fr: "Points de capture de base", pl: "Punkty przejęcia bazy", es: "Puntos de captura", tr: "Bölge İşgali Puanı"},
  808. { i:54, en: "Base Defense Points", ru: "Очки обороны", cs: "Bodů obrany základny", de: "Verteidigungspunkte", fr: "Points de défense de base", pl: "Punkty obrony bazy", es: "Puntos de defensa", tr: "Bölge Savunması Puanı"},
  809. { i:55, en: "Average Tier", ru: "Средний уровень", cs: "Průměrný Tier", de: "Durchschnittliche Stufe", fr: "Tiers moyen", pl: "Średni poziom pojazdów", es: "Tier media", tr: "Ortalama Seviye"},
  810. { i:56, en: "Vehicle Tiers", ru: "Уровни техники", cs: "Tiery vozidel", de: "Fahrzeuge Stufe", fr: "Tiers du véhicule", pl: "Poziomy czołgów", es: "Tier de los vehículos:", tr: "Araç Seviyeleri"},
  811. { i:57, en: "Tier", ru: "Уровень", cs: "Tier", de: "Stufe", fr: "Tiers", pl: "Poziom", es: "Tier", tr: "Seviye", f:1},
  812. { i:58, en: "Total Vehicles:", ru: "Количество техники:", cs: "Celkem vozidel:", de: "Gesamt Fahrzeuge", fr: "Nombre total de véhicules:", pl: "Całkowita liczba pojazdów:", es: "Total de vehículos:", tr: "Toplam Araçlar"},
  813. { i:59, en: "Tankopedia", ru: "Танковедение", cs: "Tankpédie", de: "Tankopedia", fr: "Tankopedia", pl: "Tankopedia", es: "Tankopedia", tr: "Tankopedia", f:1},
  814. { i:60, en: "Tank Statistics", ru: "Статистика танка", cs: "Statistiky vozidel", de: "Panzer Statistik", fr: "Statistiques des chars", pl: "Statystyki czołgu", es: "Estadísticas de tanques", tr: "Tank İstatistikleri"},
  815. { i:61, en: "Premium Tanks", ru: "Премиум танки", cs: "Premium tanky", de: "Premium Panzer", fr: "Chars premiums", pl: "Czołgi premium", es: "Tanques premium", tr: "Premium Tanklar"},
  816. { i:62, en: "Copy stats to Clipboard", ru: "Скопировать в буфер обмена", cs: "Kopírovat Stat. do schránky", de: "Statistiken in Zwischenablage kopieren", fr: "Copier les statistiques vers le presse-papiers", pl: "Kopiuj statystyki do schowka", es: "Copiar estadísticas al portapapeles", tr: "İstatistikleri Panoya Kopyala"},
  817. { i:63, en: "Press Ctrl+C, or Right-Click and Copy", ru: "Нажмите Ctrl+C или ПКМ и Скопировать", cs: "Stiskni Ctrl+C, nebo klikni pravým tl. myši a vyber Kopírovat", de: "STRG+C/ rechter Mausklick und Kopieren", fr: "Appuyez sur Ctrl+C, ou clic droit et Copier", pl: "Naciśnij Ctrl+C, lub prawy klawisz myszy i 'Kopiuj'", es: "Presiona Ctrl+C, o haz clic derecho y pulsa Copiar.", tr: "Ctrl+C Tuşuna Bas, veya Sağ Tıkla ve Kopyala"},
  818. { i:64, en: "WoTStatScript not active, because of player having 0 battles", ru: "Скрипт неактивен, т.к. у игрока 0 битв", cs: "WoTStatScript není aktivní, protože hráč má 0 bitev", de: "WoTStatScript inaktiv wegen fehlender Gefechte", fr: "WoTStatScript n'est pas actif, car le joueur a 0 batailles", pl: "WoTStatScript nieaktywny, ponieważ gracz rozegrał 0 bitew", es: "El script WoTStat no está activo, porque el jugador no ha jugado ninguna batalla.", tr: "WoTStat Scipt aktif değil, çünkü oyuncunun 0 savaşı var."},
  819. { i:65, en: "Clan Stats:", ru: "Статистика клана:", cs: "Stat. klanu:", de: "Clanstatistiken", fr: "Statistiques du clan:", pl: "Statystyki klanu:", es: "Estadísticas del clan:", tr: "Klan İstatistikleri"},
  820. { i:66, en: "Replays:", ru: "Реплеи:", cs: "Záznamy:", de: "Replays", fr: "Replays:", pl: "Powtórki:", es: "Repeticiones:", tr: "Replayler"},
  821. { i:67, en: "Tier 10 Tanks", ru: "Уровень 10 Только", cs: "Pouze Tier 10", de: "nur Stufe 10", fr: "Seulement les tiers 10", pl: "Tylko 10 tier", es: "Sólo tier 10", tr: "Seviye 10 Tanklar"},
  822. { i:68, en: "Battles missing from API, ratings may be inaccurate", ru: "Отсутствует Battles от API, рейтинги могут быть неточными", cs: "Některé bitvy se z API nenačetly, hodnocení může být nepřesné", de: "Fehlende API Gefechtsdaten, Bewertungen können ungenau sein", fr: "Des batailles manquent de l'API, les indices peuvent être faussés", pl: "Brakujące bitwy, obliczenia mogą być niedokładne", es: "Faltan batallas desde la API, por lo que los ratios pueden no ser muy precisos.", tr: "Savaş bilgileri eksik, hesaplamalar hatalı olabilir."},
  823. { i:69, en: "Hit Ratio", ru: "Коэффициент попаданий", cs: "Přesnost střelby", de: "Trefferquote", fr: "Ratio de hit", pl: "Celność", es: "Ratio de impacto", tr: "İsabet Oranı"},
  824. { i:70, en: "Average Damage", ru: "Средний Урона", cs: "Průměrné poškození", de: "Durchschnittlicher Schaden", fr: "Dommages moyens", pl: "Średnie obrażenia", es: "Daño medio", tr: "Ortalama Hasar"},
  825. { i:71, en: "Stats for", ru: "Cтатистика для", cs: "Statistika hráče", de: "Statistik für", fr: "Statistiques pour ", pl: "Statystyki z", es: "Estadísticas para", tr: "İstatistikler"},
  826. { i:72, en: "Battles:", ru: "Битвы:", cs: "Bitev:", de: "Gefechte", fr: "Batailles:", pl: "Bitew:", es: "Batallas:", tr: "Savaşlar"},
  827. { i:73, en: "Clan History:", ru: "История клана:", cs: "Historie klanů:", de: "Clan Historie", fr: "Historique de clan :", pl: "Poprzednie klany:", es: "Clan History:", tr: "Clan History:"},
  828. { i:74, en: "No Rating", ru: "Нет рейтинга", cs: "Bez hodnocení", de: "Kein Rating", fr: "Aucun indice de performance", pl: "Brak klasyfikacji", es: "No Rating", tr: "No Rating"},
  829. { i:75, en: "None", ru: "Никто", cs: "Žádné", de: "Kein", fr: "Aucun", pl: "Brak", es: "None", tr: "None"},
  830. { i:76, en: "Error", ru: "Oшибка", cs: "Chyba", de: "Fehler", fr: "Erreur", pl: "Błąd", es: "Error", tr: "Error"},
  831. { i:77, en: "Missing Tanks", ru:"Отсутствующие танки", cs: "Chybějící tanky", de: "Fehlende Panzer", fr: "Chars manquants", pl: "Missing Tanks", es: "Missing Tanks", tr: "Missing Tanks"},
  832. { i:78, en: "Refresh WN8 Table", ru: "Обновить таблицу WN8", cs: "Obnov WN8 Tabulku", de: "WN8-Tabelle neu laden", fr: "Rafraîchir la table WN8", pl: "Refresh WN8 Table", es: "Refresh WN8 Table", tr: "Refresh WN8 Table"},
  833. { i:79, en: "Script Menu", ru: "Меню скрипта", cs: "Nastavení scriptu", de: "Script-Menü", fr: "Menu du script", pl: "Script Menu", es:"Script Menu", tr: "Script Menu"},
  834. { i:80, en: "Famepoints:", ru: "Очки славы:", cs: "Body slávy:", de: "Ruhmespunkte:", fr: "Points de renommée:", pl: "Famepoints:", es:"Famepoints:", tr: "Famepoints:"},
  835. { i:81, en: "Tanks missing from WN8 table, ratings may be inaccurate", ru:"Отсутствуют танки в таблице WN8, рейтинги могут быть не точными", cs: "Některé tanky chybí ve WN8 tabulce, statistiky mohou být nepřesné", de: "Einige Panzer fehlen in der WN8-Tabelle; Ratings können abweichen", fr: "Certains chars sont absents de la table WN8, les indices de performances peuvent être faussés", pl: "Tanks missing from WN8 table, ratings may be inaccurate", es:"Tanks missing from WN8 table, ratings may be inaccurate", tr: "Tanks missing from WN8 table, ratings may be inaccurate"},
  836. { i:82, en: "Account banned until:", ru: "Аккаунт заблокирован до", cs: "Konto zabanováno do:", de: "Account gebannt bis:", fr: "Compte banni jusqu'au :", pl: "Account banned until:", es:"Account banned until:", tr: "Account banned until:"},
  837. { i:83, en: "Last Battle:", ru: "Последние бои:", cs: "Poslední bitva:", de: "Letztes Gefecht:", fr: "Dernière bataille :", pl: "Last Battle:", es:"Last Battle:", tr: "Last Battle:"},
  838. { i:84, en: "Max & Assist Performance", ru: "Максимальная эффективность и помощь", cs: "Nej výkony & Asistence", de: "Performances Max & Assistance", fr: "Max & Assist Performance", pl: "Max & Assist Performance", es:"Max & Assist Performance", tr: "Max & Assist Performance"},
  839. { i:85, en: "Tanking Performance", ru: "Танковая эффективность", cs: "Tankovací výkon", de: "Tanking Performance", fr: "Performanec de Tanking", pl: "Tanking Performance", es:"Tanking Performance", tr: "Tanking Performance"},
  840. { i:86, en: "Maximum Damage in a Battle", ru: "Максимальный урон за бой", cs: "Nejvyšší poškození v bitvě", de: "Maximum Damage in a Battle", fr: "Dommages maximums effectués", pl: "Maximum Damage in a Battle", es:"Maximum Damage in a Battle", tr: "Maximum Damage in a Battle"},
  841. { i:87, en: "Maximum Destroyed in a Battle", ru: "Максимально унечтожено за бой", cs: "Nejvíce zničení v bitvě", de: "Maximum Destroyed in a Battle", fr: "Nb de chars détruits maximum", pl: "Maximum Destroyed in a Battle", es:"Maximum Destroyed in a Battle", tr: "Maximum Destroyed in a Battle"},
  842. { i:88, en: "Maximum Experience in a Battle", ru: "Максимально опыта за бой", cs: "Nejvíce zkušeností v bitvě", fr: "Maximum Experience in a Battle", de: "Expérience maximum", pl: "Maximum Experience in a Battle", es:"Maximum Experience in a Battle", tr: "Maximum Experience in a Battle"},
  843. { i:89, en: "Damage Assisted", ru: "Урон, нанесённый с вашей помощью", cs: "Asistované poškození", de: "Schaden durch Unterstützung", fr: "Dommages assistés", pl: "Damage Assisted", es:"Damage Assisted", tr: "Damage Assisted"},
  844. { i:90, en: "Damage Assisted with Radio", ru: "Урон по вашим разведданным", cs: "Asistované poškození spotováním", de: "Schaden durch Aufklärung", fr: "Dommages assistés par radio", pl: "Damage Assisted with Radio", es:"Damage Assisted with Radio", tr: "Damage Assisted with Radio"},
  845. { i:91, en: "Damage Assisted with Tracking", ru: "Урон после вашего попадания, сбившего гусеницу", cs: "Asistované poškození detrackováním", de: "Schaden durch Ketten", fr: "Dommages assistés par détrack", pl: "Damage Assisted with Tracking", es:"Damage Assisted with Tracking", tr: "Damage Assisted with Tracking"},
  846. { i:92, en: "Direct Hits Received", ru: "Прямых попаданий получено", cs: "Obdrženo přímých zásahů", de: "Erhaltene Schüsse", fr: "Tirs directs reçus", pl: "Direct Hits Received", es:"Direct Hits Received", tr: "Direct Hits Received"},
  847. { i:93, en: "Penetrations Received", ru: "Пробитий получено", cs: "Obdrženo penetrací", de: "Erhaltene Durchschläge", fr: "Pénétrations reçues", pl: "Penetrations Received", es:"Penetrations Received", tr: "Penetrations Received"},
  848. { i:94, en: "No Damage Direct Hits Recieved", ru: "Попаданий без урона", cs: "Obdrženo zásahů bez poškození", de: "Erhaltene Schüsse ohne Schaden", fr: "Aucun tir direct reçu", pl: "No Damage Direct Hits Recieved", es:"No Damage Direct Hits Recieved", tr: "No Damage Direct Hits Recieved"},
  849. { i:95, en: "Explosion Hits Recieved", ru: "Фугасных попаданий получено", cs: "Obdrženo explozivních zásahů", de: "Erhaltene HE-Schüsse", fr: "Tirs par explosion reçus", pl: "Explosion Hits Recieved", es:"Explosion Hits Recieved", tr: "Explosion Hits Recieved"},
  850. { i:96, en: "Damage Blocked", ru: "Заблокировано урона", cs: "Poškození zastavené pancířem", de: "Abgewehrter Schaden", fr: "Dommages bloqués", pl: "Damage Blocked", es:"Damage Blocked", tr: "Damage Blocked"},
  851. { i:97, en: "Trees Driven Down", ru: "Повалено деревьев", cs: "Pokáceno stromů", de: "Umgefahrene Bäume", fr: "Arbres abbatus", pl: "Trees Driven Down", es:"Trees Driven Down", tr: "Trees Driven Down"},
  852. { i:98, en: "Armor-Use Efficiency", ru: "Эффективность использования брони", cs: "Efektivita využítí pancíře", de: "Panzerungs-Effektivität", fr: "Efficacité d'utilisation du blindage", pl: "Armor-Use Efficiency", es:"Armor-Use Efficiency", tr: "Armor-Use Efficiency"},
  853. { i:99, en: "Overall", ru: "В общем", cs: "Celkem", de: "Gesamt", fr: "Global", pl: "Overall", es:"Overall", tr: "Overall"},
  854. { i:100, en: "Max, Assist & Tanking", ru: "Лучшее, ассист и танкование", cs: "Nej, Asist & Tankování", de: "Max., Aufklärung & Tanken", fr: "Max, Assistance & Tanking", pl: "Max, Assist & Tanking", es:"Max, Assist & Tanking", tr: "Max, Assist & Tanking"},
  855. { i:101, en: "Global Map", ru: "Глобальная карта", cs: "Klanové války", de: "Weltkarte", fr: "Carte globale", pl: "Global Map", es:"Global Map", tr: "Global Map"},
  856. { i:102, en: "Medium - T6", ru: "Средний - 6 ур.", cs: "Medium - T6", de: "Medium - T6", fr: "Moyen - T6", pl: "Medium - T6", es:"Medium - T6", tr: "Medium - T6", f:1},
  857. { i:103, en: "Champion - T8", ru: "Чемпионский - 8 ур.", cs: "Champion - T8", de: "Champion - T8", fr: "Champion - T8", pl: "Champion - T8", es:"Champion - T8", tr: "Champion - T8", f:1},
  858. { i:104, en: "Absolute - T10", ru: "Абсолютный - 10 ур.", cs: "Absolute - T10", de: "Absolut - T10", fr: "Absolu - T10", pl: "Absolute - T10", es:"Absolute - T10", tr: "Absolute - T10", f:1},
  859. { i:105, en: "Strongholds", ru: "Укрепрайоны", cs: "Opevnění", de: "Festungen", fr: "Bastions", pl: "Strongholds", es:"Strongholds", tr: "Strongholds"},
  860. { i:106, en: "Stronghold Skirmish", ru: "Укрепрайоны Вылазки", cs: "Opevnění - Šarvátky", de: "Festungen Bollwerk", fr: "Batailles de bastion", pl: "Stronghold Skirmish", es:"Stronghold Skirmish", tr: "Stronghold Skirmish"},
  861. { i:107, en: "Stronghold Defense", ru: "Укрепрайоны защита", cs: "Opevnění - Obrana", de: "Festungs-Verteidigung", fr: "Défense de bastion", pl: "Stronghold Defense", es:"Stronghold Defense", tr: "Stronghold Defense"},
  862. { i:108, en: "Team Battles", ru: "Командные бои", cs: "Týmové bitvy", de: "Teamgefechte", fr: "Batailles en équipe", pl: "Team Battles", es:"Team Battles", tr: "Team Battles"},
  863. { i:109, en: "Ranked Team Battles", ru: "Ранговые командные бои", cs: "Hodnocené týmové bitvy", de: "Gewertete Teamgefechte", fr: "Batailles en équipe classées", pl: "Ranked Team Battles", es:"Ranked Team Battles", tr: "Ranked Team Battles"},
  864. { i:110, en: "Other Modes", ru: "Другие режимы", cs: "Ostatní bitvy", de: "Andere Modi", fr: "Autres modes", pl: "Other Modes", es:"Other Modes", tr: "Other Modes"},
  865. { i:111, en: "Rampage", ru: "Превосходство", cs: "Běsnení", de: "Verwüstung", fr: "Ravages", pl: "Rampage", es:"Rampage", tr: "Rampage"},
  866. { i:112, en: "Historical Battles", ru: "Исторические бои", cs: "Historické bitvy", de: "Historische Gefechte", fr: "Batailles historiques", pl: "Historical Battles", es:"Historical Battles", tr: "Historical Battles"},
  867. { i:113, en: "Tank Company", ru: "Роты", cs: "Roty", de: "Kompanie", fr: "Compagnie de chars", pl: "Tank Company", es:"Tank Company", tr: "Tank Company"},
  868. { i:114, en: "Penetration Ratio", ru: "Процент пробития", cs: "Poměr průstřelů", de: "Penetrationsrate", fr: "Ratio de pénétration", pl: "Penetration Ratio", es:"Penetration Ratio", tr: "Penetration Ratio"},
  869. { i:115, en: "First value is either average per battle or % of a related value, and the second value is the total.", ru: "Первое значение - это или среднее за бой или процент от связанного значения, второе значение - сумма.", cs: "První hodnota je buďto průměr na jednu bitvu nebo procentuální zastoupení dané hodnoty. Druhá hodnota je celkové množství ve všech bitvách.", de: "Der erste Wert ist entweder der Durchschnitt pro Gefecht oder ein prozentualer Anteil; der zweite Wert ist die Summe.", fr: "La première valeur est soit la moyenne par bataille ou un % de la valeur afférente, et la deuxième valeur correspond au total.", pl: "First value is either average per battle or % of a related value, and the second value is the total.", es:"First value is either average per battle or % of a related value, and the second value is the total.", tr: "First value is either average per battle or % of a related value, and the second value is the total."},
  870. { i:116, en: "Do mind that some of the values are from the API, and might not load immediately.", ru: "Помните о том, что часть записей берутся из API, и не могут загрузиться мгновенно.", cs: "Některé hodnoty jsou načítány z API a nemusí se načíst ihned.", de: "Bitte beachten: Einige Werte stammen aus der API und brauchen deshalb einige Zeit zum Laden.", fr: "Gardez à l'esprit que les valeurs proviennent de l'API, et qu'elles peuvent ne pas être chargées immédiatement.", pl: "Do mind that some of the values are from the API, and might not load immediately.", es:"Do mind that some of the values are from the API, and might not load immediately.", tr: "Do mind that some of the values are from the API, and might not load immediately."},
  871. { i:117, en: "Script Author:", ru: "Автор скрипта:", cs: "Autor skriptu:", de: "Script-Autor:", fr: "Auteur du script :", pl: "Script Author:", es:"Script Author:", tr: "Script Author:"},
  872. { i:118, en: "Contributors", ru: "Внесшие вклад", cs: "Kontributoři", de: "Contributors", fr: "Contributeurs", pl: "Contributors", es:"Contributors", tr: "Contributors"},
  873. { i:119, en: "Battles & WN8 per Tier", ru: "Бои & WN8 по уровням", cs: "Battles & WN8 per Tier", de: "Battles & WN8 per Tier", fr: "Battles & WN8 per Tier", pl: "Battles & WN8 per Tier", es:"Battles & WN8 per Tier", tr: "Battles & WN8 per Tier"},
  874. { i:120, en: "Battles & WN8 per Class", ru: "Бои & WN8 по классам", cs: "Battles & WN8 per Class", de: "Battles & WN8 per Class", fr: "Battles & WN8 per Class", pl: "Battles & WN8 per Class", es:"Battles & WN8 per Class", tr: "Battles & WN8 per Class"},
  875. { i:121, en: "Battles & WN8 per Nation", ru: "Бои & WN8 по нациям", cs: "Battles & WN8 per Nation", de: "Battles & WN8 per Nation", fr: "Battles & WN8 per Nation", pl: "Battles & WN8 per Nation", es:"Battles & WN8 per Nation", tr: "Battles & WN8 per Nation"},
  876. { i:122, en: "Calculating", ru: "Рассчет", cs: "Calculating", de: "Calculating", fr: "Calculating", pl: "Calculating", es:"Calculating", tr: "Calculating"},
  877. { i:123, en: "Supertest Tanks", ru: "Танки на супертесте", cs: "Supertest Tanks", de: "Supertest Tanks", fr: "Supertest Tanks", pl: "Supertest Tanks", es:"Supertest Tanks", tr: "Supertest Tanks"}
  878. // { en: "", ru: "", cs: "", de: "", fr: "", pl: "", es:"", tr: ""},
  879. ];
  880.  
  881. // region settings for external sites
  882. switch(wg.srv) {
  883. case ("eu"): // eu server
  884. sc.srv.wl = sc.srv.nm = sc.srv.vb = sc.srv.ws = sc.srv.cs = sc.srv.wlf = sc.srv.ct = sc.srv.kttc = sc.srv.aos = sc.srv.ch = sc.srv.wr = sc.srv.we = wg.srv;
  885. break;
  886. case ("ru"): // ru server
  887. sc.srv.wl = sc.srv.nm = sc.srv.vb = sc.srv.ws = sc.srv.cs = sc.srv.ct = sc.srv.kttc = sc.srv.wots = sc.srv.aos = sc.srv.ch = sc.srv.wr = wg.srv;
  888. break;
  889. case ("na"): // na server - american english
  890. sc.srv.wl = sc.srv.nm = sc.srv.vb = sc.srv.ws = sc.srv.cs = sc.srv.wlf = sc.srv.ct = sc.srv.kttc = sc.srv.aos = sc.srv.ch = sc.srv.vb = wg.srv; sc.srv.wr = "com";
  891. loc[24].en = "Defence";
  892. loc[54].en = "Base Defence Points:";
  893. loc[107].en = "Stronghold Defence";
  894. break;
  895. case ("asia"): // asia server
  896. sc.srv.wl = sc.srv.nm = sc.srv.vb = sc.srv.ws = sc.srv.cs = "sea"; sc.srv.ct = sc.srv.kttc = sc.srv.aos = sc.srv.ch = sc.srv.vb = wg.srv; sc.srv.wr = "com";
  897. break;
  898. case ("kr"): // korean server
  899. sc.srv.wl = sc.srv.nm = sc.srv.vb = sc.srv.ws = sc.srv.cs = sc.srv.ct = sc.srv.aos = sc.srv.ch = sc.srv.vb = wg.srv; sc.srv.wr = "com";
  900. break;
  901. default: break;
  902. }
  903.  
  904. // set script language to english if an unsupported language is detected
  905. if (sc.loc.sup.indexOf(sc.loc.cur) == -1) {
  906. sc.loc.cur = "en";
  907. }
  908. // process localization
  909. for (var _l=0, l_len = loc.length; _l<l_len; _l++) {
  910. var langLoc = loc[_l][sc.loc.cur];
  911. if (sc.loc.cur !== "en" && langLoc == loc[_l].en && !loc[_l].f) {
  912. sc.loc.miss ++;
  913. console.info("Missing translation at line "+(_l+668)+" - en:\""+loc[_l].en+"\"", sc.loc.cur+":\""+loc[_l][sc.loc.cur]+"\"");
  914. }
  915. loc[_l] = langLoc;
  916. }
  917.  
  918. // add language to body classname for language based styling
  919. d.body.classList.add("lang-"+sc.loc.cur);
  920.  
  921. // script link, settings, credits and localization indicators
  922. var userSet_div = sf.elem("div", "menu-settings menu-top_item", "<a class='cm-user-menu-link' href='#' onClick='return false;'><span class='cm-user-menu-link_cutted-text'>"+loc[79]+"</span><span class='cm-arrow'></span></a>"),
  923. userSet_list = sf.elem("ul", "cm-user-menu"),
  924. userSet_list_locItem = sf.elem("li", "b-settingItem settingCredits settingSeperator"),
  925. userSet_list_items = [
  926. sf.settings("wnRefresh", loc[78]+" [v"+wn.vers[1]+"]"),
  927. sf.settings("copyClipboard", loc[62]),
  928. sf.elem("li", "b-settingItem settingCredits settingSeperator", "<p>Version: "+sc.vers+"</p>"),
  929. sf.elem("li", "b-settingItem settingCredits", "<p>"+loc[117]+" <a class='b-orange-arrow' href='"+sc.user.wot+"'>Orrie</a></p>"+((sc.cred[sc.loc.cur]) ? "<p>"+loc[118]+" ("+sc.loc.cur.toUpperCase()+"):</p><table>"+sc.cred[sc.loc.cur]+"</table>" : "")),
  930. sf.elem("li", "b-settingItem settingCredits settingLinks", "<p><a class='b-orange-arrow' href='"+sc.host+"'>Greasy Fork</a><a class='b-orange-arrow' href='"+((wg.srv == "na") ? sc.top.na : sc.top.eu)+"'>Support Thread</a></p>")
  931. ],
  932. navMenu = d.getElementById('common_menu'),
  933. navUser = navMenu.getElementsByClassName('cm-menu__user')[0],
  934. navLook = new MutationObserver(function() {
  935. navUser = navMenu.getElementsByClassName('cm-menu__user')[0];
  936. navUser.appendChild(userSet_div);
  937. navLook.disconnect();
  938. });
  939. if (sc.loc.sup.indexOf(sc.loc.cur) == -1) {
  940. userSet_list_locItem.innerHTML = "<h1>Script Translation</h1><p>Unsupported language detected!</p><p>If you want to contribute with translation, please contact <a class='b-orange-arrow' href='"+sc.user.wl+"'>Orrie</a></p>";
  941. userSet_list_items.push(userSet_list_locItem);
  942. }
  943. else if (sc.loc.miss > 0) {
  944. userSet_list_locItem.innerHTML = "<h1>Script Translation</h1><p>Currently "+sc.loc.miss+" out of "+_l+" strings not translated in your language!</p><p>If you want to contribute, open the browser console, translate the strings and send them to <a class='b-orange-arrow' href='"+sc.user.wl+"'>Orrie</a></p>";
  945. userSet_list_items.push(userSet_list_locItem);
  946. }
  947. sf.links(userSet_list, userSet_list_items, "list");
  948. userSet_div.firstElementChild.addEventListener('click', function() {this.classList.toggle('cm-user-menu-link__opened'); this.nextSibling.classList.toggle('cm-user-menu__opened');}, false);
  949. userSet_div.appendChild(userSet_list);
  950. if (navUser) {
  951. navUser.appendChild(userSet_div);
  952. }
  953. navLook.observe(navMenu, {childList: true});
  954.  
  955. // check if player has 0 battles before continuing
  956. var tableBattles = sf.format(d.getElementsByClassName('t-personal-data_value')[2].innerHTML, 1),
  957. profileName_class = d.getElementsByClassName('b-profile-name')[0];
  958. if (tableBattles > 0 && wn.wn8) {
  959. // request and retrieve statistics from API
  960. sc.api.i = "http://api.worldoftanks."+((wg.srv == "na") ? "com" : wg.srv)+"/wot/account/info/?application_id="+sc.api[wg.srv]+"&account_id="+wg.id+"&extra=statistics.fallout,statistics.globalmap_absolute,statistics.globalmap_champion,statistics.globalmap_middle";
  961. sc.api.v = "http://api.worldoftanks."+((wg.srv == "na") ? "com" : wg.srv)+"/wot/tanks/stats/?application_id="+sc.api[wg.srv]+"&account_id="+wg.id+"&extra=random";
  962. sf.request("infoData", sc.api.i, sf.apiInfoHnd);
  963. sf.request("vehData", sc.api.v, sf.apiVehHnd);
  964.  
  965. // url variables
  966. sc.nm.url = "http://noobmeter.com/player/"+sc.srv.nm+"/"+wg.name+"/"+wg.id;
  967. sc.nm.api = "http://noobmeter.com/simpleplayerprapi/"+sc.srv.nm+"/"+wg.name+"/"+wg.id+"/"+sc.nm.id;
  968. sc.chApi = "http://clanapi-wotcs-eu.herokuapp.com/players/"+wg.id+"/changes";
  969.  
  970. // variables for dropbox, css and data uri
  971. var css = {
  972. box: "box-shadow: 0 0 38px 1px rgba(0, 0, 0, 0.3) inset, 0 0 23px 1px rgba(255, 255, 255, 0.02), 0 0 5px 1px rgba(0, 0, 0, 0.5) inset;",
  973. input: "background: rgba(0, 0, 0, 0.09); box-shadow: 0 0 1px 1px rgba(255, 255, 255, 0.15) inset, 0 0 38px 1px rgba(0, 0, 0, 0.3) inset, 0 0 23px 1px rgba(255, 255, 255, 0.02), 0 0 5px 1px rgba(0, 0, 0, 0.5) inset; color: #606061;",
  974. l: [
  975. "https://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img",
  976. "/static/wot/common/css/scss/context-menu/img/arrow.png",
  977. "/static/wot/common/css/scss/content/links/img/orange_arrow.png",
  978. "/static/wot/common/css/scss/content/user/img/speedometr-separator.png",
  979. "/static/wot/common/css/scss/content/links/img/ico-info.png",
  980. "/static/wot/common/css/scss/content/links/img/vertical-arrow.png",
  981. "/static/wot/common/img/common/cont-img-mask.png",
  982. "/static/wot/common/img/classes/class-ace.png",
  983. "/static/wot/common/img/classes/class-1.png",
  984. "/static/wot/common/img/classes/class-2.png",
  985. "/static/wot/common/img/classes/class-3.png"
  986. ],
  987. u: {
  988. menu: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPQAAAABCAIAAABmEhQDAAAAHklEQVQoU2MAAj4BAR5ePi6eUTSKhgni4eFjYGAAAN9YIhjam+zlAAAAAElFTkSuQmCC",
  989. icon1:"data:image/png;base64,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",
  990. icon2:"data:image/png;base64,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",
  991. nmLogo:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABgUlEQVQ4y92SPWsUYRSFn/POzE4MgkhMKyKICAEjiUksgoWClY0WYifKDlj4VyxsDGvlgmhtLUiIkoSNiLEWCwN+dmvAnZl3jkV2lxArSz3d/eDe53Iu/NOabb8J6cHkfLGZbXUWq1E8c2c7kxpPhF8unfPu0bk4qqWqz+jggAtFL6uor9hhLqjZnkwHq7ip+/WRJlF50tYs0oLwF5vdPwhKKCHDguiEfpUBkKh6aMIT8MutzmJ3TDFGb/duA7L91HBTgAEYQlqHgeOH9PPt/oUCWCpezVTk7z1sFpwG7gMt4C64a7QCdGUTVF9LQ/l6feXiN80Xmw8aJ/cQxm6AIKkAXgAfgWnbZyVNgp8bjdAIqi8HW1MMeSUs2MG+ZfsTeMdwQrBs+AAgPAQ1gl0BnC82njVOboxPkGujVHhglMuORonYywfid8nXe52ltbGNC8X6JaNTQapjrGNjchH7VutYnvhHJJ3Cg8+mdXSCr4/XOlcH+7xf1d984Fx7I/D/6Dd9b6wCx93gcQAAAABJRU5ErkJggg==",
  992. vbLogo: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACrUExURUxpcahYHvXmtciUVrbSzejKpNzr8f///47A3adRHu3n29zd3cOUct3t9cDj9BFeuTJUoe7EitufUiuGzOrTn5HT+NHdy7Pp+f/0x83m9Pz96n240Pry4DWg2WKn1Nfp9K7f8CthnNurZvz27OrTsP/////+/P757fv+/vL8/+L6/+fy+Pv49f/z2uPSvrDf+Prrysfj4OPDlrqRrsDDrXen15PH3sC918vq/6QbRKQAAAAldFJOUwBxqjlV41VVVTnGqsbxuDmqqqqqOaqOqnGOjqrjqsbGORxxxhxX8ZyaAAAAjElEQVQY043N1xaCMAyA4aKAbPceuNq0FHCP938yU6pU7/yvmu+cNIR8tfGa5KckbuiH18Lcqcx3Ww0HiuUcor2e25kC6tQfdCpg3ffYF7Tu6CMMzUxZD2HMDXB1dmmAnQcI62dhJRC5wvEzmCDMJYQxC1KxCEVRnbnJzwYElgJ7VT6up0t5n41s8kcvaosSk0veKFwAAAAASUVORK5CYII=",
  993. rat:"data:image/png;base64,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",
  994. ratMark:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAANCAQAAADLNWwDAAAAV0lEQVQI12NgEGQQZhBhEALSQEqMQQIIgUxxBqmvRyBMKQa5H3cZpIGyDHIMir/fAkkxBgZFa/0/nxgUgQoZVNLsgExloGpkUSS1SCYgmQuxTQwkCncDAH0wFzVj5p2XAAAAAElFTkSuQmCC",
  995. tiers:"data:image/png;base64,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",
  996. bad1:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAfCAYAAABtYXSPAAAFVklEQVR42q2Xf0idVRjHu/f95dxVBGvNJlM2lI2hbW5sqMo23SDa2JaOtWBDCuZG2QBawZis0WA4pgtMREUQFXWJiASIGgkgEBWRKSD9GYAVEDQE+qtOzweey7nck12vdODLc5/3fL/f87znx/ve94X/aDEbFc61TXSZtFk2X6PnmGUe2OVYeNZ/aw1BXAWxtN+a66A2p7nXrcYnT/vtZVEQIi3MigONtjAH2qd810N9MzcV2DsIFTmCHfbOMxVjeejQWy+dZS0y86xYUSR48fr169MHDhx4czvFoEOPD372JjefHTu1wM5GflFR0fujo6MmNzf3s97e3pJsioGPDj0++OFriwGW7yyRVp8rSOzZs+fVs2fPfj03N2ck/3xoaKgCYllZWRzs3r3bKy4u9goLCz0iebIPHnx06PHBD1/1j9KWyikkTBYjrbKlpeXvwcHBv2SaKeaLvr6+GsjHjh3zgCyBf/ToUW/fvn0ekTzZBw8+OvT44IdvSjFhWkHO7mcaXwqC4PbMzIwB7e3tJhaLfTkwMNCAoLa2NgCHDx8OGxoa/EOHDvlE8mQfPPjo0Ce98MWfcdzTaWfG152/My8vr6ygoGBgcnLSLCwsmJ6eHmbmK7nT1yCfPHkyBMePH4/Onz8fVFVVBUTyZB88+OjQ44Mfvvgzjo7npy9VLOX0FAr56b1798yjR49Md3e32b9/P8V809nZeQ7y6dOnI1BdXZ3T1NQUnjhxIiSSJ/vgwUeHHh/88MWfcVJOVyy9mEArLZOpfXb37l0zPz9vLl++jAnF/NDV1XUBcmNj4w4gy5F79erVqKamJiKSJ/vgwUeHHh/88MWfcXS84N+KCXVjlQs+qqurMxsbG+bx48dmZGTEYPrkyZNzkM+cOZML6uvrd167di2SGBHJk33w4KNDjw9++OKv48ALbTH2h6+b6uXy8vKnJSUl64uLi6ajo8PIHWPwvRhegCjHdCeQvZGQE5IjMYdInuyDBx8denzwwxd/xtHxfLjpBYXaWSzPiZ/Gx8eN7APDesseYGqXHzx48Ho2xcBHhx4f/PDFn3EYz86M+xqIdPr6Ll26ZNbX141sTjMxMcHMLN+5c6cxm2Lgo0OPD3744q/jRDqu+yrQzhLB22EY/jI2NmbkRJiHDx9isNLW1nb71q1b9YgyNXjw0aHHBz988WccW4zWkLZnIj3/lYL2vXv3/lpRUWHkYUYx38rR7bAFZS4EPjr0+OCHL/46TpS6Z9y3tW7ieDzecvHixefDw8OmsrKSdf5NrrccOXLkQ7cgtxB48NGhxwc/fO3m3fztHRcEinxBred5azdv3jT9/f3m/v37Zmpq6k+5/okYvmULcguhHx58dOjxwQ9f9Q8U8c2KoQVacYXgAzF+Lu8ec/DgQXPjxg3D2u/atWtF+tgPzRSwtLT0jEjOdfrhwUeHHh/88FX/IG1ct6CUv4V5gmrBx3I81xKJxB9RFJn8/HyeFYbNeOXKlRUt4A0iOdfphwcfHXp88MNX/f3NC3H/XEeCAkGd4B3Bp3Jkf29tbTWnTp0y8pQ109PTZnZ21jQ3N68RyblOPzz46NDjo36R8yd+i18Iob7uSwVN8oL7ubS01MgpMcQgCAyPd15+RPLUfvjo0KtPmM2XQSwl+kAN8vTF9q6s/XeCVd/3V2Xw1TAMlwU/Esm5Tj88+OhUH1rPrD7o7LeNxkCPY5XeaavgPUUby0AkB/TDg49O9dYP/6yb+9GVELwiKNJYIigmJ5Kn9Secj8JtNfcLEgR26Yhbyl2fbTcr9pzjb3N7Et1j61mf/6k539FuEXGnL8si/gEY8SzOXUsBvQAAAABJRU5ErkJggg==",
  997. bad2:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAfCAQAAADHaLwEAAAErklEQVQYGQXAD4yWdR0A8M/39zzv8R4cB4fADmUorjRUmULKNDetVMtcTWdYbra0aJZrjmVZrY1yW26LcmuMZCZrJUbaLEfGRjUczjnHTUXaIADjPzAABLw74O55vg4ACIQQAiEAABAAAAAANSohBIAQAIoCKCAUgAKg0qq1QoVQBAgUFC231mpFqwgpAAqARqCgVdQCIVC0CBW3UVCrhAoFCEARWpWCIpyTAgFaVGgVtdBKKYwJoaUAWnQQ+h968VNfBgAApPa6iz//mn5FkToKgoIQKlCbMOvrd96775aVc7inHtr92+a55vlmRf4uNxy+oY+Vc07fuOhzd680RVFLrZDUSAW1Srlk7lUPzjAys7efPxy9ZeCP0rhhPZbM+MuRBTN6+5vLue32zfOOveeCGuOIgiJUMPHy29994MY19B6btePUwoFXdc1wjX4D1rqn++bho7P39f3H3CkPvj64WEcIIShCIoVJY7fdG9PLpaL3s6tvmHq/p/zckJPW+4Ufme/OvgWr9V3veHlEfZepoJKylopQK5OnVtdcMNWgLAe6w/6kccI9jjvrFdN0nPPuRD2TdHVcmD0w+9QZjUaIgkSr67uPLdllu2foG467DHlUOGXEB3q87IsuMTlMfMGQNzy6aOA3eoVQyQJCMe2ji1sLbfItej5w0gW11Dprkta4fpUPQ/chZ7SutH9Av0qtFQWEEPnOG252g9k4oeO0Lnaba4LWMWmm0VR6LPAVmzVb9SlaKYuQWq3TVwzuP7xZWkXbNe6499CrOKG1117TzQ2xzg7HbBydc9wZqQhRpFDQyS89PWuF5/SI6ixG3GyK804aMMsFl5niQirTrbfU97tXLBZohCxIjTRx58aXrDDdd6S+5oQXHbDEJHuEJ822xVsuauV95nrS8diwTZ8WjSxCgPPe/ueRjb5qF+XA818b2+igtThqj997xZD7muVb1f9zla5fj3nZKakIKiFVinPONWeGrt7et92RfX17tu5/ev4yZ1xmkU3escvjtu38wq5/j47O3+m1kcNrm/X2GTMmKRIpNY6W/df3PqH1yUvf2la2/PKlpec7xpzWY6Inxg7um/bmj/81eOWwb7uzro/Y7ZxGKNQgpcZou+sfhwb7H3Nw5vxn7/9VvDpt+IGHX7fQVo84dOTvK0fHf7rsE7P3KFaPj7ytQUoJUNDR41o/KKevznm5JJfnzPc93rPqm9nJZdlZa2nPxp/kUzkvP511Y5Wb9KoVRQGgqFUmu8my2Nb34YTsz0tzTS5+3/Jn01+v2/S3/ExOyQk5eaTssdLdpuvqCAQBQmgVHb2ucYVr7/jG3Gk71L6n62eHll48aI0tFhoe+/MLthmy3UljQoskAFBJtSkmWTD5mYvmzHLYQYvc6r826JrnmBOjJ39ovVNGjUutFJIAhBQqFBMMuqM8rFuEaERoa23ThmaddXb4SCuFRkgIANRaIVWmucRlpusgjOhRS+mE/9tr2HnjQiskEACAUGmFXv1S6Gg0KjQ6RjTOSq1UpAQIABAIiVoqWiEVoVU0WiGMCyQABACAkCqNokiNIgVSoBUILQBQAQAAAAgpERIhkQAAHwPlu9kMCvbXiAAAAABJRU5ErkJggg==",
  998. miss: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAcCAMAAAAz6Z0tAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAA5UExURUxpcdkCCP8KJP8MJtIAAdkEC88AANAAAP8LJusHGM8AAM8AAM8AAM8AAP8OKf8OKdAAAP8MJ88AAK2kIk4AAAATdFJOUwBH1rffDcv+/if1nzhijVC68IB97NktAAAAjElEQVQoz+3RSxIDIQgEUBkQ8K9z/8OOJi4l2afS5c6nXahzvx3fKmJt3hYBh84MDKa4dNTW6qWXYTzqey+g9HNXG2OfDxThSKpW2OaWdCSozQEJTwPSj6TLvD2/jEWS3G4bq6hEWnOsLorlPHSXtI2w8cCrowAUEsrW82aOEufi/OEbS2JOxbt/vucBz3AEu+Dj2y4AAAAASUVORK5CYII=",
  999. sparks: "data:image/png;base64,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",
  1000. blueMsg: "data:image/png;base64,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",
  1001. wgLogo: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAG2UExURXiw+HLC5Yji84DB0woUGILK3g0VGEZcdR44SA8bHozU8Ds9QCg1NSI3O4PJ70VcYYqvu6vBxw0bJA8WFxMjJxQWFhMZJQ4YHBEWGBoaGCAhHxIaHRwdG0NFRikvLyQuL2aXsJDU9np6fKW0u9na3+jm57rCxhcZFQ8VFyMjITAxMRcZFycoJzM0MxoaGQ8VF0pMTi0vLT5CQDA3OjI2NDM1MlhaW1FTUzhUZ0pOTnZ3d32BgI2Sko6Vl26gsVmCkFxnZ3CAhsfLy5q2v6Cqr8HIzKSpqpqfobe+wc/T1sbO08zQ0RoqL4CxwUJGSj5CRUFER2ZqbZaWl8a/wY9vcskiHjU2ODo9P1VXWUtMTlBJTF9dX32DhVkGBsDBw56anN/T1bCztN3d32wkJ9QJCce4uaBqbD8eH3JhYl1ERVIdHUtERm5naVMBAYyRk2sXF3BKSpdMTZIpKWlkZYxFR24DApxXV50EA5QeINbOzs7HyHFpansDA8tnaJSLjZMQD5IQEenf36wnLNJaYvtCDq8xE/QWFfwxHLRFKOUcBuva36Z5e9giH6+JjKEUF9RVSfdBQ6CisIhPiQ4AAABOdFJOUwQHCxsrFk0CBzcR9g0pCxItRBtoIJ4URny4sFqm8GJSFQ/9Xej+78qD5O2x1u3JkPGSz0p0zv2iG4+xnaKPLiVgX8I4Z6fN8Oux4+UvI/Wmz6gAAAELSURBVBjTDcjTlsMAFADAmzZumtrm2mbXPKdJ26S21rZt//FmHgcIQFgPptZo1BjNIkAAgcjo6cXlYHBpVo15WACQYTML10K9/hXz++S0DID2zQs398W7D7Hm18ilCM1d3D68R2ufz99nU+MAyES0chX4e3p9+a0eByYxUI1mDsvlytvjT0zcL47JQTWcLuRLl1XxvLS3ExuRYiCZ3T44Ojn1FnbX80NuYHr7U5GNrZyQ3cyteZ1uIHu6E3xqNRrJpFcifa5BIJVdnXEuHOa5eNJhdymlcFodPJeQTtHeYaOA1FI6a2ubQtHc1GAw4ygQjJ6yme0WS4uhUYejRiAI0qhHKROOmyhUy5D/T8Y4lZQQWWoAAAAASUVORK5CYII=",
  1002. tenIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQcSURBVEhLlZVdSJtXGMf96DY1M35NiMNh1EXm90cak6hrdCatKOhFdegWvNFdZNkqokPEC4V5o5W6ebHhxNJuVh2i0CtbC522tNgxxCF0TJBsNhukIl0XyxqCPPv/X960gbluPvDjnJz3PP/znOc85yTiPywKvARiwnhFHeO3Y1skCInGAQ2IV2GfC5wAnEeOZdEgJJwE3lBJUMf4jaKc97+MkdKBzqkgG5TZ7fbHNTU1j9AvBVkgBRwrLdwit2wANvBedna2d3R01Ds8POxhH2PvgrdBBngV0OdfLbQtTVpamikjI+M3irAtKCj4cW5uTiYnJ4V9joXIy8v7MDExkbuj75H55nZe1mg0usrKys+bmpoOA4GA9Pb2is1mWxocHPQ2NDTcd7nc8vChT3w+n/j9fuG83NzcLgTDXf4zJVlZWVqK5ufnf83Ja2trsrvrlY6ODmlsbLwWGxt7hf29vT2ZmZmRvr4+WV9fl52dHamqqtqPj48/l5OTkwyp51Fje7pw0eXlZSErN25IW1vboV6vXwIHFJmZnZX6+npfmbFsGwv9tbm5KWNjY/tJSUm3DQZDCeSeR41oDSHR7Z+3FdFLly/L1tYWo/Uih1covLGxIUNDQ2KxWn6319ofVFRUHFy/fk2QpseqcDHknkUc9RYsJSVlU6vV/lBb6xBrhfURBOX7e/cEefVgfJbCq6ur0tPTE8Sh7iBqKS8vP5yfn5eBgYE/dTrdbRymEXrPKoS36DUMnsEBfEBMJlPAdsomKysr4nA4PIhYEV5aXBS3272fnp5+s/zkyfuYJ1NTU9Ld3e2H8F1QBS3eTMViAeuxDJwtKiq6hUj+sFqtsrCwINXV1R7sRknFpYsXpbOz8ylS9x0q4YvS0tLDiYkJcblcB6mpqRQ+BQ1eHF4axV4HlpiYmE9ZuyUlJXeMRqNMT08L8vgrhL+h8PiFCzxMwemv48A/Li4ufjIyMiJOp9NPYWqoWoqxsHOAE1u8Y7FYgjiEb+GEaD4Tk9m8C+FFRXh8nKlgbn36LL2nrq7uKQ+zubk5SF9qqFqKMdlGbOMrRott3iRIiTAaRO5DjV4l7e3t0t/fr9R2S0uLnOvqUhbC/Cf0pQa1FFXYiaioqEZEyHwKDwRFokAnpEJwbR+YzWYpLCxkjoNO5/vS2toqH7ndwczMTMWHvtSglqqrpMKCkvokOTm5PyEhYQi3bCw6OvonXJpbyOcvyP35uLi482wx9yoiFKQmgAgFafqSPvSlBrUoGjKeJCuDT6IVq55GqxAZGVmHthbYwTv4fQacxpxatA60DoxbAX2pQS3FmGOWHJ+/dMCPfG8J3+I3VcLHMtU+W3Kk8YJQmAtQnPCl0qot/zEI++GEvocuBDXC/7KUR+OofwB+fBEvsIiIvwGdi5IETpXqcAAAAABJRU5ErkJggg==",
  1003. testIcon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAANlSURBVEhLtZTPS1RRFMfnvfvr/RhNUMfSHHXMZkZnnPHNWFFQUKvKCPq1yApaVvtoIS2qTYXRj021SYOCDCKiIogW2b/QwhQCF7XTdQ7S6XvepAy9cdGvA1/ee/fe83nnnnvuiRHRf1HdwT8V2+p77cTfqi64xiw7FlNxo7sapRhtEfb9diVmklpWepRc7lBiHmNTmDvpK5UUWMs+Vde1wRYWeo5llRNajSe1mu0xqjLgaOp3IcdQ1lGUNmoJc5+apRz3bGtYWjGPfRlQF8yRYmG5RdoTm4xayHma0oBmjKYcnjnXQE6ogucQ1iwmpD3JcPatC7Zt2/KV7GzX8jqiWxgbLdHXD+foC2uadRbv0PSZVY0dD0J4q5I3fK27hRB2BIwUuE1Snkg5ZibwXTpa6KCXt0boxc399Bz6/PZ0qBc3R+jVrQPQCB0qtFPguZRy9Nw6KU8xIwI2VqytTYmpvGeWBrHNPLbNOe01ijq1oumJI/T+wWFKIS1FzA9BvK6EIAZ9U4HvU2ZEwOtsa3OnFvOluKGibyjDBwYIH1zKSHp3/yC9u3eQ+jDGwHLcpSBezXXgO5RUcp4ZEfB6KfJdWi3nAC0CnsXB9SFSPjQ+wDd39tHr23spg/EcQP1QEPdCFRtc3tkyMyLgNgymUFoFQAfgnMcPcmGJKdrsSHp+bQ89u7qb0r6mUiMqAykYgIJGqMGhbvgyIwKO21Zvu5Izg4gkD2cGF/GO/NEmV9HUlV305PJOvCMV4a4cyKUhPPl7gxYzzIiAlRVrbpHiXtbVSwUs5MUBwCUoDdjjizvo0cXtlObdeACHuQUY6/o9/a1VibvMiIBR4Abldgzp+FQFV09+GM5ZVMfDC1uhLbiBhgqYK6PMtnFFeOZ7t6M/4oofZkYELMILopIJJcczrl7kaIoQl1MOP5g4P0wPzpdpAOAhBkNbMJd2zUJCiWueFBuBsCJgNlx25eJ6rldiErdvkcuOo2PY5dEMXYKySAOnJwjrXC90KDnp23Z5zSv908ImxPA2LW/0Omou65oKR1xEJWxr4l3gR56p4LbNbkCjagR0zSb0i1kcOdpmdxPaJraJtinRNlUFfWE5ibaZkOIpzuNUgzFdshpp/bZZaysTv6sVW/2uHWRbmfhdrdjqd+3kvxPFfgCnD1EcKH+OSwAAAABJRU5ErkJggg=="
  1004. }
  1005. };
  1006.  
  1007. // style contents
  1008. styleText = styleText.concat([
  1009. // global rules
  1010. "h3, h4 {margin: 0 0 15px; text-align: center;}",
  1011. "h5 {margin: 5px 0 8px;}",
  1012. "p, .reg-KR p {margin: 0;}",
  1013. ".reg-KR p {line-height: 133%;}",
  1014. "table {width: 100%;}",
  1015. ".b-profile-wrpr, .b-header-h1__profile {text-shadow: 0px 0px 1px rgba(27,27,28, 1), 0px 0px 2px rgba(27,27,28, 1), 0px 0px 3px rgba(27,27,28, 1), 0px 0px 4px rgba(27,27,28, 1);}",
  1016. ".b-hr-layoutfix__small-indent-bottom {margin: 0px 0 -10px;}",
  1017. ".js-account_game_ban_info_msg {display: none !important;}",
  1018. // page/content-wrapper rules
  1019. ".page-wrapper__old .nav-submenu_item {padding: 0 1.25%;}",
  1020. ".content-wrapper__old p {margin: 0;}",
  1021. ".content-wrapper__old p.b-fame-message, .b-fame-message {display: table; color: #B1B2B2; margin: 0px auto 14px;}",
  1022. // nav bar user info rules
  1023. ".b-user-data {position: absolute; top: 0; right: 10%;}",
  1024. ".t-user-data {margin: 6px 0; font: 14px robotocondensedbold,'Arial Narrow',Arial,sans-serif;}",
  1025. ".t-user-data td {padding: 0 5px;}",
  1026. ".t-user-data td:last-of-type {text-align: right;}",
  1027. ".currency-gold, .currency-credit, .currency-experience {font-weight: unset;}",
  1028. // header rules
  1029. ".b-header {height: 194px;}",
  1030. ".b-logo {height: 175px; top: 45px;}",
  1031. // container wrapper
  1032. ".l-container-wrapper {background: none;}",
  1033. // content width
  1034. ".l-content {width: 955px}",
  1035. // background rules
  1036. ".b-background {display: flex; opacity: 0.25; position: absolute; width: 100%; z-index: -1;}",
  1037. ".b-background img {width: 100%;}",
  1038. // profile wrapper rules
  1039. ".b-profile-wrpr {margin: 20px 0 0;}",
  1040. ".b-profile-wrpr td {font-weight: bold; line-height: 133%;}",
  1041. ".b-profile-wrpr .t-profile-table a, .b-profile-wrpr #js-profile-clan-table a {background: url("+css.l[1]+") no-repeat 0 2px; color: #CACBCC; padding: 0 0 0 10px;}",
  1042. ".b-profile-wrpr .t-profile-table a:hover, .b-profile-wrpr #js-profile-clan-table a:hover {background: url("+css.l[1]+") no-repeat -244px 2px; color: #FFFFFF;}",
  1043. ".b-profile-wrpr .b-profile-header {position: absolute; width: 750px; top: -4px;}",
  1044. ".b-profile-wrpr .b-ratingsClip {display: inline-block;}",
  1045. ".b-profile-wrpr .b-ratingsButton {"+css.input+" display: block; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; padding: 7px 7px 6px;}",
  1046. ".b-profile-wrpr .b-ratingsButton:hover {background-color: #282828; cursor: pointer;}",
  1047. ".b-profile-wrpr .b-profile-error {background: rgba(81,0,0,0.5); border: 1px solid #510000; box-shadow: 0 0 3px #733232; color: #CACBCC; display: none; padding: 3px; text-align: center; margin: 0 auto;}",
  1048. // b-info-block rules
  1049. ".b-profile-wrpr .b-info-block {display: inline-block; width: 745px;}",
  1050. ".b-profile-wrpr .b-info-block > div {min-height: 118px;}",
  1051. // profile player rules
  1052. ".b-profile-wrpr .b-profile-name {display: table-cell; margin: 0; max-width: unset; width: 50%;}",
  1053. ".b-profile-wrpr .b-profile-name table {font-family: Arial;}",
  1054. ".b-profile-wrpr .b-profile-name td:first-child {white-space: nowrap;}",
  1055. ".b-profile-wrpr .b-header-h1__profile {display: inline-block; margin: 0; padding: 0 0 6px; max-width: 375px;}",
  1056. ".b-profile-wrpr .b-header-h1__profile.b-account-type__premium {background-position: right top; background-repeat: no-repeat; color: #FFC364; max-width: 350px; padding: 0 25px 6px 0;}",
  1057. ".b-profile-wrpr .b-header-h1__profile .i-profile-flag {border: 1px solid rgba(27,27,28, 0.5); margin-left: 2px; vertical-align: super;}",
  1058. // profile clan rules
  1059. ".b-profile-wrpr #js-clan-block-container {display: table-cell; width: 50%;}",
  1060. ".b-profile-wrpr .b-profile-clan {display: flex; float: none; margin: 0; padding: 0;}",
  1061. ".b-profile-wrpr .b-photo {min-height: 52px;}",
  1062. ".b-profile-wrpr .b-profile-clan .b-text {margin: 3px 0 0 0;}",
  1063. ".b-profile-wrpr .b-profile-clan .b-text-wrpr {margin: 0; max-width: 310px; padding: 0 0 4px 0;}",
  1064. ".b-profile-wrpr a.b-link-clan, .b-link-clan a {display: inline;}",
  1065. ".b-profile-wrpr .b-statistic {margin: 0;}",
  1066. ".b-profile-wrpr .b-statistic_item {color: #979899;}",
  1067. ".b-profile-wrpr #js-clan-block-container table {font-family: Arial;}",
  1068. ".b-profile-wrpr #js-clan-block-container td:first-child {white-space: nowrap;}",
  1069. ".b-profile-wrpr .b-profile-noclan {margin: 16px 0 13px 0;}",
  1070. // profile clan history rules
  1071. ".b-profile-wrpr .b-clanHistory-wrpr {font-family: Arial; margin: 0 0 10px 0; width: 715px;}",
  1072. ".b-profile-wrpr .b-clanHistory-wrpr span {display: inline-block; font-weight: bold; line-height: 133%;}",
  1073. ".b-profile-wrpr .b-clanHistory-wrpr .clanname {padding: 0 2px 0 0;}",
  1074. ".b-profile-wrpr .b-clanHistory-wrpr .clantag {padding: 0 2px;}",
  1075. ".b-profile-wrpr .b-clanHistory-wrpr .clantag.curr a {color: #F9D088;}",
  1076. ".b-profile-wrpr .b-clanHistory-wrpr a {color: #CACBCC;}",
  1077. ".b-profile-wrpr .b-clanHistory-wrpr a:hover {color: #FFFFFF;}",
  1078. // campaign rating rules
  1079. ".b-profile-wrpr #js-knockout-fame-points {}",
  1080. ".b-profile-wrpr #js-knockout-fame-points.b-fame-points-empty {margin: 0 0 10px 0;}",
  1081. ".b-profile-wrpr .b-header-h3__user-account {display: none;}",
  1082. ".b-profile-wrpr .b-time {margin: 0;}",
  1083. ".b-profile-wrpr .b-tabs {padding-top: 0;}",
  1084. ".b-profile-wrpr .b-tabs-list {display: table; margin: 0 auto;}",
  1085. ".b-profile-wrpr .b-main-divider {margin: 0 auto; left: 0; right: 0;}",
  1086. ".b-profile-wrpr .l-tabs__top-indent {margin: 0;}",
  1087. ".b-profile-wrpr .b-fame-list {padding: 0; margin: 0 0 5px 0;}",
  1088. ".b-profile-wrpr .b-fame-indicators__one-country {background-color: unset; border-radius: 10px 10px 0 0; margin: 0 0 -1px 0; padding: 10px 20px 10px;}",
  1089. ".b-profile-wrpr .b-fame-list_item {padding: 0 10px; text-align: center;}",
  1090. ".b-profile-wrpr .b-fame-list_count {display: table; margin: 0 auto;}",
  1091. ".b-profile-wrpr .b-link-list {text-align: center;}",
  1092. ".b-profile-wrpr .b-link-list_item {padding: 0 8px;}",
  1093. // sidebar rules
  1094. ".b-profile-wrpr .l-sidebar {margin: 0; position: absolute; right: 0; top: -1px; width: auto;}",
  1095. ".b-profile-wrpr .b-context-menu {background: url("+css.u.menu+") repeat-y; border-right: 1px solid black; margin: 0; width: 200px; z-index: 3;}",
  1096. ".b-profile-wrpr .b-context-menu_wrapper {padding: 10px 0 5px;}",
  1097. ".b-profile-wrpr .b-context-menu-list {line-height: 16px;}",
  1098. ".b-profile-wrpr .b-context-menu-list a {background-position: 0 50%;}",
  1099. ".b-profile-wrpr .b-context-menu-list a:hover {background-position: -244px 50%;}",
  1100. ".b-profile-wrpr .b-context-menu-list .current-page a {background-position: -244px 50%;}",
  1101. ".b-profile-wrpr .b-context-menu-list li {padding: 4px 3px 4px 12px;}",
  1102. // sidebar messages wrapper rules
  1103. ".b-profile-wrpr .l-side-msg {position: absolute; left: 201px; text-align: center; top: 77px; width: 192px;}",
  1104. ".b-profile-wrpr .b-sidebar-widget__comparison {background-color: #000000; border: 1px solid #000000; margin: 0; position: absolute; left: 201px; top: 51px; width: 192px;}",
  1105. ".b-profile-wrpr .b-sidebar-widget {margin: 0;}",
  1106. ".b-profile-wrpr .b-sidebar-widget_inner {padding: 10px}",
  1107. ".b-profile-wrpr .b-sidebar-widget_inner__comparison {display: table; margin: 5px auto; padding: 0;}",
  1108. ".b-profile-wrpr .b-sidebar-widget_title {margin: 0 0 5px; text-align: center;}",
  1109. ".b-profile-wrpr .b-sidebar-widget_text {margin: 0 0 5px;}",
  1110. ".b-profile-wrpr .b-box-shadow.js-recruitstation-recommended-widget {margin: 0; width: 242px;}",
  1111. ".b-profile-wrpr .l-sidebar .b-b4r {height: 52px; overflow: hidden; position: absolute; top: 0; left: 201px;}",
  1112. ".b-profile-wrpr .l-sidebar .b-b4r_link img {width: 192px;}",
  1113. // userblock wrapper rules
  1114. ".b-userblock-wrpr .b-user-block {background-color: unset; margin: 0;}",
  1115. ".b-userblock-wrpr .b-user-block:first-of-type {display: none;}",
  1116. ".b-userblock-wrpr .b-user-block__sparks {background-image: url("+css.u.sparks+"); border-radius: 0 0 10px 10px;}",
  1117. ".b-userblock-wrpr .b-user-block__sparks.b-user-block_sparks-radius {border-radius: 10px;}",
  1118. ".b-userblock-wrpr .b-personal-data {min-height: 180px; padding: 0 20px 15px;}",
  1119. ".b-userblock-wrpr .t-personal-data_ico {padding: 82px 5px 0;}",
  1120. ".b-userblock-wrpr .t-personal-data_ico__hitrate {background: url("+css.u.icon1+") no-repeat 50% 50px;}",
  1121. ".b-userblock-wrpr .t-personal-data_ico__tier {background: url("+css.u.icon2+") no-repeat 50% 50px;}",
  1122. ".b-userblock-wrpr .t-personal-data_value {font-size: 28px; line-height: 100%;}",
  1123. ".b-userblock-wrpr .t-personal-data_value.t-personal-data_value__pr {font-size: 36px;}",
  1124. ".b-userblock-wrpr .b-speedometer-body {background-color: unset; padding: 20px 50px;}",
  1125. ".b-userblock-wrpr .b-speedometer {width: 33.3333%}",
  1126. ".b-userblock-wrpr .b-message-ban-holder {display: none; position: absolute; width: 620px;}",
  1127. ".b-userblock-wrpr .b-message-error {margin: 0; min-height: 48px;}",
  1128. ".b-userblock-wrpr .b-message-battle-holder {display: none; position: absolute; width: 637px; right: 0;}",
  1129. ".b-userblock-wrpr .b-message-battle {background: url("+css.u.blueMsg+") no-repeat 0 0; margin: 0; min-height: 48px; text-align: right; padding: 15px 48px 13px 13px;}",
  1130. ".b-userblock-wrpr .t-ratings-info {table-layout: fixed;}",
  1131. ".b-userblock-wrpr .t-ratings-info th {font-size: 13px; font-weight: bold; line-height: 133%; padding: 20px 0 0;}",
  1132. ".b-userblock-wrpr .t-ratings-info td {font-family: 'WarHeliosCondCBold','Arial Narrow',arial,sans-serif; font-size: 36px; line-height: 133%}",
  1133. ".b-userblock-wrpr .t-ratings-info .rating-url_nm {background: url("+css.u.nmLogo+") no-repeat left center; padding: 0 0 0 20px;}",
  1134. ".b-userblock-wrpr .ratings-table {background: url("+css.l[3]+") no-repeat 50% 0; padding: 20px 25px 10px;}",
  1135. ".b-userblock-wrpr .t-table-ratings {width: 100%;}",
  1136. ".b-userblock-wrpr .t-table-ratings td {line-height: 130%; padding: 9px 12px 2px 0; vertical-align: bottom;}",
  1137. ".b-userblock-wrpr .t-table-ratings .td-center {line-height: 16px; padding: 9px 0 2px; text-align: center;}",
  1138. ".b-userblock-wrpr .t-table-ratings .td-rating-meter {background: url("+css.l[3]+") no-repeat 50% 100%;}",
  1139. ".b-userblock-wrpr .t-table-ratings .td-rating-meter td {padding: 0;}",
  1140. ".b-userblock-wrpr .t-table-ratings .rating-meter {background: url("+css.u.rat+") no-repeat; border: 1px solid #252527; border-radius: 3px; height: 3px; margin: 0 7px;}",
  1141. ".b-userblock-wrpr .t-table-ratings .rating-meter-dail_line {background: url("+css.u.rat+") no-repeat; box-shadow: 0 0 10px 1px rgba(221, 84, 12, 0.15), 0 0 3px 1px rgba(133, 18, 11, 0.25); height: 3px; width: 0;}",
  1142. ".b-userblock-wrpr .t-table-ratings .rating-meter-marker {background: url("+css.u.ratMark+") no-repeat; float: right; height: 13px; margin: -5px -2px 0 0; width: 5px;}",
  1143. ".b-userblock-wrpr .t-table-ratings .rating-meter_wn8 {background-position: 0 0;}",
  1144. ".b-userblock-wrpr .t-table-ratings .rating-meter_wn8 .rating-meter-dail_line {background-position: 0 -3px;}",
  1145. ".b-userblock-wrpr .t-table-ratings .rating-meter_wn7 {background-position: 0 -6px;}",
  1146. ".b-userblock-wrpr .t-table-ratings .rating-meter_wn7 .rating-meter-dail_line {background-position: 0 -9px;}",
  1147. ".b-userblock-wrpr .t-table-ratings .rating-meter_eff {background-position: 0 -12px;}",
  1148. ".b-userblock-wrpr .t-table-ratings .rating-meter_eff .rating-meter-dail_line {background-position: 0 -15px;}",
  1149. ".b-userblock-wrpr .t-table-ratings .rating-meter_wn9 {background-position: 0 -18px;}",
  1150. ".b-userblock-wrpr .t-table-ratings .rating-meter_wn9 .rating-meter-dail_line {background-position: 0 -21px;}",
  1151. ".b-userblock-wrpr .t-table-ratings .b-stat-fun {height: 16px;}",
  1152. ".b-userblock-wrpr .t-table-ratings .i-stat-fun {margin-top: -9px;}",
  1153. ".b-userblock-wrpr .wnelink {padding: 5px 25px 5px 0; text-align: right;}",
  1154. ".b-userblock-wrpr .wnelink_info {background-image: url("+css.l[4]+"), url("+css.l[2]+"); background-position: 4px 0px, right 0; padding: 0 9px 0 20px;}",
  1155. ".b-userblock-wrpr .wnelink_info:hover {background-position: 4px -17px, right -22px;}",
  1156. // statistics wrapper rules
  1157. ".b-statistics-wrpr {margin: 0 0 35px;}",
  1158. ".b-statistics-wrpr .l-tabs__top-indent {margin: 0;}",
  1159. ".b-statistics-wrpr .b-tabs-list {display: table; margin: 0 auto;}",
  1160. ".b-statistics-wrpr .b-tabs-list_link {cursor: pointer;}",
  1161. ".b-statistics-wrpr .b-main-divider {margin: 0 auto; left: 0; right: 0;}",
  1162. ".b-statistics-wrpr .b-fame-indicators__one-country {background-color: unset; border-radius: 10px 10px 0 0; margin: 0 0 -1px 0; padding: 10px 20px 10px;}",
  1163. ".b-statistics-wrpr .b-fame-indicators {border-radius: 10px; padding: 20px 8px;}",
  1164. ".b-statistics-wrpr .b-tabs {padding-top: 0;}",
  1165. ".b-statistics-wrpr .b-tabs > div {display: none; margin: 0 auto}",
  1166. ".b-statistics-wrpr .b-tabs .js-stat_active {display: table;}",
  1167. ".b-statistics-wrpr .b-tab-clan .b-result {width: 296px;}",
  1168. ".b-statistics-wrpr .b-tab-more .b-result {width: 420.5px; padding: 0 18px;}",
  1169. ".b-statistics-wrpr .b-tab-strong .b-result {padding: 0 20px; width: 428px;}",
  1170. ".b-statistics-wrpr .b-tab-team .b-result {padding: 0 20px; width: 428px;}",
  1171. ".b-statistics-wrpr .b-tab-other .b-result {width: 296px;}",
  1172. ".b-statistics-wrpr .b-tab-more .b-result td:last-of-type {min-width: 45px;}",
  1173. ".b-statistics-wrpr .b-tab-user > div {width: 359px;}",
  1174. ".b-statistics-wrpr .b-tab-user > div:first-of-type {width: 255px;}",
  1175. ".b-statistics-wrpr .b-tab-user > div:last-of-type {width: 275px;}",
  1176. ".b-statistics-wrpr .b-result {float: none; display: inline-block; margin: 0; padding: 0 8px; vertical-align: top; width: 317px;}",
  1177. ".b-statistics-wrpr .t-dotted td {line-height: 23px; padding: 0 1px;}",
  1178. ".b-statistics-wrpr .t-dotted tr:hover td {color: #79797A;}",
  1179. ".b-statistics-wrpr .t-dotted td.t-dotted_class-ico {line-height: 13px;}",
  1180. ".b-statistics-wrpr .t-dotted td.t-dotted_class-ico img {margin: 2px 0 -1px;}",
  1181. ".b-statistics-wrpr .b-result .t-dotted__fixed {table-layout: auto;}",
  1182. ".b-statistics-wrpr .b-result-classes span {color: #606061; display: inline-block; width: 48px;}",
  1183. ".b-statistics-wrpr .b-result-api h3 {background: url("+css.u.wgLogo+") no-repeat right 2px top 2px;}",
  1184. ".b-statistics-wrpr .t-dotted td {background: url("+css.l[3]+") no-repeat 50% 100%;}",
  1185. ".b-statistics-wrpr .b-stat-legend {line-height: 15px; margin-top: 20px; text-align: center;}",
  1186. // cake diagram rules
  1187. ".b-diagrams-sector {margin: 0 0 35px;}",
  1188. ".b-diagrams-sector h3 {text-align: center;}",
  1189. ".b-diagrams-sector .b-diagram-block {display: table-cell; float: none; padding: 0 2px; width: 33.335%;}",
  1190. ".b-diagrams-sector .b-diagram-block h3 {margin: 0 0 3px 0;}",
  1191. ".b-diagrams-sector .b-diagram-block h4 {font-size: 12px; margin: 0;}",
  1192. ".b-diagrams-sector .b-diagram-wrpr {float: none; margin: 0 auto;}",
  1193. ".b-diagrams-sector .t-dotted.t-dotted__diagram {margin-top: 0px; width: 100%;}",
  1194. ".b-diagrams-sector .t-dotted_diagram-bg {position: unset;}",
  1195. ".b-diagrams-sector .t-dotted_diagram-percent {display: inline-block; width: 40px;}",
  1196. ".b-diagrams-sector .b-diagram-total {margin: 25px 0 0;}",
  1197. ".b-diagrams-sector .t-diagram_rating {display: inline-block; margin-right: 20px;}",
  1198. ".b-diagrams-sector .t-dotted_diagram-info .js-results {display: inline-block; margin: 0 3px; text-align: right; width: 40px;}",
  1199. ".b-diagrams-sector .b-diagram-ico_tier {background: url("+css.u.tiers+") no-repeat; padding-left: 30px;}",
  1200. ".b-diagrams-sector .b-diagram-ico_tier-1 {background-position: 4px 1px;}",
  1201. ".b-diagrams-sector .b-diagram-ico_tier-2 {background-position: 4px -14px;}",
  1202. ".b-diagrams-sector .b-diagram-ico_tier-3 {background-position: 4px -29px;}",
  1203. ".b-diagrams-sector .b-diagram-ico_tier-4 {background-position: 4px -45px;}",
  1204. ".b-diagrams-sector .b-diagram-ico_tier-5 {background-position: 4px -59px;}",
  1205. ".b-diagrams-sector .b-diagram-ico_tier-6 {background-position: 4px -74px;}",
  1206. ".b-diagrams-sector .b-diagram-ico_tier-7 {background-position: 4px -89px;}",
  1207. ".b-diagrams-sector .b-diagram-ico_tier-8 {background-position: 4px -104px;}",
  1208. ".b-diagrams-sector .b-diagram-ico_tier-9 {background-position: 4px -120px;}",
  1209. ".b-diagrams-sector .b-diagram-ico_tier-10 {background-position: 4px -134px;}",
  1210. ".b-diagrams-sector .t-dotted__diagram tr td.t-dotted_diagram-last {width: 0;}",
  1211. // achievement wrapper rules
  1212. ".b-achievements-wrpr {margin: 0 0 50px;}",
  1213. ".b-achievements-wrpr .b-vertical-arrow {display: table; margin: 8px auto 0; padding: 2px 10px 0;}",
  1214. ".b-achievements-wrpr .js-all-achievements {display: table; margin: 15px auto 0; width: 897px;}",
  1215. ".b-achievements-wrpr .b-achivements {display: table; margin: 0 auto; padding: 0 0 20px;}",
  1216. ".b-achievements-wrpr .b-achivements-head {margin-top: 15px;}",
  1217. ".b-achievements-wrpr .b-achivements_item {display: inline-block; float: unset; margin: 5px 0 0 0; width: 72px;}",
  1218. ".b-achievements-wrpr .b-achivements_item img {display: table; margin: 0 auto;}",
  1219. ".b-achievements-wrpr .js-all-achievements #js-achivement-mechanicEngineer5 {margin-left: 112.5px;}",
  1220. ".b-achievements-wrpr .js-all-achievements #js-achivement-medalBurda {margin-left: 112.5px;}",
  1221. ".b-achievements-wrpr .js-all-achievements #js-achivement-tankwomen {margin-left: 375px;}",
  1222. ".b-achievements-wrpr .js-all-achievements #js-achivement-soldierOfFortune {margin-left: 112.5px;}",
  1223. // global rating rules
  1224. "#js-knockout-ratings {margin: 0 0 35px;}",
  1225. "#js-knockout-ratings .b-composite-heading {margin: 21px 0 15px 400px; width: 553px;}",
  1226. "#js-knockout-ratings .b-profile-ratings-date {margin-top: 1px}",
  1227. "#js-knockout-ratings .b-leadership-info {display: table; margin: 0 auto;}",
  1228. "#js-knockout-ratings .b-profile-link {display: table; margin: 14px auto 0}",
  1229. "#js-knockout-ratings .b-msg-important__rating {display: table; margin: 5px auto 0;}",
  1230. "#js-knockout-ratings .b-rating-dial__user {display: table; margin: 30px auto 22px;}",
  1231. "#js-knockout-ratings .b-orange-arrow__leadership {display: table; margin: 25px auto 0;}",
  1232. "#js-knockout-ratings .b-leadership-rating-text {text-align: center;}",
  1233. "#js-knockout-ratings .l-leadership-info-alignment {text-align: center;}",
  1234. // vehicle table rules
  1235. ".b-vehicles-wrpr {margin: 20px 0;}",
  1236. ".b-vehicles-wrpr .b-vehicles-header {display: table; margin: 0 auto 15px}",
  1237. ".b-vehicles-wrpr .b-profile-vehicles-tankstat {margin: 0; position: absolute; right: 15px;}",
  1238. ".b-vehicles-wrpr .b-profile-vehicles-tankstat_link {background-image: url("+css.u.vbLogo+"), url("+css.l[2]+"); background-position: left center, right 0px; padding: 0 9px 0 20px;}",
  1239. ".b-vehicles-wrpr .b-profile-vehicles-tankstat_link:hover {background-position: left center, right -22px;}",
  1240. ".b-vehicles-wrpr .t-profile__vehicle .t-profile_right {text-align: center;}",
  1241. ".b-vehicles-wrpr .t-profile_dropdown-ico .tablesorter-header-inner {display: inherit;}",
  1242. ".b-vehicles-wrpr .t-profile_tankstype-prem td {border-top: 2px dashed #212123;}",
  1243. ".b-vehicles-wrpr .t-profile_tankstype-prem .b-tankstype-text {color: #FFC363;}",
  1244. ".b-vehicles-wrpr .t-profile_tankstype-prem.t-profile_tankstype__empty .b-tankstype-text {color: rgba(255, 195, 99, 0.3);}",
  1245. ".b-vehicles-wrpr .t-profile_tankstype-miss .b-tankstype-text {color: #D00900;}",
  1246. ".b-vehicles-wrpr .b-tankstype-ico__miss {background: url("+css.u.miss+") no-repeat center center;}",
  1247. ".b-vehicles-wrpr .t-profile .t-profile_tankstype td {height: 50px; padding: 0; vertical-align: middle;}",
  1248. ".b-vehicles-wrpr .b-tankstype-ico {display: table-cell;}",
  1249. ".b-vehicles-wrpr .b-tankstype-ico__lighttank {background-position: 0 -114px;}",
  1250. ".b-vehicles-wrpr .b-tankstype-ico__mediumtank {background-position: 0 -173px;}",
  1251. ".b-vehicles-wrpr .b-tankstype-ico__heavytank {background-position: 0 5px;}",
  1252. ".b-vehicles-wrpr .b-tankstype-ico__at-spg {background-position: 0 -232px;}",
  1253. ".b-vehicles-wrpr .b-tankstype-ico__spg {background-position: 0 -54px;}",
  1254. ".b-vehicles-wrpr .b-tankstype-ico__prem {background-position: 0 -291px;}",
  1255. ".b-vehicles-wrpr .b-tankstype-ico__ten {background: url("+css.u.tenIcon+") no-repeat center center; color: #BBB7AC; font-size: 17px; font-weight: 100; padding: 0 0 3px; text-align: center;}",
  1256. ".b-vehicles-wrpr .b-tankstype-ico__test {background: url("+css.u.testIcon+") no-repeat center center; color: #BBB7AC; font-size: 17px; font-weight: 100; padding: 0 0 3px; text-align: center;}",
  1257. ".b-vehicles-wrpr .b-tankstype-text {display: table-cell; height: inherit; vertical-align: middle; width: 304px;}",
  1258. ".b-vehicles-wrpr .t-profile .t-profile_tankstype__item td {height: 40px; padding: 0; vertical-align: middle;}",
  1259. ".b-vehicles-wrpr .t-profile .t-profile_tankstype__item:hover td {background: rgba(0, 0, 0, 0.04); border-bottom: 1px solid rgba(255, 255, 255, 0); color: #BABCBF;}",
  1260. ".b-vehicles-wrpr .t-profile .t-profile_tankstype td.t-profile_center div.hidden {display: none;}",
  1261. ".b-vehicles-wrpr .t-profile .t-profile_tankstype td.t-profile_center span:first-of-type {margin-right: 5px;}",
  1262. ".b-vehicles-wrpr .t-profile .t-profile_tankstype td.t-profile_center span:last-of-type {margin-left: 5px;}",
  1263. ".b-vehicles-wrpr .b-armory-wrapper {height: inherit; margin: 0; padding: 0; width: 160px;}",
  1264. ".b-vehicles-wrpr .b-armory-wrapper .b-armory-level {display: table-cell; font-size: unset; height: inherit; position: unset; vertical-align: middle; left: 0; top: 0;}",
  1265. ".b-vehicles-wrpr .b-armory-wrapper img.png {height: 64px; margin: -50px 0 0 24px;}",
  1266. ".b-vehicles-wrpr .i-super_icon {position: absolute; right: 30px; bottom: -3px;}",
  1267. ".b-vehicles-wrpr .b-name-vehicle {color: #BBB7AC; display: table-cell; height: inherit; vertical-align: middle; width: 178px; max-width: 178px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;}",
  1268. ".b-vehicles-wrpr .b-name-vehicle.b-gold-name {color: #FFC363;}",
  1269. ".b-vehicles-wrpr .b-name-vehicle.b-red-name {color: #D00900;}",
  1270. ".b-vehicles-wrpr .b-rating-vehicle {display: table-cell; height: inherit; text-align: right; vertical-align: middle; width: 50px;}",
  1271. ".b-vehicles-wrpr .t-profile_dropdown-link {display: inherit;}",
  1272. ".b-vehicles-wrpr .js-error-data {text-align: center;}",
  1273. ".b-vehicles-wrpr .b-msg-error {display: table; margin: 0 auto;}",
  1274. ".b-vehicles-wrpr .b-vehicle-detail_txt {margin: 0 auto 4px; text-align: center; width: 768px;}",
  1275. ".b-vehicles-wrpr .b-vehicle-detail_link {display: table; margin: 0 auto;}",
  1276. ".b-vehicles-wrpr .b-vehicle-slider {margin: 23px 64px 17px}",
  1277. ".b-vehicles-wrpr .b-vehicle-slider_inner {width: 741px;}",
  1278. ".b-vehicles-wrpr .b-vehicle-slider_prev {left: -12px;}",
  1279. ".b-vehicles-wrpr .b-vehicle-slider_next {right: -12px;}",
  1280. ".b-vehicles-wrpr .b-vehicle-minitable {margin: 0 43px; width: 350px;}",
  1281. ".b-vehicles-wrpr .b-vehicle-minitable__right {float: left;}",
  1282. // profile navigator
  1283. ".b-profile-nav {font-family: Arial; font-size: 13px; text-align: center;}",
  1284. ".b-profile-nav-top {max-width: 135px; left: 0; margin: 0 auto; padding: 8px 0px 8px; position: absolute; right: 0; top: 0; z-index: 1000;}",
  1285. ".wrapper-dropdown .b-profile-nav {float: left; padding: 7px 0 0;}",
  1286. ".b-profile-nav a {background: url("+css.l[5]+") no-repeat; cursor: pointer; margin: 0 10px 0 0; padding: 0 10px;}",
  1287. ".b-profile-nav a.top {background-position: 100% 0px;}",
  1288. ".b-profile-nav a.top:hover {background-position: 100% -36px;}",
  1289. ".b-profile-nav a.bot {background-position: 100% -18px;}",
  1290. ".b-profile-nav a.bot:hover {background-position: 100% -54px;}",
  1291. ".b-profile-nav span {border-bottom: 1px dashed;}",
  1292. // multiple usage rules
  1293. ".b-orange-arrow__heading, .b-profile-ratings_link {margin: 4px 0 0;}",
  1294. // region spesific rules
  1295. "body.reg-KR h1, body.reg-KR .b-header-h1 {line-height: 1;}",
  1296. ".b-diagrams-sector .reg-RUS .b-diagram-tiers .js-results {margin: 0 0 0 15px;}",
  1297. ".b-achievements-wrpr .reg-KR .js-full-achievements {margin: 0 34px 30px;}",
  1298. // element display state rules
  1299. ".b-display-none, .b-profile-wrpr .b-clanHistory-wrpr span.b-display-none {display: none;}",
  1300. ".b-display-block {display: block !important;}",
  1301. ".b-display-table {display: table !important;}"
  1302. ]);
  1303. // applies relevant style for own profile
  1304. if (wg.own) {
  1305. styleText.push(
  1306. ".b-context-menu-list__bottomindent {border-bottom: 1px dashed #212123; max-height: 115px; margin: 0; padding-bottom: 4px; overflow: hidden; transition: max-height 0.15s ease-out;}",
  1307. ".b-context-menu-list__bottomindent:hover {border: none; max-height: 300px; transition: max-height 0.25s ease-in;}"
  1308. );
  1309. }
  1310. style.textContent = styleText.join("");
  1311. // end style
  1312.  
  1313. // formula calculations and variables
  1314. // premium tanks up to 0.9.15
  1315. var premArr = [
  1316. // russian
  1317. "r125_t_45", "tetrarch_ll", "bt-sv", "m3_stuart_ll", "r65_t-127", "r86_ltp", "r105_bt_7a", "valentine_ll",
  1318. "a-32", "r118_t28_f30", "matilda_ii_ll", "r108_t34_85m", "r117_t34_85_rudy", "t44_85", "t44_122", "r112_t54_45", "r127_t44_100_p", "object_907", "r120_t22sr_a22",
  1319. "churchill_ll", "r38_kv-220_action", "r38_kv-220", "r114_object_244", "r71_is_2b", "r54_kv-5", "r61_object252", "r113_object_730", "r115_is-3_auto", "r123_kirovets_1", "r128_kv4_kreslavskiy", "r110_object_260", "r119_object_777",
  1320. "su76i", "su_85i", "su100y", "su122_44", "r116_isu122c_berlin", "r111_isu130", "r121_kv4_ktt", "r126_object_730_5",
  1321. // german
  1322. "h39_captured", "g108_pzkpfwii_ausfd", "g36_pzii_j", "t-15", "g117_toldi_iii", "g120_m41_90", "g120_m41_90_grandfinal",
  1323. "g34_s35_captured", "g100_gtraktor_krupp", "g46_t-25", "g116_turan_iii_prot", "pziv_hydro", "g107_pzkpfwiii_ausfk", "pzv_pziv", "pzv_pziv_ausf_alfa", "pziv_schmalturm", "g78_panther_m10", "g106_pzkpfwpanther_ausff", "g119_panzer58", "g119_pz58_mutz", "g105_t-55_nva_ddr",
  1324. "b-1bis_captured", "g58_vk4502p", "g118_vk4503", "lowe", "g115_typ_205_4_jun", "g92_vk7201",
  1325. "g104_stug_iv", "dickermax", "g48_e-25", "g109_steyr_wt", "g65_jagdtiger_sdkfz_185", "g112_kanonenjagdpanzer", "g114_skorpian",
  1326. // american
  1327. "t2_lt", "t1_e6", "t7_combat_car", "m22_locust", "mtls_1g14", "a112_t71e2",
  1328. "a78_m4_improved", "ram-ii", "m4a2e4", "a104_m4a3e8a", "a86_t23e3", "a63_m46_patton_kr", "a80_t26_e4_superpershing", "a111_t25_pilot", "t95_e2", "a92_m60", "a95_t95_e6", "a106_m48a2_120",
  1329. "t14", "a13_t34_hvy", "a45_m6a2e1",
  1330. "a101_m56", "a102_t28_concept",
  1331. // french
  1332. "f69_amx13_57_100", "f69_amx13_57_100_grandfinal",
  1333. "f68_amx_chasseur_de_char_46", "f73_m4a1_revalorise",
  1334. "f65_fcm_50t", "f74_amx_m4_1949",
  1335. "fcm_36pak40",
  1336. "f28_105_lefh18b2",
  1337. // british
  1338. "gb76_mk_vic",
  1339. "gb33_sentinel_ac_i", "gb68_matilda_black_prince", "gb35_sentinel_ac_iv", "gb85_cromwell_berlin", "gb70_n_fv4202_105", "gb87_chieftain_t95_turret",
  1340. "gb51_excelsior", "gb63_tog_ii", "gb52_a45",
  1341. "gb71_at_15a",
  1342. "gb78_sexton_i",
  1343. // chinese
  1344. "ch24_type64", "ch02_type62",
  1345. "ch01_type59", "ch01_type59_gold", "ch14_t34_3", "ch26_59_patton", "ch25_121_mod_1971b",
  1346. "ch03_wz-111", "ch23_112",
  1347. // japanese
  1348. "te_ke", "ke_ni_b",
  1349. "j12_chi_nu_kai", "j18_sta_2_3",
  1350. "j19_tiger_i_jpn",
  1351. // czechoslovakian
  1352. "cz01_skoda_t40"
  1353. ],
  1354. superArr = [
  1355. // russian
  1356. "r125_t_45", "t44_85", "t44_122", "r114_object_244", "r123_kirovets_1", "r128_kv4_kreslavskiy", "r119_object_777", "r121_kv4_ktt", "r126_object_730_5",
  1357. // german
  1358. "g120_m41_90", "g107_pzkpfwiii_ausfk", "g119_panzer58", "g58_vk4502p", "g115_typ_205_4_jun", "g109_steyr_wt", "g114_skorpian",
  1359. // american
  1360. "a112_t71e2", "a111_t25_pilot", "a106_m48a2_120",
  1361. // french
  1362. "f69_amx13_57_100", "f74_amx_m4_1949",
  1363. // british
  1364. // "",
  1365. // chinese
  1366. "ch25_121_mod_1971b"
  1367. // japanese
  1368. // "",
  1369. // czechoslovakian
  1370. // "",
  1371. ];
  1372.  
  1373. // variable for statistics
  1374. var s = {
  1375. b:[{c:0,p:0},{c:0,p:0},{c:0,p:0},{c:0,p:0},{c:0,p:0},{c:0,p:100}], // badges
  1376. f:{wn8:{},wn7:{},eff:{},wgr:{}}, // formulas
  1377. h:{}, // hex colours
  1378. s:{e:{r:[],b:0,w:0,bg:0},p:{r:[],b:0,w:0,bg:0},t:{r:[],b:0,w:0,bg:0},s:{r:[],b:0,w:0,bg:0}}, // custom tank tables
  1379. t:[{b:0,c:0,t:1},{b:0,c:0,t:2},{b:0,c:0,t:3},{b:0,c:0,t:4},{b:0,c:0,t:5},{b:0,c:0,t:6},{b:0,c:0,t:7},{b:0,c:0,t:8},{b:0,c:0,t:9},{b:0,c:0,t:10}], // tiers
  1380. v:{a:0,bats:0,tier:0}, // vehicles
  1381. w:{e:{frag:0,dmg:0,spot:0,def:0,win:0},c:{}}, // wn8 expected values
  1382. };
  1383.  
  1384. // total mastery badge and colouring tank table category rows
  1385. var typeRow_class = d.getElementsByClassName('t-profile_tankstype js-table-dropdown-link');
  1386. for (var _tr=0, _tr_len = typeRow_class.length; _tr<_tr_len; _tr++) {
  1387. var typeRow = typeRow_class[_tr],
  1388. typeBats = sf.format(typeRow.cells[1].innerHTML,1),
  1389. typeWinrate = sf.format(typeRow.cells[2].innerHTML,1),
  1390. typeWins = typeBats*(typeWinrate/100);
  1391.  
  1392. // modify table
  1393. typeRow.cells[2].innerHTML = sf.color(typeWinrate, "wr", 0, "%")+"≈<span>"+sf.format(typeWins,2)+"</span>";
  1394. }
  1395.  
  1396. // average tier, colouring premium tanks and winrates in vehicle tables
  1397. var vehRow_class = d.getElementsByClassName('t-profile_tankstype t-profile_tankstype__item'),
  1398. vehRowStats_class = d.getElementsByClassName('t-profile_slidedown tablesorter-childRow');
  1399. for (var _vr=0, _vr_len = vehRow_class.length; _vr<_vr_len; _vr++) {
  1400. var vehRow = vehRow_class[_vr],
  1401. vehRowStats = vehRowStats_class[_vr],
  1402. vehImg = vehRow.cells[0].getElementsByTagName('img')[0],
  1403. vehImgBdg = vehRow.cells[3].getElementsByTagName('img')[0],
  1404. vehSpan = vehRow.cells[0].getElementsByTagName('span'),
  1405. vehImgName = vehImg.src.match(/\w+\-([\w\-]+).png/),
  1406. vehId = vehRowStats.getAttribute('data-vehicle-cd'),
  1407. vehBats = sf.format(vehRow.cells[1].innerHTML,1),
  1408. vehWinrate = sf.format(vehRow.cells[2].innerHTML,1),
  1409. vehTier = vehSpan[0].getAttribute('data-veh_level'),
  1410. vehWins = vehBats*(vehWinrate/100),
  1411. vehBadge = (vehImgBdg) ? vehImgBdg.getAttribute('data-badge_code') : 0;
  1412.  
  1413. // modify table
  1414. vehRow.classList.add("js-"+vehId);
  1415. vehImg.src = "http://"+wg.host+"/static/wot/encyclopedia/tankopedia/vehicle/"+vehImgName[0];
  1416. vehRow.cells[2].innerHTML = sf.color(vehWinrate, "wr", 0, "%")+"≈<span>"+sf.format(vehWins,2)+"</span>";
  1417.  
  1418. // vehicle badges
  1419. s.b[vehBadge].c ++;
  1420.  
  1421. // vehicle battles per tier and amount
  1422. s.t[vehTier-1].b += vehBats;
  1423. s.t[vehTier-1].c ++;
  1424. s.v.tier += vehTier*vehBats;
  1425. s.v.a ++;
  1426.  
  1427. // check if vehicle exists in wnefficiency value array - report if not and exclude from ratings
  1428. var vehExp = false;
  1429. for (var _so=0, _so_len = wn.wn8.length; _so<_so_len; _so++) {
  1430. if (wn.wn8[_so].IDNum == vehId) {
  1431. vehExp = wn.wn8[_so];
  1432. break;
  1433. }
  1434. }
  1435. if (vehExp) {
  1436. // add data to vehExp array
  1437. vehExp.name = vehSpan[1].innerHTML;
  1438. vehExp.tier = vehTier;
  1439. vehExp.type = vehRow.parentNode.previousElementSibling.getElementsByTagName('span')[0].className.match(/__([\w-]+)/)[1];
  1440. vehExp.nation = vehRow.cells[0].firstElementChild.className.match(/__(\w+)/)[1];
  1441. // add to total vehicle battles if it exists in wnefficiency table
  1442. s.v.bats += vehBats;
  1443. // summarize expected stat from every vehicle for WN8
  1444. s.w.e.frag += vehExp.expFrag * vehBats;
  1445. s.w.e.dmg += vehExp.expDamage * vehBats;
  1446. s.w.e.spot += vehExp.expSpot * vehBats;
  1447. s.w.e.def += vehExp.expDef * vehBats;
  1448. s.w.e.win += vehExp.expWinRate * vehBats;
  1449. }
  1450. else {
  1451. s.s.e.b += vehBats;
  1452. s.s.e.w += vehWins;
  1453. vehSpan[1].classList.add("b-red-name");
  1454. s.s.e.r.push([vehRow.cloneNode(true), vehRowStats.cloneNode(true)]);
  1455. if (vehBadge !== 0) {
  1456. s.s.e.bg ++;
  1457. }
  1458. if (premArr.indexOf(vehImgName[1]) == -1) {
  1459. console.error(vehImgName[1]);
  1460. }
  1461. }
  1462.  
  1463. // get info for super tester table
  1464. if (superArr.indexOf(vehImgName[1]) > -1) {
  1465. vehRow.cells[0].firstElementChild.appendChild(sf.elem("img", "i-super_icon", "", {src:"https://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img/supertest.png"}));
  1466. s.s.s.b += vehBats;
  1467. s.s.s.w += vehWins;
  1468. vehSpan[1].classList.add("b-gold-name");
  1469. s.s.s.r.push([vehRow.cloneNode(true), vehRowStats.cloneNode(true)]);
  1470. if (vehBadge !== 0) {
  1471. s.s.s.bg ++;
  1472. }
  1473. if (vehExp) {
  1474. vehExp.test = true;
  1475. }
  1476. }
  1477.  
  1478. // get info for premium table
  1479. if (premArr.indexOf(vehImgName[1]) > -1) {
  1480. s.s.p.b += vehBats;
  1481. s.s.p.w += vehWins;
  1482. vehSpan[1].classList.add("b-gold-name");
  1483. s.s.p.r.push([vehRow.cloneNode(true), vehRowStats.cloneNode(true)]);
  1484. if (vehBadge !== 0) {
  1485. s.s.p.bg ++;
  1486. }
  1487. if (vehExp) {
  1488. vehExp.prem = true;
  1489. }
  1490. }
  1491.  
  1492. // get info for tier 10 table
  1493. if (vehTier == 10) {
  1494. s.s.t.b += vehBats;
  1495. s.s.t.w += vehWins;
  1496. s.s.t.r.push([vehRow.cloneNode(true), vehRowStats.cloneNode(true)]);
  1497. if (vehBadge !== 0) {
  1498. s.s.t.bg ++;
  1499. }
  1500. }
  1501. }
  1502.  
  1503. // finding statistic tables
  1504. var mb_table = d.getElementsByClassName('b-result-classes')[0].getElementsByClassName('t-dotted')[0],
  1505. or_table = d.getElementsByClassName('b-result')[0].getElementsByClassName('t-dotted')[0],
  1506. bp_table = d.getElementsByClassName('b-result')[1].getElementsByClassName('t-dotted')[0],
  1507. sm_ratio = d.getElementsByClassName('b-speedometer-ratio'),
  1508. pd_table = d.getElementsByClassName('t-dotted');
  1509.  
  1510. // fetching info, calculate averages, colourize and store into var s
  1511. // r = raw stats
  1512. s.r = {
  1513. days: (sc.date.raw - new Date(d.getElementsByClassName('js-date-format')[0].getAttribute('data-timestamp')*1000))/1000/60/60/24,
  1514. bats: sf.format(or_table.rows[0].cells[1].innerHTML,1),
  1515. wins: sf.format(or_table.rows[1].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  1516. loss: sf.format(or_table.rows[2].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  1517. surv: sf.format(or_table.rows[3].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  1518. exp: sf.format(or_table.rows[4].cells[1].innerHTML,1),
  1519. expA: sf.format(or_table.rows[5].cells[1].innerHTML,1),
  1520. frag: sf.format(bp_table.rows[0].cells[1].innerHTML,1),
  1521. spot: sf.format(bp_table.rows[1].cells[1].innerHTML,1),
  1522. hits: sf.format(bp_table.rows[2].cells[1].innerHTML,1),
  1523. dmgD: sf.format(bp_table.rows[3].cells[1].innerHTML,1),
  1524. caps: sf.format(bp_table.rows[5].cells[1].innerHTML,1),
  1525. defs: sf.format(bp_table.rows[6].cells[1].innerHTML,1),
  1526. dths: sf.format(sm_ratio[0].innerHTML.match(/\/(.+)$/)[1],1),
  1527. dmgR: sf.format(sm_ratio[1].innerHTML.match(/\/(.+)$/)[1],1)
  1528. };
  1529. s.r.draw = s.r.bats-(s.r.wins+s.r.loss);
  1530. s.r.winLR = s.r.wins/s.r.loss;
  1531. // a = average stats
  1532. s.a = {
  1533. bats: s.r.bats/s.r.days,
  1534. wins: (s.r.wins/s.r.bats)*100,
  1535. loss: (s.r.loss/s.r.bats)*100,
  1536. draw: (s.r.draw/s.r.bats)*100,
  1537. surv: (s.r.surv/s.r.bats)*100,
  1538. frag: s.r.frag/s.r.bats,
  1539. dths: s.r.dths/s.r.bats,
  1540. spot: s.r.spot/s.r.bats,
  1541. dmgD: s.r.dmgD/s.r.bats,
  1542. dmgR: s.r.dmgR/s.r.bats,
  1543. caps: s.r.caps/s.r.bats,
  1544. defs: s.r.defs/s.r.bats,
  1545. tier: s.v.tier/s.v.bats
  1546. };
  1547. // c = coloured stats
  1548. s.c = {
  1549. winsR: sf.color(s.a.wins, "wr", 2, "%"),
  1550. lossR: sf.color(s.a.loss, "lr", 2, "%"),
  1551. survR: sf.color(s.a.surv, "sr", 2, "%"),
  1552. hitsR: sf.color(s.r.hits, "hr", 2, "%"),
  1553. drawR: sf.color(s.a.draw, "", 2, "%"),
  1554. batsC: sf.color(s.r.bats, "bat", 0),
  1555. dmgTier: sf.color(s.a.dmgD/s.a.tier, "dmg", 0, "", s.a.dmgD)
  1556. };
  1557. // p = personal stats - store to display on all profile pages
  1558. var userData = sf.storage("wnExpUserdata", "", "get", "parse");
  1559. if (wg.own) {
  1560. s.p = {
  1561. gold: [pd_table[0].rows[0].cells[0].textContent, pd_table[0].rows[0].cells[1].firstElementChild.textContent],
  1562. cred: [pd_table[0].rows[1].cells[0].textContent, pd_table[0].rows[1].cells[1].firstElementChild.textContent],
  1563. fxp: pd_table[0].rows[2].cells[1].firstElementChild.textContent
  1564. };
  1565. if (pd_table[1].rows[1]) {
  1566. s.p.prem = [pd_table[1].rows[1].cells[0].textContent, pd_table[1].rows[1].cells[1].textContent];
  1567. }
  1568. sf.storage("wnExpUserdata", s.p, "set", "string");
  1569. }
  1570. else if (userData) {
  1571. s.p = userData;
  1572. }
  1573. // calculate badge percent
  1574. s.b[5].c = s.v.a;
  1575. for (var _b=0, _b_len = s.b.length; _b<_b_len; _b++) {
  1576. s.b[_b].p = s.b[_b].c/s.b[5].c*100;
  1577. }
  1578. // prepare numbers for WN8 formula
  1579. s.w.c.win = Math.max((s.a.wins/(s.w.e.win/s.v.bats)-0.71)/(1-0.71),0);
  1580. s.w.c.dmg = Math.max((s.a.dmgD/(s.w.e.dmg/s.v.bats)-0.22)/(1-0.22),0);
  1581. s.w.c.frag = Math.max(Math.min(s.w.c.dmg+0.2,(s.a.frag/(s.w.e.frag/s.v.bats)-0.12)/(1-0.12)),0);
  1582. s.w.c.spot = Math.max(Math.min(s.w.c.dmg+0.1,(s.a.spot/(s.w.e.spot/s.v.bats)-0.38)/(1-0.38)),0);
  1583. s.w.c.def = Math.max(Math.min(s.w.c.dmg+0.1,(s.a.defs/(s.w.e.def/s.v.bats)-0.10)/(1-0.10)),0);
  1584.  
  1585. // calculate ratings
  1586. // wg personal rating
  1587. s.f.wgr = (function() {
  1588. var rat = sf.format(d.getElementsByClassName("t-personal-data_value__pr")[0].innerHTML,1);
  1589. return { rat: rat, ratCol: sf.color(rat,"wgr",0) };
  1590. })();
  1591. // WN8
  1592. s.f.wn8 = (function() {
  1593. var frag = 210*s.w.c.dmg*s.w.c.frag,
  1594. dmg = 980*s.w.c.dmg,
  1595. spot = 155*s.w.c.frag*s.w.c.spot,
  1596. def = 75*s.w.c.def*s.w.c.frag,
  1597. win = 145*Math.min(1.8,s.w.c.win),
  1598. rat = frag+dmg+spot+def+win,
  1599. pct = (rat<=sc.col.sUni[9]) ? (rat/sc.col.sUni[9])*100 : 100,
  1600. scale = (rat<=sc.col.sUni[9]) ? Math.max(0,Math.min(100,rat*(rat*(rat*(rat*(rat*(-rat*0.00000000000000000004164+0.000000000000001176)-0.000000000009033)+0.000000027466)-0.00003804)+0.05819)-0.965)) : 100;
  1601. return { frag: frag, dmg: dmg, spot: spot, def: def, win: win, rat: rat, pct: pct, scale: scale, ratCol: (isFinite(rat)) ? sf.color(rat,"wn8",2) : loc[15], scaleCol: (isFinite(rat)) ? sf.color(scale,"wn8",2) : loc[15]};
  1602. })();
  1603. // WN7 - legacy support
  1604. s.f.wn7 = (function() {
  1605. var frag = s.a.frag*(1240-1040/(Math.pow(Math.min(s.a.tier,6),0.164))),
  1606. dmg = s.a.dmgD*530/(184*Math.exp(0.24*s.a.tier)+130),
  1607. spot = s.a.spot*125*Math.min(s.a.tier,3)/3,
  1608. def = Math.min(2.2,s.a.defs)*100,
  1609. win = (((185/(0.17+Math.exp((s.a.wins-35)*-0.134)))-500)*0.45),
  1610. norm = -Math.abs((((5-Math.min(s.a.tier,5))*125)/(1+Math.exp(s.a.tier-Math.pow(s.r.bats/220,3/s.a.tier))*1.5))),
  1611. rat = frag+dmg+spot+def+win+norm,
  1612. pct = (rat<=sc.col.sUni[10]) ? (rat/sc.col.sUni[10])*100 : 100,
  1613. scale = (rat<=sc.col.sUni[10]) ? Math.max(0,Math.min(100,rat*(rat*(rat*(rat*(rat*(rat*0.000000000000000001225-0.000000000000007167)+0.000000000005501)+0.00000002368)-0.00003668)+0.05965)-5.297)) : 100;
  1614. return { frag: frag, dmg: dmg, spot: spot, def: def, win: win, norm: norm, rat: rat, pct: pct, scale: scale, ratCol: sf.color(rat,"wn7",2), scaleCol: sf.color(scale,"wn7",2) };
  1615. })();
  1616. // efficiency - improved
  1617. s.f.eff = (function() {
  1618. var frag = s.a.frag*250,
  1619. dmg = s.a.dmgD*(10/(s.a.tier+2))*(0.23+2*s.a.tier/100),
  1620. spot = s.a.spot*150,
  1621. cap = (Math.log(s.a.caps+1)/Math.log(1.732))*150,
  1622. def = s.a.defs*150,
  1623. rat = frag+dmg+spot+cap+def,
  1624. pct = (rat<=sc.col.sUni[11]) ? (rat/sc.col.sUni[11])*100 : 100,
  1625. scale = (rat<=sc.col.sUni[11]) ? Math.max(0,Math.min(100,rat*(rat*(rat*(rat*(rat*(rat*0.000000000000000013172 - 0.000000000000092286)+0.00000000023692)-0.00000027377)+0.00012983)+0.05935)-31.684)) : 100;
  1626. return { frag: frag, dmg: dmg, spot: spot, cap: cap, def: def, rat: rat, pct: pct, scale: scale, ratCol: sf.color(rat,"eff",2), scaleCol: sf.color(scale,"eff",2) };
  1627. })();
  1628. // localized stats
  1629. s.l = {
  1630. veh: "<span style='color:#CD3333'>"+sf.format(s.v.bats,2)+"</span>",
  1631. clip: loc[71]+" "+wg.name+": \n"+loc[72]+" "+s.r.bats+" \nWR: "+s.a.wins.toFixed(2)+" \nWN8: "+s.f.wn8.rat.toFixed(2)+" \nWN7: "+s.f.wn7.rat.toFixed(2)+" \nEff: "+s.f.eff.rat.toFixed(2)
  1632. };
  1633. // end formula calculations and variables
  1634.  
  1635. // start modifying and enhancing the rest of the page
  1636. // store userBlocks
  1637. var userBlock_wprp = d.getElementsByClassName('b-userblock-wrpr')[0],
  1638. userBlock_sparks = d.getElementsByClassName('b-user-block__sparks')[0];
  1639.  
  1640. // add user treasury in navigation menu - personal data block will be hidden
  1641. var subMenu_class = d.getElementsByClassName('nav-wrapper')[0];
  1642. if (wg.login && s.p) {
  1643. var userData_list = sf.elem("div", "b-user-data", "<table class='t-user-data'><tr><td>"+s.p.cred[0]+"</td><td><span class='currency-credit'>"+s.p.cred[1]+"</span></td></tr><tr><td>"+s.p.gold[0]+"</td><td><span class='currency-gold'>"+s.p.gold[1]+"</span></td></tr><tr><td>Free XP:</td><td><span class='currency-experience'>"+s.p.fxp+"</span></td></tr></table>");
  1644. subMenu_class.appendChild(userData_list);
  1645. }
  1646.  
  1647. // modify sidebar structure
  1648. var sidebar_class = d.getElementsByClassName('l-sidebar')[0],
  1649. recBlock_class = d.getElementsByClassName('js-recruitsation-block')[0],
  1650. sidemsg_class = sf.elem("div", "l-side-msg");
  1651. sidemsg_class.appendChild(recBlock_class);
  1652. sidebar_class.appendChild(sidemsg_class);
  1653.  
  1654. // removing elements
  1655. var layoutfix_class = d.getElementsByClassName('b-hr-layoutfix');
  1656. layoutfix_class[0].parentNode.removeChild(layoutfix_class[0]);
  1657.  
  1658. // page navigation
  1659. var menu_class = d.getElementsByClassName('cm-holder')[0],
  1660. content_class = d.getElementsByClassName('l-content')[0];
  1661. content_class.appendChild(sf.elem("div", "b-profile-nav", "<a class='bot' onclick='window.scrollTo(0, 0)'><span>"+loc[2]+"</span></a>"));
  1662. menu_class.appendChild(sf.elem("div", "b-profile-nav b-profile-nav-top", "<a class='top' onclick='window.scrollTo(0, 9999)'><span>"+loc[1]+"</span></a>"));
  1663.  
  1664. // profile wrapper
  1665. var profile_div = sf.elem("div", "b-profile-wrpr"),
  1666. profileHead_div = sf.elem("div", "b-profile-header", "<div id='js-clipBoard' style='display:none;'>"+s.l.clip+"</div>"),
  1667. profileError_div = sf.elem("div", "b-profile-error");
  1668. if (s.v.bats !== s.r.bats) {
  1669. profileError_div.classList.add("b-display-table");
  1670. profileError_div.textContent = loc[68];
  1671. }
  1672. else {
  1673. s.l.veh = " ";
  1674. }
  1675. profileName_class.lastElementChild.innerHTML += " - "+sf.format(s.r.days,2,0)+" "+loc[3];
  1676. profileName_class.parentNode.insertBefore(profile_div, profileName_class.nextSibling);
  1677. profileHead_div.appendChild(profileError_div);
  1678. fragment.appendChild(profileHead_div);
  1679.  
  1680. // add style if on own profile and has premium
  1681. if (wg.own && s.p.prem) {
  1682. var profileName_tooltip = d.getElementById('js-profile-name_tooltip');
  1683. profileName_header.classList.add("b-account-type__premium");
  1684. profileName_tooltip.firstElementChild.textContent += " - "+s.p.prem[0]+" "+s.p.prem[1];
  1685. }
  1686.  
  1687. // player statistic links
  1688. var profileStat_table = sf.elem("table", "t-profile-table"),
  1689. profileStat_table_cells = [
  1690. [
  1691. [loc[4]],
  1692. [sc.srv.wl, "<a target='_blank' href='http://wotlabs.net/"+sc.srv.wl+"/player/"+wg.name+"'>WoTLabs</a>"],
  1693. [sc.srv.nm, "<a target='_blank' href='"+sc.nm.url+"'>Noobmeter</a>"],
  1694. [sc.srv.ct, "<a target='_blank' href='http://clantools.us/servers/"+sc.srv.ct+"/players?id="+wg.id+"'>Clan Tools</a>"]
  1695. ],
  1696. [
  1697. [""],
  1698. [sc.srv.ws, "<a target='_blank' href='http://wotstats.org/stats/"+sc.srv.ws+"/"+wg.name+"/'>WoTstats</a>"],
  1699. [sc.srv.vb, "<a target='_blank' href='http://www.vbaddict.net/player/"+wg.name.toLowerCase()+"-"+sc.srv.vb+"'>vBAddict</a>"],
  1700. (wg.srv=="ru") ? [sc.srv.kttc, "<a target='_blank' href='http://kttc.ru/statistics/user/"+wg.name+"/'>KTTC</a>"] : [sc.srv.wlf, "<a target='_blank' href='http://en.wot-life.com/"+sc.srv.wlf+"/player/"+wg.name+"/'>WoT-Life</a>"]
  1701. ],
  1702. [
  1703. [loc[5]],
  1704. [sc.srv.wl, "<a target='_blank' href='http://wotlabs.net/sig/"+sc.srv.wl+"/"+wg.name+"/signature.png'>"+loc[6]+"</a>"],
  1705. [sc.srv.wl, "<a target='_blank' href='http://wotlabs.net/sig_dark/"+sc.srv.wl+"/"+wg.name+"/signature.png'>"+loc[7]+"</a>"]
  1706. ],
  1707. [
  1708. [loc[8]],
  1709. [sc.srv.wr, "<a target='_blank' href='http://wotreplays."+sc.srv.wr+"/player/"+wg.name+"'>WoTReplays</a>"],
  1710. [sc.srv.we, loc[80]],
  1711. [sc.srv.we, "<a target='_blank' href='http://wotevent.guildity.com/players/"+wg.name+"/'>WoT Event Stats</a>"]
  1712. ]
  1713. ];
  1714. sf.links(profileStat_table, profileStat_table_cells, "table");
  1715. profileName_class.appendChild(profileStat_table);
  1716.  
  1717. // clan handler
  1718. var clanBlock = d.getElementById('js-clan-block-container'),
  1719. cl_class = clanBlock.getElementsByTagName('a')[1],
  1720. clanStat_table = sf.elem("table", "", "", {id: "js-profile-clan-table"}),
  1721. clanLook = new MutationObserver(function() {
  1722. cl_class = clanBlock.getElementsByTagName('a')[1];
  1723. sf.clan();
  1724. clanLook.disconnect();
  1725. });
  1726. // apply changes if and when clanBlock is modified
  1727. if(cl_class) {
  1728. sf.clan();
  1729. }
  1730. else {
  1731. clanLook.observe(clanBlock, {childList: true});
  1732. }
  1733. // clan history retrieval
  1734. if (!!sc.srv.cs) {
  1735. sf.request("historyData", sc.chApi, sf.ch.hnd, sf.ch.error);
  1736. }
  1737.  
  1738. // move player and clan blocks together
  1739. var infoBlock_div = sf.elem("div", "b-info-block");
  1740. infoBlock_div.appendChild(profileName_class);
  1741. infoBlock_div.appendChild(clanBlock);
  1742. fragment.appendChild(infoBlock_div);
  1743.  
  1744. // player clan history
  1745. var clanHist_div = sf.elem("div", "b-clanHistory-wrpr", "<span class='clanname'>"+loc[73]+"</span><span>"+loc[15]+"</span>");
  1746. fragment.appendChild(clanHist_div);
  1747.  
  1748. // move fame points block, if it exists
  1749. var fameClass = d.getElementById('js-knockout-fame-points'),
  1750. fameMessage = d.getElementsByClassName('b-fame-message')[0];
  1751. if (fameClass) {
  1752. var fameHeader = d.getElementsByClassName('b-header-h3__user-account')[0],
  1753. fameIndicator = d.getElementsByClassName('b-fame-indicators')[0],
  1754. fameTime = d.getElementsByClassName('b-time')[0],
  1755. fameLinkList = d.getElementsByClassName('b-link-list')[0];
  1756. fameClass.insertBefore(fameHeader, fameClass.firstElementChild);
  1757. fameLinkList.appendChild(sf.elem("li", "b-link-list_item"));
  1758. fameLinkList.lastElementChild.appendChild(fameTime);
  1759. fameIndicator.dataset.bind = "";
  1760. fameIndicator.classList.add("b-fame-indicators__one-country");
  1761. fragment.appendChild(fameClass);
  1762. }
  1763. else if (fameMessage) {
  1764. var fameDiv = fameMessage.parentNode;
  1765. fameDiv.id = "js-knockout-fame-points";
  1766. fameDiv.className = "b-fame-points-empty";
  1767. fragment.appendChild(fameDiv);
  1768. userBlock_sparks.classList.add("b-user-block_sparks-radius");
  1769. }
  1770. else {
  1771. userBlock_sparks.classList.add("b-user-block_sparks-radius");
  1772. }
  1773.  
  1774. // move sidebar
  1775. fragment.appendChild(sidebar_class);
  1776. profile_div.appendChild(fragment);
  1777. // end profile wrapper
  1778.  
  1779. // add background
  1780. var background_div = sf.elem("div", "b-background", "<img src='"+css.l[6]+"'>");
  1781. background_div.style.background = s.h.wn8;
  1782. userBlock_sparks.insertBefore(background_div, userBlock_sparks.firstChild);
  1783.  
  1784. // add hidden divs for banned and last battle messages
  1785. var banInfo_div = sf.elem("div", "b-message-ban-holder", "<div class='b-message-error'><span>"+loc[82]+" <span id='js-banInfo'></span>.</span></div>"),
  1786. lastBattle_div = sf.elem("div", "b-message-battle-holder", "<div class='b-message-battle b-message-info'><span>"+loc[83]+" <span id='js-lastBattle'></span>.</span></div>");
  1787. userBlock_sparks.insertBefore(lastBattle_div, userBlock_sparks.firstChild.nextSibling);
  1788. userBlock_sparks.insertBefore(banInfo_div, userBlock_sparks.firstChild.nextSibling);
  1789.  
  1790. // personal data - modify table - add ratings
  1791. var persDataTable = d.getElementsByClassName('t-personal-data')[0];
  1792. persDataTable.rows[0].cells[0].textContent = loc[9]; // winrate
  1793. persDataTable.rows[1].cells[0].innerHTML = s.c.winsR;
  1794. persDataTable.rows[0].cells[1].textContent = loc[10]; // battles
  1795. persDataTable.rows[1].cells[1].innerHTML = s.c.batsC;
  1796. persDataTable.rows[0].cells[1].parentNode.insertBefore(sf.elem("th", "t-personal-data_ico t-personal-data_ico__exp", loc[11]), persDataTable.rows[0].cells[1].nextSibling); // xp
  1797. persDataTable.rows[1].cells[1].parentNode.insertBefore(sf.elem("td", "t-personal-data_value", sf.format(s.r.expA,2)), persDataTable.rows[1].cells[1].nextSibling);
  1798. persDataTable.rows[0].cells[4].textContent = loc[69]; // hitrate
  1799. persDataTable.rows[1].cells[3].innerHTML = s.c.hitsR;
  1800. persDataTable.rows[0].cells[4].className = "t-personal-data_ico t-personal-data_ico__hitrate";
  1801. persDataTable.rows[0].cells[5].textContent = loc[70]; // damage
  1802. persDataTable.rows[1].cells[4].innerHTML = s.c.dmgTier;
  1803. persDataTable.rows[0].appendChild(sf.elem("th", "t-personal-data_ico t-personal-data_ico__tier", loc[12])); // avg tier
  1804. persDataTable.rows[1].appendChild(sf.elem("td", "t-personal-data_value", sf.format(s.a.tier,2,2)));
  1805. persDataTable.appendChild(sf.elem("tbody", "t-ratings-info", "<tr><th colspan='2'><a href='http://www.wnefficiency.net/wnexpected/' target='_blank'>"+loc[27]+" v"+wn.vers[1]+"</a></th><th><a href='http://jaj22.org.uk/expvals.html' target='_blank'>"+loc[26]+" v"+wn.vers[2]+"</a></th><th></th><th>"+loc[28]+"</th><th colspan='2'>"+loc[29]+"</th></tr><tr><td colspan='2'>"+s.f.wn8.ratCol+"</td><td id='js-wn'>"+loc[122]+"</td><td></td><td>"+s.f.wn7.ratCol+"</td><td colspan='2'>"+s.f.eff.ratCol+"</td></tr>"));
  1806. persDataTable.getElementsByClassName('t-personal-data_value__pr')[0].innerHTML = s.f.wgr.ratCol;
  1807.  
  1808. // speedometer - win/loss ratio
  1809. var smBody_class = d.getElementsByClassName('b-speedometer-body')[0],
  1810. smWinWeight = (isFinite(s.r.winLR)) ? s.r.winLR.toFixed(2) : 1,
  1811. smWinArrow = (isFinite(s.r.winLR)) ? Math.min(30*(s.r.winLR-1),31) : 0;
  1812. smBody_class.appendChild(sf.elem("div", "b-speedometer", "<div class='b-speedometer_scale'></div><div class='b-speedometer-arrow' data-deg='"+smWinArrow+"' style='transform: rotate("+smWinArrow+"deg); -webkit-transform: rotate("+smWinArrow+"deg); -ms-transform: rotate("+smWinArrow+"deg);'></div><div class='b-speedometer-round'></div><p class='b-speedometer-title'>"+loc[13]+"</p><p class='b-speedometer-weight'>"+smWinWeight+"</p><p class='b-speedometer-ratio'>"+sf.format(s.r.wins,2)+" / "+sf.format(s.r.loss,2)+"</p>"));
  1813.  
  1814. // performance ratings calculations table
  1815. var ratingsTable_div = sf.elem("div", "ratings-table", "<h3>"+loc[16]+"</h3>"),
  1816. ratingsTable = sf.elem("table", "t-table-ratings"),
  1817. ratingsFragment = d.createDocumentFragment(),
  1818. ratingsArr = [
  1819. [loc[17], loc[18], loc[19], loc[20], loc[21], loc[22], loc[23], loc[24], loc[25]],
  1820. ["wn8", s.f.wn8.pct, loc[27], s.f.wn8.ratCol, s.f.wn8.scaleCol, sf.format(s.f.wn8.frag,2,2), sf.format(s.f.wn8.dmg,2,2), sf.format(s.f.wn8.spot,2,2), "–", sf.format(s.f.wn8.def,2,2), sf.format(s.f.wn8.win,2,2)],
  1821. ["wn7", s.f.wn7.pct, loc[28], s.f.wn7.ratCol, s.f.wn7.scaleCol, sf.format(s.f.wn7.frag,2,2), sf.format(s.f.wn7.dmg,2,2), sf.format(s.f.wn7.spot,2,2), "–", sf.format(s.f.wn7.def,2,2), sf.format(s.f.wn7.win,2,2)],
  1822. ["eff", s.f.eff.pct, loc[29], s.f.eff.ratCol, s.f.eff.scaleCol, sf.format(s.f.eff.frag,2,2), sf.format(s.f.eff.dmg,2,2), sf.format(s.f.eff.spot,2,2), sf.format(s.f.eff.cap,2,2), sf.format(s.f.eff.def,2,2), "–"]
  1823. ];
  1824. for (var _r=0, _r_len = ratingsArr.length; _r<_r_len; ++_r) {
  1825. var ratingsRow = sf.elem("tr");
  1826. ratingsFragment.appendChild(ratingsRow);
  1827. if (_r === 0) {
  1828. for (var _rh=0, _rh_len = ratingsArr[_r].length; _rh<_rh_len; ++_rh) {
  1829. ratingsRow.appendChild(sf.elem("th", "", ratingsArr[_r][_rh]));
  1830. }
  1831. }
  1832. else {
  1833. for (var _rc=2, _rc_len = ratingsArr[_r].length; _rc<_rc_len; ++_rc) {
  1834. ratingsRow.appendChild(sf.elem("td", "td-center", ratingsArr[_r][_rc]));
  1835. }
  1836. ratingsFragment.appendChild(sf.elem("tr", "td-rating-meter", "<td colspan='9'><div class='rating-meter rating-meter_"+ratingsArr[_r][0]+"'><div class='rating-meter-dail_line' style='width:"+ratingsArr[_r][1]+"%;'><div class='rating-meter-marker'></div></div></div></td>"));
  1837. }
  1838. ratingsTable.appendChild(ratingsFragment);
  1839. }
  1840. ratingsTable_div.appendChild(ratingsTable);
  1841. fragment.appendChild(ratingsTable_div);
  1842. // link to WN thread
  1843. fragment.appendChild(sf.elem("div", "wnelink", "<a class ='b-orange-arrow wnelink_info' target='_blank' href='http://wiki.wnefficiency.net/pages/WN8:_Summary'>"+loc[31]+"</a>"));
  1844. userBlock_sparks.appendChild(fragment);
  1845. // end user block
  1846.  
  1847. // statistics wrapper
  1848. var statistics_wrpr = d.getElementsByClassName('b-result-classes')[0].parentNode;
  1849. statistics_wrpr.className = "b-statistics-wrpr";
  1850. userBlock_wprp.parentNode.insertBefore(statistics_wrpr, userBlock_wprp.nextSibling);
  1851.  
  1852. // stat tabs framework and menu
  1853. var statTabs = sf.elem("div", "l-tabs l-tabs__top-indent", "<ul class='b-tabs-list'></ul><div class='b-main-divider'></div><div class='b-fame-indicators b-fame-indicators__no-margin b-fame-indicators__one-country'><div class='b-tabs'></div><div class='b-stat-legend'>"+loc[115]+"</br>"+loc[116]+"</div></div>"),
  1854. statTabsMenu = statTabs.firstElementChild,
  1855. statTabsParent = statTabs.lastElementChild.firstElementChild,
  1856. statTabsMenuItems = [
  1857. ["user", loc[99]],
  1858. ["more", loc[100]],
  1859. ["clan", loc[101]],
  1860. ["strong", loc[105]],
  1861. ["team", loc[108]],
  1862. ["other", loc[110]]
  1863. ];
  1864. for (var _tm=0, _tm_len = statTabsMenuItems.length; _tm<_tm_len; ++_tm) {
  1865. var tabMenuItem = sf.elem("li", "b-tabs-list_item b-tabs-list_"+statTabsMenuItems[_tm][0], "<a class='b-tabs-list_link' href='#' onClick='return false;'>"+statTabsMenuItems[_tm][1]+"</a>");
  1866. tabMenuItem.dataset.ref = "b-tab-"+statTabsMenuItems[_tm][0];
  1867. if (statTabsMenuItems[_tm][0] == "user") {
  1868. tabMenuItem.classList.add("js-tabs__active");
  1869. }
  1870. tabMenuItem.addEventListener('click', sf.tabs, false);
  1871. fragment.appendChild(tabMenuItem);
  1872. }
  1873. statTabsMenu.appendChild(fragment);
  1874. statistics_wrpr.appendChild(statTabs);
  1875.  
  1876. // clean the old tables and populate them with new values (master badges, overall results and battle performance)
  1877. var statTabUser = sf.elem("div", "b-tab-user js-stat_active"),
  1878. statTables = [
  1879. [
  1880. ["<img src='"+css.l[7]+"'>", loc[32], s.b[4].c+"<span>("+sf.format(s.b[4].p,2,0)+"%)</span>"],
  1881. ["<img src='"+css.l[8]+"'>", loc[33], s.b[3].c+"<span>("+sf.format(s.b[3].p,2,0)+"%)</span>"],
  1882. ["<img src='"+css.l[9]+"'>", loc[34], s.b[2].c+"<span>("+sf.format(s.b[2].p,2,0)+"%)</span>"],
  1883. ["<img src='"+css.l[10]+"'>", loc[35], s.b[1].c+"<span>("+sf.format(s.b[1].p,2,0)+"%)</span>"],
  1884. ["<img src='"+css.u.bad1+"'>", loc[36], s.b[0].c+"<span>("+sf.format(s.b[0].p,2,0)+"%)</span>"],
  1885. ["<img src='"+css.u.bad2+"'>", loc[37], s.b[5].c+"<span>("+sf.format(s.b[5].p,2,0)+"%)</span>"]
  1886. ],
  1887. [
  1888. [loc[38], s.l.veh, sf.format(s.r.bats,2)],
  1889. [loc[39], s.c.winsR, sf.format(s.r.wins,2)],
  1890. [loc[40], s.c.lossR, sf.format(s.r.loss,2)],
  1891. [loc[41], s.c.drawR, sf.format(s.r.draw,2)],
  1892. [loc[42], s.c.survR, sf.format(s.r.surv,2)],
  1893. [loc[48], sf.color(s.a.dths*100, "", 2, "%"), sf.format(s.r.dths,2)],
  1894. [loc[43], "", sf.format(s.a.bats,2,2)],
  1895. [loc[44], sf.format(s.r.expA,2), sf.format(s.r.exp,2)]
  1896. ],
  1897. [
  1898. [loc[47], sf.format(s.a.frag,2,2), sf.format(s.r.frag,2)],
  1899. [loc[49], sf.format(s.a.spot,2,2), sf.format(s.r.spot,2)],
  1900. [loc[51], s.c.dmgTier, sf.format(s.r.dmgD,2)],
  1901. [loc[52], sf.format(s.a.dmgR,2,0), sf.format(s.r.dmgR,2)],
  1902. [loc[53], sf.format(s.a.caps,2,2), sf.format(s.r.caps,2)],
  1903. [loc[54], sf.format(s.a.defs,2,2), sf.format(s.r.defs,2)],
  1904. [loc[50], "", s.c.hitsR]
  1905. ],
  1906. [
  1907. mb_table,
  1908. or_table,
  1909. bp_table
  1910. ]
  1911. ];
  1912. mb_table.removeChild(mb_table.firstElementChild);
  1913. or_table.removeChild(or_table.firstElementChild);
  1914. bp_table.removeChild(bp_table.firstElementChild);
  1915. for (var _s=0, _s_len = statTables.length; _s<(_s_len-1); ++_s) {
  1916. for (var _sr=0, _sr_len = statTables[_s].length; _sr<_sr_len; ++_sr) {
  1917. fragment.appendChild(sf.elem("tr", "", "<td class='"+((statTables[3][_s] == mb_table) ? 't-dotted_class-ico t-dotted_minor__middle' : 't-dotted_minor')+"'>"+statTables[_s][_sr][0]+"</td><td class='"+((statTables[3][_s] == mb_table) ? 't-dotted_minor t-dotted_minor__middle' : 't-dotted_value')+"'>"+statTables[_s][_sr][1]+"</td><td class='"+((statTables[3][_s] == mb_table) ? 't-dotted_value t-dotted_minor__middle' : 't-dotted_value')+"'>"+statTables[_s][_sr][2]+"</td>"));
  1918. }
  1919. statTables[3][_s].appendChild(fragment);
  1920. statTabUser.appendChild(statTables[3][_s].parentNode);
  1921. }
  1922. statTabsParent.appendChild(statTabUser);
  1923. // end statistics wrapper
  1924.  
  1925. // cake diagrams - adding tier diagram
  1926. var diagSector_class = d.getElementsByClassName('b-diagrams-sector')[0],
  1927. diagTier_div = sf.elem("div", "b-diagram-block b-diagram-tiers js-diagram-block", "<h3>"+loc[56]+"</h3><h4>"+loc[119]+"</h4><div class='b-diagram-wrpr'><div class='b-diagram' id='holder-mechanism-tier'></div><div class='b-diagram-round js-diagram-round'><span class='b-diagram-round_title'></span><span class='b-diagram-round_value js-result'>"+s.v.a+"</span></div></div>"),
  1928. diagTier_table = sf.elem("table", "t-dotted t-dotted__diagram js-diagram-mechanism-legend"),
  1929. diagTierCol = ["#831818","#814F07","#763D46","#496877","#303766","#2B591F","#471952","#936C19","#9B9B9B","#514A3C"];
  1930. diagSector_class.firstElementChild.insertBefore(sf.elem("h4", "", loc[120]), diagSector_class.firstElementChild.firstElementChild.nextSibling);
  1931. diagSector_class.lastElementChild.insertBefore(sf.elem("h4", "", loc[121]), diagSector_class.lastElementChild.firstElementChild.nextSibling);
  1932. diagSector_class.insertBefore(diagTier_div, diagSector_class.firstElementChild.nextSibling);
  1933. for (var _d=0, _d_len = s.t.length; _d<_d_len; ++_d) {
  1934. if (s.t[_d].c !== 0) {
  1935. diagTier_table.appendChild(sf.elem("tr", "t-diagram-tier", "<td class='t-dotted_diagram-first'><span class='t-dotted_diagram-bg'></span></td><td><span class='t-dotted_diagram-bg'><span class='t-dotted_diagram-info'><span class='t-diagram_rating' id='js-tier_"+s.t[_d].t+"'></span><span class='t-diagram_tiers js-results'>"+sf.format(s.t[_d].b,2)+"</span><span class='t-dotted_diagram-percent'>(<span class='js-value'>"+sf.format((s.t[_d].b/s.r.bats*100),2,2)+"%</span>)</span></span><span class='b-diagram-ico b-diagram-ico_tier b-diagram-ico_tier-"+s.t[_d].t+"'>"+loc[57]+" "+s.t[_d].t+"</span></span></td><td class='t-dotted_diagram-last'><span class='t-dotted_diagram-bg'><span class='js-colors'>"+diagTierCol[_d]+"</span></span></td>"));
  1936. }
  1937. }
  1938. diagTier_div.appendChild(diagTier_table);
  1939. diagSector_class.firstElementChild.appendChild(sf.elem("div", "b-diagram-total", "<h3>"+loc[58]+" "+s.v.a+"</h3>"));
  1940. // fix for cake diagram in chrome
  1941. if (sc.web.chrome) {
  1942. var diagItems = [], diagValues = [], diagResults = [],
  1943. diagRows = diagTier_table.rows,
  1944. diagResult = $('.js-result', diagTier_div);
  1945. for (var _dt=0, _dt_len = diagRows.length; _dt<_dt_len; ++_dt) {
  1946. diagItems.push($(diagRows[_dt]));
  1947. diagValues.push(parseInt(diagRows[_dt].getElementsByClassName('js-value')[0].innerHTML, 10));
  1948. diagResults.push(diagRows[_dt].getElementsByClassName('js-results')[0].innerHTML);
  1949. }
  1950. new Raphael("holder-mechanism-tier", 630, 630).pieChart(65, 65.5, 53.5, diagItems, diagValues, diagTierCol, diagResults, diagTier_table, diagResult);
  1951. }
  1952.  
  1953. // achievements wrapper
  1954. var medal_div = sf.elem("div", "b-achievements-wrpr"),
  1955. medalHeader_div = sf.elem("div", "b-head-block"),
  1956. medalHeader_class = d.getElementsByClassName('js-achievements-header')[0],
  1957. medalAll_class = d.getElementsByClassName('js-all-achievements')[0],
  1958. medalToggle_class = medalAll_class.lastElementChild,
  1959. medalEmpty_class = d.getElementsByClassName('b-profile-item-empty')[0];
  1960. medalHeader_div.appendChild(medalHeader_class);
  1961. fragment.appendChild(medalHeader_div);
  1962. fragment.appendChild(medalToggle_class);
  1963. fragment.appendChild(medalAll_class);
  1964. fragment.appendChild(medalEmpty_class);
  1965. medal_div.appendChild(fragment);
  1966. diagSector_class.parentNode.insertBefore(medal_div, diagSector_class.nextSibling);
  1967. diagSector_class.parentNode.insertBefore(layoutfix_class[0], diagSector_class.nextSibling);
  1968. // fix special medals margin
  1969. var medalSpecial_class = d.getElementsByClassName('b-achivements')[7],
  1970. medalLook = new MutationObserver(function() {
  1971. medalSpecial_class = d.getElementsByClassName('b-achivements')[7];
  1972. sf.medals();
  1973. });
  1974. if (medalSpecial_class) {
  1975. sf.medals();
  1976. }
  1977. else {
  1978. medalLook.observe(medalAll_class.lastElementChild, {childList: true});
  1979. }
  1980.  
  1981. // vehicles wrapper
  1982. var vehTable_class = d.getElementsByClassName('t-profile__vehicle')[0],
  1983. vehicles_div = sf.elem("div", "b-vehicles-wrpr"),
  1984. vehiclesHeader_div = sf.elem("div", "b-vehicles-header", "<a class='b-orange-arrow b-profile-ratings_link' target='_blank' href='/encyclopedia/vehicles/'>"+loc[59]+"</a><span class='b-profile-vehicles-tankstat'><a class='b-orange-arrow b-profile-ratings_link b-profile-vehicles-tankstat_link' target='_blank' href='http://www.vbaddict.net/statistics.php?server="+((wg.srv == "ru") ? "net" : sc.srv.vb)+"'>vBAddict: "+loc[60]+"</a></span>"),
  1985. vehiclesHeader_class = vehTable_class.previousElementSibling.previousElementSibling;
  1986. vehiclesHeader_class.className = "b-profile-ratings_title";
  1987. vehiclesHeader_div.insertBefore(vehiclesHeader_class, vehiclesHeader_div.firstChild);
  1988. vehTable_class.parentNode.insertBefore(vehicles_div, vehTable_class);
  1989. fragment.appendChild(vehiclesHeader_div);
  1990. fragment.appendChild(vehTable_class);
  1991. vehicles_div.appendChild(fragment);
  1992.  
  1993. // insert custom tables
  1994. var vehiclesFragment = d.createDocumentFragment(),
  1995. vehicleTables = [
  1996. ["prem", loc[61], s.s.p.r.length, s.s.p.r, sf.format(s.s.p.b,2), sf.color((s.s.p.w/s.s.p.b)*100, "wr", 0, "%"), sf.format(s.s.p.w,2), s.s.p.bg],
  1997. ["ten", loc[67], s.s.t.r.length, s.s.t.r, sf.format(s.s.t.b,2), sf.color((s.s.t.w/s.s.t.b)*100, "wr", 0, "%"), sf.format(s.s.t.w,2), s.s.t.bg],
  1998. ["test", loc[123], s.s.s.r.length, s.s.s.r, sf.format(s.s.s.b,2), sf.color((s.s.s.w/s.s.s.b)*100, "wr", 0, "%"), sf.format(s.s.s.w,2), s.s.s.bg],
  1999. ["miss", loc[77], s.s.e.r.length, s.s.e.r, sf.format(s.s.e.b,2), sf.color((s.s.e.w/s.s.e.b)*100, "wr", 0, "%"), sf.format(s.s.e.w,2), s.s.e.bg]
  2000. ];
  2001. for (var _t=0, _t_len=vehicleTables.length; _t<_t_len; ++_t) {
  2002. var tableValue = vehicleTables[_t],
  2003. tableHeader = sf.elem("tbody"),
  2004. tableBody = sf.elem("tbody", "sortable b-display-none");
  2005. fragment.appendChild(tableHeader);
  2006. if (tableValue[2] === 0) {
  2007. tableBody.appendChild(sf.elem("tr", "t-profile_tankstype t-profile_tankstype-prem t-profile_tankstype__empty", "<td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__"+tableValue[0]+"'></span><span class='b-tankstype-text'>"+tableValue[1]+" </span></td><td class='t-profile_right'>&ndash;</td><td class='t-profile_center'>&ndash;</td><td class='t-profile_center'>&ndash;</td><td class='t-profile_dropdown-ico'><!-- empty --></td>"));
  2008. }
  2009. else {
  2010. tableHeader.className = "tablesorter-no-sort";
  2011. tableHeader.appendChild(sf.elem("tr", "t-profile_tankstype t-profile_tankstype-"+tableValue[0]+" js-table-dropdown-link", "<td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__"+tableValue[0]+"'></span><span class='b-tankstype-text'>"+tableValue[1]+" <span class='b-armory-col'>"+tableValue[2]+"</span></span></td><td class='t-profile_right'>"+tableValue[4]+"</td><td class='t-profile_center'>"+tableValue[5]+"≈<span>"+tableValue[6]+"</span></td><td class='t-profile_center'>"+tableValue[7]+"</td><td class='t-profile_dropdown-ico'><a title='Show/hide vehicles' class='t-profile_dropdown-link' href=''></a></td>"));
  2012. for (var _tv=0; _tv<tableValue[2]; ++_tv) {
  2013. vehiclesFragment.appendChild(tableValue[3][_tv][0]);
  2014. vehiclesFragment.appendChild(tableValue[3][_tv][1]);
  2015. }
  2016. tableBody.appendChild(vehiclesFragment);
  2017. fragment.appendChild(tableBody);
  2018. }
  2019. }
  2020. vehTable_class.appendChild(fragment);
  2021. // end vehicles wrapper
  2022.  
  2023. // debugging to browser console
  2024. if (sc.debug) {
  2025. console.info("Browser Info:\n"+n.appCodeName+" - "+n.appName+"\n"+n.userAgent, sc.web);
  2026. console.info(s.l.clip);
  2027. console.info("Script Settings:", sc);
  2028. console.info("Statistics:", s);
  2029. }
  2030. }
  2031. else {
  2032. // add a message informing that the script is disabled
  2033. profileName_class.appendChild(sf.elem("div", "b-script-disabled", loc[64]));
  2034. styleText.push(
  2035. ".b-script-disabled {background-color: rgb(27, 27, 28); border: 1px solid rgba(255,255,255,0.04); border-bottom: none; border-radius: 15px 15px 0px 0px; box-shadow: 0px 0px 5px 4px rgba(0, 0, 0, 0.15) inset; color: #CD3333; line-height: 25px; margin: 10px 0 -15px 0px; text-align: center; width: 684px;}",
  2036. ".b-profile-clan {margin: 0;}",
  2037. ".content-wrapper__old p.b-statistic_item {margin: 0;}"
  2038. );
  2039. style.textContent = styleText.join("");
  2040. } // end tableBattles
  2041. }(window));