private static HashSet <int> AddOption( SkillSheet skillSheet, Equipment equipment, IEnumerable <EquipmentItemOptionSheet.Row> optionRows, IRandom random) { var optionIds = new HashSet <int>(); foreach (var optionRow in optionRows.OrderBy(r => r.Id)) { if (optionRow.StatType != StatType.NONE) { var statMap = CombinationEquipment5.GetStat(optionRow, random); equipment.StatsMap.AddStatAdditionalValue(statMap.StatType, statMap.Value); } else { var skill = CombinationEquipment5.GetSkill(optionRow, skillSheet, random); if (!(skill is null)) { equipment.Skills.Add(skill); } } optionIds.Add(optionRow.Id); } return(optionIds); }
public static void AddAndUnlockOption( AgentState agentState, Equipment equipment, IRandom random, EquipmentItemSubRecipeSheetV2.Row subRecipe, EquipmentItemOptionSheet optionSheet, SkillSheet skillSheet ) { foreach (var optionInfo in subRecipe.Options .OrderByDescending(e => e.Ratio) .ThenBy(e => e.RequiredBlockIndex) .ThenBy(e => e.Id)) { if (!optionSheet.TryGetValue(optionInfo.Id, out var optionRow)) { continue; } var value = random.Next(1, GameConfig.MaximumProbability + 1); if (value > optionInfo.Ratio) { continue; } if (optionRow.StatType != StatType.NONE) { var statMap = CombinationEquipment5.GetStat(optionRow, random); equipment.StatsMap.AddStatAdditionalValue(statMap.StatType, statMap.Value); equipment.Update(equipment.RequiredBlockIndex + optionInfo.RequiredBlockIndex); equipment.optionCountFromCombination++; agentState.unlockedOptions.Add(optionRow.Id); } else { var skill = CombinationEquipment5.GetSkill(optionRow, skillSheet, random); if (!(skill is null)) { equipment.Skills.Add(skill); equipment.Update(equipment.RequiredBlockIndex + optionInfo.RequiredBlockIndex); equipment.optionCountFromCombination++; agentState.unlockedOptions.Add(optionRow.Id); } } } }