diff --git a/FNA b/FNA
index 99cf22d42..ebadfa609 160000
--- a/FNA
+++ b/FNA
@@ -1 +1 @@
-Subproject commit 99cf22d427b54643e8f2719a4bee99a780d04c80
+Subproject commit ebadfa609c510206da7f872c24325fae5bd802a5
diff --git a/OTAPI.Client.Launcher/Actions/OTAPI.cs b/OTAPI.Client.Launcher/Actions/OTAPI.cs
index 653270de6..33c6b4b6d 100644
--- a/OTAPI.Client.Launcher/Actions/OTAPI.cs
+++ b/OTAPI.Client.Launcher/Actions/OTAPI.cs
@@ -30,7 +30,7 @@ namespace OTAPI.Client.Launcher.Actions;
static class OTAPI
{
- static Assembly Terraria;
+ static Assembly? Terraria;
static void CompileAndInstall() //considering to keep or not. this can recompile OTAPI mods on launch...which will be great for developing it. will look into when i get back to it one day
{
diff --git a/OTAPI.Client.Launcher/MainWindow.axaml.cs b/OTAPI.Client.Launcher/MainWindow.axaml.cs
index 957b4268c..34bcb026b 100644
--- a/OTAPI.Client.Launcher/MainWindow.axaml.cs
+++ b/OTAPI.Client.Launcher/MainWindow.axaml.cs
@@ -89,6 +89,7 @@ public MainWindow()
private void OnConsoleLineReceived(string line)
{
Context.Console.Insert(0, $"[{DateTime.Now:yyyyMMdd HH:mm:ss}] {line}");
+ System.Diagnostics.Debug.WriteLine($"[OTAPI.Launcher] {line}");
}
protected override void OnClosing(WindowClosingEventArgs e)
diff --git a/OTAPI.Client.Launcher/MessageBoxWindow.axaml.cs b/OTAPI.Client.Launcher/MessageBoxWindow.axaml.cs
index 0cda6df5a..a8d31f697 100644
--- a/OTAPI.Client.Launcher/MessageBoxWindow.axaml.cs
+++ b/OTAPI.Client.Launcher/MessageBoxWindow.axaml.cs
@@ -1,5 +1,5 @@
/*
-Copyright (C) 2020 DeathCradle
+Copyright (C) 2020-2024 SignatureBeef
This file is part of Open Terraria API v3 (OTAPI)
@@ -59,7 +59,8 @@ public static void Show(string text, string title)
}
};
wnd.Show();
- Application.Current.Run(wnd);
+ var app = Application.Current ?? throw new System.Exception("Failed to launch MessageBoxWindow");
+ app.Run(wnd);
}
}
diff --git a/OTAPI.Client.Launcher/OTAPI.Client.Launcher.csproj b/OTAPI.Client.Launcher/OTAPI.Client.Launcher.csproj
index 5769afbe4..9c12d3422 100644
--- a/OTAPI.Client.Launcher/OTAPI.Client.Launcher.csproj
+++ b/OTAPI.Client.Launcher/OTAPI.Client.Launcher.csproj
@@ -5,6 +5,8 @@
enable
embedded
Always
+ true
+ false
@@ -86,7 +88,7 @@
MessageBoxWindow.axaml
-
+
diff --git a/OTAPI.Client.Launcher/Targets/InstallTarget.Extensions.cs b/OTAPI.Client.Launcher/Targets/InstallTarget.Extensions.cs
index 13727b4b0..88a2e4fde 100644
--- a/OTAPI.Client.Launcher/Targets/InstallTarget.Extensions.cs
+++ b/OTAPI.Client.Launcher/Targets/InstallTarget.Extensions.cs
@@ -290,13 +290,13 @@ class GHArtifact
public string? BrowserDownloadUrl { get; set; }
}
- public static string PublishHostLauncher(this IPlatformTarget target)
+ public static async Task PublishHostLauncherAsync(this IPlatformTarget target)
{
- var url = "https://api.github.com/repos/DeathCradle/Open-Terraria-API/releases";
+ var url = "https://api.github.com/repos/SignatureBeef/Open-Terraria-API/releases";
using HttpClient client = new();
client.DefaultRequestHeaders.UserAgent.ParseAdd("OTAPI3-Installer");
- var data = client.GetStringAsync(url).Result;
+ var data = await client.GetStringAsync(url);
var releases = Newtonsoft.Json.JsonConvert.DeserializeObject(data) ?? throw new Exception("Unable to read release data");
GHRelease release;
@@ -311,7 +311,7 @@ public static string PublishHostLauncher(this IPlatformTarget target)
?? throw new Exception("Failed to find zip file in installer release");
Console.WriteLine(target.Status = "Downloading launcher, this may take a long time...");
- using var launcher = client.GetStreamAsync(url).Result;
+ using var launcher = await client.GetStreamAsync(url);
if (File.Exists("launcher.zip")) File.Delete("launcher.zip");
using (var fs = File.OpenWrite("launcher.zip"))
@@ -320,7 +320,7 @@ public static string PublishHostLauncher(this IPlatformTarget target)
int read;
while (launcher.CanRead)
{
- if ((read = launcher.Read(buffer, 0, buffer.Length)) == 0)
+ if ((read = await launcher.ReadAsync(buffer, 0, buffer.Length)) == 0)
break;
fs.Write(buffer, 0, read);
@@ -471,7 +471,7 @@ public static void CopyInstallFiles(this IPlatformTarget target, string otapiIns
public async static Task InstallLibsAsync(this IPlatformTarget target, string installPath, CancellationToken cancellationToken)
{
- var zipPath = await target.DownloadZipAsync("https://github.com/DeathCradle/fnalibs/raw/main/fnalibs.20211125.tar.bz2", "fnalibs", cancellationToken);
+ var zipPath = await target.DownloadZipAsync("https://github.com/SignatureBeef/fnalibs/raw/refs/heads/main/fnalibs.20241231.tar.bz2", "fnalibs", cancellationToken);
target.ExtractBZip2(zipPath, installPath);
}
@@ -502,7 +502,7 @@ public async static Task InstallSteamworks64Async(this IPlatformTarget target, s
}
}
- public static void PatchOSXLaunch(this IPlatformTarget target, string installPath)
+ public static async Task PatchOSXLaunchAsync(this IPlatformTarget target, string installPath)
{
var launch_script = Path.Combine(installPath, "MacOS/Terraria");
var backup_launch_script = Path.Combine(installPath, "MacOS/Terraria.bak.otapi");
@@ -554,9 +554,8 @@ cd ../otapi
// publish and copy OTAPI.Client.Launcher
{
Console.WriteLine("Publishing and creating launcher...this will take a while.");
- var output = target.PublishHostLauncher();
+ var output = await target.PublishHostLauncherAsync();
var launcher = Path.Combine(output, "Terraria");
- //var otapi = Path.Combine(installPath, "OTAPI.Client.Launcher");
if (!File.Exists(launcher))
throw new Exception($"Failed to produce launcher to: {launcher}");
@@ -566,7 +565,7 @@ cd ../otapi
}
}
- public static void PatchWindowsLaunch(this IPlatformTarget target, string installPath)
+ public static async Task PatchWindowsLaunch(this IPlatformTarget target, string installPath)
{
var launch_file = Path.Combine(installPath, "Terraria.exe");
@@ -582,7 +581,7 @@ public static void PatchWindowsLaunch(this IPlatformTarget target, string instal
// publish and copy OTAPI.Client.Launcher
{
- var output = target.PublishHostLauncher();
+ var output = await target.PublishHostLauncherAsync();
var launcher = Path.Combine(output, "Terraria.exe");
if (!File.Exists(launcher))
@@ -595,7 +594,7 @@ public static void PatchWindowsLaunch(this IPlatformTarget target, string instal
}
}
- public static void PatchLinuxLaunch(this IPlatformTarget target, string installPath)
+ public static async Task PatchLinuxLaunch(this IPlatformTarget target, string installPath)
{
var otapi_launcher = Path.Combine(installPath, "otapi_launcher");
var launch_script = Path.Combine(installPath, "Terraria");
@@ -651,9 +650,8 @@ cd ../otapi
// publish and copy OTAPI.Client.Launcher
{
Console.WriteLine("Publishing and creating launcher...this will take a while.");
- var output = target.PublishHostLauncher();
+ var output = await target.PublishHostLauncherAsync();
var launcher = Path.Combine(output, "Terraria");
- //var otapi = Path.Combine(installPath, "OTAPI.Client.Launcher");
if (!File.Exists(launcher))
throw new Exception($"Failed to produce launcher to: {launcher}");
diff --git a/OTAPI.Client.Launcher/csharp/plugins/scripts/otapi/cef-runtime.cs b/OTAPI.Client.Launcher/csharp/plugins/scripts/otapi/cef-runtime.cs
index 5939a200b..6bb5cffb9 100644
--- a/OTAPI.Client.Launcher/csharp/plugins/scripts/otapi/cef-runtime.cs
+++ b/OTAPI.Client.Launcher/csharp/plugins/scripts/otapi/cef-runtime.cs
@@ -8,6 +8,7 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
+using System.Runtime.InteropServices;
using ImGuiNET;
//ChromiumWebBrowser browser;
@@ -24,12 +25,12 @@ void OnUpdate(On.Terraria.Main.orig_Update orig, Terraria.Main self, GameTime ga
try
{
- if (CefRuntime.IsInitialized && CefRuntime.Platform != CefRuntimePlatform.Windows)
+ if (CefRuntime.IsInitialized) // && CefRuntime.Platform != CefRuntimePlatform.Windows)
{
CefRuntime.DoMessageLoopWork();
}
}
- catch(Exception ex)
+ catch (Exception ex)
{
Console.WriteLine("CEF.OnUpdate", ex);
}
@@ -86,7 +87,7 @@ void OnGUI(On.Terraria.Main.orig_OnExtGUI orig)
}
}
}
- catch(Exception ex)
+ catch (Exception ex)
{
Console.WriteLine("CEF.OnGUI", ex);
}
@@ -96,6 +97,7 @@ void OnGUI(On.Terraria.Main.orig_OnExtGUI orig)
void OnStart()
{
System.Console.WriteLine("Starting CefSharp");
+ //System.Diagnistics.Debug.WriteLine("Starting CefSharpx");
ready = true;
}
@@ -298,13 +300,13 @@ public override void Render(IntPtr buffer)
buffer,
_target.Width * _target.Height
);
- // var length = _target.Width * _target.Height;
- // int[] imgData = new int[length];
- // var temporaryBuffer = new int[length];
+ //var length = _target.Width * _target.Height;
+ //int[] imgData = new int[length];
+ //var temporaryBuffer = new int[length];
- // Marshal.Copy(buffer, temporaryBuffer, 0, length);
+ //Marshal.Copy(buffer, temporaryBuffer, 0, length);
- // _target.SetData(temporaryBuffer);
+ _target.SetData(temporaryBuffer);
}
private bool disposedValue;
@@ -391,14 +393,24 @@ public OffscreenBrowser(IOffscreenRenderTarget renderTarget, string url)
Client.LifeSpanHandler.Created += LifeSpanHandler_Created;
- if (!CefRuntime.IsInitialized)
- {
- var cefsettings = new CefSettings()
- {
- WindowlessRenderingEnabled = true
- };
- CefLoader.Load(cefsettings);
- }
+ //if (!CefRuntime.IsInitialized)
+ //{
+ // var cachePath = Path.Combine(Environment.CurrentDirectory, "cef-cache");
+ // if (!Directory.Exists(cachePath))
+ // Directory.CreateDirectory(cachePath);
+ // var cefsettings = new CefSettings()
+ // {
+ // WindowlessRenderingEnabled = true,
+ // LogSeverity = CefLogSeverity.Verbose,
+ // LogFile = "cef_debug.log",
+ // RootCachePath = cachePath,
+ // MultiThreadedMessageLoop = true,
+ // SingleProcess = false,
+ // };
+ // CefLoader.Load(cefsettings);
+ //}
+
+ CefLoader.Load();
//Browser = CefBrowserHost.CreateBrowserSync(wi, client, bsettings, "https://google.com.au/");
CefBrowserHost.CreateBrowser(wi, Client, bsettings, url);
@@ -572,6 +584,15 @@ public static OffscreenApp Load(CefSettings? settings = null, OffscreenApp? app
settings.BrowserSubprocessPath = DiscoverSubProcess();
settings.UncaughtExceptionStackSize = 10;
+ settings.WindowlessRenderingEnabled = true;
+ settings.LogSeverity = CefLogSeverity.Verbose;
+ settings.LogFile = "cef_debug.log";
+
+ var cachePath = Path.Combine(Environment.CurrentDirectory, "cef-cache");
+ if (!Directory.Exists(cachePath))
+ Directory.CreateDirectory(cachePath);
+ settings.RootCachePath = cachePath;
+
switch (CefRuntime.Platform)
{
case CefRuntimePlatform.Windows:
diff --git a/OTAPI.Server.Launcher/OTAPI.Server.Launcher.csproj b/OTAPI.Server.Launcher/OTAPI.Server.Launcher.csproj
index 1a00010ad..82c92ca7e 100644
--- a/OTAPI.Server.Launcher/OTAPI.Server.Launcher.csproj
+++ b/OTAPI.Server.Launcher/OTAPI.Server.Launcher.csproj
@@ -25,7 +25,6 @@
-
true
diff --git a/OTAPI.sln b/OTAPI.sln
index d2051539d..c3e071093 100644
--- a/OTAPI.sln
+++ b/OTAPI.sln
@@ -34,12 +34,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OTAPI.Scripts", "OTAPI.Scri
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OTAPI.Common", "OTAPI.Common\OTAPI.Common.csproj", "{430E8B48-4F60-4A21-8B15-771A1681C812}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FNA.Core", "FNA\FNA.Core.csproj", "{63B4C17F-29A6-4519-9302-9317DE8B5FDC}"
-EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OTAPI.Server.Launcher", "OTAPI.Server.Launcher\OTAPI.Server.Launcher.csproj", "{1BD8B7AC-62D7-4E6B-B16E-012CB8869FA8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RuntimeExample.Server", "examples\RuntimeExample.Server\RuntimeExample.Server.csproj", "{62AE846B-35AA-4558-8376-6351574AE9BC}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FNA.Core", "FNA\FNA.Core.csproj", "{76251340-608B-429A-AA5C-9EF84FE29145}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RuntimeExample.Client", "examples\RuntimeExample.Client\RuntimeExample.Client.csproj", "{7A5FEE90-C1E1-4452-8A7A-360921A1B050}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -188,42 +190,6 @@ Global
{430E8B48-4F60-4A21-8B15-771A1681C812}.ReleaseTrace|x64.Build.0 = Release|Any CPU
{430E8B48-4F60-4A21-8B15-771A1681C812}.ReleaseTrace|x86.ActiveCfg = Release|Any CPU
{430E8B48-4F60-4A21-8B15-771A1681C812}.ReleaseTrace|x86.Build.0 = Release|Any CPU
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Debug|Any CPU.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Debug|Any CPU.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Debug|x64.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Debug|x64.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Debug|x86.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Debug|x86.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugLegacy|Any CPU.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugLegacy|Any CPU.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugLegacy|x64.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugLegacy|x64.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugLegacy|x86.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugLegacy|x86.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugTrace|Any CPU.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugTrace|Any CPU.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugTrace|x64.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugTrace|x64.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugTrace|x86.ActiveCfg = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.DebugTrace|x86.Build.0 = Debug|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Release|Any CPU.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Release|Any CPU.Build.0 = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Release|x64.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Release|x64.Build.0 = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Release|x86.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.Release|x86.Build.0 = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseLegacy|Any CPU.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseLegacy|Any CPU.Build.0 = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseLegacy|x64.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseLegacy|x64.Build.0 = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseLegacy|x86.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseLegacy|x86.Build.0 = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseTrace|Any CPU.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseTrace|Any CPU.Build.0 = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseTrace|x64.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseTrace|x64.Build.0 = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseTrace|x86.ActiveCfg = Release|x64
- {63B4C17F-29A6-4519-9302-9317DE8B5FDC}.ReleaseTrace|x86.Build.0 = Release|x64
{1BD8B7AC-62D7-4E6B-B16E-012CB8869FA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1BD8B7AC-62D7-4E6B-B16E-012CB8869FA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1BD8B7AC-62D7-4E6B-B16E-012CB8869FA8}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -296,6 +262,78 @@ Global
{62AE846B-35AA-4558-8376-6351574AE9BC}.ReleaseTrace|x64.Build.0 = Release|Any CPU
{62AE846B-35AA-4558-8376-6351574AE9BC}.ReleaseTrace|x86.ActiveCfg = Release|Any CPU
{62AE846B-35AA-4558-8376-6351574AE9BC}.ReleaseTrace|x86.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Debug|x64.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Debug|x86.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugLegacy|Any CPU.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugLegacy|Any CPU.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugLegacy|x64.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugLegacy|x64.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugLegacy|x86.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugLegacy|x86.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugTrace|Any CPU.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugTrace|Any CPU.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugTrace|x64.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugTrace|x64.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugTrace|x86.ActiveCfg = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.DebugTrace|x86.Build.0 = Debug|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Release|Any CPU.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Release|x64.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Release|x64.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Release|x86.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.Release|x86.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseLegacy|Any CPU.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseLegacy|Any CPU.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseLegacy|x64.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseLegacy|x64.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseLegacy|x86.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseLegacy|x86.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseTrace|Any CPU.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseTrace|Any CPU.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseTrace|x64.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseTrace|x64.Build.0 = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseTrace|x86.ActiveCfg = Release|Any CPU
+ {76251340-608B-429A-AA5C-9EF84FE29145}.ReleaseTrace|x86.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Debug|x64.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Debug|x86.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugLegacy|Any CPU.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugLegacy|Any CPU.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugLegacy|x64.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugLegacy|x64.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugLegacy|x86.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugLegacy|x86.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugTrace|Any CPU.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugTrace|Any CPU.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugTrace|x64.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugTrace|x64.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugTrace|x86.ActiveCfg = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.DebugTrace|x86.Build.0 = Debug|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Release|x64.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Release|x64.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Release|x86.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.Release|x86.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseLegacy|Any CPU.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseLegacy|Any CPU.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseLegacy|x64.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseLegacy|x64.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseLegacy|x86.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseLegacy|x86.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseTrace|Any CPU.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseTrace|Any CPU.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseTrace|x64.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseTrace|x64.Build.0 = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseTrace|x86.ActiveCfg = Release|Any CPU
+ {7A5FEE90-C1E1-4452-8A7A-360921A1B050}.ReleaseTrace|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/examples/RuntimeExample.Client/RuntimeExample.Client.csproj b/examples/RuntimeExample.Client/RuntimeExample.Client.csproj
index 0a1fb1fb2..7bedff42a 100644
--- a/examples/RuntimeExample.Client/RuntimeExample.Client.csproj
+++ b/examples/RuntimeExample.Client/RuntimeExample.Client.csproj
@@ -1,30 +1,30 @@
-
+
-
- net472
-
+
+ net9.0
+
-
- true
-
-
- true
-
-
-
-
-
-
- ..\..\OTAPI.Client.Installer\bin\Debug\net472\OTAPI.Runtime.dll
-
-
- ..\..\OTAPI.Patcher\bin\Debug\net9.0\OTAPI.exe
-
-
- ..\..\OTAPI.Patcher\bin\Debug\net9.0\FNA.dll
-
-
-
-
-
+
+ true
+
+
+ true
+
+
+
+
+
+
+ ..\..\OTAPI.Client.Launcher\bin\Debug\$(TargetFramework)\client\OTAPI.Runtime.dll
+
+
+ ..\..\OTAPI.Client.Launcher\bin\Debug\$(TargetFramework)\client\OTAPI.exe
+
+
+ ..\..\OTAPI.Patcher\bin\Debug\$(TargetFramework)\FNA.dll
+
+
+
+
+