using System.Collections.Generic; using System.Linq; using Dalamud.Game.ClientState.Objects.Enums; using Dalamud.Game.ClientState.Objects.SubKinds; using Dalamud.Game.ClientState.Objects.Types; namespace KamiLib.Extensions; public static class PlayerCharacterExtensions { public static bool HasStatus(this IPlayerCharacter character, uint statusId) { return character.StatusList.Any(status => status.StatusId == statusId); } public static bool HasStatus(this IPlayerCharacter character, List statusList) { return character.StatusList.Any(status => statusList.Contains(status.StatusId)); } public static bool HasOnlineStatus(this IPlayerCharacter character, uint statusId) { return character.OnlineStatus.Id == statusId; } public static int StatusCount(this IPlayerCharacter character, List statusList) { return character.StatusList.Count(status => statusList.Contains(status.StatusId)); } public static bool HasPet(this IPlayerCharacter character) { var ownedObjects = Service.ObjectTable.Where(obj => obj.OwnerId == character.GameObjectId); return ownedObjects.Any(obj => obj.ObjectKind == ObjectKind.BattleNpc && (obj as IBattleNpc)?.SubKind == (byte) BattleNpcSubKind.Pet); } public static IEnumerable Alive(this IEnumerable list) { return list.Where(member => member.CurrentHp > 0); } public static IEnumerable WithJob(this IEnumerable list, uint jobID) { return list.Where(member => member.ClassJob.Id == jobID); } public static IEnumerable WithJob(this IEnumerable list, List jobList) { return list.Where(member => jobList.Contains(member.ClassJob.Id)); } public static IEnumerable WithStatus(this IEnumerable list, uint statusID) { return list.Where(member => member.HasStatus(statusID)); } public static IEnumerable WithStatus(this IEnumerable list, List statusList) { return list.Where(member => member.HasStatus(statusList)); } }