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: 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
Sainan <63328889+Sainan@users.noreply.github.com>
提交于

代码差异

7 个文件 +43 -10
Modified src/controllers/api/dronesController.ts +1 -1
@@ -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 {
Modified src/controllers/api/sellController.ts +11 -1
@@ -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 });
Modified src/models/inventoryModels/inventoryModel.ts +5 -1
@@ -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.
Modified src/services/importService.ts +2 -1
@@ -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
Modified src/services/inventoryService.ts +15 -0
@@ -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) {
Modified src/types/equipmentTypes.ts +7 -5
@@ -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 {
Modified src/types/purchaseTypes.ts +2 -1
@@ -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;