public LeanMyWorldObject(ExtendedMyWorldObject myWorldObject) { ExtendedMyWorldObject = myWorldObject; EquippableSlots = myWorldObject.EquippableSlots; Coverage = myWorldObject.Coverage; ItemSetId = myWorldObject.IntValues.ContainsKey(265) ? myWorldObject.IntValues[265] : 0; ObjectClass = myWorldObject.ObjectClass; Material = myWorldObject.Material; CalcedStartingArmorLevel = myWorldObject.CalcedStartingArmorLevel; damRating = myWorldObject.DamRating; damResistRating = myWorldObject.DamResistRating; critRating = myWorldObject.CritRating; critResistRating = myWorldObject.CritResistRating; critDamRating = myWorldObject.CritDamRating; critDamResistRating = myWorldObject.CritDamResistRating; healBoostRating = myWorldObject.HealBoostRating; vitalityRating = myWorldObject.VitalityRating; }
public static int GetTotalBitsSet(this CoverageMask value) { int slotFlags = (int)value; int bitsSet = 0; while (slotFlags != 0) { if ((slotFlags & 1) == 1) { bitsSet++; } slotFlags >>= 1; } return(bitsSet); }
/// <summary> /// Returns a list of equipped clothing/armor with any coverage overlap /// </summary> public List <WorldObject> GetEquippedClothingArmor(CoverageMask coverageMask) { return(EquippedObjects.Values.Where(i => i.ClothingPriority != null && (i.ClothingPriority & coverageMask) != 0).ToList()); }
public static void HandleDebugEchoFlags(Session session, params string[] parameters) { try { if (parameters?.Length == 2) { var debugOutput = ""; switch (parameters[0].ToLower()) { case "descriptionflags": ObjectDescriptionFlag objectDescFlag = new ObjectDescriptionFlag(); objectDescFlag = (ObjectDescriptionFlag)Convert.ToUInt32(parameters[1]); debugOutput = $"{objectDescFlag.GetType().Name} = {objectDescFlag.ToString()}" + " (" + (uint)objectDescFlag + ")"; break; case "weenieflags": WeenieHeaderFlag weenieHdr = new WeenieHeaderFlag(); weenieHdr = (WeenieHeaderFlag)Convert.ToUInt32(parameters[1]); debugOutput = $"{weenieHdr.GetType().Name} = {weenieHdr.ToString()}" + " (" + (uint)weenieHdr + ")"; break; case "weenieflags2": WeenieHeaderFlag2 weenieHdr2 = new WeenieHeaderFlag2(); weenieHdr2 = (WeenieHeaderFlag2)Convert.ToUInt32(parameters[1]); debugOutput = $"{weenieHdr2.GetType().Name} = {weenieHdr2.ToString()}" + " (" + (uint)weenieHdr2 + ")"; break; case "positionflag": UpdatePositionFlag posFlag = new UpdatePositionFlag(); posFlag = (UpdatePositionFlag)Convert.ToUInt32(parameters[1]); debugOutput = $"{posFlag.GetType().Name} = {posFlag.ToString()}" + " (" + (uint)posFlag + ")"; break; case "type": ItemType objectType = new ItemType(); objectType = (ItemType)Convert.ToUInt32(parameters[1]); debugOutput = $"{objectType.GetType().Name} = {objectType.ToString()}" + " (" + (uint)objectType + ")"; break; case "containertype": ContainerType contType = new ContainerType(); contType = (ContainerType)Convert.ToUInt32(parameters[1]); debugOutput = $"{contType.GetType().Name} = {contType.ToString()}" + " (" + (uint)contType + ")"; break; case "usable": Usable usableType = new Usable(); usableType = (Usable)Convert.ToInt64(parameters[1]); debugOutput = $"{usableType.GetType().Name} = {usableType.ToString()}" + " (" + (Int64)usableType + ")"; break; case "radarbehavior": RadarBehavior radarBeh = new RadarBehavior(); radarBeh = (RadarBehavior)Convert.ToUInt32(parameters[1]); debugOutput = $"{radarBeh.GetType().Name} = {radarBeh.ToString()}" + " (" + (uint)radarBeh + ")"; break; case "physicsdescriptionflags": PhysicsDescriptionFlag physicsDescFlag = new PhysicsDescriptionFlag(); physicsDescFlag = (PhysicsDescriptionFlag)Convert.ToUInt32(parameters[1]); debugOutput = $"{physicsDescFlag.GetType().Name} = {physicsDescFlag.ToString()}" + " (" + (uint)physicsDescFlag + ")"; break; case "physicsstate": PhysicsState physState = new PhysicsState(); physState = (PhysicsState)Convert.ToUInt32(parameters[1]); debugOutput = $"{physState.GetType().Name} = {physState.ToString()}" + " (" + (uint)physState + ")"; break; case "validlocations": EquipMask locFlags = new EquipMask(); locFlags = (EquipMask)Convert.ToUInt32(parameters[1]); debugOutput = $"{locFlags.GetType().Name} = {locFlags.ToString()}" + " (" + (uint)locFlags + ")"; break; case "currentwieldedlocation": EquipMask locFlags2 = new EquipMask(); locFlags2 = (EquipMask)Convert.ToUInt32(parameters[1]); debugOutput = $"{locFlags2.GetType().Name} = {locFlags2.ToString()}" + " (" + (uint)locFlags2 + ")"; break; case "priority": CoverageMask covMask = new CoverageMask(); covMask = (CoverageMask)Convert.ToUInt32(parameters[1]); debugOutput = $"{covMask.GetType().Name} = {covMask.ToString()}" + " (" + (uint)covMask + ")"; break; case "radarcolor": RadarColor radarBlipColor = new RadarColor(); radarBlipColor = (RadarColor)Convert.ToUInt32(parameters[1]); debugOutput = $"{radarBlipColor.GetType().Name} = {radarBlipColor.ToString()}" + " (" + (uint)radarBlipColor + ")"; break; default: debugOutput = "No valid type to test"; break; } if (session == null) { Console.WriteLine(debugOutput.Replace(", ", " | ")); } else { session.Network.EnqueueSend(new GameMessageSystemChat(debugOutput, ChatMessageType.System)); } } } catch (Exception) { string debugOutput = "Exception Error, check input and try again"; if (session == null) { Console.WriteLine(debugOutput.Replace(", ", " | ")); } else { session.Network.EnqueueSend(new GameMessageSystemChat(debugOutput, ChatMessageType.System)); } } }
/*public static List<EquipMask> GetFlags(EquipMask locations) * { * return Enum.GetValues(typeof(EquipMask)).Cast<EquipMask>().Where(p => p != EquipMask.None && locations.HasFlag(p)).ToList(); * }*/ public static List <CoverageMask> GetFlags(CoverageMask coverage) { return(Enum.GetValues(typeof(CoverageMask)).Cast <CoverageMask>().Where(p => p != CoverageMask.Unknown && coverage.HasFlag(p)).ToList()); }
public static List <CoverageMask> ReductionOptions(this CoverageMask value) { List <CoverageMask> options = new List <CoverageMask>(); if (value.GetTotalBitsSet() <= 1 || !value.IsBodyArmor() || value.IsRobe()) { options.Add(value); } else { if (value == (CoverageMask.OuterwearUpperArms | CoverageMask.OuterwearLowerArms)) { options.Add(CoverageMask.OuterwearUpperArms); options.Add(CoverageMask.OuterwearLowerArms); } else if (value == (CoverageMask.OuterwearUpperLegs | CoverageMask.OuterwearLowerLegs)) { options.Add(CoverageMask.OuterwearUpperLegs); options.Add(CoverageMask.OuterwearLowerLegs); } else if (value == (CoverageMask.OuterwearLowerLegs | CoverageMask.Feet)) { options.Add(CoverageMask.Feet); } else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearAbdomen)) { options.Add(CoverageMask.OuterwearChest); } else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperArms)) { options.Add(CoverageMask.OuterwearChest); } else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearUpperArms | CoverageMask.OuterwearLowerArms)) { options.Add(CoverageMask.OuterwearChest); } else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearUpperArms)) { options.Add(CoverageMask.OuterwearChest); } else if (value == (CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperLegs | CoverageMask.OuterwearLowerLegs)) { options.Add(CoverageMask.OuterwearAbdomen); options.Add(CoverageMask.OuterwearUpperLegs); options.Add(CoverageMask.OuterwearLowerLegs); } else if (value == (CoverageMask.OuterwearChest | CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperArms | CoverageMask.OuterwearLowerArms)) { options.Add(CoverageMask.OuterwearChest); } else if (value == (CoverageMask.OuterwearAbdomen | CoverageMask.OuterwearUpperLegs)) { // 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(CoverageMask.OuterwearAbdomen); } else { throw new Exception("Unable to determine reduction paths for CoverageMask of " + value); } } return(options); }
public static bool IsPants(this CoverageMask value) { return(((int)value & 0x00000017) != 0); }
public static bool IsShirt(this CoverageMask value) { return(((int)value & 0x00000078) != 0); }
public static bool IsUnderwear(this CoverageMask value) { return(((int)value & 0x0000007F) != 0); }
public static bool IsRobe(this CoverageMask value) { return((int)value == 0x00013F00); }
public static bool IsBodyArmor(this CoverageMask value) { return(((int)value & 0x0001FF00) != 0); }
/// <summary> /// Calculates the ClothingPriority of an item based on the actual coverage. So while an Over-Robe may just be "Chest", we want to know it covers everything but head & arms. /// </summary> /// <param name="setupId">Defaults to HUMAN_MALE if not set, which is good enough</param> /// <returns></returns> public CoverageMask?GetVisualPriority(uint setupId = 0x02000001) { if (ClothingBaseEffects.ContainsKey(setupId)) { CoverageMask visualPriority = 0; foreach (CloObjectEffect t in ClothingBaseEffects[setupId].CloObjectEffects) { switch (t.Index) { case 0: // HUMAN_ABDOMEN; visualPriority |= CoverageMask.OuterwearAbdomen; break; case 1: // HUMAN_LEFT_UPPER_LEG; case 5: // HUMAN_RIGHT_UPPER_LEG; visualPriority |= CoverageMask.OuterwearUpperLegs; break; case 2: // HUMAN_LEFT_LOWER_LEG; case 6: // HUMAN_RIGHT_LOWER_LEG; visualPriority |= CoverageMask.OuterwearLowerLegs; break; case 3: // HUMAN_LEFT_FOOT; case 4: // HUMAN_LEFT_TOE; case 7: // HUMAN_RIGHT_FOOT; case 8: // HUMAN_RIGHT_TOE; visualPriority |= CoverageMask.Feet; break; case 9: // HUMAN_CHEST; visualPriority |= CoverageMask.OuterwearChest; break; case 10: // HUMAN_LEFT_UPPER_ARM; case 13: // HUMAN_RIGHT_UPPER_ARM; visualPriority |= CoverageMask.OuterwearUpperArms; break; case 11: // HUMAN_LEFT_LOWER_ARM; case 14: // HUMAN_RIGHT_LOWER_ARM; visualPriority |= CoverageMask.OuterwearLowerArms; break; case 12: // HUMAN_LEFT_HAND; case 15: // HUMAN_RIGHT_HAND; visualPriority |= CoverageMask.Hands; break; case 16: // HUMAN_HEAD; visualPriority |= CoverageMask.Head; break; default: // Lots of things we don't care about break; } } return(visualPriority); } else { return(null); } }