返回提交历史
Modified
src/services/itemDataService.ts
+0
-29
Modified
src/services/questService.ts
+45
-26
XFEstudio/SpaceNinjaServer
chore: fix code duplication for quest completion (#1497)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1497 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
002b0cb9
代码差异
2 个文件
+45
-55
@@ -1,7 +1,5 @@
1
1
import { IKeyChainRequest } from "@/src/types/requestTypes";
2
2
import { getIndexAfter } from "@/src/helpers/stringHelpers";
3
import { ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes";
4
import { logger } from "@/src/utils/logger";
5
3
import {
6
4
dict_de,
7
5
dict_en,
@@ -34,7 +32,6 @@ import {
34
32
IRecipe,
35
33
TReward
36
34
} from "warframe-public-export-plus";
37
import questCompletionItems from "@/static/fixed_responses/questCompletionRewards.json";
38
35
import { IMessage } from "../models/inboxModel";
39
36
40
37
export type WeaponTypeInternal =
@@ -181,32 +178,6 @@ export const getLevelKeyRewards = (
181
178
};
182
179
};
183
180
184
export const getQuestCompletionItems = (questKey: string): ITypeCount[] | undefined => {
185
if (questKey in questCompletionItems) {
186
return questCompletionItems[questKey as keyof typeof questCompletionItems];
187
}
188
logger.warn(`Quest ${questKey} not found in questCompletionItems`);
189
190
const items: ITypeCount[] = [];
191
const meta = ExportKeys[questKey];
192
if (meta.rewards) {
193
for (const reward of meta.rewards) {
194
if (reward.rewardType == "RT_STORE_ITEM") {
195
items.push({
196
ItemType: fromStoreItem(reward.itemType),
197
ItemCount: 1
198
});
199
} else if (reward.rewardType == "RT_RESOURCE" || reward.rewardType == "RT_RECIPE") {
200
items.push({
201
ItemType: reward.itemType,
202
ItemCount: reward.amount
203
});
204
}
205
}
206
}
207
return items;
208
};
209
210
181
export const getKeyChainMessage = ({ KeyChain, ChainStage }: IKeyChainRequest): IMessage => {
211
182
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
212
183
const chainStages = ExportKeys[KeyChain]?.chainStages;
@@ -3,18 +3,14 @@ import { isEmptyObject } from "@/src/helpers/general";
3
3
import { TInventoryDatabaseDocument } from "@/src/models/inventoryModels/inventoryModel";
4
4
import { createMessage } from "@/src/services/inboxService";
5
5
import { addItem, addItems, addKeyChainItems, setupKahlSyndicate } from "@/src/services/inventoryService";
6
import {
7
fromStoreItem,
8
getKeyChainMessage,
9
getLevelKeyRewards,
10
getQuestCompletionItems
11
} from "@/src/services/itemDataService";
12
import { IQuestKeyClient, IQuestKeyDatabase, IQuestStage } from "@/src/types/inventoryTypes/inventoryTypes";
6
import { fromStoreItem, getKeyChainMessage, getLevelKeyRewards } from "@/src/services/itemDataService";
7
import { IQuestKeyClient, IQuestKeyDatabase, IQuestStage, ITypeCount } from "@/src/types/inventoryTypes/inventoryTypes";
13
8
import { logger } from "@/src/utils/logger";
14
9
import { Types } from "mongoose";
15
10
import { ExportKeys } from "warframe-public-export-plus";
16
11
import { addFixedLevelRewards } from "./missionInventoryUpdateService";
17
12
import { IInventoryChanges } from "../types/purchaseTypes";
13
import questCompletionItems from "@/static/fixed_responses/questCompletionRewards.json";
18
14
19
15
export interface IUpdateQuestRequest {
20
16
QuestKeys: Omit<IQuestKeyDatabase, "CompletionDate">[];
@@ -42,23 +38,12 @@ export const updateQuestKey = async (
42
38
43
39
inventory.QuestKeys[questKeyIndex].overwrite(questKeyUpdate[0]);
44
40
45
let inventoryChanges: IInventoryChanges = {};
41
const inventoryChanges: IInventoryChanges = {};
46
42
if (questKeyUpdate[0].Completed) {
47
43
inventory.QuestKeys[questKeyIndex].CompletionDate = new Date();
48
44
49
logger.debug(`completed quest ${questKeyUpdate[0].ItemType} `);
50
const questKeyName = questKeyUpdate[0].ItemType;
51
const questCompletionItems = getQuestCompletionItems(questKeyName);
52
logger.debug(`quest completion items`, questCompletionItems);
53
54
if (questCompletionItems) {
55
inventoryChanges = await addItems(inventory, questCompletionItems);
56
}
57
inventory.ActiveQuest = "";
58
59
if (questKeyUpdate[0].ItemType == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain") {
60
setupKahlSyndicate(inventory);
61
}
45
const questKey = questKeyUpdate[0].ItemType;
46
await handleQuestCompletion(inventory, questKey, inventoryChanges);
62
47
}
63
48
return inventoryChanges;
64
49
};
@@ -177,6 +162,42 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest
177
162
await giveKeyChainMissionReward(inventory, { KeyChain: questKey, ChainStage: i });
178
163
}
179
164
165
await handleQuestCompletion(inventory, questKey);
166
};
167
168
const getQuestCompletionItems = (questKey: string): ITypeCount[] | undefined => {
169
if (questKey in questCompletionItems) {
170
return questCompletionItems[questKey as keyof typeof questCompletionItems];
171
}
172
logger.warn(`Quest ${questKey} not found in questCompletionItems`);
173
174
const items: ITypeCount[] = [];
175
const meta = ExportKeys[questKey];
176
if (meta.rewards) {
177
for (const reward of meta.rewards) {
178
if (reward.rewardType == "RT_STORE_ITEM") {
179
items.push({
180
ItemType: fromStoreItem(reward.itemType),
181
ItemCount: 1
182
});
183
} else if (reward.rewardType == "RT_RESOURCE" || reward.rewardType == "RT_RECIPE") {
184
items.push({
185
ItemType: reward.itemType,
186
ItemCount: reward.amount
187
});
188
}
189
}
190
}
191
return items;
192
};
193
194
const handleQuestCompletion = async (
195
inventory: TInventoryDatabaseDocument,
196
questKey: string,
197
inventoryChanges: IInventoryChanges = {}
198
): Promise<void> => {
199
logger.debug(`completed quest ${questKey}`);
200
180
201
if (questKey == "/Lotus/Types/Keys/OrokinMoonQuest/OrokinMoonQuestKeyChain") {
181
202
void createMessage(inventory.accountOwnerId, [
182
203
{
@@ -191,19 +212,17 @@ export const completeQuest = async (inventory: TInventoryDatabaseDocument, quest
191
212
highPriority: true
192
213
}
193
214
]);
215
} else if (questKey == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain") {
216
setupKahlSyndicate(inventory);
194
217
}
195
218
196
219
const questCompletionItems = getQuestCompletionItems(questKey);
197
220
logger.debug(`quest completion items`, questCompletionItems);
198
221
if (questCompletionItems) {
199
await addItems(inventory, questCompletionItems);
222
await addItems(inventory, questCompletionItems, inventoryChanges);
200
223
}
201
224
202
225
if (inventory.ActiveQuest == questKey) inventory.ActiveQuest = "";
203
204
if (questKey == "/Lotus/Types/Keys/NewWarQuest/NewWarQuestKeyChain") {
205
setupKahlSyndicate(inventory);
206
}
207
226
};
208
227
209
228
export const giveKeyChainItem = async (