using System.Collections.Generic; using Dalamud.Plugin.Services; using FFXIVClientStructs.FFXIV.Client.Game.UI; using Lumina.Excel; using Lumina.Excel.Sheets; namespace Questionable.Controller.DebugCommands; internal sealed class TaxiCommandHandler : IDebugCommandHandler { private readonly IDataManager _dataManager; private readonly IClientState _clientState; private readonly IChatGui _chatGui; public string CommandName => "taxi"; public TaxiCommandHandler(IDataManager dataManager, IClientState clientState, IChatGui chatGui) { _dataManager = dataManager; _clientState = clientState; _chatGui = chatGui; } public unsafe void Execute(string[] arguments) { List list = new List(); ExcelSheet excelSheet = _dataManager.GetExcelSheet(); UIState* ptr = UIState.Instance(); if (ptr == null) { _chatGui.PrintError("UIState is null", "Questionable", 576); return; } for (int i = 0; i < 192; i++) { uint num = (uint)(i + 1179648); try { if (excelSheet.HasRow(num) && ptr->IsChocoboTaxiStandUnlocked(num)) { string value = excelSheet.GetRow(num).PlaceName.ToString(); if (string.IsNullOrEmpty(value)) { value = "Unknown"; } list.Add($"{value} (ID: {i}, Row: 0x{num:X})"); } } catch { } } _chatGui.Print($"Unlocked taxi stands ({list.Count}):", "Questionable", 576); if (list.Count == 0) { _chatGui.Print(" (No unlocked taxi stands found)", "Questionable", 576); return; } foreach (string item in list) { _chatGui.Print(" - " + item, "Questionable", 576); } } }