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); }
/// <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); }
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); }