三倍奖励随机数修复+隐藏掉落物三倍
This commit is contained in:
		
							parent
							
								
									6acdd15b0f
								
							
						
					
					
						commit
						1f7ef399ce
					
				@ -1297,68 +1297,71 @@ export const addMissionRewards = async (
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (strippedItems) {
 | 
			
		||||
        for (const si of strippedItems) {
 | 
			
		||||
            if (si.DropTable in droptableAliases) {
 | 
			
		||||
                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`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            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_BLUEPRINT`);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
		//隐藏掉落翻倍
 | 
			
		||||
		for (let i = 0; i < 3; i++) {
 | 
			
		||||
			for (const si of strippedItems) {
 | 
			
		||||
				if (si.DropTable in droptableAliases) {
 | 
			
		||||
					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`);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
				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_BLUEPRINT`);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (inventory.Nemesis) {
 | 
			
		||||
@ -1672,10 +1675,6 @@ function getRandomMissionDrops(
 | 
			
		||||
	
 | 
			
		||||
	//重复执行三次方法,并将结果附加到最终的drops数组里
 | 
			
		||||
	for (let i = 0; i < 3; i++) {
 | 
			
		||||
	
 | 
			
		||||
		// 临时存储单次执行的结果
 | 
			
		||||
        const currentDrops: IMissionReward[] = [];
 | 
			
		||||
		
 | 
			
		||||
		if (RewardInfo.sortieTag == "Final" && firstCompletion) {
 | 
			
		||||
			const arr = RewardInfo.sortieId!.split("_");
 | 
			
		||||
			let sortieId = arr[1];
 | 
			
		||||
@ -2053,7 +2052,8 @@ function getRandomMissionDrops(
 | 
			
		||||
					logger.warn(`RewardSeed mismatch:`, { client: RewardInfo.rewardSeed, database: inventory.RewardSeed });
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			const rng = new SRng(BigInt(RewardInfo.rewardSeed ?? generateRewardSeed()) ^ 0xffffffffffffffffn);
 | 
			
		||||
			//在循环中随机化奖励种子
 | 
			
		||||
			const rng = new SRng((BigInt(RewardInfo.rewardSeed ?? generateRewardSeed()) + BigInt(i * 96)) ^ 0xffffffffffffffffn);
 | 
			
		||||
			rewardManifests.forEach(name => {
 | 
			
		||||
				const table = ExportRewards[name];
 | 
			
		||||
				// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
 | 
			
		||||
@ -2181,8 +2181,6 @@ function getRandomMissionDrops(
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
	drops.push(...currentDrops)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    return drops;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user