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

SpaceNinjaServer

A simple server for a small space ninja game

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

XFEstudio/SpaceNinjaServer

fix: use fromOid in mapLegacyLoadoutConfig (#4098)

The recent refactor of getInventoryResponse made it so the oids are already in legacy format when this function is called, so the undocumented precondition of $oid format was unfulfilled. :( Closes #4096 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/4098 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>

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

代码差异

3 个文件 +30 -20
Modified src/controllers/api/inventoryController.ts +27 -17
@@ -1020,15 +1020,22 @@ const mapLegacyLoadoutConfig = (
1020 1020 buildLabel: string
1021 1021 ): ILoadoutConfigClientLegacy | undefined => {
1022 1022 // Loadout config mapping for U15 and below
1023 const normPreset = loadoutPresets.NORMAL.find(x => x.ItemId.$oid == inventory.CurrentLoadOutIds[0].toString());
1023 const normPreset = loadoutPresets.NORMAL.find(x => inventory.CurrentLoadOutIds[0].equals(fromOid(x.ItemId)));
1024 1024 if (normPreset) {
1025 const s = normPreset.s?.ItemId?.$oid ? inventory.Suits.id(normPreset.s.ItemId.$oid) : null;
1026 const p = normPreset.p?.ItemId?.$oid ? inventory.Pistols.id(normPreset.p.ItemId.$oid) : null;
1027 const l = normPreset.l?.ItemId?.$oid ? inventory.LongGuns.id(normPreset.l.ItemId.$oid) : null;
1028 const m = normPreset.m?.ItemId?.$oid ? inventory.Melee.id(normPreset.m.ItemId.$oid) : null;
1025 const sId = normPreset.s?.ItemId && fromOid(normPreset.s.ItemId);
1026 const pId = normPreset.p?.ItemId && fromOid(normPreset.p.ItemId);
1027 const lId = normPreset.l?.ItemId && fromOid(normPreset.l.ItemId);
1028 const mId = normPreset.m?.ItemId && fromOid(normPreset.m.ItemId);
1029 const s = sId ? inventory.Suits.id(sId) : null;
1030 const p = pId ? inventory.Pistols.id(pId) : null;
1031 const l = lId ? inventory.LongGuns.id(lId) : null;
1032 const m = mId ? inventory.Melee.id(mId) : null;
1029 1033 const loadoutConfig = {
1030 1034 ItemId: {
1031 $id: version_compare(buildLabel, gameToBuildVersion["14.0.0"]) < 0 ? "Current" : normPreset.ItemId.$oid
1035 $id:
1036 version_compare(buildLabel, gameToBuildVersion["14.0.0"]) < 0
1037 ? "Current"
1038 : fromOid(normPreset.ItemId)
1032 1039 },
1033 1040 Name: normPreset.n ?? "Default Loadout",
1034 1041 Presets: [
@@ -1077,14 +1084,14 @@ const mapLegacyLoadoutConfig = (
1077 1084
1078 1085 if (version_compare(buildLabel, "2013.03.18.00.00") >= 0) {
1079 1086 if (inventory.CurrentLoadOutIds.length > 1 && loadoutPresets.SENTINEL.length > 0) {
1080 const compPreset = loadoutPresets.SENTINEL.find(
1081 x => x.ItemId.$oid == inventory.CurrentLoadOutIds[1].toString()
1087 const compPreset = loadoutPresets.SENTINEL.find(x =>
1088 inventory.CurrentLoadOutIds[1].equals(fromOid(x.ItemId))
1082 1089 );
1083 1090 if (compPreset) {
1084 const s = compPreset.s?.ItemId?.$oid ? inventory.Sentinels.id(compPreset.s.ItemId.$oid) : null;
1085 const l = compPreset.l?.ItemId?.$oid
1086 ? inventory.SentinelWeapons.id(compPreset.l.ItemId.$oid)
1087 : null;
1091 const sId = compPreset.s?.ItemId && fromOid(compPreset.s.ItemId);
1092 const lId = compPreset.l?.ItemId && fromOid(compPreset.l.ItemId);
1093 const s = sId ? inventory.Sentinels.id(sId) : null;
1094 const l = lId ? inventory.SentinelWeapons.id(lId) : null;
1088 1095 loadoutConfig.Presets.push(
1089 1096 {
1090 1097 ItemId: { $id: s?._id.toString() ?? "ffffffffffffffffffffffff" },
@@ -1140,13 +1147,16 @@ const mapLegacyLoadoutConfig = (
1140 1147
1141 1148 if (version_compare(buildLabel, gameToBuildVersion["15.0.0"]) >= 0) {
1142 1149 if (inventory.CurrentLoadOutIds.length > 2 && loadoutPresets.ARCHWING.length > 0) {
1143 const archPreset = loadoutPresets.ARCHWING.find(
1144 x => x.ItemId.$oid == inventory.CurrentLoadOutIds[2].toString()
1150 const archPreset = loadoutPresets.ARCHWING.find(x =>
1151 inventory.CurrentLoadOutIds[2].equals(fromOid(x.ItemId))
1145 1152 );
1146 1153 if (archPreset) {
1147 const s = archPreset.s?.ItemId?.$oid ? inventory.SpaceSuits.id(archPreset.s.ItemId.$oid) : null;
1148 const l = archPreset.l?.ItemId?.$oid ? inventory.SpaceGuns.id(archPreset.l.ItemId.$oid) : null;
1149 const m = archPreset.m?.ItemId?.$oid ? inventory.SpaceMelee.id(archPreset.m.ItemId.$oid) : null;
1154 const sId = normPreset.s?.ItemId && fromOid(normPreset.s.ItemId);
1155 const pId = normPreset.p?.ItemId && fromOid(normPreset.p.ItemId);
1156 const mId = normPreset.m?.ItemId && fromOid(normPreset.m.ItemId);
1157 const s = sId ? inventory.SpaceSuits.id(sId) : null;
1158 const l = pId ? inventory.SpaceGuns.id(pId) : null;
1159 const m = mId ? inventory.SpaceMelee.id(mId) : null;
1150 1160 loadoutConfig.Presets.push(
1151 1161 {
1152 1162 ItemId: { $id: s?._id.toString() ?? "ffffffffffffffffffffffff" },
Modified src/controllers/dynamic/getProfileViewingDataController.ts +2 -2
@@ -7,7 +7,7 @@ import { Loadout } from "../../models/inventoryModels/loadoutModel.ts";
7 7 import { Account } from "../../models/loginModel.ts";
8 8 import { Stats } from "../../models/statsModel.ts";
9 9 import { allDailyAffiliationKeys } from "../../services/inventoryService.ts";
10 import type { IMongoDateWithLegacySupport, IOid, IOidWithLegacySupport } from "../../types/commonTypes.ts";
10 import type { IMongoDateWithLegacySupport, IOidWithLegacySupport } from "../../types/commonTypes.ts";
11 11 import type {
12 12 IAffiliation,
13 13 IAlignment,
@@ -249,7 +249,7 @@ interface IPlayerProfileViewingDataResult extends Partial<IDailyAffiliations>, I
249 249 AccountId: IOidWithLegacySupport;
250 250 DisplayName: string;
251 251 PlayerLevel: number;
252 LoadOutPreset?: Omit<ILoadoutConfigClient, "ItemId"> & { ItemId?: IOid };
252 LoadOutPreset?: Omit<ILoadoutConfigClient, "ItemId"> & { ItemId?: IOidWithLegacySupport };
253 253 LoadOutInventory: {
254 254 WeaponSkins: { ItemType: string }[];
255 255 Suits?: IEquipmentClient[];
Modified src/types/saveLoadoutTypes.ts +1 -1
@@ -143,7 +143,7 @@ export interface ILoadoutConfigClient {
143 143 m?: IEquipmentSelectionClient; // Melee weapon
144 144 h?: IEquipmentSelectionClient; // Gravimag weapon
145 145 a?: IEquipmentSelectionClient; // Necromech exalted weapon
146 ItemId: IOid;
146 ItemId: IOidWithLegacySupport;
147 147 Remove?: boolean; // when client wants to remove a config, it only includes ItemId & Remove.
148 148 }
149 149