1- using System . Reflection ;
1+ using AmongUs . Data ;
22using BepInEx ;
33using BepInEx . Unity . IL2CPP ;
4+ using Epic . OnlineServices ;
45using Epic . OnlineServices . Connect ;
56using HarmonyLib ;
7+ using Il2CppInterop . Common ;
8+ using Il2CppInterop . Runtime ;
69using Il2CppInterop . Runtime . InteropTypes . Arrays ;
10+ using Il2CppInterop . Runtime . Runtime ;
11+ using InnerNet ;
12+ using System ;
713using System . Linq ;
14+ using System . Reflection ;
815using System . Runtime . InteropServices ;
9- using Epic . OnlineServices ;
16+ using System . Text . Json ;
1017using UnityEngine ;
1118using UnityEngine . Events ;
1219using UnityEngine . SceneManagement ;
@@ -157,7 +164,7 @@ public static bool Prefix(ServerDropdown __instance)
157164 public static class AuthPatch
158165 {
159166 // ReSharper disable once InconsistentNaming
160- public static bool Prefix ( EOSManager __instance , OnLoginCallback successCallbackIn )
167+ public static bool Prefix ( EOSManager __instance , [ HarmonyArgument ( 0 ) ] OnLoginCallback successCallbackIn )
161168 {
162169 var loginOptions = new LoginOptions ( ) ;
163170 var credentials = new Credentials ( ) ;
@@ -190,4 +197,144 @@ public static bool Prefix()
190197 return false ;
191198 }
192199 }
200+
201+ [ HarmonyPatch ( typeof ( EOSManager ) , nameof ( EOSManager . ContinueInOfflineMode ) ) ]
202+ public static class SignInFailPatch
203+ {
204+ public static bool SignInFailed ;
205+
206+ // ReSharper disable once InconsistentNaming
207+ public static bool Prefix ( )
208+ {
209+ SignInFailed = true ;
210+ DataManager . Player . Account . LoginStatus = EOSManager . AccountLoginStatus . LoggedIn ;
211+ DataManager . Settings . Multiplayer . ChatMode = QuickChatModes . FreeChatOrQuickChat ;
212+ DataManager . Player . Save ( ) ;
213+ EOSManager . Instance . IsAllowedOnline ( true ) ;
214+ return true ;
215+ }
216+ }
217+
218+ [ HarmonyPatch ( typeof ( HttpMatchmakerManager ) , nameof ( HttpMatchmakerManager . TryReadCachedToken ) ) ]
219+ public static class CoGetOrRefreshTokenPatch
220+ {
221+ public static bool Prefix ( ref bool __result , ref string matchmakerToken )
222+ {
223+ if ( ! SignInFailPatch . SignInFailed )
224+ {
225+ return true ;
226+ }
227+
228+ __result = true ;
229+ matchmakerToken = Convert . ToBase64String ( JsonSerializer . SerializeToUtf8Bytes ( new
230+ {
231+ Content = new
232+ {
233+ Puid = "RemoveAccounts" ,
234+ ClientVersion = Constants . GetBroadcastVersion ( ) ,
235+ ExpiresAt = DateTime . UtcNow . AddHours ( 1 ) ,
236+ } ,
237+ Hash = "impostor_was_here" ,
238+ } ) ) ;
239+ return false ;
240+ }
241+ }
242+
243+ [ HarmonyPatch ( typeof ( EOSManager ) , nameof ( EOSManager . IsAllowedOnline ) ) ]
244+ public static class IsAllowedOnlineOverride
245+ {
246+ public static bool Prefix ( [ HarmonyArgument ( 0 ) ] ref bool canOnline )
247+ {
248+ if ( SignInFailPatch . SignInFailed )
249+ {
250+ canOnline = true ;
251+ }
252+ return true ;
253+ }
254+ }
255+
256+ [ HarmonyPatch ( typeof ( AccountManager ) , nameof ( AccountManager . CanPlayOnline ) ) ]
257+ public static class CanPlayOnlineOverride
258+ {
259+ public static void Postfix ( [ HarmonyArgument ( 0 ) ] ref bool __result )
260+ {
261+ if ( SignInFailPatch . SignInFailed )
262+ {
263+ __result = true ;
264+ }
265+ }
266+ }
267+
268+ [ HarmonyPatch ( typeof ( EOSManager ) , nameof ( EOSManager . IsFreechatAllowed ) ) ]
269+ public static class IsFreechatAllowedOverride
270+ {
271+ public static void Postfix ( ref bool __result )
272+ {
273+ if ( SignInFailPatch . SignInFailed )
274+ {
275+ __result = true ;
276+ }
277+ }
278+ }
279+
280+ [ HarmonyPatch ( typeof ( EOSManager ) , nameof ( EOSManager . UpdatePermissionKeys ) ) ]
281+ public static class UpdatePermissionKeysOverride
282+ {
283+ public static bool Prefix ( [ HarmonyArgument ( 0 ) ] Il2CppSystem . Action callback )
284+ {
285+ if ( ! SignInFailPatch . SignInFailed )
286+ {
287+ return true ;
288+ }
289+
290+ DestroyableSingleton < FriendsListManager > . Instance . Ui . Close ( false ) ;
291+ DataManager . Player . Account . LoginStatus = EOSManager . AccountLoginStatus . LoggedIn ;
292+ DataManager . Player . Save ( ) ;
293+ callback . Invoke ( ) ;
294+ return false ;
295+ }
296+ }
297+
298+ [ HarmonyPatch ( typeof ( AmongUsClient ) , nameof ( AmongUsClient . Update ) ) ]
299+ public static class AmongUsClientUpdate
300+ {
301+ public static void Postfix ( )
302+ {
303+ if ( SignInFailPatch . SignInFailed && EOSManager . Instance . loginFlowFinished )
304+ {
305+ DataManager . Player . Account . LoginStatus = EOSManager . AccountLoginStatus . LoggedIn ;
306+ }
307+ }
308+ }
309+
310+
311+ [ HarmonyPatch ( typeof ( EOSManager ) , nameof ( EOSManager . ProductUserId ) , MethodType . Getter ) ]
312+ public static class ProductUserIdOverride
313+ {
314+ public static bool Prefix ( ref string __result )
315+ {
316+ if ( ! SignInFailPatch . SignInFailed )
317+ {
318+ return true ;
319+ }
320+
321+ __result = "." ;
322+ return false ;
323+ }
324+ }
325+
326+ [ HarmonyPatch ( typeof ( EOSManager ) , nameof ( EOSManager . UserIDToken ) , MethodType . Getter ) ]
327+ public static class UserIDTokenOverride
328+ {
329+ public static bool Prefix ( ref string __result )
330+ {
331+ if ( ! SignInFailPatch . SignInFailed )
332+ {
333+ return true ;
334+ }
335+
336+ __result = "." ;
337+ return false ;
338+ }
339+ }
193340}
0 commit comments