From a1c17daffa76c4992b3f2df8b0a6f76a79ac96dc Mon Sep 17 00:00:00 2001 From: mleem97 <52848568+mleem97@users.noreply.github.com> Date: Mon, 10 Aug 2026 23:50:30 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Optimize=20Expensive=20?= =?UTF-8?q?FindObjectsOfType=20Calls=20in=20Lua=20APIs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scripting/Lua/Modules/LuaServerModule.cs | 58 ++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/Infrastructure/Scripting/Lua/Modules/LuaServerModule.cs b/src/Infrastructure/Scripting/Lua/Modules/LuaServerModule.cs index 17bd8abb..8ab77360 100644 --- a/src/Infrastructure/Scripting/Lua/Modules/LuaServerModule.cs +++ b/src/Infrastructure/Scripting/Lua/Modules/LuaServerModule.cs @@ -21,11 +21,12 @@ public static void Register(Table greg, Script script, string modId) { try { - var servers = UnityEngine.Object.FindObjectsOfType(); var result = new Table(script); int i = 1; - foreach (var s in servers) + + Action addServer = (s) => { + if (s == null) return; try { var info = new Table(script); @@ -42,7 +43,22 @@ public static void Register(Table greg, Script script, string modId) result[i++] = info; } catch { } + }; + + // Optimization: Use O(1) lookup from game-managed NetworkMap instead of O(N) FindObjectsOfType + var nm = Il2Cpp.NetworkMap.instance; + if (nm != null && nm.servers != null) + { + foreach (var kvp in nm.servers) + { + addServer(kvp.Value); + } + return result; } + + var servers = UnityEngine.Object.FindObjectsOfType(); + foreach (var s in servers) addServer(s); + return result; } catch (Exception ex) @@ -80,6 +96,21 @@ public static void Register(Table greg, Script script, string modId) { try { + var nm = Il2Cpp.NetworkMap.instance; + if (nm != null && nm.brokenServers != null) + { + foreach (var kvp in nm.brokenServers) + { + var s = kvp.Value; + if (s != null && s.GetHashCode() == hash && s.isBroken) + { + s.RepairDevice(); + return true; + } + } + return false; + } + var servers = UnityEngine.Object.FindObjectsOfType(); foreach (var s in servers) { @@ -104,6 +135,29 @@ public static void Register(Table greg, Script script, string modId) try { int repaired = 0; + var nm = Il2Cpp.NetworkMap.instance; + if (nm != null && nm.brokenServers != null) + { + if (nm.brokenServers.Count == 0) return 0; + + var keys = new System.Collections.Generic.List(); + foreach (var kvp in nm.brokenServers) keys.Add(kvp.Key); + + foreach (var key in keys) + { + try + { + if (nm.brokenServers.TryGetValue(key, out var s) && s != null && s.isBroken) + { + s.RepairDevice(); + repaired++; + } + } + catch { } + } + return repaired; + } + var servers = UnityEngine.Object.FindObjectsOfType(); foreach (var s in servers) { From a837cdae6c48d4bc535c690546a86a8d49eaab51 Mon Sep 17 00:00:00 2001 From: mleem97 <52848568+mleem97@users.noreply.github.com> Date: Mon, 10 Aug 2026 23:52:57 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E2=9A=A1=20Bolt:=20Optimize=20Expensive=20?= =?UTF-8?q?FindObjectsOfType=20Calls=20in=20Lua=20APIs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit