Skip to content

Commit

Permalink
Improve server launcher for arm64
Browse files Browse the repository at this point in the history
  • Loading branch information
SignatureBeef committed Dec 28, 2024
1 parent 844f745 commit bafb340
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 45 deletions.
36 changes: 2 additions & 34 deletions OTAPI.Patcher/Targets/PCServerTarget.cs
Original file line number Diff line number Diff line change
Expand Up @@ -125,47 +125,13 @@ public void Patch()
// merge in HookResult, HookEvent etc
mm.ReadMod(typeof(HookEvent).Assembly.Location);

////mm.Module.GetType("Terraria.Main").FindMethod("Update").CreateHook(mm);
//mm.Module.GetType("Terraria.Main").CreateHooks(mm);
//mm.Module.GetType("Terraria.Item").CreateHooks(mm);
//mm.Module.GetType("Terraria.NetMessage").CreateHooks(mm);
//mm.Module.GetType("Terraria.Netplay").CreateHooks(mm);
//mm.Module.GetType("Terraria.NPC").CreateHooks(mm);
//mm.Module.GetType("Terraria.WorldGen").CreateHooks(mm);
//mm.Module.GetType("Terraria.Chat.ChatHelper").CreateHooks(mm);
//mm.Module.GetType("Terraria.IO.WorldFile").CreateHooks(mm);
//mm.Module.GetType("Terraria.Net.NetManager").CreateHooks(mm);
//mm.Module.GetType("Terraria.Projectile").CreateHooks(mm);
mm.Module.GetType("Terraria.Liquid").CreateHooks(mm);
mm.Module.Write("test.dll");
//HookEmitter.CreateHookDelegate(mm);
//mm.Module.Write("test.dll");

//// generate static hooks
//mm.Module.GetType("Terraria.Main").CreateHooks(mm);
//mm.Module.GetType("Terraria.Item").CreateHooks(mm);
//mm.Module.GetType("Terraria.NetMessage").CreateHooks(mm);
//mm.Module.GetType("Terraria.Netplay").CreateHooks(mm);
//mm.Module.GetType("Terraria.NPC").CreateHooks(mm);
//mm.Module.GetType("Terraria.WorldGen").CreateHooks(mm);
//mm.Module.GetType("Terraria.Chat.ChatHelper").CreateHooks(mm);
//mm.Module.GetType("Terraria.IO.WorldFile").CreateHooks(mm);
//mm.Module.GetType("Terraria.Net.NetManager").CreateHooks(mm);
//mm.Module.GetType("Terraria.Projectile").CreateHooks(mm);
//mm.Module.GetType("Terraria.RemoteClient").CreateHooks(mm);

Console.WriteLine($"[OTAPI] Changing to AnyCPU (x64 preferred)");
mm.SetAnyCPU();

CompileAndReadShims(mm);
MergeReLogic(mm, embeddedResources);
this.AddPatchMetadata(mm, mm.Module.Name, vanillaDllPath);
}
//else if(modType == ModType.PreWrite)
//{
// HookEmitter.CreateHookDelegate(mm);
// mm.Module.Write("test.dll");
//}
}
return EApplyResult.Continue;
});
Expand Down Expand Up @@ -248,6 +214,8 @@ public void Patch()
mm.Module.GetType("Terraria.Net.NetManager").CreateHooks(mm);
mm.Module.GetType("Terraria.Projectile").CreateHooks(mm);
mm.Module.GetType("Terraria.RemoteClient").CreateHooks(mm);
mm.Module.GetType("Terraria.Liquid").CreateHooks(mm);
mm.Module.GetType("Terraria.Program").CreateHooks(mm);
Console.WriteLine("Done");
}
else if (modType == ModType.Write)
Expand Down
32 changes: 21 additions & 11 deletions OTAPI.Server.Launcher/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,23 +45,33 @@ static Hook LazyHook(string type, string method, Delegate callback)

static void Nop() { }

static void Program_LaunchGame(On.Terraria.Program.orig_LaunchGame orig, string[] args, bool monoArgs)
static void Program_LaunchGame(object sender, HookEvents.Terraria.Program.LaunchGameEventArgs e)
{
#if !TML
var SavePath = typeof(Terraria.Program).GetField("SavePath"); //1442+
if (SavePath is not null)
{
SavePath.SetValue(null, Terraria.Program.LaunchParameters.ContainsKey("-savedirectory") ? Terraria.Program.LaunchParameters["-savedirectory"] : Platform.Get<IPathService>().GetStoragePath("Terraria"));
}

// Steamworks.NET is not supported on ARM64, and will cause a crash
// TODO: create a shim generator in modfw to dynamically remove this for servers while keeping API compatibility
// Terraria.Main.SkipAssemblyLoad = true;
if (RuntimeInformation.ProcessArchitecture == Architecture.Arm64)
{
var SkipAssemblyLoad = typeof(Terraria.Main).GetField("SkipAssemblyLoad");
SkipAssemblyLoad.SetValue(null, true);
return;
}

Console.WriteLine("Preloading assembly...");

if (GetTerrariaAssembly().EntryPoint.DeclaringType.Name != "MonoLaunch")
{
var SavePath = typeof(Terraria.Program).GetField("SavePath"); //1442+
if (SavePath is not null)
{
SavePath.SetValue(null, Terraria.Program.LaunchParameters.ContainsKey("-savedirectory") ? Terraria.Program.LaunchParameters["-savedirectory"] : Platform.Get<IPathService>().GetStoragePath("Terraria"));
}
Terraria.Main.dedServ = true;
Terraria.Program.ForceLoadAssembly(GetTerrariaAssembly(), initializeStaticMembers: true);
}
#endif
orig(args, monoArgs);
}

static void TShockHooks()
Expand All @@ -79,7 +89,7 @@ void Print<TSender, TArgs>(TSender sender, TArgs args)
calls[name] += 1;
if ((DateTime.Now - lastUpdate).TotalSeconds >= 1)
{
Console.WriteLine(String.Join($"{Environment.NewLine}\t- ", calls.Keys.OrderByDescending(x => calls[x]).Select(name => $"{name}:{calls[name]}")));
Console.WriteLine(String.Join($"{Environment.NewLine}", calls.Keys.OrderByDescending(x => calls[x]).Select(name => $"\t- {name}:{calls[name]}")));
lastUpdate = DateTime.Now;
}

Expand All @@ -98,8 +108,8 @@ void Print<TSender, TArgs>(TSender sender, TArgs args)
HookEvents.Terraria.Netplay.OnConnectionAccepted += Print;
HookEvents.Terraria.NPC.SetDefaults += Print;
HookEvents.Terraria.NPC.SetDefaultsFromNetId += Print;
HookEvents.Terraria.NPC.StrikeNPC += (npc, args) => args.ContinueExecution = false;
//HookEvents.Terraria.NPC.StrikeNPC += Print;
// HookEvents.Terraria.NPC.StrikeNPC += (npc, args) => args.ContinueExecution = false;
HookEvents.Terraria.NPC.StrikeNPC += Print;
HookEvents.Terraria.NPC.Transform += Print;
HookEvents.Terraria.NPC.AI += Print;
HookEvents.Terraria.WorldGen.StartHardmode += Print;
Expand Down Expand Up @@ -171,10 +181,10 @@ static void Main_DedServ(On.Terraria.Main.orig_DedServ orig, Terraria.Main self)
orig(self);
}

HookEvents.Terraria.Program.LaunchGame += Program_LaunchGame;
if (RuntimeInformation.ProcessArchitecture != Architecture.Arm64)
{
Terraria.Program.OnLaunched += Program_OnLaunched;
On.Terraria.Program.LaunchGame += Program_LaunchGame;
}
else
{
Expand Down

0 comments on commit bafb340

Please sign in to comment.