diff --git a/Dalamud/GlobalSuppressions.cs b/Dalamud/GlobalSuppressions.cs
index 94022876c..8dc2d85d2 100644
--- a/Dalamud/GlobalSuppressions.cs
+++ b/Dalamud/GlobalSuppressions.cs
@@ -9,3 +9,4 @@ using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("StyleCop.CSharp.LayoutRules", "SA1503:Braces should not be omitted", Justification = "This is annoying", Scope = "namespaceanddescendants", Target = "~N:Dalamud")]
[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1127:Generic type constraints should be on their own line", Justification = "I like this better", Scope = "namespaceanddescendants", Target = "~N:Dalamud")]
[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1633:File should have header", Justification = "We don't do those yet")]
+[assembly: SuppressMessage("StyleCop.CSharp.ReadabilityRules", "SA1118:Parameter should not span multiple lines", Justification = "Preventing long lines", Scope = "namespaceanddescendants", Target = "~N:Dalamud")]
diff --git a/Dalamud/Interface/DalamudDataWindow.cs b/Dalamud/Interface/DalamudDataWindow.cs
index 750a17982..5c4156ca0 100644
--- a/Dalamud/Interface/DalamudDataWindow.cs
+++ b/Dalamud/Interface/DalamudDataWindow.cs
@@ -2,8 +2,8 @@ using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
-using System.Net.Mime;
using System.Numerics;
+
using Dalamud.Game.Chat;
using Dalamud.Game.ClientState;
using Dalamud.Game.ClientState.Actors.Types;
@@ -13,15 +13,17 @@ using Dalamud.Game.Internal;
using Dalamud.Game.Internal.Gui.Addon;
using Dalamud.Plugin;
using ImGuiNET;
-using JetBrains.Annotations;
using Newtonsoft.Json;
using Serilog;
-using SharpDX.Direct3D11;
namespace Dalamud.Interface
{
- class DalamudDataWindow {
- private Dalamud dalamud;
+ ///
+ /// Class responsible for drawing the data/debug window.
+ ///
+ internal class DalamudDataWindow
+ {
+ private readonly Dalamud dalamud;
private bool wasReady;
private string serverOpString;
@@ -38,45 +40,55 @@ namespace Dalamud.Interface
private int inputAddonIndex;
private Addon resultAddon;
+ private IntPtr findAgentInterfacePtr;
+
private bool resolveGameData = false;
- private UIDebug UIDebug = null;
+ private UIDebug addonInspector = null;
private uint copyButtonIndex = 0;
-
- public DalamudDataWindow(Dalamud dalamud) {
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The Dalamud instance to access data of.
+ public DalamudDataWindow(Dalamud dalamud)
+ {
this.dalamud = dalamud;
- Load();
+ this.Load();
}
- private void Load() {
- if (this.dalamud.Data.IsDataReady)
- {
- this.serverOpString = JsonConvert.SerializeObject(this.dalamud.Data.ServerOpCodes, Formatting.Indented);
- this.wasReady = true;
- }
- }
-
- public bool Draw() {
+ ///
+ /// Draw the window via ImGui.
+ ///
+ /// Whether or not the window is open.
+ public bool Draw()
+ {
this.copyButtonIndex = 0;
ImGui.SetNextWindowSize(new Vector2(500, 500), ImGuiCond.FirstUseEver);
var isOpen = true;
- if (!ImGui.Begin("Dalamud Data", ref isOpen)) {
- ImGui.End();
- return false;
- }
+ ImGui.Begin("Dalamud Data", ref isOpen);
// Main window
if (ImGui.Button("Force Reload"))
- Load();
+ this.Load();
ImGui.SameLine();
var copy = ImGui.Button("Copy all");
ImGui.SameLine();
- ImGui.Combo("Data kind", ref this.currentKind, new[] {"ServerOpCode", "Address", "Actor Table", "Font Test", "Party List", "Plugin IPC", "Condition", "Gauge", "Command", "Addon", "Addon Inspector", "StartInfo", "Target" },
- 13);
+
+ ImGui.Combo(
+ "Data kind",
+ ref this.currentKind,
+ new[]
+ {
+ "ServerOpCode", "Address", "Actor Table", "Font Test", "Party List", "Plugin IPC", "Condition",
+ "Gauge", "Command", "Addon", "Addon Inspector", "StartInfo", "Target",
+ },
+ 13);
+
ImGui.Checkbox("Resolve GameData", ref this.resolveGameData);
ImGui.BeginChild("scrolling", new Vector2(0, 0), false, ImGuiWindowFlags.HorizontalScrollbar);
@@ -86,121 +98,68 @@ namespace Dalamud.Interface
ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, new Vector2(0, 0));
- try {
+ try
+ {
if (this.wasReady)
- switch (this.currentKind) {
+ {
+ switch (this.currentKind)
+ {
case 0:
ImGui.TextUnformatted(this.serverOpString);
break;
case 1:
ImGui.InputText(".text sig", ref this.inputSig, 400);
- if (ImGui.Button("Resolve")) {
- try {
+ if (ImGui.Button("Resolve"))
+ {
+ try
+ {
this.sigResult = this.dalamud.SigScanner.ScanText(this.inputSig);
- } catch (KeyNotFoundException) {
+ }
+ catch (KeyNotFoundException)
+ {
this.sigResult = new IntPtr(-1);
}
}
+
ImGui.Text($"Result: {this.sigResult.ToInt64():X}");
ImGui.SameLine();
- if (ImGui.Button($"C{this.copyButtonIndex++}")) {
+ if (ImGui.Button($"C{this.copyButtonIndex++}"))
ImGui.SetClipboardText(this.sigResult.ToInt64().ToString("x"));
- }
- foreach (var debugScannedValue in BaseAddressResolver.DebugScannedValues) {
+ foreach (var debugScannedValue in BaseAddressResolver.DebugScannedValues)
+ {
ImGui.TextUnformatted($"{debugScannedValue.Key}");
- foreach (var valueTuple in debugScannedValue.Value) {
+ foreach (var valueTuple in debugScannedValue.Value)
+ {
ImGui.TextUnformatted(
$" {valueTuple.Item1} - 0x{valueTuple.Item2.ToInt64():x}");
ImGui.SameLine();
- if (ImGui.Button($"C##copyAddress{copyButtonIndex++}")) {
+ if (ImGui.Button($"C##copyAddress{this.copyButtonIndex++}"))
ImGui.SetClipboardText(valueTuple.Item2.ToInt64().ToString("x"));
- }
}
}
break;
// AT
- case 2: {
- var stateString = string.Empty;
- // LocalPlayer is null in a number of situations (at least with the current visible-actors list)
- // which would crash here.
- if (this.dalamud.ClientState.Actors.Length == 0) {
- ImGui.TextUnformatted("Data not ready.");
- } else if (this.dalamud.ClientState.LocalPlayer == null) {
- ImGui.TextUnformatted("LocalPlayer null.");
- } else {
- stateString +=
- $"FrameworkBase: {this.dalamud.Framework.Address.BaseAddress.ToInt64():X}\n";
-
- stateString += $"ActorTableLen: {this.dalamud.ClientState.Actors.Length}\n";
- stateString += $"LocalPlayerName: {this.dalamud.ClientState.LocalPlayer.Name}\n";
- stateString +=
- $"CurrentWorldName: {(this.resolveGameData ? this.dalamud.ClientState.LocalPlayer.CurrentWorld.GameData.Name : this.dalamud.ClientState.LocalPlayer.CurrentWorld.Id.ToString())}\n";
- stateString +=
- $"HomeWorldName: {(this.resolveGameData ? this.dalamud.ClientState.LocalPlayer.HomeWorld.GameData.Name : this.dalamud.ClientState.LocalPlayer.HomeWorld.Id.ToString())}\n";
- stateString += $"LocalCID: {this.dalamud.ClientState.LocalContentId:X}\n";
- stateString +=
- $"LastLinkedItem: {this.dalamud.Framework.Gui.Chat.LastLinkedItemId.ToString()}\n";
- stateString += $"TerritoryType: {this.dalamud.ClientState.TerritoryType}\n\n";
-
- ImGui.TextUnformatted(stateString);
-
- ImGui.Checkbox("Draw actors on screen", ref this.drawActors);
- ImGui.SliderFloat("Draw Distance", ref this.maxActorDrawDistance, 2f, 40f);
-
- for (var i = 0; i < this.dalamud.ClientState.Actors.Length; i++) {
- var actor = this.dalamud.ClientState.Actors[i];
-
- if (actor == null)
- continue;
-
- PrintActor(actor, i.ToString());
-
- if (this.drawActors &&
- this.dalamud.Framework.Gui.WorldToScreen(actor.Position, out var screenCoords)
- ) {
- ImGui.PushID("ActorWindow" + i);
- ImGui.SetNextWindowPos(new Vector2(screenCoords.X, screenCoords.Y));
-
- if (actor.YalmDistanceX > this.maxActorDrawDistance)
- continue;
-
- ImGui.SetNextWindowBgAlpha(
- Math.Max(1f - (actor.YalmDistanceX / this.maxActorDrawDistance), 0.2f));
- if (ImGui.Begin("Actor" + i,
- ImGuiWindowFlags.NoDecoration |
- ImGuiWindowFlags.AlwaysAutoResize |
- ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoMove |
- ImGuiWindowFlags.NoMouseInputs |
- ImGuiWindowFlags.NoFocusOnAppearing | ImGuiWindowFlags.NoNav)) {
- ImGui.Text(
- $"{actor.Address.ToInt64():X}:{actor.ActorId:X}[{i}] - {actor.ObjectKind} - {actor.Name}");
- ImGui.End();
- }
-
- ImGui.PopID();
- }
- }
- }
- }
+ case 2:
+ this.DrawActorTable();
break;
// Font
case 3:
var specialChars = string.Empty;
- for (var i = 0xE020; i <= 0xE0DB; i++) {
- specialChars += $"0x{i:X} - {(SeIconChar) i} - {(char) i}\n";
- }
+ for (var i = 0xE020; i <= 0xE0DB; i++)
+ specialChars += $"0x{i:X} - {(SeIconChar)i} - {(char)i}\n";
ImGui.TextUnformatted(specialChars);
foreach (var fontAwesomeIcon in Enum.GetValues(typeof(FontAwesomeIcon))
- .Cast()) {
- ImGui.Text(((int) fontAwesomeIcon.ToIconChar()).ToString("X") + " - ");
+ .Cast())
+ {
+ ImGui.Text(((int)fontAwesomeIcon.ToIconChar()).ToString("X") + " - ");
ImGui.SameLine();
ImGui.PushFont(InterfaceManager.IconFont);
@@ -214,14 +173,18 @@ namespace Dalamud.Interface
case 4:
var partyString = string.Empty;
- if (this.dalamud.ClientState.PartyList.Length == 0) {
+ if (this.dalamud.ClientState.PartyList.Length == 0)
+ {
ImGui.TextUnformatted("Data not ready.");
- } else {
-
+ }
+ else
+ {
partyString += $"{this.dalamud.ClientState.PartyList.Count} Members\n";
- for (var i = 0; i < this.dalamud.ClientState.PartyList.Count; i++) {
+ for (var i = 0; i < this.dalamud.ClientState.PartyList.Count; i++)
+ {
var member = this.dalamud.ClientState.PartyList[i];
- if (member == null) {
+ if (member == null)
+ {
partyString +=
$"[{i}] was null\n";
continue;
@@ -238,43 +201,7 @@ namespace Dalamud.Interface
// Subscriptions
case 5:
- var i1 = new DalamudPluginInterface(this.dalamud, "DalamudTestSub", null,
- PluginLoadReason.Boot);
- var i2 = new DalamudPluginInterface(this.dalamud, "DalamudTestPub", null,
- PluginLoadReason.Boot);
-
- if (ImGui.Button("Add test sub"))
- i1.Subscribe("DalamudTestPub", o => {
- dynamic msg = o;
- Log.Debug(msg.Expand);
- });
-
- if (ImGui.Button("Add test sub any"))
- i1.SubscribeAny((o, a) => {
- dynamic msg = a;
- Log.Debug($"From {o}: {msg.Expand}");
- });
-
- if (ImGui.Button("Remove test sub")) i1.Unsubscribe("DalamudTestPub");
-
- if (ImGui.Button("Remove test sub any")) i1.UnsubscribeAny();
-
- if (ImGui.Button("Send test message")) {
- dynamic testMsg = new ExpandoObject();
- testMsg.Expand = "dong";
- i2.SendMessage(testMsg);
- }
-
- // This doesn't actually work, so don't mind it - impl relies on plugins being registered in PluginManager
- if (ImGui.Button("Send test message any")) {
- dynamic testMsg = new ExpandoObject();
- testMsg.Expand = "dong";
- i2.SendMessage("DalamudTestSub", testMsg);
- }
-
- foreach (var sub in this.dalamud.PluginManager.IpcSubscriptions) {
- ImGui.Text($"Source:{sub.SourcePluginName} Sub:{sub.SubPluginName}");
- }
+ this.DrawIpcDebug();
break;
@@ -289,22 +216,20 @@ namespace Dalamud.Interface
var didAny = false;
- for (var i = 0; i < Condition.MaxConditionEntries; i++) {
- var typedCondition = (ConditionFlag) i;
+ for (var i = 0; i < Condition.MaxConditionEntries; i++)
+ {
+ var typedCondition = (ConditionFlag)i;
var cond = this.dalamud.ClientState.Condition[typedCondition];
- if (!cond) {
- continue;
- }
+ if (!cond) continue;
didAny = true;
ImGui.Text($"ID: {i} Enum: {typedCondition}");
}
- if (!didAny) {
+ if (!didAny)
ImGui.Text("None. Talk to a shop NPC or visit a market board to find out more!!!!!!!");
- }
break;
@@ -317,57 +242,21 @@ namespace Dalamud.Interface
// Command
case 8:
- foreach (var command in this.dalamud.CommandManager.Commands) {
- ImGui.Text(
- $"{command.Key}\n -> {command.Value.HelpMessage}\n -> In help: {command.Value.ShowInHelp}\n\n");
- }
+ foreach (var command in this.dalamud.CommandManager.Commands)
+ ImGui.Text($"{command.Key}\n -> {command.Value.HelpMessage}\n -> In help: {command.Value.ShowInHelp}\n\n");
break;
// Addon
case 9:
- ImGui.InputText("Addon name", ref this.inputAddonName, 256);
- ImGui.InputInt("Addon Index", ref this.inputAddonIndex);
-
- if (ImGui.Button("Get Addon")) {
- this.resultAddon =
- this.dalamud.Framework.Gui.GetAddonByName(
- this.inputAddonName, this.inputAddonIndex);
- }
-
- if (ImGui.Button("Find Agent")) {
- this.findAgentInterfacePtr = FindAgentInterface(this.inputAddonName);
- }
-
- if (this.resultAddon != null) {
- ImGui.TextUnformatted(
- $"{this.resultAddon.Name} - 0x{this.resultAddon.Address.ToInt64():x}\n v:{this.resultAddon.Visible} x:{this.resultAddon.X} y:{this.resultAddon.Y} s:{this.resultAddon.Scale}, w:{this.resultAddon.Width}, h:{this.resultAddon.Height}");
- }
-
- if (this.findAgentInterfacePtr != IntPtr.Zero) {
- ImGui.TextUnformatted(
- $"Agent: 0x{this.findAgentInterfacePtr.ToInt64():x}");
- ImGui.SameLine();
-
- if (ImGui.Button("C"))
- {
- ImGui.SetClipboardText(this.findAgentInterfacePtr.ToInt64().ToString("x"));
- }
- }
-
- if (ImGui.Button("Get Base UI object")) {
- var addr = this.dalamud.Framework.Gui.GetBaseUIObject().ToInt64().ToString("x");
- Log.Information("{0}", addr);
- ImGui.SetClipboardText(addr);
- }
-
+ this.DrawAddonDebug();
break;
// Addon Inspector
case 10:
{
- this.UIDebug ??= new UIDebug(this.dalamud);
- this.UIDebug.Draw();
+ this.addonInspector ??= new UIDebug(this.dalamud);
+ this.addonInspector.Draw();
break;
}
@@ -378,44 +267,17 @@ namespace Dalamud.Interface
// Target
case 12:
- var targetMgr = this.dalamud.ClientState.Targets;
-
- if (targetMgr.CurrentTarget != null)
- PrintActor(targetMgr.CurrentTarget, "CurrentTarget");
-
- if (targetMgr.FocusTarget != null)
- PrintActor(targetMgr.FocusTarget, "FocusTarget");
-
- if (targetMgr.MouseOverTarget != null)
- PrintActor(targetMgr.MouseOverTarget, "MouseOverTarget");
-
- if (targetMgr.PreviousTarget != null)
- PrintActor(targetMgr.PreviousTarget, "PreviousTarget");
-
- if (ImGui.Button("Clear CT"))
- targetMgr.ClearCurrentTarget();
-
- if (ImGui.Button("Clear FT"))
- targetMgr.ClearFocusTarget();
-
- var localPlayer = this.dalamud.ClientState.LocalPlayer;
-
- if (localPlayer != null)
- {
- if (ImGui.Button("Set CT"))
- targetMgr.SetCurrentTarget(localPlayer);
-
- if (ImGui.Button("Set FT"))
- targetMgr.SetFocusTarget(localPlayer);
- } else {
- ImGui.Text("LocalPlayer is null.");
- }
-
+ this.DrawTargetDebug();
break;
}
+ }
else
+ {
ImGui.TextUnformatted("Data not ready.");
- } catch (Exception ex) {
+ }
+ }
+ catch (Exception ex)
+ {
ImGui.TextUnformatted(ex.ToString());
}
@@ -427,7 +289,211 @@ namespace Dalamud.Interface
return isOpen;
}
- private IntPtr findAgentInterfacePtr;
+ private void DrawActorTable()
+ {
+ var stateString = string.Empty;
+
+ // LocalPlayer is null in a number of situations (at least with the current visible-actors list)
+ // which would crash here.
+ if (this.dalamud.ClientState.Actors.Length == 0)
+ {
+ ImGui.TextUnformatted("Data not ready.");
+ }
+ else if (this.dalamud.ClientState.LocalPlayer == null)
+ {
+ ImGui.TextUnformatted("LocalPlayer null.");
+ }
+ else
+ {
+ stateString +=
+ $"FrameworkBase: {this.dalamud.Framework.Address.BaseAddress.ToInt64():X}\n";
+
+ stateString += $"ActorTableLen: {this.dalamud.ClientState.Actors.Length}\n";
+ stateString += $"LocalPlayerName: {this.dalamud.ClientState.LocalPlayer.Name}\n";
+ stateString +=
+ $"CurrentWorldName: {(this.resolveGameData ? this.dalamud.ClientState.LocalPlayer.CurrentWorld.GameData.Name : this.dalamud.ClientState.LocalPlayer.CurrentWorld.Id.ToString())}\n";
+ stateString +=
+ $"HomeWorldName: {(this.resolveGameData ? this.dalamud.ClientState.LocalPlayer.HomeWorld.GameData.Name : this.dalamud.ClientState.LocalPlayer.HomeWorld.Id.ToString())}\n";
+ stateString += $"LocalCID: {this.dalamud.ClientState.LocalContentId:X}\n";
+ stateString +=
+ $"LastLinkedItem: {this.dalamud.Framework.Gui.Chat.LastLinkedItemId.ToString()}\n";
+ stateString += $"TerritoryType: {this.dalamud.ClientState.TerritoryType}\n\n";
+
+ ImGui.TextUnformatted(stateString);
+
+ ImGui.Checkbox("Draw actors on screen", ref this.drawActors);
+ ImGui.SliderFloat("Draw Distance", ref this.maxActorDrawDistance, 2f, 40f);
+
+ for (var i = 0; i < this.dalamud.ClientState.Actors.Length; i++)
+ {
+ var actor = this.dalamud.ClientState.Actors[i];
+
+ if (actor == null)
+ continue;
+
+ this.PrintActor(actor, i.ToString());
+
+ if (this.drawActors &&
+ this.dalamud.Framework.Gui.WorldToScreen(actor.Position, out var screenCoords))
+ {
+ ImGui.PushID("ActorWindow" + i);
+ ImGui.SetNextWindowPos(new Vector2(screenCoords.X, screenCoords.Y));
+
+ if (actor.YalmDistanceX > this.maxActorDrawDistance)
+ continue;
+
+ ImGui.SetNextWindowBgAlpha(
+ Math.Max(1f - (actor.YalmDistanceX / this.maxActorDrawDistance), 0.2f));
+ if (ImGui.Begin(
+ "Actor" + i,
+ ImGuiWindowFlags.NoDecoration |
+ ImGuiWindowFlags.AlwaysAutoResize |
+ ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoMove |
+ ImGuiWindowFlags.NoMouseInputs |
+ ImGuiWindowFlags.NoFocusOnAppearing | ImGuiWindowFlags.NoNav))
+ {
+ ImGui.Text(
+ $"{actor.Address.ToInt64():X}:{actor.ActorId:X}[{i}] - {actor.ObjectKind} - {actor.Name}");
+ ImGui.End();
+ }
+
+ ImGui.PopID();
+ }
+ }
+ }
+ }
+
+ private void DrawIpcDebug()
+ {
+ var i1 = new DalamudPluginInterface(this.dalamud, "DalamudTestSub", null, PluginLoadReason.Boot);
+ var i2 = new DalamudPluginInterface(this.dalamud, "DalamudTestPub", null, PluginLoadReason.Boot);
+
+ if (ImGui.Button("Add test sub"))
+ {
+ i1.Subscribe("DalamudTestPub", o =>
+ {
+ dynamic msg = o;
+ Log.Debug(msg.Expand);
+ });
+ }
+
+ if (ImGui.Button("Add test sub any"))
+ {
+ i1.SubscribeAny((o, a) =>
+ {
+ dynamic msg = a;
+ Log.Debug($"From {o}: {msg.Expand}");
+ });
+ }
+
+ if (ImGui.Button("Remove test sub")) i1.Unsubscribe("DalamudTestPub");
+
+ if (ImGui.Button("Remove test sub any")) i1.UnsubscribeAny();
+
+ if (ImGui.Button("Send test message"))
+ {
+ dynamic testMsg = new ExpandoObject();
+ testMsg.Expand = "dong";
+ i2.SendMessage(testMsg);
+ }
+
+ // This doesn't actually work, so don't mind it - impl relies on plugins being registered in PluginManager
+ if (ImGui.Button("Send test message any"))
+ {
+ dynamic testMsg = new ExpandoObject();
+ testMsg.Expand = "dong";
+ i2.SendMessage("DalamudTestSub", testMsg);
+ }
+
+ foreach (var sub in this.dalamud.PluginManager.IpcSubscriptions)
+ ImGui.Text($"Source:{sub.SourcePluginName} Sub:{sub.SubPluginName}");
+ }
+
+ private void DrawAddonDebug()
+ {
+ ImGui.InputText("Addon name", ref this.inputAddonName, 256);
+ ImGui.InputInt("Addon Index", ref this.inputAddonIndex);
+
+ if (ImGui.Button("Get Addon"))
+ {
+ this.resultAddon =
+ this.dalamud.Framework.Gui.GetAddonByName(
+ this.inputAddonName, this.inputAddonIndex);
+ }
+
+ if (ImGui.Button("Find Agent"))
+ this.findAgentInterfacePtr = this.FindAgentInterface(this.inputAddonName);
+
+ if (this.resultAddon != null)
+ {
+ ImGui.TextUnformatted(
+ $"{this.resultAddon.Name} - 0x{this.resultAddon.Address.ToInt64():x}\n v:{this.resultAddon.Visible} x:{this.resultAddon.X} y:{this.resultAddon.Y} s:{this.resultAddon.Scale}, w:{this.resultAddon.Width}, h:{this.resultAddon.Height}");
+ }
+
+ if (this.findAgentInterfacePtr != IntPtr.Zero)
+ {
+ ImGui.TextUnformatted(
+ $"Agent: 0x{this.findAgentInterfacePtr.ToInt64():x}");
+ ImGui.SameLine();
+
+ if (ImGui.Button("C"))
+ ImGui.SetClipboardText(this.findAgentInterfacePtr.ToInt64().ToString("x"));
+ }
+
+ if (ImGui.Button("Get Base UI object"))
+ {
+ var addr = this.dalamud.Framework.Gui.GetBaseUIObject().ToInt64().ToString("x");
+ Log.Information("{0}", addr);
+ ImGui.SetClipboardText(addr);
+ }
+ }
+
+ private void DrawTargetDebug()
+ {
+ var targetMgr = this.dalamud.ClientState.Targets;
+
+ if (targetMgr.CurrentTarget != null)
+ this.PrintActor(targetMgr.CurrentTarget, "CurrentTarget");
+
+ if (targetMgr.FocusTarget != null)
+ this.PrintActor(targetMgr.FocusTarget, "FocusTarget");
+
+ if (targetMgr.MouseOverTarget != null)
+ this.PrintActor(targetMgr.MouseOverTarget, "MouseOverTarget");
+
+ if (targetMgr.PreviousTarget != null)
+ this.PrintActor(targetMgr.PreviousTarget, "PreviousTarget");
+
+ if (ImGui.Button("Clear CT"))
+ targetMgr.ClearCurrentTarget();
+
+ if (ImGui.Button("Clear FT"))
+ targetMgr.ClearFocusTarget();
+
+ var localPlayer = this.dalamud.ClientState.LocalPlayer;
+
+ if (localPlayer != null)
+ {
+ if (ImGui.Button("Set CT"))
+ targetMgr.SetCurrentTarget(localPlayer);
+
+ if (ImGui.Button("Set FT"))
+ targetMgr.SetFocusTarget(localPlayer);
+ }
+ else
+ {
+ ImGui.Text("LocalPlayer is null.");
+ }
+ }
+
+ private void Load()
+ {
+ if (this.dalamud.Data.IsDataReady)
+ {
+ this.serverOpString = JsonConvert.SerializeObject(this.dalamud.Data.ServerOpCodes, Formatting.Indented);
+ this.wasReady = true;
+ }
+ }
private unsafe IntPtr FindAgentInterface(string addonName)
{
@@ -443,16 +509,18 @@ namespace Dalamud.Interface
var agentModule = uiModule + 0xC3E78;
for (var i = 0; i < 379; i++)
{
- var agent = *(IntPtr*)(agentModule + 0x20 + i * 8);
+ var agent = *(IntPtr*)(agentModule + 0x20 + (i * 8));
if (agent == IntPtr.Zero)
continue;
if (*(short*)(agent + 0x20) == id)
return agent;
}
+
return IntPtr.Zero;
}
- private void PrintActor(Actor actor, string tag) {
+ private void PrintActor(Actor actor, string tag)
+ {
var actorString =
$"{actor.Address.ToInt64():X}:{actor.ActorId:X}[{tag}] - {actor.ObjectKind} - {actor.Name} - X{actor.Position.X} Y{actor.Position.Y} Z{actor.Position.Z} D{actor.YalmDistanceX} R{actor.Rotation} - Target: {actor.TargetActorID:X}\n";
@@ -460,20 +528,23 @@ namespace Dalamud.Interface
actorString += $" DataId: {npc.DataId} NameId:{npc.NameId}\n";
if (actor is Chara chara)
+ {
actorString +=
$" Level: {chara.Level} ClassJob: {(this.resolveGameData ? chara.ClassJob.GameData.Name : chara.ClassJob.Id.ToString())} CHP: {chara.CurrentHp} MHP: {chara.MaxHp} CMP: {chara.CurrentMp} MMP: {chara.MaxMp}\n Customize: {BitConverter.ToString(chara.Customize).Replace("-", " ")}\n";
+ }
if (actor is PlayerCharacter pc)
+ {
actorString +=
$" HomeWorld: {(this.resolveGameData ? pc.HomeWorld.GameData.Name : pc.HomeWorld.Id.ToString())} CurrentWorld: {(this.resolveGameData ? pc.CurrentWorld.GameData.Name : pc.CurrentWorld.Id.ToString())} FC: {pc.CompanyTag}\n";
-
+ }
ImGui.TextUnformatted(actorString);
ImGui.SameLine();
- if (ImGui.Button($"C##{this.copyButtonIndex++}")) {
+ if (ImGui.Button($"C##{this.copyButtonIndex++}"))
+ {
ImGui.SetClipboardText(actor.Address.ToInt64().ToString("X"));
}
-
}
}
}
diff --git a/Dalamud/Interface/DalamudInterface.cs b/Dalamud/Interface/DalamudInterface.cs
index 6afbcffb5..96504ae33 100644
--- a/Dalamud/Interface/DalamudInterface.cs
+++ b/Dalamud/Interface/DalamudInterface.cs
@@ -155,11 +155,6 @@ namespace Dalamud.Interface
this.OpenChangelog();
}
- if (this.dalamud.Fools != null)
- {
- ImGui.MenuItem("Draw Tippy", string.Empty, ref this.dalamud.Fools.IsEnabled);
- }
-
ImGui.MenuItem("Draw ImGui demo", string.Empty, ref this.isImguiDrawDemoWindow);
ImGui.Separator();