feat: crafting infested cats and dogs
Some checks failed
Build / build (20) (push) Failing after 40s
Build / build (22) (push) Failing after 1m13s
Build / build (18) (push) Failing after 1m18s
Build / build (18) (pull_request) Failing after 41s
Build / build (20) (pull_request) Failing after 1m12s
Build / build (22) (pull_request) Failing after 1m11s

This commit is contained in:
Sainan 2025-03-27 21:43:50 +01:00
parent a56ff89bb9
commit f795749435
4 changed files with 86 additions and 13 deletions

View File

@ -8,11 +8,17 @@ import {
addMiscItems, addMiscItems,
applyDefaultUpgrades, applyDefaultUpgrades,
occupySlot, occupySlot,
productCategoryToInventoryBin productCategoryToInventoryBin,
combineInventoryChanges,
addSpecialItem
} from "@/src/services/inventoryService"; } from "@/src/services/inventoryService";
import { IInventoryChanges } from "@/src/types/purchaseTypes"; import { IInventoryChanges } from "@/src/types/purchaseTypes";
import { getDefaultUpgrades } from "@/src/services/itemDataService"; import { getDefaultUpgrades } from "@/src/services/itemDataService";
import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper"; import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper";
import { IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes";
import { getRandomInt } from "@/src/services/rngService";
import { ExportSentinels } from "warframe-public-export-plus";
import { Status } from "@/src/types/inventoryTypes/inventoryTypes";
interface IModularCraftRequest { interface IModularCraftRequest {
WeaponType: string; WeaponType: string;
@ -29,11 +35,66 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res)
const inventory = await getInventory(accountId); const inventory = await getInventory(accountId);
const defaultUpgrades = getDefaultUpgrades(data.Parts); const defaultUpgrades = getDefaultUpgrades(data.Parts);
const configs = applyDefaultUpgrades(inventory, defaultUpgrades); const defaultOverwrites: Partial<IEquipmentDatabase> = {
const inventoryChanges: IInventoryChanges = { Configs: applyDefaultUpgrades(inventory, defaultUpgrades)
...addEquipment(inventory, category, data.WeaponType, data.Parts, {}, { Configs: configs }),
...occupySlot(inventory, productCategoryToInventoryBin(category)!, false)
}; };
const inventoryChanges: IInventoryChanges = {};
if (category == "KubrowPets") {
const traits =
data.WeaponType.indexOf("Catbrow") != -1
? {
BaseColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareBase",
SecondaryColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareSecondary",
TertiaryColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareTertiary",
AccentColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareAccent",
EyeColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareEyes",
FurPattern: "/Lotus/Types/Game/InfestedKavatPet/Patterns/InfestedCritterPatternDefault",
Personality: data.WeaponType,
BodyType: "/Lotus/Types/Game/CatbrowPet/BodyTypes/InfestedCatbrowPetRegularBodyType",
Head: {
"/Lotus/Types/Friendly/Pets/CreaturePets/ArmoredInfestedCatbrowPetPowerSuit":
"/Lotus/Types/Game/InfestedKavatPet/Heads/InfestedCritterHeadC",
"/Lotus/Types/Friendly/Pets/CreaturePets/HornedInfestedCatbrowPetPowerSuit":
"/Lotus/Types/Game/InfestedKavatPet/Heads/InfestedCritterHeadB",
"/Lotus/Types/Friendly/Pets/CreaturePets/VulpineInfestedCatbrowPetPowerSuit":
"/Lotus/Types/Game/InfestedKavatPet/Heads/InfestedCritterHeadA"
}[data.WeaponType]
}
: {
BaseColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareBase",
SecondaryColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareSecondary",
TertiaryColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareTertiary",
AccentColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareAccent",
EyeColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareEyes",
FurPattern: "/Lotus/Types/Game/InfestedPredatorPet/Patterns/InfestedPredatorPatternDefault",
Personality: data.WeaponType,
BodyType: "/Lotus/Types/Game/KubrowPet/BodyTypes/InfestedKubrowPetBodyType",
Head: {
"/Lotus/Types/Friendly/Pets/CreaturePets/MedjayPredatorKubrowPetPowerSuit":
"/Lotus/Types/Game/InfestedPredatorPet/Heads/InfestedPredatorHeadA",
"/Lotus/Types/Friendly/Pets/CreaturePets/PharaohPredatorKubrowPetPowerSuit":
"/Lotus/Types/Game/InfestedPredatorPet/Heads/InfestedPredatorHeadB",
"/Lotus/Types/Friendly/Pets/CreaturePets/VizierPredatorKubrowPetPowerSuit":
"/Lotus/Types/Game/InfestedPredatorPet/Heads/InfestedPredatorHeadC"
}[data.WeaponType]
};
defaultOverwrites.Details = {
HasCollar: true,
IsMale: !!getRandomInt(0, 1),
Size: 0.7 + Math.random() * 0.3,
DominantTraits: traits,
RecessiveTraits: traits
};
// Only save mutagen & antigen in the Modularparts.
defaultOverwrites.ModularParts = [data.Parts[1], data.Parts[2]];
for (const specialItem of ExportSentinels[data.WeaponType].exalted!) {
addSpecialItem(inventory, specialItem, inventoryChanges);
}
}
addEquipment(inventory, category, data.WeaponType, data.Parts, inventoryChanges, defaultOverwrites);
combineInventoryChanges(inventoryChanges, occupySlot(inventory, productCategoryToInventoryBin(category)!, false));
if (defaultUpgrades) { if (defaultUpgrades) {
inventoryChanges.RawUpgrades = defaultUpgrades.map(x => ({ ItemType: x.ItemType, ItemCount: 1 })); inventoryChanges.RawUpgrades = defaultUpgrades.map(x => ({ ItemType: x.ItemType, ItemCount: 1 }));
} }
@ -48,7 +109,11 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res)
} }
const currencyChanges = updateCurrency( const currencyChanges = updateCurrency(
inventory, inventory,
category == "Hoverboards" || category == "MoaPets" || category == "LongGuns" || category == "Pistols" category == "Hoverboards" ||
category == "MoaPets" ||
category == "LongGuns" ||
category == "Pistols" ||
category == "KubrowPets"
? 5000 ? 5000
: 4000, // Definitely correct for Melee & OperatorAmps : 4000, // Definitely correct for Melee & OperatorAmps
false false

View File

@ -15,5 +15,11 @@ export const modularWeaponTypes: Record<string, TEquipmentKey> = {
"/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit": "MoaPets", "/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit": "MoaPets",
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit": "MoaPets", "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit": "MoaPets",
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit": "MoaPets", "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit": "MoaPets",
"/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit": "MoaPets" "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit": "MoaPets",
"/Lotus/Types/Friendly/Pets/CreaturePets/ArmoredInfestedCatbrowPetPowerSuit": "KubrowPets",
"/Lotus/Types/Friendly/Pets/CreaturePets/HornedInfestedCatbrowPetPowerSuit": "KubrowPets",
"/Lotus/Types/Friendly/Pets/CreaturePets/VulpineInfestedCatbrowPetPowerSuit": "KubrowPets",
"/Lotus/Types/Friendly/Pets/CreaturePets/MedjayPredatorKubrowPetPowerSuit": "KubrowPets",
"/Lotus/Types/Friendly/Pets/CreaturePets/PharaohPredatorKubrowPetPowerSuit": "KubrowPets",
"/Lotus/Types/Friendly/Pets/CreaturePets/VizierPredatorKubrowPetPowerSuit": "KubrowPets"
}; };

View File

@ -815,7 +815,9 @@ detailsSchema.set("toJSON", {
const db = returnedObject as IKubrowPetDetailsDatabase; const db = returnedObject as IKubrowPetDetailsDatabase;
const client = returnedObject as IKubrowPetDetailsClient; const client = returnedObject as IKubrowPetDetailsClient;
client.HatchDate = toMongoDate(db.HatchDate); if (db.HatchDate) {
client.HatchDate = toMongoDate(db.HatchDate);
}
} }
}); });

View File

@ -679,12 +679,12 @@ export enum KubrowPetPrintItemType {
} }
export interface IKubrowPetDetailsDatabase { export interface IKubrowPetDetailsDatabase {
Name: string; Name?: string;
IsPuppy: boolean; IsPuppy?: boolean;
HasCollar: boolean; HasCollar: boolean;
PrintsRemaining: number; PrintsRemaining?: number;
Status: Status; Status?: Status;
HatchDate: Date; HatchDate?: Date;
DominantTraits: ITraits; DominantTraits: ITraits;
RecessiveTraits: ITraits; RecessiveTraits: ITraits;
IsMale: boolean; IsMale: boolean;