Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MMR Badge Stats #253

Open
Middors opened this issue Feb 26, 2023 · 2 comments
Open

MMR Badge Stats #253

Middors opened this issue Feb 26, 2023 · 2 comments
Labels
enhancement New feature or request

Comments

@Middors
Copy link

Middors commented Feb 26, 2023

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 Middors added this to Roadmap Feb 26, 2023
@Middors Middors converted this from a draft issue Feb 26, 2023
@Geczy
Copy link
Member

Geczy commented Mar 10, 2023

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');

@github-actions
Copy link
Contributor

github-actions bot commented Apr 1, 2023

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 github-actions bot added the Stale label Apr 1, 2023
@Geczy Geczy removed the Stale label Apr 4, 2023
@Geczy Geczy added the enhancement New feature or request label Aug 14, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: 🏹 Coming up
Development

No branches or pull requests

2 participants