Merge branch 'main' into 自用
This commit is contained in:
commit
47acf3a7b0
2
package-lock.json
generated
2
package-lock.json
generated
@ -9,6 +9,7 @@
|
|||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"license": "GNU",
|
"license": "GNU",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"body-parser": "^2.2.0",
|
||||||
"chokidar": "^4.0.3",
|
"chokidar": "^4.0.3",
|
||||||
"crc-32": "^1.2.2",
|
"crc-32": "^1.2.2",
|
||||||
"express": "^5",
|
"express": "^5",
|
||||||
@ -37,6 +38,7 @@
|
|||||||
"node": ">=20.18.1"
|
"node": ">=20.18.1"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
|
"@types/body-parser": "^1.19.6",
|
||||||
"@types/express": "^5",
|
"@types/express": "^5",
|
||||||
"@types/morgan": "^1.9.9",
|
"@types/morgan": "^1.9.9",
|
||||||
"@types/websocket": "^1.0.10",
|
"@types/websocket": "^1.0.10",
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
"license": "GNU",
|
"license": "GNU",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"body-parser": "^2.2.0",
|
||||||
"chokidar": "^4.0.3",
|
"chokidar": "^4.0.3",
|
||||||
"crc-32": "^1.2.2",
|
"crc-32": "^1.2.2",
|
||||||
"express": "^5",
|
"express": "^5",
|
||||||
@ -42,6 +43,7 @@
|
|||||||
"ws": "^8.18.2"
|
"ws": "^8.18.2"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
|
"@types/body-parser": "^1.19.6",
|
||||||
"@types/express": "^5",
|
"@types/express": "^5",
|
||||||
"@types/morgan": "^1.9.9",
|
"@types/morgan": "^1.9.9",
|
||||||
"@types/websocket": "^1.0.10",
|
"@types/websocket": "^1.0.10",
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { fromDbOid, version_compare } from "../../helpers/inventoryHelpers.ts";
|
import { fromDbOid, toMongoDate, version_compare } from "../../helpers/inventoryHelpers.ts";
|
||||||
import type { IKnifeResponse } from "../../helpers/nemesisHelpers.ts";
|
import type { IKnifeResponse } from "../../helpers/nemesisHelpers.ts";
|
||||||
import {
|
import {
|
||||||
antivirusMods,
|
antivirusMods,
|
||||||
@ -310,6 +310,15 @@ export const nemesisController: RequestHandler = async (req, res) => {
|
|||||||
res.json({
|
res.json({
|
||||||
target: inventory.toJSON().Nemesis
|
target: inventory.toJSON().Nemesis
|
||||||
});
|
});
|
||||||
|
} else if ((req.query.mode as string) == "t") {
|
||||||
|
const inventory = await getInventory(account._id.toString(), "LastNemesisAllySpawnTime");
|
||||||
|
//const body = getJSONfromString<IUpdateAllySpawnTimeRequest>(String(req.body));
|
||||||
|
const now = new Date(Math.trunc(Date.now() / 1000) * 1000);
|
||||||
|
inventory.LastNemesisAllySpawnTime = now;
|
||||||
|
await inventory.save();
|
||||||
|
res.json({
|
||||||
|
NewTime: toMongoDate(now)
|
||||||
|
} satisfies IUpdateAllySpawnTimeResponse);
|
||||||
} else if ((req.query.mode as string) == "d") {
|
} else if ((req.query.mode as string) == "d") {
|
||||||
const inventory = await getInventory(account._id.toString(), "NemesisHistory");
|
const inventory = await getInventory(account._id.toString(), "NemesisHistory");
|
||||||
const body = getJSONfromString<IRelinquishAdversariesRequest>(String(req.body));
|
const body = getJSONfromString<IRelinquishAdversariesRequest>(String(req.body));
|
||||||
@ -462,3 +471,11 @@ const consumeModCharge = (
|
|||||||
interface IRelinquishAdversariesRequest {
|
interface IRelinquishAdversariesRequest {
|
||||||
nemesisFingerprints: (bigint | number)[];
|
nemesisFingerprints: (bigint | number)[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// interface IUpdateAllySpawnTimeRequest {
|
||||||
|
// LastSpawnTime: IMongoDate;
|
||||||
|
// }
|
||||||
|
|
||||||
|
interface IUpdateAllySpawnTimeResponse {
|
||||||
|
NewTime: IMongoDate;
|
||||||
|
}
|
||||||
|
|||||||
@ -1753,7 +1753,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
|
|||||||
NemesisAbandonedRewards: { type: [String], default: [] },
|
NemesisAbandonedRewards: { type: [String], default: [] },
|
||||||
Nemesis: nemesisSchema,
|
Nemesis: nemesisSchema,
|
||||||
NemesisHistory: { type: [nemesisSchema], default: undefined },
|
NemesisHistory: { type: [nemesisSchema], default: undefined },
|
||||||
//LastNemesisAllySpawnTime: Schema.Types.Mixed,
|
LastNemesisAllySpawnTime: { type: Date, default: undefined },
|
||||||
|
|
||||||
//TradingRulesConfirmed,ShowFriendInvNotifications(Option->Social)
|
//TradingRulesConfirmed,ShowFriendInvNotifications(Option->Social)
|
||||||
Settings: settingsSchema,
|
Settings: settingsSchema,
|
||||||
@ -1874,6 +1874,9 @@ inventorySchema.set("toJSON", {
|
|||||||
if (inventoryDatabase.BlessingCooldown) {
|
if (inventoryDatabase.BlessingCooldown) {
|
||||||
inventoryResponse.BlessingCooldown = toMongoDate(inventoryDatabase.BlessingCooldown);
|
inventoryResponse.BlessingCooldown = toMongoDate(inventoryDatabase.BlessingCooldown);
|
||||||
}
|
}
|
||||||
|
if (inventoryDatabase.LastNemesisAllySpawnTime) {
|
||||||
|
inventoryResponse.LastNemesisAllySpawnTime = toMongoDate(inventoryDatabase.LastNemesisAllySpawnTime);
|
||||||
|
}
|
||||||
if (inventoryDatabase.NextRefill) {
|
if (inventoryDatabase.NextRefill) {
|
||||||
inventoryResponse.NextRefill = toMongoDate(inventoryDatabase.NextRefill);
|
inventoryResponse.NextRefill = toMongoDate(inventoryDatabase.NextRefill);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -73,6 +73,7 @@ import type {
|
|||||||
ITailorShop,
|
ITailorShop,
|
||||||
ITailorShopDatabase
|
ITailorShopDatabase
|
||||||
} from "../types/personalRoomsTypes.ts";
|
} from "../types/personalRoomsTypes.ts";
|
||||||
|
import { fromMongoDate } from "../helpers/inventoryHelpers.ts";
|
||||||
|
|
||||||
const convertDate = (value: IMongoDate): Date => {
|
const convertDate = (value: IMongoDate): Date => {
|
||||||
return new Date(parseInt(value.$date.$numberLong));
|
return new Date(parseInt(value.$date.$numberLong));
|
||||||
@ -326,7 +327,15 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial<
|
|||||||
"GiftsRemaining",
|
"GiftsRemaining",
|
||||||
"ChallengesFixVersion",
|
"ChallengesFixVersion",
|
||||||
"Founder",
|
"Founder",
|
||||||
"Guide"
|
"Guide",
|
||||||
|
"BountyScore",
|
||||||
|
"EntratiVaultCountLastPeriod",
|
||||||
|
"EntratiLabConquestUnlocked",
|
||||||
|
"EntratiLabConquestHardModeStatus",
|
||||||
|
"EntratiLabConquestCacheScoreMission",
|
||||||
|
"EchoesHexConquestUnlocked",
|
||||||
|
"EchoesHexConquestHardModeStatus",
|
||||||
|
"EchoesHexConquestCacheScoreMission"
|
||||||
] as const) {
|
] as const) {
|
||||||
if (client[key] !== undefined) {
|
if (client[key] !== undefined) {
|
||||||
db[key] = client[key];
|
db[key] = client[key];
|
||||||
@ -354,12 +363,28 @@ export const importInventory = (db: TInventoryDatabaseDocument, client: Partial<
|
|||||||
"NodeIntrosCompleted",
|
"NodeIntrosCompleted",
|
||||||
"DeathMarks",
|
"DeathMarks",
|
||||||
"Wishlist",
|
"Wishlist",
|
||||||
"NemesisAbandonedRewards"
|
"NemesisAbandonedRewards",
|
||||||
|
"EntratiLabConquestActiveFrameVariants",
|
||||||
|
"EchoesHexConquestActiveFrameVariants",
|
||||||
|
"EchoesHexConquestActiveStickers"
|
||||||
] as const) {
|
] as const) {
|
||||||
if (client[key] !== undefined) {
|
if (client[key] !== undefined) {
|
||||||
db[key] = client[key];
|
db[key] = client[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// IMongoDate
|
||||||
|
for (const key of [
|
||||||
|
"Created",
|
||||||
|
"TrainingDate",
|
||||||
|
"BlessingCooldown",
|
||||||
|
"LastNemesisAllySpawnTime",
|
||||||
|
"NextRefill",
|
||||||
|
"EntratiVaultCountResetDate"
|
||||||
|
] as const) {
|
||||||
|
if (client[key] !== undefined) {
|
||||||
|
db[key] = fromMongoDate(client[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
// IRewardAtten[]
|
// IRewardAtten[]
|
||||||
for (const key of ["SortieRewardAttenuation", "SpecialItemRewardAttenuation"] as const) {
|
for (const key of ["SortieRewardAttenuation", "SpecialItemRewardAttenuation"] as const) {
|
||||||
if (client[key] !== undefined) {
|
if (client[key] !== undefined) {
|
||||||
|
|||||||
@ -1489,7 +1489,13 @@ export const addSkin = (
|
|||||||
inventoryChanges: IInventoryChanges = {}
|
inventoryChanges: IInventoryChanges = {}
|
||||||
): IInventoryChanges => {
|
): IInventoryChanges => {
|
||||||
if (inventory.WeaponSkins.some(x => x.ItemType == typeName)) {
|
if (inventory.WeaponSkins.some(x => x.ItemType == typeName)) {
|
||||||
logger.debug(`refusing to add WeaponSkin ${typeName} because account already owns it`);
|
if (typeName == "/Lotus/Upgrades/Skins/Clan/BountyHunterBadgeItem") {
|
||||||
|
logger.debug(`account already owns stratos emblem, increasing bounty score instead`);
|
||||||
|
inventory.BountyScore ??= 0;
|
||||||
|
inventory.BountyScore += 1;
|
||||||
|
} else {
|
||||||
|
logger.debug(`refusing to add WeaponSkin ${typeName} because account already owns it`);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const index =
|
const index =
|
||||||
inventory.WeaponSkins.push({
|
inventory.WeaponSkins.push({
|
||||||
|
|||||||
@ -102,6 +102,7 @@ export interface IInventoryDatabase
|
|||||||
| "NextRefill"
|
| "NextRefill"
|
||||||
| "Nemesis"
|
| "Nemesis"
|
||||||
| "NemesisHistory"
|
| "NemesisHistory"
|
||||||
|
| "LastNemesisAllySpawnTime"
|
||||||
| "EntratiVaultCountResetDate"
|
| "EntratiVaultCountResetDate"
|
||||||
| "BrandedSuits"
|
| "BrandedSuits"
|
||||||
| "LockedWeaponGroup"
|
| "LockedWeaponGroup"
|
||||||
@ -146,6 +147,7 @@ export interface IInventoryDatabase
|
|||||||
NextRefill?: Date;
|
NextRefill?: Date;
|
||||||
Nemesis?: INemesisDatabase;
|
Nemesis?: INemesisDatabase;
|
||||||
NemesisHistory?: INemesisBaseDatabase[];
|
NemesisHistory?: INemesisBaseDatabase[];
|
||||||
|
LastNemesisAllySpawnTime?: Date;
|
||||||
EntratiVaultCountResetDate?: Date;
|
EntratiVaultCountResetDate?: Date;
|
||||||
BrandedSuits?: Types.ObjectId[];
|
BrandedSuits?: Types.ObjectId[];
|
||||||
LockedWeaponGroup?: ILockedWeaponGroupDatabase;
|
LockedWeaponGroup?: ILockedWeaponGroupDatabase;
|
||||||
@ -370,7 +372,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
|
|||||||
ThemeStyle: string;
|
ThemeStyle: string;
|
||||||
ThemeBackground: string;
|
ThemeBackground: string;
|
||||||
ThemeSounds: string;
|
ThemeSounds: string;
|
||||||
BountyScore: number;
|
BountyScore?: number;
|
||||||
//ChallengeInstanceStates: IChallengeInstanceState[];
|
//ChallengeInstanceStates: IChallengeInstanceState[];
|
||||||
LoginMilestoneRewards: string[];
|
LoginMilestoneRewards: string[];
|
||||||
RecentVendorPurchases?: IRecentVendorPurchaseClient[];
|
RecentVendorPurchases?: IRecentVendorPurchaseClient[];
|
||||||
@ -382,7 +384,7 @@ export interface IInventoryClient extends IDailyAffiliations, InventoryClientEqu
|
|||||||
//InvasionChainProgress: IInvasionChainProgress[];
|
//InvasionChainProgress: IInvasionChainProgress[];
|
||||||
Nemesis?: INemesisClient;
|
Nemesis?: INemesisClient;
|
||||||
NemesisHistory?: INemesisBaseClient[];
|
NemesisHistory?: INemesisBaseClient[];
|
||||||
//LastNemesisAllySpawnTime?: IMongoDate;
|
LastNemesisAllySpawnTime?: IMongoDate;
|
||||||
Settings?: ISettings;
|
Settings?: ISettings;
|
||||||
PersonalTechProjects: IPersonalTechProjectClient[];
|
PersonalTechProjects: IPersonalTechProjectClient[];
|
||||||
PlayerSkills: IPlayerSkills;
|
PlayerSkills: IPlayerSkills;
|
||||||
|
|||||||
@ -2844,8 +2844,8 @@ function removeCountItems(uniqueName, count) {
|
|||||||
|
|
||||||
function addItemByItemType() {
|
function addItemByItemType() {
|
||||||
const ItemType = document.getElementById("typeName-type").value;
|
const ItemType = document.getElementById("typeName-type").value;
|
||||||
// Must start with "/Lotus/", contain only A–Z letters, no "//", and not end with "/"
|
// Must start with "/Lotus/", contain only letters A–Z, digits 0–9, no "//", and not end with "/"
|
||||||
if (!ItemType || !/^\/Lotus\/(?:[A-Za-z]+(?:\/[A-Za-z]+)*)$/.test(ItemType)) {
|
if (!ItemType || !/^\/Lotus\/(?:[A-Za-z0-9]+(?:\/[A-Za-z0-9]+)*)$/.test(ItemType)) {
|
||||||
$("#typeName-type").addClass("is-invalid").focus();
|
$("#typeName-type").addClass("is-invalid").focus();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user