1010using HarmonyLib ;
1111using Il2CppInterop . Runtime . InteropTypes . Arrays ;
1212using InnerNet ;
13+ using LibCpp2IL ;
1314using UnityEngine ;
1415using UnityEngine . Events ;
1516using 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