WoTStatScript

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

当前为 2014-05-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WoTStatScript
  3. // @version 0.9.0.85
  4. // @description More info for World of Tanks profile page. Updated for the new style.
  5. // @author Orrie
  6. // @contributor Boom_Box
  7. // @namespace http://forum.worldoftanks.eu/index.php?/topic/263423-
  8. // @icon http://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img/icon.png
  9. // @match http://worldoftanks.eu/*/*/*
  10. // @match http://worldoftanks.com/*/*/*
  11. // @match http://worldoftanks.ru/*/*/*
  12. // @match http://worldoftanks.asia/*/*/*
  13. // @match http://worldoftanks.kr/*/*/*
  14. // @include http://worldoftanks.eu/*/*/*
  15. // @include http://worldoftanks.com/*/*/*
  16. // @include http://worldoftanks.ru/*/*/*
  17. // @include http://worldoftanks.asia/*/*/*
  18. // @include http://worldoftanks.kr/*/*/*
  19. // @grant GM_xmlhttpRequest
  20. // ==/UserScript==
  21.  
  22. // script variables
  23. var scripthost = "https://greasyfork.org/scripts/661-wotstatscript";
  24. threadlink = "http://forum.worldoftanks.eu/index.php?/topic/263423-";
  25. sid = "orrie_js_174043"; // noobmeter api id
  26. nm_host = "http://noobmeter.com";
  27. scriptlink = "<div class='b-scriptlink'><a target='_blank' href="+scripthost+">Script</a> version 0.9.0.85 - <a target='_blank' href="+threadlink+">Thread</a></div>";
  28.  
  29. // fetch wg related info
  30. var wg_host = document.location.host;
  31. if (wg_host.match(/xbox360/)) { server = "xbox"; }
  32. else { server = wg_host.match(/\.([^\.]+)$/)[1]; }
  33. wg_path = document.location.pathname;
  34. wg_accounts = wg_path.match(/(community|uc)\/accounts\/\d+/);
  35. if (wg_path.match(/(edit|battles|provinces|reserve|treasury)/)) {
  36. wg_clans = null;
  37. }
  38. else {
  39. wg_clans = wg_path.match(/(community|uc)\/clans\/[\w\-]+/);
  40. }
  41.  
  42. // determine browser types, beware inconsistencies, no method is reliable.
  43. var gecko = /Mozilla/.test(navigator.appCodeName), // true for ff (and chrome lol)
  44. opera = /Opera/.test(navigator.appName), // only true for opera
  45. chrome = /Chrome/.test(navigator.userAgent);
  46. if (opera || chrome) { gecko = false; }
  47.  
  48. // globally inserting functions into head as scripts
  49. var scripts = [copyClipboard];
  50. for (i=0; i<scripts.length; ++i) {
  51. var script = document.createElement('script');
  52. script.className = "wotstatscript";
  53. script.type = "text/javascript";
  54. script.textContent = scripts[i].toString();
  55. document.head.appendChild(script);
  56. }
  57.  
  58. // global colour defines
  59. var stat = (function() {
  60. var color = {
  61. sup_uni: "5A3175", // super unicum
  62. unicum: "6A4B9F", // unicum
  63. great: "4A92B7", // great
  64. v_good: "4C762E", // very good
  65. good: "589031", // good
  66. avg: "D7B600", // average
  67. b_avg: "D84300", // below average
  68. bad: "D00900", // bad
  69. v_bad: "940000", // very bad
  70. none: "6B6B6B" // default gray
  71. };
  72. return { color: color };
  73. })();
  74.  
  75. // colour scale array
  76. var colStatArr = [
  77. { color: stat.color.sup_uni, wn8: 2900, scale_wn8: 100, wn7: 2050, scale_wn7: 97.56, eff: 2050, scale_eff: 99.67, nm: 2000, battles: 25000, winrate: 65, survrate: 50, hitrate: 80 },
  78. { color: stat.color.unicum, wn8: 2350, scale_wn8: 87.96, wn7: 1850, scale_wn7: 90.31, eff: 1800, scale_eff: 94.94, nm: 1950, battles: 21000, winrate: 60, survrate: 45, hitrate: 75 },
  79. { color: stat.color.great, wn8: 1900, scale_wn8: 73.54, wn7: 1550, scale_wn7: 74.56, eff: 1500, scale_eff: 78.50, nm: 1750, battles: 17000, winrate: 57, survrate: 40, hitrate: 70 },
  80. { color: stat.color.v_good, wn8: 1600, scale_wn8: 62.72, wn7: 1350, scale_wn7: 62.75, battles: 13000, winrate: 54, survrate: 35, hitrate: 65 },
  81. { color: stat.color.good, wn8: 1250, scale_wn8: 50.21, wn7: 1100, scale_wn7: 48.21, eff: 1200, scale_eff: 56.71, nm: 1450, battles: 10000, winrate: 52, survrate: 30, hitrate: 60 },
  82. { color: stat.color.avg, wn8: 900, scale_wn8: 38.33, wn7: 900, scale_wn7: 37.44, eff: 900, scale_eff: 36.26, nm: 1250, battles: 7000, winrate: 48, survrate: 25, hitrate: 50 },
  83. { color: stat.color.b_avg, wn8: 600, scale_wn8: 28.07, wn7: 700, scale_wn7: 27.69, eff: 600, scale_eff: 14.42, nm: 1150, battles: 3000, winrate: 46, survrate: 20, hitrate: 45 },
  84. { color: stat.color.bad, wn8: 300, scale_wn8: 16.13, wn7: 500, scale_wn7: 18.87, battles: 1000, winrate: 43, survrate: 15, hitrate: 40 },
  85. { color: stat.color.v_bad, wn8: 0, scale_wn8: 0, wn7: 0, scale_wn7: 0, eff: 0, scale_eff: 0, nm: 0, battles: 0, winrate: 0, survrate: 0, hitrate: 0 }
  86. ];
  87.  
  88. // localization
  89. // cz-czech - Crabt33
  90. // de-german - ArtiOpa and SarinX
  91. // fr-french - SuperPommeDeTerre
  92. // pl-polish - KeluMocy
  93. // ru-russian - dimon222
  94. var locale = {
  95. // profile page
  96. p01: { lang: "Go to Bottom", ru: "Пролистать вниз", cz: "Konec stránky", de: "nach unten", fr: "Aller à la fin", pl: "Koniec strony" },
  97. p02: { lang: "Go to Top", ru: "Пролистать наверх", cz: "Začátek stránky", de: "nach oben", fr: "Aller au début", pl: "Początek strony" },
  98. p03: { lang: "Days Ago", ru: "Дней назад", cz: "dnů", de: "Tage in WOT aktiv", fr: "jours", pl: "Dni temu" },
  99. p04: { lang: "Player Stats:", ru: "Статистика игрока:", cz: "Stat. hráče:", de: "Spielerstatistik", fr: "Statistiques du joueur:", pl: "Statystyki gracza:" },
  100. p05: { lang: "Signature:", ru: "Подпись:", cz: "Podpis:", de: "Forumsignatur", fr: "Signature:", pl: "Sygnatura do forum:" },
  101. p06: { lang: "Light", ru: "Светлые тона", cz: "Světlý", de: "Signatur Schwarz", fr: "Claire", pl: "Jasna" },
  102. p07: { lang: "Dark", ru: "Тёмные тона", cz: "Tmavý", de: "Signatur Weiß", fr: "Foncée", pl: "Ciemna" },
  103. p08: { lang: "Replays:", ru: "Реплеи:", cz: "Záznamy:", de: "Wiederholung", fr: "Replays:", pl: "Powtórki:" },
  104. p09: { lang: "Victories", ru: "Победы", cz: "Vítězství", de: "Siege", fr: "Victoires", pl: "Zwycięstw" },
  105. p10: { lang: "Battles Participated", ru: "Участий в битвах", cz: "Počet bitev", de: "Gefechte geführt", fr: "Batailles participées", pl: "Bitew" },
  106. p11: { lang: "Average Experience", ru: "Средний опыт", cz: "Průměrné zkušenosti", de: "Durchnittl. Erfahrung", fr: "Expérience moyenne", pl: "Średnie doświadczenie" },
  107. p12: { lang: "Average Tier", ru: "Средний уровень танка", cz: "Průměrný Tier", de: "Durchschnittl. Stufe", fr: "Tiers moyen", pl: "Średni poziom pojazdu" },
  108. p13: { lang: "Win/Loss Ratio", ru: "Отношение Победы/Поражения", cz: "Poměr vítězství/porážek", de: "Verhältnis Siege/ Niederlagen", fr: "Ratio Victoires/Défaites", pl: "Zwycięstwa/porażki" },
  109. p14: { lang: "Performance Ratings", ru: "Рейтинги производительности", cz: "Hodnocení bojového výkonu", de: "Leistungsverhältnis", fr: "Indices de performances", pl: "Statystyki wydajności" },
  110. p15: { lang: "WN8", ru: "WN8", cz: "WN8", de: "WN8", fr: "WN8", pl: "WN8" },
  111. p16: { lang: "Efficiency", ru: "Эффективность", cz: "Efficiency", de: "Effizienz", fr: "Efficacité", pl: "Efficiency" },
  112. p17: { lang: "NoobMeter", ru: "NoobMeter", cz: "NoobMeter", de: "NoobMeter", fr: "NoobMeter", pl: "NoobMeter" },
  113. p18: { lang: "Fetching...", ru: "Загрузка...", cz: "Načítám...", de: "abrufen...", fr: "Récupération...", pl: "Pobieranie..." },
  114. p19: { lang: "Performance Rating Calculations", ru: "Вычисления рейтинга производительности", cz: "Výpočet hodnocení bojového výkonu", de: "Leistungsberechnung", fr: "Calculs des indicateurs de performances", pl: "Obliczenia statystyk wydajności" },
  115. p20: { lang: "Formula Type", ru: "Тип формулы", cz: "Typ výpočtu", de: "Formel", fr: "Type de formule", pl: "Formuła" },
  116. p21: { lang: "Total", ru: "Всего", cz: "Celkem", de: "Gesamt", fr: "Total", pl: "Wynik" },
  117. p22: { lang: "Scaled", ru: "Шкала", cz: "Stupnice", de: "Skaliert", fr: "A l'échelle", pl: "Skalowanie" },
  118. p23: { lang: "Destroyed", ru: "Уничтожено", cz: "Zničeno", de: "Zerstört", fr: "Détruits", pl: "Fragi" },
  119. p24: { lang: "Damage", ru: "Урон", cz: "Poškození", de: "Schaden", fr: "Dommages", pl: "Obrażenia" },
  120. p25: { lang: "Detected", ru: "Обнаружено", cz: "Detekováno", de: "Aufgeklärt", fr: "Détectés", pl: "Wykrycia" },
  121. p26: { lang: "Capping", ru: "Захват", cz: "Obsazení", de: "Erobert", fr: "Capture", pl: "Zdobycie bazy" },
  122. p27: { lang: "Defense", ru: "Оборона", cz: "Obrana", de: "Verteidigt", fr: "Défense", pl: "Obrona bazy" },
  123. p28: { lang: "Victories", ru: "Победы", cz: "Vítězství", de: "Siege", fr: "Victoires", pl: "Zwycięstwa" },
  124. p29: { lang: "WN8", ru: "WN8", cz: "WN8", de: "WN8", fr: "WN8", pl: "WN8" },
  125. p30: { lang: "WN7", ru: "WN7", cz: "WN7", de: "WN7", fr: "WN7", pl: "WN7" },
  126. p31: { lang: "Efficiency", ru: "Эффективность", cz: "Efficiency", de: "Effizienz", fr: "Efficacité", pl: "Efficiency" },
  127. p32: { lang: "What is WN Efficiency?", ru: "Что такое WN эффективность?", cz: "Co je WN hodnocení?", de: "Was bedeutet WN Effizienz", fr: "Qu'est que l'efficacité WN ?", pl: "Czym jest statystyka wydajności WN?" },
  128. p33: { lang: "Ace Tanker", ru: "Мастер", cz: "Hrdina", de: "Panzer Ass", fr: "As du char", pl: "As Pancerny" },
  129. p34: { lang: "1st Class", ru: "1 степень", cz: "1. třídy", de: "1ter Klasse", fr: "Classe 1", pl: "Pierwsza Klasa" },
  130. p35: { lang: "2nd Class", ru: "2 степень", cz: "2. třídy", de: "2ter Klasse", fr: "Classe 2", pl: "Druga Klasa" },
  131. p36: { lang: "3rd Class", ru: "3 степень", cz: "3. třídy", de: "3ter Klasse", fr: "Classe 3", pl: "Trzecia Klasa" },
  132. p37: { lang: "No Badge", ru: "Нет значка", cz: "Nezískáno", de: "kein Orden", fr: "Aucun badge", pl: "Bez odznaki" },
  133. p38: { lang: "Total Vehicles", ru: "Общее количество техники", cz: "Celkem vozidel", de: "Alle Fahrzeuge", fr: "Nombre total de véhicules", pl: "Całkowita liczba pojazdów" },
  134. p39: { lang: "Battles Participated:", ru: "Участий в битвах:", cz: "Počet bitev:", de: "An Gefechten teilgenommen", fr: "Batailles participées:", pl: "Bitwy:" },
  135. p40: { lang: "Victories:", ru: "Победы:", cz: "Vítězství:", de: "Siege", fr: "Victoires:", pl: "Zwycięstwa:" },
  136. p41: { lang: "Defeats:", ru: "Поражения:", cz: "Porážek:", de: "Niederlagen", fr: "Défaites:", pl: "Porażki:" },
  137. p42: { lang: "Draws:", ru: "Ничья:", cz: "Remíza:", de: "Unentschieden", fr: "Egalités:", pl: "Remisy:" },
  138. p43: { lang: "Battles Survived:", ru: "Битв пережито:", cz: "Přežito bitev:", de: "Gefechte überlebt", fr: "Batailles survécues:", pl: "Przetrwane bitwy:" },
  139. p44: { lang: "Average Battles per Day:", ru: "Среднее число битв за день:", cz: "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ń:" },
  140. p45: { lang: "Experience:", ru: "Опыт:", cz: "Zkušenosti:", de: "Erfahrung", fr: "Expérience:", pl: "Doświadczenie:" },
  141. p46: { lang: "Average Experience per Battle:", ru: "Средний опыт за битву:", cz: "Průměrné zkušenosti za bitvu:", de: "Durchschnittserfahrung", fr: "Expérience moyenne par bataille:", pl: "Średnie doświadczenie na bitwę:" },
  142. p47: { lang: "Maximum Experience per Battle:", ru: "Максимальный опыт за битву:", cz: "Maximální zkušenosti za bitvu:", de: "Höchste Gefechtserfahrung", fr: "Expérience maximum par bataille:", pl: "Maksymalne doświadczenie na bitwę:" },
  143. p48: { lang: "Destroyed:", ru: "Уничтожено:", cz: "Zničeno:", de: "Zerstört", fr: "Détruits", pl: "Zniszczeni przeciwnicy:" },
  144. p49: { lang: "Deaths:", ru: "Смертей:", cz: "Nepřežil:", de: "Tode", fr: "Morts", pl: "Zniszczony:" },
  145. p50: { lang: "Detected:", ru: "Обнаружено", cz: "Detekováno:", de: "Aufgeklärt", fr: "Détectés", pl: "Wykrytych:" },
  146. p51: { lang: "Hit Ratio:", ru: "Коэффициент попаданий:", cz: "Přesnost střelby:", de: "Trefferquote", fr: "Ratio de hit", pl: "Celność:" },
  147. p52: { lang: "Damage Caused:", ru: "Урона нанесено:", cz: "Udělené poškození:", de: "Schaden verursacht", fr: "Dommages causés:", pl: "Zadane obrażenia:" },
  148. p53: { lang: "Damage Received:", ru: "Урона получено:", cz: "Přijaté poškození:", de: "Schaden erhalten", fr: "Dommages reçus:", pl: "Otrzymane obrażenia:" },
  149. p54: { lang: "Base Capture Points:", ru: "Очки захвата:", cz: "Bodů obsazení základny:", de: "Eroberungspunkte", fr: "Points de capture de base:", pl: "Punkty przejęcia bazy:" },
  150. p55: { lang: "Base Defense Points:", ru: "Очки обороны:", cz: "Bodů obrany základny:", de: "Verteidigungspunkte", fr: "Points de défense de base:", pl: "Punkty obrony bazy:" },
  151. p56: { lang: "Average Tier:", ru: "Средний уровень:", cz: "Průměrný Tier:", de: "Durchschnittliche Stufe", fr: "Tiers moyen:", pl: "Średni poziom pojazdów:" },
  152. p57: { lang: "Vehicle Tiers", ru: "Уровни техники", cz: "Tiery vozidel", de: "Fahrzeuge Stufe", fr: "Tiers du véhicule", pl: "Poziomy czołgów" },
  153. p58: { lang: "Tier", ru: "Уровень", cz: "Tier", de: "Stufe", fr: "Tiers", pl: "Poziom" },
  154. p59: { lang: "Total Vehicles:", ru: "Количество техники:", cz: "Celkem vozidel:", de: "Gesamt Fahrzeuge", fr: "Nombre total de véhicules:", pl: "Całkowita liczba pojazdów:" },
  155. p60: { lang: "Tankopedia", ru: "Танковедение", cz: "Tankpédie", de: "Tankopedia", fr: "Tankopedia", pl: "Tankopedia" },
  156. p61: { lang: "Tank Statistics", ru: "Статистика танка", cz: "Statistiky vozidel", de: "Panzer Statistik", fr: "Statistiques des chars", pl: "Statystyki czołgu" },
  157. p62: { lang: "Premium Tanks", ru: "Премиум танки", cz: "Premium tanky", de: "Premium Panzer", fr: "Chars premiums", pl: "Czołgi premium" },
  158. p63: { lang: "Copy stats to Clipboard", ru: "Скопировать в буфер обмена", cz: "Kopírovat Stat. do schránky", de: "Statistiken in Zwischenablage kopieren", fr: "Copier les statistiques vers le presse-papiers", pl: "Kopiuj statystyki do schowka" },
  159. p64: {
  160. lang: "Press Ctrl+C, or Right-Click and Copy",
  161. ru: "Нажмите Ctrl+C или ПКМ и Скопировать",
  162. cz: "Stiskni Ctrl+C, nebo klikni pravým tl. myši a vyber Kopírovat",
  163. de: "STRG+C/ rechter Mausklick und Kopieren",
  164. fr: "Appuyez sur Ctrl+C, ou clic droit et Copier",
  165. pl: "Naciśnij Ctrl+C, lub prawy klawisz myszy i 'Kopiuj'"
  166. },
  167. p65: {
  168. lang: "WoTStatScript not active, because of player having 0 battles",
  169. ru: "Скрипт неактивен, т.к. у игрока 0 битв",
  170. cz: "WoTStatScript není aktivní, protože hráč má 0 bitev",
  171. de: "WoTStatScript inaktiv wegen fehlender Gefechte",
  172. fr: "WoTStatScript n'est pas actif, car le joueur a 0 batailles",
  173. pl: "WoTStatScript nieaktywny, ponieważ gracz rozegrał 0 bitew"
  174. },
  175. p66: { lang: "Clan Stats:", ru: "Статистика клана:", cz: "Stat. klanu:", de: "Clanstatistiken", fr: "Statistiques du clan:", pl: "Statystyki klanu:" },
  176. p67: { lang: "Replays:", ru: "Реплеи:", cz: "Záznamy:", de: "Wiederholungen", fr: "Replays:", pl: "Powtórki:" },
  177. p68: { lang: "Tier 10 Only", ru: "Уровень 10 Только", cz: "Pouze Tier 10", de: "nur Stufe 10", fr: "Seulement les tiers 10", pl: "Tylko 10 tier" },
  178. p69: {
  179. lang: "Battles missing from API, ratings may be inaccurate",
  180. ru: "Отсутствует Battles от API, рейтинги могут быть неточными",
  181. cz: "Některé bitvy se z API nenačetly, hodnocení může být nepřesné",
  182. de: "Fehlende API Gefechtsdaten, Bewertungen können ungenau sein",
  183. fr: "Des batailles manquent de l'API, les indices peuvent être faussés",
  184. pl: "Brakujące bitwy, obliczenia mogą być niedokładne"
  185. },
  186. p70: { lang: "Hit Ratio", ru: "Коэффициент попаданий", cz: "Přesnost střelby", de: "Trefferquote", fr: "Ratio de hit", pl: "Celność" },
  187. p71: { lang: "Average Damage", ru: "Средний Урона", cz: "Průměrné poškození", de: "Durchschnittlicher Schaden", fr: "Dommages moyens", pl: "Średnie obrażenia" },
  188. p72: { lang: "Stats for", ru: "Cтатистика для", cz: "Statistika hráče", de: "Statistik für", fr: "Statistiques pour ", pl: "Statystyki z" },
  189. p73: { lang: "Battles:", ru: "Битвы:", cz: "Bitev:", de: "Gefechte", fr: "Batailles:", pl: "Bitew:" },
  190. // clan page
  191. c01: { lang: "Clan Stats / Replays:", ru: "Статистика клана / Реплеи:", cz: "Statistiky klanu / Záznamy", de: "Clan Statistiken / Wiederholungen", fr: "Statistiques du clan / Replays:", pl: "Statystyki klanu / Powtórki:" },
  192. //p00: { lang: "p00_en", ru: "p00_ru", cz: "", de: "", fr: ":", pl: ""},
  193. end: {}
  194. };
  195.  
  196. // region settings and language detection
  197. // wotlabs, noobmeter, mywotstats, feldzug, wotcs, wotreplays and wot-news
  198. var lang_detect = document.getElementsByClassName('b-portalmenu_links_list_point')[4].firstElementChild.innerHTML.toLowerCase();
  199. wl_srv = nm_srv = mws_srv = fz_srv = wr_srv = wn_srv = null;
  200. switch(server) {
  201. case ("eu"):
  202. wl_srv = nm_srv = mws_srv = fz_srv = wr_srv = wn_srv = server;
  203. switch(lang_detect) {
  204. case ("support"): break; // english
  205. case ("podpora"): for (var x in locale) { locale[x].lang = locale[x].cz; } break; // czech
  206. case ("kundendienst"): for (var x in locale) { locale[x].lang = locale[x].de; } break; // german
  207. case ("soporte"): break; // spanish
  208. case ("aide"): for (var x in locale) { locale[x].lang = locale[x].fr; } break; // french
  209. case ("pomoc"): for (var x in locale) { locale[x].lang = locale[x].pl; } break; // polish
  210. case ("destek"): break; // turkish
  211. default: break;
  212. }
  213. break;
  214. case ("ru"): // russian
  215. nm_srv = fz_srv = wr_srv = wn_srv = server;
  216. for (var x in locale) {
  217. locale[x].lang = locale[x].ru;
  218. }
  219. break;
  220. case ("com"):
  221. wl_srv = nm_srv = mws_srv = fz_srv = "na"; wr_srv = "com"; wn_srv = "us";
  222. switch(lang_detect) {
  223. case ("support"): locale.p27.lang = "Defence"; locale.p55.lang = "Base Defence Points:"; break; // american - muh freedom
  224. case ("soporte"): break; // argentinian spanish
  225. case ("suporte"): break; // brazilian portuguese
  226. default: break;
  227. }
  228. break;
  229. case ("asia"):
  230. wl_srv = nm_srv = mws_srv = wn_srv = "sea"; fz_srv = server; wr_srv = "com";
  231. switch(lang_detect) {
  232. case ("support"): break; // english
  233. case ("支援"): break; // thai
  234. case ("サポート"): break; // japanese
  235. case ("สนับสนุน"): break; // taiwanese mandarin
  236. default: break;
  237. }
  238. break;
  239. case ("kr"): // korean
  240. nm_srv = fz_srv = server; wr_srv = "com";
  241. break;
  242. case ("xbox"):
  243. break;
  244. default: break;
  245. }
  246.  
  247. // variables for dropbox and data uri
  248. // dropbox url
  249. var dropbox = "https://dl.dropboxusercontent.com/u/12497046/wot/projects/statscript/img";
  250. // data uri
  251. uri_context_menu = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPQAAAABCAIAAABmEhQDAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAABp0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuMTFH80I3AAAAHklEQVQoU2MAAj4BAR5ePi6eUTSKhgni4eFjYGAAAN9YIhjam+zlAAAAAElFTkSuQmCC";
  252. uri_pr_hitrate = "data:image/png;base64,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";
  253. uri_pr_avgtier = "data:image/png;base64,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";
  254. uri_nm_logo = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAB3RJTUUH3QEGBzcwye5VIAAAAYJJREFUOMvdkj1rFGEUhZ/zzsxODIJITCsiiAgBI4lJLIKFgpWNFmInyg5Y+FcsbAxr5YJobS1IiJKEjYixFgsDfnZrwJ2Zd45FdpcQK0s93f3g3udyLvzTmm2/CenB5HyxmW11FqtRPHNnO5MaT4RfLp3z7tG5OKqlqs/o4IALRS+rqK/YYS6o2Z5MB6u4qfv1kSZRedLWLNKC8Beb3T8ISighw4LohH6VAZCoemjCE/DLrc5id0wxRm/3bgOy/dRwU4ABGEJah4Hjh/Tz7f6FAlgqXs1U5O89bBacBu4DLeAuuGu0AnRlE1RfS0P5en3l4jfNF5sPGif3EMZugCCpAF4AH4Fp22clTYKfG43QCKovB1tTDHklLNjBvmX7E3jHcEKwbPiwR+chqBHsCuB8sfGscXJjfIJcG6XCA6NcdjRKxF4+EL9Lvt7rLK2NbVwo1i8ZnQpSHWMdG5OL2Ldax/LEPyLpFB58Nq2jE3x9vNa5Otjn/ar+5gPn2huB/0e/AX1vrAJEHenoAAAAAElFTkSuQmCC";
  255. uri_rating_meter = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA3kAAAASCAYAAADmKxfRAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOvgAADr4B6kKxwAAAABZ0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMDvo9WkAAARZSURBVHhe7dyxa1NdGMfxTuof0O1ioTQgVkgUScollZRiU4UOUoKivDFDBiVoILEuhQpVGsQuCnWIiE4OTd/RWaGDYnanOJi/JG/ucwKvgSTnnosHDvd+hy88n/lOFw6/uX99vx700fMkbNe9NV/6ueRJ2K77j33p1x1Pwnb9+5sv9b4Mv8Uw7K5r7zfre8cVKbixu64cXJd23pYlbNflD1+lZue7hPEkHz75LO3eP5Ywdsk3rj6qz/0zN1cPqo3Cdr1/RnU0Ctt1a1n17rIK2/VBQ9V+rsLuuvBgqb5yd0EKbuyuc6VFKXPzvITtOvvwhZS+15AwnuT1dFXayjUkjF2yf/F2fe7V8Mcj6OkobNen51SfzqqwXXcLqpOsCtv1j46q81qF3XWxeaG+3UpLwY3d9Wo5JW3WL0nYrvM7b6SNlycSxpNcLR5JpfwzCWOXvLywVg+eaw6CPnqehO26t+ZLP5c8Cdt1/7Ev/brjSdiuf3/zpd6X4bcYht117f3mYO+4IgU3dteVg+vSztuyhO26/OGr1Ox8lzCe5MMnn6Xd+8cSxi75xtVHg+C55iCoNgrb9f4Z1dEobNetZdW7yyps1wcNVfu5CrvrwoOlwcrdBSm4sbvOlRalzM3zErbr7MMXUvpeQ8J4ktfTVWkr15Awdsn+xduD4LnmIOjpKGzXp+dUn86qsF13C6qTrArb9Y+OqvNahd11sXlhsN1KS8GN3fVqOSVt1i9J2K7zO2+kjZcnEsaTXC0eSaX8Mwljl7y8sDZgXRNjy+4ZrIFiM/c1a584unuadU4c3TXNmiZ2yxXNGieO7qbBmiWOr3dDrEViM19bvMW6Jsa2vf/H2mdw47/nlmbtE0d3W7POiaO7oFnTxG45p1njxNGdNlizxPH1Voi1SGzmK16BdU2MbfvUYA0Um7mrWfvE0d3RrHPi6C5q1jSxW17VrHHi6N4wWLPE8XUpxFokNnNqPsO6Jsa23TNYA8Vm7mvWPnF09zTrnDi6a5o1TeyWK5o1ThzdTYM1Sxxf74ZYi8RmvrZ4i3VNjG17/4+1z+DGf88tzdonju62Zp0TR3dBs6aJ3XJOs8aJozttsGaJ4+utEGuR2MxXvALrmhjb9qnBGig2c1ez9omju6NZ58TRXdSsaWK3vKpZ48TRvWGwZonj61KItUhs5tR8hnVNjPH/7s9YW8TJcU+zDomT4b0pa5M4WS6HWEfE8fehZs0Ru2XWNTHGY27NWFvEyXFbsw6Jk+GVKWuTOFnOhlhHxPH3umbNEbtl1jUxxmPuzlhbxMlxR7MOiZPh7SlrkzhZzodYR8Txd1Wz5ojdMuuaGOMx92esLeLkuKdZh8TJ8N6UtUmcLJdDrCPi+PtQs+aI3TLrmhjjMbdmrC3i5LitWYfEyfDKlLVJnCxnQ6wj4vh7XbPmiN0y65oY4zF3Z6wt4uS4o1mHxMnw9pS1SZws50OsI+L4u6pZc8RuOTWfGfwHkfLhD24qX3QAAAAASUVORK5CYII=";
  256. uri_rating_meter_marker = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAANCAYAAABhPKSIAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjExR/NCNwAAAHJJREFUKFNjAAJBIBYGYhEgFoLywRwxIJaAYrCgOBBLff369QiyoBQQy/348eMukJYGYpBOBjkgVvz9+/dbKBtkFIOitbW1/p8/fz6B2EAMMo5BJS0tzQ4qqAzEIHOxq8RqJlbbsboT2UcgGqwSze8MggCsoip1zUe8kQAAAABJRU5ErkJggg==";
  257. uri_tiers = "data:image/png;base64,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";
  258. uri_badges_class_none = "data:image/png;base64,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";
  259. uri_badges_class_total = "data:image/png;base64,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";
  260.  
  261. // matches url with profile page and checks if profile has any battles as script is useless without
  262. if (wg_accounts !== null) {
  263. var speed_table_battles = filter(document.getElementsByClassName('t-personal-data_value')[2].innerHTML, 1);
  264. if (speed_table_battles > 0) {
  265. // style variables
  266. box_background = "border: 1px solid rgba(255, 255, 255, 0.05); 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;";
  267. input_background = "background: rgba(0, 0, 0, 0.09); border: 1px solid #000000; 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;";
  268. // style contents
  269. var style = document.createElement('style');
  270. style.className = "wotstatscript";
  271. style.innerHTML
  272. // global rules
  273. = "h3, h4 {margin: 0 0 15px; text-align: center;}"
  274. + "h5 {margin: 5px 0 8px;}"
  275. + "p, .reg-KR p {margin: 0;}"
  276. + ".reg-KR p {line-height: 133%;}"
  277. + "table {width: 100%;}"
  278. // page fix page slowdown
  279. + ".l-page {background-position: center 0 !important;}"
  280. // container wrapper
  281. + ".l-container-wrapper {background: none;}"
  282. // content width
  283. + ".l-content {margin: 0 22px 25px; width: 955px}"
  284. // background rules
  285. + ".b-background {height: 315px; left: -22px; opacity: 0.5; position: absolute; top: -25px; width: 1000px; z-index: -1;}"
  286. + ".b-background img {width: 100%;}"
  287. // profile wrapper rules
  288. + ".b-profile-wrpr {margin: 15px 0 0; min-height: 132px;}"
  289. + ".b-profile-wrpr td {font-weight: bold; line-height: 133%;}"
  290. + ".b-profile-wrpr table a {background: url('/static/3.13.0.2.1/common/css/scss/context-menu/img/arrow.png') no-repeat 0 2px; color: #CACBCC; padding: 0 0 0 10px;}"
  291. + ".b-profile-wrpr table a:hover {background: url('/static/3.13.0.2.1/common/css/scss/context-menu/img/arrow.png') no-repeat -244px 2px; color: #FFFFFF;}"
  292. + ".b-scriptlink {"+input_background+" position: absolute; right: 0px; text-align: center; top: -1px; padding: 7px 0 6px; width: 199px;}"
  293. + ".b-profile-name {float: none; margin: 0; max-width: 345px;}"
  294. + ".b-profile-name table {font-family: Arial; width: 370px;}"
  295. + ".b-profile-name td:first-child {white-space: nowrap;}"
  296. + ".reg-RUS .b-profile-name td:first-child {width: 120px;}"
  297. + ".reg-KR .b-profile-name td:first-child {width: 80px;}"
  298. + ".b-header-h1__profile {margin: 0; max-width: 195px; padding: 0 0 6px;}"
  299. + "body.reg-KR h1, body.reg-KR .b-header-h1 {line-height: 1;}"
  300. + ".b-profile-error {background: rgba(204,0,0,0.15); border: 1px solid #510000; box-shadow: 0 0 3px #733232; color: #CACBCC; padding: 3px; text-align: center; position: absolute; left: 225px; top: 0;}"
  301. // clan wrapper rules
  302. + "#js-clan-block-container {left: 385px; position: absolute; top: 25px;}"
  303. + ".b-profile-clan {float: none; max-width: 360px; margin: 0;}"
  304. + ".b-profile-noclan {float: none; margin: 27px 0 0;}"
  305. + ".b-photo {min-height: 54px;}"
  306. + "a.b-link-clan, .b-link-clan a {display: inline;}"
  307. + ".b-statistic {margin: 0 0 3px;}"
  308. + ".b-victory-points {background: none; display: none; margin: 0; padding: 0;}"
  309. + ".b-victory-points__indent {}"
  310. + ".b-victory-points_text {display: table-cell; font-size: 13px; margin: 0; padding: 6px 0 0; vertical-align: top;}"
  311. + ".b-victory-points_text br {display: none;}"
  312. + ".b-victory-points_count {background-position: right center; display: table-cell; font-size: 22px; margin: 0; padding: 0 38px 0 10px;}"
  313. + ".b-victory-points_ico { background-image: url('/static/3.13.0.2.1/common/css/scss/content/victory-points/img/victory-points-link.png'); background-position: center center; display: table-cell; float: right; height: 24px; margin: 0 0 0 9px; opacity: 1; width: 30px;}"
  314. + ".b-victory-points_container {margin: 0;}"
  315. + "#js-clan-block-container table {font-family: Arial; width: 360px;}"
  316. + "#js-clan-block-container td:first-child {white-space: nowrap;}"
  317. + ".reg-RUS #js-clan-block-container td:first-child {width: 115px;}"
  318. + ".reg-KR #js-clan-block-container td:first-child {width: 70px;}"
  319. // profile menu rules
  320. + ".b-profile-menu {position: absolute; right: 200px; top: 0;}"
  321. + ".b-profile-menu .b-context-menu {width: 149px;}"
  322. + ".b-profile-menu .b-context-menu-list__bottomindent {margin-bottom: 30px;}"
  323. // sidebar rules
  324. + ".l-sidebar {margin: 0; position: absolute; right: 0; top: 25px; width: auto;}"
  325. + ".b-context-menu {background: url("+uri_context_menu+") repeat-y; border-right: 1px solid black; float: left; margin: 0; width: 200px;}"
  326. + ".b-context-menu_wrapper {padding: 10px 0 5px;}"
  327. + ".b-context-menu-list {line-height: 16px;}"
  328. + ".b-sidebar-widget__comparison {background-color: #000000; border: 1px solid #000000; margin: 0; position: absolute; left: 224px; top: -26px; width: 203px;}"
  329. + ".b-sidebar-widget_inner__comparison {display: table; margin: 5px auto; padding: 0;}"
  330. + ".js-recruitsation-block {position: absolute; right: -228px; top: 0px; width: 205px;}"
  331. + ".b-sidebar-widget_title {margin: 0 0 10px;}"
  332. + ".b-sidebar-widget_text {margin: 0 0 5px;}"
  333. // ratings to clipboard rules
  334. + ".ratingsClip {position: absolute; right: 200px; top: -1px;}"
  335. + ".ratingsClip input {"+input_background+" font-size: 12px; margin: 0; padding: 5px 7px;}"
  336. + ".ratingsClip input:hover {background-color: #282828; cursor: pointer;}"
  337. // userblock wrapper rules
  338. + ".b-userblock-wrpr {margin: 0 0 -2px;}"
  339. + ".b-user-block {"+box_background+" margin: 0; width: 750px;}"
  340. + ".b-head-block {background: url('/static/3.13.0.2.1/common/css/scss/tables/img/th-profile-bg.png') repeat-x; border: 1px solid #000000;}"
  341. + ".b-user-block_info {padding: 5px 25px;}"
  342. + ".b-personal-link {clear: left; margin: 53px 0 0;}"
  343. + ".b-user-block__sparks {background: url('"+dropbox+"/sparks.png') no-repeat 50% 0; width: 100%;}"
  344. + ".b-personal-data {min-height: 180px; padding: 0 20px 15px;}"
  345. + ".t-personal-data_ico {padding: 82px 5px 0;}"
  346. + ".t-personal-data_ico__hitrate {background: url("+uri_pr_hitrate+") no-repeat 50% 50px;}"
  347. + ".t-personal-data_ico__tier {background: url("+uri_pr_avgtier+") no-repeat 50% 50px;}"
  348. + ".t-personal-data_value {font-size: 28px; line-height: 100%;}"
  349. + ".t-personal-data_value.t-personal-data_value__pr {font-size: 36px;}"
  350. + ".b-speedometer-body {padding: 20px 50px;}"
  351. + ".b-speedometer {width: 33.3333%}"
  352. // ratings wrapper rules
  353. + ".b-ratings-wrpr {margin: 0 0 40px;}" // see multiple rules
  354. + ".b-ratings-info {text-align: center;}"
  355. + ".t-ratings-info {table-layout: fixed;}"
  356. + ".t-ratings-info th {font-size: 13px; font-weight: bold; line-height: 133%;}"
  357. + ".t-ratings-info td {font-family: 'WarHeliosCondCBold','Arial Narrow',arial,sans-serif; font-size: 36px; line-height: 133%}"
  358. + ".t-ratings-info .rating-url_nm {background-image: url("+uri_nm_logo+"); background-position: left center; background-repeat: no-repeat; padding: 0 0 0 20px;}"
  359. + ".b-ratings-info, .ratings-table {background: inherit; padding: 10px 25px;}"
  360. + ".t-table-ratings {width: 100%;}"
  361. + ".t-table-ratings td {line-height: 130%; padding: 9px 12px 2px 0; vertical-align: bottom;}"
  362. + ".t-table-ratings .td-value {padding-right: 0; text-align: right; white-space: nowrap;}"
  363. + ".t-table-ratings .td-number {color: #BABCBF; font-weight: bold; padding-right: 0; text-align: right; width: 70px;}"
  364. + ".t-table-ratings .td-center {line-height: 16px; padding: 9px 0 2px; text-align: center;}"
  365. + ".t-table-ratings .td-rating-meter {background: url('/static/3.17.0.1/common/css/scss/content/user/img/speedometr-separator.png') no-repeat 50% 100%; padding: 0;}"
  366. + ".t-table-ratings .rating-meter {background: url("+uri_rating_meter+") no-repeat; border: 1px solid #252527; border-radius: 3px; height: 3px; margin: 0 7px;}"
  367. + ".t-table-ratings .rating-meter-dail_line {background: url("+uri_rating_meter+") 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;}"
  368. + ".t-table-ratings .rating-meter-marker {background: url("+uri_rating_meter_marker+") no-repeat; float: right; height: 13px; margin: -5px -2px 0 0; width: 5px;}"
  369. + ".t-table-ratings .rating-meter_wn8 {background-position: 0 0;}"
  370. + ".t-table-ratings .rating-meter_wn8 .rating-meter-dail_line {background-position: 0 -3px;}"
  371. + ".t-table-ratings .rating-meter_wn7 {background-position: 0 -6px;}"
  372. + ".t-table-ratings .rating-meter_wn7 .rating-meter-dail_line {background-position: 0 -9px;}"
  373. + ".t-table-ratings .rating-meter_eff {background-position: 0 -12px;}"
  374. + ".t-table-ratings .rating-meter_eff .rating-meter-dail_line {background-position: 0 -15px;}"
  375. + ".wnelink {background: inherit; padding: 5px 25px 5px 0; text-align: right;}"
  376. + ".wnelink_info {background-image: url('/static/3.17.0.1/common/css/scss/content/links/img/ico-info.png'), url('/static/3.13.0.2.1/common/css/block/b-link/img/orange_arrow.png'); background-position: 4px 0px, right 0; padding: 0 9px 0 20px;}"
  377. + ".wnelink_info:hover {background-position: 4px -17px, right -22px;}"
  378. // statistics wrapper rules
  379. + ".b-statistics-wrpr {margin: 0 0 30px; overflow: auto;}"
  380. + ".b-statistics-wrpr .t-dotted td {line-height: 23px; padding: 0;}"
  381. + ".b-statistics-wrpr .t-dotted td.t-dotted_class-ico {line-height: 13px;}"
  382. + ".b-statistics-wrpr .t-dotted td.t-dotted_class-ico img {margin: 2px 0 -1px;}"
  383. + ".b-result {margin: 0 10px; width: 315px;}"
  384. + ".b-result-classes {margin: 0 10px; width: 265px;}"
  385. + ".b-result-classes span {color: #606061; display: inline-block; width: 48px;}"
  386. + ".t-dotted td {background: url('/static/3.17.0.1/common/css/scss/content/user/img/speedometr-separator.png') no-repeat 50% 100%;}"
  387. // cake diagram rules
  388. + ".b-diagrams-sector {margin: 0 0 25px;}"
  389. + ".b-diagrams-sector h3 {text-align: center;}"
  390. + ".b-diagram-block {float: left; margin: 0 9px; width: 300px;}"
  391. + ".b-diagram-wrpr {float: none; margin: 0 auto;}"
  392. + ".t-dotted.t-dotted__diagram {margin-top: 0px; width: 100%;}"
  393. + ".t-dotted_diagram-percent {display: inline-block; width: 40px;}"
  394. + ".b-diagram-total {margin: 25px 0 0;}"
  395. + ".b-diagram-tiers .js-results {display: inline-block; margin: 0 0 0 30px; text-align: right; width: 14px;}"
  396. + ".reg-RUS .b-diagram-tiers .js-results {margin: 0 0 0 15px;}"
  397. + ".b-diagram-tiers .t-dotted_diagram-percent {margin: 0 0 0 3px; width: 52px;}"
  398. + ".b-diagram-ico_tier {background: url("+uri_tiers+") no-repeat; padding-left: 30px;}"
  399. + ".b-diagram-ico_tier-1 {background-position: 4px 1px;}"
  400. + ".b-diagram-ico_tier-2 {background-position: 4px -14px;}"
  401. + ".b-diagram-ico_tier-3 {background-position: 4px -29px;}"
  402. + ".b-diagram-ico_tier-4 {background-position: 4px -45px;}"
  403. + ".b-diagram-ico_tier-5 {background-position: 4px -59px;}"
  404. + ".b-diagram-ico_tier-6 {background-position: 4px -74px;}"
  405. + ".b-diagram-ico_tier-7 {background-position: 4px -89px;}"
  406. + ".b-diagram-ico_tier-8 {background-position: 4px -104px;}"
  407. + ".b-diagram-ico_tier-9 {background-position: 4px -120px;}"
  408. + ".b-diagram-ico_tier-10 {background-position: 4px -134px;}"
  409. + ".t-dotted__diagram tr td.t-dotted_diagram-last {width: 0;}"
  410. // achievement wrapper rules
  411. + ".b-achievements-wrpr {}" // see multiple rules
  412. + ".js-short-achievements {margin: 15px 0 30px;}"
  413. + ".js-full-achievements {margin: 0 37px 30px;}"
  414. + ".reg-KR .js-full-achievements {margin: 0 34px 30px;}"
  415. + ".b-achivements {display: table; margin: 0 auto; padding: 0 0 20px;}"
  416. + ".b-achivements-head {margin-top: 15px;}"
  417. + ".b-achivements_item {display: inline-table; float: inherit; margin: 5px 5px 0;}"
  418. + "#js-achivement-raider {margin-left: 40px;}"
  419. + "#js-achivement-mechanicEngineer {margin-left: 80px;}"
  420. + "#js-achivement-tankExpert0 {margin-left: 160px;}"
  421. // global rating rules
  422. + ".b-composite-heading {margin: 20px 0 15px 400px; width: 553px;}"
  423. + ".b-profile-ratings-date {margin-top: 1px}"
  424. + ".b-profile-item__empty {display: table; margin: 0 auto; text-align: center;}"
  425. + ".b-rating-dial__user {margin: 10px 21px 22px;}"
  426. + ".b-leadership-info {display: table; margin: 0 auto;}"
  427. + ".l-leadership-info-alignment {display: table; margin: 0 auto; text-align: center;}"
  428. + ".b-unordered-lists_item {display: table; margin: 4px auto 5px;}"
  429. + ".b-profile-link {display: table; margin: 8px auto -22px}"
  430. // vehicle table rules
  431. + ".b-vehicles-wrpr {margin: 20px 0;}"
  432. + ".b-vehicles-header {display: table; margin: 0 auto 15px}"
  433. + ".b-profile-vehicles-tankstat {margin: 0; position: absolute; right: 15px;}"
  434. + ".b-profile-vehicles-tankstat_link {background-image: url("+uri_nm_logo+"), url('/static/3.13.0.2.1/common/css/block/b-link/img/orange_arrow.png'); background-position: left center, right 0px; padding: 0 9px 0 20px;}"
  435. + ".b-profile-vehicles-tankstat_link:hover {background-position: left center, right -22px;}"
  436. + ".t-profile__vehicle .t-profile_right {text-align: center;}"
  437. + ".t-profile_dropdown-ico .tablesorter-header-inner {display: inherit;}"
  438. + ".t-profile_tankstype-prem .b-tankstype-text {color: #FFC363;}"
  439. + ".t-profile_tankstype-prem.t-profile_tankstype__empty .b-tankstype-text {color: rgba(255, 195, 99, 0.3);}"
  440. + ".t-profile .t-profile_tankstype td {height: 50px; padding: 0; vertical-align: middle;}"
  441. + ".b-tankstype-ico {display: table-cell;}"
  442. + ".b-tankstype-ico__lighttank {background-position: 0 -114px;}"
  443. + ".b-tankstype-ico__mediumtank {background-position: 0 -173px;}"
  444. + ".b-tankstype-ico__heavytank {background-position: 0 5px;}"
  445. + ".b-tankstype-ico__at-spg {background-position: 0 -232px;}"
  446. + ".b-tankstype-ico__spg {background-position: 0 -54px;}"
  447. + ".b-tankstype-ico__prem {background-position: 0 -291px;}"
  448. + ".b-tankstype-ico__ten {background: none; color: #BBB7AC; font-size: 17px; font-weight: 100; padding: 0 0 3px; text-align: center;}"
  449. + ".b-tankstype-text {display: table-cell; height: inherit; vertical-align: middle;}"
  450. + ".t-profile .t-profile_tankstype__item td {height: 40px; padding: 0; vertical-align: middle;}"
  451. + ".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;}"
  452. + ".b-armory-wrapper {height: inherit; margin: 0; padding: 0; width: 160px;}"
  453. + ".b-armory-wrapper .b-armory-level {display: table-cell; font-size: inherit; height: inherit; position: inherit; vertical-align: middle; left: 0; top: 0;}"
  454. + ".b-armory-wrapper img.png {height: 64px; margin: -50px 0 0 24px;}"
  455. + ".b-name-vehicle {color: #BBB7AC; display: table-cell; height: inherit; vertical-align: middle;}"
  456. + ".b-name-vehicle.b-gold-name {color: #FFC363;}"
  457. + ".t-profile_dropdown-link {display: inherit;}"
  458. + ".js-error-data {text-align: center;}"
  459. + ".b-msg-error {display: table; margin: 0 auto;}"
  460. + ".b-vehicle-detail_txt {margin: 0 auto 4px; text-align: center; width: 768px;}"
  461. + ".b-vehicle-detail_link {display: table; margin: 0 auto;}"
  462. + ".b-vehicle-slider {margin: 23px 64px 17px}"
  463. + ".b-vehicle-minitable {margin: 0 43px; width: 350px;}"
  464. + ".b-vehicle-minitable__right {float: left;}"
  465. // profile navigator
  466. + ".b-profile-nav {text-align: center;}"
  467. + ".wrapper-dropdown .b-profile-nav {display: table; margin: 0 auto; padding: 7px 0 0;}"
  468. + ".b-profile-nav a {background: url('/static/3.17.0.1/common/css/scss/content/links/img/vertical-arrow.png') no-repeat; padding: 2px 10px 0;}"
  469. + ".b-profile-nav a#top {background-position: 100% 0px;}"
  470. + ".b-profile-nav a#top:hover {background-position: 100% -36px;}"
  471. + ".b-profile-nav a#bottom {background-position: 100% -18px;}"
  472. + ".b-profile-nav a#bottom:hover {background-position: 100% -54px;}"
  473. + ".b-profile-nav span {border-bottom: 1px dashed;}"
  474. // multiple usage rules
  475. + ".b-ratings-wrpr, .b-achievements-wrpr {background: rgba(0, 0, 0, 0.09); "+box_background+" clear: both; width: 100%;}"
  476. + ".b-orange-arrow__heading, .b-profile-ratings_link {margin: 4px 0 0;}"
  477. + ".b-vertical-arrow {display: table; margin: 2px auto 0; padding: 2px 10px 0;}"
  478. + "";
  479. document.head.appendChild(style);
  480. // end style
  481.  
  482. // removing elements
  483. var layoutfix_class = document.getElementsByClassName('b-hr-layoutfix');
  484. layoutfix_class[0].parentNode.removeChild(layoutfix_class[0]);
  485. layoutfix_class[0].parentNode.removeChild(layoutfix_class[0]);
  486.  
  487. // profile wrapper
  488. var profile_div = document.createElement('div');
  489. profile_div.className = "b-profile-wrpr";
  490. profileName_class = document.getElementsByClassName('b-profile-name')[0];
  491. profileName_class.parentNode.insertBefore(profile_div, profileName_class.nextSibling);
  492. profile_div.innerHTML += scriptlink;
  493. profile_div.appendChild(profileName_class);
  494.  
  495. // background behind profile wrapper
  496. var background_div = document.createElement('div');
  497. background_div.className = "b-background";
  498. background_div.innerHTML = "<img src='/static/3.16.0.2/common/img/common/cont-img-mask.png'>";
  499. profile_div.parentNode.insertBefore(background_div, profile_div);
  500.  
  501. // page navigation
  502. var lcontent_class = document.getElementsByClassName('l-content')[0];
  503. dropdown_class = document.getElementsByClassName('wrapper-dropdown')[0];
  504. topNav_div = document.createElement('div');
  505. topNav_div.className = "b-profile-nav";
  506. topNav_div.innerHTML += "<a id='top' href='#bottom'><span>"+locale.p01.lang+"</span></a>";
  507. dropdown_class.appendChild(topNav_div);
  508. bottomNav_div = document.createElement('div');
  509. bottomNav_div.className = "b-profile-nav";
  510. bottomNav_div.innerHTML += "<a id='bottom' href='#top'><span>"+locale.p02.lang+"</span></a>";
  511. lcontent_class.appendChild(bottomNav_div);
  512.  
  513. // getting registration date
  514. var dateStamp = document.getElementsByClassName('js-date-format')[0].getAttribute('data-timestamp'),
  515. daysPassed = (new Date() - new Date(dateStamp * 1000)) / 1000/60/60/24;
  516. profileName_class.lastElementChild.innerHTML += " - "+daysPassed.toFixed()+" "+locale.p03.lang+".";
  517.  
  518. // getting userinfo
  519. var nick = document.getElementsByTagName('h1')[0].innerHTML,
  520. userid = document.location.href.match(/\/(\d+)/)[1];
  521.  
  522. // player statistic links
  523. var nm_url = nm_host+"/player/"+nm_srv+"/"+nick+"/"+userid;
  524. wl_player = nm_player = wn_player = mws_player = fz_player = signature = replays = "";
  525. if (wl_srv !== null) {
  526. wl_player = "<td><a target='_blank' href='http://wotlabs.net/"+wl_srv+"/player/"+nick+"'>WoTLabs</a></td>",
  527. signature = "<tr><td class='statname'>"+locale.p05.lang+"</td><td><a target='_blank' href='http://wotlabs.net/sig/"+wl_srv+"/"+nick+"/signature.png'>"+locale.p06.lang+"</a></td>"
  528. + "<td><a target='_blank' href='http://wotlabs.net/sig_dark/"+wl_srv+"/"+nick+"/signature.png'>"+locale.p07.lang+"</a></td></tr>";
  529. }
  530. if (nm_srv !== null) {
  531. nm_player = "<td><a target='_blank' href='"+nm_url+"'>Noobmeter</a></td>";
  532. }
  533. if (wn_srv !== null) {
  534. wn_player = "<td><a target='_blank' href='http://wot-news.com/index.php/stat/pstat/"+wn_srv+"/"+nick+"/'>Wot-news</a></td>";
  535. }
  536. if (mws_srv !== null) {
  537. mws_player = "<td><a target='_blank' href='http://mywotstats.com/player/view/"+userid+"/"+mws_srv+"'>MyWOTStats</a></td>";
  538. }
  539. if (fz_srv !== null) {
  540. fz_player = "<td><a target='_blank' href='http://feldzug.net/"+fz_srv+"/"+nick+"'>Feldzug</a></td>";
  541. }
  542. if (wr_srv !== null) {
  543. replays = "<tr><td class='statname'>"+locale.p08.lang+"</td><td><a target='_blank' href='http://wotreplays."+wr_srv+"/player/"+nick+"'>WoTReplays</a></td></tr>";
  544. }
  545. playerstat = "<tr><td class='statname'>"+locale.p04.lang+"</td>"+wl_player+nm_player+wn_player+"</tr><tr><td></td>"+mws_player+fz_player+"</tr>";
  546. if (playerstat.length > 66) {
  547. profileName_class.innerHTML += "<table>"+playerstat+signature+replays+"</table>";
  548. }
  549.  
  550. // clan handler caller - clan container is delayed by Wargaming
  551. clanHnd();
  552.  
  553. // move sidebar
  554. var sidebar_class = document.getElementsByClassName('l-sidebar')[0];
  555. profile_div.appendChild(sidebar_class);
  556.  
  557. // end profile wrapper
  558.  
  559. // formula calculations and variables
  560. // expected tank values v14 with premium tanks up to 0.8.11
  561. var statArr = {
  562. // soviet
  563. // light tanks
  564. "ussrms1": { frag: 2.10, dmg: 270, spot: 1.55, def: 1.81, win: 60.46, tier: 1, nation: "RU", type: "LT" },
  565. "ussrbt2": { frag: 1.89, dmg: 306, spot: 2.20, def: 1.58, win: 57.80, tier: 2, nation: "RU", type: "LT" },
  566. "ussrt26": { frag: 1.87, dmg: 302, spot: 1.26, def: 2.33, win: 54.63, tier: 2, nation: "RU", type: "LT" },
  567. "ussrt60": { frag: 1.80, dmg: 299, spot: 1.71, def: 2.37, win: 57.55, tier: 2, nation: "RU", type: "LT" },
  568. "ussrtetrarch_ll": { frag: 1.96, dmg: 323, spot: 1.63, def: 1.87, win: 59.43, tier: 2, nation: "RU", type: "LT", prem: 1 },
  569. "ussrbt7": { frag: 0.94, dmg: 229, spot: 2.19, def: 1.38, win: 51.27, tier: 3, nation: "RU", type: "LT" },
  570. "ussrt46": { frag: 1.17, dmg: 284, spot: 1.57, def: 1.27, win: 53.17, tier: 3, nation: "RU", type: "LT" },
  571. "ussrt70": { frag: 1.47, dmg: 361, spot: 1.72, def: 1.37, win: 62.46, tier: 3, nation: "RU", type: "LT" },
  572. "ussrm3_stuart_ll": { frag: 1.02, dmg: 232, spot: 1.78, def: 1.18, win: 50.83, tier: 3, nation: "RU", type: "LT", prem: 1 },
  573. "ussrltp": { frag: 1.68, dmg: 343, spot: 1.22, def: 2.46, win: 58.40, tier: 3, nation: "RU", type: "LT", prem: 1 },
  574. "ussrt127": { frag: 1.89, dmg: 393, spot: 1.83, def: 1.88, win: 59.79, tier: 3, nation: "RU", type: "LT", prem: 1 },
  575. "ussrbtsv": { frag: 1.52, dmg: 346, spot: 1.54, def: 1.94, win: 61.00, tier: 3, nation: "RU", type: "LT", prem: 1 },
  576. "ussra20": { frag: 0.90, dmg: 270, spot: 3.34, def: 0.62, win: 48.95, tier: 4, nation: "RU", type: "LT" },
  577. "ussrt50": { frag: 0.97, dmg: 339, spot: 4.02, def: 1.07, win: 59.40, tier: 4, nation: "RU", type: "LT" },
  578. "ussrt80": { frag: 1.17, dmg: 404, spot: 1.87, def: 2.06, win: 58.07, tier: 4, nation: "RU", type: "LT" },
  579. "ussrvalentine_ll": { frag: 0.96, dmg: 370, spot: 0.88, def: 1.28, win: 53.78, tier: 4, nation: "RU", type: "LT", prem: 1 },
  580. "ussrt_50_2": { frag: 0.61, dmg: 380, spot: 4.79, def: 0.80, win: 54.50, tier: 5, nation: "RU", type: "LT" },
  581. "ussrmt25": { frag: 0.63, dmg: 415, spot: 3.60, def: 0.86, win: 53.51, tier: 6, nation: "RU", type: "LT" },
  582. // medium tanks
  583. "ussra32": { frag: 0.87, dmg: 273, spot: 2.86, def: 0.56, win: 53.98, tier: 4, nation: "RU", type: "MT", prem: 1 },
  584. "ussrt28": { frag: 1.19, dmg: 421, spot: 1.24, def: 0.97, win: 51.85, tier: 4, nation: "RU", type: "MT" },
  585. "ussrt34": { frag: 1.15, dmg: 528, spot: 1.44, def: 1.24, win: 54.75, tier: 5, nation: "RU", type: "MT" },
  586. "ussrmatilda_ii_ll": { frag: 1.40, dmg: 587, spot: 1.16, def: 1.61, win: 55.82, tier: 5, nation: "RU", type: "MT", prem: 1 },
  587. "ussrt3485": { frag: 1.03, dmg: 740, spot: 1.37, def: 1.02, win: 53.78, tier: 6, nation: "RU", type: "MT" },
  588. "ussra43": { frag: 1.08, dmg: 755, spot: 1.44, def: 1.21, win: 53.18, tier: 6, nation: "RU", type: "MT" },
  589. "ussrt43": { frag: 0.97, dmg: 891, spot: 1.54, def: 1.00, win: 53.64, tier: 7, nation: "RU", type: "MT" },
  590. "ussra44": { frag: 1.00, dmg: 943, spot: 1.59, def: 1.18, win: 55.71, tier: 7, nation: "RU", type: "MT" },
  591. "ussrkv13": { frag: 0.85, dmg: 750, spot: 1.59, def: 1.05, win: 52.94, tier: 7, nation: "RU", type: "MT" },
  592. "ussrt4485": { frag: 0.95, dmg: 898, spot: 1.52, def: 1.12, win: 53.05, tier: 7, nation: "RU", type: "MT", prem: 1 },
  593. "ussrt44122": { frag: 0.95, dmg: 898, spot: 1.52, def: 1.12, win: 53.05, tier: 7, nation: "RU", type: "MT", prem: 1 },
  594. "ussrt44": { frag: 0.97, dmg: 1114, spot: 1.74, def: 1.05, win: 54.68, tier: 8, nation: "RU", type: "MT" },
  595. "ussrobject416": { frag: 0.95, dmg: 1186, spot: 1.91, def: 1.09, win: 53.04, tier: 8, nation: "RU", type: "MT" },
  596. "ussrt54": { frag: 1.11, dmg: 1568, spot: 1.90, def: 0.95, win: 55.23, tier: 9, nation: "RU", type: "MT" },
  597. "ussrr104_object_430_ii": { frag: 0.99, dmg: 1524, spot: 1.64, def: 0.77, win: 53.20, tier: 9, nation: "RU", type: "MT" },
  598. "ussrt62a": { frag: 0.98, dmg: 1682, spot: 1.61, def: 0.74, win: 50.40, tier: 10, nation: "RU", type: "MT" },
  599. "ussrobject_140": { frag: 0.98, dmg: 1682, spot: 1.61, def: 0.74, win: 50.40, tier: 10, nation: "RU", type: "MT" },
  600. "ussrobject_430": { frag: 0.98, dmg: 1682, spot: 1.61, def: 0.74, win: 50.40, tier: 10, nation: "RU", type: "MT" },
  601. "ussrobject_907": { frag: 0.98, dmg: 1682, spot: 1.61, def: 0.74, win: 50.40, tier: 10, nation: "RU", type: "MT", prem: 1 },
  602. // heavy tanks
  603. "ussrkv": { frag: 1.01, dmg: 590, spot: 0.72, def: 0.52, win: 51.16, tier: 5, nation: "RU", type: "HT" },
  604. "ussrkv1": { frag: 1.22, dmg: 653, spot: 0.80, def: 1.00, win: 53.41, tier: 5, nation: "RU", type: "HT" },
  605. "ussrchurchill_ll": { frag: 1.30, dmg: 614, spot: 1.17, def: 1.51, win: 52.73, tier: 5, nation: "RU", type: "HT", prem: 1 },
  606. "ussrkv220_action": { frag: 1.39, dmg: 593, spot: 1.46, def: 0.62, win: 54.00, tier: 5, nation: "RU", type: "HT", prem: 1 },
  607. "ussrkv220": { frag: 1.39, dmg: 593, spot: 1.46, def: 0.62, win: 54.00, tier: 5, nation: "RU", type: "HT", prem: 1 },
  608. "ussrkv1s": { frag: 1.33, dmg: 1003, spot: 1.16, def: 0.94, win: 56.56, tier: 6, nation: "RU", type: "HT" },
  609. "ussrkv2": { frag: 1.15, dmg: 900, spot: 0.74, def: 0.84, win: 53.31, tier: 6, nation: "RU", type: "HT" },
  610. "ussrt150": { frag: 1.02, dmg: 804, spot: 0.80, def: 0.79, win: 52.65, tier: 6, nation: "RU", type: "HT" },
  611. "ussris": { frag: 1.06, dmg: 1068, spot: 1.05, def: 0.79, win: 52.53, tier: 7, nation: "RU", type: "HT" },
  612. "ussrkv3": { frag: 1.09, dmg: 1128, spot: 0.87, def: 0.77, win: 53.45, tier: 7, nation: "RU", type: "HT" },
  613. "ussris3": { frag: 0.97, dmg: 1346, spot: 1.03, def: 0.77, win: 52.09, tier: 8, nation: "RU", type: "HT" },
  614. "ussrkv4": { frag: 0.85, dmg: 1223, spot: 0.79, def: 0.71, win: 51.70, tier: 8, nation: "RU", type: "HT" },
  615. "ussrobject252": { frag: 1.11, dmg: 1415, spot: 1.11, def: 0.91, win: 53.28, tier: 8, nation: "RU", type: "HT", prem: 1 },
  616. "ussrkv5": { frag: 1.00, dmg: 1248, spot: 1.11, def: 0.91, win: 50.31, tier: 8, nation: "RU", type: "HT", prem: 1 },
  617. "ussris8": { frag: 0.96, dmg: 1571, spot: 1.12, def: 0.67, win: 50.35, tier: 9, nation: "RU", type: "HT" },
  618. "ussrst_i": { frag: 0.96, dmg: 1608, spot: 0.92, def: 0.70, win: 52.55, tier: 9, nation: "RU", type: "HT" },
  619. "ussris7": { frag: 0.86, dmg: 1700, spot: 1.13, def: 0.56, win: 50.07, tier: 10, nation: "RU", type: "HT" },
  620. "ussris4": { frag: 0.91, dmg: 1791, spot: 1.08, def: 0.78, win: 49.75, tier: 10, nation: "RU", type: "HT" },
  621. // tank destroyers
  622. "ussrat1": { frag: 1.74, dmg: 307, spot: 0.46, def: 1.66, win: 56.42, tier: 2, nation: "RU", type: "TD" },
  623. "ussrsu76": { frag: 1.49, dmg: 396, spot: 0.87, def: 1.70, win: 54.36, tier: 3, nation: "RU", type: "TD" },
  624. "ussrsu76i": { frag: 1.49, dmg: 396, spot: 0.87, def: 1.70, win: 54.36, tier: 3, nation: "RU", type: "TD", prem: 1 },
  625. "ussrgaz74b": { frag: 1.44, dmg: 519, spot: 1.00, def: 1.45, win: 55.48, tier: 4, nation: "RU", type: "TD" },
  626. "ussrsu85": { frag: 1.21, dmg: 608, spot: 0.54, def: 1.22, win: 52.36, tier: 5, nation: "RU", type: "TD" },
  627. "ussrsu_85i": { frag: 1.21, dmg: 608, spot: 0.54, def: 1.22, win: 52.36, tier: 5, nation: "RU", type: "TD", prem: 1 },
  628. "ussrsu100": { frag: 1.24, dmg: 887, spot: 0.81, def: 1.19, win: 54.05, tier: 6, nation: "RU", type: "TD" },
  629. "ussrsu100y": { frag: 1.28, dmg: 985, spot: 0.70, def: 0.86, win: 54.72, tier: 6, nation: "RU", type: "TD", prem: 1 },
  630. "ussrsu152": { frag: 1.12, dmg: 1096, spot: 0.57, def: 0.94, win: 52.53, tier: 7, nation: "RU", type: "TD" },
  631. "ussrsu122_44": { frag: 1.34, dmg: 1251, spot: 0.82, def: 1.14, win: 54.32, tier: 7, nation: "RU", type: "TD", prem: 1 },
  632. "ussrsu100m1": { frag: 1.02, dmg: 1034, spot: 0.91, def: 1.14, win: 52.43, tier: 7, nation: "RU", type: "TD" },
  633. "ussrisu152": { frag: 1.18, dmg: 1561, spot: 0.59, def: 0.81, win: 51.04, tier: 8, nation: "RU", type: "TD" },
  634. "ussrsu101": { frag: 1.02, dmg: 1278, spot: 0.93, def: 1.11, win: 50.39, tier: 8, nation: "RU", type: "TD" },
  635. "ussrobject_704": { frag: 1.16, dmg: 1842, spot: 0.69, def: 0.70, win: 52.00, tier: 9, nation: "RU", type: "TD" },
  636. "ussrsu122_54": { frag: 1.06, dmg: 1575, spot: 0.96, def: 0.94, win: 50.27, tier: 9, nation: "RU", type: "TD" },
  637. "ussrobject268": { frag: 1.21, dmg: 2219, spot: 0.85, def: 0.71, win: 51.17, tier: 10, nation: "RU", type: "TD" },
  638. "ussrobject263": { frag: 1.13, dmg: 2027, spot: 0.94, def: 1.07, win: 50.67, tier: 10, nation: "RU", type: "TD" },
  639. // artillery
  640. "ussrsu18": { frag: 1.42, dmg: 267, spot: 0.17, def: 2.51, win: 49.78, tier: 2, nation: "RU", type: "SPG" },
  641. "ussrsu26": { frag: 1.60, dmg: 586, spot: 0.16, def: 2.17, win: 57.28, tier: 3, nation: "RU", type: "SPG" },
  642. "ussrsu5": { frag: 1.02, dmg: 582, spot: 0.16, def: 1.73, win: 49.33, tier: 4, nation: "RU", type: "SPG" },
  643. "ussrsu122a": { frag: 1.16, dmg: 705, spot: 0.12, def: 1.79, win: 52.19, tier: 5, nation: "RU", type: "SPG" },
  644. "ussrsu8": { frag: 0.92, dmg: 1101, spot: 0.11, def: 1.26, win: 49.77, tier: 6, nation: "RU", type: "SPG" },
  645. "ussrsu14_1": { frag: 0.81, dmg: 1226, spot: 0.10, def: 0.86, win: 48.50, tier: 7, nation: "RU", type: "SPG" },
  646. "ussrs51": { frag: 0.82, dmg: 1180, spot: 0.10, def: 0.62, win: 48.50, tier: 7, nation: "RU", type: "SPG" },
  647. "ussrsu14": { frag: 0.92, dmg: 1319, spot: 0.09, def: 0.66, win: 48.58, tier: 8, nation: "RU", type: "SPG" },
  648. "ussrobject_212": { frag: 0.85, dmg: 1556, spot: 0.09, def: 0.57, win: 49.17, tier: 9, nation: "RU", type: "SPG" },
  649. "ussrobject_261": { frag: 0.91, dmg: 1682, spot: 0.08, def: 0.65, win: 48.94, tier: 10, nation: "RU", type: "SPG" },
  650.  
  651. // germany
  652. // light tanks
  653. "germanyltraktor": { frag: 2.11, dmg: 278, spot: 2.35, def: 1.84, win: 59.54, tier: 1, nation: "DE", type: "LT" },
  654. "germanypz35t": { frag: 1.95, dmg: 311, spot: 2.01, def: 2.19, win: 57.60, tier: 2, nation: "DE", type: "LT" },
  655. "germanypzi": { frag: 1.72, dmg: 266, spot: 3.18, def: 2.66, win: 59.06, tier: 2, nation: "DE", type: "LT" },
  656. "germanypzii": { frag: 1.69, dmg: 272, spot: 2.05, def: 1.78, win: 56.14, tier: 2, nation: "DE", type: "LT" },
  657. "germanyh39_captured": { frag: 2.20, dmg: 352, spot: 1.88, def: 2.72, win: 54.01, tier: 2, nation: "DE", type: "LT", prem: 1 },
  658. "germanypz38t": { frag: 1.68, dmg: 384, spot: 1.58, def: 1.77, win: 56.45, tier: 3, nation: "DE", type: "LT" },
  659. "germanypziii_a": { frag: 1.20, dmg: 268, spot: 1.84, def: 1.53, win: 53.33, tier: 3, nation: "DE", type: "LT" },
  660. "germanypzi_ausf_c": { frag: 1.31, dmg: 277, spot: 3.01, def: 1.41, win: 57.25, tier: 3, nation: "DE", type: "LT" },
  661. "germanypz_ii_ausfg": { frag: 1.15, dmg: 288, spot: 1.99, def: 1.63, win: 59.52, tier: 3, nation: "DE", type: "LT" },
  662. "germanypzii_j": { frag: 2.14, dmg: 405, spot: 2.08, def: 3.01, win: 63.00, tier: 3, nation: "DE", type: "LT", prem: 1 },
  663. "germanyt15": { frag: 1.29, dmg: 295, spot: 3.61, def: 1.66, win: 59.71, tier: 3, nation: "DE", type: "LT", prem: 1 },
  664. "germanypzii_luchs": { frag: 1.34, dmg: 339, spot: 2.75, def: 1.32, win: 56.52, tier: 4, nation: "DE", type: "LT" },
  665. "germanypz38_na": { frag: 0.92, dmg: 290, spot: 2.71, def: 1.11, win: 54.03, tier: 4, nation: "DE", type: "LT" },
  666. "germanyvk1602": { frag: 0.73, dmg: 357, spot: 3.20, def: 0.80, win: 53.30, tier: 5, nation: "DE", type: "LT" },
  667. "germanyvk2801": { frag: 0.77, dmg: 596, spot: 2.97, def: 0.62, win: 53.08, tier: 6, nation: "DE", type: "LT" },
  668. "germanyauf_panther": { frag: 0.69, dmg: 738, spot: 2.36, def: 0.71, win: 50.37, tier: 7, nation: "DE", type: "LT" },
  669. // medium tanks
  670. "germanypz_iv_ausfa": { frag: 0, dmg: 0, spot: 0, def: 0, win: 0, tier: 3, nation: "DE", type: "MT" }, // no values
  671. "germanys35_captured": { frag: 1.90, dmg: 425, spot: 1.58, def: 1.94, win: 62.00, tier: 3, nation: "DE", type: "MT", prem: 1 },
  672. "germanyg100_gtraktor_krupp": { frag: 0, dmg: 0, spot: 0, def: 0, win: 0, tier: 3, nation: "DE", type: "MT", prem: 1 }, // no values
  673. "germanypziii_ausfj": { frag: 1.19, dmg: 360, spot: 2.15, def: 1.16, win: 55.49, tier: 4, nation: "DE", type: "MT" },
  674. "germanyvk2001db": { frag: 1.30, dmg: 424, spot: 1.71, def: 1.36, win: 57.92, tier: 4, nation: "DE", type: "MT" },
  675. "germanypz_iv_ausfd": { frag: 0, dmg: 0, spot: 0, def: 0, win: 0, tier: 4, nation: "DE", type: "MT" }, // no values
  676. "germanypziii_iv": { frag: 0.98, dmg: 455, spot: 1.65, def: 1.00, win: 53.07, tier: 5, nation: "DE", type: "MT" },
  677. "germanypziv": { frag: 1.23, dmg: 607, spot: 1.26, def: 1.07, win: 54.88, tier: 5, nation: "DE", type: "MT" }, // for backup
  678. "germanypz_iv_ausfh": { frag: 1.23, dmg: 607, spot: 1.26, def: 1.07, win: 54.88, tier: 5, nation: "DE", type: "MT" },
  679. "germanypziv_hydro": { frag: 1.23, dmg: 607, spot: 1.26, def: 1.07, win: 54.88, tier: 5, nation: "DE", type: "MT", prem: 1 },
  680. "germanyt25": { frag: 1.22, dmg: 596, spot: 1.55, def: 1.29, win: 55.52, tier: 5, nation: "DE", type: "MT", prem: 1 },
  681. "germanyvk3002db_v1": { frag: 1.13, dmg: 788, spot: 1.49, def: 1.33, win: 53.74, tier: 6, nation: "DE", type: "MT" },
  682. "germanyvk3001p": { frag: 0.93, dmg: 666, spot: 1.28, def: 0.89, win: 52.07, tier: 6, nation: "DE", type: "MT" },
  683. "germanyvk3002m": { frag: 1.08, dmg: 755, spot: 1.44, def: 1.21, win: 53.18, tier: 6, nation: "DE", type: "MT" },
  684. "germanypzv_pziv": { frag: 1.04, dmg: 643, spot: 2.01, def: 1.30, win: 50.70, tier: 6, nation: "DE", type: "MT", prem: 1 },
  685. "germanypzv_pziv_ausf_alfa": { frag: 1.04, dmg: 643, spot: 2.01, def: 1.30, win: 51.35, tier: 6, nation: "DE", type: "MT", prem: 1 },
  686. "germanypziv_schmalturm": { frag: 1.07, dmg: 808, spot: 1.10, def: 1.62, win: 50.54, tier: 6, nation: "DE", type: "MT", prem: 1 },
  687. "germanypzv": { frag: 0.84, dmg: 850, spot: 1.11, def: 1.27, win: 51.64, tier: 7, nation: "DE", type: "MT" },
  688. "germanyvk3002db": { frag: 0.92, dmg: 848, spot: 1.54, def: 1.02, win: 52.63, tier: 7, nation: "DE", type: "MT" },
  689. "germanypanther_m10": { frag: 0.99, dmg: 942, spot: 1.27, def: 1.49, win: 52.41, tier: 7, nation: "DE", type: "MT", prem: 1 },
  690. "germanypanther_ii": { frag: 0.90, dmg: 1110, spot: 1.43, def: 1.04, win: 53.04, tier: 8, nation: "DE", type: "MT" },
  691. "germanyindien_panzer": { frag: 0.90, dmg: 1213, spot: 1.13, def: 1.16, win: 50.29, tier: 8, nation: "DE", type: "MT" },
  692. "germanye50": { frag: 1.01, dmg: 1518, spot: 1.47, def: 0.82, win: 52.24, tier: 9, nation: "DE", type: "MT" },
  693. "germanypro_ag_a": { frag: 0.96, dmg: 1485, spot: 1.27, def: 1.09, win: 49.51, tier: 9, nation: "DE", type: "MT" },
  694. "germanye50_ausf_m": { frag: 0.94, dmg: 1701, spot: 1.42, def: 0.66, win: 49.77, tier: 10, nation: "DE", type: "MT" },
  695. "germanyleopard1": { frag: 0.93, dmg: 1736, spot: 1.46, def: 0.82, win: 47.28, tier: 10, nation: "DE", type: "MT" },
  696. // heavy tanks
  697. "germanydw_ii": { frag: 1.16, dmg: 348, spot: 1.20, def: 1.49, win: 51.63, tier: 4, nation: "DE", type: "HT" },
  698. "germanyb1bis_captured": { frag: 1.96, dmg: 527, spot: 1.79, def: 2.22, win: 60.16, tier: 4, nation: "DE", type: "HT", prem: 1 },
  699. "germanyvk3001h": { frag: 1.17, dmg: 677, spot: 1.45, def: 0.90, win: 51.80, tier: 5, nation: "DE", type: "HT" },
  700. "germanyvk3601h": { frag: 1.34, dmg: 947, spot: 1.40, def: 1.40, win: 57.39, tier: 6, nation: "DE", type: "HT" },
  701. "germanypzvi": { frag: 0.93, dmg: 1031, spot: 0.94, def: 0.98, win: 51.68, tier: 7, nation: "DE", type: "HT" },
  702. "germanypzvi_tiger_p": { frag: 0.97, dmg: 1095, spot: 0.93, def: 1.08, win: 53.17, tier: 7, nation: "DE", type: "HT" },
  703. "germanypzvib_tiger_ii": { frag: 0.89, dmg: 1261, spot: 0.99, def: 0.83, win: 50.25, tier: 8, nation: "DE", type: "HT" },
  704. "germanyvk4502a": { frag: 0.92, dmg: 1258, spot: 1.25, def: 0.89, win: 51.16, tier: 8, nation: "DE", type: "HT" },
  705. "germanylowe": { frag: 0.83, dmg: 1221, spot: 0.84, def: 0.79, win: 49.04, tier: 8, nation: "DE", type: "HT", prem: 1 },
  706. "germanye75": { frag: 0.96, dmg: 1595, spot: 1.00, def: 0.69, win: 51.37, tier: 9, nation: "DE", type: "HT" },
  707. "germanyvk4502p": { frag: 0.90, dmg: 1488, spot: 0.93, def: 0.60, win: 49.63, tier: 9, nation: "DE", type: "HT" },
  708. "germanye100": { frag: 0.94, dmg: 1836, spot: 0.98, def: 0.52, win: 50.59, tier: 10, nation: "DE", type: "HT" },
  709. "germanymaus": { frag: 0.82, dmg: 1631, spot: 0.89, def: 0.68, win: 49.77, tier: 10, nation: "DE", type: "HT" },
  710. "germanyvk7201": { frag: 0.86, dmg: 1700, spot: 1.13, def: 0.56, win: 50.07, tier: 10, nation: "DE", type: "HT", prem: 1 },
  711. // tank destroyers
  712. "germanypanzerjager_i": { frag: 1.95, dmg: 330, spot: 0.94, def: 1.78, win: 59.68, tier: 2, nation: "DE", type: "TD" },
  713. "germanyg20_marder_ii": { frag: 1.51, dmg: 428, spot: 1.08, def: 1.51, win: 58.41, tier: 3, nation: "DE", type: "TD" },
  714. "germanyhetzer": { frag: 1.63, dmg: 533, spot: 0.64, def: 1.37, win: 57.58, tier: 4, nation: "DE", type: "TD" },
  715. "germanymarder_iii": { frag: 1.42, dmg: 533, spot: 0.64, def: 1.37, win: 57.58, tier: 4, nation: "DE", type: "TD" },
  716. "germanyg101_stug_iii": { frag: 0, dmg: 0, spot: 0, def: 0, win: 0, tier: 5, nation: "DE", type: "TD" }, // no values
  717. "germanystug_40_ausfg": { frag: 1.21, dmg: 616, spot: 0.73, def: 1.40, win: 53.19, tier: 5, nation: "DE", type: "TD" },
  718. "germanypz_sfl_ivc": { frag: 1.32, dmg: 681, spot: 0.86, def: 1.32, win: 54.17, tier: 5, nation: "DE", type: "TD" },
  719. "germanyjagdpziv": { frag: 1.08, dmg: 748, spot: 0.72, def: 1.26, win: 52.37, tier: 6, nation: "DE", type: "TD" },
  720. "germanynashorn": { frag: 1.26, dmg: 937, spot: 0.80, def: 1.14, win: 53.97, tier: 6, nation: "DE", type: "TD" },
  721. "germanydickermax": { frag: 1.20, dmg: 892, spot: 0.76, def: 1.09, win: 51.40, tier: 6, nation: "DE", type: "TD", prem: 1 },
  722. "germanyjagdpanther": { frag: 1.10, dmg: 1123, spot: 0.68, def: 1.10, win: 51.94, tier: 7, nation: "DE", type: "TD" },
  723. "germanysturer_emil": { frag: 1.10, dmg: 1123, spot: 0.68, def: 1.10, win: 52.69, tier: 7, nation: "DE", type: "TD" },
  724. "germanye25": { frag: 1.34, dmg: 1127, spot: 1.40, def: 2.25, win: 50.54, tier: 7, nation: "DE", type: "TD", prem: 1 },
  725. "germanyjagdpantherii": { frag: 1.14, dmg: 1544, spot: 0.76, def: 0.98, win: 50.97, tier: 8, nation: "DE", type: "TD" },
  726. "germanyferdinand": { frag: 1.07, dmg: 1455, spot: 0.62, def: 0.90, win: 50.53, tier: 8, nation: "DE", type: "TD" },
  727. "germanyrhb_waffentrager": { frag: 1.22, dmg: 1652, spot: 0.81, def: 1.05, win: 54.54, tier: 8, nation: "DE", type: "TD" },
  728. "germanyjagdtiger_sdkfz_185": { frag: 1.00, dmg: 1378, spot: 0.72, def: 1.14, win: 50.48, tier: 8, nation: "DE", type: "TD", prem: 1 },
  729. "germanyjagdtiger": { frag: 1.09, dmg: 1777, spot: 0.66, def: 0.77, win: 49.84, tier: 9, nation: "DE", type: "TD" },
  730. "germanywaffentrager_iv": { frag: 1.16, dmg: 1842, spot: 0.69, def: 0.70, win: 52.00, tier: 9, nation: "DE", type: "TD" },
  731. "germanyjagdpz_e100": { frag: 1.02, dmg: 1943, spot: 0.66, def: 0.49, win: 48.61, tier: 10, nation: "DE", type: "TD" },
  732. "germanywaffentrager_e100": { frag: 1.40, dmg: 2388, spot: 0.95, def: 0.68, win: 53.83, tier: 10, nation: "DE", type: "TD" },
  733. // artillery
  734. "germanygw_mk_vie": { frag: 1.47, dmg: 280, spot: 0.17, def: 2.23, win: 51.21, tier: 2, nation: "DE", type: "SPG" },
  735. "germanybison_i": { frag: 1.31, dmg: 383, spot: 0.21, def: 1.57, win: 57.02, tier: 3, nation: "DE", type: "SPG" },
  736. "germanywespe": { frag: 1.15, dmg: 415, spot: 0.16, def: 1.81, win: 54.00, tier: 3, nation: "DE", type: "SPG" },
  737. "germanysturmpanzer_ii": { frag: 1.16, dmg: 436, spot: 0.18, def: 1.68, win: 50.46, tier: 4, nation: "DE", type: "SPG" },
  738. "germanypz_sfl_ivb": { frag: 1.10, dmg: 471, spot: 0.16, def: 2.44, win: 55.16, tier: 4, nation: "DE", type: "SPG" },
  739. "germanygrille": { frag: 1.08, dmg: 648, spot: 0.11, def: 1.58, win: 51.03, tier: 5, nation: "DE", type: "SPG" },
  740. "germanyhummel": { frag: 0.84, dmg: 982, spot: 0.11, def: 1.28, win: 48.42, tier: 6, nation: "DE", type: "SPG" },
  741. "germanyg_panther": { frag: 0.81, dmg: 1248, spot: 0.10, def: 0.91, win: 48.17, tier: 7, nation: "DE", type: "SPG" },
  742. "germanygw_tiger_p": { frag: 0.88, dmg: 1335, spot: 0.09, def: 0.61, win: 47.62, tier: 8, nation: "DE", type: "SPG" },
  743. "germanyg_tiger": { frag: 0.86, dmg: 1552, spot: 0.09, def: 0.61, win: 49.30, tier: 9, nation: "DE", type: "SPG" },
  744. "germanyg_e": { frag: 0.86, dmg: 1651, spot: 0.08, def: 0.56, win: 49.55, tier: 10, nation: "DE", type: "SPG" },
  745.  
  746. // usa
  747. // light tanks
  748. "usat1_cunningham": { frag: 2.14, dmg: 265, spot: 2.67, def: 1.78, win: 61.40, tier: 1, nation: "US", type: "LT" },
  749. "usam2_lt": { frag: 1.75, dmg: 281, spot: 2.73, def: 1.76, win: 60.49, tier: 2, nation: "US", type: "LT" },
  750. "usat2_lt": { frag: 1.70, dmg: 275, spot: 3.12, def: 1.64, win: 58.98, tier: 2, nation: "US", type: "LT", prem: 1 },
  751. "usat1_e6": { frag: 1.62, dmg: 269, spot: 2.05, def: 1.43, win: 57.06, tier: 2, nation: "US", type: "LT", prem: 1 },
  752. "usat7_combat_car": { frag: 1.80, dmg: 295, spot: 2.02, def: 2.02, win: 58.04, tier: 2, nation: "US", type: "LT", prem: 1 },
  753. "usam3_stuart": { frag: 1.09, dmg: 252, spot: 2.66, def: 1.57, win: 53.72, tier: 3, nation: "US", type: "LT" },
  754. "usam22_locust": { frag: 1.22, dmg: 287, spot: 2.94, def: 1.27, win: 58.31, tier: 3, nation: "US", type: "LT", prem: 1 },
  755. "usamtls1g14": { frag: 1.39, dmg: 314, spot: 1.95, def: 1.64, win: 57.44, tier: 3, nation: "US", type: "LT", prem: 1 },
  756. "usam5_stuart": { frag: 1.03, dmg: 334, spot: 3.12, def: 1.28, win: 57.84, tier: 4, nation: "US", type: "LT" },
  757. "usam24_chaffee": { frag: 0.69, dmg: 538, spot: 2.67, def: 0.81, win: 53.27, tier: 5, nation: "US", type: "LT" },
  758. "usat21": { frag: 0.65, dmg: 517, spot: 2.44, def: 0.76, win: 52.09, tier: 6, nation: "US", type: "LT" },
  759. "usat71": { frag: 0.81, dmg: 824, spot: 2.66, def: 0.85, win: 53.03, tier: 7, nation: "US", type: "LT" },
  760. // medium tanks
  761. "usat2_med": { frag: 1.92, dmg: 310, spot: 2.01, def: 1.92, win: 57.24, tier: 2, nation: "US", type: "MT" },
  762. "usam2_med": { frag: 1.38, dmg: 301, spot: 1.45, def: 1.15, win: 53.29, tier: 3, nation: "US", type: "MT" },
  763. "usam3_grant": { frag: 1.14, dmg: 377, spot: 0.87, def: 0.97, win: 51.78, tier: 4, nation: "US", type: "MT" },
  764. "usam4_sherman": { frag: 1.73, dmg: 801, spot: 1.57, def: 1.31, win: 60.24, tier: 5, nation: "US", type: "MT" },
  765. "usam7_med": { frag: 0.98, dmg: 441, spot: 2.15, def: 1.12, win: 53.32, tier: 5, nation: "US", type: "MT" },
  766. "usaramii": { frag: 1.19, dmg: 538, spot: 1.37, def: 1.31, win: 55.69, tier: 5, nation: "US", type: "MT", prem: 1 },
  767. "usam4a2e4": { frag: 0.94, dmg: 401, spot: 1.45, def: 0.94, win: 51.74, tier: 5, nation: "US", type: "MT", prem: 1 },
  768. "usasherman_jumbo": { frag: 1.21, dmg: 840, spot: 1.19, def: 1.38, win: 54.75, tier: 6, nation: "US", type: "MT" },
  769. "usam4a3e8_sherman": { frag: 1.03, dmg: 700, spot: 1.50, def: 1.11, win: 53.63, tier: 6, nation: "US", type: "MT" },
  770. "usat20": { frag: 0.97, dmg: 932, spot: 1.69, def: 0.98, win: 53.52, tier: 7, nation: "US", type: "MT" },
  771. "usat23e3": { frag: 0, dmg: 0, spot: 0, def: 0, win: 0, tier: 7, nation: "US", type: "MT", prem: 1 }, // no values
  772. "usapershing": { frag: 0.95, dmg: 1159, spot: 1.53, def: 1.11, win: 52.76, tier: 8, nation: "US", type: "MT" },
  773. "usat69": { frag: 1.21, dmg: 1490, spot: 1.33, def: 1.48, win: 55.52, tier: 8, nation: "US", type: "MT" },
  774. "usat26_e4_superpershing": { frag: 0.89, dmg: 1151, spot: 0.90, def: 1.10, win: 52.30, tier: 8, nation: "US", type: "MT", prem: 1 },
  775. "usat23": { frag: 0.95, dmg: 1159, spot: 1.53, def: 1.11, win: 52.76, tier: 8, nation: "US", type: "MT", prem: 1 },
  776. "usam46_patton": { frag: 1.02, dmg: 1503, spot: 1.64, def: 0.81, win: 52.47, tier: 9, nation: "US", type: "MT" },
  777. "usat54e1": { frag: 1.14, dmg: 1670, spot: 1.05, def: 0.81, win: 51.79, tier: 9, nation: "US", type: "MT" },
  778. "usam48a1": { frag: 0.97, dmg: 1716, spot: 1.58, def: 0.63, win: 50.52, tier: 10, nation: "US", type: "MT" },
  779. "usam60": { frag: 0.91, dmg: 1735, spot: 1.31, def: 0.60, win: 48.50, tier: 10, nation: "US", type: "MT", prem: 1 },
  780. "usat95_e6": { frag: 0, dmg: 0, spot: 0, def: 0, win: 0, tier: 10, nation: "US", type: "MT", prem: 1 }, // no values
  781. // heavy tanks
  782. "usat1_hvy": { frag: 1.24, dmg: 636, spot: 1.14, def: 1.15, win: 53.98, tier: 5, nation: "US", type: "HT" },
  783. "usat14": { frag: 1.35, dmg: 593, spot: 1.53, def: 1.31, win: 54.02, tier: 5, nation: "US", type: "HT", prem: 1 },
  784. "usam6": { frag: 1.07, dmg: 845, spot: 1.03, def: 0.92, win: 52.17, tier: 6, nation: "US", type: "HT" },
  785. "usat29": { frag: 1.13, dmg: 1239, spot: 1.07, def: 1.04, win: 54.14, tier: 7, nation: "US", type: "HT" },
  786. "usat32": { frag: 0.97, dmg: 1336, spot: 1.21, def: 0.92, win: 52.77, tier: 8, nation: "US", type: "HT" },
  787. "usat34_hvy": { frag: 0.87, dmg: 1313, spot: 0.81, def: 0.68, win: 50.57, tier: 8, nation: "US", type: "HT", prem: 1 },
  788. "usam6a2e1": { frag: 0.87, dmg: 1113, spot: 1.22, def: 0.80, win: 47.06, tier: 8, nation: "US", type: "HT", prem: 1 },
  789. "usam103": { frag: 0.92, dmg: 1578, spot: 1.09, def: 0.67, win: 50.82, tier: 9, nation: "US", type: "HT" },
  790. "usat110": { frag: 0.90, dmg: 1802, spot: 1.19, def: 0.74, win: 50.23, tier: 10, nation: "US", type: "HT" },
  791. "usat57_58": { frag: 1.16, dmg: 2159, spot: 0.85, def: 0.78, win: 51.43, tier: 10, nation: "US", type: "HT" },
  792. // tank destroyers
  793. "usat18": { frag: 2.48, dmg: 360, spot: 1.21, def: 1.79, win: 60.50, tier: 2, nation: "US", type: "TD" },
  794. "usat82": { frag: 1.57, dmg: 389, spot: 1.31, def: 1.11, win: 58.10, tier: 3, nation: "US", type: "TD" },
  795. "usat40": { frag: 1.45, dmg: 533, spot: 1.15, def: 1.46, win: 56.56, tier: 4, nation: "US", type: "TD" },
  796. "usam8a1": { frag: 1.42, dmg: 516, spot: 1.54, def: 1.77, win: 57.49, tier: 4, nation: "US", type: "TD" },
  797. "usam10_wolverine": { frag: 1.26, dmg: 627, spot: 0.95, def: 1.42, win: 54.24, tier: 5, nation: "US", type: "TD" },
  798. "usat49": { frag: 1.46, dmg: 700, spot: 1.71, def: 1.67, win: 56.89, tier: 5, nation: "US", type: "TD" },
  799. "usam36_slagger": { frag: 1.09, dmg: 824, spot: 0.89, def: 1.23, win: 53.57, tier: 6, nation: "US", type: "TD" },
  800. "usam18_hellcat": { frag: 1.37, dmg: 1002, spot: 1.47, def: 1.60, win: 56.24, tier: 6, nation: "US", type: "TD" },
  801. "usat25_at": { frag: 1.06, dmg: 1057, spot: 0.81, def: 1.12, win: 53.20, tier: 7, nation: "US", type: "TD" },
  802. "usat25_2": { frag: 1.01, dmg: 1041, spot: 0.98, def: 1.26, win: 52.52, tier: 7, nation: "US", type: "TD" },
  803. "usat28_prototype": { frag: 1.07, dmg: 1467, spot: 0.51, def: 1.06, win: 50.58, tier: 8, nation: "US", type: "TD" },
  804. "usat28": { frag: 1.01, dmg: 1353, spot: 0.51, def: 0.95, win: 49.66, tier: 8, nation: "US", type: "TD" },
  805. "usat95": { frag: 1.06, dmg: 1646, spot: 0.46, def: 0.76, win: 49.81, tier: 9, nation: "US", type: "TD" },
  806. "usat30": { frag: 1.02, dmg: 1733, spot: 0.72, def: 0.64, win: 50.69, tier: 9, nation: "US", type: "TD" },
  807. "usat110e3": { frag: 1.10, dmg: 2072, spot: 0.73, def: 0.50, win: 51.04, tier: 10, nation: "US", type: "TD" },
  808. "usat110e4": { frag: 1.03, dmg: 2053, spot: 0.81, def: 0.56, win: 48.93, tier: 10, nation: "US", type: "TD" },
  809. // artillery
  810. "usat57": { frag: 1.56, dmg: 296, spot: 0.30, def: 2.33, win: 51.15, tier: 2, nation: "US", type: "SPG" },
  811. "usam7_priest": { frag: 1.04, dmg: 567, spot: 0.16, def: 1.89, win: 53.00, tier: 3, nation: "US", type: "SPG" },
  812. "usasexton_i": { frag: 1.30, dmg: 490, spot: 0.16, def: 1.93, win: 55.11, tier: 3, nation: "US", type: "SPG" },
  813. "usam37": { frag: 1.15, dmg: 419, spot: 0.17, def: 1.90, win: 49.49, tier: 4, nation: "US", type: "SPG" },
  814. "usam41": { frag: 0.99, dmg: 874, spot: 0.12, def: 1.33, win: 50.44, tier: 5, nation: "US", type: "SPG" },
  815. "usam44": { frag: 0.90, dmg: 974, spot: 0.11, def: 1.52, win: 47.95, tier: 6, nation: "US", type: "SPG" },
  816. "usam12": { frag: 0.81, dmg: 1240, spot: 0.10, def: 0.89, win: 48.45, tier: 7, nation: "US", type: "SPG" },
  817. "usam40m43": { frag: 0.86, dmg: 1378, spot: 0.09, def: 0.46, win: 47.61, tier: 8, nation: "US", type: "SPG" },
  818. "usam53_55": { frag: 0.86, dmg: 1619, spot: 0.09, def: 0.58, win: 48.32, tier: 9, nation: "US", type: "SPG" },
  819. "usat92": { frag: 0.86, dmg: 1693, spot: 0.08, def: 0.58, win: 48.24, tier: 10, nation: "US", type: "SPG" },
  820.  
  821. // uk
  822. // light tanks
  823. "ukgb01_medium_mark_i": { frag: 2.05, dmg: 260, spot: 1.38, def: 1.76, win: 57.88, tier: 1, nation: "UK", type: "LT" },
  824. "ukgb03_cruiser_mk_i": { frag: 1.73, dmg: 301, spot: 1.97, def: 1.40, win: 58.67, tier: 2, nation: "UK", type: "LT" },
  825. "ukgb58_cruiser_mk_iii": { frag: 2.09, dmg: 349, spot: 2.24, def: 1.42, win: 64.03, tier: 2, nation: "UK", type: "LT" },
  826. "ukgb76_mk_vic": { frag: 1.80, dmg: 295, spot: 2.02, def: 2.02, win: 58.04, tier: 2, nation: "UK", type: "LT", prem: 1 },
  827. "ukgb69_cruiser_mk_ii": { frag: 1.51, dmg: 330, spot: 1.02, def: 1.20, win: 57.99, tier: 3, nation: "UK", type: "LT" },
  828. "ukgb59_cruiser_mk_iv": { frag: 1.65, dmg: 381, spot: 1.92, def: 1.31, win: 60.33, tier: 3, nation: "UK", type: "LT" },
  829. "ukgb60_covenanter": { frag: 1.11, dmg: 378, spot: 1.81, def: 1.15, win: 55.60, tier: 4, nation: "UK", type: "LT" },
  830. "ukgb04_valentine": { frag: 1.45, dmg: 396, spot: 1.75, def: 1.78, win: 55.72, tier: 4, nation: "UK", type: "LT" },
  831. "ukgb20_crusader": { frag: 1.06, dmg: 489, spot: 1.71, def: 1.25, win: 54.16, tier: 5, nation: "UK", type: "LT" },
  832. // medium tanks
  833. "ukgb05_vickers_medium_mk_ii": { frag: 1.80, dmg: 297, spot: 1.23, def: 1.67, win: 57.37, tier: 2, nation: "UK", type: "MT" },
  834. "ukgb06_vickers_medium_mk_iii": { frag: 1.15, dmg: 290, spot: 1.04, def: 0.47, win: 51.20, tier: 3, nation: "UK", type: "MT" },
  835. "ukgb07_matilda": { frag: 1.55, dmg: 562, spot: 0.91, def: 2.08, win: 59.66, tier: 4, nation: "UK", type: "MT" },
  836. "ukgb68_matilda_black_prince": { frag: 1.22, dmg: 536, spot: 0.78, def: 1.28, win: 52.98, tier: 5, nation: "UK", type: "MT", prem: 1 },
  837. "ukgb21_cromwell": { frag: 1.11, dmg: 744, spot: 2.05, def: 1.09, win: 54.02, tier: 6, nation: "UK", type: "MT" },
  838. "ukgb22_comet": { frag: 1.04, dmg: 958, spot: 1.82, def: 1.14, win: 54.07, tier: 7, nation: "UK", type: "MT" },
  839. "ukgb23_centurion": { frag: 0.87, dmg: 1193, spot: 1.26, def: 1.07, win: 53.58, tier: 8, nation: "UK", type: "MT" },
  840. "ukgb24_centurion_mk3": { frag: 0.90, dmg: 1503, spot: 1.22, def: 0.79, win: 50.50, tier: 9, nation: "UK", type: "MT" },
  841. "ukgb70_fv4202_105": { frag: 0.93, dmg: 1726, spot: 1.34, def: 0.60, win: 48.85, tier: 10, nation: "UK", type: "MT" },
  842. // heavy tanks
  843. "ukgb08_churchill_i": { frag: 1.24, dmg: 671, spot: 0.90, def: 1.43, win: 53.96, tier: 5, nation: "UK", type: "HT" },
  844. "ukgb51_excelsior": { frag: 1.32, dmg: 582, spot: 1.32, def: 1.89, win: 53.90, tier: 5, nation: "UK", type: "HT", prem: 1 },
  845. "ukgb09_churchill_vii": { frag: 1.06, dmg: 802, spot: 0.76, def: 1.18, win: 52.39, tier: 6, nation: "UK", type: "HT" },
  846. "ukgb63_tog_ii": { frag: 1.29, dmg: 922, spot: 0.60, def: 1.41, win: 55.31, tier: 6, nation: "UK", type: "HT", prem: 1 },
  847. "ukgb10_black_prince": { frag: 0.96, dmg: 1043, spot: 0.89, def: 1.10, win: 53.54, tier: 7, nation: "UK", type: "HT" },
  848. "ukgb11_caernarvon": { frag: 0.84, dmg: 1257, spot: 1.06, def: 0.87, win: 52.11, tier: 8, nation: "UK", type: "HT" },
  849. "ukgb12_conqueror": { frag: 0.90, dmg: 1604, spot: 1.04, def: 0.68, win: 49.96, tier: 9, nation: "UK", type: "HT" },
  850. "ukgb13_fv215b": { frag: 0.92, dmg: 1859, spot: 1.06, def: 0.76, win: 47.41, tier: 10, nation: "UK", type: "HT" },
  851. // tank destroyers
  852. "ukgb39_universal_carrierqf2": { frag: 1.95, dmg: 321, spot: 1.48, def: 1.77, win: 60.98, tier: 2, nation: "UK", type: "TD" },
  853. "ukgb42_valentine_at": { frag: 1.76, dmg: 401, spot: 0.94, def: 1.64, win: 59.00, tier: 3, nation: "UK", type: "TD" },
  854. "ukgb57_alecto": { frag: 1.49, dmg: 504, spot: 1.48, def: 1.66, win: 55.33, tier: 4, nation: "UK", type: "TD" },
  855. "ukgb73_at2": { frag: 1.29, dmg: 617, spot: 0.79, def: 1.97, win: 55.00, tier: 5, nation: "UK", type: "TD" },
  856. "ukgb74_at8": { frag: 1.24, dmg: 916, spot: 0.73, def: 1.69, win: 54.00, tier: 6, nation: "UK", type: "TD" },
  857. "ukgb40_gun_carrier_churchill": { frag: 0.92, dmg: 704, spot: 0.46, def: 1.10, win: 50.85, tier: 6, nation: "UK", type: "TD" },
  858. "ukgb75_at7": { frag: 1.19, dmg: 1249, spot: 0.69, def: 1.10, win: 54.00, tier: 7, nation: "UK", type: "TD" },
  859. "ukgb71_at_15a": { frag: 0.92, dmg: 1008, spot: 0.82, def: 1.21, win: 51.56, tier: 7, nation: "UK", type: "TD", prem: 1 },
  860. "ukgb72_at15": { frag: 1.15, dmg: 1533, spot: 0.63, def: 1.31, win: 53.26, tier: 8, nation: "UK", type: "TD" },
  861. "ukgb32_tortoise": { frag: 1.11, dmg: 1772, spot: 0.57, def: 1.07, win: 51.99, tier: 9, nation: "UK", type: "TD" },
  862. "ukgb48_fv215b_183": { frag: 1.15, dmg: 2179, spot: 0.60, def: 0.58, win: 49.03, tier: 10, nation: "UK", type: "TD" },
  863. // artillery
  864. "ukgb25_loyd_carrier": { frag: 1.47, dmg: 280, spot: 0.17, def: 2.23, win: 51.21, tier: 2, nation: "UK", type: "SPG" },
  865. "ukgb27_sexton": { frag: 1.30, dmg: 490, spot: 0.16, def: 1.93, win: 55.11, tier: 3, nation: "UK", type: "SPG" },
  866. "ukgb78_sexton_i": { frag: 1.30, dmg: 490, spot: 0.16, def: 1.93, win: 55.11, tier: 3, nation: "UK", type: "SPG", prem: 1 },
  867. "ukgb26_birch_gun": { frag: 1.11, dmg: 477, spot: 0.16, def: 1.94, win: 51.11, tier: 4, nation: "UK", type: "SPG" },
  868. "ukgb28_bishop": { frag: 1.11, dmg: 620, spot: 0.12, def: 1.76, win: 55.29, tier: 5, nation: "UK", type: "SPG" },
  869. "ukgb77_fv304": { frag: 0.95, dmg: 889, spot: 0.13, def: 1.72, win: 49.00, tier: 6, nation: "UK", type: "SPG" },
  870. "ukgb29_crusader_5inch": { frag: 0.81, dmg: 1226, spot: 0.10, def: 0.86, win: 48.50, tier: 7, nation: "UK", type: "SPG" },
  871. "ukgb79_fv206": { frag: 0.88, dmg: 1335, spot: 0.09, def: 0.61, win: 46.68, tier: 8, nation: "UK", type: "SPG" },
  872. "ukgb30_fv3805": { frag: 0.86, dmg: 1619, spot: 0.09, def: 0.58, win: 48.32, tier: 9, nation: "UK", type: "SPG" },
  873. "ukgb31_conqueror_gun": { frag: 0.87, dmg: 1778, spot: 0.08, def: 0.58, win: 49.00, tier: 10, nation: "UK", type: "SPG" },
  874.  
  875. // france
  876. // light tanks
  877. "francerenaultft": { frag: 2.01, dmg: 268, spot: 2.12, def: 2.17, win: 60.24, tier: 1, nation: "FR", type: "LT" },
  878. "francehotchkiss_h35": { frag: 1.52, dmg: 249, spot: 1.32, def: 2.43, win: 58.69, tier: 2, nation: "FR", type: "LT" },
  879. "franced1": { frag: 1.46, dmg: 250, spot: 1.24, def: 2.90, win: 53.96, tier: 2, nation: "FR", type: "LT" },
  880. "franceamx38": { frag: 0.95, dmg: 222, spot: 1.05, def: 1.64, win: 55.07, tier: 3, nation: "FR", type: "LT" },
  881. "franceamx40": { frag: 0.93, dmg: 297, spot: 0.92, def: 1.39, win: 53.09, tier: 4, nation: "FR", type: "LT" },
  882. "franceelc_amx": { frag: 0.73, dmg: 464, spot: 2.88, def: 0.77, win: 53.91, tier: 5, nation: "FR", type: "LT" },
  883. "franceamx_12t": { frag: 0.63, dmg: 471, spot: 1.93, def: 0.69, win: 51.44, tier: 6, nation: "FR", type: "LT" },
  884. "franceamx_13_75": { frag: 0.75, dmg: 623, spot: 1.99, def: 0.77, win: 53.10, tier: 7, nation: "FR", type: "LT" },
  885. "franceamx_13_90": { frag: 0.81, dmg: 846, spot: 2.37, def: 0.66, win: 53.77, tier: 8, nation: "FR", type: "LT" },
  886. // medium tanks
  887. "franced2": { frag: 1.38, dmg: 320, spot: 0.97, def: 2.07, win: 59.59, tier: 3, nation: "FR", type: "MT" },
  888. "francelorraine40t": { frag: 1.09, dmg: 1380, spot: 1.47, def: 0.95, win: 53.24, tier: 9, nation: "FR", type: "MT" },
  889. "francebat_chatillon25t": { frag: 1.19, dmg: 1761, spot: 2.12, def: 0.84, win: 52.51, tier: 10, nation: "FR", type: "MT" },
  890. // heavy tanks
  891. "franceb1": { frag: 1.16, dmg: 348, spot: 1.20, def: 1.49, win: 51.63, tier: 4, nation: "FR", type: "HT" },
  892. "francebdr_g1b": { frag: 1.22, dmg: 654, spot: 0.83, def: 1.11, win: 52.93, tier: 5, nation: "FR", type: "HT" },
  893. "francearl_44": { frag: 0.96, dmg: 813, spot: 0.84, def: 0.85, win: 51.08, tier: 6, nation: "FR", type: "HT" },
  894. "franceamx_m4_1945": { frag: 0.89, dmg: 1021, spot: 0.93, def: 0.94, win: 50.70, tier: 7, nation: "FR", type: "HT" },
  895. "franceamx_50_100": { frag: 1.12, dmg: 1417, spot: 0.97, def: 1.07, win: 51.65, tier: 8, nation: "FR", type: "HT" },
  896. "francefcm_50t": { frag: 1.00, dmg: 1312, spot: 1.37, def: 1.11, win: 50.71, tier: 8, nation: "FR", type: "HT", prem: 1 },
  897. "franceamx_50_120": { frag: 1.12, dmg: 1692, spot: 0.90, def: 0.87, win: 50.81, tier: 9, nation: "FR", type: "HT" },
  898. "francef10_amx_50b": { frag: 1.07, dmg: 1915, spot: 1.03, def: 0.87, win: 50.15, tier: 10, nation: "FR", type: "HT" },
  899. // tank destroyer
  900. "francerenaultft_ac": { frag: 2.02, dmg: 334, spot: 0.86, def: 1.65, win: 54.47, tier: 2, nation: "FR", type: "TD" },
  901. "francefcm_36pak40": { frag: 1.58, dmg: 389, spot: 1.02, def: 2.09, win: 57.84, tier: 3, nation: "FR", type: "TD", prem: 1 },
  902. "francerenaultue57": { frag: 1.96, dmg: 472, spot: 1.03, def: 2.15, win: 59.00, tier: 3, nation: "FR", type: "TD" },
  903. "francesomua_sau_40": { frag: 1.19, dmg: 409, spot: 0.59, def: 1.14, win: 53.90, tier: 4, nation: "FR", type: "TD" },
  904. "frances_35ca": { frag: 1.26, dmg: 649, spot: 0.82, def: 1.26, win: 51.59, tier: 5, nation: "FR", type: "TD" },
  905. "francearl_v39": { frag: 0.99, dmg: 765, spot: 0.68, def: 1.13, win: 48.76, tier: 6, nation: "FR", type: "TD" },
  906. "franceamx_ac_mle1946": { frag: 0.95, dmg: 1043, spot: 0.72, def: 0.97, win: 51.34, tier: 7, nation: "FR", type: "TD" },
  907. "franceamx_ac_mle1948": { frag: 1.00, dmg: 1359, spot: 0.80, def: 0.95, win: 50.97, tier: 8, nation: "FR", type: "TD" },
  908. "franceamx50_foch": { frag: 1.03, dmg: 1674, spot: 0.97, def: 0.90, win: 51.90, tier: 9, nation: "FR", type: "TD" },
  909. "franceamx_50fosh_155": { frag: 1.33, dmg: 2296, spot: 0.95, def: 0.68, win: 52.77, tier: 10, nation: "FR", type: "TD" },
  910. // artillery
  911. "francerenaultbs": { frag: 1.44, dmg: 278, spot: 0.18, def: 1.85, win: 52.70, tier: 2, nation: "FR", type: "SPG" },
  912. "francelorraine39_l_am": { frag: 1.39, dmg: 500, spot: 0.15, def: 2.20, win: 54.24, tier: 3, nation: "FR", type: "SPG" },
  913. "franceamx_ob_am105": { frag: 1.11, dmg: 477, spot: 0.16, def: 1.94, win: 51.11, tier: 4, nation: "FR", type: "SPG" },
  914. "france_105_lefh18b2": { frag: 1.22, dmg: 675, spot: 0.12, def: 2.26, win: 51.40, tier: 5, nation: "FR", type: "SPG", prem: 1 },
  915. "franceamx_105am": { frag: 1.39, dmg: 710, spot: 0.12, def: 2.01, win: 52.80, tier: 5, nation: "FR", type: "SPG" },
  916. "franceamx_13f3am": { frag: 0.90, dmg: 1052, spot: 0.11, def: 1.56, win: 49.39, tier: 6, nation: "FR", type: "SPG" },
  917. "francelorraine155_50": { frag: 0.79, dmg: 1235, spot: 0.10, def: 1.02, win: 48.87, tier: 7, nation: "FR", type: "SPG" },
  918. "francelorraine155_51": { frag: 0.85, dmg: 1309, spot: 0.09, def: 0.72, win: 46.67, tier: 8, nation: "FR", type: "SPG" },
  919. "francebat_chatillon155_55": { frag: 1.02, dmg: 1576, spot: 0.09, def: 0.59, win: 48.93, tier: 9, nation: "FR", type: "SPG" },
  920. "francebat_chatillon155_58": { frag: 1.02, dmg: 1682, spot: 0.08, def: 0.94, win: 50.11, tier: 10, nation: "FR", type: "SPG" },
  921.  
  922. // china
  923. // light tanks
  924. "chinach06_renault_nc31": { frag: 2.05, dmg: 274, spot: 1.51, def: 2.10, win: 60.00, tier: 1, nation: "CH", type: "LT" },
  925. "chinach07_vickers_mke_type_bt26": { frag: 1.85, dmg: 308, spot: 1.72, def: 1.83, win: 60.49, tier: 2, nation: "CH", type: "LT" },
  926. "chinach08_type97_chi_ha": { frag: 1.57, dmg: 384, spot: 1.47, def: 1.71, win: 59.80, tier: 3, nation: "CH", type: "LT" },
  927. "chinach09_m5": { frag: 1.08, dmg: 377, spot: 2.62, def: 1.15, win: 55.52, tier: 4, nation: "CH", type: "LT" },
  928. "chinach15_59_16": { frag: 0.63, dmg: 415, spot: 2.83, def: 0.81, win: 51.52, tier: 6, nation: "CH", type: "LT" },
  929. "chinach24_type64": { frag: 0.66, dmg: 483, spot: 2.75, def: 0.75, win: 52.33, tier: 6, nation: "CH", type: "LT", prem: 1 },
  930. "chinach16_wz_131": { frag: 0.73, dmg: 752, spot: 2.59, def: 0.81, win: 52.48, tier: 7, nation: "CH", type: "LT" },
  931. "chinach02_type62": { frag: 0.70, dmg: 685, spot: 2.43, def: 0.85, win: 52.18, tier: 7, nation: "CH", type: "LT", prem: 1 },
  932. "chinach17_wz131_1_wz132": { frag: 0.68, dmg: 804, spot: 2.87, def: 0.69, win: 52.11, tier: 8, nation: "CH", type: "LT" },
  933. // medium tanks
  934. "chinach21_t34": { frag: 1.18, dmg: 538, spot: 1.45, def: 1.25, win: 53.54, tier: 5, nation: "CH", type: "MT" },
  935. "chinach20_type58": { frag: 1.10, dmg: 751, spot: 1.56, def: 1.22, win: 52.87, tier: 6, nation: "CH", type: "MT" },
  936. "chinach04_t34_1": { frag: 1.03, dmg: 1015, spot: 1.58, def: 1.04, win: 53.58, tier: 7, nation: "CH", type: "MT" },
  937. "chinach05_t34_2": { frag: 0.91, dmg: 1115, spot: 1.66, def: 0.79, win: 52.30, tier: 8, nation: "CH", type: "MT" },
  938. "chinach14_t34_3": { frag: 0.91, dmg: 1115, spot: 1.66, def: 0.79, win: 52.30, tier: 8, nation: "CH", type: "MT", prem: 1 },
  939. "chinach01_type59": { frag: 0.99, dmg: 1132, spot: 1.70, def: 1.02, win: 52.88, tier: 8, nation: "CH", type: "MT", prem: 1 },
  940. "chinach01_type59_g": { frag: 0.99, dmg: 1132, spot: 1.70, def: 1.02, win: 52.88, tier: 8, nation: "CH", type: "MT", prem: 1 },
  941. "chinach18_wz120": { frag: 0.99, dmg: 1524, spot: 1.64, def: 0.77, win: 53.20, tier: 9, nation: "CH", type: "MT" },
  942. "chinach19_121": { frag: 0.95, dmg: 1704, spot: 1.39, def: 0.69, win: 51.04, tier: 10, nation: "CH", type: "MT" },
  943. // heavy tanks
  944. "chinach10_is2": { frag: 1.07, dmg: 1153, spot: 1.11, def: 0.86, win: 53.10, tier: 7, nation: "CH", type: "HT" },
  945. "chinach11_110": { frag: 0.94, dmg: 1347, spot: 1.17, def: 0.87, win: 53.26, tier: 8, nation: "CH", type: "HT" },
  946. "chinach03_111": { frag: 1.11, dmg: 1415, spot: 1.11, def: 0.91, win: 53.28, tier: 8, nation: "CH", type: "HT", prem: 1 },
  947. "chinach23_112": { frag: 1.11, dmg: 1415, spot: 1.11, def: 0.91, win: 53.28, tier: 8, nation: "CH", type: "HT", prem: 1 },
  948. "chinach12_111_1_2_3": { frag: 0.91, dmg: 1586, spot: 1.34, def: 0.54, win: 52.66, tier: 9, nation: "CH", type: "HT" },
  949. "chinach22_113": { frag: 0.88, dmg: 1748, spot: 1.23, def: 0.66, win: 49.50, tier: 10, nation: "CH", type: "HT" },
  950.  
  951. // japan
  952. // light tanks
  953. "japannc27": { frag: 2.05, dmg: 260, spot: 1.38, def: 1.76, win: 57.88, tier: 1, nation: "JP", type: "LT" },
  954. "japanha_go": { frag: 1.80, dmg: 295, spot: 2.02, def: 2.02, win: 58.04, tier: 2, nation: "JP", type: "LT" },
  955. "japanke_ni": { frag: 1.39, dmg: 314, spot: 1.95, def: 1.64, win: 57.44, tier: 3, nation: "JP", type: "LT" },
  956. "japanke_ni_b": { frag: 1.39, dmg: 314, spot: 1.95, def: 1.64, win: 57.44, tier: 3, nation: "JP", type: "LT", prem: 1 },
  957. "japanke_ho": { frag: 1.11, dmg: 359, spot: 2.39, def: 1.36, win: 56.28, tier: 4, nation: "JP", type: "LT" },
  958. // medium tanks
  959. "japanchi_ni": { frag: 1.80, dmg: 297, spot: 1.23, def: 1.67, win: 57.37, tier: 2, nation: "JP", type: "MT" },
  960. "japanchi_ha": { frag: 1.45, dmg: 334, spot: 1.26, def: 1.41, win: 56.52, tier: 3, nation: "JP", type: "MT" },
  961. "japanchi_he": { frag: 1.27, dmg: 429, spot: 1.38, def: 1.31, win: 55.34, tier: 4, nation: "JP", type: "MT" },
  962. "japanchi_nu": { frag: 1.15, dmg: 530, spot: 1.41, def: 1.19, win: 54.27, tier: 5, nation: "JP", type: "MT" },
  963. "japanchi_nu_kai": { frag: 1.15, dmg: 530, spot: 1.41, def: 1.19, win: 54.27, tier: 5, nation: "JP", type: "MT", prem: 1 },
  964. "japanchi_to": { frag: 1.08, dmg: 755, spot: 1.44, def: 1.21, win: 53.18, tier: 6, nation: "JP", type: "MT" },
  965. "japanchi_ri": { frag: 0.95, dmg: 898, spot: 1.52, def: 1.12, win: 53.05, tier: 7, nation: "JP", type: "MT" },
  966. "japansta_1": { frag: 0.95, dmg: 1186, spot: 1.41, def: 1.09, win: 53.04, tier: 8, nation: "JP", type: "MT" },
  967. "japantype_61": { frag: 0.99, dmg: 1524, spot: 1.64, def: 0.77, win: 53.20, tier: 9, nation: "JP", type: "MT" },
  968. "japanst_b1": { frag: 0.93, dmg: 1736, spot: 1.46, def: 0.82, win: 47.28, tier: 10, nation: "JP", type: "MT" },
  969.  
  970. "tankname": { frag: 0, dmg: 0, spot: 0, def: 0, win: 0, tier: 0, nation: "XX", type: "XX" }
  971. };
  972. tiersArr = []; premArr = []; tenArr = []; badgesArr = [];
  973. vehAmount = vehTierTotal = vehBattlesTotal = 0,
  974. premBattlesTotal = premWinsTotal = premBadgesTotal = 0,
  975. tenBattlesTotal = tenWinsTotal = tenBadgesTotal = 0,
  976. veh_eFrag = veh_eDmg = veh_eSpot = veh_eDef = veh_eWin = 0;
  977.  
  978. // total mastery badge and colouring tank table category rows
  979. var typeRow_class = document.getElementsByClassName('t-profile_tankstype js-table-dropdown-link');
  980. for (var i=0; i<typeRow_class.length; i++) {
  981. vehAmount += filter(typeRow_class[i].cells[0].getElementsByTagName('span')[1].innerHTML,1);
  982. typeBattles = filter(typeRow_class[i].cells[1].innerHTML,1);
  983. typeWinrate = filter(typeRow_class[i].cells[2].innerHTML,1);
  984. typeWins = typeBattles*(typeWinrate/100);
  985. // modify table
  986. typeRow_class[i].cells[2].innerHTML = filter(typeWins.toFixed(0),3)+" - "+colStat(typeWinrate, "winrate", 0, "pct");
  987. }
  988.  
  989. // average tier, colouring premium tanks and winrates in vehicle tables
  990. var vehRow_class = document.getElementsByClassName('t-profile_tankstype t-profile_tankstype__item');
  991. vehRowStats_class = document.getElementsByClassName('t-profile_slidedown tablesorter-childRow');
  992. for (var i=0; i<vehRow_class.length; i++) {
  993. // fetch info from table
  994. vehImgName = vehRow_class[i].cells[0].getElementsByTagName('img')[0].src.match(/\w+-([\w-]+).png/);
  995. vehNameExp = filter(vehRow_class[i].cells[0].getElementsByTagName('img')[0].src.match(/(\w+-[\w-]+).png/)[1],4);
  996. vehBattles = filter(vehRow_class[i].cells[1].innerHTML,1);
  997. vehWinrate = filter(vehRow_class[i].cells[2].innerHTML,1);
  998. typeWins = vehBattles*(vehWinrate/100);
  999. if (vehRow_class[i].cells[3].getElementsByTagName('img')[0]) { badgesArr.push([filter(vehRow_class[i].cells[3].getElementsByTagName('img')[0].getAttribute('data-badge_code'),1)]); }
  1000. else { badgesArr.push([0]); }
  1001. // modify table
  1002. vehRow_class[i].cells[0].getElementsByTagName('img')[0].src = "http://"+wg_host+"/static/3.13.0.2.1/encyclopedia/tankopedia/vehicle/"+vehImgName[0];
  1003. vehRow_class[i].cells[2].innerHTML = filter(typeWins.toFixed(0),3)+" - "+colStat(vehWinrate, "winrate", 0, "pct");
  1004.  
  1005. // convert vehicle tier and summarize
  1006. vehTier = statArr[vehNameExp].tier;
  1007. tiersArr.push([vehTier, vehBattles]);
  1008. vehTierTotal += vehTier*vehBattles;
  1009. vehBattlesTotal += vehBattles;
  1010.  
  1011. // summarize expected stat from every tank for WN8
  1012. veh_eFrag += statArr[vehNameExp].frag*vehBattles,
  1013. veh_eDmg += statArr[vehNameExp].dmg *vehBattles,
  1014. veh_eSpot += statArr[vehNameExp].spot*vehBattles,
  1015. veh_eDef += statArr[vehNameExp].def *vehBattles,
  1016. veh_eWin += statArr[vehNameExp].win *vehBattles;
  1017.  
  1018. // get info for premium table
  1019. if (statArr[vehNameExp].prem !== undefined) {
  1020. premBattlesTotal += filter(vehRow_class[i].cells[1].innerHTML,1);
  1021. premWinsTotal += filter(vehRow_class[i].cells[2].innerHTML.match(/[\d.,\s]+\s-/)[0],1);
  1022. vehRow_class[i].cells[0].getElementsByTagName('span')[1].className += " b-gold-name";
  1023. premArr.push([vehRow_class[i].cloneNode(true), vehRowStats_class[i].cloneNode(true)]);
  1024. if (vehRow_class[i].cells[3].innerHTML.length > 2) { premBadgesTotal += 1; }
  1025. }
  1026.  
  1027. // get info for tier 10 table
  1028. if (vehTier == 10) {
  1029. tenBattlesTotal += filter(vehRow_class[i].cells[1].innerHTML,1);
  1030. tenWinsTotal += filter(vehRow_class[i].cells[2].innerHTML.match(/[\d.,\s]+\s-/)[0],1);
  1031. tenArr.push([vehRow_class[i].cloneNode(true), vehRowStats_class[i].cloneNode(true)]);
  1032. if (vehRow_class[i].cells[3].innerHTML.length > 2) { tenBadgesTotal += 1; }
  1033. }
  1034. }
  1035.  
  1036. // vehicles per tier and battles per tier
  1037. var tiersCount = {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0};
  1038. tiersBattle = {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:0};
  1039. tiersArr.sort(function(a,b) {return a[0]-b[0];});
  1040. tiersArr.forEach(function(a) {
  1041. tiersCount[a[0]] += 1;
  1042. tiersBattle[a[0]] += a[1];
  1043. }, 0);
  1044.  
  1045. // mastery badges
  1046. var badgesCount = {0:0,1:0,2:0,3:0,4:0,5:vehAmount};
  1047. badgesArr.forEach(function(a) {
  1048. badgesCount[a[0]] += 1;
  1049. }, 0);
  1050.  
  1051. // finding statistic tables
  1052. var mb_table = document.getElementsByClassName('b-result-classes')[0].getElementsByClassName('t-dotted')[0];
  1053. or_table = document.getElementsByClassName('b-result')[0].getElementsByClassName('t-dotted')[0];
  1054. bp_table = document.getElementsByClassName('b-result')[1].getElementsByClassName('t-dotted')[0];
  1055. sm_ratio = document.getElementsByClassName('b-speedometer-ratio');
  1056.  
  1057. // fetching info and calculate draws
  1058. var battles = filter(or_table.rows[0].cells[1].innerHTML,1),
  1059. wins = filter(or_table.rows[1].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  1060. losses = filter(or_table.rows[2].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  1061. survive = filter(or_table.rows[3].cells[1].innerHTML.match(/([\d.,\s|&nbsp;]+\d+)\s/)[1],1),
  1062. exp = filter(or_table.rows[4].cells[1].innerHTML,1),
  1063. avgExp = filter(or_table.rows[5].cells[1].innerHTML,1),
  1064. maxExp = filter(or_table.rows[6].cells[1].innerHTML,1),
  1065. frags = filter(bp_table.rows[0].cells[1].innerHTML,1),
  1066. spotted = filter(bp_table.rows[1].cells[1].innerHTML,1),
  1067. hitRate = filter(bp_table.rows[2].cells[1].innerHTML,1),
  1068. dmgDlt = filter(bp_table.rows[3].cells[1].innerHTML,1),
  1069. caps = filter(bp_table.rows[5].cells[1].innerHTML,1),
  1070. defs = filter(bp_table.rows[6].cells[1].innerHTML,1),
  1071. deaths = filter(sm_ratio[0].innerHTML.match(/\/(.+)$/)[1],1),
  1072. dmgRec = filter(sm_ratio[1].innerHTML.match(/\/(.+)$/)[1],1),
  1073. draws = battles-(wins+losses);
  1074.  
  1075. // calculate averages and rates
  1076. var avgBat = battles/daysPassed,
  1077. avgWin = wins/battles,
  1078. avgWinPct = avgWin*100,
  1079. avgLoss = losses/battles,
  1080. avgLossPct = avgLoss*100,
  1081. avgDraws = draws/battles,
  1082. avgDrawsPct = avgDraws*100,
  1083. avgSurv = survive/battles,
  1084. avgSurvPct = avgSurv*100,
  1085. avgFrags = frags/battles,
  1086. avgDeaths = deaths/battles,
  1087. avgSpots = spotted/battles,
  1088. avgDmg = dmgDlt/battles,
  1089. avgDmgRec = dmgRec/battles,
  1090. avgCap = caps/battles,
  1091. avgDef = defs/battles,
  1092. avgTier = vehTierTotal/vehBattlesTotal,
  1093. winlossRate = wins/losses;
  1094.  
  1095. // colourize stats
  1096. var avgWinrate = colStat(avgWinPct, "winrate", 2, "pct", "" ),
  1097. avgLossrate = colStat(avgLossPct, "winrate", 2, "pct", avgDraws ),
  1098. avgSurvrate = colStat(avgSurvPct, "survrate", 2, "pct", "" ),
  1099. avgHitrate = colStat(hitRate, "hitrate", 0, "pct", "" ),
  1100. colBattles = colStat(battles, "battles", 0, "", "" ),
  1101. avgDrawrate = colStat(avgDrawsPct, "", 2, "pct", "" );
  1102.  
  1103. // Finalize WN8 - e = expected, w = weighted, n = normalized
  1104. // all steps are stored in variables for console insertion
  1105. var eFrag = veh_eFrag/vehBattlesTotal,
  1106. eDmg = veh_eDmg /vehBattlesTotal,
  1107. eSpot = veh_eSpot/vehBattlesTotal,
  1108. eDef = veh_eDef /vehBattlesTotal,
  1109. eWin = veh_eWin /vehBattlesTotal,
  1110. wFrag = avgFrags/eFrag,
  1111. wDmg = avgDmg/eDmg,
  1112. wSpot = avgSpots/eSpot,
  1113. wDef = avgDef/eDef,
  1114. wWin = avgWinPct/eWin,
  1115. nWin = Math.max( (wWin - 0.71) / (1 - 0.71) ,0),
  1116. nDmg = Math.max( (wDmg - 0.22) / (1 - 0.22) ,0),
  1117. nFrag = Math.max(Math.min(nDmg+0.2,(wFrag - 0.12) / (1 - 0.12)),0),
  1118. nSpot = Math.max(Math.min(nDmg+0.1,(wSpot - 0.38) / (1 - 0.38)),0),
  1119. nDef = Math.max(Math.min(nDmg+0.1,(wDef - 0.10) / (1 - 0.10)),0);
  1120.  
  1121. // calculate ratings
  1122. // WN8
  1123. var wn8 = (function() {
  1124. var frag = 210*nDmg*nFrag,
  1125. dmg = 980*nDmg,
  1126. spot = 155*nFrag*nSpot,
  1127. def = 75*nDef*nFrag,
  1128. win = 145*Math.min(1.8,nWin),
  1129. rating = frag+dmg+spot+def+win;
  1130. if (rating>=2900) {
  1131. pct = scale = 100;
  1132. }
  1133. else {
  1134. pct = (rating/2900)*100;
  1135. scale = Math.max(Math.min(rating*(rating*(rating*(rating*(rating*(0.00000000000000000007119*rating+0.0000000000000002334)-0.000000000006963)+0.00000002845)-0.00004558)+0.06565)-0.18,100),0);
  1136. }
  1137. return { frag: frag, dmg: dmg, spot: spot, def: def, win: win, rating: rating, pct: pct, scale: scale, ratingCol: colStat(rating,"wn8",2), scaleCol: colStat(scale,"scale_wn8",2) };
  1138. })();
  1139. // WN7 - Legacy Support
  1140. var wn7 = (function() {
  1141. var frag = avgFrags*(1240-1040/(Math.pow(Math.min(avgTier,6),0.164))),
  1142. dmg = avgDmg*530/(184*Math.exp(0.24*avgTier)+130),
  1143. spot = avgSpots*125*Math.min(avgTier,3)/3,
  1144. def = Math.min(2.2,avgDef)*100,
  1145. win = (((185/(0.17+Math.exp((avgWinPct-35)*-0.134)))-500)*0.45),
  1146. norm = -Math.abs((((5-Math.min(avgTier,5))*125)/(1+Math.exp(avgTier-Math.pow(battles/220,3/avgTier))*1.5))),
  1147. rating = frag+dmg+spot+def+win+norm;
  1148. if (rating>=2050) {
  1149. pct = scale = 100;
  1150. }
  1151. else {
  1152. pct = (rating/2050)*100;
  1153. scale = Math.max(Math.min(rating*(rating*(rating*(-0.0000000000083*rating+0.0000000287)-0.000024)+0.049)-2.7,100),0);
  1154. }
  1155. return { frag: frag, dmg: dmg, spot: spot, def: def, win: win, norm: norm, rating: rating, pct: pct, scale: scale, ratingCol: colStat(rating,"wn7",2), scaleCol: colStat(scale,"scale_wn7",2) };
  1156. })();
  1157. // efficiency - improved
  1158. var eff = (function() {
  1159. var frag = avgFrags*250,
  1160. dmg = avgDmg*(10/(avgTier+2))*(0.23+2*avgTier/100),
  1161. spot = avgSpots*150,
  1162. cap = (Math.log(avgCap+1)/Math.log(1.732))*150,
  1163. def = avgDef*150,
  1164. rating = frag+dmg+spot+cap+def;
  1165. if (rating>=2050) {
  1166. pct = scale = 100;
  1167. }
  1168. else {
  1169. pct = (rating/2050)*100;
  1170. scale = Math.max(Math.min(rating*(rating*(rating*(rating*(rating*(0.000000000000000045254*rating-0.00000000000033131)+0.00000000094164)-0.0000013227)+0.00095664)-0.2598)+13.23,100),0);;
  1171. }
  1172. return { frag: frag, dmg: dmg, spot: spot, cap: cap, def: def, rating: rating, pct: pct, scale: scale, ratingCol: colStat(rating,"eff",2), scaleCol: colStat(scale,"scale_eff",2) };
  1173. })();
  1174. // end formula calculations and variables
  1175.  
  1176. // check for missing battles and notify
  1177. colVehBattlesTotal = " ";
  1178. if (vehBattlesTotal != battles) {
  1179. profileName_class.innerHTML += "<div class='b-profile-error'>"+locale.p69.lang+"</div>";
  1180. colVehBattlesTotal = "<span class='t-dotted_minor'>API:</span> <font color='940000'>"+filter(vehBattlesTotal,2)+"</font>";
  1181. }
  1182.  
  1183. // personal data - modify data
  1184. var pTable_class = document.getElementsByClassName('t-personal-data')[0];
  1185. pTable_class.rows[0].cells[0].innerHTML = locale.p09.lang;
  1186. pTable_class.rows[1].cells[0].innerHTML = avgWinrate;
  1187. pTable_class.rows[0].cells[1].innerHTML = locale.p10.lang;
  1188. pTable_class.rows[1].cells[1].innerHTML = colBattles;
  1189. pT_avgxp_name = document.createElement('th');
  1190. pT_avgxp_name.className = "t-personal-data_ico t-personal-data_ico__exp";
  1191. pT_avgxp_name.innerHTML = locale.p11.lang;
  1192. pTable_class.rows[0].cells[1].parentNode.insertBefore(pT_avgxp_name, pTable_class.rows[0].cells[1].nextSibling);
  1193. pT_avgxp_value = document.createElement('td');
  1194. pT_avgxp_value.className = "t-personal-data_value";
  1195. pT_avgxp_value.innerHTML = filter(avgExp,2);
  1196. pTable_class.rows[1].cells[1].parentNode.insertBefore(pT_avgxp_value, pTable_class.rows[1].cells[1].nextSibling);
  1197. pTable_class.rows[0].cells[4].innerHTML = locale.p70.lang;
  1198. pTable_class.rows[0].cells[4].className = "t-personal-data_ico t-personal-data_ico__hitrate";
  1199. pTable_class.rows[1].cells[3].innerHTML = avgHitrate;
  1200. pTable_class.rows[0].cells[5].innerHTML = locale.p71.lang;
  1201. pT_avgtier_name = document.createElement('th');
  1202. pT_avgtier_name.className = "t-personal-data_ico t-personal-data_ico__tier";
  1203. pT_avgtier_name.innerHTML = locale.p12.lang;
  1204. pTable_class.rows[0].appendChild(pT_avgtier_name);
  1205. pT_avgtier_value = document.createElement('td');
  1206. pT_avgtier_value.className = "t-personal-data_value";
  1207. pT_avgtier_value.innerHTML = avgTier.toFixed(2);
  1208. pTable_class.rows[1].appendChild(pT_avgtier_value);
  1209.  
  1210. // speedometer - win/loss ratio
  1211. var sm_body_class = document.getElementsByClassName('b-speedometer-body')[0];
  1212. sm_winrate_div = document.createElement('div');
  1213. sm_winrate_div.className = "b-speedometer";
  1214. sm_winrate_arrow = Math.min(30*(winlossRate-1),31).toFixed(4);
  1215. sm_winrate_div.innerHTML = "<div class='b-speedometer-arrow' data-deg='"+sm_winrate_arrow+"' style='transform: rotate("+sm_winrate_arrow+"deg); -webkit-transform: rotate("+sm_winrate_arrow+"deg); -ms-transform: rotate("+sm_winrate_arrow+"deg);'></div><div class='b-speedometer-round'></div><p class='b-speedometer-title'>"+locale.p13.lang+"</p><p class='b-speedometer-weight'>"+winlossRate.toFixed(2)+"</p><p class='b-speedometer-ratio'>"+filter(wins,3)+" / "+filter(losses,3)+"</p>";
  1216. sm_body_class.appendChild(sm_winrate_div);
  1217.  
  1218. // performance ratings wrapper
  1219. var ratings_div = document.createElement('div');
  1220. ratings_div.className = "b-ratings-wrpr",
  1221. ub_class = document.getElementsByClassName('b-userblock-wrpr')[0];
  1222. ub_class.parentNode.insertBefore(ratings_div, ub_class.nextSibling);
  1223. ratingsHeader_div = document.createElement('div');
  1224. ratingsHeader_div.className = "b-head-block",
  1225. ratingsHeader_div.innerHTML += "<h3>"+locale.p14.lang+"</h3>";
  1226. ratings_div.appendChild(ratingsHeader_div);
  1227. ratingsInfo_div = document.createElement('div');
  1228. ratingsInfo_div.className = "b-ratings-info",
  1229. ratings_div.appendChild(ratingsInfo_div);
  1230. ratingsInfo_table = document.createElement('table');
  1231. ratingsInfo_table.className = "t-ratings-info",
  1232. ratingsInfo_div.appendChild(ratingsInfo_table);
  1233. // inserting performance ratings
  1234. ratingsInfo_table.innerHTML = "<thead><tr><th><a href='http://wiki.wnefficiency.net/pages/WN8' target='_blank'>"+locale.p15.lang+"</a></th><th>"+locale.p30.lang+"</th><th>"+locale.p16.lang+"</th><th><a class='rating-url_nm' target='_blank' href="+nm_url+">"+locale.p17.lang+"</a></th></tr></thead><tbody><tr><td class='js-wnscript'>"+wn8.ratingCol+"</td><td>"+wn7.ratingCol+"</td><td>"+eff.ratingCol+"</td><td class='js-noobmeter'>"+locale.p18.lang+"</td></tr></tbody>";
  1235. if (server == "xbox") {
  1236. ratingsInfo_table.rows[0].cells[3].style.display="none";
  1237. ratingsInfo_table.rows[1].cells[3].style.display="none";
  1238. }
  1239.  
  1240. // create and populate performance ratings calcs table
  1241. var rTable_div = document.createElement('div');
  1242. rTable_div.className = "ratings-table";
  1243. ratings_div.appendChild(rTable_div);
  1244. rTable_div.innerHTML = "<h3>"+locale.p19.lang+"</h3>";
  1245. rTable = document.createElement('table');
  1246. rTable.className = "t-table-ratings";
  1247. rTable_div.appendChild(rTable);
  1248. rTHead = document.createElement('thead');
  1249. rTHead.innerHTML = "<tr><th>"+locale.p20.lang+"</th><th>"+locale.p21.lang+"</th><th>"+locale.p22.lang+"</th><th>"+locale.p23.lang+"</th><th>"+locale.p24.lang+"</th><th>"+locale.p25.lang+"</th><th>"+locale.p26.lang+"</th><th>"+locale.p27.lang+"</th><th>"+locale.p28.lang+"</th></tr>";
  1250. rTable.appendChild(rTHead);
  1251. rTBody = document.createElement('tbody');
  1252. rTable.appendChild(rTBody);
  1253. ratingsArr = [
  1254. // Formula RatingPct Localized Total ScaleColored Frag Dmg Spot Cap Def Win
  1255. ["wn8", wn8.pct, locale.p29.lang, wn8.ratingCol, wn8.scaleCol, wn8.frag.toFixed(2), wn8.dmg.toFixed(2), wn8.spot.toFixed(2), "–", wn8.def.toFixed(2), wn8.win.toFixed(2) ],
  1256. ["wn7", wn7.pct, locale.p30.lang, wn7.ratingCol, wn7.scaleCol, wn7.frag.toFixed(2), wn7.dmg.toFixed(2), wn7.spot.toFixed(2), "–", wn7.def.toFixed(2), wn7.win.toFixed(2) ],
  1257. ["eff", eff.pct, locale.p31.lang, eff.ratingCol, eff.scaleCol, eff.frag.toFixed(2), eff.dmg.toFixed(2), eff.spot.toFixed(2), eff.cap.toFixed(2), eff.def.toFixed(2), "–" ]
  1258. ];
  1259. for (i=0; i<ratingsArr.length; ++i) {
  1260. rRow = document.createElement('tr');
  1261. rTBody.appendChild(rRow);
  1262. for (j=2; j<ratingsArr[i].length; ++j) {
  1263. rCell = document.createElement('td');
  1264. rCell.className = "td-center";
  1265. rCell.innerHTML = ratingsArr[i][j];
  1266. rRow.appendChild(rCell);
  1267. }
  1268. rmRow = document.createElement('tr');
  1269. rmRow.innerHTML = "<td class='td-rating-meter' colspan='9'><div class='rating-meter rating-meter_"+ratingsArr[i][0]+"'><div class='rating-meter-dail_line' style='width:"+ratingsArr[i][1]+"%;'><div class='rating-meter-marker'></div></div></div></td>";
  1270. rTBody.appendChild(rmRow);
  1271. }
  1272.  
  1273. // link to WN thread
  1274. ratings_div.innerHTML += "<div class='wnelink'><a class ='b-orange-arrow wnelink_info' target='_blank' href='http://wiki.wnefficiency.net/pages/WN_Efficiency_Wiki'>"+locale.p32.lang+"</a></div>";
  1275.  
  1276. // end performance ratings wrapper
  1277.  
  1278. // statistics wrapper
  1279. var statistics_div = document.getElementsByClassName('b-result-classes')[0].parentNode;
  1280. statistics_div.className = "b-statistics-wrpr";
  1281. ratings_div.parentNode.insertBefore(statistics_div, ratings_div.nextSibling);
  1282.  
  1283. // remove the old tables ( overall results and battle performance )
  1284. mb_table.innerHTML = "<tbody></tbody>";
  1285. or_table.innerHTML = "<tbody></tbody>";
  1286. bp_table.innerHTML = "<tbody></tbody>";
  1287.  
  1288. // populating the tables
  1289. var mb_table_cn = mb_table.firstElementChild,
  1290. or_table_cn = or_table.firstElementChild,
  1291. bp_table_cn = bp_table.firstElementChild;
  1292. insertNewTr(mb_table_cn, "<img src='/static/3.17.1.2/common/img/classes/class-ace.png'>", locale.p33.lang, badgesCount[4].toString()+"<span>("+(badgesCount[4]/badgesCount[5]*100).toFixed(0)+"%)</span>"),
  1293. insertNewTr(mb_table_cn, "<img src='/static/3.17.1.2/common/img/classes/class-1.png'>", locale.p34.lang, badgesCount[3].toString()+"<span>("+(badgesCount[3]/badgesCount[5]*100).toFixed(0)+"%)</span>"),
  1294. insertNewTr(mb_table_cn, "<img src='/static/3.17.1.2/common/img/classes/class-2.png'>", locale.p35.lang, badgesCount[2].toString()+"<span>("+(badgesCount[2]/badgesCount[5]*100).toFixed(0)+"%)</span>"),
  1295. insertNewTr(mb_table_cn, "<img src='/static/3.17.1.2/common/img/classes/class-3.png'>", locale.p36.lang, badgesCount[1].toString()+"<span>("+(badgesCount[1]/badgesCount[5]*100).toFixed(0)+"%)</span>"),
  1296. insertNewTr(mb_table_cn, "<img src='"+uri_badges_class_none+"'>", locale.p37.lang, badgesCount[0].toString()+"<span>("+(badgesCount[0]/badgesCount[5]*100).toFixed(0)+"%)</span>"),
  1297. insertNewTr(mb_table_cn, "<img src='"+uri_badges_class_total+"'>", locale.p38.lang, badgesCount[5].toString()+"<span>("+(badgesCount[5]/badgesCount[5]*100).toFixed(0)+"%)</span>"),
  1298. insertNewTr(or_table_cn, locale.p39.lang, filter(battles,2), colVehBattlesTotal ),
  1299. insertNewTr(or_table_cn, locale.p40.lang, filter(wins,2), "("+avgWinrate+")" ),
  1300. insertNewTr(or_table_cn, locale.p41.lang, filter(losses,2), "("+avgLossrate+")" ),
  1301. insertNewTr(or_table_cn, locale.p42.lang, filter(draws,2), "("+avgDrawrate+")" ),
  1302. insertNewTr(or_table_cn, locale.p43.lang, filter(survive,2), "("+avgSurvrate+")" ),
  1303. insertNewTr(or_table_cn, locale.p44.lang, "", avgBat.toFixed(2) ),
  1304. insertNewTr(or_table_cn, locale.p45.lang, "", filter(exp,2) ),
  1305. insertNewTr(or_table_cn, locale.p46.lang, "", filter(avgExp,2) ),
  1306. insertNewTr(or_table_cn, locale.p47.lang, "", filter(maxExp,2) ),
  1307. insertNewTr(bp_table_cn, locale.p48.lang, filter(frags,2), avgFrags.toFixed(2) ),
  1308. insertNewTr(bp_table_cn, locale.p49.lang, filter(deaths,2), avgDeaths.toFixed(2)),
  1309. insertNewTr(bp_table_cn, locale.p50.lang, filter(spotted,2), avgSpots.toFixed(2) ),
  1310. insertNewTr(bp_table_cn, locale.p51.lang, "", avgHitrate ),
  1311. insertNewTr(bp_table_cn, locale.p52.lang, filter(dmgDlt,2), avgDmg.toFixed(2) ),
  1312. insertNewTr(bp_table_cn, locale.p53.lang, filter(dmgRec,2), avgDmgRec.toFixed(2)),
  1313. insertNewTr(bp_table_cn, locale.p54.lang, filter(caps,2), avgCap.toFixed(2) ),
  1314. insertNewTr(bp_table_cn, locale.p55.lang, filter(defs,2), avgDef.toFixed(2) ),
  1315. insertNewTr(bp_table_cn, locale.p56.lang, "", avgTier.toFixed(2) );
  1316.  
  1317. // cake diagrams - adding tier diagram
  1318. var diagramsSector_class = document.getElementsByClassName('b-diagrams-sector')[0];
  1319. diagramsTier_div = document.createElement('div'),
  1320. diagramsTier_div.className = "b-diagram-block b-diagram-tiers js-diagram-block";
  1321. diagramsTier_div.innerHTML = "<h3>"+locale.p57.lang+"</h3><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'>"+vehAmount+"</span></div></div>";
  1322. diagramsSector_class.firstElementChild.parentNode.insertBefore(diagramsTier_div, diagramsSector_class.firstElementChild.nextSibling);
  1323. diagramsTier_table = document.createElement('table'),
  1324. diagramsTier_table.className = "t-dotted t-dotted__diagram js-diagram-mechanism-legend";
  1325. diagramsTier_table.innerHTML = "<tbody></tbody>";
  1326. diagramsTier_div.appendChild(diagramsTier_table);
  1327. diagramsTier_td = 0;
  1328. diagramsTierColorArr = ["496877","2b591f","831818","303766","814f07","1A775F","B0D23A","763D46","936C19","471952"];
  1329. for (var x in tiersCount) {
  1330. diagramsTierColor = diagramsTierColorArr[diagramsTier_td];
  1331. diagramsTier_td += 1;
  1332. if (tiersCount[x] !== 0) {
  1333. battleRate = (tiersBattle[x]/battles*100).toFixed(2);
  1334. tierRate = (tiersCount[x]/vehAmount*100).toFixed(2);
  1335. diagramsTier_table.firstElementChild.innerHTML += "<tr><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_battle'>"+filter(tiersBattle[x],3)+"</span><span class='t-dotted_diagram-percent'>(<span class=''>"+battleRate+"%</span>)</span><span class='t-diagram_tiers js-results'>"+tiersCount[x]+"</span><span class='t-dotted_diagram-percent'>(<span class='js-value'>"+tierRate+"%</span>)</span></span><span class='b-diagram-ico b-diagram-ico_tier b-diagram-ico_tier-"+diagramsTier_td+"'>"+locale.p58.lang+" "+diagramsTier_td+"</span></span></td><td class='t-dotted_diagram-last'><span class='t-dotted_diagram-bg'><span class='js-colors'>#"+diagramsTierColor+"</span></span></td></tr>";
  1336. }
  1337. }
  1338. diagramsSector_class.firstElementChild.innerHTML += "<div class='b-diagram-total'><h3>"+locale.p59.lang+" "+vehAmount+"</h3></div>";
  1339. // fix for cake diagram in chrome and opera
  1340. if (chrome) {
  1341. $('.js-diagram-block').each(function() { var items = [], values = [], labels = [], colors = [], results = [], legend, result, holder; holder = $('.b-diagram', this).attr('id'); $('.js-diagram-mechanism-legend tr', this).each(function () { items.push($(this)); values.push(parseInt($('.js-value', this).text(), 10)); labels.push($('.js-label', this).text()); colors.push($('.js-colors', this).text()); results.push($('.js-results', this).text()); legend = $('.js-diagram-mechanism-legend'); result = $('#' + holder).next().find('.js-result'); }); Raphael(holder, 630, 630).pieChart(65, 65.5, 53.5, items, values, colors, results, legend, result); });
  1342. }
  1343.  
  1344. // achievements wrapper
  1345. var medalHeader_class = document.getElementsByClassName('js-achievements-header')[0];
  1346. medalEmpty_class = document.getElementsByClassName('b-profile-item-empty')[0];
  1347. medalToggle_class = document.getElementsByClassName('js-achivements-showhide')[0];
  1348. medalShort_class = document.getElementsByClassName('js-short-achievements')[0];
  1349. medalFull_class = document.getElementsByClassName('js-full-achievements')[0];
  1350. medal_div = document.createElement('div');
  1351. medal_div.className = "b-achievements-wrpr";
  1352. medalHeader_div = document.createElement('div');
  1353. medalHeader_div.className = "b-head-block";
  1354. medalHeader_div.appendChild(medalHeader_class);
  1355. medal_div.appendChild(medalHeader_div);
  1356. if (medalEmpty_class !== undefined) { medal_div.appendChild(medalEmpty_class); }
  1357. medal_div.appendChild(medalToggle_class);
  1358. medal_div.appendChild(medalShort_class);
  1359. medal_div.appendChild(medalFull_class);
  1360. diagramsSector_class.parentNode.insertBefore(medal_div, diagramsSector_class.nextSibling);
  1361.  
  1362. // vehicles wrapper
  1363. var vehTable_class = document.getElementsByClassName('t-profile t-profile__vehicle')[0];
  1364. vehicles_div = document.createElement('div');
  1365. vehicles_div.className = "b-vehicles-wrpr";
  1366. vehicles_h3_class = vehTable_class.previousElementSibling;
  1367. vehicles_h3_class.className = "b-profile-ratings_title";
  1368. vehiclesHeader_div = document.createElement('div');
  1369. vehiclesHeader_div.className = "b-vehicles-header";
  1370. vehiclesHeader_div.appendChild(vehicles_h3_class);
  1371. vehiclesHeader_div.innerHTML += "<a class='b-orange-arrow b-profile-ratings_link' target='_blank' href='/encyclopedia/vehicles/'>"+locale.p60.lang+"</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.noobmeter.com/tankStats/"+nm_srv+"'>"+locale.p61.lang+"</a></span>";
  1372. vehicles_div.appendChild(vehiclesHeader_div);
  1373. vehTable_class.parentNode.insertBefore(vehicles_div, vehTable_class);
  1374. vehicles_div.appendChild(vehTable_class);
  1375. // add a premium tanks table to the vehicle table
  1376. if (premArr.length === 0) {
  1377. premHBody = document.createElement('tbody');
  1378. premHBody.innerHTML = "<tr class='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__prem'></span><span class='b-tankstype-text'>"+locale.p62.lang+" </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></tr>";
  1379. vehTable_class.appendChild(premHBody);
  1380. }
  1381. else {
  1382. premHBody = document.createElement('tbody');
  1383. premHBody.className = "tablesorter-no-sort";
  1384. premHBody.innerHTML = "<tr class='t-profile_tankstype t-profile_tankstype-prem js-table-dropdown-link'><td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__prem'></span><span class='b-tankstype-text'>"+locale.p62.lang+" <span class='b-armory-col'>"+premArr.length+"</span></span></td><td class='t-profile_right'>"+filter(premBattlesTotal,3)+"</td><td class='t-profile_center'>"+filter(premWinsTotal,3)+" - "+colStat((premWinsTotal/premBattlesTotal)*100, "winrate", 0, "pct")+"</td><td class='t-profile_center'>"+premBadgesTotal+"</td><td class='t-profile_dropdown-ico'><a title='Show/hide vehicles' class='t-profile_dropdown-link' href=''></a></td></tr>";
  1385. vehTable_class.appendChild(premHBody);
  1386. premTBody = document.createElement('tbody');
  1387. premTBody.className = "sortable";
  1388. premTBody.style.display="none";
  1389. vehTable_class.appendChild(premTBody);
  1390. for (i=0; i<premArr.length; ++i) {
  1391. premTBody.appendChild(premArr[i][0]);
  1392. premTBody.appendChild(premArr[i][1]);
  1393. }
  1394. }
  1395. // add a tier 10 table to the vehicle table
  1396. if (tenArr.length === 0) {
  1397. tenHBody = document.createElement('tbody');
  1398. tenHBody.innerHTML = "<tr class='t-profile_tankstype t-profile_tankstype__empty'><td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__ten'>✖</span><span class='b-tankstype-text'>"+locale.p68.lang+" </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></tr>";
  1399. vehTable_class.appendChild(tenHBody);
  1400. }
  1401. else {
  1402. tenHBody = document.createElement('tbody');
  1403. tenHBody.className = "tablesorter-no-sort";
  1404. tenHBody.innerHTML = "<tr class='t-profile_tankstype js-table-dropdown-link'><td width='388' class='t-profile_head'><span class='b-tankstype-ico b-tankstype-ico__ten'>✖</span><span class='b-tankstype-text'>"+locale.p68.lang+" <span class='b-armory-col'>"+tenArr.length+"</span></span></td><td class='t-profile_right'>"+filter(tenBattlesTotal,3)+"</td><td class='t-profile_center'>"+filter(tenWinsTotal,3)+" - "+colStat((tenWinsTotal/tenBattlesTotal)*100, "winrate", 0, "pct")+"</td><td class='t-profile_center'>"+tenBadgesTotal+"</td><td class='t-profile_dropdown-ico'><a title='Show/hide vehicles' class='t-profile_dropdown-link' href=''></a></td></tr>";
  1405. vehTable_class.appendChild(tenHBody);
  1406. tenTBody = document.createElement('tbody');
  1407. tenTBody.className = "sortable";
  1408. tenTBody.style.display="none";
  1409. vehTable_class.appendChild(tenTBody);
  1410. for (i=0; i<tenArr.length; ++i) {
  1411. tenTBody.appendChild(tenArr[i][0]);
  1412. tenTBody.appendChild(tenArr[i][1]);
  1413. }
  1414. }
  1415. // end vehicles wrapper
  1416.  
  1417. // debugging to browser console
  1418. console.info("Browser Info: ", navigator.appCodeName+" - "+navigator.appName+" - "+navigator.userAgent);
  1419. console.info("WN8 Calculation:");
  1420. console.info("Expected:\n", "eFrag: ", eFrag, "- eDmg: ", eDmg, "- eSpot: ", eSpot, "- eDef: ", eDef, "- eWin: ", eWin);
  1421. console.info("Actual:\n", "aFrag: ", avgFrags, "- aDmg: ", avgDmg, "- aSpot: ", avgSpots, "- aDef: ", avgDef, "- aWin: ", avgWinPct);
  1422. console.info("Weighted:\n", "wFrag: ", wFrag, "- wDmg: ", wDmg, "- wSpot: ", wSpot, "- wDef: ", wDef, "- wWin: ", wWin);
  1423. console.info("Normalized:\n", "nFrag: ", nFrag, "- nDmg: ", nDmg, "- nSpot: ", nSpot, "- nDef: ", nDef, "- nWin: ", nWin);
  1424. console.info("Vehicles per Tier:\n", tiersCount);
  1425. console.info("Battles per Tier:\n", tiersBattle);
  1426.  
  1427. // button for saving stats to clipboard
  1428. var ratingsClipboard = locale.p72.lang+" "+nick+": \n"+locale.p73.lang+" "+battles+" \nWR: "+avgWinPct.toFixed(2)+" \nWN8: "+wn8.rating.toFixed(2)+" \nWN7: "+wn7.rating.toFixed(2)+" \nEff: "+eff.rating.toFixed(2);
  1429. console.info(ratingsClipboard);
  1430. ratingsClipboard_div = document.createElement('div');
  1431. ratingsClipboard_div.className = "ratingsClip";
  1432. profile_div.appendChild(ratingsClipboard_div);
  1433. ratingsClipboard_div.innerHTML += "<div class='ratingsClip-holder js-noobmeter' style='display:none;'>"+ratingsClipboard+"</div><div class='ratingsClip-holder' style='display:none;'>"+locale.p64.lang+"</div><input type='button' value='"+locale.p63.lang+"' onclick='copyClipboard()'>";
  1434.  
  1435. // noobmeter
  1436. if (nm_srv !== null) {
  1437. // retrieve and process pages from noobmeter
  1438. var nmapi_url = nm_host+"/simpleplayerprapi/"+nm_srv+"/"+nick+"/"+userid+"/"+sid;
  1439. gRecProps = [
  1440. { url: nmapi_url, handler: nmHnd, onerror: nmHnd_error, nav: true }
  1441. ];
  1442.  
  1443. // moved so we fetch and process pages after stat tables have been populated
  1444. for (i=0; i<gRecProps.length; ++i) {
  1445. var doc = gRecProps[i];
  1446. if (doc.nav) gRec(doc);
  1447. }
  1448. }
  1449. }
  1450. else {
  1451. profileName_class = document.getElementsByClassName('b-profile-name')[0];
  1452. profileName_class.innerHTML += "<div style='width: 950px; top: -15px; text-align: center; position: absolute;'>"+locale.p65.lang+"</div>";
  1453. }
  1454. // end speed_table_battles
  1455. }
  1456. // end wg_accounts
  1457.  
  1458. // matches url with clan page
  1459. else if (wg_clans !== null) {
  1460. // inserting css style into head
  1461. var style = document.createElement('style');
  1462. style.className = "wotstatscript";
  1463. // style variables
  1464. box_background = "background: url('/static/3.13.0.2.1/common/css/scss/layout/img/ui-bg-top.jpg'); border: 1px solid rgba(255, 255, 255, 0.05); 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;";
  1465. input_background = "background: rgba(0, 0, 0, 0.09); border: 1px solid #000000; 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;";
  1466. style.innerHTML
  1467. // global rules
  1468. = "p {margin: 0;}"
  1469. // l-page fix page slowdown
  1470. + ".l-page {background-position: center 0 !important;}"
  1471. // l-content width
  1472. + ".l-content-indent, .reg-RUS .l-content-indent, .reg-KR .l-content-indent {padding: 0;}"
  1473. + ".l-content {margin: 0 22px 25px; width: 955px;}"
  1474. // b-clan-wrapper
  1475. + ".b-clan-wrapper {overflow: auto;}"
  1476. // b-clan-header rules
  1477. + ".b-background-clan-profile {left: -22px; top: 0;}"
  1478. + ".b-background-clan-profile, .b-background-clan-profile img {height: auto; margin-bottom: -2px; width: 1000px;}"
  1479. + ".b-clan-header {overflow: auto; width: 745px;}"
  1480. + ".b-scriptlink {"+input_background+" position: absolute; right: 0px; text-align: center; top: -1px; padding: 7px 0 6px; width: 199px;}"
  1481. + ".reg-KR .b-scriptlink {line-height: 133%;}"
  1482. + ".b-clan-profile {padding: 15px 0 0;}"
  1483. + ".b-clan-profile .b-wrap {padding: 0;}"
  1484. + ".b-clan-victory-points {margin: 5px 20px 0 0;}"
  1485. + ".b-text-info_motto {font-size: 16px; margin: 0;}"
  1486. // b-clan-desc rules
  1487. + ".b-clan-desc {float: left; margin: 15px 0 0; min-height: 370px; width: 745px;}"
  1488. // b-clan-stat rules
  1489. + ".b-clan-stat {border-top: 1px solid #010101; box-shadow: 0 0 1px 1px rgba(255, 255, 255, 0.05) inset; padding: 5px 0 5px;}"
  1490. + ".b-clan-stat li {padding: 1px 3px 1px 19px;}"
  1491. + ".b-clan-stat li.b-clan-stat-header {background: url('/static/3.13.0.2.1/common/css/scss/context-menu/img/active-point.png') repeat-y; font-weight: bold; margin: 5px 2px 0; padding: 2px 3px 2px 19px;}"
  1492. // b-clan-buttons rules
  1493. + ".l-content > form {height: 100%; position: fixed; top: 0;}"
  1494. + ".b-clan-buttons {bottom: 0; padding: 10px 0; position: absolute; text-align: center; width: 953px;}"
  1495. + ".b-clan-buttons {"+box_background+"}"
  1496. + ".b-clan-buttons .b-button {margin-bottom: 0;}"
  1497. // sidebar rules
  1498. + ".l-sidebar {margin: 0; position: absolute; right: 0; top: 25px; width: auto;}"
  1499. + ".b-context-menu {background: url("+uri_context_menu+") repeat-y; border-right: 1px solid black; margin: 0; width: 200px;}"
  1500. + ".b-context-menu_wrapper {padding: 10px 0 0;}"
  1501. + ".b-context-menu_btn {margin: 10px 0 0;}"
  1502. + ".b-sidebar-widget {margin: 0; position: absolute; right: -228px; top: -26px; width: 203px;}"
  1503. + ".b-sidebar-widget h2 { color: #FFFFFF; font: 18px/22px 'WarHeliosCondCBold','Arial Narrow',arial,sans-serif; margin: 0 0 11px; text-transform: uppercase;}"
  1504. // footer rules
  1505. + ".b-footer, .reg-RUS .b-footer {height: 285px; margin: 0 auto; position: static;}"
  1506. + ".reg-KR .b-footer {background-size: 100% 100%; height: 360px; margin-top: -2px;}"
  1507. + "";
  1508. document.head.appendChild(style);
  1509. // end style
  1510.  
  1511. // clan wrapper
  1512. var clanWrpr_div = document.createElement('div');
  1513. clanWrpr_div.className = "b-clan-wrapper",
  1514. background_class = document.getElementsByClassName('b-background-clan-profile')[0];
  1515. background_class.parentNode.insertBefore(clanWrpr_div, background_class.nextSibling);
  1516. clanHead_div = document.createElement('div');
  1517. clanHead_div.className = "b-clan-header",
  1518. clanHead_div.innerHTML += scriptlink;
  1519. infoWrapper_class = document.getElementsByClassName('b-wrap')[0];
  1520. clanHead_div.appendChild(infoWrapper_class);
  1521. clanWrpr_div.appendChild(clanHead_div);
  1522.  
  1523. // clan description
  1524. clanDesc_div = document.getElementsByClassName('b-clan-profile')[0].children[2];
  1525. clanDesc_div.className = "b-clan-desc";
  1526. clanWrpr_div.appendChild(clanDesc_div);
  1527.  
  1528. // move sidebar
  1529. var sidebar_class = document.getElementsByClassName('l-sidebar')[0];
  1530. clanWrpr_div.appendChild(sidebar_class);
  1531.  
  1532. // clan statistic links
  1533. var clan_id = document.location.href.match(/\/(\d+)/)[1];
  1534. clan_name = document.location.href.match(/\-([\w.+\-]+)/)[1];
  1535. sidebar_class = document.getElementsByClassName('b-context-menu_wrapper')[0];
  1536. clanStat_div = document.createElement('ul');
  1537. clanStat_div.className = "b-context-menu-list b-clan-stat",
  1538. wl_clan = nm_clan = mws_clan = wotcs_clan = replays = "";
  1539. if (wl_srv !== null) {
  1540. wl_clan = "<li><a target='_blank' href='http://wotlabs.net/"+wl_srv+"/clan/"+clan_name+"'>WoTLabs</a></li>";
  1541. }
  1542. if (nm_srv !== null) {
  1543. nm_clan = "<li><a target='_blank' href='"+nm_host+"/clan/"+nm_srv+"/"+clan_name+"/"+clan_id+"'>Noobmeter</a></li>";
  1544. wotcs_clan = "<li><a target='_blank' href='http://wotcs.com/clan.php?wid="+clan_id+"'>WoT-CS</a></li>";
  1545. }
  1546. if (mws_srv !== null) {
  1547. mws_clan = "<li><a target='_blank' href='http://mywotstats.com/clan/view/"+clan_id+"/"+mws_srv+"'>MyWOTStats</a></li>";
  1548. }
  1549. if (wr_srv !== null) {
  1550. replays = "<li><a target='_blank' href='http://wotreplays."+wr_srv+"/clan/"+clan_name+"'>WoTReplays</a></li>";
  1551. }
  1552. clanStat = wl_clan+nm_clan+mws_clan+wotcs_clan+replays;
  1553. clanStat_div.innerHTML = "<li class='b-clan-stat-header'>"+locale.c01.lang+"</li>"+clanStat;
  1554. sidebar_class.appendChild(clanStat_div);
  1555. }
  1556. // end wg_clans
  1557.  
  1558. // helper functions
  1559. // filter
  1560. function filter(input, type) {
  1561. var a = input.toString();
  1562. switch(type) {
  1563. case (1):
  1564. a = parseFloat(a.replace(/[^\d]/g,""));
  1565. if (isNaN(a)) {return 0;} else {return a;} // string into integer
  1566. case (2):
  1567. return (a.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1 ")); // output with spaces
  1568. case (3):
  1569. return (a.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,")); // output with commas
  1570. case (4):
  1571. return (a.replace(/[^\w]/g,"")); // remove all symbols
  1572. default:
  1573. console.log("error filtering: ", input);
  1574. return input;
  1575. }
  1576. }
  1577.  
  1578. // colouring
  1579. function colStat(input, type, dec, pct, alt) {
  1580. color = "";
  1581. output = input.toFixed(dec);
  1582. if (type == "battles") {
  1583. output = filter(input,2);
  1584. }
  1585. if (pct == "pct") {
  1586. output += "%";
  1587. }
  1588. if (alt || alt == "0") {
  1589. input = 100-(input+(alt*100));
  1590. }
  1591. if (type !== "") {
  1592. for (var i=0; i<colStatArr.length; ++i) {
  1593. if (input >= colStatArr[i][type]) {
  1594. var color = colStatArr[i].color;
  1595. break;
  1596. }
  1597. }
  1598. }
  1599. if (type == "wn8") {
  1600. background_div.style.background = "#"+color;
  1601. }
  1602. return "<font color='"+color+"'>"+output+"</font>";
  1603. }
  1604.  
  1605. // quick insertion of row into tables
  1606. function insertNewTr(table_parent, text_td, val_td, val2_td) {
  1607. var trNew = document.createElement('tr');
  1608.  
  1609. var tdNew_text = document.createElement('td');
  1610. tdNew_text.innerHTML = text_td;
  1611. tdNew_text.className = "t-dotted_minor";
  1612.  
  1613. var tdNew_value = document.createElement('td');
  1614. tdNew_value.innerHTML = val_td;
  1615. tdNew_value.className = "t-dotted_value";
  1616.  
  1617. table_parent.appendChild(trNew);
  1618. trNew.appendChild(tdNew_text);
  1619. trNew.appendChild(tdNew_value);
  1620.  
  1621. if (table_parent == mb_table_cn) {
  1622. tdNew_text.className = "t-dotted_class-ico t-dotted_minor__middle";
  1623. tdNew_value.className = "t-dotted_minor t-dotted_minor__middle";
  1624. }
  1625.  
  1626. if (val2_td !== "") {
  1627. var tdNew_value2 = document.createElement('td');
  1628. tdNew_value2.innerHTML = val2_td;
  1629. tdNew_value2.className = "t-dotted_value";
  1630. if (table_parent == mb_table_cn) {
  1631. tdNew_value2.className = "t-dotted_value t-dotted_minor__middle";
  1632. }
  1633. trNew.appendChild(tdNew_value2);
  1634. }
  1635.  
  1636. return trNew;
  1637. }
  1638. // end helper functions
  1639.  
  1640. // clan handler
  1641. function clanHnd() {
  1642. var cc_class = document.getElementById('js-clan-block-container');
  1643. cc_classCheckSeq = 0;
  1644. cc_classChecker = setInterval(function() {
  1645. cc_classCheckSeq += 1;
  1646. ci_class = document.getElementById('js-profile-clan');
  1647. ct_class = document.getElementById('js-profile-clan-table');
  1648. vp_class = document.getElementsByClassName('b-victory-points')[0];
  1649. pn_class = document.getElementsByClassName('js-profile-name')[0];
  1650. if (ci_class !== null && ct_class == null) {
  1651. // clan info
  1652. cl_class = ci_class.getElementsByTagName('a')[1];
  1653. clan_id = cl_class.getAttribute('href').match(/\/(\d+)/)[1];
  1654. clan_name = cl_class.getElementsByTagName('span')[0].innerHTML.match(/[\w.+\-]+/)[0];
  1655.  
  1656. // move victory points
  1657. if (vp_class) {
  1658. pn_class.appendChild(vp_class);
  1659. vp_class.style.display="inline-block";
  1660. }
  1661.  
  1662. // clan statistic links
  1663. wl_clan = nm_clan = wn_clan = mws_clan = wotcs_clan = replays = "";
  1664. if (wl_srv !== null) {
  1665. wl_clan = "<td><a target='_blank' href='http://wotlabs.net/"+wl_srv+"/clan/"+clan_name+"'>WoTLabs</a></td>";
  1666. }
  1667. if (nm_srv !== null) {
  1668. nm_clan = "<td><a target='_blank' href='"+nm_host+"/clan/"+nm_srv+"/"+clan_name+"/"+clan_id+"'>Noobmeter</a></td>";
  1669. wotcs_clan = "<td><a target='_blank' href='http://wotcs.com/clan.php?wid="+clan_id+"'>WoT-CS</a></td>";
  1670. }
  1671. if (wn_srv !== null) {
  1672. wn_clan = "<td><a target='_blank' href='http://wot-news.com/index.php/stat/clanstat/"+wn_srv+"/"+clan_id+"/'>Wot-news</a></td>";
  1673. }
  1674. if (mws_srv !== null) {
  1675. mws_clan = "<td><a target='_blank' href='http://mywotstats.com/clan/view/"+clan_id+"/"+mws_srv+"'>MyWOTStats</a></td>";
  1676. }
  1677. if (wr_srv !== null) {
  1678. replays = "<td class='statname'>"+locale.p67.lang+"</td><td><a target='_blank' href='http://wotreplays."+wr_srv+"/clan/"+clan_name+"'>WoTReplays</a></td>";
  1679. }
  1680. clanstat = "<tr><td class='statname'>"+locale.p66.lang+"</td>"+wl_clan+nm_clan+wn_clan+"</tr><tr><td></td>"+mws_clan+wotcs_clan+"</tr><tr>"+replays+"</tr>";
  1681. cc_class.innerHTML += "<table id='js-profile-clan-table'>"+clanstat+"</table>";
  1682. profileName_class.parentNode.insertBefore(cc_class, profileName_class.nextSibling);
  1683. clearInterval(cc_classChecker);
  1684. }
  1685. else if (cc_classCheckSeq == 5 || ct_class !== null) {
  1686. clearInterval(cc_classChecker);
  1687. }
  1688. }, 2500);
  1689. }
  1690.  
  1691. // noobmeter handler
  1692. function nmHnd(response) {
  1693. if (response.statusText == "OK") {
  1694. var nmpr = parseFloat(response.responseText);
  1695. if (isNaN(nmpr)) {
  1696. var nm_fmt = "No Rating";
  1697. }
  1698. else {
  1699. var nm_fmt = colStat(nmpr,"nm",2);
  1700. }
  1701. nmHnd_insert(nm_fmt, nmpr);
  1702. }
  1703. else {
  1704. nmHnd_error();
  1705. }
  1706. }
  1707. function nmHnd_error() {
  1708. nmHnd_insert("No Rating");
  1709. console.log("error retrieving NoobMeter data");
  1710. return null;
  1711. }
  1712. function nmHnd_insert(nm_fmt, nmpr) {
  1713. ratingsInfo_div = document.getElementsByClassName('js-noobmeter')[1];
  1714. ratingsClip_div = document.getElementsByClassName('js-noobmeter')[0];
  1715. ratingsInfo_div.innerHTML = nm_fmt;
  1716. ratingsClip_div.innerHTML += " NM: "+nmpr.toFixed(2);
  1717. }
  1718. // end noobmeter handler
  1719.  
  1720. // retrieval function
  1721. function gRec(doc) {
  1722. var resp;
  1723. GM_xmlhttpRequest({
  1724. method: "GET",
  1725. url: doc.url,
  1726. headers: {
  1727. "Accept": "text/xml"
  1728. },
  1729. onload: function(resp) {
  1730. if (resp.readyState == 4) {
  1731. if (resp.status == 200) {
  1732. doc.handler(resp);
  1733. }
  1734. }
  1735. },
  1736. onerror: function() {
  1737. doc.onerror();
  1738. }
  1739. });
  1740. }
  1741.  
  1742. // global functions inserted into head
  1743. // clipboard helper
  1744. function copyClipboard() {
  1745. text = document.getElementsByClassName('ratingsClip-holder')[0].innerHTML;
  1746. locale = document.getElementsByClassName('ratingsClip-holder')[1].innerHTML;
  1747. window.prompt(locale, text);
  1748. }
  1749. // end global functions
  1750. // end script