返回提交历史
Modified
src/controllers/api/missionInventoryUpdateController.ts
+8
-2
Modified
src/controllers/api/updateChallengeProgressController.ts
+15
-9
Modified
src/services/missionInventoryUpdateService.ts
+21
-8
XFEstudio/SpaceNinjaServer
chore: provide ProcessedWeeklyMissionChallengeInfos when applicable (#4427)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/4427 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
415de944
代码差异
3 个文件
+44
-19
@@ -7,7 +7,11 @@ import {
7
7
addMissionRewards,
8
8
handleConservation
9
9
} from "../../services/missionInventoryUpdateService.ts";
10
import { dispatchPendingPremiumCredits, getInventory } from "../../services/inventoryService.ts";
10
import {
11
combineInventoryChanges,
12
dispatchPendingPremiumCredits,
13
getInventory
14
} from "../../services/inventoryService.ts";
11
15
import { getInventoryResponse } from "./inventoryController.ts";
12
16
import { logger } from "../../utils/logger.ts";
13
17
import type {
@@ -125,8 +129,10 @@ export const missionInventoryUpdateController: RequestHandler = async (req, res)
125
129
}
126
130
127
131
//TODO: figure out when to send inventory. it is needed for many cases.
132
if (inventoryChanges) {
133
combineInventoryChanges(inventoryUpdates.InventoryChanges, inventoryChanges);
134
}
128
135
const deltas: IMissionInventoryUpdateResponseRailjackInterstitial = {
129
InventoryChanges: inventoryChanges,
130
136
MissionRewards,
131
137
...credits,
132
138
...inventoryUpdates,
@@ -17,16 +17,18 @@ export const updateChallengeProgressController: RequestHandler = async (req, res
17
17
logger.debug(`challenge report:`, challenges);
18
18
19
19
const inventory = await getInventory(account._id, undefined); // Challenge completion can give any item in theory
20
let affiliationMods: IAffiliationMods[] = [];
21
const inventoryChanges: IInventoryChanges = {};
20
const response: IUpdateChallengeProgressResponse = {
21
AffiliationMods: [],
22
InventoryChanges: {}
23
};
22
24
if (challenges.ChallengeProgress) {
23
25
const buildLabel = getBuildLabel(req, account);
24
affiliationMods = await addChallenges(
26
response.AffiliationMods = await addChallenges(
25
27
buildLabel,
26
28
inventory,
27
29
challenges.ChallengeProgress,
28
30
challenges.SeasonChallengeCompletions,
29
inventoryChanges
31
response.InventoryChanges
30
32
);
31
33
}
32
34
for (const [key, value] of getEntriesUnsafe(challenges)) {
@@ -55,7 +57,8 @@ export const updateChallengeProgressController: RequestHandler = async (req, res
55
57
break;
56
58
57
59
case "WeeklyMissionChallengeInfo":
58
addKahlProgress(inventory, value, inventoryChanges);
60
addKahlProgress(inventory, value, response.InventoryChanges);
61
response.ProcessedWeeklyMissionChallengeInfos = value;
59
62
break;
60
63
61
64
case "ChallengeProgress":
@@ -69,10 +72,7 @@ export const updateChallengeProgressController: RequestHandler = async (req, res
69
72
}
70
73
await inventory.save();
71
74
72
res.json({
73
AffiliationMods: affiliationMods,
74
InventoryChanges: inventoryChanges // U41+
75
});
75
res.json(response);
76
76
};
77
77
78
78
interface IUpdateChallengeProgressRequest {
@@ -85,3 +85,9 @@ interface IUpdateChallengeProgressRequest {
85
85
WeeklyMissionChallengeInfo?: IWeeklyMissionChallengeInfo[];
86
86
crossPlaySetting?: string;
87
87
}
88
89
interface IUpdateChallengeProgressResponse {
90
AffiliationMods: IAffiliationMods[];
91
InventoryChanges: IInventoryChanges; // U41+
92
ProcessedWeeklyMissionChallengeInfos?: IWeeklyMissionChallengeInfo[];
93
}
@@ -18,7 +18,12 @@ import type { IMissionInventoryUpdateRequest, IRewardInfo } from "../types/reque
18
18
import { logger } from "../utils/logger.ts";
19
19
import type { IRngResult } from "./rngService.ts";
20
20
import { SRng, generateRewardSeed, getRandomElement, getRandomInt, getRandomReward } from "./rngService.ts";
21
import type { IDailyAffiliations, IMission, TEquipmentKey } from "../types/inventoryTypes/inventoryTypes.ts";
21
import type {
22
IDailyAffiliations,
23
IMission,
24
IWeeklyMissionChallengeInfo,
25
TEquipmentKey
26
} from "../types/inventoryTypes/inventoryTypes.ts";
22
27
import { equipmentKeys } from "../types/inventoryTypes/inventoryTypes.ts";
23
28
import {
24
29
addBooster,
@@ -227,13 +232,20 @@ const getRandomRewardByChance = (pool: IReward[], rng?: SRng): IRngResult | unde
227
232
//type TignoredInventoryUpdateKeys = (typeof ignoredInventoryUpdateKeys)[number];
228
233
//const knownUnhandledKeys: readonly string[] = ["test"] as const; // for unimplemented but important keys
229
234
235
interface MissionInventoryUpdatesReturnType {
236
InventoryChanges: IInventoryChanges;
237
ProcessedWeeklyMissionChallengeInfos?: IWeeklyMissionChallengeInfo[];
238
}
239
230
240
export const addMissionInventoryUpdates = async (
231
241
account: TAccountDocument,
232
242
buildLabel: string,
233
243
inventory: TInventoryDatabaseDocument,
234
244
inventoryUpdates: IMissionInventoryUpdateRequest
235
): Promise<IInventoryChanges> => {
236
const inventoryChanges: IInventoryChanges = {};
245
): Promise<MissionInventoryUpdatesReturnType> => {
246
const ret: MissionInventoryUpdatesReturnType = {
247
InventoryChanges: {}
248
};
237
249
if (inventoryUpdates.Missions && inventoryUpdates.EndOfMatchUpload) {
238
250
const node = await getRegion(inventoryUpdates.Missions.Tag, buildLabel);
239
251
if (
@@ -455,7 +467,7 @@ export const addMissionInventoryUpdates = async (
455
467
inventory,
456
468
value,
457
469
inventoryUpdates.SeasonChallengeCompletions,
458
inventoryChanges
470
ret.InventoryChanges
459
471
);
460
472
break;
461
473
case "FusionTreasures":
@@ -500,7 +512,7 @@ export const addMissionInventoryUpdates = async (
500
512
ExportFusionBundles[fusionBundle.ItemType].fusionPoints * fusionBundle.ItemCount
501
513
);
502
514
}
503
inventoryChanges.FusionPoints = fusionPointsDelta;
515
ret.InventoryChanges.FusionPoints = fusionPointsDelta;
504
516
break;
505
517
}
506
518
case "EmailItems": {
@@ -764,7 +776,7 @@ export const addMissionInventoryUpdates = async (
764
776
}
765
777
case "creditsFee": {
766
778
if (!inventory.noNodeEntryFees) {
767
updateCurrency(inventory, value, CurrencyType.CREDITS, inventoryChanges);
779
updateCurrency(inventory, value, CurrencyType.CREDITS, ret.InventoryChanges);
768
780
}
769
781
break;
770
782
}
@@ -833,7 +845,8 @@ export const addMissionInventoryUpdates = async (
833
845
break;
834
846
}
835
847
case "WeeklyMissionChallengeInfo": {
836
addKahlProgress(inventory, value, inventoryChanges);
848
addKahlProgress(inventory, value, ret.InventoryChanges);
849
ret.ProcessedWeeklyMissionChallengeInfos = value;
837
850
break;
838
851
}
839
852
case "duviriCaveOffers": {
@@ -995,7 +1008,7 @@ export const addMissionInventoryUpdates = async (
995
1008
}
996
1009
}
997
1010
998
return inventoryChanges;
1011
return ret;
999
1012
};
1000
1013
1001
1014
interface AddMissionRewardsReturnType {