mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 10:17:22 +01:00
Job Gauge update
This commit is contained in:
parent
409ce984da
commit
a5cccf8a76
53 changed files with 1216 additions and 1006 deletions
2
.gitmodules
vendored
2
.gitmodules
vendored
|
|
@ -3,4 +3,4 @@
|
|||
url = https://github.com/goatcorp/ImGuiScene
|
||||
[submodule "lib/FFXIVClientStructs"]
|
||||
path = lib/FFXIVClientStructs
|
||||
url = https://github.com/goatcorp/FFXIVClientStructs.git
|
||||
url = https://github.com/aers/FFXIVClientStructs.git
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ using Dalamud.Game.ClientState.Actors.Types;
|
|||
using Dalamud.Game.ClientState.Conditions;
|
||||
using Dalamud.Game.ClientState.Fates;
|
||||
using Dalamud.Game.ClientState.GamePad;
|
||||
using Dalamud.Game.ClientState.JobGauge;
|
||||
using Dalamud.Game.ClientState.Keys;
|
||||
using Dalamud.Game.Internal;
|
||||
using Dalamud.Hooking;
|
||||
using JetBrains.Annotations;
|
||||
using Serilog;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ namespace Dalamud.Game.ClientState
|
|||
this.FateTablePtr = sig.GetStaticAddressFromSig("48 8B 15 ?? ?? ?? ?? 48 8B F9 44 0F B7 41 ??");
|
||||
|
||||
this.LocalContentId = sig.GetStaticAddressFromSig("48 0F 44 05 ?? ?? ?? ?? 48 39 07");
|
||||
this.JobGaugeData = sig.GetStaticAddressFromSig("E8 ?? ?? ?? ?? FF C6 48 8D 5B 0C", 0xB9) + 0x10;
|
||||
this.JobGaugeData = sig.GetStaticAddressFromSig("48 8B 0D ?? ?? ?? ?? 48 85 C9 74 43") + 0x10;
|
||||
|
||||
this.SetupTerritoryType = sig.ScanText("48 89 5C 24 ?? 48 89 74 24 ?? 57 48 83 EC 20 48 8B F9 66 89 91 ?? ?? ?? ??");
|
||||
|
||||
|
|
|
|||
23
Dalamud/Game/ClientState/JobGauge/Enums/BOTDState.cs
Normal file
23
Dalamud/Game/ClientState/JobGauge/Enums/BOTDState.cs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// DRG Blood of the Dragon state types.
|
||||
/// </summary>
|
||||
public enum BOTDState : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Inactive type.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Blood of the Dragon is active.
|
||||
/// </summary>
|
||||
BOTD = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Life of the Dragon is active.
|
||||
/// </summary>
|
||||
LOTD = 2,
|
||||
}
|
||||
}
|
||||
53
Dalamud/Game/ClientState/JobGauge/Enums/CardType.cs
Normal file
53
Dalamud/Game/ClientState/JobGauge/Enums/CardType.cs
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// AST Arcanum (card) types.
|
||||
/// </summary>
|
||||
public enum CardType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No card.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The Balance card.
|
||||
/// </summary>
|
||||
BALANCE = 1,
|
||||
|
||||
/// <summary>
|
||||
/// The Bole card.
|
||||
/// </summary>
|
||||
BOLE = 2,
|
||||
|
||||
/// <summary>
|
||||
/// The Arrow card.
|
||||
/// </summary>
|
||||
ARROW = 3,
|
||||
|
||||
/// <summary>
|
||||
/// The Spear card.
|
||||
/// </summary>
|
||||
SPEAR = 4,
|
||||
|
||||
/// <summary>
|
||||
/// The Ewer card.
|
||||
/// </summary>
|
||||
EWER = 5,
|
||||
|
||||
/// <summary>
|
||||
/// The Spire card.
|
||||
/// </summary>
|
||||
SPIRE = 6,
|
||||
|
||||
/// <summary>
|
||||
/// The Lord of Crowns card.
|
||||
/// </summary>
|
||||
LORD = 0x70,
|
||||
|
||||
/// <summary>
|
||||
/// The Lady of Crowns card.
|
||||
/// </summary>
|
||||
LADY = 0x80,
|
||||
}
|
||||
}
|
||||
18
Dalamud/Game/ClientState/JobGauge/Enums/DismissedFairy.cs
Normal file
18
Dalamud/Game/ClientState/JobGauge/Enums/DismissedFairy.cs
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// SCH Dismissed fairy types.
|
||||
/// </summary>
|
||||
public enum DismissedFairy : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Dismissed fairy is Eos.
|
||||
/// </summary>
|
||||
EOS = 6,
|
||||
|
||||
/// <summary>
|
||||
/// Dismissed fairy is Selene.
|
||||
/// </summary>
|
||||
SELENE = 7,
|
||||
}
|
||||
}
|
||||
23
Dalamud/Game/ClientState/JobGauge/Enums/Mudras.cs
Normal file
23
Dalamud/Game/ClientState/JobGauge/Enums/Mudras.cs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// NIN Mudra types.
|
||||
/// </summary>
|
||||
public enum Mudras : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Ten mudra.
|
||||
/// </summary>
|
||||
TEN = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Chi mudra.
|
||||
/// </summary>
|
||||
CHI = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Jin mudra.
|
||||
/// </summary>
|
||||
JIN = 3,
|
||||
}
|
||||
}
|
||||
28
Dalamud/Game/ClientState/JobGauge/Enums/PetGlam.cs
Normal file
28
Dalamud/Game/ClientState/JobGauge/Enums/PetGlam.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// SMN summoned pet glam types.
|
||||
/// </summary>
|
||||
public enum PetGlam : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No pet glam.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Emerald carbuncle pet glam.
|
||||
/// </summary>
|
||||
EMERALD = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Topaz carbuncle pet glam.
|
||||
/// </summary>
|
||||
TOPAZ = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Ruby carbuncle pet glam.
|
||||
/// </summary>
|
||||
RUBY = 3,
|
||||
}
|
||||
}
|
||||
28
Dalamud/Game/ClientState/JobGauge/Enums/SealType.cs
Normal file
28
Dalamud/Game/ClientState/JobGauge/Enums/SealType.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// AST Divination seal types.
|
||||
/// </summary>
|
||||
public enum SealType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No seal.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Sun seal.
|
||||
/// </summary>
|
||||
SUN = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Moon seal.
|
||||
/// </summary>
|
||||
MOON = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Celestial seal.
|
||||
/// </summary>
|
||||
CELESTIAL = 3,
|
||||
}
|
||||
}
|
||||
31
Dalamud/Game/ClientState/JobGauge/Enums/Sen.cs
Normal file
31
Dalamud/Game/ClientState/JobGauge/Enums/Sen.cs
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// Samurai Sen types.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum Sen : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No Sen.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Setsu Sen type.
|
||||
/// </summary>
|
||||
SETSU = 1 << 0,
|
||||
|
||||
/// <summary>
|
||||
/// Getsu Sen type.
|
||||
/// </summary>
|
||||
GETSU = 1 << 1,
|
||||
|
||||
/// <summary>
|
||||
/// Ka Sen type.
|
||||
/// </summary>
|
||||
KA = 1 << 2,
|
||||
}
|
||||
}
|
||||
28
Dalamud/Game/ClientState/JobGauge/Enums/Song.cs
Normal file
28
Dalamud/Game/ClientState/JobGauge/Enums/Song.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// BRD Song types.
|
||||
/// </summary>
|
||||
public enum Song : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No song is active type.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Mage's Ballad type.
|
||||
/// </summary>
|
||||
MAGE = 5,
|
||||
|
||||
/// <summary>
|
||||
/// Army's Paeon type.
|
||||
/// </summary>
|
||||
ARMY = 10,
|
||||
|
||||
/// <summary>
|
||||
/// The Wanderer's Minuet type.
|
||||
/// </summary>
|
||||
WANDERER = 15,
|
||||
}
|
||||
}
|
||||
28
Dalamud/Game/ClientState/JobGauge/Enums/SummonPet.cs
Normal file
28
Dalamud/Game/ClientState/JobGauge/Enums/SummonPet.cs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
namespace Dalamud.Game.ClientState.JobGauge.Enums
|
||||
{
|
||||
/// <summary>
|
||||
/// SMN summoned pet types.
|
||||
/// </summary>
|
||||
public enum SummonPet : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No pet.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The summoned pet Ifrit.
|
||||
/// </summary>
|
||||
IFRIT = 3,
|
||||
|
||||
/// <summary>
|
||||
/// The summoned pet Titan.
|
||||
/// </summary>
|
||||
TITAN = 4,
|
||||
|
||||
/// <summary>
|
||||
/// The summoned pet Garuda.
|
||||
/// </summary>
|
||||
GARUDA = 5,
|
||||
}
|
||||
}
|
||||
50
Dalamud/Game/ClientState/JobGauge/JobGauges.cs
Normal file
50
Dalamud/Game/ClientState/JobGauge/JobGauges.cs
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
|
||||
using Dalamud.Game.ClientState.JobGauge.Types;
|
||||
using Serilog;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// This class converts in-memory Job gauge data to structs.
|
||||
/// </summary>
|
||||
public class JobGauges
|
||||
{
|
||||
private Dictionary<Type, JobGaugeBase> cache = new();
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JobGauges"/> class.
|
||||
/// </summary>
|
||||
/// <param name="addressResolver">Address resolver with the JobGauge memory location(s).</param>
|
||||
public JobGauges(ClientStateAddressResolver addressResolver)
|
||||
{
|
||||
this.Address = addressResolver.JobGaugeData;
|
||||
|
||||
Log.Verbose($"JobGaugeData address 0x{this.Address.ToInt64():X}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the address of the JobGauge data.
|
||||
/// </summary>
|
||||
public IntPtr Address { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Get the JobGauge for a given job.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">A JobGauge struct from ClientState.Structs.JobGauge.</typeparam>
|
||||
/// <returns>A JobGauge.</returns>
|
||||
public T Get<T>() where T : JobGaugeBase
|
||||
{
|
||||
// This is cached to mitigate the effects of using activator for instantiation.
|
||||
// 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);
|
||||
}
|
||||
|
||||
return (T)gauge;
|
||||
}
|
||||
}
|
||||
}
|
||||
40
Dalamud/Game/ClientState/JobGauge/Types/ASTGauge.cs
Normal file
40
Dalamud/Game/ClientState/JobGauge/Types/ASTGauge.cs
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
using System;
|
||||
|
||||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory AST job gauge.
|
||||
/// </summary>
|
||||
public unsafe class ASTGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.AstrologianGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ASTGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal ASTGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently drawn <see cref="CardType"/>.
|
||||
/// </summary>
|
||||
/// <returns>Currently drawn <see cref="CardType"/>.</returns>
|
||||
public CardType DrawnCard => (CardType)this.Struct->Card;
|
||||
|
||||
/// <summary>
|
||||
/// Check if a <see cref="SealType"/> is currently active on the divination gauge.
|
||||
/// </summary>
|
||||
/// <param name="seal">The <see cref="SealType"/> to check for.</param>
|
||||
/// <returns>If the given Seal is currently divined.</returns>
|
||||
public unsafe bool ContainsSeal(SealType seal)
|
||||
{
|
||||
if (this.Struct->Seals[0] == (byte)seal) return true;
|
||||
if (this.Struct->Seals[1] == (byte)seal) return true;
|
||||
if (this.Struct->Seals[2] == (byte)seal) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
67
Dalamud/Game/ClientState/JobGauge/Types/BLMGauge.cs
Normal file
67
Dalamud/Game/ClientState/JobGauge/Types/BLMGauge.cs
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory BLM job gauge.
|
||||
/// </summary>
|
||||
public unsafe class BLMGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.BlackMageGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BLMGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal BLMGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for the Enochian time in milliseconds.
|
||||
/// </summary>
|
||||
public short EnochianTimer => this.Struct->EnochianTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for Astral Fire or Umbral Ice in milliseconds.
|
||||
/// </summary>
|
||||
public short ElementTimeRemaining => this.Struct->ElementTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of Polyglot stacks remaining.
|
||||
/// </summary>
|
||||
public byte PolyglotStacks => this.Struct->PolyglotStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of Umbral Hearts remaining.
|
||||
/// </summary>
|
||||
public byte UmbralHearts => this.Struct->UmbralHearts;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Umbral Ice stacks.
|
||||
/// </summary>
|
||||
public byte UmbralIceStacks => (byte)(this.InUmbralIce ? -this.Struct->ElementStance : 0);
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Astral Fire stacks.
|
||||
/// </summary>
|
||||
public byte AstralFireStacks => (byte)(this.InAstralFire ? this.Struct->ElementStance : 0);
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether if the player is in Umbral Ice.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool InUmbralIce => this.Struct->ElementStance < 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether if the player is in Astral fire.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool InAstralFire => this.Struct->ElementStance > 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether if Enochian is active.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsEnochianActive => this.Struct->Enochian != 0;
|
||||
}
|
||||
}
|
||||
41
Dalamud/Game/ClientState/JobGauge/Types/BRDGauge.cs
Normal file
41
Dalamud/Game/ClientState/JobGauge/Types/BRDGauge.cs
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
using System;
|
||||
|
||||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory BRD job gauge.
|
||||
/// </summary>
|
||||
public unsafe class BRDGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.BardGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="BRDGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal BRDGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current song timer in milliseconds.
|
||||
/// </summary>
|
||||
public short SongTimer => this.Struct->SongTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Repertoire accumulated.
|
||||
/// </summary>
|
||||
public byte Repertoire => this.Struct->Repertoire;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Soul Voice accumulated.
|
||||
/// </summary>
|
||||
public byte SoulVoice => this.Struct->SoulVoice;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the type of song that is active.
|
||||
/// </summary>
|
||||
public Song Song => (Song)this.Struct->Song;
|
||||
}
|
||||
}
|
||||
46
Dalamud/Game/ClientState/JobGauge/Types/DNCGauge.cs
Normal file
46
Dalamud/Game/ClientState/JobGauge/Types/DNCGauge.cs
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory DNC job gauge.
|
||||
/// </summary>
|
||||
public unsafe class DNCGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.DancerGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DNCGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal DNCGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of feathers available.
|
||||
/// </summary>
|
||||
public byte Feathers => this.Struct->Feathers;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Espirit available.
|
||||
/// </summary>
|
||||
public byte Esprit => this.Struct->Esprit;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of steps completed for the current dance.
|
||||
/// </summary>
|
||||
public byte CompletedSteps => this.Struct->StepIndex;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the next step in the current dance.
|
||||
/// </summary>
|
||||
/// <returns>The next dance step action ID.</returns>
|
||||
public ulong NextStep => (ulong)(15999 + this.Struct->DanceSteps[this.Struct->StepIndex] - 1);
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the player is dancing or not.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsDancing => this.Struct->DanceSteps[0] != 0;
|
||||
}
|
||||
}
|
||||
36
Dalamud/Game/ClientState/JobGauge/Types/DRGGauge.cs
Normal file
36
Dalamud/Game/ClientState/JobGauge/Types/DRGGauge.cs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
using System;
|
||||
|
||||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory DRG job gauge.
|
||||
/// </summary>
|
||||
public unsafe class DRGGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.DragoonGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DRGGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal DRGGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for Blood of the Dragon in milliseconds.
|
||||
/// </summary>
|
||||
public short BOTDTimer => this.Struct->BotdTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current state of Blood of the Dragon.
|
||||
/// </summary>
|
||||
public BOTDState BOTDState => (BOTDState)this.Struct->BotdState;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the count of eyes opened during Blood of the Dragon.
|
||||
/// </summary>
|
||||
public byte EyeCount => this.Struct->EyeCount;
|
||||
}
|
||||
}
|
||||
40
Dalamud/Game/ClientState/JobGauge/Types/DRKGauge.cs
Normal file
40
Dalamud/Game/ClientState/JobGauge/Types/DRKGauge.cs
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory DRK job gauge.
|
||||
/// </summary>
|
||||
public unsafe class DRKGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.DarkKnightGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DRKGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal DRKGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of blood accumulated.
|
||||
/// </summary>
|
||||
public byte Blood => this.Struct->Blood;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Darkside time remaining in milliseconds.
|
||||
/// </summary>
|
||||
public ushort DarksideTimeRemaining => this.Struct->DarksideTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Shadow time remaining in milliseconds.
|
||||
/// </summary>
|
||||
public ushort ShadowTimeRemaining => this.Struct->ShadowTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the player has Dark Arts or not.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasDarkArts => this.Struct->DarkArtsState > 0;
|
||||
}
|
||||
}
|
||||
34
Dalamud/Game/ClientState/JobGauge/Types/GNBGauge.cs
Normal file
34
Dalamud/Game/ClientState/JobGauge/Types/GNBGauge.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory GNB job gauge.
|
||||
/// </summary>
|
||||
public unsafe class GNBGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.GunbreakerGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="GNBGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal GNBGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of ammo available.
|
||||
/// </summary>
|
||||
public byte Ammo => this.Struct->Ammo;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the max combo time of the Gnashing Fang combo.
|
||||
/// </summary>
|
||||
public short MaxTimerDuration => this.Struct->MaxTimerDuration;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current step of the Gnashing Fang combo.
|
||||
/// </summary>
|
||||
public byte AmmoComboStep => this.Struct->AmmoComboStep;
|
||||
}
|
||||
}
|
||||
24
Dalamud/Game/ClientState/JobGauge/Types/JobGaugeBase.cs
Normal file
24
Dalamud/Game/ClientState/JobGauge/Types/JobGaugeBase.cs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// Base job gauge class.
|
||||
/// </summary>
|
||||
public abstract unsafe class JobGaugeBase
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JobGaugeBase"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal JobGaugeBase(IntPtr address)
|
||||
{
|
||||
this.Address = address;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the address of this job gauge in memory.
|
||||
/// </summary>
|
||||
public IntPtr Address { get; }
|
||||
}
|
||||
}
|
||||
25
Dalamud/Game/ClientState/JobGauge/Types/JobGaugeBase{T}.cs
Normal file
25
Dalamud/Game/ClientState/JobGauge/Types/JobGaugeBase{T}.cs
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// Base job gauge class.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">The underlying FFXIVClientStructs type.</typeparam>
|
||||
public unsafe class JobGaugeBase<T> : JobGaugeBase where T : unmanaged
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JobGaugeBase{T}"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal JobGaugeBase(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets an unsafe struct pointer of this job gauge.
|
||||
/// </summary>
|
||||
private protected T* Struct => (T*)this.Address;
|
||||
}
|
||||
}
|
||||
56
Dalamud/Game/ClientState/JobGauge/Types/MCHGauge.cs
Normal file
56
Dalamud/Game/ClientState/JobGauge/Types/MCHGauge.cs
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory MCH job gauge.
|
||||
/// </summary>
|
||||
public unsafe class MCHGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.MachinistGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MCHGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal MCHGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time time remaining for Overheat in milliseconds.
|
||||
/// </summary>
|
||||
public short OverheatTimeRemaining => this.Struct->OverheatTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for the Rook or Queen in milliseconds.
|
||||
/// </summary>
|
||||
public short SummonTimeRemaining => this.Struct->SummonTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current Heat level.
|
||||
/// </summary>
|
||||
public byte Heat => this.Struct->Heat;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current Battery level.
|
||||
/// </summary>
|
||||
public byte Battery => this.Struct->Battery;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the battery level of the last summon (robot).
|
||||
/// </summary>
|
||||
public byte LastSummonBatteryPower => this.Struct->LastSummonBatteryPower;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the player is currently Overheated.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsOverheated => (this.Struct->TimerActive & 1) != 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the player has an active Robot.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsRobotActive => (this.Struct->TimerActive & 2) != 0;
|
||||
}
|
||||
}
|
||||
24
Dalamud/Game/ClientState/JobGauge/Types/MNKGauge.cs
Normal file
24
Dalamud/Game/ClientState/JobGauge/Types/MNKGauge.cs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory MNK job gauge.
|
||||
/// </summary>
|
||||
public unsafe class MNKGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.MonkGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="MNKGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal MNKGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of Chakra available.
|
||||
/// </summary>
|
||||
public byte Chakra => this.Struct->Chakra;
|
||||
}
|
||||
}
|
||||
34
Dalamud/Game/ClientState/JobGauge/Types/NINGauge.cs
Normal file
34
Dalamud/Game/ClientState/JobGauge/Types/NINGauge.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory NIN job gauge.
|
||||
/// </summary>
|
||||
public unsafe class NINGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.NinjaGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="NINGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">The address of the gauge.</param>
|
||||
internal NINGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time left on Huton in milliseconds.
|
||||
/// </summary>
|
||||
public int HutonTimer => this.Struct->HutonTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Ninki available.
|
||||
/// </summary>
|
||||
public byte Ninki => this.Struct->Ninki;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of times Huton has been cast manually.
|
||||
/// </summary>
|
||||
public byte HutonManualCasts => this.Struct->HutonManualCasts;
|
||||
}
|
||||
}
|
||||
24
Dalamud/Game/ClientState/JobGauge/Types/PLDGauge.cs
Normal file
24
Dalamud/Game/ClientState/JobGauge/Types/PLDGauge.cs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory PLD job gauge.
|
||||
/// </summary>
|
||||
public unsafe class PLDGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.PaladinGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="PLDGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal PLDGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current level of the Oath gauge.
|
||||
/// </summary>
|
||||
public byte OathGauge => this.Struct->OathGauge;
|
||||
}
|
||||
}
|
||||
29
Dalamud/Game/ClientState/JobGauge/Types/RDMGauge.cs
Normal file
29
Dalamud/Game/ClientState/JobGauge/Types/RDMGauge.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory RDM job gauge.
|
||||
/// </summary>
|
||||
public unsafe class RDMGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.RedMageGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="RDMGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal RDMGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the level of the White gauge.
|
||||
/// </summary>
|
||||
public byte WhiteMana => this.Struct->WhiteMana;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the level of the Black gauge.
|
||||
/// </summary>
|
||||
public byte BlackMana => this.Struct->BlackMana;
|
||||
}
|
||||
}
|
||||
54
Dalamud/Game/ClientState/JobGauge/Types/SAMGauge.cs
Normal file
54
Dalamud/Game/ClientState/JobGauge/Types/SAMGauge.cs
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
using System;
|
||||
|
||||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory SAM job gauge.
|
||||
/// </summary>
|
||||
public unsafe class SAMGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.SamuraiGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SAMGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal SAMGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current amount of Kenki available.
|
||||
/// </summary>
|
||||
public byte Kenki => this.Struct->Kenki;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Meditation stacks.
|
||||
/// </summary>
|
||||
public byte MeditationStacks => this.Struct->MeditationStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the active Sen.
|
||||
/// </summary>
|
||||
public Sen Sen => (Sen)this.Struct->SenFlags;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the Setsu Sen is active.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasSetsu => (this.Sen & Sen.SETSU) != 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the Getsu Sen is active.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasGetsu => (this.Sen & Sen.GETSU) != 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether the Ka Sen is active.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasKa => (this.Sen & Sen.KA) != 0;
|
||||
}
|
||||
}
|
||||
41
Dalamud/Game/ClientState/JobGauge/Types/SCHGauge.cs
Normal file
41
Dalamud/Game/ClientState/JobGauge/Types/SCHGauge.cs
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
using System;
|
||||
|
||||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory SCH job gauge.
|
||||
/// </summary>
|
||||
public unsafe class SCHGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.ScholarGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SCHGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal SCHGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Aetherflow stacks available.
|
||||
/// </summary>
|
||||
public byte Aetherflow => this.Struct->Aetherflow;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current level of the Fairy Gauge.
|
||||
/// </summary>
|
||||
public byte FairyGauge => this.Struct->FairyGauge;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Seraph time remaiSCHg in milliseconds.
|
||||
/// </summary>
|
||||
public short SeraphTimer => this.Struct->SeraphTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the last dismissed fairy.
|
||||
/// </summary>
|
||||
public DismissedFairy DismissedFairy => (DismissedFairy)this.Struct->DismissedFairy;
|
||||
}
|
||||
}
|
||||
60
Dalamud/Game/ClientState/JobGauge/Types/SMNGauge.cs
Normal file
60
Dalamud/Game/ClientState/JobGauge/Types/SMNGauge.cs
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
using System;
|
||||
|
||||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory SMN job gauge.
|
||||
/// </summary>
|
||||
public unsafe class SMNGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.SummonerGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="SMNGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal SMNGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for the current summon.
|
||||
/// </summary>
|
||||
public short TimerRemaining => this.Struct->TimerRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the summon that will return after the current summon expires.
|
||||
/// </summary>
|
||||
public SummonPet ReturnSummon => (SummonPet)this.Struct->ReturnSummon;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the summon glam for the <see cref="ReturnSummon"/>.
|
||||
/// </summary>
|
||||
public PetGlam ReturnSummonGlam => (PetGlam)this.Struct->ReturnSummonGlam;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current aether flags.
|
||||
/// Use the summon accessors instead.
|
||||
/// </summary>
|
||||
public byte AetherFlags => this.Struct->AetherFlags;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether if Phoenix is ready to be summoned.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsPhoenixReady => (this.AetherFlags & 0x10) > 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether Bahamut is ready to be summoned.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsBahamutReady => (this.AetherFlags & 8) > 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether there are any Aetherflow stacks available.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasAetherflowStacks => (this.AetherFlags & 3) > 0;
|
||||
}
|
||||
}
|
||||
24
Dalamud/Game/ClientState/JobGauge/Types/WARGauge.cs
Normal file
24
Dalamud/Game/ClientState/JobGauge/Types/WARGauge.cs
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory WAR job gauge.
|
||||
/// </summary>
|
||||
public unsafe class WARGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.WarriorGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WARGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal WARGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of wrath in the Beast gauge.
|
||||
/// </summary>
|
||||
public byte BeastGauge => this.Struct->BeastGauge;
|
||||
}
|
||||
}
|
||||
34
Dalamud/Game/ClientState/JobGauge/Types/WHMGauge.cs
Normal file
34
Dalamud/Game/ClientState/JobGauge/Types/WHMGauge.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
|
||||
namespace Dalamud.Game.ClientState.JobGauge.Types
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory WHM job gauge.
|
||||
/// </summary>
|
||||
public unsafe class WHMGauge : JobGaugeBase<FFXIVClientStructs.FFXIV.Client.Game.Gauge.WhiteMageGauge>
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="WHMGauge"/> class.
|
||||
/// </summary>
|
||||
/// <param name="address">Address of the job gauge.</param>
|
||||
internal WHMGauge(IntPtr address)
|
||||
: base(address)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time to next lily in milliseconds.
|
||||
/// </summary>
|
||||
public short LilyTimer => this.Struct->LilyTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of Lilies.
|
||||
/// </summary>
|
||||
public byte Lily => this.Struct->Lily;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of times the blood lily has been nourished.
|
||||
/// </summary>
|
||||
public byte BloodLily => this.Struct->BloodLily;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
using Serilog;
|
||||
|
||||
namespace Dalamud.Game.ClientState
|
||||
{
|
||||
/// <summary>
|
||||
/// This class converts in-memory Job gauge data to structs.
|
||||
/// </summary>
|
||||
public class JobGauges
|
||||
{
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="JobGauges"/> class.
|
||||
/// </summary>
|
||||
/// <param name="addressResolver">Address resolver with the JobGauge memory location(s).</param>
|
||||
public JobGauges(ClientStateAddressResolver addressResolver)
|
||||
{
|
||||
this.Address = addressResolver;
|
||||
|
||||
Log.Verbose($"JobGaugeData address 0x{this.Address.JobGaugeData.ToInt64():X}");
|
||||
}
|
||||
|
||||
private ClientStateAddressResolver Address { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Get the JobGauge for a given job.
|
||||
/// </summary>
|
||||
/// <typeparam name="T">A JobGauge struct from ClientState.Structs.JobGauge.</typeparam>
|
||||
/// <returns>A JobGauge.</returns>
|
||||
public T Get<T>()
|
||||
{
|
||||
return Marshal.PtrToStructure<T>(this.Address.JobGaugeData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory AST job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct ASTGauge
|
||||
{
|
||||
[FieldOffset(4)]
|
||||
private CardType card;
|
||||
|
||||
[FieldOffset(5)]
|
||||
private unsafe fixed byte seals[3];
|
||||
|
||||
/// <summary>
|
||||
/// Gets the currently drawn <see cref="CardType"/>.
|
||||
/// </summary>
|
||||
/// <returns>Currently drawn <see cref="CardType"/>.</returns>
|
||||
public CardType DrawnCard() => this.card;
|
||||
|
||||
/// <summary>
|
||||
/// Check if a <see cref="SealType"/> is currently active on the divination gauge.
|
||||
/// </summary>
|
||||
/// <param name="seal">The <see cref="SealType"/> to check for.</param>
|
||||
/// <returns>If the given Seal is currently divined.</returns>
|
||||
public unsafe bool ContainsSeal(SealType seal)
|
||||
{
|
||||
if (this.seals[0] == (byte)seal) return true;
|
||||
if (this.seals[1] == (byte)seal) return true;
|
||||
if (this.seals[2] == (byte)seal) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,67 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory BLM job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct BLMGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private short timeUntilNextPolyglot; // enochian timer
|
||||
|
||||
[FieldOffset(2)]
|
||||
private short elementTimeRemaining; // umbral ice and astral fire timer
|
||||
|
||||
[FieldOffset(4)]
|
||||
private byte elementStance; // umbral ice or astral fire
|
||||
|
||||
[FieldOffset(5)]
|
||||
private byte numUmbralHearts;
|
||||
|
||||
[FieldOffset(6)]
|
||||
private byte numPolyglotStacks;
|
||||
|
||||
[FieldOffset(7)]
|
||||
private byte enochianState;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time until the next Polyglot stack in milliseconds.
|
||||
/// </summary>
|
||||
public short TimeUntilNextPolyglot => this.timeUntilNextPolyglot;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for Astral Fire or Umbral Ice in milliseconds.
|
||||
/// </summary>
|
||||
public short ElementTimeRemaining => this.elementTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of Polyglot stacks remaining.
|
||||
/// </summary>
|
||||
public byte NumPolyglotStacks => this.numPolyglotStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of Umbral Hearts remaining.
|
||||
/// </summary>
|
||||
public byte NumUmbralHearts => this.numUmbralHearts;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the player is in Umbral Ice.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool InUmbralIce() => this.elementStance > 4;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the player is in Astral fire.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool InAstralFire() => this.elementStance > 0 && this.elementStance < 4;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if Enochian is active.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsEnoActive() => this.enochianState > 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory BRD job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct BRDGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private short songTimer;
|
||||
|
||||
[FieldOffset(2)]
|
||||
private byte numSongStacks;
|
||||
|
||||
[FieldOffset(3)]
|
||||
private byte soulVoiceValue;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private CurrentSong activeSong;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current song timer in milliseconds.
|
||||
/// </summary>
|
||||
public short SongTimer => this.songTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of stacks for the current song.
|
||||
/// </summary>
|
||||
public byte NumSongStacks => this.numSongStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Soul Voice accumulated.
|
||||
/// </summary>
|
||||
public byte SoulVoiceValue => this.soulVoiceValue;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the type of song that is active.
|
||||
/// </summary>
|
||||
public CurrentSong ActiveSong => this.activeSong;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory DNC job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public unsafe struct DNCGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private byte numFeathers;
|
||||
|
||||
[FieldOffset(1)]
|
||||
private byte esprit;
|
||||
|
||||
[FieldOffset(2)]
|
||||
private fixed byte stepOrder[4];
|
||||
|
||||
[FieldOffset(6)]
|
||||
private byte numCompleteSteps;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of feathers available.
|
||||
/// </summary>
|
||||
public byte NumFeathers => this.numFeathers;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Espirit available.
|
||||
/// </summary>
|
||||
public byte Esprit => this.esprit;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of steps completed for the current dance.
|
||||
/// </summary>
|
||||
public byte NumCompleteSteps => this.numCompleteSteps;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the next step in the current dance.
|
||||
/// </summary>
|
||||
/// <returns>The next dance step action ID.</returns>
|
||||
public ulong NextStep() => (ulong)(15999 + this.stepOrder[this.NumCompleteSteps] - 1);
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the player is dancing or not.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsDancing() => this.stepOrder[0] != 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory DRG job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct DRGGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private short botdTimer;
|
||||
|
||||
[FieldOffset(2)]
|
||||
private BOTDState botdState;
|
||||
|
||||
[FieldOffset(3)]
|
||||
private byte eyeCount;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for Blood of the Dragon in milliseconds.
|
||||
/// </summary>
|
||||
public short BOTDTimer => this.botdTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current state of Blood of the Dragon.
|
||||
/// </summary>
|
||||
public BOTDState BOTDState => this.botdState;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the count of eyes opened during Blood of the Dragon.
|
||||
/// </summary>
|
||||
public byte EyeCount => this.eyeCount;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory DRK job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct DRKGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private byte blood;
|
||||
|
||||
[FieldOffset(2)]
|
||||
private ushort darksideTimeRemaining;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private byte darkArtsState;
|
||||
|
||||
[FieldOffset(6)]
|
||||
private ushort shadowTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of blood accumulated.
|
||||
/// </summary>
|
||||
public byte Blood => this.blood;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Darkside time remaining in milliseconds.
|
||||
/// </summary>
|
||||
public ushort DarksideTimeRemaining => this.darksideTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Shadow time remaining in milliseconds.
|
||||
/// </summary>
|
||||
public ushort ShadowTimeRemaining => this.shadowTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the player has Dark Arts or not.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasDarkArts() => this.darkArtsState > 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory GNB job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct GNBGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private byte numAmmo;
|
||||
|
||||
[FieldOffset(2)]
|
||||
private short maxTimerDuration;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private byte ammoComboStepNumber;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of ammo available.
|
||||
/// </summary>
|
||||
public byte NumAmmo => this.numAmmo;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the max combo time of the Gnashing Fang combo.
|
||||
/// </summary>
|
||||
public short MaxTimerDuration => this.maxTimerDuration;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current step of the Gnashing Fang combo.
|
||||
/// </summary>
|
||||
public byte AmmoComboStepNumber => this.ammoComboStepNumber;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,276 +0,0 @@
|
|||
using System;
|
||||
|
||||
#pragma warning disable SA1402 // File may only contain a single type
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
#region AST
|
||||
|
||||
/// <summary>
|
||||
/// AST Divination seal types.
|
||||
/// </summary>
|
||||
public enum SealType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No seal.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Sun seal.
|
||||
/// </summary>
|
||||
SUN = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Moon seal.
|
||||
/// </summary>
|
||||
MOON = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Celestial seal.
|
||||
/// </summary>
|
||||
CELESTIAL = 3,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// AST Arcanum (card) types.
|
||||
/// </summary>
|
||||
public enum CardType : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No card.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The Balance card.
|
||||
/// </summary>
|
||||
BALANCE = 1,
|
||||
|
||||
/// <summary>
|
||||
/// The Bole card.
|
||||
/// </summary>
|
||||
BOLE = 2,
|
||||
|
||||
/// <summary>
|
||||
/// The Arrow card.
|
||||
/// </summary>
|
||||
ARROW = 3,
|
||||
|
||||
/// <summary>
|
||||
/// The Spear card.
|
||||
/// </summary>
|
||||
SPEAR = 4,
|
||||
|
||||
/// <summary>
|
||||
/// The Ewer card.
|
||||
/// </summary>
|
||||
EWER = 5,
|
||||
|
||||
/// <summary>
|
||||
/// The Spire card.
|
||||
/// </summary>
|
||||
SPIRE = 6,
|
||||
|
||||
/// <summary>
|
||||
/// The Lord of Crowns card.
|
||||
/// </summary>
|
||||
LORD = 0x70,
|
||||
|
||||
/// <summary>
|
||||
/// The Lady of Crowns card.
|
||||
/// </summary>
|
||||
LADY = 0x80,
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region BRD
|
||||
|
||||
/// <summary>
|
||||
/// BRD Current Song types.
|
||||
/// </summary>
|
||||
public enum CurrentSong : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No song is active type.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Mage's Ballad type.
|
||||
/// </summary>
|
||||
MAGE = 5,
|
||||
|
||||
/// <summary>
|
||||
/// Army's Paeon type.
|
||||
/// </summary>
|
||||
ARMY = 0xA,
|
||||
|
||||
/// <summary>
|
||||
/// The Wanderer's Minuet type.
|
||||
/// </summary>
|
||||
WANDERER = 0xF,
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region DRG
|
||||
|
||||
/// <summary>
|
||||
/// DRG Blood of the Dragon state types.
|
||||
/// </summary>
|
||||
public enum BOTDState : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Inactive type.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Blood of the Dragon is active.
|
||||
/// </summary>
|
||||
BOTD = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Life of the Dragon is active.
|
||||
/// </summary>
|
||||
LOTD = 2,
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region NIN
|
||||
|
||||
/// <summary>
|
||||
/// NIN Mudra types.
|
||||
/// </summary>
|
||||
public enum Mudras : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Ten mudra.
|
||||
/// </summary>
|
||||
TEN = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Chi mudra.
|
||||
/// </summary>
|
||||
CHI = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Jin mudra.
|
||||
/// </summary>
|
||||
JIN = 3,
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SAM
|
||||
|
||||
/// <summary>
|
||||
/// Samurai Sen types.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum Sen : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No Sen.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Setsu Sen type.
|
||||
/// </summary>
|
||||
SETSU = 1 << 0,
|
||||
|
||||
/// <summary>
|
||||
/// Getsu Sen type.
|
||||
/// </summary>
|
||||
GETSU = 1 << 1,
|
||||
|
||||
/// <summary>
|
||||
/// Ka Sen type.
|
||||
/// </summary>
|
||||
KA = 1 << 2,
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SCH
|
||||
|
||||
/// <summary>
|
||||
/// SCH Dismissed fairy types.
|
||||
/// </summary>
|
||||
public enum DismissedFairy : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// Dismissed fairy is Eos.
|
||||
/// </summary>
|
||||
EOS = 6,
|
||||
|
||||
/// <summary>
|
||||
/// Dismissed fairy is Selene.
|
||||
/// </summary>
|
||||
SELENE = 7,
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region SMN
|
||||
|
||||
/// <summary>
|
||||
/// SMN summoned pet types.
|
||||
/// </summary>
|
||||
public enum SummonPet : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No pet.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// The summoned pet Ifrit.
|
||||
/// </summary>
|
||||
IFRIT = 3,
|
||||
|
||||
/// <summary>
|
||||
/// The summoned pet Titan.
|
||||
/// </summary>
|
||||
TITAN = 4,
|
||||
|
||||
/// <summary>
|
||||
/// The summoned pet Garuda.
|
||||
/// </summary>
|
||||
GARUDA = 5,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// SMN summoned pet glam types.
|
||||
/// </summary>
|
||||
public enum PetGlam : byte
|
||||
{
|
||||
/// <summary>
|
||||
/// No pet glam.
|
||||
/// </summary>
|
||||
NONE = 0,
|
||||
|
||||
/// <summary>
|
||||
/// Emerald carbuncle pet glam.
|
||||
/// </summary>
|
||||
EMERALD = 1,
|
||||
|
||||
/// <summary>
|
||||
/// Topaz carbuncle pet glam.
|
||||
/// </summary>
|
||||
TOPAZ = 2,
|
||||
|
||||
/// <summary>
|
||||
/// Ruby carbuncle pet glam.
|
||||
/// </summary>
|
||||
RUBY = 3,
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
#pragma warning restore SA1402 // File may only contain a single type
|
||||
|
|
@ -1,66 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory MCH job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct MCHGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private short overheatTimeRemaining;
|
||||
|
||||
[FieldOffset(2)]
|
||||
private short robotTimeRemaining;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private byte heat;
|
||||
|
||||
[FieldOffset(5)]
|
||||
private byte battery;
|
||||
|
||||
[FieldOffset(6)]
|
||||
private byte lastRobotBatteryPower;
|
||||
|
||||
[FieldOffset(7)]
|
||||
private byte timerActive;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time time remaining for Overheat in milliseconds.
|
||||
/// </summary>
|
||||
public short OverheatTimeRemaining => this.overheatTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for the Rook or Queen in milliseconds.
|
||||
/// </summary>
|
||||
public short RobotTimeRemaining => this.robotTimeRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current Heat level.
|
||||
/// </summary>
|
||||
public byte Heat => this.heat;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current Battery level.
|
||||
/// </summary>
|
||||
public byte Battery => this.battery;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the battery level of the last Robot.
|
||||
/// </summary>
|
||||
public byte LastRobotBatteryPower => this.lastRobotBatteryPower;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the player is currently Overheated.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsOverheated() => (this.timerActive & 1) != 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the player has an active Robot.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsRobotActive() => (this.timerActive & 2) != 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory MNK job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct MNKGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private byte numChakra;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of Chakra available.
|
||||
/// </summary>
|
||||
public byte NumChakra => this.numChakra;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,36 +0,0 @@
|
|||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory NIN job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct NINGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private int hutonTimeLeft;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private byte ninki;
|
||||
|
||||
[FieldOffset(5)]
|
||||
private byte numHutonManualCasts;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time left on Huton in milliseconds.
|
||||
/// </summary>
|
||||
public int HutonTimeLeft => this.hutonTimeLeft;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Ninki available.
|
||||
/// </summary>
|
||||
public byte Ninki => this.ninki;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of times Huton has been cast manually.
|
||||
/// </summary>
|
||||
public byte NumHutonManualCasts => this.numHutonManualCasts;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory PLD job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct PLDGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private byte gaugeAmount;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current level of the Oath gauge.
|
||||
/// </summary>
|
||||
public byte GaugeAmount => this.gaugeAmount;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory RDM job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct RDMGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private byte whiteGauge;
|
||||
|
||||
[FieldOffset(1)]
|
||||
private byte blackGauge;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the level of the White gauge.
|
||||
/// </summary>
|
||||
public byte WhiteGauge => this.whiteGauge;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the level of the Black gauge.
|
||||
/// </summary>
|
||||
public byte BlackGauge => this.blackGauge;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory SAM job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct SAMGauge
|
||||
{
|
||||
[FieldOffset(3)]
|
||||
private byte kenki;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private byte meditationStacks;
|
||||
|
||||
[FieldOffset(5)]
|
||||
private Sen sen;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current amount of Kenki available.
|
||||
/// </summary>
|
||||
public byte Kenki => this.kenki;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Meditation stacks.
|
||||
/// </summary>
|
||||
public byte MeditationStacks => this.meditationStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the active Sen.
|
||||
/// </summary>
|
||||
public Sen Sen => this.sen;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the Setsu Sen is active.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasSetsu() => (this.Sen & Sen.SETSU) != 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the Getsu Sen is active.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasGetsu() => (this.Sen & Sen.GETSU) != 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if the Ka Sen is active.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasKa() => (this.Sen & Sen.KA) != 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory SCH job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct SCHGauge
|
||||
{
|
||||
[FieldOffset(2)]
|
||||
private byte numAetherflowStacks;
|
||||
|
||||
[FieldOffset(3)]
|
||||
private byte fairyGaugeAmount;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private short seraphTimer;
|
||||
|
||||
[FieldOffset(6)]
|
||||
private DismissedFairy dismissedFairy;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of Aetherflow stacks available.
|
||||
/// </summary>
|
||||
public byte NumAetherflowStacks => this.numAetherflowStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current level of the Fairy Gauge.
|
||||
/// </summary>
|
||||
public byte FairyGaugeAmount => this.fairyGaugeAmount;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the Seraph time remaining in milliseconds.
|
||||
/// </summary>
|
||||
public short SeraphTimer => this.seraphTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the last dismissed fairy.
|
||||
/// </summary>
|
||||
public DismissedFairy DismissedFairy => this.dismissedFairy;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,62 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory SMN job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct SMNGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private short timerRemaining;
|
||||
|
||||
[FieldOffset(2)]
|
||||
private SummonPet returnSummon;
|
||||
|
||||
[FieldOffset(3)]
|
||||
private PetGlam returnSummonGlam;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private byte numStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time remaining for the current summon.
|
||||
/// </summary>
|
||||
public short TimerRemaining => this.timerRemaining;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the summon that will return after the current summon expires.
|
||||
/// </summary>
|
||||
public SummonPet ReturnSummon => this.returnSummon;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the summon glam for the <see cref="ReturnSummon"/>.
|
||||
/// </summary>
|
||||
public PetGlam ReturnSummonGlam => this.returnSummonGlam;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the current stacks.
|
||||
/// Use the summon accessors instead.
|
||||
/// </summary>
|
||||
public byte NumStacks => this.numStacks;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if Phoenix is ready to be summoned.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsPhoenixReady() => (this.NumStacks & 0x10) > 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if Bahamut is ready to be summoned.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool IsBahamutReady() => (this.NumStacks & 8) > 0;
|
||||
|
||||
/// <summary>
|
||||
/// Gets if there are any Aetherflow stacks available.
|
||||
/// </summary>
|
||||
/// <returns><c>true</c> or <c>false</c>.</returns>
|
||||
public bool HasAetherflowStacks() => (this.NumStacks & 3) > 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory WAR job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct WARGauge
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
private byte beastGaugeAmount;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the amount of wrath in the Beast gauge.
|
||||
/// </summary>
|
||||
public byte BeastGaugeAmount => this.beastGaugeAmount;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Dalamud.Game.ClientState.Structs.JobGauge
|
||||
{
|
||||
/// <summary>
|
||||
/// In-memory WHM job gauge.
|
||||
/// </summary>
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
public struct WHMGauge
|
||||
{
|
||||
[FieldOffset(2)]
|
||||
private short lilyTimer;
|
||||
|
||||
[FieldOffset(4)]
|
||||
private byte numLilies;
|
||||
|
||||
[FieldOffset(5)]
|
||||
private byte numBloodLily;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the time to next lily in milliseconds.
|
||||
/// </summary>
|
||||
public short LilyTimer => this.lilyTimer;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of Lilies.
|
||||
/// </summary>
|
||||
public byte NumLilies => this.numLilies;
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of times the blood lily has been nourished.
|
||||
/// </summary>
|
||||
public byte NumBloodLily => this.numBloodLily;
|
||||
}
|
||||
}
|
||||
|
|
@ -10,7 +10,8 @@ using Dalamud.Game.ClientState.Actors.Types;
|
|||
using Dalamud.Game.ClientState.Actors.Types.NonPlayer;
|
||||
using Dalamud.Game.ClientState.Conditions;
|
||||
using Dalamud.Game.ClientState.GamePad;
|
||||
using Dalamud.Game.ClientState.Structs.JobGauge;
|
||||
using Dalamud.Game.ClientState.JobGauge.Enums;
|
||||
using Dalamud.Game.ClientState.JobGauge.Types;
|
||||
using Dalamud.Game.Gui.Addons;
|
||||
using Dalamud.Game.Gui.Toast;
|
||||
using Dalamud.Game.Text;
|
||||
|
|
@ -558,8 +559,172 @@ namespace Dalamud.Interface.Internal.Windows
|
|||
|
||||
private void DrawGauge()
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<ASTGauge>();
|
||||
ImGui.Text($"Moon: {gauge.ContainsSeal(SealType.MOON)} Drawn: {gauge.DrawnCard()}");
|
||||
var player = this.dalamud.ClientState.LocalPlayer;
|
||||
if (player == null)
|
||||
{
|
||||
ImGui.Text("Player is not present");
|
||||
return;
|
||||
}
|
||||
|
||||
var jobID = player.ClassJob.Id;
|
||||
if (jobID == 19)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<PLDGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.OathGauge)}: {gauge.OathGauge}");
|
||||
}
|
||||
else if (jobID == 20)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<MNKGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.Chakra)}: {gauge.Chakra}");
|
||||
}
|
||||
else if (jobID == 21)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<WARGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.BeastGauge)}: {gauge.BeastGauge}");
|
||||
}
|
||||
else if (jobID == 22)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<DRGGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.BOTDTimer)}: {gauge.BOTDTimer}");
|
||||
ImGui.Text($"{nameof(gauge.BOTDState)}: {gauge.BOTDState}");
|
||||
ImGui.Text($"{nameof(gauge.EyeCount)}: {gauge.EyeCount}");
|
||||
}
|
||||
else if (jobID == 23)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<BRDGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.SongTimer)}: {gauge.SongTimer}");
|
||||
ImGui.Text($"{nameof(gauge.Repertoire)}: {gauge.Repertoire}");
|
||||
ImGui.Text($"{nameof(gauge.SoulVoice)}: {gauge.SoulVoice}");
|
||||
ImGui.Text($"{nameof(gauge.Song)}: {gauge.Song}");
|
||||
}
|
||||
else if (jobID == 24)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<WHMGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.LilyTimer)}: {gauge.LilyTimer}");
|
||||
ImGui.Text($"{nameof(gauge.Lily)}: {gauge.Lily}");
|
||||
ImGui.Text($"{nameof(gauge.BloodLily)}: {gauge.BloodLily}");
|
||||
}
|
||||
else if (jobID == 25)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<BLMGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.EnochianTimer)}: {gauge.EnochianTimer}");
|
||||
ImGui.Text($"{nameof(gauge.ElementTimeRemaining)}: {gauge.ElementTimeRemaining}");
|
||||
ImGui.Text($"{nameof(gauge.PolyglotStacks)}: {gauge.PolyglotStacks}");
|
||||
ImGui.Text($"{nameof(gauge.UmbralHearts)}: {gauge.UmbralHearts}");
|
||||
ImGui.Text($"{nameof(gauge.UmbralIceStacks)}: {gauge.UmbralIceStacks}");
|
||||
ImGui.Text($"{nameof(gauge.AstralFireStacks)}: {gauge.AstralFireStacks}");
|
||||
ImGui.Text($"{nameof(gauge.InUmbralIce)}: {gauge.InUmbralIce}");
|
||||
ImGui.Text($"{nameof(gauge.InAstralFire)}: {gauge.InAstralFire}");
|
||||
ImGui.Text($"{nameof(gauge.IsEnochianActive)}: {gauge.IsEnochianActive}");
|
||||
}
|
||||
else if (jobID == 27)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<SMNGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.TimerRemaining)}: {gauge.TimerRemaining}");
|
||||
ImGui.Text($"{nameof(gauge.ReturnSummon)}: {gauge.ReturnSummon}");
|
||||
ImGui.Text($"{nameof(gauge.ReturnSummonGlam)}: {gauge.ReturnSummonGlam}");
|
||||
ImGui.Text($"{nameof(gauge.AetherFlags)}: {gauge.AetherFlags}");
|
||||
ImGui.Text($"{nameof(gauge.IsPhoenixReady)}: {gauge.IsPhoenixReady}");
|
||||
ImGui.Text($"{nameof(gauge.IsBahamutReady)}: {gauge.IsBahamutReady}");
|
||||
ImGui.Text($"{nameof(gauge.HasAetherflowStacks)}: {gauge.HasAetherflowStacks}");
|
||||
}
|
||||
else if (jobID == 28)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<SCHGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.Aetherflow)}: {gauge.Aetherflow}");
|
||||
ImGui.Text($"{nameof(gauge.FairyGauge)}: {gauge.FairyGauge}");
|
||||
ImGui.Text($"{nameof(gauge.SeraphTimer)}: {gauge.SeraphTimer}");
|
||||
ImGui.Text($"{nameof(gauge.DismissedFairy)}: {gauge.DismissedFairy}");
|
||||
}
|
||||
else if (jobID == 30)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<NINGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.HutonTimer)}: {gauge.HutonTimer}");
|
||||
ImGui.Text($"{nameof(gauge.Ninki)}: {gauge.Ninki}");
|
||||
ImGui.Text($"{nameof(gauge.HutonManualCasts)}: {gauge.HutonManualCasts}");
|
||||
}
|
||||
else if (jobID == 31)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<MCHGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.OverheatTimeRemaining)}: {gauge.OverheatTimeRemaining}");
|
||||
ImGui.Text($"{nameof(gauge.SummonTimeRemaining)}: {gauge.SummonTimeRemaining}");
|
||||
ImGui.Text($"{nameof(gauge.Heat)}: {gauge.Heat}");
|
||||
ImGui.Text($"{nameof(gauge.Battery)}: {gauge.Battery}");
|
||||
ImGui.Text($"{nameof(gauge.LastSummonBatteryPower)}: {gauge.LastSummonBatteryPower}");
|
||||
ImGui.Text($"{nameof(gauge.IsOverheated)}: {gauge.IsOverheated}");
|
||||
ImGui.Text($"{nameof(gauge.IsRobotActive)}: {gauge.IsRobotActive}");
|
||||
}
|
||||
else if (jobID == 32)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<DRKGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.Blood)}: {gauge.Blood}");
|
||||
ImGui.Text($"{nameof(gauge.DarksideTimeRemaining)}: {gauge.DarksideTimeRemaining}");
|
||||
ImGui.Text($"{nameof(gauge.ShadowTimeRemaining)}: {gauge.ShadowTimeRemaining}");
|
||||
ImGui.Text($"{nameof(gauge.HasDarkArts)}: {gauge.HasDarkArts}");
|
||||
}
|
||||
else if (jobID == 33)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<ASTGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.DrawnCard)}: {gauge.DrawnCard}");
|
||||
foreach (var seal in Enum.GetValues(typeof(SealType)).Cast<SealType>())
|
||||
{
|
||||
var sealName = Enum.GetName(typeof(SealType), seal);
|
||||
ImGui.Text($"{nameof(gauge.ContainsSeal)}({sealName}): {gauge.ContainsSeal(seal)}");
|
||||
}
|
||||
}
|
||||
else if (jobID == 34)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<SAMGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.Kenki)}: {gauge.Kenki}");
|
||||
ImGui.Text($"{nameof(gauge.MeditationStacks)}: {gauge.MeditationStacks}");
|
||||
ImGui.Text($"{nameof(gauge.Sen)}: {gauge.Sen}");
|
||||
ImGui.Text($"{nameof(gauge.HasSetsu)}: {gauge.HasSetsu}");
|
||||
ImGui.Text($"{nameof(gauge.HasGetsu)}: {gauge.HasGetsu}");
|
||||
ImGui.Text($"{nameof(gauge.HasKa)}: {gauge.HasKa}");
|
||||
}
|
||||
else if (jobID == 35)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<RDMGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.WhiteMana)}: {gauge.WhiteMana}");
|
||||
ImGui.Text($"{nameof(gauge.BlackMana)}: {gauge.BlackMana}");
|
||||
}
|
||||
else if (jobID == 37)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<GNBGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.Ammo)}: {gauge.Ammo}");
|
||||
ImGui.Text($"{nameof(gauge.MaxTimerDuration)}: {gauge.MaxTimerDuration}");
|
||||
ImGui.Text($"{nameof(gauge.AmmoComboStep)}: {gauge.AmmoComboStep}");
|
||||
}
|
||||
else if (jobID == 38)
|
||||
{
|
||||
var gauge = this.dalamud.ClientState.JobGauges.Get<DNCGauge>();
|
||||
ImGui.Text($"Address: 0x{gauge.Address.ToInt64():X}");
|
||||
ImGui.Text($"{nameof(gauge.Feathers)}: {gauge.Feathers}");
|
||||
ImGui.Text($"{nameof(gauge.Esprit)}: {gauge.Esprit}");
|
||||
ImGui.Text($"{nameof(gauge.CompletedSteps)}: {gauge.CompletedSteps}");
|
||||
ImGui.Text($"{nameof(gauge.NextStep)}: {gauge.NextStep}");
|
||||
ImGui.Text($"{nameof(gauge.IsDancing)}: {gauge.IsDancing}");
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui.Text("No supported gauge exists for this job.");
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawCommand()
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit cbbea8ea911dda876d4a996f214f337e4db88a01
|
||||
Subproject commit 74556bdfe469ed66ba77d613186a0c3d6eeda88d
|
||||
Loading…
Add table
Add a link
Reference in a new issue