Skip to content

Commit 0ae20b7

Browse files
functional offline mode in case of login fail
1 parent c5d02af commit 0ae20b7

1 file changed

Lines changed: 150 additions & 3 deletions

File tree

AuthFix/AuthPlugin.cs

Lines changed: 150 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
1-
using System.Reflection;
1+
using AmongUs.Data;
22
using BepInEx;
33
using BepInEx.Unity.IL2CPP;
4+
using Epic.OnlineServices;
45
using Epic.OnlineServices.Connect;
56
using HarmonyLib;
7+
using Il2CppInterop.Common;
8+
using Il2CppInterop.Runtime;
69
using Il2CppInterop.Runtime.InteropTypes.Arrays;
10+
using Il2CppInterop.Runtime.Runtime;
11+
using InnerNet;
12+
using System;
713
using System.Linq;
14+
using System.Reflection;
815
using System.Runtime.InteropServices;
9-
using Epic.OnlineServices;
16+
using System.Text.Json;
1017
using UnityEngine;
1118
using UnityEngine.Events;
1219
using 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

Comments
 (0)