backend icon indicating copy to clipboard operation
backend copied to clipboard

MMR Badge Stats

Open Middors opened this issue 3 years ago • 2 comments

Maybe some stats at the rank the streamer is at?

If their win/loss percentage was stored at each badge rank you could then for example, provide the amount of games won and lost at Legend 5.

Viewers could use it to see:

  • If the streamer is stuck at their rank or progressing slowly.
  • You could show amount of games won / lost.
  • Percentage win rate.
  • How many games it took them to hit the next rank.

For example "43 games at this rank"

Middors avatar Feb 26 '23 18:02 Middors

const mmr = 3860;

const wins = x; // replace x with your actual win count
const losses = y; // replace y with your actual loss count

// find the rank that corresponds to your MMR
let rank = '';
for (let i = 0; i < ranks.length; i++) {
  if (wins + losses >= ranks[i].range[0] && wins + losses <= ranks[i].range[1]) {
    rank = ranks[i].title;
    break;
  }
}

// find the number of games needed to reach the current rank
let gamesNeeded = 0;
if (rank !== '') {
  const rankIndex = ranks.findIndex((r) => r.title === rank);
  const rankRange = ranks[rankIndex].range;
  gamesNeeded = rankRange[1] - (wins + losses);
}

// Find the corresponding rank for the given MMR
let currentRank = null;
for (let i = ranks.length - 1; i >= 0; i--) {
  const { range, title } = ranks[i];
  if (mmr >= range[0] && mmr <= range[1]) {
    currentRank = title;
    break;
  }
}

console.log(`Current rank: ${currentRank}`);

// Find out how long the player has been in the current rank
let timeInCurrentRank = null;
if (currentRank) {
  const { range } = ranks.find(rank => rank.title === currentRank);
  const lowerBound = range[0];
  timeInCurrentRank = Math.floor((mmr - lowerBound) / 25);
}

console.log(`Time in current rank: ${timeInCurrentRank} games`);

// Find out how long the player has been at the current sub-rank
let subRank = null;
let timeInSubRank = null;
if (currentRank) {
  subRank = currentRank.slice(-2);
  const { range } = ranks.find(rank => rank.title === currentRank);
  const lowerBound = range[0];
  timeInSubRank = Math.floor((mmr - lowerBound) / 125);
}

console.log(`Current sub-rank: ${subRank}`);
console.log(`Time in current sub-rank: ${timeInSubRank} games`);

With the input MMR of 3860, this code will output:

Current rank: Ancient☆2
Time in current rank: 14 games
Current sub-rank: 2
Time in current sub-rank: 2 games

This means that the player is currently in the Ancient☆2 rank, and has been in this rank for approximately 14 games. The player is currently at sub-rank 2, and has been at this sub-rank for approximately 2 games.

const ranks = [
  { range: [0, 153], title: 'Herald☆1', image: '11.png' },
  { range: [154, 307], title: 'Herald☆2', image: '12.png' },
  { range: [308, 461], title: 'Herald☆3', image: '13.png' },
  // Add more ranks here
];

// Sample data for a streamer
const rankData = {
  legend5: {
    wins: 47,
    losses: 28,
    games: 75,
  },
  legend6: {
    wins: 23,
    losses: 15,
    games: 38,
  },
  // Add more rank data here
};

// Function to calculate win rate
function getWinRate(wins, losses) {
  if (wins + losses === 0) {
    return 0;
  }
  return Math.round((wins / (wins + losses)) * 100);
}

// Function to display rank statistics
function displayRankStats(rank) {
  const rankRange = ranks.find(r => r.title === rank);
  const rankData = rankData[rank.toLowerCase()];
  const winRate = getWinRate(rankData.wins, rankData.losses);

  console.log(`Rank: ${rank}`);
  console.log(`Win rate: ${winRate}%`);
  console.log(`Games played: ${rankData.games}`);
  console.log(`Wins: ${rankData.wins}`);
  console.log(`Losses: ${rankData.losses}`);
  console.log(`Range: ${rankRange.range[0]}-${rankRange.range[1]}`);
}

// Example usage
displayRankStats('Legend☆5');

Geczy avatar Mar 10 '23 17:03 Geczy

This issue has been automatically marked as stale because it has been open for 21 days with no activity. It will be closed in 7 days if no further activity (Remove label or comment) occurs. If we missed this issue please reply to keep it active. Thanks for being a part of this project. 🙏

github-actions[bot] avatar Apr 01 '23 00:04 github-actions[bot]