NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name CoachLaBrute // @description Ajoute des métriques pour suivre la progression de ses brutes // @id fr.tzi.CoachLaBrute // @namespace https://tzi.fr // @include http://*.labrute.fr/cellule // @include http://*.labrute.fr/arene // @grant none // @coypright 2008-2019, Thomas ZILLIOX (https://tzi.fr) // @license MIT // @oujs:author tzi // @version 2019.10.31 // ==/UserScript== (function () { var settings = {}; var execute = function (settings) { var pointsByLevelMap = { 1: 4, 2: 8, 3: 12, 4: 16, 5: 21, 6: 26, 7: 32, 8: 37, 9: 43, 10: 49, 11: 55, 12: 61, 13: 68, 14: 75, 15: 81, 16: 88, 17: 95, 18: 102, 19: 109, 20: 117, 21: 124, 22: 132, 23: 139, 24: 147, 25: 155, 26: 163, 27: 171, 28: 179, 29: 187, 30: 196, 31: 204, 32: 212, 33: 221, 34: 230, 35: 238, 36: 247, 37: 256, 38: 265, 39: 273, 40: 283, 41: 292, 42: 301, 43: 310, 44: 320, 45: 329, 46: 338, 47: 348, 48: 358, 49: 367, 50: 376, 51: 387, 52: 396, 53: 406, 54: 416, 55: 426, 56: 436, 57: 446 }; var page = document.location.href.replace(/.*\//, ''); if (page == 'cellule') { customCellulePage(); } else if (page == 'arene') { customArenePage(); } // Append Style function appendStyle(element, styleMap) { var style = ''; var oldStyle = element.getAttribute('style'); if (oldStyle) { style = oldStyle.trim() + ' '; } for (var property in styleMap) { if (styleMap.hasOwnProperty(property)) { style += property + ': ' + styleMap[property] + '; '; } } element.setAttribute('style', style); } // Cellule page function customCellulePage() { // Add page on classement link var classement = document.querySelector('.headStats + .headStats > .titleLong + .value a'); var page = Math.ceil(classement.innerHTML / 15); var href = classement.getAttribute('href')+';page='+page; var classementLinks = document.querySelectorAll('.headStats + .headStats a'); for (var i=0; i<classementLinks.length; i++) { classementLinks[i].setAttribute('href', href); } // Check current level is accessible var levelLabelElement = document.querySelector('.level > span'); if (!levelLabelElement) { return false; } var LevelRegexp = /Niveau ([0-9]*)/i; if (!LevelRegexp.test(levelLabelElement.innerHTML)) { return false; } // Query the main elements var rankingLabelElement = document.querySelector('.lvlTxt'); var rankingContainerElement = document.querySelector('.levelName'); var levelBarElement = document.querySelector('.levelBar'); var levelBarContainer = document.querySelector('.levelBarContainer'); var logsContainer = document.querySelector('.logs'); // Minimize the ranking var isPadawan = !rankingLabelElement; appendStyle(rankingContainerElement, { 'width': 'auto' }); if (!isPadawan) { rankingLabelElement.innerHTML = ''; appendStyle(levelLabelElement, { 'line-height': '40px' }); } // Enlarge the level bar appendStyle(levelBarContainer, { 'width': 'auto', 'height': '15px', 'clear': 'both', 'position': 'relative' }); appendStyle(levelBarElement, { 'height': '100%', 'background-color': '#ff9900' }); // Calculate the level metrics var currentLevel = LevelRegexp.exec(levelLabelElement.innerHTML) [1]; if (!pointsByLevelMap[currentLevel]) { alert('Desole, mais nous ne connaissons pas encore la taille de votre niveau (' + currentLevel + ').'); return false; } var currentLevelSize = pointsByLevelMap[currentLevel]; var currentlevelProgress = Math.round(parseFloat(levelBarElement.style.width) / 100 * currentLevelSize); // Display the level metrics levelLabelElement.innerHTML += ' - ' + (getTotalPointByLevel(currentLevel) + currentlevelProgress) + 'pts'; var levelMetricsElement = document.createElement('div'); appendStyle(levelMetricsElement, { 'position': 'absolute', 'top': 0, 'bottom': 0, 'left': 0, 'right': 0, 'text-align': 'center', 'color': 'white', 'font-weight': 'bold', 'font-size': '15px', 'line-height': '15px' }); levelMetricsElement.innerHTML = currentlevelProgress + ' / ' + currentLevelSize; levelBarContainer.appendChild(levelMetricsElement); // Total Points of a Level function getTotalPointByLevel(level) { var totalPointByLevel = 0; for (var i = 1; i < level; i++) { totalPointByLevel += pointsByLevelMap[i]; } return totalPointByLevel; } // Log links Array.from(logsContainer.querySelectorAll('.log')).forEach(function(log) { var linkElement = log.querySelector('a'); // For level up log if (!linkElement) { return false; } var label = linkElement.innerText; var playerName; if (log.classList.contains('log-lose')) { playerName = label.split(' ').slice(0, -4).join(' '); } else if (label.indexOf('Ta brute a survécu à') !== -1) { playerName = label.split(' ').slice(5).join(' ').slice(0, -1); } else { playerName = label.split(' ').slice(4).join(' ').slice(0, -1); } linkElement.innerHTML = playerName; appendStyle(linkElement, { 'display': 'block', 'margin-bottom': '3px', 'white-space': 'nowrap', 'overflow': 'hidden', 'text-overflow': 'ellipsis' }); var detailsElement = log.querySelector('.ldetails'); if (detailsElement) { var points = detailsElement.innerText.split(' ').slice(0, 1).join(); linkElement.innerHTML += ' (' + points + 'pts)'; detailsElement.parentNode.removeChild(detailsElement); } var playerId = playerName.replace(/ /g, '-'); var newFight = document.createElement('a'); newFight.href = '/vs/' + playerId; newFight.innerHTML = 'Recombattre'; newFight.style.fontWeight = 'normal'; linkElement.parentNode.appendChild(newFight); var separator = document.createElement('span'); separator.innerHTML = ' | '; separator.style.fontWeight = 'normal'; linkElement.parentNode.appendChild(separator); var cellule = document.createElement('a'); cellule.href = 'http://' + playerId + '.labrute.fr/cellule'; cellule.innerHTML = 'Cellule'; cellule.style.fontWeight = 'normal'; linkElement.parentNode.appendChild(cellule); }); } // Arene page function customArenePage() { var vs; var subdivs; var divs = document.getElementsByTagName('div'); for (var i = 0; i < divs.length; i++) { if (divs[i].className == 'miniCaracs') { vs = divs[i].getAttribute('onclick').replace(/.*\//, ''); divs[i].removeAttribute('onclick'); divs[i].removeAttribute('onmouseover'); divs[i].removeAttribute('onmouseout'); vs = vs.substr(0, vs.length - 2); subdivs = divs[i].getElementsByTagName('div'); for (var j = 0; j < subdivs.length; j++) { if (subdivs[j].className == 'miniLvlTxt') { subdivs[j].innerHTML = ''; subdivs[j].innerHTML = '<a href=\'/vs/' + vs + '\'>Combat</a> | <a href=\'http://' + vs + '.labrute.fr/cellule\'>Cellule</a>'; } } } } } }; var script = document.createElement('script'); script.innerHTML = '(' + execute.toString() + ')( ' + JSON.stringify(settings) + ');'; document.head.appendChild(script); }) ();