2023-10-13 09:38:52 +00:00
|
|
|
|
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
|
|
|
|
|
{
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static bool HasStatus(this IPlayerCharacter character, uint statusId)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return character.StatusList.Any(status => status.StatusId == statusId);
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static bool HasStatus(this IPlayerCharacter character, List<uint> statusList)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return character.StatusList.Any(status => statusList.Contains(status.StatusId));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static bool HasOnlineStatus(this IPlayerCharacter character, uint statusId)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return character.OnlineStatus.Id == statusId;
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static int StatusCount(this IPlayerCharacter character, List<uint> statusList)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return character.StatusList.Count(status => statusList.Contains(status.StatusId));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static bool HasPet(this IPlayerCharacter character)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
2024-07-09 21:01:17 +00:00
|
|
|
|
var ownedObjects = Service.ObjectTable.Where(obj => obj.OwnerId == character.GameObjectId);
|
2023-10-13 09:38:52 +00:00
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
return ownedObjects.Any(obj => obj.ObjectKind == ObjectKind.BattleNpc && (obj as IBattleNpc)?.SubKind == (byte) BattleNpcSubKind.Pet);
|
2023-10-13 09:38:52 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static IEnumerable<IPlayerCharacter> Alive(this IEnumerable<IPlayerCharacter> list)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return list.Where(member => member.CurrentHp > 0);
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static IEnumerable<IPlayerCharacter> WithJob(this IEnumerable<IPlayerCharacter> list, uint jobID)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return list.Where(member => member.ClassJob.Id == jobID);
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static IEnumerable<IPlayerCharacter> WithJob(this IEnumerable<IPlayerCharacter> list, List<uint> jobList)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return list.Where(member => jobList.Contains(member.ClassJob.Id));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static IEnumerable<IPlayerCharacter> WithStatus(this IEnumerable<IPlayerCharacter> list, uint statusID)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return list.Where(member => member.HasStatus(statusID));
|
|
|
|
|
}
|
|
|
|
|
|
2024-07-09 21:01:17 +00:00
|
|
|
|
public static IEnumerable<IPlayerCharacter> WithStatus(this IEnumerable<IPlayerCharacter> list, List<uint> statusList)
|
2023-10-13 09:38:52 +00:00
|
|
|
|
{
|
|
|
|
|
return list.Where(member => member.HasStatus(statusList));
|
|
|
|
|
}
|
2024-07-09 21:01:17 +00:00
|
|
|
|
}
|