Compare commits

..

1 Commits

Author SHA1 Message Date
AlexisinGit
676299923f cheat: gainNoNegativeSyndicateStanding
New IAccountCheats type

Update inventoryService.ts

webUI updates
2025-10-08 14:31:00 +08:00
16 changed files with 26 additions and 66 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

@ -1462,6 +1462,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
flawlessRelicsAlwaysGiveSilverReward: Boolean, flawlessRelicsAlwaysGiveSilverReward: Boolean,
radiantRelicsAlwaysGiveGoldReward: Boolean, radiantRelicsAlwaysGiveGoldReward: Boolean,
disableDailyTribute: Boolean, disableDailyTribute: Boolean,
gainNoNegativeSyndicateStanding: Boolean,
nemesisHenchmenKillsMultiplierGrineer: Number, nemesisHenchmenKillsMultiplierGrineer: Number,
nemesisHenchmenKillsMultiplierCorpus: Number, nemesisHenchmenKillsMultiplierCorpus: Number,
nemesisAntivirusGainMultiplier: Number, nemesisAntivirusGainMultiplier: Number,
@ -1743,7 +1744,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 +1865,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({
@ -2187,6 +2181,10 @@ export const updateSyndicate = (
): void => { ): void => {
syndicateUpdate?.forEach(affiliation => { syndicateUpdate?.forEach(affiliation => {
const syndicate = inventory.Affiliations.find(x => x.Tag == affiliation.Tag); const syndicate = inventory.Affiliations.find(x => x.Tag == affiliation.Tag);
if (inventory.gainNoNegativeSyndicateStanding) {
affiliation.Standing = Math.max(0, affiliation.Standing);
affiliation.Title = Math.max(0, affiliation.Title);
}
if (syndicate !== undefined) { if (syndicate !== undefined) {
syndicate.Standing += affiliation.Standing; syndicate.Standing += affiliation.Standing;
syndicate.Title = syndicate.Title === undefined ? affiliation.Title : syndicate.Title + affiliation.Title; syndicate.Title = syndicate.Title === undefined ? affiliation.Title : syndicate.Title + affiliation.Title;

View File

@ -55,6 +55,7 @@ export interface IAccountCheats {
flawlessRelicsAlwaysGiveSilverReward?: boolean; flawlessRelicsAlwaysGiveSilverReward?: boolean;
radiantRelicsAlwaysGiveGoldReward?: boolean; radiantRelicsAlwaysGiveGoldReward?: boolean;
disableDailyTribute?: boolean; disableDailyTribute?: boolean;
gainNoNegativeSyndicateStanding?: boolean;
nemesisHenchmenKillsMultiplierGrineer?: number; nemesisHenchmenKillsMultiplierGrineer?: number;
nemesisHenchmenKillsMultiplierCorpus?: number; nemesisHenchmenKillsMultiplierCorpus?: number;
nemesisAntivirusGainMultiplier?: number; nemesisAntivirusGainMultiplier?: number;
@ -92,7 +93,6 @@ export interface IInventoryDatabase
| "NextRefill" | "NextRefill"
| "Nemesis" | "Nemesis"
| "NemesisHistory" | "NemesisHistory"
| "LastNemesisAllySpawnTime"
| "EntratiVaultCountResetDate" | "EntratiVaultCountResetDate"
| "BrandedSuits" | "BrandedSuits"
| "LockedWeaponGroup" | "LockedWeaponGroup"
@ -137,7 +137,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 +361,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 +373,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

@ -1015,6 +1015,10 @@
<input class="form-check-input" type="checkbox" id="finishInvasionsInOneMission" /> <input class="form-check-input" type="checkbox" id="finishInvasionsInOneMission" />
<label class="form-check-label" for="finishInvasionsInOneMission" data-loc="cheats_finishInvasionsInOneMission"></label> <label class="form-check-label" for="finishInvasionsInOneMission" data-loc="cheats_finishInvasionsInOneMission"></label>
</div> </div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="gainNoNegativeSyndicateStanding" />
<label class="form-check-label" for="gainNoNegativeSyndicateStanding" data-loc="cheats_gainNoNegativeSyndicateStanding"></label>
</div>
<form class="form-group mt-2"> <form class="form-group mt-2">
<label class="form-label" for="nemesisHenchmenKillsMultiplierGrineer" data-loc="cheats_nemesisHenchmenKillsMultiplierGrineer"></label> <label class="form-label" for="nemesisHenchmenKillsMultiplierGrineer" data-loc="cheats_nemesisHenchmenKillsMultiplierGrineer"></label>
<div class="input-group"> <div class="input-group">

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

@ -257,6 +257,7 @@ dict = {
cheats_changeButton: `Ändern`, cheats_changeButton: `Ändern`,
cheats_markAllAsRead: `Posteingang als gelesen markieren`, cheats_markAllAsRead: `Posteingang als gelesen markieren`,
cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`, cheats_finishInvasionsInOneMission: `[UNTRANSLATED] Finish Invasions in One Mission`,
cheats_gainNoNegativeSyndicateStanding: `[UNTRANSLATED] Gain No Negative Syndicate Standing`,
cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`, cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`,
cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`, cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`,
cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`, cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`,

View File

@ -256,6 +256,7 @@ dict = {
cheats_changeButton: `Change`, cheats_changeButton: `Change`,
cheats_markAllAsRead: `Mark Inbox As Read`, cheats_markAllAsRead: `Mark Inbox As Read`,
cheats_finishInvasionsInOneMission: `Finish Invasions in One Mission`, cheats_finishInvasionsInOneMission: `Finish Invasions in One Mission`,
cheats_gainNoNegativeSyndicateStanding: `Gain No Negative Syndicate Standing`,
cheats_nemesisHenchmenKillsMultiplierGrineer: `Rage Progess Multiplier (Grineer)`, cheats_nemesisHenchmenKillsMultiplierGrineer: `Rage Progess Multiplier (Grineer)`,
cheats_nemesisHenchmenKillsMultiplierCorpus: `Rage Progess Multiplier (Corpus)`, cheats_nemesisHenchmenKillsMultiplierCorpus: `Rage Progess Multiplier (Corpus)`,
cheats_nemesisAntivirusGainMultiplier: `Antivirus Progress Multiplier`, cheats_nemesisAntivirusGainMultiplier: `Antivirus Progress Multiplier`,

View File

@ -257,6 +257,7 @@ dict = {
cheats_changeButton: `Cambiar`, cheats_changeButton: `Cambiar`,
cheats_markAllAsRead: `Marcar bandeja de entrada como leída`, cheats_markAllAsRead: `Marcar bandeja de entrada como leída`,
cheats_finishInvasionsInOneMission: `Finaliza Invasión en una mision`, cheats_finishInvasionsInOneMission: `Finaliza Invasión en una mision`,
cheats_gainNoNegativeSyndicateStanding: `[UNTRANSLATED] Gain No Negative Syndicate Standing`,
cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`, cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`,
cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`, cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`,
cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`, cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`,

View File

@ -257,6 +257,7 @@ dict = {
cheats_changeButton: `Changer`, cheats_changeButton: `Changer`,
cheats_markAllAsRead: `Marquer la boîte de réception comme lue`, cheats_markAllAsRead: `Marquer la boîte de réception comme lue`,
cheats_finishInvasionsInOneMission: `Compléter les invasions en une mission.`, cheats_finishInvasionsInOneMission: `Compléter les invasions en une mission.`,
cheats_gainNoNegativeSyndicateStanding: `[UNTRANSLATED] Gain No Negative Syndicate Standing`,
cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`, cheats_nemesisHenchmenKillsMultiplierGrineer: `[UNTRANSLATED] Rage Progess Multiplier (Grineer)`,
cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`, cheats_nemesisHenchmenKillsMultiplierCorpus: `[UNTRANSLATED] Rage Progess Multiplier (Corpus)`,
cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`, cheats_nemesisAntivirusGainMultiplier: `[UNTRANSLATED] Antivirus Progress Multiplier`,

View File

@ -257,6 +257,7 @@ dict = {
cheats_changeButton: `Изменить`, cheats_changeButton: `Изменить`,
cheats_markAllAsRead: `Пометить все входящие как прочитанные`, cheats_markAllAsRead: `Пометить все входящие как прочитанные`,
cheats_finishInvasionsInOneMission: `Завершать вторжение за одну миссию`, cheats_finishInvasionsInOneMission: `Завершать вторжение за одну миссию`,
cheats_gainNoNegativeSyndicateStanding: `[UNTRANSLATED] Gain No Negative Syndicate Standing`,
cheats_nemesisHenchmenKillsMultiplierGrineer: `Мультипликатор прогресса ярости (Гринир)`, cheats_nemesisHenchmenKillsMultiplierGrineer: `Мультипликатор прогресса ярости (Гринир)`,
cheats_nemesisHenchmenKillsMultiplierCorpus: `Мультипликатор прогресса ярости (Корпус)`, cheats_nemesisHenchmenKillsMultiplierCorpus: `Мультипликатор прогресса ярости (Корпус)`,
cheats_nemesisAntivirusGainMultiplier: `Мультипликатор прогресса антивируса`, cheats_nemesisAntivirusGainMultiplier: `Мультипликатор прогресса антивируса`,

View File

@ -257,6 +257,7 @@ dict = {
cheats_changeButton: `Змінити`, cheats_changeButton: `Змінити`,
cheats_markAllAsRead: `Помітити всі вхідні як прочитані`, cheats_markAllAsRead: `Помітити всі вхідні як прочитані`,
cheats_finishInvasionsInOneMission: `Завершувати вторгнення за одну місію`, cheats_finishInvasionsInOneMission: `Завершувати вторгнення за одну місію`,
cheats_gainNoNegativeSyndicateStanding: `[UNTRANSLATED] Gain No Negative Syndicate Standing`,
cheats_nemesisHenchmenKillsMultiplierGrineer: `Множник прогресу люті (Ґрінери)`, cheats_nemesisHenchmenKillsMultiplierGrineer: `Множник прогресу люті (Ґрінери)`,
cheats_nemesisHenchmenKillsMultiplierCorpus: `Множник прогресу люті (Корпус)`, cheats_nemesisHenchmenKillsMultiplierCorpus: `Множник прогресу люті (Корпус)`,
cheats_nemesisAntivirusGainMultiplier: `Мультиплікатор прогресу антивіруса`, cheats_nemesisAntivirusGainMultiplier: `Мультиплікатор прогресу антивіруса`,

View File

@ -257,6 +257,7 @@ dict = {
cheats_changeButton: `更改`, cheats_changeButton: `更改`,
cheats_markAllAsRead: `收件箱全部标记为已读`, cheats_markAllAsRead: `收件箱全部标记为已读`,
cheats_finishInvasionsInOneMission: `一场任务完成整场入侵`, cheats_finishInvasionsInOneMission: `一场任务完成整场入侵`,
cheats_gainNoNegativeSyndicateStanding: `集团声望不倒扣不掉段`,
cheats_nemesisHenchmenKillsMultiplierGrineer: `玄骸怒气倍率 (Grineer)`, cheats_nemesisHenchmenKillsMultiplierGrineer: `玄骸怒气倍率 (Grineer)`,
cheats_nemesisHenchmenKillsMultiplierCorpus: `玄骸怒气倍率 (Corpus)`, cheats_nemesisHenchmenKillsMultiplierCorpus: `玄骸怒气倍率 (Corpus)`,
cheats_nemesisAntivirusGainMultiplier: `杀毒进度倍率 (科腐者)`, cheats_nemesisAntivirusGainMultiplier: `杀毒进度倍率 (科腐者)`,