From 13613b24b9d7bde24f78c9d54da601577fd954f6 Mon Sep 17 00:00:00 2001 From: holmityd Date: Tue, 9 Jan 2024 12:54:14 +0400 Subject: [PATCH] items --- package.json | 10 +-- src/helpers/customHelpers/addItemHelpers.ts | 3 +- src/helpers/purchaseHelpers.ts | 10 +-- static/data/items.ts | 75 +++++---------------- static/json/.gitignore | 5 ++ static/json/scripts/update-items.js | 53 +++++++++++++++ 6 files changed, 84 insertions(+), 72 deletions(-) create mode 100644 static/json/.gitignore create mode 100644 static/json/scripts/update-items.js diff --git a/package.json b/package.json index dc945973..13489ab1 100644 --- a/package.json +++ b/package.json @@ -4,18 +4,19 @@ "description": "WF Emulator", "main": "index.ts", "scripts": { - "start": "node build/index.js", "dev": "ts-node-dev --openssl-legacy-provider -r tsconfig-paths/register src/index.ts ", "build": "tsc", + "start": "node build/index.js", "lint": "eslint --ext .ts .", - "prettier": "prettier --write ." + "prettier": "prettier --write .", + "update-items": "node static/json/scripts/update-items.js", + "postinstall": "npm run update-items" }, "license": "GNU", "dependencies": { "dotenv": "^16.1.3", "express": "^5.0.0-beta.1", "mongoose": "^8.0.2", - "warframe-items": "1.1260.121", "winston": "^3.11.0", "winston-daily-rotate-file": "^4.7.1" }, @@ -31,7 +32,8 @@ "prettier": "^3.0.0", "ts-node-dev": "^2.0.0", "tsconfig-paths": "^4.2.0", - "typescript": "^5.2.2" + "typescript": "^5.2.2", + "warframe-items": "1.1260.121" }, "engines": { "node": ">=18.15.0", diff --git a/src/helpers/customHelpers/addItemHelpers.ts b/src/helpers/customHelpers/addItemHelpers.ts index efc517c3..542f7a33 100644 --- a/src/helpers/customHelpers/addItemHelpers.ts +++ b/src/helpers/customHelpers/addItemHelpers.ts @@ -24,8 +24,7 @@ interface IAddItemRequest { accountId: string; } export const isInternalName = (internalName: string): boolean => { - const item = items.find(i => i.uniqueName === internalName); - return Boolean(item); + return items.has(internalName); }; const parseInternalName = (internalName: unknown): string => { diff --git a/src/helpers/purchaseHelpers.ts b/src/helpers/purchaseHelpers.ts index 47016abe..8878d2cd 100644 --- a/src/helpers/purchaseHelpers.ts +++ b/src/helpers/purchaseHelpers.ts @@ -2,7 +2,7 @@ import { parseBoolean, parseNumber, parseString } from "@/src/helpers/general"; import { WeaponTypeInternal } from "@/src/services/inventoryService"; import { slotPurchaseNameToSlotName } from "@/src/services/purchaseService"; import { IPurchaseRequest, SlotPurchaseName } from "@/src/types/purchaseTypes"; -import { weapons } from "@/static/data/items"; +import { weaponCategories } from "@/static/data/items"; export const toPurchaseRequest = (purchaseRequest: unknown): IPurchaseRequest => { if (!purchaseRequest || typeof purchaseRequest !== "object") { @@ -42,13 +42,7 @@ export const toPurchaseRequest = (purchaseRequest: unknown): IPurchaseRequest => }; export const getWeaponType = (weaponName: string) => { - const weaponInfo = weapons.find(i => i.uniqueName === weaponName); - - if (!weaponInfo) { - throw new Error(`unknown weapon ${weaponName}`); - } - - const weaponType = weaponInfo.productCategory as WeaponTypeInternal; + const weaponType = weaponCategories[weaponName] as WeaponTypeInternal; if (!weaponType) { throw new Error(`unknown weapon category for item ${weaponName}`); diff --git a/static/data/items.ts b/static/data/items.ts index f2718a2f..03de0b3d 100644 --- a/static/data/items.ts +++ b/static/data/items.ts @@ -1,60 +1,19 @@ -import Items, { Category, Item, Warframe, Weapon } from "warframe-items"; +import modNamesData from "@/static/json/mod-names.json"; +import relicNamesData from "@/static/json/relic-names.json"; +import miscNamesData from "@/static/json/misc-names.json"; +import resourceNamesData from "@/static/json/resource-names.json"; +import gearNamesData from "@/static/json/gear-names.json"; +import blueprintNamesData from "@/static/json/blueprint-names.json"; +import weaponCategoriesData from "@/static/json/weapon-categories.json"; +import allUniqNames from "@/static/json/all-uniq-names.json"; -type MinWeapon = Omit; -type MinItem = Omit; +const modNames = modNamesData as ImportAssertions; +const relicNames = relicNamesData as ImportAssertions; +const miscNames = miscNamesData as ImportAssertions; +const resourceNames = resourceNamesData as ImportAssertions; +const gearNames = gearNamesData as ImportAssertions; +const blueprintNames = blueprintNamesData as ImportAssertions; +const weaponCategories = weaponCategoriesData as ImportAssertions; +const items = new Set(allUniqNames); -export const weapons: MinWeapon[] = (new Items({ category: ["Primary", "Secondary", "Melee"] }) as Weapon[]).map( - item => { - const next = { ...item }; - delete next.patchlogs; - return next; - } -); - -export const items: MinItem[] = new Items({ category: ["All"] }).map(item => { - const next = { ...item }; - delete next.patchlogs; - return next; -}); - -const getNamesObj = (category: Category) => - new Items({ category: [category] }).reduce((acc, item) => { - acc[item.name!.replace("'S", "'s")] = item.uniqueName!; - return acc; - }, {} as ImportAssertions); - -export const modNames = getNamesObj("Mods"); -export const resourceNames = getNamesObj("Resources"); -export const miscNames = getNamesObj("Misc"); -export const relicNames = getNamesObj("Relics"); -export const skinNames = getNamesObj("Skins"); -export const arcaneNames = getNamesObj("Arcanes"); -export const gearNames = getNamesObj("Gear"); - -export const craftNames: ImportAssertions = Object.fromEntries( - ( - new Items({ - category: [ - "Warframes", - "Gear", - "Melee", - "Primary", - "Secondary", - "Sentinels", - "Misc", - "Arch-Gun", - "Arch-Melee" - ] - }) as Warframe[] - ) - .flatMap(item => item.components || []) - .filter(item => item.drops && item.drops[0]) - .map(item => [item.drops![0].type, item.uniqueName]) -); -craftNames["Forma Blueprint"] = "/Lotus/Types/Recipes/Components/FormaBlueprint"; - -export const blueprintNames: ImportAssertions = Object.fromEntries( - Object.keys(craftNames) - .filter(name => name.includes("Blueprint")) - .map(name => [name, craftNames[name]]) -); +export { modNames, relicNames, miscNames, resourceNames, gearNames, blueprintNames, weaponCategories, items }; diff --git a/static/json/.gitignore b/static/json/.gitignore new file mode 100644 index 00000000..acd87353 --- /dev/null +++ b/static/json/.gitignore @@ -0,0 +1,5 @@ +* +!.gitignore +!missions-drop-table.json +!scripts +!scripts/* \ No newline at end of file diff --git a/static/json/scripts/update-items.js b/static/json/scripts/update-items.js new file mode 100644 index 00000000..0a11d538 --- /dev/null +++ b/static/json/scripts/update-items.js @@ -0,0 +1,53 @@ +/* eslint-disable */ +const Items = require("warframe-items"); +const fs = require("fs"); + +const weaponCategories = new Items({ category: ["Primary", "Secondary", "Melee"] }).reduce((acc, item) => { + acc[item.name] = item.productCategory; + return acc; +}, {}); + +const allItemTypes = new Items({ category: ["All"] }).map(item => item.uniqueName); + +const getNamesObj = category => + new Items({ category: [category] }).reduce((acc, item) => { + acc[item.name.replace("'S", "'s")] = item.uniqueName; + return acc; + }, {}); + +const modNames = getNamesObj("Mods"); +const resourceNames = getNamesObj("Resources"); +const miscNames = getNamesObj("Misc"); +const relicNames = getNamesObj("Relics"); +const skinNames = getNamesObj("Skins"); +const arcaneNames = getNamesObj("Arcanes"); +const gearNames = getNamesObj("Gear"); + +const craftNames = Object.fromEntries( + new Items({ + category: ["Warframes", "Gear", "Melee", "Primary", "Secondary", "Sentinels", "Misc", "Arch-Gun", "Arch-Melee"] + }) + .flatMap(item => item.components || []) + .filter(item => item.drops && item.drops[0]) + .map(item => [item.drops[0].type, item.uniqueName]) +); +craftNames["Forma Blueprint"] = "/Lotus/Types/Recipes/Components/FormaBlueprint"; + +const blueprintNames = Object.fromEntries( + Object.keys(craftNames) + .filter(name => name.includes("Blueprint")) + .map(name => [name, craftNames[name]]) +); + +const jsonDir = "static/json"; + +fs.writeFileSync(`${jsonDir}/weapon-categories.json`, JSON.stringify(weaponCategories)); +fs.writeFileSync(`${jsonDir}/all-uniq-names.json`, JSON.stringify(allItemTypes)); +fs.writeFileSync(`${jsonDir}/mod-names.json`, JSON.stringify(modNames)); +fs.writeFileSync(`${jsonDir}/resource-names.json`, JSON.stringify(resourceNames)); +fs.writeFileSync(`${jsonDir}/misc-names.json`, JSON.stringify(miscNames)); +fs.writeFileSync(`${jsonDir}/relic-names.json`, JSON.stringify(relicNames)); +fs.writeFileSync(`${jsonDir}/skin-names.json`, JSON.stringify(skinNames)); +fs.writeFileSync(`${jsonDir}/arcane-names.json`, JSON.stringify(arcaneNames)); +fs.writeFileSync(`${jsonDir}/gear-names.json`, JSON.stringify(gearNames)); +fs.writeFileSync(`${jsonDir}/blueprint-names.json`, JSON.stringify(blueprintNames)); \ No newline at end of file