返回提交历史
Modified
src/controllers/api/inventoryController.ts
+6
-0
Added
src/controllers/api/refillRevivesController.ts
+26
-0
Modified
src/models/inventoryModels/inventoryModel.ts
+2
-1
Modified
src/routes/api.ts
+2
-0
Modified
src/services/inventoryService.ts
+6
-1
Modified
src/types/equipmentTypes.ts
+1
-0
XFEstudio/XFESpaceNinjaServer
feat: per-suit revive units (#3649)
Reviewed-on: https://onlyg.it/OpenWF/SpaceNinjaServer/pulls/3649 Co-authored-by: Sainan <63328889+Sainan@users.noreply.github.com> Co-committed-by: Sainan <63328889+Sainan@users.noreply.github.com>
31279a6e
代码差异
6 个文件
+43
-2
@@ -136,6 +136,12 @@ export const inventoryController: RequestHandler = async (request, response) =>
136
136
}
137
137
}
138
138
139
for (const suit of inventory.Suits) {
140
if (suit.ExtraRemaining !== undefined) {
141
suit.ExtraRemaining = undefined;
142
}
143
}
144
139
145
// Handle weekly reset
140
146
const lastLoginWeek = Math.trunc(
141
147
(inventory.NextRefill.getTime() - (86400000 + KAHL_EPOCH)) / unixTimesInMs.week
@@ -0,0 +1,26 @@
1
import type { RequestHandler } from "express";
2
import { getAccountIdForRequest } from "../../services/loginService.ts";
3
import type { IOidWithLegacySupport } from "../../types/commonTypes.ts";
4
import { getInventory, updateCurrency } from "../../services/inventoryService.ts";
5
import { fromOid } from "../../helpers/inventoryHelpers.ts";
6
import { getJSONfromString } from "../../helpers/stringHelpers.ts";
7
8
export const refillRevivesController: RequestHandler = async (req, res) => {
9
const accountId = await getAccountIdForRequest(req);
10
const inventory = await getInventory(accountId, "PremiumCredits PremiumCreditsFree Suits");
11
const body = getJSONfromString<IRefillRevivesRequest>(String(req.body));
12
const suit = inventory.Suits.id(fromOid(body.SuitId));
13
if (suit?.ExtraRemaining !== undefined) {
14
suit.ExtraRemaining += body.Count;
15
updateCurrency(inventory, 3 * body.Count, true);
16
await inventory.save();
17
}
18
res.json({
19
PremiumCredits: inventory.PremiumCredits
20
});
21
};
22
23
interface IRefillRevivesRequest {
24
SuitId: IOidWithLegacySupport;
25
Count: number;
26
}
@@ -1143,7 +1143,8 @@ const EquipmentSchema = new Schema<IEquipmentDatabase>(
1143
1143
Favorite: Boolean,
1144
1144
IsNew: Boolean,
1145
1145
AltWeaponModeId: Types.ObjectId,
1146
UpgradeNodes: Number
1146
UpgradeNodes: Number,
1147
ExtraRemaining: Number
1147
1148
},
1148
1149
{ id: false }
1149
1150
);
@@ -119,6 +119,7 @@ import { purchaseGetController, purchasePostController } from "../controllers/ap
119
119
import { questControlController } from "../controllers/api/questControlController.ts";
120
120
import { queueDojoComponentDestructionController } from "../controllers/api/queueDojoComponentDestructionController.ts";
121
121
import { redeemPromoCodeController } from "../controllers/api/redeemPromoCodeController.ts";
122
import { refillRevivesController } from "../controllers/api/refillRevivesController.ts";
122
123
import { releasePetController } from "../controllers/api/releasePetController.ts";
123
124
import { removeFriendGetController, removeFriendPostController } from "../controllers/api/removeFriendController.ts";
124
125
import { removeFromAllianceController } from "../controllers/api/removeFromAllianceController.ts";
@@ -358,6 +359,7 @@ apiRouter.post("/projectionManager.php", projectionManagerController);
358
359
apiRouter.post("/purchase.php", purchasePostController);
359
360
apiRouter.post("/questControl.php", questControlController); // U17
360
361
apiRouter.post("/redeemPromoCode.php", redeemPromoCodeController);
362
apiRouter.post("/refillRevives.php", refillRevivesController);
361
363
apiRouter.post("/releasePet.php", releasePetController);
362
364
apiRouter.post("/removeFriend.php", removeFriendPostController);
363
365
apiRouter.post("/removeFromGuild.php", removeFromGuildPostController);
@@ -2155,7 +2155,7 @@ export const applyClientEquipmentUpdates = (
2155
2155
): void => {
2156
2156
const category = inventory[categoryName];
2157
2157
2158
gearArray.forEach(({ ItemId, XP, InfestationDate }) => {
2158
gearArray.forEach(({ ItemId, XP, InfestationDate, ExtraRemaining }) => {
2159
2159
const item = category.id(fromOid(ItemId));
2160
2160
if (!item) {
2161
2161
logger.warn(`Skipping unknown ${categoryName} item: id ${fromOid(ItemId)} not found`);
@@ -2202,6 +2202,11 @@ export const applyClientEquipmentUpdates = (
2202
2202
item.InfestationDate =
2203
2203
InfestationDate.$date.$numberLong == "2147483647000" ? new Date(0) : fromMongoDate(InfestationDate);
2204
2204
}
2205
2206
if (ExtraRemaining) {
2207
item.ExtraRemaining ??= 4;
2208
item.ExtraRemaining += ExtraRemaining;
2209
}
2205
2210
});
2206
2211
};
2207
2212
@@ -65,6 +65,7 @@ export interface IEquipmentDatabase {
65
65
IsNew?: boolean;
66
66
AltWeaponModeId?: Types.ObjectId;
67
67
UpgradeNodes?: number;
68
ExtraRemaining?: number; // Revives remaining
68
69
_id: Types.ObjectId;
69
70
}
70
71