public static EnhancementResult GetEnhancementResult(EnhancementCostSheetV2.Row row, IRandom random) { var rand = random.Next(1, GameConfig.MaximumProbability + 1); if (rand <= row.GreatSuccessRatio) { return(EnhancementResult.GreatSuccess); } return(rand <= row.GreatSuccessRatio + row.SuccessRatio ? EnhancementResult.Success : EnhancementResult.Fail); }
public static int GetRequiredBlockCount(EnhancementCostSheetV2.Row row, EnhancementResult result) { switch (result) { case EnhancementResult.GreatSuccess: return(row.GreatSuccessRequiredBlockIndex); case EnhancementResult.Success: return(row.SuccessRequiredBlockIndex); case EnhancementResult.Fail: return(row.FailRequiredBlockIndex); default: throw new ArgumentOutOfRangeException(nameof(result), result, null); } }
public static ItemUsable CreateItemUsableV2(ItemSheet.Row itemRow, Guid id, long requiredBlockIndex, int level, IRandom random, EnhancementCostSheetV2.Row row, bool isGreatSuccess) { Equipment equipment = null; switch (itemRow.ItemSubType) { // Consumable case ItemSubType.Food: return(new Consumable((ConsumableItemSheet.Row)itemRow, id, requiredBlockIndex)); // Equipment case ItemSubType.Weapon: equipment = new Weapon((EquipmentItemSheet.Row)itemRow, id, requiredBlockIndex); break; case ItemSubType.Armor: equipment = new Armor((EquipmentItemSheet.Row)itemRow, id, requiredBlockIndex); break; case ItemSubType.Belt: equipment = new Belt((EquipmentItemSheet.Row)itemRow, id, requiredBlockIndex); break; case ItemSubType.Necklace: equipment = new Necklace((EquipmentItemSheet.Row)itemRow, id, requiredBlockIndex); break; case ItemSubType.Ring: equipment = new Ring((EquipmentItemSheet.Row)itemRow, id, requiredBlockIndex); break; default: throw new ArgumentOutOfRangeException( itemRow.Id.ToString(CultureInfo.InvariantCulture)); } for (int i = 0; i < level; ++i) { equipment.LevelUpV2(random, row, isGreatSuccess); } return(equipment); }
private void UpdateOptionsV2(IRandom random, EnhancementCostSheetV2.Row row, bool isGreatSuccess) { foreach (var statMapEx in StatsMap.GetAdditionalStats()) { var rand = isGreatSuccess ? row.ExtraStatGrowthMax : random.Next(row.ExtraStatGrowthMin, row.ExtraStatGrowthMax + 1); var ratio = rand.NormalizeFromTenThousandths(); var addValue = statMapEx.AdditionalValue * ratio; if (addValue > 0) { addValue = Math.Max(1.0m, addValue); } StatsMap.SetStatAdditionalValue(statMapEx.StatType, statMapEx.AdditionalValue + addValue); } var skills = new List <Skill.Skill>(); skills.AddRange(Skills); skills.AddRange(BuffSkills); foreach (var skill in skills) { var chanceRand = isGreatSuccess ? row.ExtraSkillChanceGrowthMax : random.Next(row.ExtraSkillChanceGrowthMin, row.ExtraSkillChanceGrowthMax + 1); var chanceRatio = chanceRand.NormalizeFromTenThousandths(); var addChance = skill.Chance * chanceRatio; if (addChance > 0) { addChance = Math.Max(1.0m, addChance); } var damageRand = isGreatSuccess ? row.ExtraSkillDamageGrowthMax : random.Next(row.ExtraSkillDamageGrowthMin, row.ExtraSkillDamageGrowthMax + 1); var damageRatio = damageRand.NormalizeFromTenThousandths(); var addPower = skill.Power * damageRatio; if (addPower > 0) { addPower = Math.Max(1.0m, addPower); } skill.Update(skill.Chance + (int)addChance, skill.Power + (int)addPower); } }
public void LevelUpV2(IRandom random, EnhancementCostSheetV2.Row row, bool isGreatSuccess) { level++; var rand = isGreatSuccess ? row.BaseStatGrowthMax :random.Next(row.BaseStatGrowthMin, row.BaseStatGrowthMax + 1); var ratio = rand.NormalizeFromTenThousandths(); var baseStat = StatsMap.GetStat(UniqueStatType, true) * ratio; if (baseStat > 0) { baseStat = Math.Max(1.0m, baseStat); } StatsMap.AddStatValue(UniqueStatType, baseStat); if (GetOptionCount() > 0) { UpdateOptionsV2(random, row, isGreatSuccess); } }
public static bool TryGetRow(Equipment equipment, EnhancementCostSheetV2 sheet, out EnhancementCostSheetV2.Row row) { var grade = equipment.Grade; var level = equipment.level + 1; var itemSubType = equipment.ItemSubType; row = sheet.OrderedList.FirstOrDefault(x => x.Grade == grade && x.Level == level && x.ItemSubType == itemSubType); return(row != null); }