MissionInventoryUpdate(not completed), Mod upgrade, Booster purchase #49
@ -1,18 +1,24 @@
|
|||||||
import { RequestHandler } from "express";
|
import { RequestHandler } from "express";
|
||||||
import { missionInventoryUpdate } from "@/src/services/inventoryService";
|
import { missionInventoryUpdate } from "@/src/services/inventoryService";
|
||||||
import { MissionInventoryUpdate, MissionInventoryUpdateRewardInfo } from "@/src/types/missionInventoryUpdateType";
|
import {
|
||||||
|
MissionInventoryUpdate,
|
||||||
|
MissionInventoryUpdateRewardInfo,
|
||||||
|
MissionRewardResponse,
|
||||||
|
Reward
|
||||||
|
} from "@/src/types/missionInventoryUpdateType";
|
||||||
|
import { RawUpgrade } from "@/src/types/inventoryTypes/inventoryTypes";
|
||||||
|
|
||||||
import missionsDropTable from "@/static/json/missions-drop-table.json";
|
import missionsDropTable from "@/static/json/missions-drop-table.json";
|
||||||
import missionNames from "@/static/json/mission-names.json";
|
import {
|
||||||
import modNames from "@/static/json/mod-names.json";
|
modNames,
|
||||||
import relicNames from "@/static/json/relic-names.json";
|
relicNames,
|
||||||
import skinNames from "@/static/json/skin-names.json";
|
skinNames,
|
||||||
import miscNames from "@/static/json/misc-names.json";
|
miscNames,
|
||||||
import resourceNames from "@/static/json/resource-names.json";
|
resourceNames,
|
||||||
import gearNames from "@/static/json/gear-names.json";
|
gearNames,
|
||||||
import arcaneNames from "@/static/json/arcane-names.json";
|
arcaneNames,
|
||||||
import craftNames from "@/static/json/craft-names.json";
|
craftNames
|
||||||
import { RawUpgrade } from "@/src/types/inventoryTypes/inventoryTypes";
|
} from "@/static/data/items";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
**** INPUT ****
|
**** INPUT ****
|
||||||
@ -118,9 +124,6 @@ const missionInventoryUpdateController: RequestHandler = async (req, res) => {
|
|||||||
- [x] FusionPoints
|
- [x] FusionPoints
|
||||||
*/
|
*/
|
||||||
|
|
||||||
interface StringDictionary {
|
|
||||||
[key: string]: string;
|
|
||||||
}
|
|
||||||
const getRewards = (
|
const getRewards = (
|
||||||
rewardInfo: MissionInventoryUpdateRewardInfo | undefined
|
rewardInfo: MissionInventoryUpdateRewardInfo | undefined
|
||||||
): { InventoryChanges: MissionInventoryUpdate; MissionRewards: MissionRewardResponse[] } => {
|
): { InventoryChanges: MissionInventoryUpdate; MissionRewards: MissionRewardResponse[] } => {
|
||||||
@ -144,8 +147,7 @@ const getRewards = (
|
|||||||
// "rewardSeed": -5604904486637266000
|
// "rewardSeed": -5604904486637266000
|
||||||
// },
|
// },
|
||||||
|
|
||||||
const missionName = (missionNames as StringDictionary)[rewardInfo.node];
|
const rewards = (missionsDropTable as { [key: string]: Reward[] })[rewardInfo.node];
|
||||||
const rewards = missionsDropTable.find(i => i.mission === missionName)?.rewards;
|
|
||||||
|
|
||||||
if (!rewards) return { InventoryChanges: {}, MissionRewards: [] };
|
if (!rewards) return { InventoryChanges: {}, MissionRewards: [] };
|
||||||
|
|
||||||
@ -165,11 +167,6 @@ const getRewards = (
|
|||||||
return formatRewardsToInventoryType(guaranteedDrops);
|
return formatRewardsToInventoryType(guaranteedDrops);
|
||||||
};
|
};
|
||||||
|
|
||||||
interface Reward {
|
|
||||||
name: string;
|
|
||||||
chance: number;
|
|
||||||
rotation?: string;
|
|
||||||
}
|
|
||||||
const getRandomRewardByChance = (data: Reward[] | undefined): Reward | undefined => {
|
const getRandomRewardByChance = (data: Reward[] | undefined): Reward | undefined => {
|
||||||
if (!data || data.length == 0) return;
|
if (!data || data.length == 0) return;
|
||||||
|
|
||||||
@ -187,33 +184,22 @@ const getRandomRewardByChance = (data: Reward[] | undefined): Reward | undefined
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
interface MissionRewardResponse {
|
|
||||||
StoreItem?: string;
|
|
||||||
TypeName: string;
|
|
||||||
UpgradeLevel: number;
|
|
||||||
ItemCount: number;
|
|
||||||
TweetText: string;
|
|
||||||
ProductCategory: string;
|
|
||||||
}
|
|
||||||
const formatRewardsToInventoryType = (
|
const formatRewardsToInventoryType = (
|
||||||
rewards: Reward[]
|
rewards: Reward[]
|
||||||
): { InventoryChanges: MissionInventoryUpdate; MissionRewards: MissionRewardResponse[] } => {
|
): { InventoryChanges: MissionInventoryUpdate; MissionRewards: MissionRewardResponse[] } => {
|
||||||
const InventoryChanges: MissionInventoryUpdate = {};
|
const InventoryChanges: MissionInventoryUpdate = {};
|
||||||
const MissionRewards: MissionRewardResponse[] = [];
|
const MissionRewards: MissionRewardResponse[] = [];
|
||||||
rewards.forEach(i => {
|
rewards.forEach(i => {
|
||||||
const mod = (modNames as StringDictionary)[i.name];
|
const mod = modNames[i.name];
|
||||||
const skin = (skinNames as StringDictionary)[i.name];
|
const skin = skinNames[i.name];
|
||||||
const gear = (gearNames as StringDictionary)[i.name];
|
const gear = gearNames[i.name];
|
||||||
const arcane = (arcaneNames as StringDictionary)[i.name];
|
const arcane = arcaneNames[i.name];
|
||||||
const craft = (craftNames as StringDictionary)[i.name];
|
const craft = craftNames[i.name];
|
||||||
const misc =
|
const misc = miscNames[i.name] || miscNames[i.name.replace(/\d+X\s*/, "")];
|
||||||
(miscNames as StringDictionary)[i.name] || (miscNames as StringDictionary)[i.name.replace(/\d+X\s*/, "")];
|
const resource = resourceNames[i.name] || resourceNames[i.name.replace(/\d+X\s*/, "")];
|
||||||
const resource =
|
|
||||||
(resourceNames as StringDictionary)[i.name] ||
|
|
||||||
(resourceNames as StringDictionary)[i.name.replace(/\d+X\s*/, "")];
|
|
||||||
const relic =
|
const relic =
|
||||||
(relicNames as StringDictionary)[i.name.replace("Relic", "Exceptional")] ||
|
relicNames[i.name.replace("Relic", "Exceptional")] ||
|
||||||
(relicNames as StringDictionary)[i.name.replace("Relic (Radiant)", "Radiant")];
|
relicNames[i.name.replace("Relic (Radiant)", "Radiant")];
|
||||||
|
|
||||||
if (mod) {
|
if (mod) {
|
||||||
if (!InventoryChanges.RawUpgrades) InventoryChanges.RawUpgrades = [];
|
if (!InventoryChanges.RawUpgrades) InventoryChanges.RawUpgrades = [];
|
||||||
@ -250,4 +236,38 @@ const formatRewardsToInventoryType = (
|
|||||||
return { InventoryChanges, MissionRewards };
|
return { InventoryChanges, MissionRewards };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
const _missionRewardsCheckAllNamings = () => {
|
||||||
|
let tempRewards: Reward[] = [];
|
||||||
|
Object.values(missionsDropTable as { [key: string]: Reward[] }).forEach(i => {
|
||||||
|
i.forEach(j => {
|
||||||
|
tempRewards.push(j);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
tempRewards = tempRewards
|
||||||
|
.filter(i => !modNames[i.name])
|
||||||
|
|
||||||
|
.filter(i => !skinNames[i.name])
|
||||||
|
.filter(i => !miscNames[i.name])
|
||||||
|
.filter(i => !miscNames[i.name.replace(/\d+X\s*/, "")])
|
||||||
|
.filter(i => !resourceNames[i.name])
|
||||||
|
.filter(i => !resourceNames[i.name.replace(/\d+X\s*/, "")])
|
||||||
|
.filter(i => !gearNames[i.name])
|
||||||
|
.filter(i => !arcaneNames[i.name])
|
||||||
|
.filter(i => !craftNames[i.name])
|
||||||
|
.filter(i => {
|
||||||
|
// return true;
|
||||||
|
// return !relicNames[i.name.replace("Relic", "Exceptional")];
|
||||||
|
// console.log(i.name.replace("Relic", "Exceptional"));
|
||||||
|
return (
|
||||||
|
!relicNames[i.name.replace("Relic", "Exceptional")] &&
|
||||||
|
!relicNames[i.name.replace("Relic (Radiant)", "Radiant")]
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.filter(i => !i.name.includes(" Endo"))
|
||||||
|
.filter(i => !i.name.includes(" Credits Cache") && !i.name.includes("Return: "));
|
||||||
|
console.log(tempRewards);
|
||||||
|
};
|
||||||
|
// _missionRewardsCheckAllNamings();
|
||||||
|
|
||||||
export { missionInventoryUpdateController };
|
export { missionInventoryUpdateController };
|
||||||
|
@ -73,3 +73,18 @@ export interface MissionInventoryUpdate {
|
|||||||
|
|||||||
RewardInfo?: MissionInventoryUpdateRewardInfo;
|
RewardInfo?: MissionInventoryUpdateRewardInfo;
|
||||||
FusionPoints?: number;
|
FusionPoints?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
export interface MissionRewardResponse {
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
StoreItem?: string;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
TypeName: string;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
UpgradeLevel: number;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
ItemCount: number;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
TweetText: string;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
ProductCategory: string;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
}
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
export interface Reward {
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
name: string;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
chance: number;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
rotation?: string;
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
}
|
||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
|||||||
|
|||||||
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
![]() instead of this use /types/commonTypes Oid type instead of this use /types/commonTypes Oid type
|
@ -1,4 +1,4 @@
|
|||||||
import Items, { Item, Weapon } from "warframe-items";
|
import Items, { Category, Item, Warframe, Weapon } from "warframe-items";
|
||||||
|
|
||||||
type MinWeapon = Omit<Weapon, "patchlogs">;
|
type MinWeapon = Omit<Weapon, "patchlogs">;
|
||||||
type MinItem = Omit<Item, "patchlogs">;
|
type MinItem = Omit<Item, "patchlogs">;
|
||||||
@ -16,3 +16,39 @@ export const items: MinItem[] = new Items({ category: ["All"] }).map(item => {
|
|||||||
delete next.patchlogs;
|
delete next.patchlogs;
|
||||||
return next;
|
return next;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const getNamesObj = (category: Category) =>
|
||||||
|
new Items({ category: [category] }).reduce((acc, i) => {
|
||||||
|
acc[i.name!] = category !== "Mods" ? i.uniqueName! : i.uniqueName!.replace("'S", "'s");
|
||||||
|
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(j => j.components || [])
|
||||||
|
.filter(i => i.drops && i.drops[0])
|
||||||
|
.map(i => [i.drops![0].type, i.uniqueName])
|
||||||
|
);
|
||||||
|
craftNames["Forma Blueprint"] = "/Lotus/StoreItems/Types/Items/MiscItems/Forma";
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
import missionsDropTable from '../missions-drop-table.json' assert { type: "json" };
|
|
||||||
import modNames from '../mod-names.json' assert { type: "json" };
|
|
||||||
import relicNames from '../relic-names.json' assert { type: "json" };
|
|
||||||
import skinNames from '../skin-names.json' assert { type: "json" };
|
|
||||||
import miscNames from '../misc-names.json' assert { type: "json" };
|
|
||||||
import resourceNames from '../resource-names.json' assert { type: "json" };
|
|
||||||
import gearNames from '../gear-names.json' assert { type: "json" };
|
|
||||||
import arcaneNames from '../arcane-names.json' assert { type: "json" };
|
|
||||||
import craftNames from '../craft-names.json' assert { type: "json" };
|
|
||||||
|
|
||||||
let tempRewards = [];
|
|
||||||
missionsDropTable.forEach(i=>{
|
|
||||||
i.rewards.forEach(j=>{
|
|
||||||
tempRewards.push(j);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
tempRewards = tempRewards
|
|
||||||
.filter(i=>!modNames[i.name])
|
|
||||||
.filter(i=>!relicNames[i.name.replace('Relic','Exceptional')] && !relicNames[i.name.replace('Relic (Radiant)','Radiant')])
|
|
||||||
.filter(i=>!skinNames[i.name])
|
|
||||||
.filter(i=>!miscNames[i.name])
|
|
||||||
.filter(i=>!miscNames[i.name.replace(/\d+X\s*/, '')])
|
|
||||||
.filter(i=>!resourceNames[i.name])
|
|
||||||
.filter(i=>!resourceNames[i.name.replace(/\d+X\s*/, '')])
|
|
||||||
.filter(i=>!gearNames[i.name])
|
|
||||||
.filter(i=>!arcaneNames[i.name])
|
|
||||||
.filter(i=>!craftNames[i.name])
|
|
||||||
.filter(i=>!i.name.includes(' Endo'))
|
|
||||||
.filter(i=>!i.name.includes(' Credits Cache') && !i.name.includes('Return: '));
|
|
||||||
console.log(tempRewards);
|
|
@ -1,89 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
import Warframes from './Warframes.json' assert { type: "json" };
|
|
||||||
import Gear from './Gear.json' assert { type: "json" };
|
|
||||||
import Melee from './Melee.json' assert { type: "json" };
|
|
||||||
import Primary from './Primary.json' assert { type: "json" };
|
|
||||||
import Secondary from './Secondary.json' assert { type: "json" };
|
|
||||||
import Sentinels from './Sentinels.json' assert { type: "json" };
|
|
||||||
import Misc from './Misc.json' assert { type: "json" };
|
|
||||||
import ArchGun from './Arch-Gun.json' assert { type: "json" };
|
|
||||||
import ArchMelee from './Arch-Melee.json' assert { type: "json" };
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const formated = {};
|
|
||||||
Warframes.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
Gear.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
Melee.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
Primary.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
Secondary.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
Sentinels.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
Misc.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
ArchGun.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
ArchMelee.forEach(j=>{
|
|
||||||
j.components?.forEach(i=>{
|
|
||||||
if(i.drops && i.drops[0]){
|
|
||||||
formated[i.drops[0].type] = i.uniqueName;
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
formated['Forma Blueprint'] = "/Lotus/StoreItems/Types/Items/MiscItems/Forma";
|
|
||||||
console.log(formated);
|
|
||||||
|
|
||||||
const fileBody = JSON.stringify(formated);
|
|
||||||
fs.writeFile("./craft-names.json", fileBody, err => {
|
|
||||||
if (err) {
|
|
||||||
console.log(err.message);
|
|
||||||
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('data written to file');
|
|
||||||
});
|
|
@ -1,20 +0,0 @@
|
|||||||
/* eslint-disable */
|
|
||||||
import mods from './Arch-Melee.json' assert { type: "json" };
|
|
||||||
import fs from 'fs';
|
|
||||||
|
|
||||||
const formatedMods = {};
|
|
||||||
for (let index = 0; index < mods.length; index++) {
|
|
||||||
const {name, uniqueName} = mods[index];
|
|
||||||
formatedMods[name] = uniqueName;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileBody = JSON.stringify(formatedMods);
|
|
||||||
fs.writeFile("./arch-melee-names.json", fileBody, err => {
|
|
||||||
if (err) {
|
|
||||||
console.log(err.message);
|
|
||||||
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('data written to file');
|
|
||||||
});
|
|
instead of this use /types/commonTypes Oid type
instead of this use /types/commonTypes Oid type