Skip to content

Instantly share code, notes, and snippets.

@NeKzor
Last active May 14, 2019 12:34
Show Gist options
  • Save NeKzor/d1e6fb5399e0ae25c5b6849684d878ff to your computer and use it in GitHub Desktop.
Save NeKzor/d1e6fb5399e0ae25c5b6849684d878ff to your computer and use it in GitHub Desktop.
/*
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