返回提交历史
Added
src/controllers/api/endlessXpController.ts
+60
-0
Modified
src/models/inventoryModels/inventoryModel.ts
+13
-2
Modified
src/routes/api.ts
+2
-0
Modified
src/types/inventoryTypes/inventoryTypes.ts
+8
-0
XFEstudio/XFESpaceNinjaServer
feat: basic implementation of endlessXp.php we can play The Circuit (#596)
b84258a8
代码差异
4 个文件
+83
-2
@@ -0,0 +1,60 @@
1
import { RequestHandler } from "express";
2
import { getAccountIdForRequest } from "@/src/services/loginService";
3
import { getInventory } from "@/src/services/inventoryService";
4
import { getJSONfromString } from "@/src/helpers/stringHelpers";
5
import { TEndlessXpCategory } from "@/src/types/inventoryTypes/inventoryTypes";
6
7
export const endlessXpController: RequestHandler = async (req, res) => {
8
const accountId = await getAccountIdForRequest(req);
9
const inventory = await getInventory(accountId);
10
const payload = getJSONfromString(String(req.body)) as IEndlessXpRequest;
11
12
inventory.EndlessXP ??= [];
13
const entry = inventory.EndlessXP.find(x => x.Category == payload.Category);
14
if (entry) {
15
entry.Choices = payload.Choices;
16
} else {
17
inventory.EndlessXP.push({
18
Category: payload.Category,
19
Choices: payload.Choices
20
});
21
}
22
await inventory.save();
23
24
res.json({
25
NewProgress: {
26
Category: payload.Category,
27
Earn: 0,
28
Claim: 0,
29
BonusAvailable: {
30
$date: {
31
$numberLong: "9999999999999"
32
}
33
},
34
Expiry: {
35
$date: {
36
$numberLong: "9999999999999"
37
}
38
},
39
Choices: payload.Choices,
40
PendingRewards: [
41
{
42
RequiredTotalXp: 190,
43
Rewards: [
44
{
45
StoreItem: "/Lotus/StoreItems/Upgrades/Mods/Aura/PlayerHealthAuraMod",
46
ItemCount: 1
47
}
48
]
49
}
50
// ...
51
]
52
}
53
});
54
};
55
56
interface IEndlessXpRequest {
57
Mode: string; // "r"
58
Category: TEndlessXpCategory;
59
Choices: string[];
60
}
@@ -37,7 +37,8 @@ import {
37
37
IPeriodicMissionCompletionDatabase,
38
38
IPeriodicMissionCompletionResponse,
39
39
ILoreFragmentScan,
40
IEvolutionProgress
40
IEvolutionProgress,
41
IEndlessXpProgress
41
42
} from "../../types/inventoryTypes/inventoryTypes";
42
43
import { IOid } from "../../types/commonTypes";
43
44
import {
@@ -581,6 +582,14 @@ const evolutionProgressSchema = new Schema<IEvolutionProgress>(
581
582
{ _id: false }
582
583
);
583
584
585
const endlessXpProgressSchema = new Schema<IEndlessXpProgress>(
586
{
587
Category: String,
588
Choices: [String]
589
},
590
{ _id: false }
591
);
592
584
593
const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
585
594
{
586
595
accountOwnerId: Schema.Types.ObjectId,
@@ -938,7 +947,9 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
938
947
//Zanuka
939
948
Harvestable: Boolean,
940
949
//Grustag three
941
DeathSquadable: Boolean
950
DeathSquadable: Boolean,
951
952
EndlessXP: { type: [endlessXpProgressSchema], default: undefined }
942
953
},
943
954
{ timestamps: { createdAt: "Created" } }
944
955
);
@@ -8,6 +8,7 @@ import { createGuildController } from "@/src/controllers/api/createGuildControll
8
8
import { deleteSessionController } from "@/src/controllers/api/deleteSessionController";
9
9
import { dojoController } from "@/src/controllers/api/dojoController";
10
10
import { dronesController } from "@/src/controllers/api/dronesController";
11
import { endlessXpController } from "@/src/controllers/api/endlessXpController";
11
12
import { evolveWeaponController } from "@/src/controllers/api/evolveWeaponController";
12
13
import { findSessionsController } from "@/src/controllers/api/findSessionsController";
13
14
import { focusController } from "@/src/controllers/api/focusController";
@@ -108,6 +109,7 @@ apiRouter.post("/arcaneCommon.php", arcaneCommonController);
108
109
apiRouter.post("/artifacts.php", artifactsController);
109
110
apiRouter.post("/claimCompletedRecipe.php", claimCompletedRecipeController);
110
111
apiRouter.post("/createGuild.php", createGuildController);
112
apiRouter.post("/endlessXp.php", endlessXpController);
111
113
apiRouter.post("/evolveWeapon.php", evolveWeaponController);
112
114
apiRouter.post("/findSessions.php", findSessionsController);
113
115
apiRouter.post("/focus.php", focusController);
@@ -301,6 +301,7 @@ export interface IInventoryResponse {
301
301
PendingCoupon: IPendingCoupon;
302
302
Harvestable: boolean;
303
303
DeathSquadable: boolean;
304
EndlessXP?: IEndlessXpProgress[];
304
305
}
305
306
306
307
export interface IAffiliation {
@@ -932,3 +933,10 @@ export interface IEvolutionProgress {
932
933
Rank: number;
933
934
ItemType: string;
934
935
}
936
937
export type TEndlessXpCategory = "EXC_NORMAL" | "EXC_HARD";
938
939
export interface IEndlessXpProgress {
940
Category: TEndlessXpCategory;
941
Choices: string[];
942
}