Last active
May 14, 2019 12:34
-
-
Save NeKzor/d1e6fb5399e0ae25c5b6849684d878ff to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Rex - Portal Carousel - 24.73 | |
2018-10-09 | |
-0.20 former WR by Rex (lasted 3 days) | |
Demo File | |
https://board.iverb.me/getDemo?id=87466 | |
Player | |
https://board.iverb.me/profile/76561198095730281 | |
Leaderboard | |
https://board.iverb.me/chamber/62758 | |
*/ | |
{ | |
let index = 0; // First row (usually latest wr) | |
let partnerIndex = 0; // Partner index (in case of wr tie in coop) | |
let entries = document.querySelectorAll('.entry'); | |
let curWr = entries[index]; | |
let curDate = curWr.children[0].getAttribute('date'); | |
let curScore = curWr.children[6].innerText; | |
let curPlayer = curWr.children[2].innerText; | |
let isSinglePlayer = curWr.children[4].innerText.startsWith('The'); // The Fall, The Itch, The... | |
let preWrs = []; | |
let partners = []; | |
let isTied = false; | |
let partnerName = ''; | |
let partnerLink = ''; | |
let partnerDemoLink = ''; | |
let partnerComment = ''; | |
{ | |
let ban = curWr.children[12].firstElementChild; | |
let isLoggedInAsAdmin = ban && ban.className != 'banIndicator'; | |
let preWr = undefined; | |
for (let entry of [...entries].slice(index + 1)) { | |
// Ignore banned entries | |
let banStatus = entry.children[12]; | |
if (isLoggedInAsAdmin) { | |
if (banStatus.firstElementChild.getAttribute('style') == '') { | |
continue; | |
} | |
} else if (banStatus.children.length != 0) { | |
continue; | |
} | |
// Take same score as partner entry | |
if (!isSinglePlayer && entry.children[6].innerText == curScore) { | |
partners.push(entry); | |
continue; | |
} | |
// Found former/tied wr | |
if (preWr == undefined) { | |
preWr = entry; | |
isTied = entry.children[6].innerText == curScore; | |
} else if (entry.children[6].innerText != preWr.children[6].innerText) { | |
break; | |
} | |
preWrs.push(entry); | |
} | |
} | |
preWrs = preWrs.reverse(); | |
if (!isSinglePlayer) { | |
let partner = partners[partnerIndex]; | |
partnerName = partner.children[2].innerText; | |
partnerLink = partner.children[2].firstElementChild.getAttribute('href'); | |
partnerDemoLink = (partner.children[8].firstElementChild) | |
? partner.children[8].firstElementChild.getAttribute('href') | |
: ''; | |
partnerComment = (partner.children[10].firstElementChild) | |
? partner.children[10].firstElementChild.getAttribute('data-content') | |
: ''; | |
if (partners.length >= 2) { | |
preWrs = partners; | |
isTied = true; | |
} | |
} | |
let preWr = preWrs[0]; | |
let preDate = preWr.children[0].getAttribute('date'); | |
let preScore = preWr.children[6].innerText; | |
let prePlayer = preWr.children[2].innerText; | |
let playerLink = curWr.children[2].firstElementChild.getAttribute('href'); | |
let mapName = curWr.children[3].innerText; | |
let mapLink = curWr.children[3].firstElementChild.getAttribute('href'); | |
let demoLink = (curWr.children[8].firstElementChild) | |
? curWr.children[8].firstElementChild.getAttribute('href') | |
: ''; | |
let playerComment = (curWr.children[10].firstElementChild) | |
? curWr.children[10].firstElementChild.getAttribute('data-content') | |
: ''; | |
// 13.37 -> 1337 | |
let stringToNumber = (time) => { | |
let temp = time.split(':'); | |
let result = 0; | |
if (temp.length != 1) { | |
result += parseInt(temp[0]) * 60 * 100; // min | |
time = temp[1]; | |
} | |
temp = time.split('.'); | |
result += parseInt(temp[0]) * 100; // sec | |
result += parseInt(temp[1]); // csec | |
return result; | |
}; | |
// 6969 -> 1:09.69 | |
let numberToString = (time) => { | |
let csec = time % 100; | |
let tsec = Math.floor(time / 100); | |
let sec = tsec % 60; | |
let min = Math.floor(tsec / 60); | |
return (min > 0) | |
? `${min}:${((sec < 10) ? `0${sec}` : `${sec}`)}.${((csec < 10) ? `0${csec}` : `${csec}`)}` | |
: `${sec}.${((csec < 10) ? `0${csec}` : `${csec}`)}`; | |
}; | |
// World record delta | |
let getDifference = () => { | |
let diff = Math.abs(stringToNumber(preScore) - stringToNumber(curScore)); | |
return numberToString(diff); | |
}; | |
// World record duration | |
let getDuration = () => { | |
let duration = new Date(curDate).getTime() - new Date(preDate).getTime(); | |
let days = Math.floor(duration / (1000 * 60 * 60 * 24)); | |
if (days != 0) return `${days} day${(days == 1) ? '' : 's'}`; | |
let hours = Math.floor(duration / (1000 * 60 * 60)); | |
if (hours != 0) return `${hours} hour${(hours == 1) ? '' : 's'}`; | |
let minutes = Math.floor(duration / (1000 * 60)); | |
if (minutes != 0) return `${minutes} minute${(minutes == 1) ? '' : 's'}`; | |
let seconds = Math.floor(duration / 1000); | |
if (seconds != 0) return `${seconds} second${(seconds == 1) ? '' : 's'}`; | |
return 'less than a second'; | |
}; | |
// Formatting | |
let getFormerOrTiedWorldRecord = () => { | |
let who = (isSinglePlayer) | |
? prePlayer | |
: `${preWrs[0].children[2].innerText} + ${preWrs[1].children[2].innerText}`; | |
return (!isTied) | |
? `-${getDifference()} former WR by ${who} (lasted ${getDuration()}).` | |
: `Tied WR with ${who}.`; | |
}; | |
let getComment = () => { | |
let result = '\n'; | |
if (playerComment != '') result += `\n${curPlayer}: "${playerComment}"`; | |
if (partnerComment != '') result += `\n${partnerName}: "${partnerComment}"`; | |
if (result == '\n') result = ''; | |
return result; | |
}; | |
let getDemo = () => { | |
let result = ''; | |
if (demoLink != '') result += `\nhttps://board.iverb.me${demoLink}`; | |
if (partnerDemoLink != '') result += `\nhttps://board.iverb.me${partnerDemoLink}`; | |
return result; | |
}; | |
let getPlayer = () => { | |
let result = ''; | |
if (playerLink != '') result += `\nhttps://board.iverb.me${playerLink}`; | |
if (partnerLink != '') result += `\nhttps://board.iverb.me${partnerLink}`; | |
return result; | |
}; | |
// Title + description | |
console.log(`${curPlayer}${(!isSinglePlayer) ? ` + ${partnerName}` : ''} - ${mapName} - ${curScore} | |
${curDate.split(' ')[0]} | |
${getFormerOrTiedWorldRecord()}${getComment()} | |
Demo File${(isSinglePlayer) ? '' : 's'}${getDemo()} | |
Player${(isSinglePlayer) ? '' : 's'}${getPlayer()} | |
Leaderboard | |
https://board.iverb.me${mapLink}`); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment