Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }