forked from OpenWF/SpaceNinjaServer
		
	feat: crafting infested cats and dogs (#1352)
Reviewed-on: OpenWF/SpaceNinjaServer#1352 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									eb332d5e32
								
							
						
					
					
						commit
						ae5a540975
					
				@ -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,67 @@ 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,
 | 
				
			||||||
 | 
					            Status: Status.StatusStasis,
 | 
				
			||||||
 | 
					            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 +110,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
 | 
				
			||||||
 | 
				
			|||||||
@ -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"
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -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);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -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;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user