返回提交历史
Modified
src/controllers/api/dronesController.ts
+1
-1
Modified
src/controllers/api/sellController.ts
+11
-1
Modified
src/models/inventoryModels/inventoryModel.ts
+5
-1
Modified
src/services/importService.ts
+2
-1
Modified
src/services/inventoryService.ts
+15
-0
Modified
src/types/equipmentTypes.ts
+7
-5
Modified
src/types/purchaseTypes.ts
+2
-1
XFEstudio/SpaceNinjaServer
feat: bayonets (#3148)
Closes #3138 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3148 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
f0db3a97
代码差异
7 个文件
+43
-10
@@ -94,7 +94,7 @@ export const dronesController: RequestHandler = async (req, res) => {
94
94
inventory.Drones.pull({ _id: req.query.collectDroneId as string });
95
95
inventoryChanges.RemovedIdItems = [
96
96
{
97
ItemId: { $oid: req.query.collectDroneId }
97
ItemId: { $oid: req.query.collectDroneId as string }
98
98
}
99
99
];
100
100
} else {
@@ -18,7 +18,7 @@ import { ExportDojoRecipes } from "warframe-public-export-plus";
18
18
import type { IInventoryChanges } from "../../types/purchaseTypes.ts";
19
19
import type { TInventoryDatabaseDocument } from "../../models/inventoryModels/inventoryModel.ts";
20
20
import { broadcastInventoryUpdate } from "../../services/wsService.ts";
21
import { parseFusionTreasure } from "../../helpers/inventoryHelpers.ts";
21
import { parseFusionTreasure, toOid } from "../../helpers/inventoryHelpers.ts";
22
22
import { logger } from "../../utils/logger.ts";
23
23
24
24
export const sellController: RequestHandler = async (req, res) => {
@@ -50,6 +50,9 @@ export const sellController: RequestHandler = async (req, res) => {
50
50
}
51
51
for (const key of Object.keys(payload.Items)) {
52
52
requiredFields.add(key as keyof TInventoryDatabaseDocument);
53
if (key == "LongGuns") {
54
requiredFields.add("Melee");
55
}
53
56
}
54
57
if (requiredFields.has("Upgrades")) {
55
58
requiredFields.add("RawUpgrades");
@@ -136,6 +139,13 @@ export const sellController: RequestHandler = async (req, res) => {
136
139
break;
137
140
case "LongGuns":
138
141
payload.Items.LongGuns.forEach(sellItem => {
142
const item = inventory.LongGuns.id(sellItem.String)!;
143
if (item.AltWeaponModeId) {
144
inventory.Melee.pull({ _id: item.AltWeaponModeId });
145
freeUpSlot(inventory, InventorySlot.WEAPONS);
146
inventoryChanges.RemovedIdItems ??= [];
147
inventoryChanges.RemovedIdItems.push({ ItemId: toOid(item.AltWeaponModeId) });
148
}
139
149
inventory.LongGuns.pull({ _id: sellItem.String });
140
150
freeUpSlot(inventory, InventorySlot.WEAPONS);
141
151
});
@@ -1125,7 +1125,8 @@ const EquipmentSchema = new Schema<IEquipmentDatabase>(
1125
1125
CrewMembers: crewShipMembersSchema,
1126
1126
Details: detailsSchema,
1127
1127
Favorite: Boolean,
1128
IsNew: Boolean
1128
IsNew: Boolean,
1129
AltWeaponModeId: Types.ObjectId
1129
1130
},
1130
1131
{ id: false }
1131
1132
);
@@ -1152,6 +1153,9 @@ EquipmentSchema.set("toJSON", {
1152
1153
if (db.UmbraDate) {
1153
1154
client.UmbraDate = toMongoDate(db.UmbraDate);
1154
1155
}
1156
if (db.AltWeaponModeId) {
1157
client.AltWeaponModeId = toOid(db.AltWeaponModeId);
1158
}
1155
1159
1156
1160
if (client.ArchonCrystalUpgrades) {
1157
1161
// For some reason, mongoose turns empty objects here into nulls, so we have to fix it.
@@ -102,7 +102,8 @@ const convertEquipment = (client: IEquipmentClient): IEquipmentDatabase => {
102
102
Object.entries(obj).filter(([_, value]) => !Array.isArray(value) || value.length > 0)
103
103
)
104
104
)
105
: []
105
: [],
106
AltWeaponModeId: client.AltWeaponModeId ? new Types.ObjectId(client.AltWeaponModeId.$oid) : undefined
106
107
};
107
108
};
108
109
@@ -603,6 +603,21 @@ export const addItem = async (
603
603
}
604
604
const inventoryChanges: IInventoryChanges = {};
605
605
defaultOverwrites.Configs = applyDefaultUpgrades(inventory, weapon.defaultUpgrades, inventoryChanges);
606
if (typeName == "/Lotus/Weapons/Tenno/Bayonet/TnBayonetRifleWeapon") {
607
defaultOverwrites._id = new Types.ObjectId();
608
defaultOverwrites.AltWeaponModeId = new Types.ObjectId();
609
addEquipment(
610
inventory,
611
"Melee",
612
"/Lotus/Weapons/Tenno/Bayonet/TnBayonetMeleeWeapon",
613
{
614
_id: defaultOverwrites.AltWeaponModeId,
615
AltWeaponModeId: defaultOverwrites._id,
616
IsNew: false // Not 100% sure if this is faithful, but the client seems to act a bit weird when it's set on the melee weapon.
617
},
618
inventoryChanges
619
);
620
}
606
621
addEquipment(inventory, weapon.productCategory, typeName, defaultOverwrites, inventoryChanges);
607
622
if (weapon.additionalItems) {
608
623
for (const item of weapon.additionalItems) {
@@ -37,7 +37,7 @@ export interface IEquipmentDatabase {
37
37
Configs: IItemConfigDatabase[];
38
38
UpgradeVer?: number;
39
39
XP?: number;
40
Features?: number;
40
Features?: number; // >= 24.4.0
41
41
Polarized?: number;
42
42
Polarity?: IPolarity[];
43
43
FocusLens?: string;
@@ -63,6 +63,7 @@ export interface IEquipmentDatabase {
63
63
Details?: IKubrowPetDetailsDatabase;
64
64
Favorite?: boolean;
65
65
IsNew?: boolean;
66
AltWeaponModeId?: Types.ObjectId;
66
67
_id: Types.ObjectId;
67
68
}
68
69
@@ -77,6 +78,7 @@ export interface IEquipmentClient extends Omit<
77
78
| "Weapon"
78
79
| "CrewMembers"
79
80
| "Details"
81
| "AltWeaponModeId"
80
82
> {
81
83
ItemId: IOidWithLegacySupport;
82
84
Configs: IItemConfig[];
@@ -87,10 +89,10 @@ export interface IEquipmentClient extends Omit<
87
89
Weapon?: ICrewShipWeaponClient;
88
90
CrewMembers?: ICrewShipMembersClient;
89
91
Details?: IKubrowPetDetailsClient;
90
// For Pre-U24.4.0 builds
91
UnlockLevel?: number;
92
UtilityUnlocked?: number;
93
Gild?: boolean;
92
UnlockLevel?: number; // < 24.4.0
93
UtilityUnlocked?: number; // < 24.4.0
94
Gild?: boolean; // < 24.4.0
95
AltWeaponModeId?: IOid; // for bayonets (> U41)
94
96
}
95
97
96
98
export interface IArchonCrystalUpgrade {
@@ -1,4 +1,4 @@
1
import type { ITypeCount } from "./commonTypes.ts";
1
import type { IOid, ITypeCount } from "./commonTypes.ts";
2
2
import type { IEquipmentClient } from "./equipmentTypes.ts";
3
3
import type {
4
4
IDroneClient,
@@ -68,6 +68,7 @@ export type IInventoryChanges = {
68
68
} & {
69
69
[_ in TEquipmentKey]?: IEquipmentClient[];
70
70
} & {
71
RemovedIdItems?: { ItemId: IOid }[];
71
72
RegularCredits?: number;
72
73
PremiumCredits?: number;
73
74
PremiumCreditsFree?: number;