public static void DrawArrayDataTable(NumberArrayData *array) { if (ImGui.BeginTable("numbersTable", 6, ImGuiTableFlags.Borders | ImGuiTableFlags.RowBg)) { ImGui.TableSetupColumn("#", ImGuiTableColumnFlags.WidthFixed, 50); ImGui.TableSetupColumn("Integer"); ImGui.TableSetupColumn("Shorts"); ImGui.TableSetupColumn("Bytes"); ImGui.TableSetupColumn("Hex"); ImGui.TableSetupColumn("Float"); ImGui.TableHeadersRow(); for (var i = 0; i < array->AtkArrayData.Size; i++) { ImGui.TableNextColumn(); DebugManager.ClickToCopyText($"{i.ToString().PadLeft(array->AtkArrayData.Size.ToString().Length, '0')}", $"{(ulong)&array->IntArray[i]:X}"); ImGui.TableNextColumn(); ImGui.Text($"{array->IntArray[i]}"); ImGui.TableNextColumn(); { var a = (short *)&array->IntArray[i]; var w = ImGui.GetContentRegionAvail().X; var bX = ImGui.GetCursorPosX(); for (var bi = 0; bi < 2; bi++) { ImGui.SetCursorPosX(bX + (w / 2) * bi); ImGui.Text(ImGui.GetIO().KeyShift ? $"{a[bi]:X4}" : $"{a[bi]}"); if (bi != 1) { ImGui.SameLine(); } } } ImGui.TableNextColumn(); { var a = (byte *)&array->IntArray[i]; var w = ImGui.GetContentRegionAvail().X; var bX = ImGui.GetCursorPosX(); for (var bi = 0; bi < 4; bi++) { ImGui.SetCursorPosX(bX + (w / 4) * bi); ImGui.Text(ImGui.GetIO().KeyShift ? $"{a[bi]:X2}" : $"{a[bi]}"); if (bi != 3) { ImGui.SameLine(); } } } ImGui.TableNextColumn(); var hexText = $"{array->IntArray[i]:X}"; ImGui.PushStyleVar(ImGuiStyleVar.ItemSpacing, Vector2.Zero); ImGui.TextDisabled("00000000"[..(8 - hexText.Length)]);
public override void Draw() { DebugManager.ClickToCopyText($"{Common.InventoryManagerAddress.ToInt64():X}"); if (ImGui.BeginTabBar("inventoryDebuggingTabs")) { if (ImGui.BeginTabItem("Container/Slot")) { ImGui.PushItemWidth(200); if (ImGui.BeginCombo("###containerSelect", $"{inventoryType} [{(int)inventoryType}]")) { foreach (var i in (InventoryType[])Enum.GetValues(typeof(InventoryType))) { if (ImGui.Selectable($"{i} [{(int) i}]##inventoryTypeSelect", i == inventoryType)) { inventoryType = i; } } ImGui.EndCombo(); } var container = Common.GetContainer(inventoryType); ImGui.PopItemWidth(); if (container != null) { ImGui.Text($"Container Address:"); ImGui.SameLine(); DebugManager.ClickToCopyText($"{(ulong)container:X}"); ImGui.SameLine(); DebugManager.PrintOutObject(*container, (ulong)container, new List <string>()); if (ImGui.TreeNode("Items##containerItems")) { for (var i = 0; i < container->SlotCount; i++) { var item = container->Items[i]; var itemAddr = ((ulong)container->Items) + (ulong)sizeof(InventoryItem) * (ulong)i; DebugManager.ClickToCopyText($"{itemAddr:X}"); ImGui.SameLine(); DebugManager.PrintOutObject(item, (ulong)&item, new List <string> { $"Items[{i}]" }, false, $"[{i:00}] {item.Item?.Name ?? "<Not Found>"}"); } ImGui.TreePop(); } } else { ImGui.Text("Container not found."); } ImGui.EndTabItem(); } ImGui.EndTabBar(); } }
public override void Draw() { var framework = Framework.Instance(); var serverTime = Framework.GetServerTime(); ImGui.Text($"Server Time: {serverTime}"); DebugManager.ClickToCopyText($"{(ulong)framework:X}"); ImGui.SameLine(); DebugManager.PrintOutObject(framework); }
public override void Draw() { if (groupManager == null) { groupManager = (GroupManager *)Service.SigScanner.GetStaticAddressFromSig("48 8D 0D ?? ?? ?? ?? 44 8B E7"); } DebugManager.ClickToCopyText($"{(ulong) groupManager:X}"); ImGui.SameLine(); DebugManager.PrintOutObject(*groupManager, (ulong)groupManager, new List <string>()); if (groupManager->MemberCount < 1) { ImGui.Text("Not in a party"); } else { ImGui.Text($"Party Member Count: {groupManager->MemberCount}"); var partyMembers = (PartyMember *)groupManager->PartyMembers; for (var i = 0; i < 8 && i < groupManager->MemberCount; i++) { var partyMember = partyMembers[i]; var name = Marshal.PtrToStringAnsi(new IntPtr(partyMember.Name)); ImGui.Text($"[{(ulong)&partyMember:X}] Lv {partyMember.Level}, {partyMember.ObjectID:X}, {name}"); PlayerCharacter chara = null; for (var a = 0; a < Service.Objects.Length; a += 2) { var actor = Service.Objects[a]; if (actor == null) { continue; } if ((uint)actor.ObjectId == partyMember.ObjectID && actor is PlayerCharacter pc) { chara = pc; } } if (chara != null) { DebugManager.PrintOutObject(chara, (ulong)chara.Address.ToInt64(), new List <string>()); } } } }
public override void Draw() { var retainerManager = RetainerManager.Instance(); ImGui.Text("Retainer Manager: "); ImGui.SameLine(); DebugManager.ClickToCopyText($"{(ulong)retainerManager:X}"); if (retainerManager == null) { return; } ImGui.Separator(); for (var i = 0; i < 10; i++) { ImGui.Text($"{retainerManager->DisplayOrder[i]}"); } ImGui.Separator(); DebugManager.PrintOutObject(retainerManager); }
private void DrawHotbar(RaptureHotbarModule *hotbarModule, HotBar *hotbar) { ImGui.Columns(8); ImGuiExt.SetColumnWidths(35); ImGui.Text($"##"); ImGui.NextColumn(); ImGui.Text("Command"); ImGui.NextColumn(); ImGui.Text("Icon"); ImGui.NextColumn(); ImGui.Text("Name"); ImGui.NextColumn(); ImGui.Text("Cooldown"); ImGui.NextColumn(); ImGuiExt.NextRow(); ImGui.Separator(); ImGui.Separator(); for (var i = 0; i < 16; i++) { var slot = hotbar->Slot[i]; if (slot == null) { break; } if (slot->CommandType == HotbarSlotType.Empty) { ImGui.PushStyleColor(ImGuiCol.Text, slot->CommandType == HotbarSlotType.Empty ? 0x99999999 : 0xFFFFFFFF); DebugManager.ClickToCopyText($"{i+1:00}", $"{(ulong)slot:X}"); ImGui.NextColumn(); ImGui.Text("Empty"); ImGui.PopStyleColor(); ImGuiExt.NextRow(); ImGui.Separator(); continue; } var adjustedId = slot->CommandType == HotbarSlotType.Action ? ActionManager.Instance()->GetAdjustedActionId(slot->CommandId) : slot->CommandId; DebugManager.ClickToCopyText($"{i+1:00}", $"{(ulong)slot:X}"); ImGui.NextColumn(); ImGui.Text($"{slot->CommandType} : {slot->CommandId}"); if (slot->CommandType == HotbarSlotType.Action) { ImGui.Text($"Adjusted: {adjustedId}"); } ImGui.NextColumn(); var iconGood = false; if (slot->Icon >= 0) { var icon = Plugin.IconManager.GetIconTexture(slot->Icon % 1000000, slot->Icon >= 1000000); if (icon != null) { ImGui.Image(icon.ImGuiHandle, new Vector2(32)); iconGood = true; } } if (!iconGood) { ImGui.GetWindowDrawList().AddRect(ImGui.GetCursorScreenPos(), ImGui.GetCursorScreenPos() + new Vector2(32), 0xFF0000FF, 4); ImGui.GetWindowDrawList().AddText(ImGui.GetCursorScreenPos(), 0xFFFFFFFF, $"{slot->Icon}"); ImGui.Dummy(new Vector2(32)); } ImGui.SameLine(); ImGui.Text($"{slot->IconTypeA} : {slot->IconA}\n{slot->IconTypeB} : {slot->IconB}"); ImGui.NextColumn(); switch (slot->CommandType) { case HotbarSlotType.Empty: { break; } case HotbarSlotType.Action: { var action = Service.Data.Excel.GetSheet <Action>().GetRow(slot->CommandId); if (action == null) { ImGui.TextDisabled("Not Found"); } else { ImGui.TextWrapped($"{action.Name}"); } break; } case HotbarSlotType.Item: { var item = Service.Data.GetExcelSheet <Item>().GetRow(slot->CommandId % 500000); if (item == null) { ImGui.TextDisabled("Not Found"); } else { ImGui.TextWrapped($"{item.Name}"); } break; } case HotbarSlotType.CraftAction: { var action = Service.Data.GetExcelSheet <CraftAction>().GetRow(slot->CommandId); if (action == null) { ImGui.TextDisabled("Not Found"); } else { ImGui.TextWrapped($"{action.Name}"); } break; } case HotbarSlotType.GeneralAction: { var action = Service.Data.GetExcelSheet <GeneralAction>().GetRow(slot->CommandId); if (action == null) { ImGui.TextDisabled("Not Found"); } else { ImGui.TextWrapped($"{action.Name}"); } break; } case HotbarSlotType.MainCommand: { var action = Service.Data.GetExcelSheet <MainCommand>().GetRow(slot->CommandId); if (action == null) { ImGui.TextDisabled("Not Found"); } else { ImGui.TextWrapped($"{action.Name}"); } break; } case HotbarSlotType.ExtraCommand: { var rawSheet = Service.Data.Excel.GetSheetRaw("ExtraCommand"); var parser = rawSheet.GetRowParser(slot->CommandId); var name = parser.ReadColumn <SeString>(0); ImGui.Text($"{name}"); break; } case HotbarSlotType.GearSet: { var gearsetModule = RaptureGearsetModule.Instance(); var gearset = gearsetModule->Gearset[(int)slot->CommandId]; ImGui.Text($"{Encoding.UTF8.GetString(gearset->Name, 0x2F)}"); break; } case HotbarSlotType.Macro: { ImGui.Text($"{(slot->CommandId >= 256 ? "Shared" : "Individual")} #{slot->CommandId%256}"); break; } case HotbarSlotType.Emote: { ImGui.Text($"{Service.Data.Excel.GetSheet<Emote>().GetRow(slot->CommandId)?.Name ?? "Invalid"}"); break; } case HotbarSlotType.EventItem: { var item = Service.Data.GetExcelSheet <EventItem>().GetRow(slot->CommandId); if (item == null) { ImGui.TextDisabled("Not Found"); } else { ImGui.TextWrapped($"{item.Name}"); } break; } case HotbarSlotType.Mount: { var m = Service.Data.Excel.GetSheet <Mount>().GetRow(slot->CommandId); if (m == null) { ImGui.TextDisabled("Not Found"); } else { ImGui.TextWrapped($"{m.Singular}"); } break; } case HotbarSlotType.Minion: { var m = Service.Data.Excel.GetSheet <Companion>().GetRow(slot->CommandId); if (m == null) { ImGui.TextDisabled("Not Found"); } else { ImGui.TextWrapped($"{m.Singular}"); } break; } default: { ImGui.TextDisabled("Name Not Supprorted"); break; } } ImGui.NextColumn(); var cooldownGroup = -1; switch (slot->CommandType) { case HotbarSlotType.Action: { var action = Service.Data.Excel.GetSheet <Action>().GetRow((uint)adjustedId); if (action == null) { ImGui.TextDisabled("Not Found"); break; } cooldownGroup = action.CooldownGroup; break; } case HotbarSlotType.Item: { var item = Service.Data.Excel.GetSheet <Item>().GetRow(slot->CommandId); if (item == null) { ImGui.TextDisabled("Not Found"); break; } var cdg = ActionManager.Instance()->GetRecastGroup(2, slot->CommandId); if (cdg < 81) { cooldownGroup = (int)(cdg + 1); } break; } case HotbarSlotType.GeneralAction: { var action = Service.Data.Excel.GetSheet <GeneralAction>().GetRow(slot->CommandId); if (action?.Action == null) { ImGui.TextDisabled("Not Found"); break; } cooldownGroup = ActionManager.Instance()->GetRecastGroup(5, slot->CommandId); break; } } if (cooldownGroup > 0) { ImGui.Text($"Cooldown Group: {cooldownGroup}"); var cooldown = ActionManager.Instance()->GetRecastGroupDetail(cooldownGroup); DebugManager.ClickToCopyText($"{(ulong)cooldown:X}"); if (cooldown != null) { ImGui.Text($"{cooldown->IsActive} / {cooldown->Elapsed} / {cooldown->Total}"); } else { ImGui.Text("Failed"); } } ImGuiExt.NextRow(); ImGui.Separator(); } ImGui.Columns(); }
public override void Draw() { ImGui.Text($"{Name} Debug"); ImGui.Separator(); var raptureHotbarModule = Framework.Instance()->GetUiModule()->GetRaptureHotbarModule(); ImGui.Text("RaptureHotbarModule:"); ImGui.SameLine(); DebugManager.ClickToCopyText($"{(ulong)raptureHotbarModule:X}"); ImGui.SameLine(); ImGui.Text("ActionManager:"); ImGui.SameLine(); DebugManager.ClickToCopyText($"{(ulong)ActionManager.Instance():X}"); ImGui.Separator(); if (ImGui.BeginTabBar("##hotbarDebugDisplay")) { if (ImGui.BeginTabItem("Current Bars")) { if (ImGui.BeginTabBar($"###{GetType().Name}_debug_tabs")) { if (ImGui.BeginTabItem("Normal")) { DrawHotbarType(raptureHotbarModule, HotBarType.Normal); ImGui.EndTabItem(); } if (ImGui.BeginTabItem("Cross")) { DrawHotbarType(raptureHotbarModule, HotBarType.Cross); ImGui.EndTabItem(); } if (ImGui.BeginTabItem("Pet")) { DrawHotbarType(raptureHotbarModule, HotBarType.Pet, "Normal Pet", "Cross Pet"); } ImGui.EndTabBar(); } ImGui.EndTabItem(); } if (ImGui.BeginTabItem("Saved Bars")) { if (ImGui.BeginChild("savedBarsIndexSelect", new Vector2(150, -1) * ImGui.GetIO().FontGlobalScale, true)) { for (byte i = 0; i < 61; i++) { var cj = Service.Data.Excel.GetSheet <ClassJob>()?.GetRow(i)?.Abbreviation?.RawString; if (i > 41) { cj = Service.Data.Excel.GetSheet <ClassJob>()?.Where(j => j.IsLimitedJob == false && j.JobIndex > 0).Skip(i - 42).FirstOrDefault()?.Abbreviation?.RawString; } if (ImGui.Selectable((i > 40 ? "[PVP] " : "") + (i is 0 or 41 ? "Shared" : cj ?? $"{i}"), selectedSavedIndex == i)) { selectedSavedIndex = i; } } } ImGui.EndChild(); ImGui.SameLine(); ImGui.BeginGroup(); var savedBarClassJob = raptureHotbarModule->SavedClassJob[selectedSavedIndex]; if (savedBarClassJob != null && ImGui.BeginTabBar("savedClassJobBarSelectType")) { void ShowBar(int b) { var savedBar = savedBarClassJob->Bar[b]; if (savedBar == null) { ImGui.Text("Bar is Null"); return; } if (ImGui.BeginTable("savedClassJobBarSlots", 3)) { ImGui.TableSetupColumn("Slot", ImGuiTableColumnFlags.WidthFixed, 50); ImGui.TableSetupColumn("Type", ImGuiTableColumnFlags.WidthFixed, 80); ImGui.TableSetupColumn("ID", ImGuiTableColumnFlags.WidthFixed, 100); ImGui.TableHeadersRow(); for (var i = 0; i < 16; i++) { ImGui.TableNextColumn(); ImGui.Text($"{i:00}"); ImGui.TableNextColumn(); var slot = savedBar->Slot[i]; if (slot == null) { ImGui.TableNextRow(); continue; } ImGui.Text($"{slot->Type}"); ImGui.TableNextColumn(); ImGui.Text($"{slot->ID}"); } ImGui.EndTable(); } } if (ImGui.BeginTabItem("Normal")) { if (ImGui.BeginTabBar("savecClassJobBarSelectCross")) { for (var i = 0; i < 10; i++) { if (ImGui.BeginTabItem($"{i + 1:00}")) { ShowBar(i); ImGui.EndTabItem(); } } ImGui.EndTabBar(); } ImGui.EndTabItem(); } if (ImGui.BeginTabItem("Cross")) { if (ImGui.BeginTabBar("savecClassJobBarSelectCross")) { for (var i = 10; i < 18; i++) { if (ImGui.BeginTabItem($"{i-9:00}")) { ShowBar(i); ImGui.EndTabItem(); } } ImGui.EndTabBar(); } ImGui.EndTabItem(); } ImGui.EndTabBar(); } ImGui.EndGroup(); ImGui.EndTabItem(); } ImGui.EndTabBar(); } }
public override void Draw() { var config = Framework.Instance()->GetUiModule()->GetConfigModule(); ImGui.Text("ConfigModule:"); ImGui.SameLine(); DebugManager.ClickToCopyText($"{(ulong) config:X}"); DebugManager.PrintOutObject(config); ImGui.Separator(); if (ImGui.BeginTabBar("ConfigDebugTabs")) { if (ImGui.BeginTabItem("View")) { ImGui.InputText("Search Option", ref searchString, 50); if (ImGui.BeginTable("configViewTable", 5)) { ImGui.TableSetupColumn("ID", ImGuiTableColumnFlags.WidthFixed, 50); ImGui.TableSetupColumn("Option Name", ImGuiTableColumnFlags.WidthFixed); ImGui.TableSetupColumn("Type", ImGuiTableColumnFlags.WidthFixed, 120); ImGui.TableSetupColumn("Value", ImGuiTableColumnFlags.WidthFixed, 120); ImGui.TableSetupColumn("Value2", ImGuiTableColumnFlags.WidthFixed, 120); ImGui.TableHeadersRow(); for (short i = 0; i < 2000; i++) { var c = config->GetOptionById(i); if (c == null) { continue; } if (!string.IsNullOrWhiteSpace(searchString)) { if (!$"{c->OptionID}".Contains(searchString, StringComparison.OrdinalIgnoreCase)) { continue; } } var v = config->GetValue(c->OptionID); ImGui.TableNextColumn(); ImGui.Text($"#{i}"); ImGui.TableNextColumn(); ImGui.Text($"{c->OptionID}"); ImGui.TableNextColumn(); ImGui.Text($"{v->Type}"); ImGui.TableNextColumn(); void PrintValue(AtkValue *atkValue) { switch (atkValue->Type) { case ValueType.Int: ImGui.Text($"{atkValue->Int}"); break; case ValueType.Bool: ImGui.Text($"{atkValue->Byte == 1}"); break; case ValueType.UInt: ImGui.Text($"{atkValue->UInt}"); break; case ValueType.Float: ImGui.Text($"{atkValue->Float}"); break; case ValueType.AllocatedString: case ValueType.String: var str = MemoryHelper.ReadStringNullTerminated(new IntPtr(atkValue->String)); ImGui.Text($"{str}"); break; case ValueType.AllocatedVector: case ValueType.Vector: var vec = atkValue->Vector; foreach (var vecValue in vec->Span) { PrintValue(&vecValue); } break; default: ImGui.Text($"Unknown Value Type: {atkValue->Type}"); break; } } PrintValue(v); ImGui.TableNextColumn(); var intVal = config->GetIntValue(c->OptionID); ImGui.Text($"{intVal}"); } ImGui.EndTable(); } ImGui.EndTabItem(); } if (ImGui.BeginTabItem("Changes")) { var e = setOptionHook is { IsEnabled : true }; if (ImGui.Checkbox("Enable Config Change Logging", ref e)) { if (e) { setOptionHook ??= Common.Hook <SetOption>("E8 ?? ?? ?? ?? C6 47 4D 00", SetOptionDetour); setOptionHook?.Enable(); } else { setOptionHook?.Disable(); } } ImGui.Separator(); foreach (var change in changes) { ImGui.Text($"[#{change.Index}] {change.Option} ({(short)change.Option}) => {change.Value} [{change.a4}, {change.a5}, {change.a6}]"); } ImGui.EndTabItem(); } ImGui.EndTabBar(); } }
public override void Draw() { var raptureGearsetModule = RaptureGearsetModule.Instance(); ImGui.Text("RaptureGearsetModule:"); ImGui.SameLine(); DebugManager.ClickToCopyText($"{(ulong)raptureGearsetModule:X}"); ImGui.SameLine(); ImGui.Text($"{Encoding.ASCII.GetString(raptureGearsetModule->ModuleName, 15)}"); ImGui.Columns(6); ImGui.Text($"##"); ImGuiExt.SetColumnWidths(35f, 120); ImGui.NextColumn(); ImGui.Text("Address"); ImGui.NextColumn(); ImGui.Text("Name"); ImGui.NextColumn(); ImGui.Text("Items"); ImGui.NextColumn(); ImGui.Text("Flags"); ImGuiExt.NextRow(); ImGuiExt.NextRow(); ImGui.Separator(); ImGui.Separator(); for (var i = 0; i < 101; i++) { var gearset = raptureGearsetModule->Gearset[i]; if (gearset->ID != i) { break; } if (!gearset->Flags.HasFlag(RaptureGearsetModule.GearsetFlag.Exists)) { continue; } ImGui.Text($"{gearset->ID:00}"); ImGui.NextColumn(); DebugManager.ClickToCopyText($"{(ulong) gearset:X}"); ImGui.NextColumn(); ImGui.Text(Encoding.UTF8.GetString(gearset->Name, 0x2F)); ImGui.NextColumn(); ImGui.Text("MainHand"); ImGui.SameLine(); ImGui.Text($"[{gearset->MainHand.ItemID}]"); ImGui.Text("OffHand"); ImGui.SameLine(); ImGui.Text($"[{gearset->OffHand.ItemID}]"); ImGui.Text("Head"); ImGui.SameLine(); ImGui.Text($"[{gearset->Head.ItemID}]"); ImGui.Text("Body"); ImGui.SameLine(); ImGui.Text($"[{gearset->Body.ItemID}]"); ImGui.Text("Hands"); ImGui.SameLine(); ImGui.Text($"[{gearset->Hands.ItemID}]"); ImGui.Text("Belt"); ImGui.SameLine(); ImGui.Text($"[{gearset->Belt.ItemID}]"); ImGui.Text("Legs"); ImGui.SameLine(); ImGui.Text($"[{gearset->Legs.ItemID}]"); ImGui.Text("Feet"); ImGui.SameLine(); ImGui.Text($"[{gearset->Feet.ItemID}]"); ImGui.Text("Ears"); ImGui.SameLine(); ImGui.Text($"[{gearset->Ears.ItemID}]"); ImGui.Text("Neck"); ImGui.SameLine(); ImGui.Text($"[{gearset->Neck.ItemID}]"); ImGui.Text("Wrists"); ImGui.SameLine(); ImGui.Text($"[{gearset->Wrists.ItemID}]"); ImGui.Text("RingRight"); ImGui.SameLine(); ImGui.Text($"[{gearset->RingRight.ItemID}]"); ImGui.Text("SoulStone"); ImGui.SameLine(); ImGui.Text($"[{gearset->SoulStone.ItemID}]"); ImGui.NextColumn(); foreach (RaptureGearsetModule.GearsetFlag r in Enum.GetValues(typeof(RaptureGearsetModule.GearsetFlag))) { if (gearset->Flags.HasFlag(r)) { ImGui.Text(r.ToString()); } } ImGuiExt.NextRow(); ImGuiExt.NextRow(); ImGui.Separator(); } ImGui.Columns(); }