2025-03-01 20:38:45 -05:00

67 lines
2.2 KiB
C#

using Dalamud.Plugin.Services;
namespace QuestShare.Services
{
internal class PartyService : IService
{
public void Initialize()
{
Framework.Update += OnFramework;
}
public void Shutdown()
{
Framework.Update -= OnFramework;
}
public long PartyId { get; private set; }
private List<long> PartyMembers { get; set; } = [];
private void OnFramework(IFramework framework)
{
if (PartyList.Length > 0 && PartyId == 0)
{
PartyId = PartyList.PartyId;
Log.Debug($"Joined party {PartyId}");
PartyMembers.Clear();
foreach (var member in PartyList)
{
Log.Debug($"Party member {member.Name.TextValue} - {member.ContentId}");
PartyMembers.Add(member.ContentId);
}
}
else if (PartyList.Length == 0 && PartyId != 0)
{
PartyId = 0;
Log.Debug($"Left party");
PartyMembers.Clear();
}
else if (PartyList.Length != PartyMembers.Count)
{
var newMembers = PartyList.Where(x => !PartyMembers.Contains(x.ContentId)).ToList();
var leftMembers = PartyMembers.Where(x => !PartyList.Any(y => y.ContentId == x)).ToList();
foreach (var member in newMembers)
{
Log.Debug($"Party member {member.Name.TextValue} - {member.ContentId}");
PartyMembers.Add(member.ContentId);
}
foreach (var member in leftMembers)
{
Log.Debug($"Party member left {member}");
PartyMembers.Remove(member);
}
}
}
public List<string> GetPartyMembers(Objects.Session session)
{
var members = new List<string>();
foreach (var member in PartyList)
{
members.Add(member.ContentId.ToString().SaltedHash(session.ShareCode));
}
return members;
}
}
}