返回提交历史
Modified
src/app.ts
+2
-1
Modified
src/controllers/api/loginController.ts
+5
-2
Modified
src/routes/api.ts
+2
-0
Modified
src/services/worldStateService.ts
+4
-0
Modified
src/types/worldStateTypes.ts
+16
-0
XFEstudio/SpaceNinjaServer
fix: login failure on U17 (#1986)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/1986 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
4e57bcd1
代码差异
5 个文件
+29
-3
@@ -23,7 +23,8 @@ app.use((req, _res, next) => {
23
23
}
24
24
25
25
// U18 uses application/x-www-form-urlencoded even tho the data is JSON which Express doesn't like.
26
if (req.headers["content-type"] == "application/x-www-form-urlencoded") {
26
// U17 sets no Content-Type at all, which Express also doesn't like.
27
if (!req.headers["content-type"] || req.headers["content-type"] == "application/x-www-form-urlencoded") {
27
28
req.headers["content-type"] = "application/octet-stream";
28
29
}
29
30
@@ -82,8 +82,11 @@ export const loginController: RequestHandler = async (request, response) => {
82
82
}
83
83
} else {
84
84
if (account.Nonce && account.ClientType != "webui" && !account.Dropped && !loginRequest.kick) {
85
response.status(400).json({ error: "nonce still set" });
86
return;
85
// U17 seems to handle "nonce still set" like a login failure.
86
if (version_compare(buildLabel, "2015.12.05.18.07") >= 0) {
87
response.status(400).send({ error: "nonce still set" });
88
return;
89
}
87
90
}
88
91
89
92
account.ClientType = loginRequest.ClientType;
@@ -186,6 +186,7 @@ apiRouter.get("/getVendorInfo.php", getVendorInfoController);
186
186
apiRouter.get("/hub", hubController);
187
187
apiRouter.get("/hubInstances", hubInstancesController);
188
188
apiRouter.get("/inbox.php", inboxController);
189
apiRouter.get("/getMessages.php", inboxController); // unsure if this is correct, but needed for U17
189
190
apiRouter.get("/inventory.php", inventoryController);
190
191
apiRouter.get("/loginRewards.php", loginRewardsController);
191
192
apiRouter.get("/logout.php", logoutController);
@@ -278,6 +279,7 @@ apiRouter.post("/playerSkills.php", playerSkillsController);
278
279
apiRouter.post("/postGuildAdvertisement.php", postGuildAdvertisementController);
279
280
apiRouter.post("/projectionManager.php", projectionManagerController);
280
281
apiRouter.post("/purchase.php", purchaseController);
282
apiRouter.post("/questControl.php", questControlController); // U17
281
283
apiRouter.post("/redeemPromoCode.php", redeemPromoCodeController);
282
284
apiRouter.post("/releasePet.php", releasePetController);
283
285
apiRouter.post("/removeFromGuild.php", removeFromGuildController);
@@ -744,6 +744,10 @@ export const getWorldState = (buildLabel?: string): IWorldState => {
744
744
// Omit void fissures for versions prior to Dante Unbound to avoid script errors.
745
745
if (buildLabel && version_compare(buildLabel, "2024.03.24.20.00") < 0) {
746
746
worldState.ActiveMissions = [];
747
if (version_compare(buildLabel, "2017.10.12.17.04") < 0) {
748
// Old versions seem to really get hung up on not being able to load these.
749
worldState.PVPChallengeInstances = [];
750
}
747
751
}
748
752
749
753
if (config.worldState?.starDays) {
@@ -12,6 +12,7 @@ export interface IWorldState {
12
12
GlobalUpgrades: IGlobalUpgrade[];
13
13
ActiveMissions: IFissure[];
14
14
NodeOverrides: INodeOverride[];
15
PVPChallengeInstances: IPVPChallengeInstance[];
15
16
EndlessXpChoices: IEndlessXpChoice[];
16
17
SeasonInfo: {
17
18
Activation: IMongoDate;
@@ -130,6 +131,21 @@ export interface ILiteSortie {
130
131
}[];
131
132
}
132
133
134
export interface IPVPChallengeInstance {
135
_id: IOid;
136
challengeTypeRefID: string;
137
startDate: IMongoDate;
138
endDate: IMongoDate;
139
params: {
140
n: string; // "ScriptParamValue";
141
v: number;
142
}[];
143
isGenerated: boolean;
144
PVPMode: string;
145
subChallenges: IOid[];
146
Category: string; // "PVPChallengeTypeCategory_WEEKLY" | "PVPChallengeTypeCategory_WEEKLY_ROOT" | "PVPChallengeTypeCategory_DAILY";
147
}
148
133
149
export interface IEndlessXpChoice {
134
150
Category: string;
135
151
Choices: string[];