fix: defer resolving of StrippedItems in bounties to extraction
All checks were successful
Build / build (pull_request) Successful in 59s

This commit is contained in:
Sainan 2025-11-02 11:45:55 +01:00
parent d794bd94ce
commit 451279e588

View File

@ -1133,7 +1133,8 @@ export const addMissionRewards = async (
VoidTearParticipantsCurrWave: voidTearWave, VoidTearParticipantsCurrWave: voidTearWave,
StrippedItems: strippedItems, StrippedItems: strippedItems,
AffiliationChanges: AffiliationMods, AffiliationChanges: AffiliationMods,
InvasionProgress: invasionProgress InvasionProgress: invasionProgress,
EndOfMatchUpload: endOfMatchUpload
}: IMissionInventoryUpdateRequest, }: IMissionInventoryUpdateRequest,
firstCompletion: boolean firstCompletion: boolean
): Promise<AddMissionRewardsReturnType> => { ): Promise<AddMissionRewardsReturnType> => {
@ -1392,73 +1393,77 @@ export const addMissionRewards = async (
} }
if (strippedItems) { if (strippedItems) {
for (const si of strippedItems) { if (endOfMatchUpload) {
if (si.DropTable in droptableAliases) { for (const si of strippedItems) {
logger.debug(`rewriting ${si.DropTable} to ${droptableAliases[si.DropTable]}`); if (si.DropTable in droptableAliases) {
si.DropTable = droptableAliases[si.DropTable]; logger.debug(`rewriting ${si.DropTable} to ${droptableAliases[si.DropTable]}`);
} si.DropTable = droptableAliases[si.DropTable];
const droptables = ExportEnemies.droptables[si.DropTable] ?? [];
if (si.DROP_MOD) {
const modDroptable = droptables.find(x => x.type == "mod");
if (modDroptable) {
for (let i = 0; i != si.DROP_MOD.length; ++i) {
const reward = getRandomReward(modDroptable.items)!;
logger.debug(`stripped droptable (mods pool) rolled`, reward);
await addItem(inventory, reward.type);
MissionRewards.push({
StoreItem: toStoreItem(reward.type),
ItemCount: 1,
FromEnemyCache: true // to show "identified"
});
}
} else {
logger.error(`unknown droptable ${si.DropTable} for DROP_MOD`);
} }
} const droptables = ExportEnemies.droptables[si.DropTable] ?? [];
if (si.DROP_BLUEPRINT) { if (si.DROP_MOD) {
const blueprintDroptable = droptables.find(x => x.type == "blueprint"); const modDroptable = droptables.find(x => x.type == "mod");
if (blueprintDroptable) { if (modDroptable) {
for (let i = 0; i != si.DROP_BLUEPRINT.length; ++i) { for (let i = 0; i != si.DROP_MOD.length; ++i) {
const reward = getRandomReward(blueprintDroptable.items)!; const reward = getRandomReward(modDroptable.items)!;
logger.debug(`stripped droptable (blueprints pool) rolled`, reward); logger.debug(`stripped droptable (mods pool) rolled`, reward);
await addItem(inventory, reward.type); await addItem(inventory, reward.type);
MissionRewards.push({
StoreItem: toStoreItem(reward.type),
ItemCount: 1,
FromEnemyCache: true // to show "identified"
});
}
} else {
logger.error(`unknown droptable ${si.DropTable} for DROP_BLUEPRINT`);
}
}
// e.g. H-09 Apex Turret Sumdali
if (si.DROP_MISC_ITEM) {
const resourceDroptable = droptables.find(x => x.type == "resource");
if (resourceDroptable) {
for (let i = 0; i != si.DROP_MISC_ITEM.length; ++i) {
const reward = getRandomReward(resourceDroptable.items)!;
logger.debug(`stripped droptable (resources pool) rolled`, reward);
if (Object.keys(await addItem(inventory, reward.type)).length == 0) {
logger.debug(`item already owned, skipping`);
} else {
MissionRewards.push({ MissionRewards.push({
StoreItem: toStoreItem(reward.type), StoreItem: toStoreItem(reward.type),
ItemCount: 1, ItemCount: 1,
FromEnemyCache: true // to show "identified" FromEnemyCache: true // to show "identified"
}); });
} }
} else {
logger.error(`unknown droptable ${si.DropTable} for DROP_MOD`);
} }
} else { }
logger.error(`unknown droptable ${si.DropTable} for DROP_MISC_ITEM`); if (si.DROP_BLUEPRINT) {
const blueprintDroptable = droptables.find(x => x.type == "blueprint");
if (blueprintDroptable) {
for (let i = 0; i != si.DROP_BLUEPRINT.length; ++i) {
const reward = getRandomReward(blueprintDroptable.items)!;
logger.debug(`stripped droptable (blueprints pool) rolled`, reward);
await addItem(inventory, reward.type);
MissionRewards.push({
StoreItem: toStoreItem(reward.type),
ItemCount: 1,
FromEnemyCache: true // to show "identified"
});
}
} else {
logger.error(`unknown droptable ${si.DropTable} for DROP_BLUEPRINT`);
}
}
// e.g. H-09 Apex Turret Sumdali
if (si.DROP_MISC_ITEM) {
const resourceDroptable = droptables.find(x => x.type == "resource");
if (resourceDroptable) {
for (let i = 0; i != si.DROP_MISC_ITEM.length; ++i) {
const reward = getRandomReward(resourceDroptable.items)!;
logger.debug(`stripped droptable (resources pool) rolled`, reward);
if (Object.keys(await addItem(inventory, reward.type)).length == 0) {
logger.debug(`item already owned, skipping`);
} else {
MissionRewards.push({
StoreItem: toStoreItem(reward.type),
ItemCount: 1,
FromEnemyCache: true // to show "identified"
});
}
}
} else {
logger.error(`unknown droptable ${si.DropTable} for DROP_MISC_ITEM`);
}
}
if (si.DropTable == "/Lotus/Types/DropTables/ContainerDropTables/VoidVaultMissionRewardsDropTable") {
// Consume netracells search pulse; only when the container reward was picked up. Discussed in https://onlyg.it/OpenWF/SpaceNinjaServer/issues/2673
updateEntratiVault(inventory);
inventory.EntratiVaultCountLastPeriod! += 1;
} }
} }
} else {
if (si.DropTable == "/Lotus/Types/DropTables/ContainerDropTables/VoidVaultMissionRewardsDropTable") { logger.debug(`ignoring StrippedItems in intermediate inventory update, deferring until extraction`);
// Consume netracells search pulse; only when the container reward was picked up. Discussed in https://onlyg.it/OpenWF/SpaceNinjaServer/issues/2673
updateEntratiVault(inventory);
inventory.EntratiVaultCountLastPeriod! += 1;
}
} }
} }