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

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

代码差异

2 个文件 +45 -55
Modified src/services/itemDataService.ts +0 -29
@@ -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;
Modified src/services/questService.ts +45 -26
@@ -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 (