Пример #1
0
        .then(([winnerStats, loserStats]) => {
          // If player isn't on the leaderboard yet, then ELO defaults to 1000.
          winnerStats = winnerStats || { wins: 0, losses: 0, elo: 1000, streak: 0 }
          loserStats = loserStats || { wins: 0, losses: 0, elo: 1000, streak: 0 }

          winner.beforeStats = winnerStats
          winner.other.beforeStats = loserStats

          const winnerElo = elo.ifWins(winnerStats.elo, loserStats.elo)
          const loserElo = elo.ifLoses(loserStats.elo, winnerStats.elo)
          const winnerStreak = winnerStats.streak <= 0 ? 1 : winnerStats.streak + 1
          const loserStreak = loserStats.streak >= 0 ? -1 : loserStats.streak - 1

          return db.batch([
            db.saveMatch(match.id, winner, winner.other),
            db.updateLeaderboard(winner, winnerStats.wins + 1, winnerStats.losses, winnerElo, winnerStreak),
            db.updateLeaderboard(winner.other, loserStats.wins, loserStats.losses + 1, loserElo, loserStreak)
          ])
        })
Пример #2
0
    history.forEach(match => {
      const winnerId = match.winner_id
      const loserId = match.loser_id

      const winner = leaderboard[winnerId] = leaderboard[winnerId] || Object.assign({}, entry, { player_id: winnerId })
      const loser = leaderboard[loserId] = leaderboard[loserId] || Object.assign({}, entry, { player_id: loserId })

      const winnerElo = winner.elo
      const loserElo = loser.elo

      winner.elo = elo.ifWins(winnerElo, loserElo)
      loser.elo = elo.ifLoses(loserElo, winnerElo)

      winner.wins += 1
      loser.losses += 1

      winner.streak = winner.streak <= 0 ? 1 : winner.streak + 1
      loser.streak = loser.streak >= 0 ? -1 : loser.streak - 1
    })