XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFESpaceNinjaServer

feat: crafting infested cats and dogs (#1352)

Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1352 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

ae5a5409
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

4 个文件 +86 -12
Modified src/controllers/api/modularWeaponCraftingController.ts +72 -6
@@ -8,11 +8,17 @@ import {
8 8 addMiscItems,
9 9 applyDefaultUpgrades,
10 10 occupySlot,
11 productCategoryToInventoryBin
11 productCategoryToInventoryBin,
12 combineInventoryChanges,
13 addSpecialItem
12 14 } from "@/src/services/inventoryService";
13 15 import { IInventoryChanges } from "@/src/types/purchaseTypes";
14 16 import { getDefaultUpgrades } from "@/src/services/itemDataService";
15 17 import { modularWeaponTypes } from "@/src/helpers/modularWeaponHelper";
18 import { IEquipmentDatabase } from "@/src/types/inventoryTypes/commonInventoryTypes";
19 import { getRandomInt } from "@/src/services/rngService";
20 import { ExportSentinels } from "warframe-public-export-plus";
21 import { Status } from "@/src/types/inventoryTypes/inventoryTypes";
16 22
17 23 interface IModularCraftRequest {
18 24 WeaponType: string;
@@ -29,11 +35,67 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res)
29 35 const inventory = await getInventory(accountId);
30 36
31 37 const defaultUpgrades = getDefaultUpgrades(data.Parts);
32 const configs = applyDefaultUpgrades(inventory, defaultUpgrades);
33 const inventoryChanges: IInventoryChanges = {
34 ...addEquipment(inventory, category, data.WeaponType, data.Parts, {}, { Configs: configs }),
35 ...occupySlot(inventory, productCategoryToInventoryBin(category)!, false)
38 const defaultOverwrites: Partial<IEquipmentDatabase> = {
39 Configs: applyDefaultUpgrades(inventory, defaultUpgrades)
36 40 };
41 const inventoryChanges: IInventoryChanges = {};
42 if (category == "KubrowPets") {
43 const traits =
44 data.WeaponType.indexOf("Catbrow") != -1
45 ? {
46 BaseColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareBase",
47 SecondaryColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareSecondary",
48 TertiaryColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareTertiary",
49 AccentColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareAccent",
50 EyeColor: "/Lotus/Types/Game/InfestedKavatPet/Colors/InfestedKavatColorRareEyes",
51 FurPattern: "/Lotus/Types/Game/InfestedKavatPet/Patterns/InfestedCritterPatternDefault",
52 Personality: data.WeaponType,
53 BodyType: "/Lotus/Types/Game/CatbrowPet/BodyTypes/InfestedCatbrowPetRegularBodyType",
54 Head: {
55 "/Lotus/Types/Friendly/Pets/CreaturePets/ArmoredInfestedCatbrowPetPowerSuit":
56 "/Lotus/Types/Game/InfestedKavatPet/Heads/InfestedCritterHeadC",
57 "/Lotus/Types/Friendly/Pets/CreaturePets/HornedInfestedCatbrowPetPowerSuit":
58 "/Lotus/Types/Game/InfestedKavatPet/Heads/InfestedCritterHeadB",
59 "/Lotus/Types/Friendly/Pets/CreaturePets/VulpineInfestedCatbrowPetPowerSuit":
60 "/Lotus/Types/Game/InfestedKavatPet/Heads/InfestedCritterHeadA"
61 }[data.WeaponType]
62 }
63 : {
64 BaseColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareBase",
65 SecondaryColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareSecondary",
66 TertiaryColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareTertiary",
67 AccentColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareAccent",
68 EyeColor: "/Lotus/Types/Game/InfestedPredatorPet/Colors/InfestedPredatorColorRareEyes",
69 FurPattern: "/Lotus/Types/Game/InfestedPredatorPet/Patterns/InfestedPredatorPatternDefault",
70 Personality: data.WeaponType,
71 BodyType: "/Lotus/Types/Game/KubrowPet/BodyTypes/InfestedKubrowPetBodyType",
72 Head: {
73 "/Lotus/Types/Friendly/Pets/CreaturePets/MedjayPredatorKubrowPetPowerSuit":
74 "/Lotus/Types/Game/InfestedPredatorPet/Heads/InfestedPredatorHeadA",
75 "/Lotus/Types/Friendly/Pets/CreaturePets/PharaohPredatorKubrowPetPowerSuit":
76 "/Lotus/Types/Game/InfestedPredatorPet/Heads/InfestedPredatorHeadB",
77 "/Lotus/Types/Friendly/Pets/CreaturePets/VizierPredatorKubrowPetPowerSuit":
78 "/Lotus/Types/Game/InfestedPredatorPet/Heads/InfestedPredatorHeadC"
79 }[data.WeaponType]
80 };
81 defaultOverwrites.Details = {
82 HasCollar: true,
83 Status: Status.StatusStasis,
84 IsMale: !!getRandomInt(0, 1),
85 Size: 0.7 + Math.random() * 0.3,
86 DominantTraits: traits,
87 RecessiveTraits: traits
88 };
89
90 // Only save mutagen & antigen in the ModularParts.
91 defaultOverwrites.ModularParts = [data.Parts[1], data.Parts[2]];
92
93 for (const specialItem of ExportSentinels[data.WeaponType].exalted!) {
94 addSpecialItem(inventory, specialItem, inventoryChanges);
95 }
96 }
97 addEquipment(inventory, category, data.WeaponType, data.Parts, inventoryChanges, defaultOverwrites);
98 combineInventoryChanges(inventoryChanges, occupySlot(inventory, productCategoryToInventoryBin(category)!, false));
37 99 if (defaultUpgrades) {
38 100 inventoryChanges.RawUpgrades = defaultUpgrades.map(x => ({ ItemType: x.ItemType, ItemCount: 1 }));
39 101 }
@@ -48,7 +110,11 @@ export const modularWeaponCraftingController: RequestHandler = async (req, res)
48 110 }
49 111 const currencyChanges = updateCurrency(
50 112 inventory,
51 category == "Hoverboards" || category == "MoaPets" || category == "LongGuns" || category == "Pistols"
113 category == "Hoverboards" ||
114 category == "MoaPets" ||
115 category == "LongGuns" ||
116 category == "Pistols" ||
117 category == "KubrowPets"
52 118 ? 5000
53 119 : 4000, // Definitely correct for Melee & OperatorAmps
54 120 false
Modified src/helpers/modularWeaponHelper.ts +7 -1
@@ -15,5 +15,11 @@ export const modularWeaponTypes: Record<string, TEquipmentKey> = {
15 15 "/Lotus/Types/Friendly/Pets/MoaPets/MoaPetPowerSuit": "MoaPets",
16 16 "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetAPowerSuit": "MoaPets",
17 17 "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetBPowerSuit": "MoaPets",
18 "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit": "MoaPets"
18 "/Lotus/Types/Friendly/Pets/ZanukaPets/ZanukaPetCPowerSuit": "MoaPets",
19 "/Lotus/Types/Friendly/Pets/CreaturePets/ArmoredInfestedCatbrowPetPowerSuit": "KubrowPets",
20 "/Lotus/Types/Friendly/Pets/CreaturePets/HornedInfestedCatbrowPetPowerSuit": "KubrowPets",
21 "/Lotus/Types/Friendly/Pets/CreaturePets/VulpineInfestedCatbrowPetPowerSuit": "KubrowPets",
22 "/Lotus/Types/Friendly/Pets/CreaturePets/MedjayPredatorKubrowPetPowerSuit": "KubrowPets",
23 "/Lotus/Types/Friendly/Pets/CreaturePets/PharaohPredatorKubrowPetPowerSuit": "KubrowPets",
24 "/Lotus/Types/Friendly/Pets/CreaturePets/VizierPredatorKubrowPetPowerSuit": "KubrowPets"
19 25 };
Modified src/models/inventoryModels/inventoryModel.ts +3 -1
@@ -815,7 +815,9 @@ detailsSchema.set("toJSON", {
815 815 const db = returnedObject as IKubrowPetDetailsDatabase;
816 816 const client = returnedObject as IKubrowPetDetailsClient;
817 817
818 client.HatchDate = toMongoDate(db.HatchDate);
818 if (db.HatchDate) {
819 client.HatchDate = toMongoDate(db.HatchDate);
820 }
819 821 }
820 822 });
821 823
Modified src/types/inventoryTypes/inventoryTypes.ts +4 -4
@@ -679,12 +679,12 @@ export enum KubrowPetPrintItemType {
679 679 }
680 680
681 681 export interface IKubrowPetDetailsDatabase {
682 Name: string;
683 IsPuppy: boolean;
682 Name?: string;
683 IsPuppy?: boolean;
684 684 HasCollar: boolean;
685 PrintsRemaining: number;
685 PrintsRemaining?: number;
686 686 Status: Status;
687 HatchDate: Date;
687 HatchDate?: Date;
688 688 DominantTraits: ITraits;
689 689 RecessiveTraits: ITraits;
690 690 IsMale: boolean;