Better quick add UI

This commit is contained in:
r00telement
2021-12-12 07:43:43 +00:00
parent 1143f0c4f4
commit 6811ecefe2
8 changed files with 395 additions and 239 deletions

View File

@@ -1,5 +1,4 @@
using Dalamud.Configuration;
using Dalamud.Plugin;
using Newtonsoft.Json;
using PlayerTags.Data;
using PlayerTags.Inheritables;
@@ -20,7 +19,13 @@ namespace PlayerTags.Configuration
public bool IsPlayerNameRandomlyGenerated = false;
public bool IsCustomTagsContextMenuEnabled = true;
public bool IsShowInheritedPropertiesEnabled = true;
public bool IsSortedByProximity = true;
public bool IsPlayersTabOrderedByProximity = true;
public bool IsPlayersTabSelfVisible = true;
public bool IsPlayersTabFriendsVisible = true;
public bool IsPlayersTabPartyVisible = true;
public bool IsPlayersTabAllianceVisible = true;
public bool IsPlayersTabEnemiesVisible = true;
public bool IsPlayersTabOthersVisible = false;
[JsonProperty(TypeNameHandling = TypeNameHandling.None, ItemTypeNameHandling = TypeNameHandling.None)]
public Dictionary<string, InheritableData> AllTagsChanges = new Dictionary<string, InheritableData>();

View File

@@ -17,6 +17,12 @@ namespace PlayerTags.Configuration
{
public class PluginConfigurationUI
{
private struct PlayerInfo
{
public PlayerContext PlayerContext;
public float Proximity;
}
private PluginConfiguration m_PluginConfiguration;
private PluginData m_PluginData;
@@ -101,12 +107,20 @@ namespace PlayerTags.Configuration
ImGui.EndTabItem();
}
if (ImGui.BeginTabItem(Strings.Loc_Static_Party))
if (ImGui.BeginTabItem(Strings.Loc_Static_Players))
{
ImGui.Spacing();
ImGui.Spacing();
ImGui.TreePush();
if (ImGui.BeginTable("##PartyAssignTable", 1 + m_PluginData.CustomTags.Count))
DrawCheckbox(nameof(m_PluginConfiguration.IsPlayersTabOrderedByProximity), true, ref m_PluginConfiguration.IsPlayersTabOrderedByProximity, () => m_PluginConfiguration.Save(m_PluginData));
DrawCheckbox(nameof(m_PluginConfiguration.IsPlayersTabSelfVisible), true, ref m_PluginConfiguration.IsPlayersTabSelfVisible, () => m_PluginConfiguration.Save(m_PluginData));
DrawCheckbox(nameof(m_PluginConfiguration.IsPlayersTabFriendsVisible), true, ref m_PluginConfiguration.IsPlayersTabFriendsVisible, () => m_PluginConfiguration.Save(m_PluginData));
DrawCheckbox(nameof(m_PluginConfiguration.IsPlayersTabPartyVisible), true, ref m_PluginConfiguration.IsPlayersTabPartyVisible, () => m_PluginConfiguration.Save(m_PluginData));
DrawCheckbox(nameof(m_PluginConfiguration.IsPlayersTabAllianceVisible), true, ref m_PluginConfiguration.IsPlayersTabAllianceVisible, () => m_PluginConfiguration.Save(m_PluginData));
DrawCheckbox(nameof(m_PluginConfiguration.IsPlayersTabEnemiesVisible), true, ref m_PluginConfiguration.IsPlayersTabEnemiesVisible, () => m_PluginConfiguration.Save(m_PluginData));
DrawCheckbox(nameof(m_PluginConfiguration.IsPlayersTabOthersVisible), true, ref m_PluginConfiguration.IsPlayersTabOthersVisible, () => m_PluginConfiguration.Save(m_PluginData));
if (ImGui.BeginTable("##PlayersTable", 1 + m_PluginData.CustomTags.Count))
{
ImGui.TableHeader(Strings.Loc_Static_PlayerName);
ImGui.TableSetupColumn(Strings.Loc_Static_PlayerName);
@@ -119,65 +133,52 @@ namespace PlayerTags.Configuration
}
ImGui.TableHeadersRow();
int rowIndex = 0;
foreach (var partyMember in PluginServices.PartyList.OrderBy(obj => obj.Name.TextValue).ToArray())
if (PluginServices.ClientState.LocalPlayer != null)
{
DrawPlayerAssignmentRow(partyMember.Name.TextValue, rowIndex);
++rowIndex;
}
Dictionary<string, PlayerInfo> playerNameContexts = PluginServices.ObjectTable
.Where(gameObject => gameObject is PlayerCharacter)
.Select(gameObject => gameObject as PlayerCharacter)
.ToDictionary(
playerCharacter => playerCharacter!.Name.TextValue,
playerCharacter => new PlayerInfo()
{
PlayerContext = PlayerContextHelper.GetPlayerContext(playerCharacter!),
Proximity = (playerCharacter!.Position - PluginServices.ClientState.LocalPlayer.Position).Length()
});
if (PluginServices.PartyList.Length == 0 && PluginServices.ClientState.LocalPlayer != null)
{
DrawPlayerAssignmentRow(PluginServices.ClientState.LocalPlayer.Name.TextValue, 0);
}
// Include party members that aren't in the game object list
foreach (var partyMember in PluginServices.PartyList)
{
if (!playerNameContexts.ContainsKey(partyMember.Name.TextValue))
{
playerNameContexts[partyMember.Name.TextValue] = new PlayerInfo()
{
PlayerContext = PlayerContext.Party,
Proximity = int.MaxValue
};
}
}
ImGui.EndTable();
}
ImGui.TreePop();
var filteredPlayerNameContexts = playerNameContexts.Where(player => PlayerContextHelper.GetIsVisible(player.Value.PlayerContext,
m_PluginConfiguration.IsPlayersTabSelfVisible,
m_PluginConfiguration.IsPlayersTabFriendsVisible,
m_PluginConfiguration.IsPlayersTabPartyVisible,
m_PluginConfiguration.IsPlayersTabAllianceVisible,
m_PluginConfiguration.IsPlayersTabEnemiesVisible,
m_PluginConfiguration.IsPlayersTabOthersVisible));
ImGui.EndTabItem();
}
var orderedPlayerNameContexts = filteredPlayerNameContexts.OrderBy(player => player.Key);
if (m_PluginConfiguration.IsPlayersTabOrderedByProximity)
{
orderedPlayerNameContexts = filteredPlayerNameContexts.OrderBy(player => player.Value.Proximity);
}
if (ImGui.BeginTabItem(Strings.Loc_Static_Proximity))
{
ImGui.Spacing();
ImGui.Spacing();
ImGui.TreePush();
DrawCheckbox(nameof(m_PluginConfiguration.IsSortedByProximity), true, ref m_PluginConfiguration.IsSortedByProximity, () => m_PluginConfiguration.Save(m_PluginData));
if (ImGui.BeginTable("##ProximityAssignTable", 1 + m_PluginData.CustomTags.Count))
{
ImGui.TableHeader(Strings.Loc_Static_PlayerName);
ImGui.TableSetupColumn(Strings.Loc_Static_PlayerName);
ImGui.NextColumn();
foreach (var customTag in m_PluginData.CustomTags)
{
ImGui.TableHeader(customTag.Text.InheritedValue);
ImGui.TableSetupColumn(customTag.Text.InheritedValue);
ImGui.NextColumn();
}
ImGui.TableHeadersRow();
var players = PluginServices.ObjectTable.Where(gameObject => gameObject is PlayerCharacter);
if (m_PluginConfiguration.IsSortedByProximity && PluginServices.ClientState.LocalPlayer != null)
{
players = players.OrderBy(gameObject => (gameObject.Position - PluginServices.ClientState.LocalPlayer.Position).Length());
}
else
{
players = players.OrderBy(obj => obj.Name.TextValue);
}
int rowIndex = 0;
foreach (var gameObject in players)
{
DrawPlayerAssignmentRow(gameObject.Name.TextValue, rowIndex);
++rowIndex;
}
if (PluginServices.ObjectTable.Length == 0 && PluginServices.ClientState.LocalPlayer != null)
{
DrawPlayerAssignmentRow(PluginServices.ClientState.LocalPlayer.Name.TextValue, 0);
int rowIndex = 0;
foreach (var player in orderedPlayerNameContexts)
{
DrawPlayerAssignmentRow(player.Key, rowIndex);
++rowIndex;
}
}
ImGui.EndTable();

View File

@@ -1,9 +1,12 @@
namespace PlayerTags.Data
using System;
namespace PlayerTags.Data
{
[Flags]
public enum ActivityContext
{
Overworld,
PveDuty,
PvpDuty,
None = 0x0,
PveDuty = 0x1,
PvpDuty = 0x2,
}
}

View File

@@ -0,0 +1,27 @@
namespace PlayerTags.Data
{
public static class ActivityContextHelper
{
public static bool GetIsVisible(ActivityContext playerContext, bool desiredPveDutyVisibility, bool desiredPvpDutyVisibility, bool desiredOthersVisibility)
{
bool isVisible = false;
if (playerContext.HasFlag(ActivityContext.PveDuty))
{
isVisible |= desiredPveDutyVisibility;
}
if (playerContext.HasFlag(ActivityContext.PvpDuty))
{
isVisible |= desiredPvpDutyVisibility;
}
if (playerContext == ActivityContext.None)
{
isVisible |= desiredOthersVisibility;
}
return isVisible;
}
}
}

View File

@@ -0,0 +1,81 @@
using Dalamud.Game.ClientState.Objects.Enums;
using Dalamud.Game.ClientState.Objects.SubKinds;
namespace PlayerTags.Data
{
public static class PlayerContextHelper
{
public static PlayerContext GetPlayerContext(PlayerCharacter playerCharacter)
{
PlayerContext playerContext = PlayerContext.None;
if (PluginServices.ClientState.LocalPlayer == playerCharacter)
{
playerContext |= PlayerContext.Self;
}
if (playerCharacter.StatusFlags.HasFlag(StatusFlags.Friend))
{
playerContext |= PlayerContext.Friend;
}
if (playerCharacter.StatusFlags.HasFlag(StatusFlags.PartyMember))
{
playerContext |= PlayerContext.Party;
}
if (playerCharacter.StatusFlags.HasFlag(StatusFlags.AllianceMember))
{
playerContext |= PlayerContext.Alliance;
}
if (playerCharacter.StatusFlags.HasFlag(StatusFlags.Hostile))
{
playerContext |= PlayerContext.Enemy;
}
return playerContext;
}
public static bool GetIsVisible(PlayerContext playerContext, bool desiredSelfVisibility, bool desiredFriendsVisibility, bool desiredPartyVisibility, bool desiredAllianceVisibility, bool desiredEnemiesVisibility, bool desiredOthersVisibility)
{
if (playerContext.HasFlag(PlayerContext.Self))
{
return desiredSelfVisibility;
}
bool isVisible = false;
if (playerContext.HasFlag(PlayerContext.Friend))
{
isVisible |= desiredFriendsVisibility;
}
if (playerContext.HasFlag(PlayerContext.Party))
{
isVisible |= desiredPartyVisibility;
}
if (!playerContext.HasFlag(PlayerContext.Party) && playerContext.HasFlag(PlayerContext.Alliance))
{
isVisible |= desiredAllianceVisibility;
}
if (playerContext.HasFlag(PlayerContext.Enemy))
{
isVisible |= desiredEnemiesVisibility;
}
if (playerContext == PlayerContext.None)
{
isVisible |= desiredOthersVisibility;
}
return isVisible;
}
public static bool GetIsVisible(PlayerCharacter playerCharacter, bool desiredSelfVisibility, bool desiredFriendsVisibility, bool desiredPartyVisibility, bool desiredAllianceVisibility, bool desiredEnemiesVisibility, bool desiredOthersVisibility)
{
return GetIsVisible(GetPlayerContext(playerCharacter), desiredSelfVisibility, desiredFriendsVisibility, desiredPartyVisibility, desiredAllianceVisibility, desiredEnemiesVisibility, desiredOthersVisibility);
}
}
}

View File

@@ -19,13 +19,13 @@ namespace PlayerTags.Features
{
private PluginConfiguration m_PluginConfiguration;
private ActivityContext m_ActivityContext;
private ActivityContext m_CurrentActivityContext;
public TagTargetFeature(PluginConfiguration pluginConfiguration)
{
m_PluginConfiguration = pluginConfiguration;
m_ActivityContext = ActivityContext.Overworld;
m_CurrentActivityContext = ActivityContext.None;
PluginServices.ClientState.TerritoryChanged += ClientState_TerritoryChanged;
}
@@ -41,7 +41,7 @@ namespace PlayerTags.Features
private void ClientState_TerritoryChanged(object? sender, ushort e)
{
m_ActivityContext = ActivityContext.Overworld;
m_CurrentActivityContext = ActivityContext.None;
var contentFinderConditionsSheet = PluginServices.DataManager.GameData.GetExcelSheet<ContentFinderCondition>();
if (contentFinderConditionsSheet != null)
@@ -51,11 +51,11 @@ namespace PlayerTags.Features
{
if (foundContentFinderCondition.PvP)
{
m_ActivityContext = ActivityContext.PvpDuty;
m_CurrentActivityContext = ActivityContext.PvpDuty;
}
else
{
m_ActivityContext = ActivityContext.PveDuty;
m_CurrentActivityContext = ActivityContext.PveDuty;
}
}
}
@@ -69,143 +69,35 @@ namespace PlayerTags.Features
/// <returns>A list of payloads for the given tag.</returns>
protected IEnumerable<Payload> GetPayloads(GameObject gameObject, Tag tag)
{
// Only get payloads when in allowed activity contexts
if (!IsVisibleInActivity(tag))
bool isVisibleForActivity = ActivityContextHelper.GetIsVisible(m_CurrentActivityContext,
tag.IsVisibleInPveDuties.InheritedValue ?? false,
tag.IsVisibleInPvpDuties.InheritedValue ?? false,
tag.IsVisibleInOverworld.InheritedValue ?? false);
if (!isVisibleForActivity)
{
return Enumerable.Empty<Payload>();
}
// Only get payloads for player characters for allowed player contexts
if (gameObject is PlayerCharacter playerCharacter && !IsVisibleForPlayer(tag, playerCharacter))
if (gameObject is PlayerCharacter playerCharacter)
{
return Enumerable.Empty<Payload>();
bool isVisibleForPlayer = PlayerContextHelper.GetIsVisible(playerCharacter,
tag.IsVisibleForSelf.InheritedValue ?? false,
tag.IsVisibleForFriendPlayers.InheritedValue ?? false,
tag.IsVisibleForPartyPlayers.InheritedValue ?? false,
tag.IsVisibleForAlliancePlayers.InheritedValue ?? false,
tag.IsVisibleForEnemyPlayers.InheritedValue ?? false,
tag.IsVisibleForOtherPlayers.InheritedValue ?? false);
if (!isVisibleForPlayer)
{
return Enumerable.Empty<Payload>();
}
}
return CreatePayloads(gameObject, tag);
}
private InheritableValue<bool>? GetInheritableVisibilityForActivity(Tag tag, ActivityContext activityContext)
{
switch (activityContext)
{
case ActivityContext.Overworld:
return tag.IsVisibleInOverworld;
case ActivityContext.PveDuty:
return tag.IsVisibleInPveDuties;
case ActivityContext.PvpDuty:
return tag.IsVisibleInPvpDuties;
}
return null;
}
private bool IsVisibleInActivity(Tag tag)
{
var inheritable = GetInheritableVisibilityForActivity(tag, m_ActivityContext);
if (inheritable == null)
{
return false;
}
if (inheritable.InheritedValue == null || !inheritable.InheritedValue.Value)
{
return false;
}
return true;
}
private PlayerContext GetContextForPlayer(PlayerCharacter playerCharacter)
{
PlayerContext playerContext = PlayerContext.None;
if (PluginServices.ClientState.LocalPlayer == playerCharacter)
{
playerContext |= PlayerContext.Self;
}
if (playerCharacter.StatusFlags.HasFlag(StatusFlags.Friend))
{
playerContext |= PlayerContext.Friend;
}
if (playerCharacter.StatusFlags.HasFlag(StatusFlags.PartyMember))
{
playerContext |= PlayerContext.Party;
}
if (playerCharacter.StatusFlags.HasFlag(StatusFlags.AllianceMember))
{
playerContext |= PlayerContext.Alliance;
}
if (playerCharacter.StatusFlags.HasFlag(StatusFlags.Hostile))
{
playerContext |= PlayerContext.Enemy;
}
return playerContext;
}
private bool IsVisibleForPlayer(Tag tag, PlayerCharacter playerCharacter)
{
var playerContext = GetContextForPlayer(playerCharacter);
if (playerContext.HasFlag(PlayerContext.Self))
{
if (tag.IsVisibleForSelf.InheritedValue == null || !tag.IsVisibleForSelf.InheritedValue.Value)
{
return false;
}
return true;
}
bool isVisible = false;
if (playerContext.HasFlag(PlayerContext.Friend))
{
if (tag.IsVisibleForFriendPlayers.InheritedValue != null)
{
isVisible |= tag.IsVisibleForFriendPlayers.InheritedValue.Value;
}
}
if (playerContext.HasFlag(PlayerContext.Party))
{
if (tag.IsVisibleForPartyPlayers.InheritedValue != null)
{
isVisible |= tag.IsVisibleForPartyPlayers.InheritedValue.Value;
}
}
if (!playerContext.HasFlag(PlayerContext.Party) && playerContext.HasFlag(PlayerContext.Alliance))
{
if (tag.IsVisibleForAlliancePlayers.InheritedValue != null)
{
isVisible |= tag.IsVisibleForAlliancePlayers.InheritedValue.Value;
}
}
if (playerContext.HasFlag(PlayerContext.Enemy))
{
if (tag.IsVisibleForEnemyPlayers.InheritedValue != null)
{
isVisible |= tag.IsVisibleForEnemyPlayers.InheritedValue.Value;
}
}
if (playerContext == PlayerContext.None)
{
if (tag.IsVisibleForOtherPlayers.InheritedValue != null)
{
isVisible |= tag.IsVisibleForOtherPlayers.InheritedValue.Value;
}
}
return isVisible;
}
private Payload[] CreatePayloads(GameObject gameObject, Tag tag)
{
List<Payload> newPayloads = new List<Payload>();

View File

@@ -249,6 +249,132 @@ namespace PlayerTags.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Show alliance members.
/// </summary>
public static string Loc_IsPlayersTabAllianceVisible {
get {
return ResourceManager.GetString("Loc_IsPlayersTabAllianceVisible", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show alliance members in the players list..
/// </summary>
public static string Loc_IsPlayersTabAllianceVisible_Description {
get {
return ResourceManager.GetString("Loc_IsPlayersTabAllianceVisible_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show enemies.
/// </summary>
public static string Loc_IsPlayersTabEnemiesVisible {
get {
return ResourceManager.GetString("Loc_IsPlayersTabEnemiesVisible", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show enemies in the players list..
/// </summary>
public static string Loc_IsPlayersTabEnemiesVisible_Description {
get {
return ResourceManager.GetString("Loc_IsPlayersTabEnemiesVisible_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show friends.
/// </summary>
public static string Loc_IsPlayersTabFriendsVisible {
get {
return ResourceManager.GetString("Loc_IsPlayersTabFriendsVisible", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show friends in the players list..
/// </summary>
public static string Loc_IsPlayersTabFriendsVisible_Description {
get {
return ResourceManager.GetString("Loc_IsPlayersTabFriendsVisible_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Order by proximity.
/// </summary>
public static string Loc_IsPlayersTabOrderedByProximity {
get {
return ResourceManager.GetString("Loc_IsPlayersTabOrderedByProximity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Players that are closer to the local player will be ordered towards the top..
/// </summary>
public static string Loc_IsPlayersTabOrderedByProximity_Description {
get {
return ResourceManager.GetString("Loc_IsPlayersTabOrderedByProximity_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show others.
/// </summary>
public static string Loc_IsPlayersTabOthersVisible {
get {
return ResourceManager.GetString("Loc_IsPlayersTabOthersVisible", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show others in the players list..
/// </summary>
public static string Loc_IsPlayersTabOthersVisible_Description {
get {
return ResourceManager.GetString("Loc_IsPlayersTabOthersVisible_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show party members.
/// </summary>
public static string Loc_IsPlayersTabPartyVisible {
get {
return ResourceManager.GetString("Loc_IsPlayersTabPartyVisible", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show party members in the players list..
/// </summary>
public static string Loc_IsPlayersTabPartyVisible_Description {
get {
return ResourceManager.GetString("Loc_IsPlayersTabPartyVisible_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show self.
/// </summary>
public static string Loc_IsPlayersTabSelfVisible {
get {
return ResourceManager.GetString("Loc_IsPlayersTabSelfVisible", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Show yourself in the players list..
/// </summary>
public static string Loc_IsPlayersTabSelfVisible_Description {
get {
return ResourceManager.GetString("Loc_IsPlayersTabSelfVisible_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Selected.
/// </summary>
@@ -276,24 +402,6 @@ namespace PlayerTags.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Sort by proximity.
/// </summary>
public static string Loc_IsSortedByProximity {
get {
return ResourceManager.GetString("Loc_IsSortedByProximity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Players that are closer to the local player will be ordered towards the top..
/// </summary>
public static string Loc_IsSortedByProximity_Description {
get {
return ResourceManager.GetString("Loc_IsSortedByProximity_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Text italic.
/// </summary>
@@ -484,7 +592,7 @@ namespace PlayerTags.Resources {
}
/// <summary>
/// Looks up a localized string similar to Whether the tag should be visible in pvp duties..
/// Looks up a localized string similar to Whether the tag should be visible in pve duties..
/// </summary>
public static string Loc_IsVisibleInPveDuties_Description {
get {
@@ -501,6 +609,15 @@ namespace PlayerTags.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Whether the tag should be visible in pvp duties..
/// </summary>
public static string Loc_IsVisibleInPvpDuties_Description {
get {
return ResourceManager.GetString("Loc_IsVisibleInPvpDuties_Description", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Free company.
/// </summary>
@@ -888,15 +1005,6 @@ namespace PlayerTags.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Party.
/// </summary>
public static string Loc_Static_Party {
get {
return ResourceManager.GetString("Loc_Static_Party", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Player.
/// </summary>
@@ -906,6 +1014,15 @@ namespace PlayerTags.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Players.
/// </summary>
public static string Loc_Static_Players {
get {
return ResourceManager.GetString("Loc_Static_Players", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Player Tags.
/// </summary>
@@ -915,15 +1032,6 @@ namespace PlayerTags.Resources {
}
}
/// <summary>
/// Looks up a localized string similar to Proximity.
/// </summary>
public static string Loc_Static_Proximity {
get {
return ResourceManager.GetString("Loc_Static_Proximity", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Remove this custom tag..
/// </summary>

View File

@@ -126,11 +126,8 @@
<data name="Loc_Static_General" xml:space="preserve">
<value>General</value>
</data>
<data name="Loc_Static_Party" xml:space="preserve">
<value>Party</value>
</data>
<data name="Loc_Static_Proximity" xml:space="preserve">
<value>Proximity</value>
<data name="Loc_Static_Players" xml:space="preserve">
<value>Players</value>
</data>
<data name="Loc_Static_TaggedPlayers" xml:space="preserve">
<value>Tagged Players</value>
@@ -480,10 +477,52 @@
<value>Whether the tag should be visible for players in other circumstances for which there is no specific option.</value>
</data>
<data name="Loc_IsSortedByProximity" xml:space="preserve">
<value>Sort by proximity</value>
<data name="Loc_IsPlayersTabOrderedByProximity" xml:space="preserve">
<value>Order by proximity</value>
</data>
<data name="Loc_IsSortedByProximity_Description" xml:space="preserve">
<data name="Loc_IsPlayersTabOrderedByProximity_Description" xml:space="preserve">
<value>Players that are closer to the local player will be ordered towards the top.</value>
</data>
<data name="Loc_IsPlayersTabSelfVisible" xml:space="preserve">
<value>Show self</value>
</data>
<data name="Loc_IsPlayersTabSelfVisible_Description" xml:space="preserve">
<value>Show yourself in the players list.</value>
</data>
<data name="Loc_IsPlayersTabFriendsVisible" xml:space="preserve">
<value>Show friends</value>
</data>
<data name="Loc_IsPlayersTabFriendsVisible_Description" xml:space="preserve">
<value>Show friends in the players list.</value>
</data>
<data name="Loc_IsPlayersTabPartyVisible" xml:space="preserve">
<value>Show party members</value>
</data>
<data name="Loc_IsPlayersTabPartyVisible_Description" xml:space="preserve">
<value>Show party members in the players list.</value>
</data>
<data name="Loc_IsPlayersTabAllianceVisible" xml:space="preserve">
<value>Show alliance members</value>
</data>
<data name="Loc_IsPlayersTabAllianceVisible_Description" xml:space="preserve">
<value>Show alliance members in the players list.</value>
</data>
<data name="Loc_IsPlayersTabEnemiesVisible" xml:space="preserve">
<value>Show enemies</value>
</data>
<data name="Loc_IsPlayersTabEnemiesVisible_Description" xml:space="preserve">
<value>Show enemies in the players list.</value>
</data>
<data name="Loc_IsPlayersTabOthersVisible" xml:space="preserve">
<value>Show others</value>
</data>
<data name="Loc_IsPlayersTabOthersVisible_Description" xml:space="preserve">
<value>Show others in the players list.</value>
</data>
</root>