DP-VoidBox/VoidBox/Plugin.cs
2024-03-02 01:31:18 +01:00

112 lines
2.9 KiB
C#

using Dalamud.Hooking;
using Dalamud.IoC;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using Dalamud.Utility.Signatures;
using Ktisis.Structs.Env;
using Serilog;
using Serilog.Core;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Reflection.Emit;
using System.Runtime.Intrinsics.Arm;
namespace VoidBox;
public sealed unsafe class Plugin : IDalamudPlugin
{
private readonly List<Cmd> _cmds;
public Plugin([RequiredVersion("1.0")] DalamudPluginInterface pluginInterface)
{
pluginInterface.Create<Service>();
Service.Plugin = this;
Service.Config = Service.PluginInterface.GetPluginConfig() as Configuration ?? new();
Service.Config.Initialize(Service.PluginInterface);
Service.PluginUI = new();
_cmds = typeof(Plugin).Assembly.GetTypes()
.Where(t => !t.IsAbstract && typeof(Cmd).IsAssignableFrom(t))
.Select(t => (Cmd) Activator.CreateInstance(t)!)
.ToList();
foreach (Cmd cmd in _cmds)
{
cmd.Register(Service.CommandManager);
}
Service.GameInteropProvider.InitializeFromAttributes(this);
EnvStateCopyHook?.Enable();
}
public string Name => "VoidBox";
public void Dispose()
{
EnvStateCopyHook?.Dispose();
foreach (Cmd cmd in _cmds)
{
cmd.Dispose();
}
Service.PluginUI.Dispose();
Service.Plugin = null!;
}
private void Replace(EnvState* env)
{
if (!Service.Config.IsEnabled)
{
return;
}
if (env->SkyId != 0)
{
return;
}
env->SkyId = 1;
env->Clouds.CloudTexture = 10;
env->Clouds.CloudSideTexture = 48;
env->Clouds.CloudColor = new Vector3(0f, 0f, 0f);
env->Clouds.Color2 = new Vector3(1f, 1f, 1f);
env->Clouds.Gradient = 0.5f;
env->Clouds.SideHeight = 2f;
env->Fog.Color = new Vector4(0.4f, 0.4f, 0.4f, 1f);
env->Fog.Distance = 50f;
env->Fog.Thickness = 5f;
env->Fog.Opacity = 0.231f;
env->Fog.SkyVisibility = 0.254f;
env->Stars.Stars = 20f;
env->Stars.StarIntensity = 1.104f;
env->Stars.Constellations = 4.686f;
env->Stars.ConstellationIntensity = 1.172f;
env->Stars.GalaxyIntensity = 5.628f;
env->Stars.MoonColor = new Vector4(1f, 1f, 1f, 1f);
env->Stars.MoonBrightness = 0.603f;
}
private unsafe delegate nint EnvStateCopyDelegate(EnvState* dest, EnvState* src);
[Signature("E8 ?? ?? ?? ?? 49 3B F5", DetourName = nameof(EnvStateCopyDetour))]
private Hook<EnvStateCopyDelegate> EnvStateCopyHook = null!;
private unsafe nint EnvStateCopyDetour(EnvState* dest, EnvState* src)
{
var exec = EnvStateCopyHook.Original(dest, src);
Replace(dest);
return exec;
}
}