mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-02-17 05:17:42 +01:00
Code cleanup (#2439)
* Use new Lock objects * Fix CA1513: Use ObjectDisposedException.ThrowIf * Fix CA1860: Avoid using 'Enumerable.Any()' extension method * Fix IDE0028: Use collection initializers or expressions * Fix CA2263: Prefer generic overload when type is known * Fix CA1862: Use the 'StringComparison' method overloads to perform case-insensitive string comparisons * Fix IDE0270: Null check can be simplified * Fix IDE0280: Use 'nameof' * Fix IDE0009: Add '.this' * Fix IDE0007: Use 'var' instead of explicit type * Fix IDE0062: Make local function static * Fix CA1859: Use concrete types when possible for improved performance * Fix IDE0066: Use switch expression Only applied to where it doesn't look horrendous. * Use is over switch * Fix CA1847: Use String.Contains(char) instead of String.Contains(string) with single characters * Fix SYSLIB1045: Use 'GeneratedRegexAttribute' to generate the regular expression implementation at compile-time. * Fix CA1866: Use 'string.EndsWith(char)' instead of 'string.EndsWith(string)' when you have a string with a single char * Fix IDE0057: Substring can be simplified * Fix IDE0059: Remove unnecessary value assignment * Fix CA1510: Use ArgumentNullException throw helper * Fix IDE0300: Use collection expression for array * Fix IDE0250: Struct can be made 'readonly' * Fix IDE0018: Inline variable declaration * Fix CA1850: Prefer static HashData method over ComputeHash * Fi CA1872: Prefer 'Convert.ToHexString' and 'Convert.ToHexStringLower' over call chains based on 'BitConverter.ToString' * Update ModuleLog instantiations * Organize usings
This commit is contained in:
parent
27414d33dd
commit
c93f04f0e4
295 changed files with 830 additions and 932 deletions
|
|
@ -1,5 +1,4 @@
|
|||
using Dalamud.Plugin.Services;
|
||||
using Dalamud.Utility;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Component.GUI;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ internal unsafe class AddonEventManager : IInternalDisposableService
|
|||
/// </summary>
|
||||
public static readonly Guid DalamudInternalKey = Guid.NewGuid();
|
||||
|
||||
private static readonly ModuleLog Log = new("AddonEventManager");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<AddonEventManager>();
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly AddonLifecycle addonLifecycle = Service<AddonLifecycle>.Get();
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@ using Dalamud.Game.Addon.Events.EventDataTypes;
|
|||
using Dalamud.Game.Gui;
|
||||
using Dalamud.Logging.Internal;
|
||||
using Dalamud.Plugin.Services;
|
||||
using Dalamud.Utility;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Component.GUI;
|
||||
|
||||
|
|
@ -16,7 +15,7 @@ namespace Dalamud.Game.Addon.Events;
|
|||
/// </summary>
|
||||
internal unsafe class PluginEventController : IDisposable
|
||||
{
|
||||
private static readonly ModuleLog Log = new("AddonEventManager");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<AddonEventManager>();
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PluginEventController"/> class.
|
||||
|
|
@ -28,7 +27,7 @@ internal unsafe class PluginEventController : IDisposable
|
|||
|
||||
private AddonEventListener EventListener { get; init; }
|
||||
|
||||
private List<AddonEventEntry> Events { get; } = new();
|
||||
private List<AddonEventEntry> Events { get; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Adds a tracked event.
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ internal unsafe class AddonLifecycle : IInternalDisposableService
|
|||
/// </summary>
|
||||
public static readonly List<AddonVirtualTable> AllocatedTables = [];
|
||||
|
||||
private static readonly ModuleLog Log = new("AddonLifecycle");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<AddonLifecycle>();
|
||||
|
||||
private Hook<AtkUnitBase.Delegates.Initialize>? onInitializeAddonHook;
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ public abstract class BaseAddressResolver
|
|||
/// <summary>
|
||||
/// Gets a list of memory addresses that were found, to list in /xldata.
|
||||
/// </summary>
|
||||
public static Dictionary<string, List<(string ClassName, IntPtr Address)>> DebugScannedValues { get; } = new();
|
||||
public static Dictionary<string, List<(string ClassName, IntPtr Address)>> DebugScannedValues { get; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether the resolver has successfully run <see cref="Setup32Bit(ISigScanner)"/> or <see cref="Setup64Bit(ISigScanner)"/>.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
using CheapLoc;
|
||||
|
|
@ -23,7 +22,7 @@ namespace Dalamud.Game;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal partial class ChatHandlers : IServiceType
|
||||
{
|
||||
private static readonly ModuleLog Log = new("ChatHandlers");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<ChatHandlers>();
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly DalamudConfiguration configuration = Service<DalamudConfiguration>.Get();
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using Dalamud.Plugin.Services;
|
|||
using Dalamud.Utility;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.UI;
|
||||
|
||||
using Serilog;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Aetherytes;
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ namespace Dalamud.Game.ClientState;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal sealed class ClientState : IInternalDisposableService, IClientState
|
||||
{
|
||||
private static readonly ModuleLog Log = new("ClientState");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<ClientState>();
|
||||
|
||||
private readonly GameLifecycle lifecycle;
|
||||
private readonly ClientStateAddressResolver address;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,9 @@ using Dalamud.Hooking;
|
|||
using Dalamud.IoC;
|
||||
using Dalamud.IoC.Internal;
|
||||
using Dalamud.Plugin.Services;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Client.System.Input;
|
||||
|
||||
using Serilog;
|
||||
|
||||
namespace Dalamud.Game.ClientState.GamePad;
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ internal class JobGauges : IServiceType, IJobGauges
|
|||
// Since the gauge itself reads from live memory, there isn't much downside to doing this.
|
||||
if (!this.cache.TryGetValue(typeof(T), out var gauge))
|
||||
{
|
||||
gauge = this.cache[typeof(T)] = (T)Activator.CreateInstance(typeof(T), BindingFlags.NonPublic | BindingFlags.Instance, null, new object[] { this.Address }, null);
|
||||
gauge = this.cache[typeof(T)] = (T)Activator.CreateInstance(typeof(T), BindingFlags.NonPublic | BindingFlags.Instance, null, [this.Address], null);
|
||||
}
|
||||
|
||||
return (T)gauge;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types;
|
||||
|
|
@ -82,12 +83,12 @@ public unsafe class BRDGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game
|
|||
{
|
||||
get
|
||||
{
|
||||
return new[]
|
||||
{
|
||||
return
|
||||
[
|
||||
this.Struct->SongFlags.HasFlag(SongFlags.MagesBalladCoda) ? Song.Mage : Song.None,
|
||||
this.Struct->SongFlags.HasFlag(SongFlags.ArmysPaeonCoda) ? Song.Army : Song.None,
|
||||
this.Struct->SongFlags.HasFlag(SongFlags.WanderersMinuetCoda) ? Song.Wanderer : Song.None,
|
||||
};
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
|
||||
|
||||
using CanvasFlags = Dalamud.Game.ClientState.JobGauge.Enums.CanvasFlags;
|
||||
using CreatureFlags = Dalamud.Game.ClientState.JobGauge.Enums.CreatureFlags;
|
||||
|
|
@ -22,45 +22,45 @@ public unsafe class PCTGauge : JobGaugeBase<PictomancerGauge>
|
|||
/// <summary>
|
||||
/// Gets the use of subjective pallete.
|
||||
/// </summary>
|
||||
public byte PalleteGauge => Struct->PalleteGauge;
|
||||
public byte PalleteGauge => this.Struct->PalleteGauge;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of paint the player has.
|
||||
/// </summary>
|
||||
public byte Paint => Struct->Paint;
|
||||
public byte Paint => this.Struct->Paint;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether a creature motif is drawn.
|
||||
/// </summary>
|
||||
public bool CreatureMotifDrawn => Struct->CreatureMotifDrawn;
|
||||
public bool CreatureMotifDrawn => this.Struct->CreatureMotifDrawn;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether a weapon motif is drawn.
|
||||
/// </summary>
|
||||
public bool WeaponMotifDrawn => Struct->WeaponMotifDrawn;
|
||||
public bool WeaponMotifDrawn => this.Struct->WeaponMotifDrawn;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether a landscape motif is drawn.
|
||||
/// </summary>
|
||||
public bool LandscapeMotifDrawn => Struct->LandscapeMotifDrawn;
|
||||
public bool LandscapeMotifDrawn => this.Struct->LandscapeMotifDrawn;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether a moogle portrait is ready.
|
||||
/// </summary>
|
||||
public bool MooglePortraitReady => Struct->MooglePortraitReady;
|
||||
public bool MooglePortraitReady => this.Struct->MooglePortraitReady;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether a madeen portrait is ready.
|
||||
/// </summary>
|
||||
public bool MadeenPortraitReady => Struct->MadeenPortraitReady;
|
||||
public bool MadeenPortraitReady => this.Struct->MadeenPortraitReady;
|
||||
|
||||
/// <summary>
|
||||
/// Gets which creature flags are present.
|
||||
/// </summary>
|
||||
public CreatureFlags CreatureFlags => (CreatureFlags)Struct->CreatureFlags;
|
||||
public CreatureFlags CreatureFlags => (CreatureFlags)this.Struct->CreatureFlags;
|
||||
|
||||
/// <summary>
|
||||
/// Gets which canvas flags are present.
|
||||
/// </summary>
|
||||
public CanvasFlags CanvasFlags => (CanvasFlags)Struct->CanvasFlags;
|
||||
public CanvasFlags CanvasFlags => (CanvasFlags)this.Struct->CanvasFlags;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
using FFXIVClientStructs.FFXIV.Client.Game.Gauge;
|
||||
|
||||
using Reloaded.Memory;
|
||||
|
||||
using DreadCombo = Dalamud.Game.ClientState.JobGauge.Enums.DreadCombo;
|
||||
using SerpentCombo = Dalamud.Game.ClientState.JobGauge.Enums.SerpentCombo;
|
||||
|
||||
|
|
@ -24,25 +22,25 @@ public unsafe class VPRGauge : JobGaugeBase<ViperGauge>
|
|||
/// <summary>
|
||||
/// Gets how many uses of uncoiled fury the player has.
|
||||
/// </summary>
|
||||
public byte RattlingCoilStacks => Struct->RattlingCoilStacks;
|
||||
public byte RattlingCoilStacks => this.Struct->RattlingCoilStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets Serpent Offering stacks and gauge.
|
||||
/// </summary>
|
||||
public byte SerpentOffering => Struct->SerpentOffering;
|
||||
public byte SerpentOffering => this.Struct->SerpentOffering;
|
||||
|
||||
/// <summary>
|
||||
/// Gets value indicating the use of 1st, 2nd, 3rd, 4th generation and Ouroboros.
|
||||
/// </summary>
|
||||
public byte AnguineTribute => Struct->AnguineTribute;
|
||||
public byte AnguineTribute => this.Struct->AnguineTribute;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the last Weaponskill used in DreadWinder/Pit of Dread combo.
|
||||
/// </summary>
|
||||
public DreadCombo DreadCombo => (DreadCombo)Struct->DreadCombo;
|
||||
public DreadCombo DreadCombo => (DreadCombo)this.Struct->DreadCombo;
|
||||
|
||||
/// <summary>
|
||||
/// Gets current ability for Serpent's Tail.
|
||||
/// </summary>
|
||||
public SerpentCombo SerpentCombo => (SerpentCombo)Struct->SerpentCombo;
|
||||
public SerpentCombo SerpentCombo => (SerpentCombo)this.Struct->SerpentCombo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,50 +30,50 @@ internal sealed unsafe class TargetManager : IServiceType, ITargetManager
|
|||
/// <inheritdoc/>
|
||||
public IGameObject? Target
|
||||
{
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)Struct->GetHardTarget());
|
||||
set => Struct->SetHardTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address);
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->GetHardTarget());
|
||||
set => this.Struct->SetHardTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IGameObject? MouseOverTarget
|
||||
{
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)Struct->MouseOverTarget);
|
||||
set => Struct->MouseOverTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->MouseOverTarget);
|
||||
set => this.Struct->MouseOverTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IGameObject? FocusTarget
|
||||
{
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)Struct->FocusTarget);
|
||||
set => Struct->FocusTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->FocusTarget);
|
||||
set => this.Struct->FocusTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IGameObject? PreviousTarget
|
||||
{
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)Struct->PreviousTarget);
|
||||
set => Struct->PreviousTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->PreviousTarget);
|
||||
set => this.Struct->PreviousTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IGameObject? SoftTarget
|
||||
{
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)Struct->GetSoftTarget());
|
||||
set => Struct->SetSoftTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address);
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->GetSoftTarget());
|
||||
set => this.Struct->SetSoftTarget((FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address);
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IGameObject? GPoseTarget
|
||||
{
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)Struct->GPoseTarget);
|
||||
set => Struct->GPoseTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->GPoseTarget);
|
||||
set => this.Struct->GPoseTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public IGameObject? MouseOverNameplateTarget
|
||||
{
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)Struct->MouseOverNameplateTarget);
|
||||
set => Struct->MouseOverNameplateTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
get => this.objectTable.CreateObjectReference((IntPtr)this.Struct->MouseOverNameplateTarget);
|
||||
set => this.Struct->MouseOverNameplateTarget = (FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject*)value?.Address;
|
||||
}
|
||||
|
||||
private TargetSystem* Struct => TargetSystem.Instance();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
using Dalamud.Game.ClientState.Statuses;
|
||||
using Dalamud.Utility;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Objects.Types;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,6 @@
|
|||
using System.Runtime.CompilerServices;
|
||||
|
||||
using Dalamud.Data;
|
||||
using Dalamud.Game.ClientState.Objects.Enums;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Memory;
|
||||
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ internal sealed unsafe partial class PartyList : IServiceType, IPartyList
|
|||
public unsafe nint GroupManagerAddress => (nint)CSGroupManager.Instance();
|
||||
|
||||
/// <inheritdoc/>
|
||||
public nint GroupListAddress => (nint)Unsafe.AsPointer(ref GroupManagerStruct->MainGroup.PartyMembers[0]);
|
||||
public nint GroupListAddress => (nint)Unsafe.AsPointer(ref this.GroupManagerStruct->MainGroup.PartyMembers[0]);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public nint AllianceListAddress => (nint)Unsafe.AsPointer(ref this.GroupManagerStruct->MainGroup.AllianceMembers[0]);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ using Dalamud.Game.ClientState.Objects;
|
|||
using Dalamud.Game.ClientState.Objects.Types;
|
||||
using Dalamud.Game.ClientState.Statuses;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
|
||||
using Dalamud.Utility;
|
||||
|
||||
using Lumina.Excel;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public sealed unsafe partial class StatusList
|
|||
/// <summary>
|
||||
/// Gets the amount of status effect slots the actor has.
|
||||
/// </summary>
|
||||
public int Length => Struct->NumValidStatuses;
|
||||
public int Length => this.Struct->NumValidStatuses;
|
||||
|
||||
private static int StatusSize { get; } = Marshal.SizeOf<FFXIVClientStructs.FFXIV.Client.Game.Status>();
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ namespace Dalamud.Game.Command;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal sealed unsafe class CommandManager : IInternalDisposableService, ICommandManager
|
||||
{
|
||||
private static readonly ModuleLog Log = new("Command");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<CommandManager>();
|
||||
|
||||
private readonly ConcurrentDictionary<string, IReadOnlyCommandInfo> commandMap = new();
|
||||
private readonly ConcurrentDictionary<(string, IReadOnlyCommandInfo), string> commandAssemblyNameMap = new();
|
||||
|
|
@ -71,7 +71,7 @@ internal sealed unsafe class CommandManager : IInternalDisposableService, IComma
|
|||
if (separatorPosition + 1 >= content.Length)
|
||||
{
|
||||
// Remove the trailing space
|
||||
command = content.Substring(0, separatorPosition);
|
||||
command = content[..separatorPosition];
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -262,12 +262,12 @@ internal sealed unsafe class CommandManager : IInternalDisposableService, IComma
|
|||
#pragma warning restore SA1015
|
||||
internal class CommandManagerPluginScoped : IInternalDisposableService, ICommandManager
|
||||
{
|
||||
private static readonly ModuleLog Log = new("Command");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<CommandManager>();
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly CommandManager commandManagerService = Service<CommandManager>.Get();
|
||||
|
||||
private readonly List<string> pluginRegisteredCommands = new();
|
||||
private readonly List<string> pluginRegisteredCommands = [];
|
||||
private readonly LocalPlugin pluginInfo;
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
using System.Threading.Tasks;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Dalamud.Hooking;
|
||||
using Dalamud.IoC;
|
||||
using Dalamud.IoC.Internal;
|
||||
using Dalamud.Plugin.Services;
|
||||
using Dalamud.Utility;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Common.Configuration;
|
||||
|
||||
using Serilog;
|
||||
|
||||
namespace Dalamud.Game.Config;
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
using System.Collections.Concurrent;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
|
||||
using Dalamud.Memory;
|
||||
using Dalamud.Utility;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Common.Configuration;
|
||||
|
||||
using Serilog;
|
||||
|
||||
namespace Dalamud.Game.Config;
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ namespace Dalamud.Game;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal sealed class Framework : IInternalDisposableService, IFramework
|
||||
{
|
||||
private static readonly ModuleLog Log = new("Framework");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<Framework>();
|
||||
|
||||
private static readonly Stopwatch StatsStopwatch = new();
|
||||
|
||||
|
|
@ -86,7 +86,7 @@ internal sealed class Framework : IInternalDisposableService, IFramework
|
|||
/// <summary>
|
||||
/// Gets the stats history mapping.
|
||||
/// </summary>
|
||||
public static Dictionary<string, List<double>> StatsHistory { get; } = new();
|
||||
public static Dictionary<string, List<double>> StatsHistory { get; } = [];
|
||||
|
||||
/// <inheritdoc/>
|
||||
public DateTime LastUpdate { get; private set; } = DateTime.MinValue;
|
||||
|
|
@ -106,7 +106,7 @@ internal sealed class Framework : IInternalDisposableService, IFramework
|
|||
/// <summary>
|
||||
/// Gets the list of update sub-delegates that didn't get updated this frame.
|
||||
/// </summary>
|
||||
internal List<string> NonUpdatedSubDelegates { get; private set; } = new();
|
||||
internal List<string> NonUpdatedSubDelegates { get; private set; } = [];
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether to dispatch update events.
|
||||
|
|
@ -212,11 +212,10 @@ internal sealed class Framework : IInternalDisposableService, IFramework
|
|||
if (cancellationToken == default)
|
||||
cancellationToken = this.FrameworkThreadTaskFactory.CancellationToken;
|
||||
return this.FrameworkThreadTaskFactory.ContinueWhenAll(
|
||||
new[]
|
||||
{
|
||||
[
|
||||
Task.Delay(delay, cancellationToken),
|
||||
this.DelayTicks(delayTicks, cancellationToken),
|
||||
},
|
||||
],
|
||||
_ => func(),
|
||||
cancellationToken,
|
||||
TaskContinuationOptions.HideScheduler,
|
||||
|
|
@ -239,11 +238,10 @@ internal sealed class Framework : IInternalDisposableService, IFramework
|
|||
if (cancellationToken == default)
|
||||
cancellationToken = this.FrameworkThreadTaskFactory.CancellationToken;
|
||||
return this.FrameworkThreadTaskFactory.ContinueWhenAll(
|
||||
new[]
|
||||
{
|
||||
[
|
||||
Task.Delay(delay, cancellationToken),
|
||||
this.DelayTicks(delayTicks, cancellationToken),
|
||||
},
|
||||
],
|
||||
_ => action(),
|
||||
cancellationToken,
|
||||
TaskContinuationOptions.HideScheduler,
|
||||
|
|
@ -266,11 +264,10 @@ internal sealed class Framework : IInternalDisposableService, IFramework
|
|||
if (cancellationToken == default)
|
||||
cancellationToken = this.FrameworkThreadTaskFactory.CancellationToken;
|
||||
return this.FrameworkThreadTaskFactory.ContinueWhenAll(
|
||||
new[]
|
||||
{
|
||||
[
|
||||
Task.Delay(delay, cancellationToken),
|
||||
this.DelayTicks(delayTicks, cancellationToken),
|
||||
},
|
||||
],
|
||||
_ => func(),
|
||||
cancellationToken,
|
||||
TaskContinuationOptions.HideScheduler,
|
||||
|
|
@ -293,11 +290,10 @@ internal sealed class Framework : IInternalDisposableService, IFramework
|
|||
if (cancellationToken == default)
|
||||
cancellationToken = this.FrameworkThreadTaskFactory.CancellationToken;
|
||||
return this.FrameworkThreadTaskFactory.ContinueWhenAll(
|
||||
new[]
|
||||
{
|
||||
[
|
||||
Task.Delay(delay, cancellationToken),
|
||||
this.DelayTicks(delayTicks, cancellationToken),
|
||||
},
|
||||
],
|
||||
_ => func(),
|
||||
cancellationToken,
|
||||
TaskContinuationOptions.HideScheduler,
|
||||
|
|
@ -333,7 +329,7 @@ internal sealed class Framework : IInternalDisposableService, IFramework
|
|||
internal static void AddToStats(string key, double ms)
|
||||
{
|
||||
if (!StatsHistory.ContainsKey(key))
|
||||
StatsHistory.Add(key, new List<double>());
|
||||
StatsHistory.Add(key, []);
|
||||
|
||||
StatsHistory[key].Add(ms);
|
||||
|
||||
|
|
|
|||
|
|
@ -37,10 +37,10 @@ namespace Dalamud.Game.Gui;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal sealed unsafe class ChatGui : IInternalDisposableService, IChatGui
|
||||
{
|
||||
private static readonly ModuleLog Log = new("ChatGui");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<ChatGui>();
|
||||
|
||||
private readonly Queue<XivChatEntry> chatQueue = new();
|
||||
private readonly Dictionary<(string PluginName, uint CommandId), Action<uint, SeString>> dalamudLinkHandlers = new();
|
||||
private readonly Dictionary<(string PluginName, uint CommandId), Action<uint, SeString>> dalamudLinkHandlers = [];
|
||||
|
||||
private readonly Hook<PrintMessageDelegate> printMessageHook;
|
||||
private readonly Hook<InventoryItem.Delegates.Copy> inventoryItemCopyHook;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
|
||||
using Dalamud.Game.Text;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
|
|
@ -28,7 +29,7 @@ namespace Dalamud.Game.Gui.ContextMenu;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal sealed unsafe class ContextMenu : IInternalDisposableService, IContextMenu
|
||||
{
|
||||
private static readonly ModuleLog Log = new("ContextMenu");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<ContextMenu>();
|
||||
|
||||
private readonly Hook<AtkModuleVf22OpenAddonByAgentDelegate> atkModuleVf22OpenAddonByAgentHook;
|
||||
private readonly Hook<AddonContextMenu.Delegates.OnMenuSelected> addonContextMenuOnMenuSelectedHook;
|
||||
|
|
@ -53,7 +54,7 @@ internal sealed unsafe class ContextMenu : IInternalDisposableService, IContextM
|
|||
|
||||
private Dictionary<ContextMenuType, List<IMenuItem>> MenuItems { get; } = [];
|
||||
|
||||
private object MenuItemsLock { get; } = new();
|
||||
private Lock MenuItemsLock { get; } = new();
|
||||
|
||||
private AgentInterface* SelectedAgent { get; set; }
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
using Dalamud.Memory;
|
||||
using Dalamud.Plugin.Services;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Client.UI.Agent;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ internal sealed unsafe class DtrBar : IInternalDisposableService, IDtrBar
|
|||
{
|
||||
private const uint BaseNodeId = 1000;
|
||||
|
||||
private static readonly ModuleLog Log = new("DtrBar");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<DtrBar>();
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly Framework framework = Service<Framework>.Get();
|
||||
|
|
@ -54,7 +54,7 @@ internal sealed unsafe class DtrBar : IInternalDisposableService, IDtrBar
|
|||
private readonly ReaderWriterLockSlim entriesLock = new();
|
||||
private readonly List<DtrBarEntry> entries = [];
|
||||
|
||||
private readonly Dictionary<uint, List<IAddonEventHandle>> eventHandles = new();
|
||||
private readonly Dictionary<uint, List<IAddonEventHandle>> eventHandles = [];
|
||||
|
||||
private ImmutableList<IReadOnlyDtrBarEntry>? entriesReadOnlyCopy;
|
||||
|
||||
|
|
@ -516,7 +516,7 @@ internal sealed unsafe class DtrBar : IInternalDisposableService, IDtrBar
|
|||
|
||||
var node = data.TextNode = this.MakeNode(++this.runningNodeIds);
|
||||
|
||||
this.eventHandles.TryAdd(node->NodeId, new List<IAddonEventHandle>());
|
||||
this.eventHandles.TryAdd(node->NodeId, []);
|
||||
this.eventHandles[node->NodeId].AddRange(new List<IAddonEventHandle>
|
||||
{
|
||||
this.uiEventManager.AddEvent(AddonEventManager.DalamudInternalKey, (nint)dtr, (nint)node, AddonEventType.MouseOver, this.DtrEventHandler),
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
using System.Numerics;
|
||||
using System.Numerics;
|
||||
|
||||
using Dalamud.Configuration.Internal;
|
||||
using Dalamud.Game.Addon.Events.EventDataTypes;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Plugin.Internal.Types;
|
||||
using Dalamud.Utility;
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ namespace Dalamud.Game.Gui;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal sealed unsafe class GameGui : IInternalDisposableService, IGameGui
|
||||
{
|
||||
private static readonly ModuleLog Log = new("GameGui");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<GameGui>();
|
||||
|
||||
private readonly GameGuiAddressResolver address;
|
||||
|
||||
|
|
|
|||
|
|
@ -427,8 +427,8 @@ internal unsafe class NamePlateUpdateHandler : INamePlateUpdateHandler
|
|||
/// <inheritdoc/>
|
||||
public int VisibilityFlags
|
||||
{
|
||||
get => ObjectData->VisibilityFlags;
|
||||
set => ObjectData->VisibilityFlags = value;
|
||||
get => this.ObjectData->VisibilityFlags;
|
||||
set => this.ObjectData->VisibilityFlags = value;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using Dalamud.Plugin.Services;
|
||||
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
namespace Dalamud.Game.Gui.PartyFinder.Types;
|
||||
|
|
|
|||
|
|
@ -23,23 +23,7 @@ public class PartyFinderSlot
|
|||
/// <summary>
|
||||
/// Gets a list of jobs that this slot is accepting.
|
||||
/// </summary>
|
||||
public IReadOnlyCollection<JobFlags> Accepting
|
||||
{
|
||||
get
|
||||
{
|
||||
if (this.listAccepting != null)
|
||||
{
|
||||
return this.listAccepting;
|
||||
}
|
||||
|
||||
this.listAccepting = Enum.GetValues(typeof(JobFlags))
|
||||
.Cast<JobFlags>()
|
||||
.Where(flag => this[flag])
|
||||
.ToArray();
|
||||
|
||||
return this.listAccepting;
|
||||
}
|
||||
}
|
||||
public IReadOnlyCollection<JobFlags> Accepting => this.listAccepting ??= Enum.GetValues<JobFlags>().Where(flag => this[flag]).ToArray();
|
||||
|
||||
/// <summary>
|
||||
/// Tests if this slot is accepting a job.
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Dalamud.Game.Internal;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal sealed unsafe class DalamudAtkTweaks : IInternalDisposableService
|
||||
{
|
||||
private static readonly ModuleLog Log = new("DalamudAtkTweaks");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<DalamudAtkTweaks>();
|
||||
|
||||
private readonly Hook<AgentHUD.Delegates.OpenSystemMenu> hookAgentHudOpenSystemMenu;
|
||||
|
||||
|
|
|
|||
|
|
@ -18,15 +18,15 @@ namespace Dalamud.Game.Inventory;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal class GameInventory : IInternalDisposableService
|
||||
{
|
||||
private readonly List<GameInventoryPluginScoped> subscribersPendingChange = new();
|
||||
private readonly List<GameInventoryPluginScoped> subscribers = new();
|
||||
private readonly List<GameInventoryPluginScoped> subscribersPendingChange = [];
|
||||
private readonly List<GameInventoryPluginScoped> subscribers = [];
|
||||
|
||||
private readonly List<InventoryItemAddedArgs> addedEvents = new();
|
||||
private readonly List<InventoryItemRemovedArgs> removedEvents = new();
|
||||
private readonly List<InventoryItemChangedArgs> changedEvents = new();
|
||||
private readonly List<InventoryItemMovedArgs> movedEvents = new();
|
||||
private readonly List<InventoryItemSplitArgs> splitEvents = new();
|
||||
private readonly List<InventoryItemMergedArgs> mergedEvents = new();
|
||||
private readonly List<InventoryItemAddedArgs> addedEvents = [];
|
||||
private readonly List<InventoryItemRemovedArgs> removedEvents = [];
|
||||
private readonly List<InventoryItemChangedArgs> changedEvents = [];
|
||||
private readonly List<InventoryItemMovedArgs> movedEvents = [];
|
||||
private readonly List<InventoryItemSplitArgs> splitEvents = [];
|
||||
private readonly List<InventoryItemMergedArgs> mergedEvents = [];
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly Framework framework = Service<Framework>.Get();
|
||||
|
|
@ -151,7 +151,7 @@ internal class GameInventory : IInternalDisposableService
|
|||
bool isNew;
|
||||
lock (this.subscribersPendingChange)
|
||||
{
|
||||
isNew = this.subscribersPendingChange.Any() && !this.subscribers.Any();
|
||||
isNew = this.subscribersPendingChange.Count != 0 && this.subscribers.Count == 0;
|
||||
this.subscribers.Clear();
|
||||
this.subscribers.AddRange(this.subscribersPendingChange);
|
||||
this.subscribersChanged = false;
|
||||
|
|
@ -348,7 +348,7 @@ internal class GameInventory : IInternalDisposableService
|
|||
#pragma warning restore SA1015
|
||||
internal class GameInventoryPluginScoped : IInternalDisposableService, IGameInventory
|
||||
{
|
||||
private static readonly ModuleLog Log = new(nameof(GameInventoryPluginScoped));
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<GameInventoryPluginScoped>();
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly GameInventory gameInventoryService = Service<GameInventory>.Get();
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
using System.Linq;
|
||||
|
||||
using Dalamud.Game.Network.Internal;
|
||||
using Dalamud.Game.Network.Structures;
|
||||
using Dalamud.IoC;
|
||||
|
|
@ -95,7 +93,7 @@ internal class MarketBoard : IInternalDisposableService, IMarketBoard
|
|||
#pragma warning restore SA1015
|
||||
internal class MarketBoardPluginScoped : IInternalDisposableService, IMarketBoard
|
||||
{
|
||||
private static readonly ModuleLog Log = new(nameof(MarketBoardPluginScoped));
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<MarketBoardPluginScoped>();
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly MarketBoard marketBoardService = Service<MarketBoard>.Get();
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ public readonly unsafe struct AtkValuePtr(nint address) : IEquatable<AtkValuePtr
|
|||
/// </returns>
|
||||
public unsafe bool TryGet<T>([NotNullWhen(true)] out T? result) where T : struct
|
||||
{
|
||||
object? value = this.GetValue();
|
||||
var value = this.GetValue();
|
||||
if (value is T typed)
|
||||
{
|
||||
result = typed;
|
||||
|
|
|
|||
|
|
@ -2,9 +2,6 @@ using System.Runtime.InteropServices;
|
|||
|
||||
using Dalamud.Configuration.Internal;
|
||||
using Dalamud.Hooking;
|
||||
using Dalamud.IoC;
|
||||
using Dalamud.IoC.Internal;
|
||||
using Dalamud.Plugin.Services;
|
||||
using Dalamud.Utility;
|
||||
|
||||
using FFXIVClientStructs.FFXIV.Client.Network;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Net.Http;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
|
@ -8,6 +7,7 @@ using Dalamud.Game.Network.Structures;
|
|||
using Dalamud.Networking.Http;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using Serilog;
|
||||
|
||||
namespace Dalamud.Game.Network.Internal.MarketBoardUploaders.Universalis;
|
||||
|
|
@ -64,7 +64,7 @@ internal class UniversalisMarketBoardUploader : IMarketBoardUploader
|
|||
PricePerUnit = marketBoardItemListing.PricePerUnit,
|
||||
Quantity = marketBoardItemListing.ItemQuantity,
|
||||
RetainerCity = marketBoardItemListing.RetainerCityId,
|
||||
Materia = new List<UniversalisItemMateria>(),
|
||||
Materia = [],
|
||||
};
|
||||
#pragma warning restore CS0618 // Type or member is obsolete
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ namespace Dalamud.Game.Network.Internal;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal unsafe class NetworkHandlers : IInternalDisposableService
|
||||
{
|
||||
private readonly IMarketBoardUploader uploader;
|
||||
private readonly UniversalisMarketBoardUploader uploader;
|
||||
|
||||
private readonly IDisposable handleMarketBoardItemRequest;
|
||||
private readonly IDisposable handleMarketTaxRates;
|
||||
|
|
@ -419,7 +419,7 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
|
|||
|
||||
private IDisposable HandleMarketBoardItemRequest()
|
||||
{
|
||||
void LogStartObserved(MarketBoardItemRequest request)
|
||||
static void LogStartObserved(MarketBoardItemRequest request)
|
||||
{
|
||||
Log.Verbose("Observed start of request for item with {NumListings} expected listings", request.AmountToArrive);
|
||||
}
|
||||
|
|
@ -448,7 +448,7 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
|
|||
private void UploadMarketBoardData(
|
||||
MarketBoardItemRequest request,
|
||||
(uint CatalogId, ICollection<MarketBoardHistory.MarketBoardHistoryListing> Sales) sales,
|
||||
ICollection<MarketBoardCurrentOfferings.MarketBoardItemListing> listings,
|
||||
List<MarketBoardCurrentOfferings.MarketBoardItemListing> listings,
|
||||
ulong uploaderId,
|
||||
uint worldId)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ using System.Threading;
|
|||
using Dalamud.Plugin.Services;
|
||||
|
||||
using Iced.Intel;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using Serilog;
|
||||
|
||||
namespace Dalamud.Game;
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ namespace Dalamud.Game.Text.Evaluator;
|
|||
[ResolveVia<ISeStringEvaluator>]
|
||||
internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
||||
{
|
||||
private static readonly ModuleLog Log = new("SeStringEvaluator");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<SeStringEvaluator>();
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly ClientState.ClientState clientState = Service<ClientState.ClientState>.Get();
|
||||
|
|
@ -244,154 +244,67 @@ internal class SeStringEvaluator : IServiceType, ISeStringEvaluator
|
|||
// if (context.HandlePayload(payload, in context))
|
||||
// return true;
|
||||
|
||||
switch (payload.MacroCode)
|
||||
return payload.MacroCode switch
|
||||
{
|
||||
case MacroCode.SetResetTime:
|
||||
return this.TryResolveSetResetTime(in context, payload);
|
||||
|
||||
case MacroCode.SetTime:
|
||||
return this.TryResolveSetTime(in context, payload);
|
||||
|
||||
case MacroCode.If:
|
||||
return this.TryResolveIf(in context, payload);
|
||||
|
||||
case MacroCode.Switch:
|
||||
return this.TryResolveSwitch(in context, payload);
|
||||
|
||||
case MacroCode.SwitchPlatform:
|
||||
return this.TryResolveSwitchPlatform(in context, payload);
|
||||
|
||||
case MacroCode.PcName:
|
||||
return this.TryResolvePcName(in context, payload);
|
||||
|
||||
case MacroCode.IfPcGender:
|
||||
return this.TryResolveIfPcGender(in context, payload);
|
||||
|
||||
case MacroCode.IfPcName:
|
||||
return this.TryResolveIfPcName(in context, payload);
|
||||
|
||||
// case MacroCode.Josa:
|
||||
// case MacroCode.Josaro:
|
||||
|
||||
case MacroCode.IfSelf:
|
||||
return this.TryResolveIfSelf(in context, payload);
|
||||
|
||||
// case MacroCode.NewLine: // pass through
|
||||
// case MacroCode.Wait: // pass through
|
||||
// case MacroCode.Icon: // pass through
|
||||
|
||||
case MacroCode.Color:
|
||||
return this.TryResolveColor(in context, payload);
|
||||
|
||||
case MacroCode.EdgeColor:
|
||||
return this.TryResolveEdgeColor(in context, payload);
|
||||
|
||||
case MacroCode.ShadowColor:
|
||||
return this.TryResolveShadowColor(in context, payload);
|
||||
|
||||
// case MacroCode.SoftHyphen: // pass through
|
||||
// case MacroCode.Key:
|
||||
// case MacroCode.Scale:
|
||||
|
||||
case MacroCode.Bold:
|
||||
return this.TryResolveBold(in context, payload);
|
||||
|
||||
case MacroCode.Italic:
|
||||
return this.TryResolveItalic(in context, payload);
|
||||
|
||||
// case MacroCode.Edge:
|
||||
// case MacroCode.Shadow:
|
||||
// case MacroCode.NonBreakingSpace: // pass through
|
||||
// case MacroCode.Icon2: // pass through
|
||||
// case MacroCode.Hyphen: // pass through
|
||||
|
||||
case MacroCode.Num:
|
||||
return this.TryResolveNum(in context, payload);
|
||||
|
||||
case MacroCode.Hex:
|
||||
return this.TryResolveHex(in context, payload);
|
||||
|
||||
case MacroCode.Kilo:
|
||||
return this.TryResolveKilo(in context, payload);
|
||||
|
||||
// case MacroCode.Byte:
|
||||
|
||||
case MacroCode.Sec:
|
||||
return this.TryResolveSec(in context, payload);
|
||||
|
||||
// case MacroCode.Time:
|
||||
|
||||
case MacroCode.Float:
|
||||
return this.TryResolveFloat(in context, payload);
|
||||
|
||||
// case MacroCode.Link: // pass through
|
||||
|
||||
case MacroCode.Sheet:
|
||||
return this.TryResolveSheet(in context, payload);
|
||||
|
||||
case MacroCode.SheetSub:
|
||||
return this.TryResolveSheetSub(in context, payload);
|
||||
|
||||
case MacroCode.String:
|
||||
return this.TryResolveString(in context, payload);
|
||||
|
||||
case MacroCode.Caps:
|
||||
return this.TryResolveCaps(in context, payload);
|
||||
|
||||
case MacroCode.Head:
|
||||
return this.TryResolveHead(in context, payload);
|
||||
|
||||
case MacroCode.Split:
|
||||
return this.TryResolveSplit(in context, payload);
|
||||
|
||||
case MacroCode.HeadAll:
|
||||
return this.TryResolveHeadAll(in context, payload);
|
||||
|
||||
case MacroCode.Fixed:
|
||||
return this.TryResolveFixed(in context, payload);
|
||||
|
||||
case MacroCode.Lower:
|
||||
return this.TryResolveLower(in context, payload);
|
||||
|
||||
case MacroCode.JaNoun:
|
||||
return this.TryResolveNoun(ClientLanguage.Japanese, in context, payload);
|
||||
|
||||
case MacroCode.EnNoun:
|
||||
return this.TryResolveNoun(ClientLanguage.English, in context, payload);
|
||||
|
||||
case MacroCode.DeNoun:
|
||||
return this.TryResolveNoun(ClientLanguage.German, in context, payload);
|
||||
|
||||
case MacroCode.FrNoun:
|
||||
return this.TryResolveNoun(ClientLanguage.French, in context, payload);
|
||||
|
||||
// case MacroCode.ChNoun:
|
||||
|
||||
case MacroCode.LowerHead:
|
||||
return this.TryResolveLowerHead(in context, payload);
|
||||
|
||||
case MacroCode.ColorType:
|
||||
return this.TryResolveColorType(in context, payload);
|
||||
|
||||
case MacroCode.EdgeColorType:
|
||||
return this.TryResolveEdgeColorType(in context, payload);
|
||||
|
||||
// case MacroCode.Ruby:
|
||||
|
||||
case MacroCode.Digit:
|
||||
return this.TryResolveDigit(in context, payload);
|
||||
|
||||
case MacroCode.Ordinal:
|
||||
return this.TryResolveOrdinal(in context, payload);
|
||||
|
||||
// case MacroCode.Sound: // pass through
|
||||
|
||||
case MacroCode.LevelPos:
|
||||
return this.TryResolveLevelPos(in context, payload);
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
MacroCode.SetResetTime => this.TryResolveSetResetTime(in context, payload),
|
||||
MacroCode.SetTime => this.TryResolveSetTime(in context, payload),
|
||||
MacroCode.If => this.TryResolveIf(in context, payload),
|
||||
MacroCode.Switch => this.TryResolveSwitch(in context, payload),
|
||||
MacroCode.SwitchPlatform => this.TryResolveSwitchPlatform(in context, payload),
|
||||
MacroCode.PcName => this.TryResolvePcName(in context, payload),
|
||||
MacroCode.IfPcGender => this.TryResolveIfPcGender(in context, payload),
|
||||
MacroCode.IfPcName => this.TryResolveIfPcName(in context, payload),
|
||||
// MacroCode.Josa
|
||||
// MacroCode.Josaro
|
||||
MacroCode.IfSelf => this.TryResolveIfSelf(in context, payload),
|
||||
// MacroCode.NewLine (pass through)
|
||||
// MacroCode.Wait (pass through)
|
||||
// MacroCode.Icon (pass through)
|
||||
MacroCode.Color => this.TryResolveColor(in context, payload),
|
||||
MacroCode.EdgeColor => this.TryResolveEdgeColor(in context, payload),
|
||||
MacroCode.ShadowColor => this.TryResolveShadowColor(in context, payload),
|
||||
// MacroCode.SoftHyphen (pass through)
|
||||
// MacroCode.Key
|
||||
// MacroCode.Scale
|
||||
MacroCode.Bold => this.TryResolveBold(in context, payload),
|
||||
MacroCode.Italic => this.TryResolveItalic(in context, payload),
|
||||
// MacroCode.Edge
|
||||
// MacroCode.Shadow
|
||||
// MacroCode.NonBreakingSpace (pass through)
|
||||
// MacroCode.Icon2 (pass through)
|
||||
// MacroCode.Hyphen (pass through)
|
||||
MacroCode.Num => this.TryResolveNum(in context, payload),
|
||||
MacroCode.Hex => this.TryResolveHex(in context, payload),
|
||||
MacroCode.Kilo => this.TryResolveKilo(in context, payload),
|
||||
// MacroCode.Byte
|
||||
MacroCode.Sec => this.TryResolveSec(in context, payload),
|
||||
// MacroCode.Time
|
||||
MacroCode.Float => this.TryResolveFloat(in context, payload),
|
||||
// MacroCode.Link (pass through)
|
||||
MacroCode.Sheet => this.TryResolveSheet(in context, payload),
|
||||
MacroCode.SheetSub => this.TryResolveSheetSub(in context, payload),
|
||||
MacroCode.String => this.TryResolveString(in context, payload),
|
||||
MacroCode.Caps => this.TryResolveCaps(in context, payload),
|
||||
MacroCode.Head => this.TryResolveHead(in context, payload),
|
||||
MacroCode.Split => this.TryResolveSplit(in context, payload),
|
||||
MacroCode.HeadAll => this.TryResolveHeadAll(in context, payload),
|
||||
MacroCode.Fixed => this.TryResolveFixed(in context, payload),
|
||||
MacroCode.Lower => this.TryResolveLower(in context, payload),
|
||||
MacroCode.JaNoun => this.TryResolveNoun(ClientLanguage.Japanese, in context, payload),
|
||||
MacroCode.EnNoun => this.TryResolveNoun(ClientLanguage.English, in context, payload),
|
||||
MacroCode.DeNoun => this.TryResolveNoun(ClientLanguage.German, in context, payload),
|
||||
MacroCode.FrNoun => this.TryResolveNoun(ClientLanguage.French, in context, payload),
|
||||
// MacroCode.ChNoun
|
||||
MacroCode.LowerHead => this.TryResolveLowerHead(in context, payload),
|
||||
MacroCode.ColorType => this.TryResolveColorType(in context, payload),
|
||||
MacroCode.EdgeColorType => this.TryResolveEdgeColorType(in context, payload),
|
||||
// MacroCode.Ruby
|
||||
MacroCode.Digit => this.TryResolveDigit(in context, payload),
|
||||
MacroCode.Ordinal => this.TryResolveOrdinal(in context, payload),
|
||||
// MacroCode.Sound (pass through)
|
||||
MacroCode.LevelPos => this.TryResolveLevelPos(in context, payload),
|
||||
_ => false,
|
||||
};
|
||||
}
|
||||
|
||||
private unsafe bool TryResolveSetResetTime(in SeStringContext context, in ReadOnlySePayloadSpan payload)
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ internal class NounProcessor : IServiceType
|
|||
private const int PronounColumnIdx = 6;
|
||||
private const int ArticleColumnIdx = 7;
|
||||
|
||||
private static readonly ModuleLog Log = new("NounProcessor");
|
||||
private static readonly ModuleLog Log = ModuleLog.Create<NounProcessor>();
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly DataManager dataManager = Service<DataManager>.Get();
|
||||
|
|
|
|||
|
|
@ -213,11 +213,10 @@ public abstract partial class Payload
|
|||
return payload;
|
||||
}
|
||||
|
||||
private static Payload DecodeText(BinaryReader reader)
|
||||
private static TextPayload DecodeText(BinaryReader reader)
|
||||
{
|
||||
var payload = new TextPayload();
|
||||
payload.DecodeImpl(reader, reader.BaseStream.Length);
|
||||
|
||||
return payload;
|
||||
}
|
||||
}
|
||||
|
|
@ -382,7 +381,7 @@ public abstract partial class Payload
|
|||
{
|
||||
if (value < 0xCF)
|
||||
{
|
||||
return new byte[] { (byte)(value + 1) };
|
||||
return [(byte)(value + 1)];
|
||||
}
|
||||
|
||||
var bytes = BitConverter.GetBytes(value);
|
||||
|
|
|
|||
|
|
@ -45,10 +45,10 @@ public class IconPayload : Payload
|
|||
{
|
||||
var indexBytes = MakeInteger((uint)this.Icon);
|
||||
var chunkLen = indexBytes.Length + 1;
|
||||
var bytes = new List<byte>(new byte[]
|
||||
{
|
||||
var bytes = new List<byte>(
|
||||
[
|
||||
START_BYTE, (byte)SeStringChunkType.Icon, (byte)chunkLen,
|
||||
});
|
||||
]);
|
||||
bytes.AddRange(indexBytes);
|
||||
bytes.Add(END_BYTE);
|
||||
return bytes.ToArray();
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ using Dalamud.Utility;
|
|||
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
|
|
@ -172,7 +173,7 @@ public class ItemPayload : Payload
|
|||
};
|
||||
bytes.AddRange(idBytes);
|
||||
// unk
|
||||
bytes.AddRange(new byte[] { 0x02, 0x01 });
|
||||
bytes.AddRange([0x02, 0x01]);
|
||||
|
||||
// Links don't have to include the name, but if they do, it requires additional work
|
||||
if (hasName)
|
||||
|
|
@ -183,17 +184,17 @@ public class ItemPayload : Payload
|
|||
nameLen += 4; // space plus 3 bytes for HQ symbol
|
||||
}
|
||||
|
||||
bytes.AddRange(new byte[]
|
||||
{
|
||||
bytes.AddRange(
|
||||
[
|
||||
0xFF, // unk
|
||||
(byte)nameLen,
|
||||
});
|
||||
]);
|
||||
bytes.AddRange(Encoding.UTF8.GetBytes(this.displayName));
|
||||
|
||||
if (this.IsHQ)
|
||||
{
|
||||
// space and HQ symbol
|
||||
bytes.AddRange(new byte[] { 0x20, 0xEE, 0x80, 0xBC });
|
||||
bytes.AddRange([0x20, 0xEE, 0x80, 0xBC]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ using Dalamud.Data;
|
|||
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
|
|
@ -174,7 +175,7 @@ public class MapLinkPayload : Payload
|
|||
bytes.AddRange(yBytes);
|
||||
|
||||
// unk
|
||||
bytes.AddRange(new byte[] { 0xFF, 0x01, END_BYTE });
|
||||
bytes.AddRange([0xFF, 0x01, END_BYTE]);
|
||||
|
||||
return bytes.ToArray();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace Dalamud.Game.Text.SeStringHandling.Payloads;
|
|||
/// </summary>
|
||||
public class NewLinePayload : Payload, ITextProvider
|
||||
{
|
||||
private readonly byte[] bytes = { START_BYTE, (byte)SeStringChunkType.NewLine, 0x01, END_BYTE };
|
||||
private readonly byte[] bytes = [START_BYTE, (byte)SeStringChunkType.NewLine, 0x01, END_BYTE];
|
||||
|
||||
/// <summary>
|
||||
/// Gets an instance of NewLinePayload.
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ using System.Diagnostics.CodeAnalysis;
|
|||
using System.IO;
|
||||
|
||||
using Lumina.Extensions;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
||||
|
|
@ -97,7 +98,7 @@ namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
|||
reader.ReadByte();
|
||||
|
||||
// if the next byte is 0xF3 then this listing is limited to home world
|
||||
byte nextByte = reader.ReadByte();
|
||||
var nextByte = reader.ReadByte();
|
||||
switch (nextByte)
|
||||
{
|
||||
case (byte)PartyFinderLinkType.LimitedToHomeWorld:
|
||||
|
|
@ -121,11 +122,11 @@ namespace Dalamud.Game.Text.SeStringHandling.Payloads
|
|||
// if the link type is notification, just use premade payload data since it's always the same.
|
||||
// i have no idea why it is formatted like this, but it is how it is.
|
||||
// note it is identical to the link terminator payload except the embedded info type is 0x08
|
||||
if (this.LinkType == PartyFinderLinkType.PartyFinderNotification) return new byte[] { 0x02, 0x27, 0x07, 0x08, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03, };
|
||||
if (this.LinkType == PartyFinderLinkType.PartyFinderNotification) return [0x02, 0x27, 0x07, 0x08, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03,];
|
||||
|
||||
// back to our regularly scheduled programming...
|
||||
var listingIDBytes = MakeInteger(this.ListingId);
|
||||
bool isFlagSpecified = this.LinkType != PartyFinderLinkType.NotSpecified;
|
||||
var isFlagSpecified = this.LinkType != PartyFinderLinkType.NotSpecified;
|
||||
|
||||
var chunkLen = listingIDBytes.Length + 4;
|
||||
// 1 more byte for the type flag if it is specified
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ using Dalamud.Data;
|
|||
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
|
|
@ -62,7 +63,7 @@ public class QuestPayload : Payload
|
|||
};
|
||||
|
||||
bytes.AddRange(idBytes);
|
||||
bytes.AddRange(new byte[] { 0x01, 0x01, END_BYTE });
|
||||
bytes.AddRange([0x01, 0x01, END_BYTE]);
|
||||
return bytes.ToArray();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ public class RawPayload : Payload
|
|||
/// <summary>
|
||||
/// Gets a fixed Payload representing a common link-termination sequence, found in many payload chains.
|
||||
/// </summary>
|
||||
public static RawPayload LinkTerminator => new(new byte[] { 0x02, 0x27, 0x07, 0xCF, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03 });
|
||||
public static RawPayload LinkTerminator => new([0x02, 0x27, 0x07, 0xCF, 0x01, 0x01, 0x01, 0xFF, 0x01, 0x03]);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override PayloadType Type => PayloadType.Unknown;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ namespace Dalamud.Game.Text.SeStringHandling.Payloads;
|
|||
/// </summary>
|
||||
public class SeHyphenPayload : Payload, ITextProvider
|
||||
{
|
||||
private readonly byte[] bytes = { START_BYTE, (byte)SeStringChunkType.SeHyphen, 0x01, END_BYTE };
|
||||
private readonly byte[] bytes = [START_BYTE, (byte)SeStringChunkType.SeHyphen, 0x01, END_BYTE];
|
||||
|
||||
/// <summary>
|
||||
/// Gets an instance of SeHyphenPayload.
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ using Dalamud.Data;
|
|||
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
|
|
@ -63,7 +64,7 @@ public class StatusPayload : Payload
|
|||
|
||||
bytes.AddRange(idBytes);
|
||||
// unk
|
||||
bytes.AddRange(new byte[] { 0x01, 0x01, 0xFF, 0x02, 0x20, END_BYTE });
|
||||
bytes.AddRange([0x01, 0x01, 0xFF, 0x02, 0x20, END_BYTE]);
|
||||
|
||||
return bytes.ToArray();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ using Dalamud.Data;
|
|||
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
|
|
@ -95,10 +96,10 @@ public class UIForegroundPayload : Payload
|
|||
var colorBytes = MakeInteger(this.colorKey);
|
||||
var chunkLen = colorBytes.Length + 1;
|
||||
|
||||
var bytes = new List<byte>(new byte[]
|
||||
{
|
||||
var bytes = new List<byte>(
|
||||
[
|
||||
START_BYTE, (byte)SeStringChunkType.UIForeground, (byte)chunkLen,
|
||||
});
|
||||
]);
|
||||
|
||||
bytes.AddRange(colorBytes);
|
||||
bytes.Add(END_BYTE);
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ using Dalamud.Data;
|
|||
|
||||
using Lumina.Excel;
|
||||
using Lumina.Excel.Sheets;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
|
|
@ -98,10 +99,10 @@ public class UIGlowPayload : Payload
|
|||
var colorBytes = MakeInteger(this.colorKey);
|
||||
var chunkLen = colorBytes.Length + 1;
|
||||
|
||||
var bytes = new List<byte>(new byte[]
|
||||
{
|
||||
var bytes = new List<byte>(
|
||||
[
|
||||
START_BYTE, (byte)SeStringChunkType.UIGlow, (byte)chunkLen,
|
||||
});
|
||||
]);
|
||||
|
||||
bytes.AddRange(colorBytes);
|
||||
bytes.Add(END_BYTE);
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ public class SeString
|
|||
/// </summary>
|
||||
public SeString()
|
||||
{
|
||||
this.Payloads = new List<Payload>();
|
||||
this.Payloads = [];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue