feat: alertsRepeatable cheat (#3012)
All checks were successful
Build Docker image / docker (push) Successful in 2m50s
Build / build (push) Successful in 5m18s

For anyone who prefers certain alerts to be replayable (QTCC, etc.).

Works on Clem, Maroo, Arbitration, SP Incursions, Kuva Siphon, Nightmare and special alerts like QTCC & Void Corruption and probably more.

Reviewed-on: #3012
Reviewed-by: Sainan <63328889+sainan@users.noreply.github.com>
Co-authored-by: Animan8000 <animan8000@noreply.localhost>
Co-committed-by: Animan8000 <animan8000@noreply.localhost>
This commit was merged in pull request #3012.
This commit is contained in:
2025-11-10 00:43:38 -08:00
committed by Sainan
parent 3d57a76ee6
commit c42f68d904
12 changed files with 19 additions and 4 deletions

View File

@@ -1464,6 +1464,7 @@ const inventorySchema = new Schema<IInventoryDatabase, InventoryDocumentProps>(
unlockDoubleCapacityPotatoesEverywhere: Boolean,
unlockExilusEverywhere: Boolean,
unlockArcanesEverywhere: Boolean,
alertsRepeatable: Boolean,
syndicateMissionsRepeatable: Boolean,
instantFinishRivenChallenge: Boolean,
noDailyStandingLimits: Boolean,

View File

@@ -194,7 +194,7 @@ export const addMissionInventoryUpdates = async (
}
}
if (inventoryUpdates.RewardInfo) {
if (inventoryUpdates.RewardInfo.periodicMissionTag) {
if (inventoryUpdates.RewardInfo.periodicMissionTag && !inventory.alertsRepeatable) {
const tag = inventoryUpdates.RewardInfo.periodicMissionTag;
const existingCompletion = inventory.PeriodicMissionCompletions.find(completion => completion.tag === tag);
@@ -1170,7 +1170,9 @@ export const addMissionRewards = async (
if (inventory.CompletedAlerts.includes(alert._id.$oid)) {
logger.debug(`alert ${alert._id.$oid} already completed, skipping alert reward`);
} else {
inventory.CompletedAlerts.push(alert._id.$oid);
if (!inventory.alertsRepeatable) {
inventory.CompletedAlerts.push(alert._id.$oid);
}
if (alert.MissionInfo.missionReward) {
missionCompletionCredits += addFixedLevelRewards(
alert.MissionInfo.missionReward,

View File

@@ -39,6 +39,7 @@ export interface IAccountCheats {
unlockDoubleCapacityPotatoesEverywhere?: boolean;
unlockExilusEverywhere?: boolean;
unlockArcanesEverywhere?: boolean;
alertsRepeatable?: boolean;
syndicateMissionsRepeatable?: boolean;
instantFinishRivenChallenge?: boolean;
noDailyStandingLimits?: boolean;

View File

@@ -1004,6 +1004,10 @@
<input class="form-check-input" type="checkbox" id="unlockArcanesEverywhere" />
<label class="form-check-label" for="unlockArcanesEverywhere" data-loc="cheats_unlockArcanesEverywhere"></label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="alertsRepeatable" />
<label class="form-check-label" for="alertsRepeatable" data-loc="cheats_alertsRepeatable"></label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="syndicateMissionsRepeatable" />
<label class="form-check-label" for="syndicateMissionsRepeatable" data-loc="cheats_syndicateMissionsRepeatable"></label>

View File

@@ -425,7 +425,7 @@ function fetchItemList() {
InnateToxinDamage: loc("damageType_Poison")
};
// Add mods mising in data sources
// Add mods missing in data sources
data.mods.push({
uniqueName: "/Lotus/Upgrades/Mods/Fusers/LegendaryModFuser",
name: loc("code_legendaryCore")

View File

@@ -239,6 +239,7 @@ dict = {
cheats_fullyStockedVendors: `Händler haben volles Inventar`,
cheats_baroAlwaysAvailable: `Baro immer im Relais verfügbar`,
cheats_baroFullyStocked: `Baro hat volles Inventar`,
cheats_alertsRepeatable: `Alarmierungen wiederholbar`,
cheats_syndicateMissionsRepeatable: `Syndikat-Missionen wiederholbar`,
cheats_unlockAllProfitTakerStages: `Alle Profiteintreiber-Phasen freischalten`,
cheats_unlockSuccInventory: `Erfolgreich. Bitte beachte, dass du dein Inventar neu synchronisieren musst, z. B. durch Besuch eines Dojo/Relais oder durch erneutes Anmelden.`,

View File

@@ -238,6 +238,7 @@ dict = {
cheats_fullyStockedVendors: `Fully Stocked Vendors`,
cheats_baroAlwaysAvailable: `Baro Always Available`,
cheats_baroFullyStocked: `Baro Fully Stocked`,
cheats_alertsRepeatable: `Alerts Repeatable`,
cheats_syndicateMissionsRepeatable: `Syndicate Missions Repeatable`,
cheats_unlockAllProfitTakerStages: `Unlock All Profit Taker Stages`,
cheats_unlockSuccInventory: `Success. Please note that you'll need to resync your inventory, e.g. by visiting a dojo/relay or relogging.`,

View File

@@ -239,6 +239,7 @@ dict = {
cheats_fullyStockedVendors: `Vendedores con stock completo`,
cheats_baroAlwaysAvailable: `Baro siempre disponible`,
cheats_baroFullyStocked: `Baro con stock completo`,
cheats_alertsRepeatable: `[UNTRANSLATED] Alerts Repeatable`,
cheats_syndicateMissionsRepeatable: `Misiones de sindicato rejugables`,
cheats_unlockAllProfitTakerStages: `Desbloquea todas las etapas del Roba-ganancias`,
cheats_unlockSuccInventory: `[UNTRANSLATED] Success. Please note that you'll need to resync your inventory, e.g. by visiting a dojo/relay or relogging.`,

View File

@@ -1,4 +1,4 @@
// French translation by Vitruvio
// French translation by Vitruvio (zexal.)
dict = {
general_inventoryUpdateNote: `[UNTRANSLATED] Note: To see changes in-game, you need to resync your inventory, e.g. by visiting a dojo/relay or relogging.`,
general_inventoryUpdateNoteGameWs: `Note : Rouvrir un menu est nécessaire pour voir les changements.`,
@@ -239,6 +239,7 @@ dict = {
cheats_fullyStockedVendors: `Les vendeurs ont un stock à 100%`,
cheats_baroAlwaysAvailable: `Baro toujours présent`,
cheats_baroFullyStocked: `Stock de Baro au max`,
cheats_alertsRepeatable: `[UNTRANSLATED] Alerts Repeatable`,
cheats_syndicateMissionsRepeatable: `Mission syndicat répétables`,
cheats_unlockAllProfitTakerStages: `Débloquer toutes les étapes du Preneur de Profit`,
cheats_unlockSuccInventory: `[UNTRANSLATED] Success. Please note that you'll need to resync your inventory, e.g. by visiting a dojo/relay or relogging.`,

View File

@@ -239,6 +239,7 @@ dict = {
cheats_fullyStockedVendors: `Полностью укомплектованные торговцы`,
cheats_baroAlwaysAvailable: `Баро всегда доступен`,
cheats_baroFullyStocked: `Баро полностью укомплектован`,
cheats_alertsRepeatable: `[UNTRANSLATED] Alerts Repeatable`,
cheats_syndicateMissionsRepeatable: `Повторять миссии синдиката`,
cheats_unlockAllProfitTakerStages: `Разблокировать все этапы Сферы извлечения прибыли`,
cheats_unlockSuccInventory: `[UNTRANSLATED] Success. Please note that you'll need to resync your inventory, e.g. by visiting a dojo/relay or relogging.`,

View File

@@ -239,6 +239,7 @@ dict = {
cheats_fullyStockedVendors: `Повністю укомплектовані продавці`,
cheats_baroAlwaysAvailable: `Баро завжди доступний`,
cheats_baroFullyStocked: `Баро повністю укомплектований`,
cheats_alertsRepeatable: `[UNTRANSLATED] Alerts Repeatable`,
cheats_syndicateMissionsRepeatable: `Повторювати місії синдиката`,
cheats_unlockAllProfitTakerStages: `Розблокувати всі етапи Привласнювачки`,
cheats_unlockSuccInventory: `[UNTRANSLATED] Success. Please note that you'll need to resync your inventory, e.g. by visiting a dojo/relay or relogging.`,

View File

@@ -239,6 +239,7 @@ dict = {
cheats_fullyStockedVendors: `商人贩卖所有商品`,
cheats_baroAlwaysAvailable: `虚空商人可永久访问`,
cheats_baroFullyStocked: `虚空商人贩卖所有商品`,
cheats_alertsRepeatable: `[UNTRANSLATED] Alerts Repeatable`,
cheats_syndicateMissionsRepeatable: `集团任务可重复完成`,
cheats_unlockAllProfitTakerStages: `解锁利润收割者圆蛛所有阶段`,
cheats_unlockSuccInventory: `[UNTRANSLATED] Success. Please note that you'll need to resync your inventory, e.g. by visiting a dojo/relay or relogging.`,