lol-tournament-stats
Version:
A library that aggregates stats from a League of Legends tournament using the response of the RiotAPI.
186 lines • 11.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class MatchParser {
constructor(games) {
this.games = games;
this.playerStatistics = [];
}
static aggregateStats(riotMatches) {
return MatchParser.aggregatePersonsStatistics(riotMatches.flatMap((match) => MatchParser.riotMatchToPersonStatistics(match)));
}
static aggregatePersonsStatistics(personsStatistics) {
let aggregateStats = [];
let summoners = personsStatistics
.map(stats => stats.summonerName)
.filter((value, index, self) => self.indexOf(value) === index);
for (let summoner of summoners) {
let summonerStats = personsStatistics.filter(stats => stats.summonerName === summoner);
aggregateStats.push(MatchParser.aggregatePersonStatistics(summonerStats));
}
return aggregateStats;
}
static aggregatePersonStatistics(personStatistics) {
let average = function (key) {
return (personStatistics
.map(stats => stats[key])
.reduce((a, b) => a + b) / personStatistics.length);
};
return {
gamesPlayed: personStatistics.length,
avgKda: average("kda"),
averageGameLength: average("gameDuration"),
winRatio: personStatistics.filter(stats => stats.win).length /
personStatistics.length,
summonerName: personStatistics[0].summonerName,
currentAccountId: personStatistics[0].currentAccountId,
summonerId: personStatistics[0].summonerId,
accountId: personStatistics[0].accountId,
avgNeutralMinionsKilledTeamJungle: average("neutralMinionsKilledTeamJungle"),
avgVisionScore: average("visionScore"),
avgMagicDamageDealtToChampions: average("magicDamageDealtToChampions"),
avgLargestMultiKill: average("largestMultiKill"),
avgTotalTimeCrowdControlDealt: average("totalTimeCrowdControlDealt"),
avgLongestTimeSpentLiving: average("longestTimeSpentLiving"),
avgTripleKills: average("tripleKills"),
avgKills: average("kills"),
avgTotalScoreRank: average("totalScoreRank"),
avgNeutralMinionsKilled: average("neutralMinionsKilled"),
avgDamageDealtToTurrets: average("damageDealtToTurrets"),
avgPhysicalDamageDealtToChampions: average("physicalDamageDealtToChampions"),
avgDamageDealtToObjectives: average("damageDealtToObjectives"),
avgTotalUnitsHealed: average("totalUnitsHealed"),
avgTotalDamageTaken: average("totalDamageTaken"),
avgWardsKilled: average("wardsKilled"),
avgLargestCriticalStrike: average("largestCriticalStrike"),
avgLargestKillingSpree: average("largestKillingSpree"),
avgQuadraKills: average("quadraKills"),
avgMagicDamageDealt: average("magicDamageDealt"),
avgDamageSelfMitigated: average("damageSelfMitigated"),
avgMagicalDamageTaken: average("magicalDamageTaken"),
avgTrueDamageTaken: average("trueDamageTaken"),
avgAssists: average("assists"),
avgGoldSpent: average("goldSpent"),
avgTrueDamageDealt: average("trueDamageDealt"),
avgParticipantId: average("participantId"),
avgPhysicalDamageDealt: average("physicalDamageDealt"),
avgSightWardsBoughtInGame: average("sightWardsBoughtInGame"),
avgTotalDamageDealtToChampions: average("totalDamageDealtToChampions"),
avgPhysicalDamageTaken: average("physicalDamageTaken"),
avgTotalPlayerScore: average("totalPlayerScore"),
avgObjectivePlayerScore: average("objectivePlayerScore"),
avgTotalDamageDealt: average("totalDamageDealt"),
avgNeutralMinionsKilledEnemyJungle: average("neutralMinionsKilledEnemyJungle"),
avgDeaths: average("deaths"),
avgWardsPlaced: average("wardsPlaced"),
avgPerkPrimaryStyle: average("perkPrimaryStyle"),
avgPerkSubStyle: average("perkSubStyle"),
avgTurretKills: average("turretKills"),
avgTrueDamageDealtToChampions: average("trueDamageDealtToChampions"),
avgGoldEarned: average("goldEarned"),
avgKillingSprees: average("killingSprees"),
avgUnrealKills: average("unrealKills"),
avgChampLevel: average("champLevel"),
avgDoubleKills: average("doubleKills"),
avgInhibitorKills: average("inhibitorKills"),
avgCombatPlayerScore: average("combatPlayerScore"),
avgVisionWardsBoughtInGame: average("visionWardsBoughtInGame"),
avgPentaKills: average("pentaKills"),
avgTotalHeal: average("totalHeal"),
avgTotalMinionsKilled: average("totalMinionsKilled"),
avgTimeCCingOthers: average("timeCCingOthers")
};
}
static riotMatchToPersonStatistics(match) {
let personsStatistics = [];
for (let player of match.participantIdentities) {
let participant = match.participants.find(participantItem => {
return participantItem.participantId === player.participantId;
});
if (!participant) {
throw new Error(`Somehow, the player with participant id of ${player.participantId} in participant identities list is not in the participants list`);
}
let personStatistics = {
gameDuration: match.gameDuration,
summonerName: player.player.summonerName,
currentAccountId: player.player.currentAccountId,
summonerId: player.player.summonerId,
accountId: player.player.accountId,
csDiffPerMinDeltas: participant.timeline.csDiffPerMinDeltas,
goldPerMinDeltas: participant.timeline.goldPerMinDeltas,
xpDiffPerMinDeltas: participant.timeline.xpDiffPerMinDeltas,
creepsPerMinDeltas: participant.timeline.creepsPerMinDeltas,
xpPerMinDeltas: participant.timeline.xpPerMinDeltas,
damageTakenDiffPerMinDeltas: participant.timeline.damageTakenDiffPerMinDeltas,
damageTakenPerMinDeltas: participant.timeline.damageTakenPerMinDeltas,
kda: 0,
neutralMinionsKilledTeamJungle: participant.stats.neutralMinionsKilledTeamJungle,
visionScore: participant.stats.visionScore,
magicDamageDealtToChampions: participant.stats.magicDamageDealtToChampions,
largestMultiKill: participant.stats.largestMultiKill,
totalTimeCrowdControlDealt: participant.stats.totalTimeCrowdControlDealt,
longestTimeSpentLiving: participant.stats.longestTimeSpentLiving,
tripleKills: participant.stats.tripleKills,
kills: participant.stats.kills,
totalScoreRank: participant.stats.totalScoreRank,
neutralMinionsKilled: participant.stats.neutralMinionsKilled,
damageDealtToTurrets: participant.stats.damageDealtToTurrets,
physicalDamageDealtToChampions: participant.stats.physicalDamageDealtToChampions,
damageDealtToObjectives: participant.stats.damageDealtToObjectives,
totalUnitsHealed: participant.stats.totalUnitsHealed,
totalDamageTaken: participant.stats.totalDamageTaken,
wardsKilled: participant.stats.wardsKilled,
largestCriticalStrike: participant.stats.largestCriticalStrike,
largestKillingSpree: participant.stats.largestKillingSpree,
quadraKills: participant.stats.quadraKills,
magicDamageDealt: participant.stats.magicDamageDealt,
firstBloodAssist: participant.stats.firstBloodAssist,
damageSelfMitigated: participant.stats.damageSelfMitigated,
magicalDamageTaken: participant.stats.magicalDamageTaken,
firstInhibitorKill: participant.stats.firstInhibitorKill,
trueDamageTaken: participant.stats.trueDamageTaken,
assists: participant.stats.assists,
goldSpent: participant.stats.goldSpent,
trueDamageDealt: participant.stats.trueDamageDealt,
participantId: participant.stats.participantId,
physicalDamageDealt: participant.stats.physicalDamageDealt,
sightWardsBoughtInGame: participant.stats.sightWardsBoughtInGame,
totalDamageDealtToChampions: participant.stats.totalDamageDealtToChampions,
physicalDamageTaken: participant.stats.physicalDamageTaken,
totalPlayerScore: participant.stats.totalPlayerScore,
win: participant.stats.win,
objectivePlayerScore: participant.stats.objectivePlayerScore,
totalDamageDealt: participant.stats.totalDamageDealt,
neutralMinionsKilledEnemyJungle: participant.stats.neutralMinionsKilledEnemyJungle,
deaths: participant.stats.deaths,
wardsPlaced: participant.stats.wardsPlaced,
perkPrimaryStyle: participant.stats.perkPrimaryStyle,
perkSubStyle: participant.stats.perkSubStyle,
turretKills: participant.stats.turretKills,
firstBloodKill: participant.stats.firstBloodKill,
trueDamageDealtToChampions: participant.stats.trueDamageDealtToChampions,
goldEarned: participant.stats.goldEarned,
killingSprees: participant.stats.killingSprees,
unrealKills: participant.stats.unrealKills,
firstTowerAssist: participant.stats.firstTowerAssist,
firstTowerKill: participant.stats.firstTowerKill,
champLevel: participant.stats.champLevel,
doubleKills: participant.stats.doubleKills,
inhibitorKills: participant.stats.inhibitorKills,
firstInhibitorAssist: participant.stats.firstInhibitorAssist,
combatPlayerScore: participant.stats.combatPlayerScore,
visionWardsBoughtInGame: participant.stats.visionWardsBoughtInGame,
pentaKills: participant.stats.pentaKills,
totalHeal: participant.stats.totalHeal,
totalMinionsKilled: participant.stats.totalMinionsKilled,
timeCCingOthers: participant.stats.timeCCingOthers
};
personStatistics.kda =
(personStatistics.kills + personStatistics.assists) /
personStatistics.deaths;
personsStatistics.push(personStatistics);
}
return personsStatistics;
}
}
exports.MatchParser = MatchParser;
//# sourceMappingURL=match-parser.js.map