Refactor champion stats
This commit is contained in:
@@ -47,6 +47,91 @@ type Champion = {
|
|||||||
alias: String
|
alias: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function handleParticipantRunes(participant, runes: Array<Rune>) {
|
||||||
|
const primaryStyle = participant.perks.styles[0].style
|
||||||
|
const secondaryStyle = participant.perks.styles[1].style
|
||||||
|
const selections : Array<number> = []
|
||||||
|
for(let style of participant.perks.styles) {
|
||||||
|
for(let perk of style.selections) {
|
||||||
|
selections.push(perk.perk)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const gameRunes : Rune = {count:1, primaryStyle: primaryStyle, secondaryStyle: secondaryStyle, selections: selections};
|
||||||
|
let addRunes = true;
|
||||||
|
for(let rune of runes) {
|
||||||
|
if(rune.primaryStyle == gameRunes.primaryStyle
|
||||||
|
&& rune.secondaryStyle == gameRunes.secondaryStyle
|
||||||
|
&& sameArrays(rune.selections, gameRunes.selections)) {
|
||||||
|
rune.count++; addRunes = false; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(addRunes) runes.push(gameRunes)
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleMatchItems(timeline, participantIndex : number, builds: Builds) {
|
||||||
|
const items : Array<number> = []
|
||||||
|
for(let frame of timeline.info.frames) {
|
||||||
|
for(let event of frame.events) {
|
||||||
|
if(event.participantId != participantIndex) continue;
|
||||||
|
if(event.type == "ITEM_UNDO") {
|
||||||
|
if(items.length > 0 && items[items.length - 1] == event.beforeId) {
|
||||||
|
items.pop()
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(event.type != "ITEM_PURCHASED") continue;
|
||||||
|
|
||||||
|
let itemInfo = itemDict.get(event.itemId)
|
||||||
|
|
||||||
|
// Handle boots differently
|
||||||
|
if(itemInfo.categories.includes("Boots")){
|
||||||
|
if(itemInfo.to.length == 0 || event.itemId == 3006) {
|
||||||
|
// Check for bootsFirst
|
||||||
|
if(items.length < 2) {
|
||||||
|
builds.bootsFirst += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add to boots
|
||||||
|
const already = builds.boots.find((x) => x.data == event.itemId)
|
||||||
|
if(already == undefined) builds.boots.push({count:1, data:event.itemId})
|
||||||
|
else already.count += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if item should be included
|
||||||
|
if(itemInfo.categories.includes("Consumable")) continue;
|
||||||
|
if(itemInfo.categories.includes("Trinket")) continue;
|
||||||
|
|
||||||
|
// Ignore Cull as not-first item
|
||||||
|
if(event.itemId == 1083 && items.length >= 1) continue;
|
||||||
|
|
||||||
|
// Ignore non-final items, except when first item bought
|
||||||
|
if(itemInfo.to.length != 0 && items.length >= 1) continue;
|
||||||
|
|
||||||
|
items.push(event.itemId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Core items
|
||||||
|
treeMerge(builds.tree, items.slice(1, 4))
|
||||||
|
|
||||||
|
// Start items
|
||||||
|
if(items.length >= 1) {
|
||||||
|
const already = builds.start.find((x) => x.data == items[0])
|
||||||
|
if(already == undefined) builds.start.push({count:1, data:items[0]})
|
||||||
|
else already.count += 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// Late game items
|
||||||
|
for(let item of items.slice(4)) {
|
||||||
|
const already = builds.lateGame.find((x) => x.data == item)
|
||||||
|
if(already == undefined) builds.lateGame.push({count:1, data:item})
|
||||||
|
else already.count += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function championInfos(client, patch: number, champion: Champion) {
|
async function championInfos(client, patch: number, champion: Champion) {
|
||||||
const championId = champion.id
|
const championId = champion.id
|
||||||
const database = client.db("matches");
|
const database = client.db("matches");
|
||||||
@@ -72,87 +157,10 @@ async function championInfos(client, patch: number, champion: Champion) {
|
|||||||
losingMatches += 1;
|
losingMatches += 1;
|
||||||
|
|
||||||
// Runes
|
// Runes
|
||||||
const primaryStyle = participant.perks.styles[0].style
|
handleParticipantRunes(participant, runes)
|
||||||
const secondaryStyle = participant.perks.styles[1].style
|
|
||||||
const selections : Array<number> = []
|
|
||||||
for(let style of participant.perks.styles) {
|
|
||||||
for(let perk of style.selections) {
|
|
||||||
selections.push(perk.perk)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const gameRunes : Rune = {count:1, primaryStyle: primaryStyle, secondaryStyle: secondaryStyle, selections: selections};
|
|
||||||
let addRunes = true;
|
|
||||||
for(let rune of runes) {
|
|
||||||
if(rune.primaryStyle == gameRunes.primaryStyle
|
|
||||||
&& rune.secondaryStyle == gameRunes.secondaryStyle
|
|
||||||
&& sameArrays(rune.selections, gameRunes.selections)) {
|
|
||||||
rune.count++; addRunes = false; break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(addRunes) runes.push(gameRunes)
|
|
||||||
|
|
||||||
// Items
|
// Items
|
||||||
const items : Array<number> = []
|
handleMatchItems(match.timeline, participantIndex, builds)
|
||||||
for(let frame of match.timeline.info.frames) {
|
|
||||||
for(let event of frame.events) {
|
|
||||||
if(event.participantId != participantIndex) continue;
|
|
||||||
if(event.type == "ITEM_UNDO") {
|
|
||||||
if(items.length > 0 && items[items.length - 1] == event.beforeId) {
|
|
||||||
items.pop()
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if(event.type != "ITEM_PURCHASED") continue;
|
|
||||||
|
|
||||||
let itemInfo = itemDict.get(event.itemId)
|
|
||||||
|
|
||||||
// Handle boots differently
|
|
||||||
if(itemInfo.categories.includes("Boots")){
|
|
||||||
if(itemInfo.to.length == 0 || event.itemId == 3006) {
|
|
||||||
// Check for bootsFirst
|
|
||||||
if(items.length < 2) {
|
|
||||||
builds.bootsFirst += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add to boots
|
|
||||||
const already = builds.boots.find((x) => x.data == event.itemId)
|
|
||||||
if(already == undefined) builds.boots.push({count:1, data:event.itemId})
|
|
||||||
else already.count += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if item should be included
|
|
||||||
if(itemInfo.categories.includes("Consumable")) continue;
|
|
||||||
if(itemInfo.categories.includes("Trinket")) continue;
|
|
||||||
|
|
||||||
// Ignore Cull as not-first item
|
|
||||||
if(event.itemId == 1083 && items.length >= 1) continue;
|
|
||||||
|
|
||||||
// Ignore non-final items, except when first item bought
|
|
||||||
if(itemInfo.to.length != 0 && items.length >= 1) continue;
|
|
||||||
|
|
||||||
items.push(event.itemId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Core items
|
|
||||||
treeMerge(builds.tree, items.slice(1, 4))
|
|
||||||
|
|
||||||
// Start items
|
|
||||||
if(items.length >= 1) {
|
|
||||||
const already = builds.start.find((x) => x.data == items[0])
|
|
||||||
if(already == undefined) builds.start.push({count:1, data:items[0]})
|
|
||||||
else already.count += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
// Late game items
|
|
||||||
for(let item of items.slice(4)) {
|
|
||||||
const already = builds.lateGame.find((x) => x.data == item)
|
|
||||||
if(already == undefined) builds.lateGame.push({count:1, data:item})
|
|
||||||
else already.count += 1
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user