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 _cmds; public Plugin([RequiredVersion("1.0")] DalamudPluginInterface pluginInterface) { pluginInterface.Create(); 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 EnvStateCopyHook = null!; private unsafe nint EnvStateCopyDetour(EnvState* dest, EnvState* src) { var exec = EnvStateCopyHook.Original(dest, src); Replace(dest); return exec; } }