コード例 #1
0
        public static List <CoverageFlags> ReductionOptions(this CoverageFlags value)
        {
            List <CoverageFlags> options = new List <CoverageFlags>();

            if (value.GetTotalBitsSet() <= 1 || !value.IsBodyArmor() || value.IsRobe())
            {
                options.Add(value);
            }
            else
            {
                if (value == (CoverageFlags.UpperArms | CoverageFlags.LowerArms))
                {
                    options.Add(CoverageFlags.UpperArms);
                    options.Add(CoverageFlags.LowerArms);
                }
                else if (value == (CoverageFlags.UpperLegs | CoverageFlags.LowerLegs))
                {
                    options.Add(CoverageFlags.UpperLegs);
                    options.Add(CoverageFlags.LowerLegs);
                }
                else if (value == (CoverageFlags.LowerLegs | CoverageFlags.Feet))
                {
                    options.Add(CoverageFlags.Feet);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.Abdomen))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.Abdomen | CoverageFlags.UpperArms))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.UpperArms | CoverageFlags.LowerArms))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.UpperArms))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Abdomen | CoverageFlags.UpperLegs | CoverageFlags.LowerLegs))
                {
                    options.Add(CoverageFlags.Abdomen);
                    options.Add(CoverageFlags.UpperLegs);
                    options.Add(CoverageFlags.LowerLegs);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.Abdomen | CoverageFlags.UpperArms | CoverageFlags.LowerArms))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else
                {
                    throw new Exception("Unable to determine reduction paths for CoverageFlags of " + value);
                }
            }

            return(options);
        }
コード例 #2
0
        /// <summary>
        /// Before you use this function, BuiltItemSearchCache() must have been called on this object.
        /// </summary>
        /// <param name="compareItem"></param>
        /// <returns></returns>
        public bool IsSurpassedBy(LeanMyWorldObject compareItem)
        {
            // Items must be of the same armor set
            if (compareItem.ItemSetId != ItemSetId)
            {
                return(false);
            }

            // This checks to see that the compare item covers at least all the slots that the passed item does
            if (compareItem.Coverage.IsBodyArmor() && Coverage.IsBodyArmor())
            {
                if ((compareItem.Coverage & Coverage) != Coverage)
                {
                    return(false);
                }
            }
            else if ((compareItem.EquippableSlots & EquippableSlots) != EquippableSlots)
            {
                return(false);
            }

            // Find the highest level spell on this item
            Spell.CantripLevels highestCantrip = Spell.CantripLevels.None;

            foreach (Spell itemSpell in ExtendedMyWorldObject.CachedSpells)
            {
                if (itemSpell.CantripLevel > highestCantrip)
                {
                    highestCantrip = itemSpell.CantripLevel;
                }
            }

            // Does this item have spells that equal or surpass this items at the highest cantrip level found?
            foreach (Spell itemSpell in ExtendedMyWorldObject.CachedSpells)
            {
                if (itemSpell.CantripLevel < highestCantrip)
                {
                    continue;
                }

                foreach (Spell compareSpell in compareItem.ExtendedMyWorldObject.CachedSpells)
                {
                    if (compareSpell.Surpasses(itemSpell))
                    {
                        return(true);
                    }

                    if (compareSpell.IsSameOrSurpasses(itemSpell))
                    {
                        goto next;
                    }
                }

                return(false);

                next :;
            }

            if (compareItem.CalcedStartingArmorLevel > CalcedStartingArmorLevel)
            {
                return(true);
            }

            if (compareItem.damRating > damRating && damRating > 0)
            {
                return(true);
            }
            if (compareItem.damResistRating > damResistRating && damResistRating > 0)
            {
                return(true);
            }
            if (compareItem.critRating > critRating && critRating > 0)
            {
                return(true);
            }
            if (compareItem.critResistRating > critResistRating && critResistRating > 0)
            {
                return(true);
            }
            if (compareItem.critDamRating > critDamRating && critDamRating > 0)
            {
                return(true);
            }
            if (compareItem.critDamResistRating > critDamResistRating && critDamResistRating > 0)
            {
                return(true);
            }
            if (compareItem.healBoostRating > healBoostRating && healBoostRating > 0)
            {
                return(true);
            }
            if (compareItem.vitalityRating > vitalityRating && vitalityRating > 0)
            {
                return(true);
            }

            return(false);
        }
コード例 #3
0
        public static List <CoverageFlags> ReductionOptions(this CoverageFlags value)
        {
            List <CoverageFlags> options = new List <CoverageFlags>();

            if (value.GetTotalBitsSet() <= 1 || !value.IsBodyArmor() || value.IsRobe())
            {
                options.Add(value);
            }
            else
            {
                if (value == (CoverageFlags.UpperArms | CoverageFlags.LowerArms))
                {
                    options.Add(CoverageFlags.UpperArms);
                    options.Add(CoverageFlags.LowerArms);
                }
                else if (value == (CoverageFlags.UpperLegs | CoverageFlags.LowerLegs))
                {
                    options.Add(CoverageFlags.UpperLegs);
                    options.Add(CoverageFlags.LowerLegs);
                }
                else if (value == (CoverageFlags.LowerLegs | CoverageFlags.Feet))
                {
                    options.Add(CoverageFlags.Feet);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.Abdomen))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.Abdomen | CoverageFlags.UpperArms))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.UpperArms | CoverageFlags.LowerArms))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.UpperArms))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Abdomen | CoverageFlags.UpperLegs | CoverageFlags.LowerLegs))
                {
                    options.Add(CoverageFlags.Abdomen);
                    options.Add(CoverageFlags.UpperLegs);
                    options.Add(CoverageFlags.LowerLegs);
                }
                else if (value == (CoverageFlags.Chest | CoverageFlags.Abdomen | CoverageFlags.UpperArms | CoverageFlags.LowerArms))
                {
                    options.Add(CoverageFlags.Chest);
                }
                else if (value == (CoverageFlags.Abdomen | CoverageFlags.UpperLegs))
                {
                    // This is a emu piece that follows the pre-2010 retail guidelines
                    // https://asheron.fandom.com/wiki/Announcements_-_2010/04_-_Shedding_Skin
                    // For now, we assume only abdomen reduction
                    options.Add(CoverageFlags.Abdomen);
                }
                else
                {
                    throw new Exception("Unable to determine reduction paths for CoverageFlags of " + value);
                }
            }

            return(options);
        }