diff --git a/Pilz.Dalamud/ActivityContexts/ActivityContextManager.cs b/Pilz.Dalamud/ActivityContexts/ActivityContextManager.cs index 79ec984..5ba94f3 100644 --- a/Pilz.Dalamud/ActivityContexts/ActivityContextManager.cs +++ b/Pilz.Dalamud/ActivityContexts/ActivityContextManager.cs @@ -73,11 +73,11 @@ namespace Pilz.Dalamud.ActivityContexts // Check for ZoneType newZoneType = memberType switch { - 2 => ZoneType.Dungeon, + 2 => ZoneType.Doungen, 3 => ZoneType.Raid, 4 => ZoneType.AllianceRaid, 127 => ZoneType.Foray, - _ => ZoneType.Dungeon, + _ => ZoneType.Doungen, }; } } diff --git a/Pilz.Dalamud/ActivityContexts/ZoneType.cs b/Pilz.Dalamud/ActivityContexts/ZoneType.cs index 1964a88..aa40d28 100644 --- a/Pilz.Dalamud/ActivityContexts/ZoneType.cs +++ b/Pilz.Dalamud/ActivityContexts/ZoneType.cs @@ -8,14 +8,15 @@ using System.Threading.Tasks; namespace Pilz.Dalamud.ActivityContexts { - [JsonConverter(typeof(StringEnumConverter))] + [Flags, JsonConverter(typeof(StringEnumConverter))] public enum ZoneType { - Overworld, - Dungeon, - Raid, - AllianceRaid, - Foray, - Pvp + Overworld = 1, + Doungen = 2, + Raid = 4, + AllianceRaid = 8, + Foray = 16, + Pvp = 32, + Everywhere = int.MaxValue } } diff --git a/PlayerTags/Configuration/PluginConfiguration.cs b/PlayerTags/Configuration/PluginConfiguration.cs index 0b93eb5..103a02a 100644 --- a/PlayerTags/Configuration/PluginConfiguration.cs +++ b/PlayerTags/Configuration/PluginConfiguration.cs @@ -15,7 +15,7 @@ using System.Runtime.CompilerServices; namespace PlayerTags.Configuration { [Serializable] - public class PluginConfiguration : IPluginConfiguration + public partial class PluginConfiguration : IPluginConfiguration { private const int DEFAULT_CONFIG_VERSION = 1; @@ -32,7 +32,7 @@ namespace PlayerTags.Configuration void copyOverSettings(ActivityType srcType, ZoneType destType) { var src = value[srcType]; - var dest = GeneralOptions[destType]; + var dest = ZoneConfig[destType]; dest.IsApplyTagsToAllChatMessagesEnabled = src.IsApplyTagsToAllChatMessagesEnabled; dest.NameplateDeadPlayerHandling = src.NameplateDeadPlayerHandling; dest.NameplateFreeCompanyVisibility = src.NameplateFreeCompanyVisibility; @@ -40,22 +40,27 @@ namespace PlayerTags.Configuration dest.NameplateTitleVisibility = src.NameplateTitleVisibility; } + copyOverSettings(ActivityType.None, ZoneType.Everywhere); copyOverSettings(ActivityType.None, ZoneType.Overworld); copyOverSettings(ActivityType.PvpDuty, ZoneType.Pvp); - copyOverSettings(ActivityType.PveDuty, ZoneType.Dungeon); + copyOverSettings(ActivityType.PveDuty, ZoneType.Doungen); copyOverSettings(ActivityType.PveDuty, ZoneType.Raid); copyOverSettings(ActivityType.PveDuty, ZoneType.AllianceRaid); copyOverSettings(ActivityType.PveDuty, ZoneType.Foray); } } - [JsonProperty("GeneralOptionsV3")] - public Dictionary GeneralOptions = new() + public Dictionary ZoneConfig = new() { - { ZoneType.Overworld, new GeneralOptionsClass() } + { ZoneType.Overworld, new PluginZoneConfiguration() }, + { ZoneType.Doungen, new PluginZoneConfiguration() }, + { ZoneType.Raid, new PluginZoneConfiguration() }, + { ZoneType.AllianceRaid, new PluginZoneConfiguration() }, + { ZoneType.Foray, new PluginZoneConfiguration() }, + { ZoneType.Pvp, new PluginZoneConfiguration() }, + { ZoneType.Everywhere, new PluginZoneConfiguration() } }; - public DefaultPluginDataTemplate DefaultPluginDataTemplate = DefaultPluginDataTemplate.Simple; public StatusIconPriorizerSettings StatusIconPriorizerSettings = new(true); public bool MoveStatusIconToNameplateTextIfPossible = true; public bool IsPlayerNameRandomlyGenerated = false; @@ -68,37 +73,8 @@ namespace PlayerTags.Configuration public bool IsPlayersTabAllianceVisible = true; public bool IsPlayersTabEnemiesVisible = true; public bool IsPlayersTabOthersVisible = false; - public bool IsGeneralOptionsAllTheSameEnabled = true; - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public Dictionary AllTagsChanges = new Dictionary(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public Dictionary AllRoleTagsChanges = new Dictionary(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public Dictionary> RoleTagsChanges = new Dictionary>(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public Dictionary> DpsRoleTagsChanges = new Dictionary>(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public Dictionary> RangedDpsRoleTagsChanges = new Dictionary>(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public Dictionary> LandHandRoleTagsChanges = new Dictionary>(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public Dictionary> JobTagsChanges = new Dictionary>(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public Dictionary AllCustomTagsChanges = new Dictionary(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public List> CustomTagsChanges = new List>(); - - [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] - public List Identities = new List(); + public bool IsSimpleUIEnabled = true; + public bool IsApplyToEverywhereEnabled = true; #region Obsulate Properties @@ -107,8 +83,8 @@ namespace PlayerTags.Configuration { set { - foreach (var key in GeneralOptions.Keys) - GeneralOptions[key].NameplateFreeCompanyVisibility = value; + foreach (var key in ZoneConfig.Keys) + ZoneConfig[key].NameplateFreeCompanyVisibility = value; } } [JsonProperty("NameplateTitleVisibility"), Obsolete] @@ -116,8 +92,8 @@ namespace PlayerTags.Configuration { set { - foreach (var key in GeneralOptions.Keys) - GeneralOptions[key].NameplateTitleVisibility = value; + foreach (var key in ZoneConfig.Keys) + ZoneConfig[key].NameplateTitleVisibility = value; } } [JsonProperty("NameplateTitlePosition"), Obsolete] @@ -125,8 +101,8 @@ namespace PlayerTags.Configuration { set { - foreach (var key in GeneralOptions.Keys) - GeneralOptions[key].NameplateTitlePosition = value; + foreach (var key in ZoneConfig.Keys) + ZoneConfig[key].NameplateTitlePosition = value; } } @@ -135,8 +111,8 @@ namespace PlayerTags.Configuration { set { - foreach (var key in GeneralOptions.Keys) - GeneralOptions[key].IsApplyTagsToAllChatMessagesEnabled = value; + foreach (var key in ZoneConfig.Keys) + ZoneConfig[key].IsApplyTagsToAllChatMessagesEnabled = value; } } @@ -146,105 +122,15 @@ namespace PlayerTags.Configuration public void Save(PluginData pluginData) { - AllTagsChanges = pluginData.AllTags.GetChanges(pluginData.Default.AllTags.GetChanges()); - AllRoleTagsChanges = pluginData.AllRoleTags.GetChanges(pluginData.Default.AllRoleTags.GetChanges()); - - RoleTagsChanges = new Dictionary>(); - foreach ((var role, var roleTag) in pluginData.RoleTags) - { - Dictionary? defaultChanges = new Dictionary(); - if (pluginData.Default.RoleTags.TryGetValue(role, out var defaultTag)) - { - defaultChanges = defaultTag.GetChanges(); - } - - var changes = roleTag.GetChanges(defaultChanges); - if (changes.Any()) - { - RoleTagsChanges[role] = changes; - } - } - - DpsRoleTagsChanges = new Dictionary>(); - foreach ((var dpsRole, var dpsRoleTag) in pluginData.DpsRoleTags) - { - Dictionary? defaultChanges = new Dictionary(); - if (pluginData.Default.DpsRoleTags.TryGetValue(dpsRole, out var defaultTag)) - { - defaultChanges = defaultTag.GetChanges(); - } - - var changes = dpsRoleTag.GetChanges(defaultChanges); - if (changes.Any()) - { - DpsRoleTagsChanges[dpsRole] = changes; - } - } - - RangedDpsRoleTagsChanges = new Dictionary>(); - foreach ((var rangedDpsRole, var rangedDpsRoleTag) in pluginData.RangedDpsRoleTags) - { - Dictionary? defaultChanges = new Dictionary(); - if (pluginData.Default.RangedDpsRoleTags.TryGetValue(rangedDpsRole, out var defaultTag)) - { - defaultChanges = defaultTag.GetChanges(); - } - - var changes = rangedDpsRoleTag.GetChanges(defaultChanges); - if (changes.Any()) - { - RangedDpsRoleTagsChanges[rangedDpsRole] = changes; - } - } - - LandHandRoleTagsChanges = new Dictionary>(); - foreach ((var landHandRole, var landHandRoleTag) in pluginData.LandHandRoleTags) - { - Dictionary? defaultChanges = new Dictionary(); - if (pluginData.Default.LandHandRoleTags.TryGetValue(landHandRole, out var defaultTag)) - { - defaultChanges = defaultTag.GetChanges(); - } - - var changes = landHandRoleTag.GetChanges(defaultChanges); - if (changes.Any()) - { - LandHandRoleTagsChanges[landHandRole] = changes; - } - } - - JobTagsChanges = new Dictionary>(); - foreach ((var jobAbbreviation, var jobTag) in pluginData.JobTags) - { - Dictionary? defaultChanges = new Dictionary(); - if (pluginData.Default.JobTags.TryGetValue(jobAbbreviation, out var defaultTag)) - { - defaultChanges = defaultTag.GetChanges(); - } - - var changes = jobTag.GetChanges(defaultChanges); - if (changes.Any()) - { - JobTagsChanges[jobAbbreviation] = changes; - } - } - - AllCustomTagsChanges = pluginData.AllCustomTags.GetChanges(pluginData.Default.AllCustomTags.GetChanges()); - - CustomTagsChanges = new List>(); - foreach (var customTag in pluginData.CustomTags) - { - CustomTagsChanges.Add(customTag.GetChanges()); - } - - Identities = pluginData.Identities; + foreach (var zoneConfig in ZoneConfig) + zoneConfig.Value.ApplyTagsData(pluginData.GetTagsData(zoneConfig.Key)); SavePluginConfig(); Saved?.Invoke(); } - private void SavePluginConfig() + public void SavePluginConfig() { Version = DEFAULT_CONFIG_VERSION; var configFilePath = GetConfigFilePath(); @@ -289,14 +175,14 @@ namespace PlayerTags.Configuration return jsonSettings; } - } - public class GeneralOptionsClass - { - public NameplateFreeCompanyVisibility NameplateFreeCompanyVisibility = NameplateFreeCompanyVisibility.Default; - public NameplateTitleVisibility NameplateTitleVisibility = NameplateTitleVisibility.WhenHasTags; - public NameplateTitlePosition NameplateTitlePosition = NameplateTitlePosition.AlwaysAboveName; - public DeadPlayerHandling NameplateDeadPlayerHandling = DeadPlayerHandling.Include; - public bool IsApplyTagsToAllChatMessagesEnabled = true; + private class GeneralOptionsClass + { + public NameplateFreeCompanyVisibility NameplateFreeCompanyVisibility = NameplateFreeCompanyVisibility.Default; + public NameplateTitleVisibility NameplateTitleVisibility = NameplateTitleVisibility.WhenHasTags; + public NameplateTitlePosition NameplateTitlePosition = NameplateTitlePosition.AlwaysAboveName; + public DeadPlayerHandling NameplateDeadPlayerHandling = DeadPlayerHandling.Include; + public bool IsApplyTagsToAllChatMessagesEnabled = true; + } } } diff --git a/PlayerTags/Configuration/PluginZoneConfiguration.cs b/PlayerTags/Configuration/PluginZoneConfiguration.cs new file mode 100644 index 0000000..7414928 --- /dev/null +++ b/PlayerTags/Configuration/PluginZoneConfiguration.cs @@ -0,0 +1,147 @@ +using Newtonsoft.Json; +using PlayerTags.Data; +using PlayerTags.Inheritables; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PlayerTags.Configuration +{ + public class PluginZoneConfiguration + { + public DefaultPluginDataTemplate DefaultPluginDataTemplate = DefaultPluginDataTemplate.Simple; + public NameplateFreeCompanyVisibility NameplateFreeCompanyVisibility = NameplateFreeCompanyVisibility.Default; + public NameplateTitleVisibility NameplateTitleVisibility = NameplateTitleVisibility.WhenHasTags; + public NameplateTitlePosition NameplateTitlePosition = NameplateTitlePosition.AlwaysAboveName; + public DeadPlayerHandling NameplateDeadPlayerHandling = DeadPlayerHandling.Include; + public bool IsApplyTagsToAllChatMessagesEnabled = true; + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public Dictionary AllTagsChanges = new Dictionary(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public Dictionary AllRoleTagsChanges = new Dictionary(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public Dictionary> RoleTagsChanges = new Dictionary>(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public Dictionary> DpsRoleTagsChanges = new Dictionary>(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public Dictionary> RangedDpsRoleTagsChanges = new Dictionary>(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public Dictionary> LandHandRoleTagsChanges = new Dictionary>(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public Dictionary> JobTagsChanges = new Dictionary>(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public Dictionary AllCustomTagsChanges = new Dictionary(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public List> CustomTagsChanges = new List>(); + + [JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)] + public List Identities = new List(); + + public void ApplyTagsData(PluginTagsData tagsData) + { + AllTagsChanges = tagsData.AllTags.GetChanges(tagsData.Default.AllTags.GetChanges()); + AllRoleTagsChanges = tagsData.AllRoleTags.GetChanges(tagsData.Default.AllRoleTags.GetChanges()); + + RoleTagsChanges = new Dictionary>(); + foreach ((var role, var roleTag) in tagsData.RoleTags) + { + Dictionary? defaultChanges = new Dictionary(); + if (tagsData.Default.RoleTags.TryGetValue(role, out var defaultTag)) + { + defaultChanges = defaultTag.GetChanges(); + } + + var changes = roleTag.GetChanges(defaultChanges); + if (changes.Any()) + { + RoleTagsChanges[role] = changes; + } + } + + DpsRoleTagsChanges = new Dictionary>(); + foreach ((var dpsRole, var dpsRoleTag) in tagsData.DpsRoleTags) + { + Dictionary? defaultChanges = new Dictionary(); + if (tagsData.Default.DpsRoleTags.TryGetValue(dpsRole, out var defaultTag)) + { + defaultChanges = defaultTag.GetChanges(); + } + + var changes = dpsRoleTag.GetChanges(defaultChanges); + if (changes.Any()) + { + DpsRoleTagsChanges[dpsRole] = changes; + } + } + + RangedDpsRoleTagsChanges = new Dictionary>(); + foreach ((var rangedDpsRole, var rangedDpsRoleTag) in tagsData.RangedDpsRoleTags) + { + Dictionary? defaultChanges = new Dictionary(); + if (tagsData.Default.RangedDpsRoleTags.TryGetValue(rangedDpsRole, out var defaultTag)) + { + defaultChanges = defaultTag.GetChanges(); + } + + var changes = rangedDpsRoleTag.GetChanges(defaultChanges); + if (changes.Any()) + { + RangedDpsRoleTagsChanges[rangedDpsRole] = changes; + } + } + + LandHandRoleTagsChanges = new Dictionary>(); + foreach ((var landHandRole, var landHandRoleTag) in tagsData.LandHandRoleTags) + { + Dictionary? defaultChanges = new Dictionary(); + if (tagsData.Default.LandHandRoleTags.TryGetValue(landHandRole, out var defaultTag)) + { + defaultChanges = defaultTag.GetChanges(); + } + + var changes = landHandRoleTag.GetChanges(defaultChanges); + if (changes.Any()) + { + LandHandRoleTagsChanges[landHandRole] = changes; + } + } + + JobTagsChanges = new Dictionary>(); + foreach ((var jobAbbreviation, var jobTag) in tagsData.JobTags) + { + Dictionary? defaultChanges = new Dictionary(); + if (tagsData.Default.JobTags.TryGetValue(jobAbbreviation, out var defaultTag)) + { + defaultChanges = defaultTag.GetChanges(); + } + + var changes = jobTag.GetChanges(defaultChanges); + if (changes.Any()) + { + JobTagsChanges[jobAbbreviation] = changes; + } + } + + AllCustomTagsChanges = tagsData.AllCustomTags.GetChanges(tagsData.Default.AllCustomTags.GetChanges()); + + CustomTagsChanges = new List>(); + foreach (var customTag in tagsData.CustomTags) + { + CustomTagsChanges.Add(customTag.GetChanges()); + } + + Identities = tagsData.Identities; + } + } +} diff --git a/PlayerTags/Data/PluginData.cs b/PlayerTags/Data/PluginData.cs index cd9c2c8..c8ca8e0 100644 --- a/PlayerTags/Data/PluginData.cs +++ b/PlayerTags/Data/PluginData.cs @@ -3,6 +3,7 @@ using Dalamud.Game.ClientState.Objects.SubKinds; using Dalamud.Game.ClientState.Party; using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Logging; +using Pilz.Dalamud.ActivityContexts; using PlayerTags.Configuration; using PlayerTags.PluginStrings; using System; @@ -13,19 +14,8 @@ namespace PlayerTags.Data { public class PluginData { - public DefaultPluginData Default; - public Tag AllTags; - public Tag AllRoleTags; - public Dictionary RoleTags; - public Dictionary DpsRoleTags; - public Dictionary RangedDpsRoleTags; - public Dictionary LandHandRoleTags; - public Dictionary JobTags; - public Tag AllCustomTags; - public List CustomTags; - public List Identities; - - private PluginConfiguration pluginConfiguration; + public Dictionary TagsData = new(); + private readonly PluginConfiguration pluginConfiguration; public PluginData(PluginConfiguration pluginConfiguration) { @@ -33,275 +23,26 @@ namespace PlayerTags.Data ReloadDefault(); } + public PluginTagsData GetTagsData(ZoneType zoneType) + { + return TagsData[zoneType]; + } + + public void ReloadDefault(ZoneType zoneType) + { + if (TagsData[zoneType].ReloadDefault()) + pluginConfiguration.Save(this); + } + public void ReloadDefault() { - Default = new DefaultPluginData(pluginConfiguration.DefaultPluginDataTemplate); + var needToSave = false; + + foreach (var tagsData in TagsData.Values) + needToSave |= tagsData.ReloadDefault(); - // Set the default changes and saved changes - AllTags = new Tag(new LocalizedPluginString(nameof(AllTags)), Default.AllTags); - AllTags.SetChanges(pluginConfiguration.AllTagsChanges); - - AllRoleTags = new Tag(new LocalizedPluginString(nameof(AllRoleTags)), Default.AllRoleTags); - AllRoleTags.SetChanges(pluginConfiguration.AllRoleTagsChanges); - - RoleTags = new Dictionary(); - foreach (var role in Enum.GetValues()) - { - if (Default.RoleTags.TryGetValue(role, out var defaultTag)) - { - RoleTags[role] = new Tag(new LocalizedPluginString(Localizer.GetName(role)), defaultTag); - if (pluginConfiguration.RoleTagsChanges.TryGetValue(role, out var savedChanges)) - { - RoleTags[role].SetChanges(savedChanges); - } - } - } - - DpsRoleTags = new Dictionary(); - foreach (var dpsRole in Enum.GetValues()) - { - if (Default.DpsRoleTags.TryGetValue(dpsRole, out var defaultTag)) - { - DpsRoleTags[dpsRole] = new Tag(new LocalizedPluginString(Localizer.GetName(dpsRole)), defaultTag); - if (pluginConfiguration.DpsRoleTagsChanges.TryGetValue(dpsRole, out var savedChanges)) - { - DpsRoleTags[dpsRole].SetChanges(savedChanges); - } - } - } - - RangedDpsRoleTags = new Dictionary(); - foreach (var rangedDpsRole in Enum.GetValues()) - { - if (Default.RangedDpsRoleTags.TryGetValue(rangedDpsRole, out var defaultTag)) - { - RangedDpsRoleTags[rangedDpsRole] = new Tag(new LocalizedPluginString(Localizer.GetName(rangedDpsRole)), defaultTag); - if (pluginConfiguration.RangedDpsRoleTagsChanges.TryGetValue(rangedDpsRole, out var savedChanges)) - { - RangedDpsRoleTags[rangedDpsRole].SetChanges(savedChanges); - } - } - } - - LandHandRoleTags = new Dictionary(); - foreach (var landHandRole in Enum.GetValues()) - { - if (Default.LandHandRoleTags.TryGetValue(landHandRole, out var defaultChanges)) - { - LandHandRoleTags[landHandRole] = new Tag(new LocalizedPluginString(Localizer.GetName(landHandRole)), defaultChanges); - if (pluginConfiguration.LandHandRoleTagsChanges.TryGetValue(landHandRole, out var savedChanges)) - { - LandHandRoleTags[landHandRole].SetChanges(savedChanges); - } - } - } - - JobTags = new Dictionary(); - foreach ((var jobAbbreviation, var role) in RoleHelper.RolesByJobAbbreviation) - { - if (Default.JobTags.TryGetValue(jobAbbreviation, out var defaultChanges)) - { - JobTags[jobAbbreviation] = new Tag(new LiteralPluginString(jobAbbreviation), defaultChanges); - if (pluginConfiguration.JobTagsChanges.TryGetValue(jobAbbreviation, out var savedChanges)) - { - JobTags[jobAbbreviation].SetChanges(savedChanges); - } - } - } - - AllCustomTags = new Tag(new LocalizedPluginString(nameof(AllCustomTags)), Default.AllCustomTags); - AllCustomTags.SetChanges(pluginConfiguration.AllCustomTagsChanges); - - CustomTags = new List(); - foreach (var savedChanges in pluginConfiguration.CustomTagsChanges) - { - var tag = new Tag(new LocalizedPluginString(nameof(CustomTags))); - tag.SetChanges(savedChanges); - CustomTags.Add(tag); - } - - // Set up the inheritance heirarchy - AllRoleTags.Parent = AllTags; - foreach ((var role, var roleTag) in RoleTags) - { - roleTag.Parent = AllRoleTags; - - if (role == Role.Dps) - { - foreach ((var dpsRole, var dpsRoleTag) in DpsRoleTags) - { - dpsRoleTag.Parent = roleTag; - - if (dpsRole == DpsRole.Ranged) - { - foreach ((var rangedDpsRole, var rangedDpsRoleTag) in RangedDpsRoleTags) - { - rangedDpsRoleTag.Parent = dpsRoleTag; - } - } - } - } - else if (role == Role.LandHand) - { - foreach ((var landHandRole, var landHandRoleTag) in LandHandRoleTags) - { - landHandRoleTag.Parent = roleTag; - } - } - } - - foreach ((var jobAbbreviation, var jobTag) in JobTags) - { - if (RoleHelper.RolesByJobAbbreviation.TryGetValue(jobAbbreviation, out var role)) - { - if (RoleHelper.DpsRolesByJobAbbreviation.TryGetValue(jobAbbreviation, out var dpsRole)) - { - if (RoleHelper.RangedDpsRolesByJobAbbreviation.TryGetValue(jobAbbreviation, out var rangedDpsRole)) - { - jobTag.Parent = RangedDpsRoleTags[rangedDpsRole]; - } - else - { - jobTag.Parent = DpsRoleTags[dpsRole]; - } - } - else if (RoleHelper.LandHandRolesByJobAbbreviation.TryGetValue(jobAbbreviation, out var landHandRole)) - { - jobTag.Parent = LandHandRoleTags[landHandRole]; - } - else - { - jobTag.Parent = RoleTags[RoleHelper.RolesByJobAbbreviation[jobAbbreviation]]; - } - } - } - - AllCustomTags.Parent = AllTags; - foreach (var tag in CustomTags) - { - tag.Parent = AllCustomTags; - } - - Identities = pluginConfiguration.Identities; - - // Migrate old custom tag identity assignments - bool customTagsMigrated = false; - foreach (var customTag in CustomTags) - { - if (customTag.CustomId.Value == Guid.Empty) - { - customTag.CustomId.Behavior = Inheritables.InheritableBehavior.Enabled; - customTag.CustomId.Value = Guid.NewGuid(); - customTagsMigrated = true; - } - - foreach (string identityToAddTo in customTag.IdentitiesToAddTo) - { - Identity? identity = Identities.FirstOrDefault(identity => identity.Name.ToLower() == identityToAddTo.ToLower()); - if (identity == null) - { - identity = new Identity(identityToAddTo); - Identities.Add(identity); - } - - if (identity != null) - { - identity.CustomTagIds.Add(customTag.CustomId.Value); - customTagsMigrated = true; - } - } - - if (customTag.GameObjectNamesToApplyTo.Behavior != Inheritables.InheritableBehavior.Inherit) - { - customTag.GameObjectNamesToApplyTo.Behavior = Inheritables.InheritableBehavior.Inherit; - customTag.GameObjectNamesToApplyTo.Value = ""; - customTagsMigrated = true; - } - } - - if (customTagsMigrated) - { + if (needToSave) pluginConfiguration.Save(this); - } - } - - public void AddCustomTagToIdentity(Tag customTag, Identity identity) - { - if (!identity.CustomTagIds.Contains(customTag.CustomId.Value)) - { - identity.CustomTagIds.Add(customTag.CustomId.Value); - } - - if (!Identities.Contains(identity)) - { - Identities.Add(identity); - } - } - - public void RemoveCustomTagFromIdentity(Tag customTag, Identity identity) - { - identity.CustomTagIds.Remove(customTag.CustomId.Value); - - if (!identity.CustomTagIds.Any()) - { - Identities.Remove(identity); - } - } - - public void RemoveCustomTagFromIdentities(Tag customTag) - { - foreach (var identity in Identities.ToArray()) - { - RemoveCustomTagFromIdentity(customTag, identity); - } - } - - public Identity GetIdentity(string name, uint? worldId) - { - foreach (var identity in Identities) - { - if (identity.Name.ToLower().Trim() == name.ToLower().Trim()) - { - if (identity.WorldId == null && worldId != null) - { - identity.WorldId = worldId; - pluginConfiguration.Save(this); - } - - return identity; - } - } - - return new Identity(name) - { - WorldId = worldId - }; - } - - public Identity? GetIdentity(GameObjectContextMenuOpenArgs contextMenuOpenedArgs) - { - if (string.IsNullOrEmpty(contextMenuOpenedArgs.Text?.TextValue) - || contextMenuOpenedArgs.ObjectWorld == 0 - || contextMenuOpenedArgs.ObjectWorld == 65535) - { - return null; - } - return GetIdentity(contextMenuOpenedArgs.Text?.TextValue ?? string.Empty, contextMenuOpenedArgs.ObjectWorld); - } - - public Identity GetIdentity(PlayerCharacter playerCharacter) - { - return GetIdentity(playerCharacter.Name.TextValue, playerCharacter.HomeWorld.Id); - } - - public Identity GetIdentity(PartyMember partyMember) - { - return GetIdentity(partyMember.Name.TextValue, partyMember.World.Id); - } - - public Identity GetIdentity(PlayerPayload playerPayload) - { - return GetIdentity(playerPayload.PlayerName, playerPayload.World.RowId); } } } diff --git a/PlayerTags/Data/PluginTagsData.cs b/PlayerTags/Data/PluginTagsData.cs new file mode 100644 index 0000000..667bb77 --- /dev/null +++ b/PlayerTags/Data/PluginTagsData.cs @@ -0,0 +1,308 @@ +using Dalamud.ContextMenu; +using Dalamud.Game.ClientState.Objects.SubKinds; +using Dalamud.Game.ClientState.Party; +using Dalamud.Game.Text.SeStringHandling.Payloads; +using PlayerTags.Configuration; +using PlayerTags.PluginStrings; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PlayerTags.Data +{ + public class PluginTagsData + { + public DefaultPluginData Default; + public Tag AllTags; + public Tag AllRoleTags; + public Dictionary RoleTags; + public Dictionary DpsRoleTags; + public Dictionary RangedDpsRoleTags; + public Dictionary LandHandRoleTags; + public Dictionary JobTags; + public Tag AllCustomTags; + public List CustomTags; + public List Identities; + private readonly PluginZoneConfiguration pluginZonedConfig; + + public PluginTagsData(PluginConfiguration pluginconfiguration, PluginZoneConfiguration pluginZonedConfiguration) + { + pluginZonedConfig = pluginZonedConfiguration; + ReloadDefault(); + } + + public bool ReloadDefault() + { + var needToSave = false; + Default = new DefaultPluginData(pluginZonedConfig.DefaultPluginDataTemplate); + + // Set the default changes and saved changes + AllTags = new Tag(new LocalizedPluginString(nameof(AllTags)), Default.AllTags); + AllTags.SetChanges(pluginZonedConfig.AllTagsChanges); + + AllRoleTags = new Tag(new LocalizedPluginString(nameof(AllRoleTags)), Default.AllRoleTags); + AllRoleTags.SetChanges(pluginZonedConfig.AllRoleTagsChanges); + + RoleTags = new Dictionary(); + foreach (var role in Enum.GetValues()) + { + if (Default.RoleTags.TryGetValue(role, out var defaultTag)) + { + RoleTags[role] = new Tag(new LocalizedPluginString(Localizer.GetName(role)), defaultTag); + if (pluginZonedConfig.RoleTagsChanges.TryGetValue(role, out var savedChanges)) + { + RoleTags[role].SetChanges(savedChanges); + } + } + } + + DpsRoleTags = new Dictionary(); + foreach (var dpsRole in Enum.GetValues()) + { + if (Default.DpsRoleTags.TryGetValue(dpsRole, out var defaultTag)) + { + DpsRoleTags[dpsRole] = new Tag(new LocalizedPluginString(Localizer.GetName(dpsRole)), defaultTag); + if (pluginZonedConfig.DpsRoleTagsChanges.TryGetValue(dpsRole, out var savedChanges)) + { + DpsRoleTags[dpsRole].SetChanges(savedChanges); + } + } + } + + RangedDpsRoleTags = new Dictionary(); + foreach (var rangedDpsRole in Enum.GetValues()) + { + if (Default.RangedDpsRoleTags.TryGetValue(rangedDpsRole, out var defaultTag)) + { + RangedDpsRoleTags[rangedDpsRole] = new Tag(new LocalizedPluginString(Localizer.GetName(rangedDpsRole)), defaultTag); + if (pluginZonedConfig.RangedDpsRoleTagsChanges.TryGetValue(rangedDpsRole, out var savedChanges)) + { + RangedDpsRoleTags[rangedDpsRole].SetChanges(savedChanges); + } + } + } + + LandHandRoleTags = new Dictionary(); + foreach (var landHandRole in Enum.GetValues()) + { + if (Default.LandHandRoleTags.TryGetValue(landHandRole, out var defaultChanges)) + { + LandHandRoleTags[landHandRole] = new Tag(new LocalizedPluginString(Localizer.GetName(landHandRole)), defaultChanges); + if (pluginZonedConfig.LandHandRoleTagsChanges.TryGetValue(landHandRole, out var savedChanges)) + { + LandHandRoleTags[landHandRole].SetChanges(savedChanges); + } + } + } + + JobTags = new Dictionary(); + foreach ((var jobAbbreviation, var role) in RoleHelper.RolesByJobAbbreviation) + { + if (Default.JobTags.TryGetValue(jobAbbreviation, out var defaultChanges)) + { + JobTags[jobAbbreviation] = new Tag(new LiteralPluginString(jobAbbreviation), defaultChanges); + if (pluginZonedConfig.JobTagsChanges.TryGetValue(jobAbbreviation, out var savedChanges)) + { + JobTags[jobAbbreviation].SetChanges(savedChanges); + } + } + } + + AllCustomTags = new Tag(new LocalizedPluginString(nameof(AllCustomTags)), Default.AllCustomTags); + AllCustomTags.SetChanges(pluginZonedConfig.AllCustomTagsChanges); + + CustomTags = new List(); + foreach (var savedChanges in pluginZonedConfig.CustomTagsChanges) + { + var tag = new Tag(new LocalizedPluginString(nameof(CustomTags))); + tag.SetChanges(savedChanges); + CustomTags.Add(tag); + } + + // Set up the inheritance heirarchy + AllRoleTags.Parent = AllTags; + foreach ((var role, var roleTag) in RoleTags) + { + roleTag.Parent = AllRoleTags; + + if (role == Role.Dps) + { + foreach ((var dpsRole, var dpsRoleTag) in DpsRoleTags) + { + dpsRoleTag.Parent = roleTag; + + if (dpsRole == DpsRole.Ranged) + { + foreach ((var rangedDpsRole, var rangedDpsRoleTag) in RangedDpsRoleTags) + { + rangedDpsRoleTag.Parent = dpsRoleTag; + } + } + } + } + else if (role == Role.LandHand) + { + foreach ((var landHandRole, var landHandRoleTag) in LandHandRoleTags) + { + landHandRoleTag.Parent = roleTag; + } + } + } + + foreach ((var jobAbbreviation, var jobTag) in JobTags) + { + if (RoleHelper.RolesByJobAbbreviation.TryGetValue(jobAbbreviation, out var role)) + { + if (RoleHelper.DpsRolesByJobAbbreviation.TryGetValue(jobAbbreviation, out var dpsRole)) + { + if (RoleHelper.RangedDpsRolesByJobAbbreviation.TryGetValue(jobAbbreviation, out var rangedDpsRole)) + { + jobTag.Parent = RangedDpsRoleTags[rangedDpsRole]; + } + else + { + jobTag.Parent = DpsRoleTags[dpsRole]; + } + } + else if (RoleHelper.LandHandRolesByJobAbbreviation.TryGetValue(jobAbbreviation, out var landHandRole)) + { + jobTag.Parent = LandHandRoleTags[landHandRole]; + } + else + { + jobTag.Parent = RoleTags[RoleHelper.RolesByJobAbbreviation[jobAbbreviation]]; + } + } + } + + AllCustomTags.Parent = AllTags; + foreach (var tag in CustomTags) + { + tag.Parent = AllCustomTags; + } + + Identities = pluginZonedConfig.Identities; + + // Migrate old custom tag identity assignments + bool customTagsMigrated = false; + foreach (var customTag in CustomTags) + { + if (customTag.CustomId.Value == Guid.Empty) + { + customTag.CustomId.Behavior = Inheritables.InheritableBehavior.Enabled; + customTag.CustomId.Value = Guid.NewGuid(); + customTagsMigrated = true; + } + + foreach (string identityToAddTo in customTag.IdentitiesToAddTo) + { + Identity? identity = Identities.FirstOrDefault(identity => identity.Name.ToLower() == identityToAddTo.ToLower()); + if (identity == null) + { + identity = new Identity(identityToAddTo); + Identities.Add(identity); + } + + if (identity != null) + { + identity.CustomTagIds.Add(customTag.CustomId.Value); + customTagsMigrated = true; + } + } + + if (customTag.GameObjectNamesToApplyTo.Behavior != Inheritables.InheritableBehavior.Inherit) + { + customTag.GameObjectNamesToApplyTo.Behavior = Inheritables.InheritableBehavior.Inherit; + customTag.GameObjectNamesToApplyTo.Value = ""; + customTagsMigrated = true; + } + } + + if (customTagsMigrated) + needToSave = true; + + return needToSave; + } + + public void AddCustomTagToIdentity(Tag customTag, Identity identity) + { + if (!identity.CustomTagIds.Contains(customTag.CustomId.Value)) + { + identity.CustomTagIds.Add(customTag.CustomId.Value); + } + + if (!Identities.Contains(identity)) + { + Identities.Add(identity); + } + } + + public void RemoveCustomTagFromIdentity(Tag customTag, Identity identity) + { + identity.CustomTagIds.Remove(customTag.CustomId.Value); + + if (!identity.CustomTagIds.Any()) + { + Identities.Remove(identity); + } + } + + public void RemoveCustomTagFromIdentities(Tag customTag) + { + foreach (var identity in Identities.ToArray()) + { + RemoveCustomTagFromIdentity(customTag, identity); + } + } + + public Identity GetIdentity(string name, uint? worldId) + { + foreach (var identity in Identities) + { + if (identity.Name.ToLower().Trim() == name.ToLower().Trim()) + { + if (identity.WorldId == null && worldId != null) + { + identity.WorldId = worldId; + pluginZonedConfig.ApplyTagsData(this); + } + + return identity; + } + } + + return new Identity(name) + { + WorldId = worldId + }; + } + + public Identity? GetIdentity(GameObjectContextMenuOpenArgs contextMenuOpenedArgs) + { + if (string.IsNullOrEmpty(contextMenuOpenedArgs.Text?.TextValue) + || contextMenuOpenedArgs.ObjectWorld == 0 + || contextMenuOpenedArgs.ObjectWorld == 65535) + { + return null; + } + return GetIdentity(contextMenuOpenedArgs.Text?.TextValue ?? string.Empty, contextMenuOpenedArgs.ObjectWorld); + } + + public Identity GetIdentity(PlayerCharacter playerCharacter) + { + return GetIdentity(playerCharacter.Name.TextValue, playerCharacter.HomeWorld.Id); + } + + public Identity GetIdentity(PartyMember partyMember) + { + return GetIdentity(partyMember.Name.TextValue, partyMember.World.Id); + } + + public Identity GetIdentity(PlayerPayload playerPayload) + { + return GetIdentity(playerPayload.PlayerName, playerPayload.World.RowId); + } + } +} diff --git a/PlayerTags/Features/ChatTagTargetFeature.cs b/PlayerTags/Features/ChatTagTargetFeature.cs index fe11e31..2a6c448 100644 --- a/PlayerTags/Features/ChatTagTargetFeature.cs +++ b/PlayerTags/Features/ChatTagTargetFeature.cs @@ -121,7 +121,7 @@ namespace PlayerTags.Features private void Chat_ChatMessage(XivChatType type, uint senderId, ref SeString sender, ref SeString message, ref bool isHandled) { - if (m_PluginConfiguration.GeneralOptions[ActivityContextManager.CurrentActivityContext.ActivityType].IsApplyTagsToAllChatMessagesEnabled) + if (m_PluginConfiguration.ZoneConfig[ActivityContextManager.CurrentActivityContext.ZoneType].IsApplyTagsToAllChatMessagesEnabled) { AddTagsToChat(sender, type, true); AddTagsToChat(message, type, false); @@ -335,7 +335,9 @@ namespace PlayerTags.Features if (isSender) SplitOffPartyNumberPrefix(message, chatType); + var tagsData = m_PluginData.GetTagsData(ActivityContextManager.CurrentActivityContext.ZoneType); var stringMatches = GetStringMatches(message); + foreach (var stringMatch in stringMatches) { StringChanges stringChanges = new(); @@ -347,7 +349,7 @@ namespace PlayerTags.Features if (stringMatch.GameObject is PlayerCharacter playerCharacter) { // Add the job tag - if (playerCharacter.ClassJob.GameData != null && m_PluginData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) + if (playerCharacter.ClassJob.GameData != null && tagsData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) { if (isTagEnabled(jobTag)) { @@ -378,10 +380,10 @@ namespace PlayerTags.Features // Add custom tags if (stringMatch.PlayerPayload != null) { - Identity identity = m_PluginData.GetIdentity(stringMatch.PlayerPayload); + Identity identity = tagsData.GetIdentity(stringMatch.PlayerPayload); foreach (var customTagId in identity.CustomTagIds) { - var customTag = m_PluginData.CustomTags.FirstOrDefault(tag => tag.CustomId.Value == customTagId); + var customTag = tagsData.CustomTags.FirstOrDefault(tag => tag.CustomId.Value == customTagId); if (customTag != null) { if (isTagEnabled(customTag)) @@ -407,17 +409,17 @@ namespace PlayerTags.Features // An additional step to apply text color to additional locations if (stringMatch.PlayerPayload != null && stringMatch.DisplayTextPayloads.Any()) { - Identity identity = m_PluginData.GetIdentity(stringMatch.PlayerPayload); + Identity identity = tagsData.GetIdentity(stringMatch.PlayerPayload); if (stringMatch.GameObject is PlayerCharacter playerCharacter1) { - if (playerCharacter1.ClassJob.GameData != null && m_PluginData.JobTags.TryGetValue(playerCharacter1.ClassJob.GameData.Abbreviation, out var jobTag) && isTagEnabled(jobTag)) + if (playerCharacter1.ClassJob.GameData != null && tagsData.JobTags.TryGetValue(playerCharacter1.ClassJob.GameData.Abbreviation, out var jobTag) && isTagEnabled(jobTag)) applyTextFormatting(jobTag); } foreach (var customTagId in identity.CustomTagIds) { - var customTag = m_PluginData.CustomTags.FirstOrDefault(tag => tag.CustomId.Value == customTagId); + var customTag = tagsData.CustomTags.FirstOrDefault(tag => tag.CustomId.Value == customTagId); if (customTag != null && isTagEnabled(customTag)) applyTextFormatting(customTag); } diff --git a/PlayerTags/Features/CustomTagsContextMenuFeature.cs b/PlayerTags/Features/CustomTagsContextMenuFeature.cs index dbfb362..8e41219 100644 --- a/PlayerTags/Features/CustomTagsContextMenuFeature.cs +++ b/PlayerTags/Features/CustomTagsContextMenuFeature.cs @@ -1,6 +1,7 @@ using Dalamud.ContextMenu; using Dalamud.Game.Text.SeStringHandling; using Dalamud.Logging; +using Pilz.Dalamud.ActivityContexts; using PlayerTags.Configuration; using PlayerTags.Data; using PlayerTags.Resources; @@ -13,7 +14,7 @@ namespace PlayerTags.Features /// /// A feature that adds options for the management of custom tags to context menus. /// - public class CustomTagsContextMenuFeature : IDisposable + public class CustomTagsContextMenuFeature : FeatureBase { private string?[] SupportedAddonNames = new string?[] { @@ -44,7 +45,7 @@ namespace PlayerTags.Features m_ContextMenu.OnOpenGameObjectContextMenu += ContextMenuHooks_ContextMenuOpened; } - public void Dispose() + public override void Dispose() { if (m_ContextMenu != null) { @@ -52,21 +53,22 @@ namespace PlayerTags.Features ((IDisposable)m_ContextMenu).Dispose(); m_ContextMenu = null; } + base.Dispose(); } private void ContextMenuHooks_ContextMenuOpened(GameObjectContextMenuOpenArgs contextMenuOpenedArgs) { if (!m_PluginConfiguration.IsCustomTagsContextMenuEnabled || !SupportedAddonNames.Contains(contextMenuOpenedArgs.ParentAddonName)) - { return; - } - Identity? identity = m_PluginData.GetIdentity(contextMenuOpenedArgs); + var tagsData = m_PluginData.GetTagsData(ActivityContextManager.CurrentActivityContext.ZoneType); + Identity? identity = tagsData.GetIdentity(contextMenuOpenedArgs); + if (identity != null) { var allTags = new Dictionary(); - foreach (var customTag in m_PluginData.CustomTags) + foreach (var customTag in tagsData.CustomTags) { var isAdded = identity.CustomTagIds.Contains(customTag.CustomId.Value); allTags.Add(customTag, isAdded); @@ -86,9 +88,9 @@ namespace PlayerTags.Features new GameObjectContextMenuItem(menuItemText, openedEventArgs => { if (tag.Value) - m_PluginData.RemoveCustomTagFromIdentity(tag.Key, identity); + tagsData.RemoveCustomTagFromIdentity(tag.Key, identity); else - m_PluginData.AddCustomTagToIdentity(tag.Key, identity); + tagsData.AddCustomTagToIdentity(tag.Key, identity); m_PluginConfiguration.Save(m_PluginData); }) { diff --git a/PlayerTags/Features/FeatureBase.cs b/PlayerTags/Features/FeatureBase.cs new file mode 100644 index 0000000..cdc5f00 --- /dev/null +++ b/PlayerTags/Features/FeatureBase.cs @@ -0,0 +1,24 @@ +using Pilz.Dalamud.ActivityContexts; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace PlayerTags.Features +{ + public abstract class FeatureBase : IDisposable + { + public ActivityContextManager ActivityContextManager { get; init; } + + public FeatureBase() + { + ActivityContextManager = new(); + } + + public virtual void Dispose() + { + ActivityContextManager.Dispose(); + } + } +} diff --git a/PlayerTags/Features/NameplateTagTargetFeature.cs b/PlayerTags/Features/NameplateTagTargetFeature.cs index 37f4d83..fb7c0f0 100644 --- a/PlayerTags/Features/NameplateTagTargetFeature.cs +++ b/PlayerTags/Features/NameplateTagTargetFeature.cs @@ -113,9 +113,9 @@ namespace PlayerTags.Features { var beforeTitleBytes = args.Title.Encode(); var iconID = args.IconId; - var generalOptions = m_PluginConfiguration.GeneralOptions[ActivityContextManager.CurrentActivityContext.ActivityType]; + var generalOptions = m_PluginConfiguration.ZoneConfig[ActivityContextManager.CurrentActivityContext.ZoneType]; - AddTagsToNameplate(args.PlayerCharacter, args.Name, args.Title, args.FreeCompany, ref iconID, generalOptions); + AddTagsToNameplate(args.PlayerCharacter, args.Name, args.Title, args.FreeCompany, ref iconID); args.IconId = iconID; @@ -172,19 +172,20 @@ namespace PlayerTags.Features /// The name text to change. /// The title text to change. /// The free company text to change. - private void AddTagsToNameplate(GameObject gameObject, SeString name, SeString title, SeString freeCompany, ref int statusIcon, GeneralOptionsClass generalOptions) + private void AddTagsToNameplate(GameObject gameObject, SeString name, SeString title, SeString freeCompany, ref int statusIcon) { + var tagsData = m_PluginConfiguration.ZoneConfig[ActivityContextManager.CurrentActivityContext.ZoneType]; var playerCharacter = gameObject as PlayerCharacter; int? newStatusIcon = null; NameplateChanges nameplateChanges = GenerateEmptyNameplateChanges(name, title, freeCompany); - if (playerCharacter != null && (!playerCharacter.IsDead || generalOptions.NameplateDeadPlayerHandling != DeadPlayerHandling.Ignore)) + if (playerCharacter != null && (!playerCharacter.IsDead || tagsData.NameplateDeadPlayerHandling != DeadPlayerHandling.Ignore)) { var classJob = playerCharacter.ClassJob; var classJobGameData = classJob?.GameData; // Add the job tags - if (classJobGameData != null && m_PluginData.JobTags.TryGetValue(classJobGameData.Abbreviation, out var jobTag)) + if (classJobGameData != null && tagsData.JobTags.TryGetValue(classJobGameData.Abbreviation, out var jobTag)) { if (jobTag.TagTargetInNameplates.InheritedValue != null && jobTag.TagPositionInNameplates.InheritedValue != null) checkTag(jobTag); @@ -203,10 +204,10 @@ namespace PlayerTags.Features } // Add custom tags - Identity identity = m_PluginData.GetIdentity(playerCharacter); + Identity identity = tagsData.GetIdentity(playerCharacter); foreach (var customTagId in identity.CustomTagIds) { - var customTag = m_PluginData.CustomTags.FirstOrDefault(tag => tag.CustomId.Value == customTagId); + var customTag = tagsData.CustomTags.FirstOrDefault(tag => tag.CustomId.Value == customTagId); if (customTag != null) checkTag(customTag); } @@ -232,24 +233,24 @@ namespace PlayerTags.Features } // Gray out the nameplate - if (playerCharacter != null && playerCharacter.IsDead && generalOptions.NameplateDeadPlayerHandling == DeadPlayerHandling.GrayOut) + if (playerCharacter != null && playerCharacter.IsDead && tagsData.NameplateDeadPlayerHandling == DeadPlayerHandling.GrayOut) GrayOutNameplate(gameObject, nameplateChanges); // Build the final strings out of the payloads ApplyNameplateChanges(nameplateChanges); - if (playerCharacter != null && (!playerCharacter.IsDead || generalOptions.NameplateDeadPlayerHandling == DeadPlayerHandling.Include)) + if (playerCharacter != null && (!playerCharacter.IsDead || tagsData.NameplateDeadPlayerHandling == DeadPlayerHandling.Include)) { // An additional step to apply text color to additional locations - Identity identity = m_PluginData.GetIdentity(playerCharacter); + Identity identity = tagsData.GetIdentity(playerCharacter); foreach (var customTagId in identity.CustomTagIds) { - var customTag = m_PluginData.CustomTags.FirstOrDefault(tag => tag.CustomId.Value == customTagId); + var customTag = tagsData.CustomTags.FirstOrDefault(tag => tag.CustomId.Value == customTagId); if (customTag != null) applyTextFormatting(customTag); } - if (playerCharacter.ClassJob.GameData != null && m_PluginData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) + if (playerCharacter.ClassJob.GameData != null && tagsData.JobTags.TryGetValue(playerCharacter.ClassJob.GameData.Abbreviation, out var jobTag)) applyTextFormatting(jobTag); void applyTextFormatting(Tag tag) diff --git a/PlayerTags/Features/TagTargetFeature.cs b/PlayerTags/Features/TagTargetFeature.cs index a0e6c0b..f2697ef 100644 --- a/PlayerTags/Features/TagTargetFeature.cs +++ b/PlayerTags/Features/TagTargetFeature.cs @@ -20,18 +20,16 @@ namespace PlayerTags.Features /// /// The base of a feature that adds tags to UI elements. /// - public abstract class TagTargetFeature : IDisposable + public abstract class TagTargetFeature : FeatureBase { - public ActivityContextManager ActivityContextManager { get; init; } public TagTargetFeature() { - ActivityContextManager = new(); } - public virtual void Dispose() + public override void Dispose() { - ActivityContextManager.Dispose(); + base.Dispose(); } protected abstract bool IsIconVisible(Tag tag);