返回提交历史
Modified
src/models/sessionModel.ts
+4
-4
Modified
src/services/sessionService.ts
+28
-26
Modified
src/types/sessionTypes.ts
+14
-14
XFEstudio/XFESpaceNinjaServer
fix: refine session required fields for u7/u8 (#3920)
Closes #3919 Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3920 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
87194154
代码差异
3 个文件
+46
-44
@@ -7,18 +7,18 @@ export const sessionSchema = new Schema<ISessionDatabase>({
7
7
privateSlots: Number,
8
8
scoreLimit: Number,
9
9
timeLimit: Number,
10
gameModeId: Number,
10
gameModeId: { type: Number, required: true },
11
11
eloRating: Number,
12
regionId: Number,
12
regionId: { type: Number, required: true },
13
13
difficulty: Number,
14
hasStarted: Boolean,
14
hasStarted: { type: Boolean, required: true },
15
15
enableVoice: Boolean,
16
16
matchType: String,
17
17
maps: [String],
18
18
originalSessionId: String,
19
19
customSettings: String,
20
20
guildId: String,
21
buildId: BigInt,
21
buildId: { type: BigInt, required: true },
22
22
freePublic: Number,
23
23
freePrivate: Number,
24
24
fullReset: Number,
@@ -1,6 +1,5 @@
1
1
import { Session } from "../models/sessionModel.ts";
2
2
import { generateRewardSeed } from "./rngService.ts";
3
import { Platform } from "../types/loginTypes.ts";
4
3
import type {
5
4
ISession,
6
5
IFindSessionRequest,
@@ -20,29 +19,30 @@ export const createNewSession = async (
20
19
): Promise<ISession> => {
21
20
const newSession: ISessionDatabase = {
22
21
_id: new Types.ObjectId(),
22
...sessionData,
23
23
creatorId: Creator,
24
maxPlayers: sessionData.maxPlayers, // || 4
25
minPlayers: sessionData.minPlayers, // || 1
26
privateSlots: sessionData.privateSlots, // || 0
27
scoreLimit: sessionData.scoreLimit, // || 15
28
timeLimit: sessionData.timeLimit, // || 900
29
gameModeId: sessionData.gameModeId, // || 0
30
eloRating: sessionData.eloRating, // || 3
31
regionId: sessionData.regionId, // || 3
32
difficulty: sessionData.difficulty, // || 0
33
hasStarted: sessionData.hasStarted, // || false
34
enableVoice: sessionData.enableVoice, // || true
35
matchType: sessionData.matchType, // || "NORMAL"
36
maps: sessionData.maps, // || []
37
originalSessionId: sessionData.originalSessionId, // || ""
38
customSettings: sessionData.customSettings, // || ""
24
//maxPlayers: sessionData.maxPlayers ?? 4,
25
//minPlayers: sessionData.minPlayers ?? 1,
26
//privateSlots: sessionData.privateSlots ?? 0,
27
//scoreLimit: sessionData.scoreLimit ?? 15,
28
//timeLimit: sessionData.timeLimit ?? 900,
29
//gameModeId: sessionData.gameModeId ?? 0,
30
//eloRating: sessionData.eloRating ?? 3,
31
//regionId: sessionData.regionId ?? 3,
32
//difficulty: sessionData.difficulty ?? 0,
33
hasStarted: sessionData.hasStarted ?? false,
34
//enableVoice: sessionData.enableVoice ?? true,
35
//matchType: sessionData.matchType ?? "NORMAL",
36
//maps: sessionData.maps ?? [],
37
//originalSessionId: sessionData.originalSessionId ?? "",
38
//customSettings: sessionData.customSettings ?? "",
39
39
rewardSeed: sessionData.rewardSeed || -1,
40
guildId: sessionData.guildId, // || ""
41
buildId: sessionData.buildId, // || 4920386201513015989n
42
platform: sessionData.platform ?? Platform.Windows,
43
xplatform: sessionData.xplatform ?? false,
44
freePublic: sessionData.freePublic, // || 3
45
freePrivate: sessionData.freePrivate, // || 0
40
//guildId: sessionData.guildId ?? "",
41
//buildId: sessionData.buildId ?? 4920386201513015989n,
42
//platform: sessionData.platform ?? Platform.Windows,
43
//xplatform: sessionData.xplatform ?? false,
44
//freePublic: sessionData.freePublic ?? 3,
45
//freePrivate: sessionData.freePrivate ?? 0,
46
46
fullReset: 0,
47
47
48
48
lastUpdate: new Date()
@@ -75,10 +75,12 @@ export const getSession = async (request: IFindSessionRequest): Promise<IFindSes
75
75
query.freePublic = { $gte: 1 };
76
76
}
77
77
query.regionId = request.regionId;
78
query.eloRating = {
79
$gte: request.eloRating - request.maxEloDifference,
80
$lte: request.eloRating + request.maxEloDifference
81
};
78
if (request.eloRating !== undefined && request.maxEloDifference !== undefined) {
79
query.eloRating = {
80
$gte: request.eloRating - request.maxEloDifference,
81
$lte: request.eloRating + request.maxEloDifference
82
};
83
}
82
84
if (request.maps) {
83
85
query.maps = request.maps;
84
86
}
@@ -8,31 +8,31 @@ export interface IHostSessionRequest {
8
8
scoreLimit: number;
9
9
timeLimit: number;
10
10
gameModeId: number;
11
eloRating: number;
11
eloRating?: number;
12
12
regionId: number;
13
13
difficulty: number;
14
hasStarted: boolean;
15
enableVoice: boolean;
14
hasStarted?: boolean;
15
enableVoice?: boolean;
16
16
matchType: string;
17
17
maps: string[];
18
18
originalSessionId: string;
19
customSettings: string;
19
customSettings?: string;
20
20
rewardSeed?: number | bigint;
21
guildId: string;
21
guildId?: string;
22
22
buildId: number | bigint;
23
23
platform?: Platform;
24
24
xplatform?: boolean;
25
25
freePublic: number;
26
26
freePrivate: number;
27
fullReset: number;
27
fullReset?: number;
28
28
}
29
29
30
export interface ISession extends Omit<IHostSessionRequest, "rewardSeed" | "platform" | "xplatform"> {
30
export interface ISession extends Omit<IHostSessionRequest, "hasStarted" | "rewardSeed"> {
31
31
_id: Types.ObjectId;
32
32
creatorId: Types.ObjectId;
33
34
hasStarted: boolean;
33
35
rewardSeed: number | bigint;
34
platform: Platform;
35
xplatform: boolean;
36
36
}
37
37
38
38
export interface ISessionDatabase extends ISession {
@@ -52,12 +52,12 @@ export type IFindSessionRequest = { queryId: number } & (
52
52
freePublic?: { $gte: 1 };
53
53
maps?: string;
54
54
regionId: number;
55
maxEloDifference: number;
56
eloRating: number;
57
enforceElo: boolean;
55
maxEloDifference?: number;
56
eloRating?: number;
57
enforceElo?: boolean;
58
58
allowLobby?: boolean; // for conclave
59
platform: Platform;
60
xplatform: boolean;
59
platform?: Platform;
60
xplatform?: boolean;
61
61
}
62
62
);
63
63