Feat: Add Synergy and Details to commander cards
This commit is contained in:
parent
d402c7f2d6
commit
dcbab5c99f
12 changed files with 253 additions and 29 deletions
|
@ -61,7 +61,19 @@ async function createJson() {
|
|||
include: {
|
||||
cards: {
|
||||
include: {
|
||||
decks: true,
|
||||
decks: {
|
||||
include: {
|
||||
deck: {
|
||||
include: {
|
||||
commander: {
|
||||
include: {
|
||||
decks_as_commander: true,
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
decks_as_commander: true,
|
||||
}
|
||||
}
|
||||
|
@ -88,6 +100,7 @@ async function createJson() {
|
|||
commanderData[colorName] = []
|
||||
}
|
||||
let bset_cards_data_export = {}
|
||||
let commander_details_export = {}
|
||||
|
||||
bsets.forEach((bset) => {
|
||||
let icons = []
|
||||
|
@ -124,6 +137,7 @@ async function createJson() {
|
|||
let card_object = {
|
||||
"name": card.name,
|
||||
"sanitized_name": card.sanitized_name,
|
||||
"url": card.set_code + "-" + card.sanitized_name,
|
||||
"normal_image": card.normal_image,
|
||||
"small_image": card.small_image,
|
||||
"type": card.type,
|
||||
|
@ -135,19 +149,46 @@ async function createJson() {
|
|||
"color_identity": card.color_identity,
|
||||
}
|
||||
|
||||
card_object.percent_decks = (card_object.total_decks != 0) ? parseInt(10000 * (card_object.nbr_decks / card_object.total_decks)) / 100 : 0
|
||||
card_object.percent_decks = (card_object.total_decks != 0) ? parseInt(100 * (card_object.nbr_decks / card_object.total_decks)) : 0
|
||||
|
||||
bset_cards_data_export[bset.sanitized_name][card.type].push(card_object)
|
||||
|
||||
card.decks.forEach((deck) => {
|
||||
const card_url_name = deck.deck.commander.set_code + "-" + deck.deck.commander.sanitized_name
|
||||
if(!Object.keys(commander_details_export).includes(card_url_name)) {
|
||||
commander_details_export[card_url_name] = {
|
||||
"card_data": deck.deck.commander,
|
||||
"creature": {},
|
||||
"land": {},
|
||||
"enchantment": {},
|
||||
"sorcery": {},
|
||||
"instant": {},
|
||||
"planeswalker": {},
|
||||
"artifact": {},
|
||||
}
|
||||
commander_details_export[card_url_name].card_data.nbr_decks = deck.deck.commander.decks_as_commander.length
|
||||
}
|
||||
|
||||
if(!Object.keys(commander_details_export[card_url_name][card.type]).includes(card.sanitized_name)) {
|
||||
let card_synergy_object = structuredClone(card_object)
|
||||
card_synergy_object.commander_total = 0
|
||||
commander_details_export[card_url_name][card.type][card.sanitized_name] = card_synergy_object
|
||||
}
|
||||
|
||||
commander_details_export[card_url_name][card.type][card.sanitized_name].commander_total += 1
|
||||
})
|
||||
|
||||
|
||||
if(card.can_be_commander) {
|
||||
let commander_card_object = structuredClone(card_object)
|
||||
commander_card_object.total_decks = bset.decks.length
|
||||
commander_card_object.nbr_decks = card.decks_as_commander != undefined ? card.decks_as_commander.length : 0
|
||||
commander_card_object.percent_decks = (commander_card_object.total_decks != 0) ? parseInt(10000 * (commander_card_object.nbr_decks / commander_card_object.total_decks)) / 100 : 0
|
||||
commander_card_object.percent_decks = (commander_card_object.total_decks != 0) ? parseInt(100 * (commander_card_object.nbr_decks / commander_card_object.total_decks)) : 0
|
||||
bset_cards_data_export[bset.sanitized_name]["commander"].push(commander_card_object)
|
||||
|
||||
const colorName = getColorName(card.color_identity)
|
||||
|
||||
|
||||
if(colorName != "") {
|
||||
commanderData[colorName].push(commander_card_object)
|
||||
commanderData["top"].push(commander_card_object)
|
||||
|
@ -164,12 +205,31 @@ async function createJson() {
|
|||
writeFileSync(import.meta.dirname + "/../data/commander/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
}
|
||||
|
||||
for (const index of Object.keys(commander_details_export)) {
|
||||
let JSONToWrite = structuredClone(commander_details_export[index])
|
||||
JSONToWrite["high_synergy"] = []
|
||||
for (const type of ["creature","land","enchantment","sorcery","instant","planeswalker","artifact"]) {
|
||||
JSONToWrite[type] = []
|
||||
for (const card_key of Object.keys(commander_details_export[index][type])) {
|
||||
let card_object_synergy = commander_details_export[index][type][card_key]
|
||||
card_object_synergy.synergy = parseInt(100 * (card_object_synergy.commander_total / commander_details_export[index].card_data.nbr_decks) - card_object_synergy.percent_decks)
|
||||
JSONToWrite[type].push(card_object_synergy)
|
||||
}
|
||||
JSONToWrite[type].sort((a,b) => b.synergy - a.synergy || b.percent_decks - a.percent_decks || b.nbr_decks - a.nbr_decks)
|
||||
JSONToWrite["high_synergy"] = [...JSONToWrite["high_synergy"], ...JSONToWrite[type]]
|
||||
}
|
||||
|
||||
JSONToWrite["high_synergy"].sort((a,b) => b.synergy - a.synergy || b.percent_decks - a.percent_decks || b.nbr_decks - a.nbr_decks)
|
||||
JSONToWrite["high_synergy"] = JSONToWrite["high_synergy"].slice(0,15)
|
||||
writeFileSync(import.meta.dirname + "/../data/card-commander/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
}
|
||||
|
||||
for (const index of Object.keys(bset_cards_data_export)) {
|
||||
let JSONToWrite = bset_cards_data_export[index]
|
||||
for (const type of Object.keys(JSONToWrite)) {
|
||||
JSONToWrite[type] = JSONToWrite[type].sort((a,b) => b.percent_decks - a.percent_decks || b.nbr_decks - a.nbr_decks)
|
||||
}
|
||||
writeFileSync(import.meta.dirname + "/../data/bset/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
writeFileSync(import.meta.dirname + "/../data/bset/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
}
|
||||
const end = performance.now()
|
||||
console.log(`Time taken to generate stats is ${(end - start)/1000}s.`);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue