mirror of
https://github.com/vkaelin/LeagueStats.git
synced 2026-03-25 12:57:28 +00:00
132 lines
3.9 KiB
JavaScript
132 lines
3.9 KiB
JavaScript
'use strict'
|
|
|
|
const MatchTransformer = use('App/Transformers/MatchTransformer')
|
|
|
|
/**
|
|
* BasicMatchTransformer class
|
|
*
|
|
* @class BasicMatchTransformer
|
|
*/
|
|
class BasicMatchTransformer extends MatchTransformer {
|
|
/**
|
|
* This method is used to transform the data.
|
|
*/
|
|
transform(match, { account, champions, runes, MatchHelper }) {
|
|
const participantId = match.participantIdentities.find((p) => p.player.currentAccountId === account.accountId).participantId
|
|
const player = match.participants[participantId - 1]
|
|
const teamId = player.teamId
|
|
|
|
let win = match.teams.find((t) => t.teamId === teamId).win
|
|
|
|
// Match less than 5min
|
|
if (match.gameDuration < 300) {
|
|
win = 'Remake'
|
|
}
|
|
|
|
const map = match.mapId
|
|
const mode = match.queueId
|
|
|
|
const champion = (({ id, name }) => ({ id, name }))(Object.entries(champions).find(([, champion]) => Number(champion.key) === player.championId)[1])
|
|
const role = MatchHelper.getRoleName(player.timeline)
|
|
|
|
const gameCreation = match.gameCreation
|
|
const time = MatchHelper.secToTime(match.gameDuration)
|
|
|
|
const kills = player.stats.kills
|
|
const deaths = player.stats.deaths
|
|
const assists = player.stats.assists
|
|
let kda
|
|
if (kills + assists !== 0 && deaths === 0) {
|
|
kda = '∞'
|
|
} else {
|
|
kda = +(deaths === 0 ? 0 : ((kills + assists) / deaths)).toFixed(2)
|
|
}
|
|
const level = player.stats.champLevel
|
|
const damage = +(player.stats.totalDamageDealtToChampions / 1000).toFixed(1) + 'k'
|
|
|
|
const totalKills = match.participants.reduce((prev, current) => {
|
|
if (current.teamId !== teamId) {
|
|
return prev
|
|
}
|
|
return prev + current.stats.kills
|
|
}, 0)
|
|
|
|
const kp = totalKills === 0 ? '0%' : +((kills + assists) * 100 / totalKills).toFixed(1) + '%'
|
|
|
|
let primaryRune = null
|
|
let secondaryRune = null
|
|
if (player.stats.perkPrimaryStyle) {
|
|
const primaryRuneCategory = runes.find(r => r.id === player.stats.perkPrimaryStyle)
|
|
for (const subCat of primaryRuneCategory.slots) {
|
|
primaryRune = subCat.runes.find(r => r.id === player.stats.perk0)
|
|
if (primaryRune) {
|
|
break
|
|
}
|
|
}
|
|
primaryRune = `https://ddragon.leagueoflegends.com/cdn/img/${primaryRune.icon}`
|
|
secondaryRune = runes.find(r => r.id === player.stats.perkSubStyle)
|
|
secondaryRune = `https://ddragon.leagueoflegends.com/cdn/img/${secondaryRune.icon}`
|
|
}
|
|
|
|
const items = []
|
|
for (let i = 0; i < 6; i++) {
|
|
const currentItem = 'item' + i
|
|
items.push(player.stats[currentItem])
|
|
}
|
|
|
|
const gold = +(player.stats.goldEarned / 1000).toFixed(1) + 'k'
|
|
const minions = player.stats.totalMinionsKilled + player.stats.neutralMinionsKilled
|
|
|
|
const firstSum = player.spell1Id
|
|
const secondSum = player.spell2Id
|
|
|
|
const allyTeam = []
|
|
const enemyTeam = []
|
|
for (let summoner of match.participantIdentities) {
|
|
const allData = match.participants[summoner.participantId - 1]
|
|
const playerInfos = {
|
|
name: summoner.player.summonerName,
|
|
role: MatchHelper.getRoleName(allData.timeline),
|
|
champion: (({ id, name }) => ({ id, name }))(Object.entries(champions).find(([, champion]) => Number(champion.key) === allData.championId)[1])
|
|
}
|
|
|
|
if (allData.teamId === teamId) {
|
|
allyTeam.push(playerInfos)
|
|
} else {
|
|
enemyTeam.push(playerInfos)
|
|
}
|
|
}
|
|
allyTeam.sort(MatchHelper.sortTeamByRole)
|
|
enemyTeam.sort(MatchHelper.sortTeamByRole)
|
|
|
|
return {
|
|
summoner_puuid: account.puuid,
|
|
gameId: match.gameId,
|
|
result: win,
|
|
map,
|
|
gamemode: mode,
|
|
champion,
|
|
role,
|
|
primaryRune,
|
|
secondaryRune,
|
|
date: gameCreation,
|
|
time,
|
|
kills,
|
|
deaths,
|
|
assists,
|
|
kda,
|
|
level,
|
|
damage,
|
|
kp,
|
|
items,
|
|
gold,
|
|
minions,
|
|
firstSum,
|
|
secondSum,
|
|
allyTeam,
|
|
enemyTeam
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = new BasicMatchTransformer()
|