1
Fork 0
mirror of https://github.com/redstrate/Auracite.git synced 2025-04-24 05:37:44 +00:00
auracite/dalamud/Auracite/Plugin.cs
Joshua Goins 39108207f6 Add Dalamud plugin to collect additional data in-game
There's some data we want to save that's not available on the Lodestone,
for example playtime information. Now you can install the Dalamud plugin
(not currently distributed) to save playtime information.

In the future, we can expand this to all sorts of interesting things!
2024-10-05 12:10:31 -04:00

89 lines
No EOL
2.3 KiB
C#

using System;
using System.Collections.Generic;
using System.Net.Http;
using Dalamud.Game.Command;
using Dalamud.Interface.Windowing;
using Dalamud.IoC;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using Newtonsoft.Json;
namespace Auracite;
public sealed class Plugin : IDalamudPlugin
{
public static IStep? CurrentStep;
private readonly WindowSystem WindowSystem = new("Auracite");
private readonly List<Type> _steps =
[typeof(PlaytimeStep)];
private int _stepIndex;
private readonly StepWindow StepWindow;
public class Package
{
public string playtime;
}
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()
{
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 = null;
StepWindow.IsOpen = false;
SendPackage();
return;
}
CurrentStep = (IStep)Activator.CreateInstance(_steps[_stepIndex])!;
CurrentStep.Completed += NextStep;
}
private void SendPackage()
{
var client = new HttpClient();
client.PostAsync("http://127.0.0.1:8000/package", new StringContent(JsonConvert.SerializeObject(package)));
package = null;
}
}