Esempio n. 1
0
    public void GetStaticStats(int itemId, int rarity, List <NormalStat> normalStats, List <SpecialStat> specialStats)
    {
        //Get Static Stats
        int staticId = ItemMetadataStorage.GetOptionStatic(itemId);

        ItemOptionsStatic staticOptions = ItemOptionStaticMetadataStorage.GetMetadata(staticId, rarity);

        if (staticOptions == null)
        {
            BasicStats.AddRange(normalStats);
            BasicStats.AddRange(specialStats);
            return;
        }

        foreach (ParserStat stat in staticOptions.Stats)
        {
            NormalStat normalStat = normalStats.FirstOrDefault(x => x.ItemAttribute == stat.Id);
            if (normalStat == null)
            {
                normalStats.Add(new(stat.Id, stat.Flat, stat.Percent));
                continue;
            }
            int   index         = normalStats.FindIndex(x => x.ItemAttribute == stat.Id);
            int   summedFlat    = normalStat.Flat + stat.Flat;
            float summedPercent = normalStat.Percent + stat.Percent;

            normalStats[index] = new(stat.Id, summedFlat, summedPercent);
        }

        foreach (ParserSpecialStat stat in staticOptions.SpecialStats)
        {
            SpecialStat normalStat = specialStats.FirstOrDefault(x => x.ItemAttribute == stat.Id);
            if (normalStat == null)
            {
                specialStats.Add(new(stat.Id, stat.Flat, stat.Percent));
                continue;
            }

            int   index         = specialStats.FindIndex(x => x.ItemAttribute == stat.Id);
            float summedFlat    = normalStat.Flat + stat.Flat;
            float summedPercent = normalStat.Percent + stat.Percent;

            specialStats[index] = new(stat.Id, summedFlat, summedPercent);
        }

        if (staticOptions.HiddenDefenseAdd > 0)
        {
            AddHiddenNormalStat(normalStats, StatId.Defense, staticOptions.HiddenDefenseAdd, staticOptions.DefenseCalibrationFactor);
        }

        if (staticOptions.HiddenWeaponAtkAdd > 0)
        {
            AddHiddenNormalStat(normalStats, StatId.MinWeaponAtk, staticOptions.HiddenWeaponAtkAdd, staticOptions.WeaponAtkCalibrationFactor);
            AddHiddenNormalStat(normalStats, StatId.MaxWeaponAtk, staticOptions.HiddenWeaponAtkAdd, staticOptions.WeaponAtkCalibrationFactor);
        }

        BasicStats.AddRange(normalStats);
        BasicStats.AddRange(specialStats);
    }
Esempio n. 2
0
    private static void AddHiddenNormalStat(List <NormalStat> normalStats, StatId attribute, int value, float calibrationFactor)
    {
        NormalStat normalStat = normalStats.FirstOrDefault(x => x.ItemAttribute == attribute);

        if (normalStat == null)
        {
            return;
        }
        int calibratedValue = (int)(value * calibrationFactor);

        int index        = normalStats.FindIndex(x => x.ItemAttribute == attribute);
        int biggerValue  = Math.Max(value, calibratedValue);
        int smallerValue = Math.Min(value, calibratedValue);
        int summedFlat   = normalStat.Flat + RandomProvider.Get().Next(smallerValue, biggerValue);

        normalStats[index] = new(normalStat.ItemAttribute, summedFlat, normalStat.Percent);
    }