XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFESpaceNinjaServer

A simple server for a small space ninja game

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFESpaceNinjaServer

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

代码差异

5 个文件 +29 -3
Modified src/app.ts +2 -1
@@ -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
Modified src/controllers/api/loginController.ts +5 -2
@@ -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;
Modified src/routes/api.ts +2 -0
@@ -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);
Modified src/services/worldStateService.ts +4 -0
@@ -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) {
Modified src/types/worldStateTypes.ts +16 -0
@@ -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[];