コード例 #1
0
    public static void GetStats(Item item, int optionId, float optionLevelFactor, out Dictionary <StatAttribute, ItemStat> staticStats)
    {
        staticStats = new();
        if (optionLevelFactor < 50)
        {
            return;
        }

        int staticId = ItemMetadataStorage.GetOptionMetadata(item.Id).Static;

        ItemOptionsStatic staticOptions = ItemOptionStaticMetadataStorage.GetMetadata(staticId, item.Rarity);

        if (staticOptions == null)
        {
            GetDefault(item, staticStats, optionId, optionLevelFactor);
            return;
        }

        foreach (ParserStat stat in staticOptions.Stats)
        {
            staticStats[stat.Attribute] = new BasicStat(stat);
        }

        foreach (ParserSpecialStat stat in staticOptions.SpecialStats)
        {
            staticStats[stat.Attribute] = new SpecialStat(stat);
        }

        // TODO: Implement Hidden ndd (defense) and wapmax (Max Weapon Attack)

        GetDefault(item, staticStats, optionId, optionLevelFactor);
    }
コード例 #2
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 NormalStat(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 NormalStat(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 SpecialStat(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 SpecialStat(stat.Id, summedFlat, summedPercent);
            }

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

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

            BasicStats.AddRange(normalStats);
            BasicStats.AddRange(specialStats);
        }