Compare commits

..

1 Commits

Author SHA1 Message Date
AlexisinGit
d829c3ce33 cheat: playerSkillGainsMultiplier (Intrinsics) 2025-10-08 14:33:16 +08:00
17 changed files with 45 additions and 68 deletions

2
package-lock.json generated
View File

@ -9,7 +9,6 @@
"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",
@ -38,7 +37,6 @@
"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",

View File

@ -27,7 +27,6 @@
"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",
@ -43,7 +42,6 @@
"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",

View File

@ -1,4 +1,4 @@
import { fromDbOid, toMongoDate, version_compare } from "../../helpers/inventoryHelpers.ts"; import { fromDbOid, 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,15 +310,6 @@ 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));
@ -471,11 +462,3 @@ const consumeModCharge = (
interface IRelinquishAdversariesRequest { interface IRelinquishAdversariesRequest {
nemesisFingerprints: (bigint | number)[]; nemesisFingerprints: (bigint | number)[];
} }
// interface IUpdateAllySpawnTimeRequest {
// LastSpawnTime: IMongoDate;
// }
interface IUpdateAllySpawnTimeResponse {
NewTime: IMongoDate;
}

View File

@ -1468,6 +1468,8 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
nemesisHintProgressMultiplierGrineer: Number, nemesisHintProgressMultiplierGrineer: Number,
nemesisHintProgressMultiplierCorpus: Number, nemesisHintProgressMultiplierCorpus: Number,
nemesisExtraWeapon: Number, nemesisExtraWeapon: Number,
playerSkillGainsMultiplierSpace: Number,
playerSkillGainsMultiplierDrifter: Number,
SubscribedToEmails: { type: Number, default: 0 }, SubscribedToEmails: { type: Number, default: 0 },
SubscribedToEmailsPersonalized: { type: Number, default: 0 }, SubscribedToEmailsPersonalized: { type: Number, default: 0 },
@ -1743,7 +1745,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: { type: Date, default: undefined }, //LastNemesisAllySpawnTime: Schema.Types.Mixed,
//TradingRulesConfirmed,ShowFriendInvNotifications(Option->Social) //TradingRulesConfirmed,ShowFriendInvNotifications(Option->Social)
Settings: settingsSchema, Settings: settingsSchema,
@ -1864,9 +1866,6 @@ 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);
} }

View File

@ -73,7 +73,6 @@ 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));
@ -327,15 +326,7 @@ 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];
@ -363,28 +354,12 @@ 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) {

View File

@ -1489,13 +1489,7 @@ 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)) {
if (typeName == "/Lotus/Upgrades/Skins/Clan/BountyHunterBadgeItem") { logger.debug(`refusing to add WeaponSkin ${typeName} because account already owns it`);
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({

View File

@ -372,8 +372,10 @@ export const addMissionInventoryUpdates = async (
break; break;
} }
case "PlayerSkillGains": { case "PlayerSkillGains": {
inventory.PlayerSkills.LPP_SPACE += value.LPP_SPACE ?? 0; inventory.PlayerSkills.LPP_SPACE +=
inventory.PlayerSkills.LPP_DRIFTER += value.LPP_DRIFTER ?? 0; (value.LPP_SPACE ?? 0) * (inventory.playerSkillGainsMultiplierSpace ?? 1);
inventory.PlayerSkills.LPP_DRIFTER +=
(value.LPP_DRIFTER ?? 0) * (inventory.playerSkillGainsMultiplierDrifter ?? 1);
break; break;
} }
case "CustomMarkers": { case "CustomMarkers": {

View File

@ -61,6 +61,8 @@ export interface IAccountCheats {
nemesisHintProgressMultiplierGrineer?: number; nemesisHintProgressMultiplierGrineer?: number;
nemesisHintProgressMultiplierCorpus?: number; nemesisHintProgressMultiplierCorpus?: number;
nemesisExtraWeapon?: number; nemesisExtraWeapon?: number;
playerSkillGainsMultiplierSpace?: number;
playerSkillGainsMultiplierDrifter?: number;
} }
export interface IInventoryDatabase export interface IInventoryDatabase
@ -92,7 +94,6 @@ export interface IInventoryDatabase
| "NextRefill" | "NextRefill"
| "Nemesis" | "Nemesis"
| "NemesisHistory" | "NemesisHistory"
| "LastNemesisAllySpawnTime"
| "EntratiVaultCountResetDate" | "EntratiVaultCountResetDate"
| "BrandedSuits" | "BrandedSuits"
| "LockedWeaponGroup" | "LockedWeaponGroup"
@ -137,7 +138,6 @@ 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;
@ -362,7 +362,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[];
@ -374,7 +374,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;

View File

@ -1057,6 +1057,20 @@
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button> <button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
</div> </div>
</form> </form>
<form class="form-group mt-2">
<label class="form-label" for="playerSkillGainsMultiplierSpace" data-loc="cheats_playerSkillGainsMultiplierSpace"></label>
<div class="input-group">
<input class="form-control" id="playerSkillGainsMultiplierSpace" type="number" min="1" max="65535" data-default="1" />
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
</div>
</form>
<form class="form-group mt-2">
<label class="form-label" for="playerSkillGainsMultiplierDrifter" data-loc="cheats_playerSkillGainsMultiplierDrifter"></label>
<div class="input-group">
<input class="form-control" id="playerSkillGainsMultiplierDrifter" type="number" min="1" max="65535" data-default="1" />
<button class="btn btn-secondary" type="button" data-loc="cheats_save"></button>
</div>
</form>
<div class="mt-2 mb-2 d-flex flex-wrap gap-2"> <div class="mt-2 mb-2 d-flex flex-wrap gap-2">
<button class="btn btn-primary" onclick="debounce(doUnlockAllShipFeatures);" data-loc="cheats_unlockAllShipFeatures"></button> <button class="btn btn-primary" onclick="debounce(doUnlockAllShipFeatures);" data-loc="cheats_unlockAllShipFeatures"></button>
<button class="btn btn-primary" onclick="debounce(unlockAllMissions);" data-loc="cheats_unlockAllMissions"></button> <button class="btn btn-primary" onclick="debounce(unlockAllMissions);" data-loc="cheats_unlockAllMissions"></button>

View File

@ -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 letters AZ, digits 09, no "//", and not end with "/" // Must start with "/Lotus/", contain only AZ letters, no "//", and not end with "/"
if (!ItemType || !/^\/Lotus\/(?:[A-Za-z0-9]+(?:\/[A-Za-z0-9]+)*)$/.test(ItemType)) { if (!ItemType || !/^\/Lotus\/(?:[A-Za-z]+(?:\/[A-Za-z]+)*)$/.test(ItemType)) {
$("#typeName-type").addClass("is-invalid").focus(); $("#typeName-type").addClass("is-invalid").focus();
return; return;
} }

View File

@ -263,6 +263,8 @@ dict = {
cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`, cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`, cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`, cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
cheats_playerSkillGainsMultiplierSpace: `[UNTRANSLATED] Intrinsics Gains Multiplier (Space)`,
cheats_playerSkillGainsMultiplierDrifter: `[UNTRANSLATED] Intrinsics Gains Multiplier (Drifter)`,
worldState: `Weltstatus`, worldState: `Weltstatus`,
worldState_creditBoost: `Event Booster: Credit`, worldState_creditBoost: `Event Booster: Credit`,

View File

@ -262,6 +262,8 @@ dict = {
cheats_nemesisHintProgressMultiplierGrineer: `Hint Progress Multiplier (Grineer)`, cheats_nemesisHintProgressMultiplierGrineer: `Hint Progress Multiplier (Grineer)`,
cheats_nemesisHintProgressMultiplierCorpus: `Hint Progress Multiplier (Corpus)`, cheats_nemesisHintProgressMultiplierCorpus: `Hint Progress Multiplier (Corpus)`,
cheats_nemesisExtraWeapon: `Extra Nemesis Weapon / Token On Vanquish (0 to disable)`, cheats_nemesisExtraWeapon: `Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
cheats_playerSkillGainsMultiplierSpace: `Intrinsics Gains Multiplier (Space)`,
cheats_playerSkillGainsMultiplierDrifter: `Intrinsics Gains Multiplier (Drifter)`,
worldState: `World State`, worldState: `World State`,
worldState_creditBoost: `Credit Boost`, worldState_creditBoost: `Credit Boost`,

View File

@ -263,6 +263,8 @@ dict = {
cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`, cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`, cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`, cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
cheats_playerSkillGainsMultiplierSpace: `[UNTRANSLATED] Intrinsics Gains Multiplier (Space)`,
cheats_playerSkillGainsMultiplierDrifter: `[UNTRANSLATED] Intrinsics Gains Multiplier (Drifter)`,
worldState: `Estado del mundo`, worldState: `Estado del mundo`,
worldState_creditBoost: `Potenciador de Créditos`, worldState_creditBoost: `Potenciador de Créditos`,

View File

@ -263,6 +263,8 @@ dict = {
cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`, cheats_nemesisHintProgressMultiplierGrineer: `[UNTRANSLATED] Hint Progress Multiplier (Grineer)`,
cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`, cheats_nemesisHintProgressMultiplierCorpus: `[UNTRANSLATED] Hint Progress Multiplier (Corpus)`,
cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`, cheats_nemesisExtraWeapon: `[UNTRANSLATED] Extra Nemesis Weapon / Token On Vanquish (0 to disable)`,
cheats_playerSkillGainsMultiplierSpace: `[UNTRANSLATED] Intrinsics Gains Multiplier (Space)`,
cheats_playerSkillGainsMultiplierDrifter: `[UNTRANSLATED] Intrinsics Gains Multiplier (Drifter)`,
worldState: `Carte Solaire`, worldState: `Carte Solaire`,
worldState_creditBoost: `Booster de Crédit`, worldState_creditBoost: `Booster de Crédit`,

View File

@ -263,6 +263,8 @@ dict = {
cheats_nemesisHintProgressMultiplierGrineer: `Мультипликатор прогресса подсказки (Гринир)`, cheats_nemesisHintProgressMultiplierGrineer: `Мультипликатор прогресса подсказки (Гринир)`,
cheats_nemesisHintProgressMultiplierCorpus: `Мультипликатор прогресса подсказки (Корпус)`, cheats_nemesisHintProgressMultiplierCorpus: `Мультипликатор прогресса подсказки (Корпус)`,
cheats_nemesisExtraWeapon: `Дополнительное оружие/активный Кардиомиоцит за победу над Противником (0 для отключения)`, cheats_nemesisExtraWeapon: `Дополнительное оружие/активный Кардиомиоцит за победу над Противником (0 для отключения)`,
cheats_playerSkillGainsMultiplierSpace: `[UNTRANSLATED] Intrinsics Gains Multiplier (Space)`,
cheats_playerSkillGainsMultiplierDrifter: `[UNTRANSLATED] Intrinsics Gains Multiplier (Drifter)`,
worldState: `Состояние мира`, worldState: `Состояние мира`,
worldState_creditBoost: `Глобальный бустер Кредитов`, worldState_creditBoost: `Глобальный бустер Кредитов`,

View File

@ -263,6 +263,8 @@ dict = {
cheats_nemesisHintProgressMultiplierGrineer: `Множник прогресу підсказки (Ґрінери)`, cheats_nemesisHintProgressMultiplierGrineer: `Множник прогресу підсказки (Ґрінери)`,
cheats_nemesisHintProgressMultiplierCorpus: `Множник прогресу підсказки (Корпус)`, cheats_nemesisHintProgressMultiplierCorpus: `Множник прогресу підсказки (Корпус)`,
cheats_nemesisExtraWeapon: `Додаткова зброя/Жива сердцевина за перемогу над Недругом (0 для вимкнення)`, cheats_nemesisExtraWeapon: `Додаткова зброя/Жива сердцевина за перемогу над Недругом (0 для вимкнення)`,
cheats_playerSkillGainsMultiplierSpace: `[UNTRANSLATED] Intrinsics Gains Multiplier (Space)`,
cheats_playerSkillGainsMultiplierDrifter: `[UNTRANSLATED] Intrinsics Gains Multiplier (Drifter)`,
worldState: `Стан світу`, worldState: `Стан світу`,
worldState_creditBoost: `Глобальне посилення Кредитів`, worldState_creditBoost: `Глобальне посилення Кредитів`,

View File

@ -263,6 +263,8 @@ dict = {
cheats_nemesisHintProgressMultiplierGrineer: `解密进度倍率 (Grineer)`, cheats_nemesisHintProgressMultiplierGrineer: `解密进度倍率 (Grineer)`,
cheats_nemesisHintProgressMultiplierCorpus: `解密进度倍率 (Corpus)`, cheats_nemesisHintProgressMultiplierCorpus: `解密进度倍率 (Corpus)`,
cheats_nemesisExtraWeapon: `额外玄骸武器/代币 (0为禁用)`, cheats_nemesisExtraWeapon: `额外玄骸武器/代币 (0为禁用)`,
cheats_playerSkillGainsMultiplierSpace: `內源之力获取倍率 (九重天)`,
cheats_playerSkillGainsMultiplierDrifter: `內源之力获取倍率 (漂泊者)`,
worldState: `世界状态配置`, worldState: `世界状态配置`,
worldState_creditBoost: `现金加成`, worldState_creditBoost: `现金加成`,