返回提交历史
Modified
src/controllers/api/modularWeaponCraftingController.ts
+72
-6
Modified
src/helpers/modularWeaponHelper.ts
+7
-1
Modified
src/models/inventoryModels/inventoryModel.ts
+3
-1
Modified
src/types/inventoryTypes/inventoryTypes.ts
+4
-4
XFEstudio/SpaceNinjaServer
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
代码差异
4 个文件
+86
-12
@@ -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
@@ -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
};
@@ -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
@@ -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;