From 3966c79b85ab2a7fefe8023168ae4bdbbe9531b1 Mon Sep 17 00:00:00 2001 From: xenticore Date: Mon, 7 Apr 2025 17:27:30 -0400 Subject: [PATCH 1/4] feat: add killstreak kit pricing --- src/content/content.ts | 54 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/src/content/content.ts b/src/content/content.ts index d0efdc7..4e91169 100644 --- a/src/content/content.ts +++ b/src/content/content.ts @@ -3,7 +3,7 @@ import styleCss from './style.css' import { logDebug, log, logError } from './utils/log' import { getPricesToken, priceUsingPricesTF } from './pricing/pricestf' import itemQualities from 'tf2-static-schema/static/qualities.json'; -import { getItemIndexByName, getTradableStatusByDefindex, ItemSchema, prepareSchema, wipeSchema } from './schemaService' +import { getItemIndexByName, getTradableStatusByDefindex, ItemSchema, ItemSlot, prepareSchema, wipeSchema } from './schemaService' import { $T, extractLocaleFromURL } from './utils/localization' import { fetchPrice, fetchKeyPrice, ItemPriceData } from './priceService' import { createPriceRow, createStoreButton } from './uiRenderer' @@ -190,7 +190,8 @@ async function inject() { enum PriceRowCategory { None, Festive, - Botkiller + Botkiller, + KillstreakKit } interface PriceRow { @@ -291,6 +292,51 @@ async function inject() { })) } + var killstreakKitHeadingRow: HTMLTableRowElement | null + // Check for Killstreak Kits + if(itemSchema[itemIndex].slot == ItemSlot.Primary || + itemSchema[itemIndex].slot == ItemSlot.Secondary || + itemSchema[itemIndex].slot == ItemSlot.Melee) + { + /// Create subheading + killstreakKitHeadingRow = document.createElement("tr") + const heading = document.createElement("th") + heading.className = "infobox-subheader" + heading.colSpan = 2 + heading.innerText = $T("Killstreak Kit") + heading.style.fontSize = '1em'; + heading.style.backgroundColor = '#F5C087'; + killstreakKitHeadingRow.style.display = 'none'; + killstreakKitHeadingRow.appendChild(heading); + [1,2,3].map((tier) => { + promises.push(new Promise(async (resolve) => { + logDebug(`Fetching price for ${itemName} Killstreak Kit Tier ${tier}`) + var data: ItemPriceData | null + try { + var kitIndex: number + switch (tier) { + default: + case 1: kitIndex = 6527; break; + case 2: kitIndex = 6523; break; + case 3: kitIndex = 6526; break; + } + data = await fetchPrice(token, `${kitIndex};6;uncraftable;kt-${tier};td-${itemIndex}`, currentTime); + updateTime = new Date(data.update) + } catch { + log(`${itemName} Killstreak Kit Tier ${tier} is unpriced or unavailable, skipping...`) + resolve() + return + } + + const priceRow = createPriceRow($T(`kt-${tier}`), data, keyPrice, locale, "https://wiki.teamfortress.com/wiki/Killstreak_Kit") + + priceRows.push({order: tier, row: priceRow, category: PriceRowCategory.KillstreakKit}) + resolve() + return + })) + }) + } + // Silver Mk.I, Gold Mk.II, Rust, Blood, Carbonado, Diamond, Silver Mk.II, Gold Mk.II const botkillerOrder = [ "Silver", @@ -339,6 +385,7 @@ async function inject() { }) } + if(killstreakKitHeadingRow) priceInfoboxHeadingRow.insertAdjacentElement('afterend', killstreakKitHeadingRow); if(botKillerHeadingRow) priceInfoboxHeadingRow.insertAdjacentElement('afterend', botKillerHeadingRow); if(festiveHeadingRow) priceInfoboxHeadingRow.insertAdjacentElement('afterend', festiveHeadingRow); @@ -359,6 +406,9 @@ async function inject() { case PriceRowCategory.Botkiller: botKillerHeadingRow.insertAdjacentElement('afterend', element.row); break; + case PriceRowCategory.KillstreakKit: + killstreakKitHeadingRow.insertAdjacentElement('afterend', element.row); + killstreakKitHeadingRow.style.display = 'revert'; } }) if(!updateTime || !(updateTime instanceof Date) || isNaN(+updateTime)) updateTime = new Date() From 95d0880cac5039c28ad104a875a55f53f1696fbb Mon Sep 17 00:00:00 2001 From: xenticore Date: Mon, 7 Apr 2025 17:27:43 -0400 Subject: [PATCH 2/4] l10n: add strings for killstreak kits --- src/strings/en.js | 6 ++++++ src/strings/es.js | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/strings/en.js b/src/strings/en.js index 30c8860..485fd95 100644 --- a/src/strings/en.js +++ b/src/strings/en.js @@ -35,4 +35,10 @@ module.exports = { "Diamond": "Diamond", "Silver Mk.II": "Silver Mk.II", "Gold Mk.II": "Gold Mk.II", + + // Killstreak tiers sourced from TF2 wiki + "Killstreak Kit": "Killstreak Kit", + "kt-1": "Standard", + "kt-2": "Specialized", + "kt-3": "Professional", } \ No newline at end of file diff --git a/src/strings/es.js b/src/strings/es.js index 62f5a54..3eff563 100644 --- a/src/strings/es.js +++ b/src/strings/es.js @@ -35,4 +35,10 @@ module.exports = { "Diamond": "Diamante", "Silver Mk.II": "Plata Mk.II", "Gold Mk.II": "Oro Mk.II", + + // Killstreak tiers sourced from TF2 wiki + "Killstreak Kit": "Kit Cuentarrachas", + "kt-1": "Standard", + "kt-2": "Especializado", + "kt-3": "Profesional", } \ No newline at end of file From de6679b6c9d00b1310cd4c88341ab49d2e818a4f Mon Sep 17 00:00:00 2001 From: xenticore Date: Mon, 7 Apr 2025 17:31:30 -0400 Subject: [PATCH 3/4] fix: headings should not appear before prices --- src/content/content.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/content/content.ts b/src/content/content.ts index 4e91169..1d8cbb5 100644 --- a/src/content/content.ts +++ b/src/content/content.ts @@ -256,6 +256,7 @@ async function inject() { festiveHeading.innerText = $T("Festive") festiveHeading.style.fontSize = '1em'; festiveHeading.style.backgroundColor = '#F5C087'; + festiveHeadingRow.style.display = 'none'; festiveHeadingRow.appendChild(festiveHeading); promises.push(new Promise(async (resolve) => { @@ -358,6 +359,7 @@ async function inject() { festiveHeading.innerText = $T("Botkiller") festiveHeading.style.fontSize = '1em'; festiveHeading.style.backgroundColor = '#F5C087'; + botKillerHeadingRow.style.display = 'none'; botKillerHeadingRow.appendChild(festiveHeading); itemSchema[itemIndex].botkillerVariants.map((variantIndex) => { @@ -402,9 +404,11 @@ async function inject() { break; case PriceRowCategory.Festive: festiveHeadingRow.insertAdjacentElement('afterend', element.row); + festiveHeadingRow.style.display = 'revert'; break; case PriceRowCategory.Botkiller: botKillerHeadingRow.insertAdjacentElement('afterend', element.row); + botKillerHeadingRow.style.display = 'revert'; break; case PriceRowCategory.KillstreakKit: killstreakKitHeadingRow.insertAdjacentElement('afterend', element.row); From cb07930c6d35fabbd188ecbeaa73fc7864388126 Mon Sep 17 00:00:00 2001 From: xenticore Date: Mon, 7 Apr 2025 17:31:43 -0400 Subject: [PATCH 4/4] bump version to 0.6.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c1c602a..5baf872 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "tf2wikipricing", - "version": "0.5.0", + "version": "0.6.0", "description": "Adds item pricing to the Team Fortress 2 wiki", "devDependencies": { "@happy-dom/global-registrator": "^17.4.4",