Skip to content

Commit 668be2d

Browse files
lobby join issue fix
1 parent 9a35ba6 commit 668be2d

1 file changed

Lines changed: 42 additions & 11 deletions

File tree

AuthFix/AuthPlugin.cs

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using HarmonyLib;
1111
using Il2CppInterop.Runtime.InteropTypes.Arrays;
1212
using InnerNet;
13+
using LibCpp2IL;
1314
using UnityEngine;
1415
using UnityEngine.Events;
1516
using UnityEngine.SceneManagement;
@@ -34,8 +35,6 @@ public partial class AuthPlugin : BasePlugin
3435

3536
private static bool _ranLobbyJoin;
3637

37-
private static readonly Il2CppSystem.String ACTION_VIEW = new("android.intent.action.VIEW".ToCharArray());
38-
3938
public static string GetLobby()
4039
{
4140
return Marshal.PtrToStringUTF8(get_lobby()) ?? string.Empty;
@@ -118,26 +117,58 @@ public System.Collections.IEnumerator WaitForLogin()
118117
string region = parts[0];
119118
string code = parts[1];
120119

121-
var regionCandidates = new[]
120+
var normalizedCandidates = new[]
122121
{
123-
region,
124-
$"https://{region}",
125-
$"http://{region}"
126-
};
122+
NormalizeHost(region)
123+
}.ToHashSet(StringComparer.OrdinalIgnoreCase);
124+
125+
var selectedRegion = ServerManager.Instance.AvailableRegions.ToList().FirstOrDefault(r =>
126+
r.Servers.Any(s => normalizedCandidates.Contains(NormalizeHost(s.Ip))) || normalizedCandidates.Contains(NormalizeHost(r.PingServer)));
127+
128+
string regions = "";
127129

128-
var selectedRegion = ServerManager.Instance.AvailableRegions.FirstOrDefault(r =>
129-
r.Servers.Any(s => regionCandidates.Contains(s.Ip, StringComparer.OrdinalIgnoreCase)) ||
130-
regionCandidates.Contains(r.PingServer, StringComparer.OrdinalIgnoreCase)
131-
);
130+
foreach (var regionname in ServerManager.Instance.AvailableRegions)
131+
{
132+
regions += $"{regionname.Name} ({regionname.PingServer}),";
133+
}
132134

133135
if (selectedRegion != null)
134136
{
135137
ServerManager.Instance.SetRegion(selectedRegion);
136138
AmongUsClient.Instance.StartCoroutine(AmongUsClient.Instance.CoFindGameInfoFromCodeAndJoin(GameCode.GameNameToInt(code)));
137139
}
140+
else
141+
{
142+
Log.LogWarning($"selected region {region} is null :( (how?)");
143+
Log.LogWarning(regions);
144+
}
138145
_ranLobbyJoin = true;
139146
}
140147

148+
static string NormalizeHost(string input)
149+
{
150+
if (string.IsNullOrWhiteSpace(input))
151+
return string.Empty;
152+
153+
input = input.Trim();
154+
155+
if (!input.StartsWith("http://", StringComparison.OrdinalIgnoreCase) &&
156+
!input.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
157+
{
158+
input = "http://" + input;
159+
}
160+
161+
if (Uri.TryCreate(input, UriKind.Absolute, out var uri))
162+
{
163+
input = uri.Host;
164+
}
165+
166+
if (input.StartsWith("www.", StringComparison.OrdinalIgnoreCase))
167+
input = input[4..];
168+
169+
return input.ToLowerInvariant();
170+
}
171+
141172
public static GameObject FindInactiveByName(string name)
142173
{
143174
Scene activeScene = SceneManager.GetActiveScene();

0 commit comments

Comments
 (0)