using System; using System.Collections.Generic; using Dalamud.Game.Command; using Dalamud.Interface.Windowing; using Dalamud.IoC; using Dalamud.Plugin; using Dalamud.Plugin.Services; namespace Auracite; public sealed class Plugin : IDalamudPlugin { public static IStep? CurrentStep; private readonly WindowSystem WindowSystem = new("Auracite"); private readonly List _steps = [typeof(AppearanceStep), typeof(CurrencyStep), typeof(MiscStep), typeof(PlaytimeStep), typeof(EndStep)]; private int _stepIndex; private readonly StepWindow StepWindow; public class Package { public string playtime; public int height; public int bust_size; public uint gil; public bool is_battle_mentor; public bool is_trade_mentor; public bool is_novice; public bool is_returner; public short player_commendations; } public static Package? package; public Plugin() { CommandManager.AddHandler("/auracite", new CommandInfo(OnAuraciteCommand) { HelpMessage = "Start the server." }); StepWindow = new StepWindow(); WindowSystem.AddWindow(StepWindow); PluginInterface.UiBuilder.Draw += WindowSystem.Draw; } [PluginService] internal static IClientState ClientState { get; private set; } = null!; [PluginService] internal static IDalamudPluginInterface PluginInterface { get; private set; } = null!; [PluginService] internal static IChatGui ChatGui { get; private set; } = null!; [PluginService] internal static ICommandManager CommandManager { get; private set; } = null!; public void Dispose() { CurrentStep?.Dispose(); WindowSystem.RemoveAllWindows(); } private void OnAuraciteCommand(string command, string arguments) { if (arguments == "begin" && CurrentStep == null) { _stepIndex = -1; package = new Package(); NextStep(); StepWindow.IsOpen = true; } } private void NextStep() { _stepIndex++; if (_stepIndex >= _steps.Count) { CurrentStep?.Dispose(); CurrentStep = null; StepWindow.IsOpen = false; return; } CurrentStep = (IStep)Activator.CreateInstance(_steps[_stepIndex])!; CurrentStep.Completed += NextStep; CurrentStep.Run(); } }