135 lines
4.9 KiB
C#
135 lines
4.9 KiB
C#
using FFXIVClientStructs.FFXIV.Client.UI;
|
|
using Newtonsoft.Json;
|
|
using QuestShare.Common.API;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace QuestShare.Services
|
|
{
|
|
internal class ShareService
|
|
{
|
|
internal static uint ActiveQuestId { get; set; } = 0;
|
|
internal static byte ActiveQuestStep { get; set; } = 0;
|
|
internal static List<SharedMember> SharedMembers = [];
|
|
internal static List<ulong> PartyMembers = [];
|
|
internal static bool IsGrouped { get; set; } = false;
|
|
internal static bool IsHost { get; set; } = false;
|
|
internal static bool IsRegistered { get; set; } = false;
|
|
internal static bool IsMsqTracking { get; set; } = false;
|
|
internal static string ShareCode { get; private set; } = "";
|
|
internal static string HostedShareCode { get; private set; } = "";
|
|
internal static string Token { get; set; } = "";
|
|
|
|
public static void Initialize()
|
|
{
|
|
Addons.AddonPartyList.OnMemberCountChanged += OnPartyChanged;
|
|
ClientState.Login += OnLogin;
|
|
ClientState.Logout += OnLogout;
|
|
}
|
|
|
|
public static void Dispose()
|
|
{
|
|
OnLogout(0,0);
|
|
Addons.AddonPartyList.OnMemberCountChanged -= OnPartyChanged;
|
|
ClientState.Login -= OnLogin;
|
|
ClientState.Logout -= OnLogout;
|
|
}
|
|
|
|
public static void OnLogin()
|
|
{
|
|
ShareCode = Plugin.Configuration.Instance.LastShareCode;
|
|
Token = Plugin.Configuration.Instance.Token;
|
|
}
|
|
|
|
public static void OnLogout(int code, int state)
|
|
{
|
|
Plugin.Configuration.Instance.Token = Token;
|
|
Plugin.Configuration.Instance.LastShareCode = ShareCode;
|
|
Plugin.Configuration.Save();
|
|
SharedMembers = [];
|
|
PartyMembers = [];
|
|
IsGrouped = false;
|
|
IsHost = false;
|
|
IsRegistered = false;
|
|
ShareCode = "";
|
|
HostedShareCode = "";
|
|
Token = "";
|
|
ActiveQuestId = 0;
|
|
ActiveQuestStep = 0;
|
|
}
|
|
|
|
public static void SetShareCode(string shareCode)
|
|
{
|
|
ShareCode = shareCode;
|
|
}
|
|
|
|
public static void SetHostedShareCode(string shareCode)
|
|
{
|
|
HostedShareCode = shareCode;
|
|
}
|
|
|
|
public static void SetActiveQuest(uint questId, byte questStep)
|
|
{
|
|
Log.Debug($"Setting active quest to {questId} - {questStep}");
|
|
ActiveQuestId = questId;
|
|
ActiveQuestStep = questStep;
|
|
}
|
|
private static void OnPartyChanged(object? sender, EventArgs e)
|
|
{
|
|
var members = new List<ulong>();
|
|
foreach (var member in PartyList)
|
|
{
|
|
members.Add((ulong)member.ContentId);
|
|
}
|
|
PartyMembers = members;
|
|
SocketClientService.DispatchUpdate(true);
|
|
}
|
|
|
|
public class SharedMember
|
|
{
|
|
public required ulong CharacterId { get; set; }
|
|
public string CharacterName => ResolveCharacterName(CharacterId);
|
|
public bool IsHost { get; set; } = false;
|
|
public bool IsMe { get; set; } = false;
|
|
|
|
}
|
|
|
|
public static string ResolveCharacterName(ulong characterId)
|
|
{
|
|
var member = SharedMembers.FirstOrDefault(m => m.CharacterId == characterId);
|
|
if (member != null && member.CharacterName == "")
|
|
{
|
|
if (File.Exists(Path.Join(Plugin.PluginDataPath, "CharacterNames.json")))
|
|
{
|
|
var characterNames = JsonConvert.DeserializeObject<Dictionary<ulong, string>>(File.ReadAllText(Path.Join(Plugin.PluginDataPath, "CharacterNames.json")));
|
|
if (characterNames != null && characterNames.ContainsKey(member.CharacterId))
|
|
{
|
|
return characterNames[member.CharacterId];
|
|
}
|
|
}
|
|
return member.CharacterName;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public static void SaveCharacterName(ulong characterId, string characterName)
|
|
{
|
|
if (File.Exists(Path.Join(Plugin.PluginDataPath, "CharacterNames.json")))
|
|
{
|
|
var characterNames = JsonConvert.DeserializeObject<Dictionary<ulong, string>>(File.ReadAllText(Path.Join(Plugin.PluginDataPath, "CharacterNames.json")));
|
|
characterNames ??= [];
|
|
characterNames[characterId] = characterName;
|
|
File.WriteAllText(Path.Join(Plugin.PluginDataPath, "CharacterNames.json"), JsonConvert.SerializeObject(characterNames));
|
|
}
|
|
else
|
|
{
|
|
File.WriteAllText(Path.Join(Plugin.PluginDataPath, "CharacterNames.json"), JsonConvert.SerializeObject(new Dictionary<ulong, string> { { characterId, characterName } }));
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|