using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Linq.Expressions;
using System.Net;
using System.Net.Http;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using DebugToolkit.Code;
using EntityStates.Drone.DroneJunk;
using EntityStates.LunarTeleporter;
using HG;
using HG.Reflection;
using HarmonyLib;
using IL.EntityStates.Drifter;
using IL.EntityStates.Drone.DroneJunk;
using IL.RoR2;
using IL.RoR2.Projectile;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using Mono.Cecil;
using Mono.Cecil.Cil;
using Mono.Cecil.Rocks;
using Mono.Collections.Generic;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using MonoMod.Utils;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using On.EntityStates.LunarTeleporter;
using On.RoR2;
using On.RoR2.Artifacts;
using On.RoR2.Items;
using On.RoR2.UI;
using On.RoR2.UI.MainMenu;
using ProperSave;
using ProperSave.Data;
using R2API;
using RoR2;
using RoR2.Artifacts;
using RoR2.ContentManagement;
using RoR2.PointOfInterest;
using RoR2.Projectile;
using RoR2.Stats;
using RoR2.UI;
using RoR2.UI.MainMenu;
using RoR2.UI.SkinControllers;
using RoRGauntlet;
using RoRGauntlet.Utilities;
using RoRGauntlet.Utilities.Extensions;
using RoRGauntlet.Web;
using RoRes;
using ScrollableLobbyUI;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("DebugToolkit")]
[assembly: AssemblyCompany("RoRGauntlet")]
[assembly: AssemblyConfiguration("Public")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+8e72c5bdc4f3eec8034b86d6c65bcec451790164")]
[assembly: AssemblyProduct("RoRGauntlet")]
[assembly: AssemblyTitle("RoRGauntlet")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class ParamCollectionAttribute : Attribute
{
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace RoRes
{
public sealed class AuthInfo
{
[JsonProperty("idToken")]
public string IdToken { get; set; }
[JsonProperty("refreshToken")]
public string RefreshToken { get; set; }
[JsonProperty("localId")]
public string LocalId { get; set; }
}
public sealed class Loadout
{
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("seed")]
public ulong Seed { get; set; }
[JsonProperty("survivor")]
public string Survivor { get; set; }
[JsonProperty("skills")]
public List<long> Skills { get; set; }
[JsonProperty("stages")]
public List<string> Stages { get; set; }
public override string ToString()
{
return JsonConvert.SerializeObject((object)this);
}
}
public sealed class Member
{
[JsonProperty("team")]
public long Id { get; set; }
[JsonProperty("userId")]
public string UserId { get; set; }
}
public sealed class Race
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("lobbyCode")]
public string LobbyCode { get; set; }
[JsonProperty("password")]
public string Password { get; set; }
[JsonProperty("active")]
public bool Active { get; set; }
[JsonProperty("loadouts")]
public List<Loadout> Loadouts { get; set; }
[JsonProperty("members")]
public List<Member> Members { get; set; }
[JsonProperty("createTimestamp")]
public long CreateTimestamp { get; set; }
[JsonProperty("createUser")]
public string CreateUser { get; set; }
[JsonProperty("sanctioned")]
public bool Sanctioned { get; set; }
[JsonProperty("runSubmissions")]
public List<RunSubmission> RunSubmissions { get; set; }
public static Race FromJson(string json)
{
return JsonConvert.DeserializeObject<Race>(json, Converter.Settings);
}
public int GetCurrentLoadoutIndex(string userId)
{
if (RunSubmissions == null)
{
return 1;
}
List<RunSubmission> list = (from sub in RunSubmissions
where sub != null && sub.UserId == userId
orderby sub.LoadoutId
select sub).ToList();
if (list.Count() == 0)
{
return 1;
}
int num = 1;
for (int i = 0; i < list.Count(); i++)
{
int loadoutId = list[i].LoadoutId;
if (loadoutId > num)
{
return num;
}
if (i < list.Count - 1 && list[i + 1].LoadoutId - loadoutId > 1)
{
num = loadoutId + 1;
break;
}
num++;
}
return num;
}
}
public sealed class RunSubmission
{
[JsonProperty("loadoutId")]
public int LoadoutId { get; set; }
[JsonProperty("userId")]
public string UserId { get; set; }
[JsonProperty("runTime")]
public long RunTime { get; set; }
[JsonProperty("lazarusCount")]
public long LazarusCount { get; set; }
[JsonProperty("didConcede")]
public bool DidConcede { get; set; }
[JsonProperty("splitTimes")]
public List<long> SplitTimes { get; set; }
public static RunSubmission FromJson(string json)
{
return JsonConvert.DeserializeObject<RunSubmission>(json, Converter.Settings);
}
}
public static class Serializer
{
public static string ToJson(this Race self)
{
return JsonConvert.SerializeObject((object)self, Converter.Settings);
}
public static string ToJson(this User self)
{
return JsonConvert.SerializeObject((object)self, Converter.Settings);
}
public static string ToJson(this RunSubmission self)
{
return JsonConvert.SerializeObject((object)self, Converter.Settings);
}
public static string ToJson(this AuthInfo self)
{
return JsonConvert.SerializeObject((object)self, Converter.Settings);
}
}
internal static class Converter
{
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
{
MetadataPropertyHandling = (MetadataPropertyHandling)2,
DateParseHandling = (DateParseHandling)0,
Converters = { (JsonConverter)new IsoDateTimeConverter
{
DateTimeStyles = DateTimeStyles.AssumeUniversal
} }
};
}
public sealed class User
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("username")]
public string Username { get; set; }
[JsonProperty("pfp")]
public Uri Pfp { get; set; }
public static User FromJson(string json)
{
return JsonConvert.DeserializeObject<User>(json, Converter.Settings);
}
}
public sealed class UserInfo
{
[JsonProperty("user")]
public User User { get; set; }
[JsonProperty("auth")]
public AuthInfo Auth { get; set; }
}
public sealed class UserLoginResponse
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("auth_id")]
public string auth_id { get; set; }
[JsonProperty("username")]
public string Username { get; set; }
[JsonProperty("pfp")]
public Uri pfp { get; set; }
[JsonProperty("twitch_handle")]
public string twitchHandle { get; set; }
[JsonProperty("youtube_handle")]
public string youtubeHandle { get; set; }
[JsonProperty("sanctioned_admin")]
public bool sanctionedAdmin { get; set; }
public static UserLoginResponse FromJson(string json)
{
return JsonConvert.DeserializeObject<UserLoginResponse>(json, Converter.Settings);
}
}
internal sealed class RaceV2Api
{
private sealed class JoinLobbyRequest
{
public string Password { get; set; }
public int Team { get; set; }
}
[CompilerGenerated]
private static class <>O
{
public static hook_OnEnter <0>__onEnter;
}
[CompilerGenerated]
private sealed class <GetRaceById>d__9<T> : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public long id;
public RaceV2Api <>4__this;
public Action<T> onDone;
private UnityWebRequest <uwr>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <GetRaceById>d__9(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 1)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<uwr>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Invalid comparison between Unknown and I4
bool result2;
try
{
int num = <>1__state;
RaceV2Api raceV2Api = <>4__this;
switch (num)
{
default:
result2 = false;
break;
case 0:
{
<>1__state = -1;
string endpoint = EnvironmentService.Instance.GetEnvironment().Endpoint;
string text = $"{endpoint}/race?id={id}";
<uwr>5__2 = UnityWebRequest.Get(text);
<>1__state = -3;
raceV2Api.AddHeaders(<uwr>5__2);
<>2__current = <uwr>5__2.SendWebRequest();
<>1__state = 1;
result2 = true;
break;
}
case 1:
{
<>1__state = -3;
Result result = <uwr>5__2.result;
if (result - 2 <= 1)
{
raceV2Api._log.LogError((object)("Error trying to fetch race data : " + <uwr>5__2.error));
}
else
{
raceV2Api._log.LogInfo((object)("Updated race data fetched : " + <uwr>5__2.downloadHandler.text));
T obj = JsonConvert.DeserializeObject<T>(<uwr>5__2.downloadHandler.text, Converter.Settings);
onDone(obj);
}
result2 = false;
<>m__Finally1();
break;
}
}
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
return result2;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<uwr>5__2 != null)
{
((IDisposable)<uwr>5__2).Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <GetRaceData>d__10<T> : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string lobbyCode;
public RaceV2Api <>4__this;
public Action<T> onDone;
private UnityWebRequest <uwr>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <GetRaceData>d__10(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 2)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<uwr>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Invalid comparison between Unknown and I4
try
{
int num = <>1__state;
RaceV2Api raceV2Api = <>4__this;
string text;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
if (lobbyCode == null || lobbyCode.Length == 0)
{
raceV2Api._log.LogWarning((object)"Can't get race data from null or empty lobby code");
<>2__current = null;
<>1__state = 1;
return true;
}
goto IL_006f;
case 1:
<>1__state = -1;
goto IL_006f;
case 2:
{
<>1__state = -3;
Result result = <uwr>5__2.result;
if (result - 2 <= 1)
{
raceV2Api._log.LogError((object)("Error trying to fetch race data : " + <uwr>5__2.error));
}
else
{
raceV2Api._log.LogInfo((object)("Updated race data fetched : " + <uwr>5__2.downloadHandler.text));
T obj = JsonConvert.DeserializeObject<T>(<uwr>5__2.downloadHandler.text, Converter.Settings);
onDone(obj);
}
<>m__Finally1();
<uwr>5__2 = null;
return false;
}
IL_006f:
text = EnvironmentService.Instance.GetEnvironment().Endpoint + "/race/" + lobbyCode.ToUpper();
<uwr>5__2 = UnityWebRequest.Get(text);
<>1__state = -3;
raceV2Api.AddHeaders(<uwr>5__2);
<>2__current = <uwr>5__2.SendWebRequest();
<>1__state = 2;
return true;
}
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<uwr>5__2 != null)
{
((IDisposable)<uwr>5__2).Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <InvokeGetUsersCurrentRace>d__17<Race> : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public RaceV2Api <>4__this;
public Action<Race, string> onDone;
private UnityWebRequest <uwr>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <InvokeGetUsersCurrentRace>d__17(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 1)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<uwr>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Invalid comparison between Unknown and I4
try
{
int num = <>1__state;
RaceV2Api raceV2Api = <>4__this;
switch (num)
{
default:
return false;
case 0:
{
<>1__state = -1;
string text = EnvironmentService.Instance.GetEnvironment().Endpoint + "/race/current";
raceV2Api._log.LogDebug((object)("GetUsersCurrentRace endpoint " + text));
Debug.Log((object)("GetUsersCurrentRace endpoint " + text));
<uwr>5__2 = UnityWebRequest.Get(text);
<>1__state = -3;
raceV2Api.AddHeaders(<uwr>5__2);
<>2__current = <uwr>5__2.SendWebRequest();
<>1__state = 1;
return true;
}
case 1:
{
<>1__state = -3;
Result result = <uwr>5__2.result;
if (result - 2 <= 1)
{
raceV2Api._log.LogError((object)("Error trying to fetch race data : " + <uwr>5__2.error));
}
else
{
raceV2Api._log.LogInfo((object)("Updated race data fetched : " + <uwr>5__2.downloadHandler.text));
Race arg = JsonConvert.DeserializeObject<Race>(<uwr>5__2.downloadHandler.text, Converter.Settings);
string requestHeader = <uwr>5__2.GetRequestHeader("Authorization");
onDone(arg, requestHeader);
}
<>m__Finally1();
<uwr>5__2 = null;
return false;
}
}
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<uwr>5__2 != null)
{
((IDisposable)<uwr>5__2).Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <InvokeSignIn>d__12<T> : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string username;
public RaceV2Api <>4__this;
public Action<T> onDone;
private UnityWebRequest <uwr>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <InvokeSignIn>d__12(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 1)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<uwr>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Invalid comparison between Unknown and I4
try
{
int num = <>1__state;
RaceV2Api raceV2Api = <>4__this;
switch (num)
{
default:
return false;
case 0:
{
<>1__state = -1;
string text = EnvironmentService.Instance.GetEnvironment().Endpoint + "/user/" + username;
<uwr>5__2 = UnityWebRequest.Post(text, (string)null);
<>1__state = -3;
raceV2Api.AddHeaders(<uwr>5__2);
<>2__current = <uwr>5__2.SendWebRequest();
<>1__state = 1;
return true;
}
case 1:
{
<>1__state = -3;
Result result = <uwr>5__2.result;
if (result - 2 <= 1)
{
raceV2Api._log.LogError((object)("Error during login : " + <uwr>5__2.error));
}
else
{
raceV2Api._log.LogInfo((object)("Login success : " + <uwr>5__2.downloadHandler.text));
T obj = JsonConvert.DeserializeObject<T>(<uwr>5__2.downloadHandler.text, Converter.Settings);
onDone(obj);
}
<>m__Finally1();
<uwr>5__2 = null;
return false;
}
}
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<uwr>5__2 != null)
{
((IDisposable)<uwr>5__2).Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <InvokeSubmitRun>d__15 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public RaceV2Api <>4__this;
public RunSubmission runSubmission;
private UnityWebRequest <uwr>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <InvokeSubmitRun>d__15(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 1)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<uwr>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Invalid comparison between Unknown and I4
//IL_0130: Unknown result type (might be due to invalid IL or missing references)
try
{
int num = <>1__state;
RaceV2Api raceV2Api = <>4__this;
switch (num)
{
default:
return false;
case 0:
{
<>1__state = -1;
string lobbyCode = LoadoutHandler.Instance.Race.LobbyCode;
string text = EnvironmentService.Instance.GetEnvironment().Endpoint + "/race/" + lobbyCode + "/submitRun";
raceV2Api._log.LogDebug((object)("Submit endpoint " + text));
string text2 = JsonConvert.SerializeObject((object)runSubmission);
raceV2Api._log.LogDebug((object)("post data : " + text2));
<uwr>5__2 = UnityWebRequest.Put(text, text2);
<>1__state = -3;
raceV2Api.AddHeaders(<uwr>5__2);
<>2__current = <uwr>5__2.SendWebRequest();
<>1__state = 1;
return true;
}
case 1:
{
<>1__state = -3;
Result result = <uwr>5__2.result;
if (result - 2 <= 1)
{
raceV2Api._log.LogError((object)("Error while submitting run : " + <uwr>5__2.error));
raceV2Api._log.LogError((object)$"getError : {<uwr>5__2.GetError()}");
foreach (KeyValuePair<string, string> responseHeader in <uwr>5__2.GetResponseHeaders())
{
raceV2Api._log.LogError((object)("Response header > " + responseHeader.Key + " : " + responseHeader.Value));
}
}
else
{
raceV2Api._log.LogInfo((object)("Submit completed: " + <uwr>5__2.downloadHandler.text));
}
<>m__Finally1();
<uwr>5__2 = null;
return false;
}
}
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<uwr>5__2 != null)
{
((IDisposable)<uwr>5__2).Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <JoinLobby>d__7 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public RaceV2Api <>4__this;
public string lobbyCode;
public string lobbyPassword;
public int team;
public Action<Race> onDone;
private UnityWebRequest <uwr>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <JoinLobby>d__7(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
int num = <>1__state;
if (num == -3 || num == 1)
{
try
{
}
finally
{
<>m__Finally1();
}
}
<uwr>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Invalid comparison between Unknown and I4
bool result2;
try
{
int num = <>1__state;
RaceV2Api raceV2Api = <>4__this;
switch (num)
{
default:
result2 = false;
break;
case 0:
{
<>1__state = -1;
raceV2Api._log.LogInfo((object)("JoinLobby(" + lobbyCode.ToUpper() + ")"));
string text = EnvironmentService.Instance.GetEnvironment().Endpoint + "/race/" + lobbyCode + "/join";
JoinLobbyRequest joinLobbyRequest = new JoinLobbyRequest
{
Password = lobbyPassword,
Team = team
};
<uwr>5__2 = UnityWebRequest.Put(text, JsonConvert.SerializeObject((object)joinLobbyRequest));
<>1__state = -3;
raceV2Api.AddHeaders(<uwr>5__2);
<>2__current = <uwr>5__2.SendWebRequest();
<>1__state = 1;
result2 = true;
break;
}
case 1:
{
<>1__state = -3;
Result result = <uwr>5__2.result;
if (result - 2 <= 1)
{
raceV2Api._log.LogError((object)("Error while joining lobby : " + <uwr>5__2.error));
Debug.Log((object)("Error while joining lobby : " + <uwr>5__2.error));
}
else
{
Race race = JsonConvert.DeserializeObject<Race>(<uwr>5__2.downloadHandler.text, Converter.Settings);
LoadoutHandler.Instance.RegisterRace(race);
Debug.Log((object)("Joined lobby '" + lobbyCode + "'"));
onDone(race);
}
result2 = false;
<>m__Finally1();
break;
}
}
}
catch
{
//try-fault
((IDisposable)this).Dispose();
throw;
}
return result2;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
private void <>m__Finally1()
{
<>1__state = -1;
if (<uwr>5__2 != null)
{
((IDisposable)<uwr>5__2).Dispose();
}
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
private readonly ManualLogSource _log = Logger.CreateLogSource("RoResV2Api");
public static RaceV2Api Instance { get; } = new RaceV2Api();
private void AddHeaders(UnityWebRequest uwr)
{
string apiKey = EnvironmentService.Instance.GetEnvironment().ApiKey;
uwr.SetRequestHeader("x-api-key", apiKey);
uwr.SetRequestHeader("Content-Type", "application/json");
if (!string.IsNullOrEmpty(Main.instance.authorization))
{
uwr.SetRequestHeader("Authorization", Main.instance.authorization ?? "");
}
}
public void SignIn(string username)
{
Debug.Log((object)("SignIn(" + username + ")"));
((MonoBehaviour)Main.instance).StartCoroutine(InvokeSignIn(username, delegate(User u)
{
Debug.Log((object)("Received user Id : " + u.Id));
Main.UserId.Value = u.Id;
}));
}
public Task SignInWeb()
{
if (WebService.Instance.NegotiatedPort > 0)
{
TaskCompletionSource<object> tcs = new TaskCompletionSource<object>();
string webUrl = EnvironmentService.Instance.GetEnvironment().WebUrl;
Application.OpenURL($"{webUrl}/authorize?callback=http://localhost:{WebService.Instance.NegotiatedPort}/");
WebService.Instance.SignedIn += delegate
{
tcs.TrySetResult(null);
};
return tcs.Task;
}
return Task.Run(async delegate
{
UserInfo userInfo = await InvokeSignInWeb();
if (Debug.IsLoggingEnabled())
{
Debug.LogWarning((object)("Received user Id from web: " + userInfo.User.Id));
}
Debug.LogWarning((object)("Login successful: " + userInfo.User.Username));
string authorization = Convert.ToBase64String(Encoding.UTF8.GetBytes(userInfo.Auth.ToJson())).Replace("=", "");
Main.instance.authorization = authorization;
Main.UserId.Value = userInfo.User.Id;
});
}
[IteratorStateMachine(typeof(<JoinLobby>d__7))]
public IEnumerator JoinLobby(string lobbyCode, string lobbyPassword, Action<Race> onDone, int team = 0)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <JoinLobby>d__7(0)
{
<>4__this = this,
lobbyCode = lobbyCode,
lobbyPassword = lobbyPassword,
onDone = onDone,
team = team
};
}
public void AuditLobby(long id)
{
((MonoBehaviour)Main.instance).StartCoroutine(Instance.GetRaceById(id, delegate(Race race)
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Expected O, but got Unknown
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Expected O, but got Unknown
LoadoutHandler.Instance.RegisterRace(race);
if (Object.op_Implicit((Object)(object)MainMenuController.instance))
{
Console.instance.SubmitCmd((NetworkUser)null, "transition_command \"gamemode ClassicRun; host 0; \"", false);
}
else
{
object obj2 = <>O.<0>__onEnter;
if (obj2 == null)
{
hook_OnEnter val2 = onEnter;
<>O.<0>__onEnter = val2;
obj2 = (object)val2;
}
BaseMainMenuScreen.OnEnter -= (hook_OnEnter)obj2;
object obj3 = <>O.<0>__onEnter;
if (obj3 == null)
{
hook_OnEnter val3 = onEnter;
<>O.<0>__onEnter = val3;
obj3 = (object)val3;
}
BaseMainMenuScreen.OnEnter += (hook_OnEnter)obj3;
Console.instance.SubmitCmd((NetworkUser)null, "transition_command \"disconnect; \"", false);
}
Debug.Log((object)$"Auditing lobby: {id}");
}));
static void onEnter(orig_OnEnter orig, BaseMainMenuScreen self, MainMenuController controller)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Expected O, but got Unknown
orig.Invoke(self, controller);
Console.instance.SubmitCmd((NetworkUser)null, "transition_command \"gamemode ClassicRun; host 0; \"", false);
object obj = <>O.<0>__onEnter;
if (obj == null)
{
hook_OnEnter val = onEnter;
<>O.<0>__onEnter = val;
obj = (object)val;
}
BaseMainMenuScreen.OnEnter -= (hook_OnEnter)obj;
}
}
[IteratorStateMachine(typeof(<GetRaceById>d__9<>))]
private IEnumerator GetRaceById<T>(long id, Action<T> onDone)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <GetRaceById>d__9<T>(0)
{
<>4__this = this,
id = id,
onDone = onDone
};
}
[IteratorStateMachine(typeof(<GetRaceData>d__10<>))]
public IEnumerator GetRaceData<T>(string lobbyCode, Action<T> onDone)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <GetRaceData>d__10<T>(0)
{
<>4__this = this,
lobbyCode = lobbyCode,
onDone = onDone
};
}
public void SubmitRun(RunSubmission runSubmission)
{
_log.LogInfo((object)("SubmitRun(" + runSubmission.ToJson() + ")"));
((MonoBehaviour)Main.instance).StartCoroutine(InvokeSubmitRun(runSubmission));
}
[IteratorStateMachine(typeof(<InvokeSignIn>d__12<>))]
private IEnumerator InvokeSignIn<T>(string username, Action<T> onDone)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <InvokeSignIn>d__12<T>(0)
{
<>4__this = this,
username = username,
onDone = onDone
};
}
private async Task<UserInfo> InvokeSignInWeb()
{
using HttpListener listener = new HttpListener();
bool flag = false;
int i;
for (i = 49152; i < 65536 && !flag; i++)
{
try
{
listener.Prefixes.Add($"http://*:{i}/");
listener.Start();
flag = true;
if (Debug.IsLoggingEnabled())
{
Debug.Log((object)$"Listening for user on port {i}");
}
}
catch (Exception ex)
{
listener.Prefixes.Clear();
if (Debug.IsLoggingEnabled())
{
Debug.Log((object)$"Couldn't bind port: {i}. {ex.Message}");
}
continue;
}
break;
}
string webUrl = EnvironmentService.Instance.GetEnvironment().WebUrl;
Application.OpenURL($"{webUrl}/authorize?callback=http://localhost:{i}/");
string origin;
if (flag)
{
Debug.Log((object)"Check for browser opening!");
Debug.Log((object)$"If the browser doesn't open automatically you should open {webUrl}/authorize?callback=http://localhost:{i}/");
HttpListenerContext httpListenerContext = await listener.GetContextAsync();
origin = httpListenerContext.Request.Headers.Get("origin");
if (httpListenerContext.Request.HttpMethod == HttpMethod.Options.Method)
{
addCorsHeaders(httpListenerContext.Response);
httpListenerContext.Response.OutputStream.Close();
httpListenerContext = await listener.GetContextAsync();
}
addCorsHeaders(httpListenerContext.Response);
if (httpListenerContext.Request.HttpMethod == HttpMethod.Post.Method && httpListenerContext.Request.ContentType == "application/json")
{
using (StreamReader reader = new StreamReader(httpListenerContext.Request.InputStream, httpListenerContext.Request.ContentEncoding))
{
return JsonConvert.DeserializeObject<UserInfo>(await reader.ReadToEndAsync());
}
}
Debug.Log((object)"Response was not Json");
}
else if (Debug.IsLoggingEnabled())
{
Debug.LogError((object)"Failed to start the server.");
}
return null;
void addCorsHeaders(HttpListenerResponse response)
{
if (origin != null && (origin.EndsWith("riskofresources.com") || origin.EndsWith("localhost")))
{
response.AddHeader("Access-Control-Allow-Headers", "Authorization,Content-Type");
response.AddHeader("Access-Control-Allow-Methods", "POST,OPTIONS");
response.AddHeader("Access-Control-Allow-Origin", origin);
}
}
}
[IteratorStateMachine(typeof(<InvokeSubmitRun>d__15))]
public IEnumerator InvokeSubmitRun(RunSubmission runSubmission)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <InvokeSubmitRun>d__15(0)
{
<>4__this = this,
runSubmission = runSubmission
};
}
public void JoinCurrentRace(Action<Race> onDone)
{
((MonoBehaviour)Main.instance).StartCoroutine(InvokeGetUsersCurrentRace(delegate(Race race, string auth)
{
Main.instance.authorization = auth;
LoadoutHandler.Instance.RegisterRace(race);
Debug.Log((object)$"Race successfully received : {race}");
Debug.Log((object)("Joined lobby '" + race.LobbyCode + "'"));
onDone(race);
}));
}
[IteratorStateMachine(typeof(<InvokeGetUsersCurrentRace>d__17<>))]
private IEnumerator InvokeGetUsersCurrentRace<Race>(Action<Race, string> onDone)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <InvokeGetUsersCurrentRace>d__17<Race>(0)
{
<>4__this = this,
onDone = onDone
};
}
}
internal sealed class EnvironmentService
{
private readonly ManualLogSource _log = Logger.CreateLogSource("EnvironmentService");
private readonly Dictionary<string, Environment> _environmentMap = new Dictionary<string, Environment>();
public static EnvironmentService Instance { get; } = new EnvironmentService();
private EnvironmentService()
{
Environment value = new Environment("http://example.com/endpoint", "not-a-real-api-key", "https://riskofresources.com");
Environment value2 = new Environment("https://riskofresources.com/apply?dev=true", "Hey, you! Join the team at: riskofresources.com/apply", "https://dev.riskofresources.com");
Environment value3 = new Environment("http://127.0.0.1:3000/", "We're always looking for more developers!", "http://localhost:3001");
_environmentMap.Add("prd", value);
_environmentMap.Add("dev", value2);
_environmentMap.Add("dbg", value3);
}
public Environment GetEnvironment()
{
string value = Main.EnvironmentName.Value;
try
{
return _environmentMap[value];
}
catch (KeyNotFoundException ex)
{
_log.LogError((object)ex.StackTrace);
_log.LogError((object)("Environment '" + value + "' not found; returning first available"));
return _environmentMap.Values.ToList().First();
}
}
}
internal sealed class Environment
{
public readonly string Endpoint;
public readonly string ApiKey;
public readonly string WebUrl;
public Environment(string endpoint, string apiKey, string webUrl)
{
Endpoint = endpoint;
ApiKey = apiKey;
WebUrl = webUrl;
}
}
}
namespace RoRGauntlet
{
public sealed class AntiCheat : MonoBehaviour
{
private Harmony _harmonyInstance;
private void OnEnable()
{
if (Chainloader.PluginInfos.ContainsKey("iHarbHD.DebugToolkit"))
{
_harmonyInstance = Harmony.CreateAndPatchAll(typeof(AntiCheat), (string)null);
}
}
private void OnDisable()
{
Harmony harmonyInstance = _harmonyInstance;
if (harmonyInstance != null)
{
harmonyInstance.UnpatchSelf();
}
_harmonyInstance = null;
}
[HarmonyPatch(typeof(MacroSystem), "Update")]
[HarmonyPrefix]
private static bool CheckForKeyDown()
{
return !(LoadoutHandler.Instance.Race?.Sanctioned ?? false);
}
}
internal static class Assets
{
public static GameObject lazarusResurrectionEffect;
public static List<Material> swappedMaterials = new List<Material>();
public static void Initialize(string infoLocation)
{
try
{
PopulateAssets(infoLocation);
}
catch (Exception arg)
{
Debug.LogWarning((object)$"Failed to populate assets: {arg}");
}
}
private static void PopulateAssets(string infoLocation)
{
AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(infoLocation) ?? string.Empty, "riskofresourcesassets"));
lazarusResurrectionEffect = val.LoadAsset<GameObject>("LazarusWingsRez");
if (!ContentAddition.AddEffect(lazarusResurrectionEffect))
{
Log.Error("lazarusResurrectionEffect is not valid.", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\Assets.cs", "PopulateAssets", 35);
return;
}
Material[] array = (from mat in val.LoadAllAssets<Material>()
where ((Object)mat.shader).name.StartsWith("Stubbed")
select mat).ToArray();
foreach (Material val2 in array)
{
if (!((Object)val2.shader).name.StartsWith("Stubbed"))
{
Log.Warning($"The material {val2} is invalid.", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\Assets.cs", "PopulateAssets", 45);
continue;
}
try
{
SwapShader(val2);
}
catch (Exception arg)
{
Log.Error($"Failed to swap shader of material {val2}: {arg}", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\Assets.cs", "PopulateAssets", 55);
}
}
}
private static void SwapShader(Material material)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
Shader shader = Addressables.LoadAssetAsync<Shader>((object)(((Object)material.shader).name.Substring("Stubbed".Length) + ".shader")).WaitForCompletion();
material.shader = shader;
if (((Object)material.shader).name.Contains("Cloud Remap"))
{
Material val = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Common/VFX/matLightningLongBlue.mat").WaitForCompletion();
RuntimeCloudMaterialMapper runtimeCloudMaterialMapper = new RuntimeCloudMaterialMapper(material);
material.CopyPropertiesFromMaterial(val);
runtimeCloudMaterialMapper.SetMaterialValues(ref material);
}
swappedMaterials.Add(material);
}
}
public sealed class BenthicBloomSeeding : MonoBehaviour
{
private delegate bool TryOverrideTransformedItemDelegate(ItemIndex itemToTransform, CharacterMaster master, ref ItemDef transformedItem);
private BenthicBloomTransformationProvider _bloomTransformationProvider;
private void OnEnable()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
RunHooks.OnRunPostStartGlobal += onRunPostStartGlobal;
CharacterMaster.TryCloverVoidUpgrades += new Manipulator(CharacterMaster_TryCloverVoidUpgrades);
}
private void OnDisable()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
RunHooks.OnRunPostStartGlobal -= onRunPostStartGlobal;
CharacterMaster.TryCloverVoidUpgrades -= new Manipulator(CharacterMaster_TryCloverVoidUpgrades);
}
private void onRunPostStartGlobal(Run run)
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Expected O, but got Unknown
Xoroshiro128Plus val = new Xoroshiro128Plus(run.seed ^ 0x3EABE82DFA7uL);
_bloomTransformationProvider = new BenthicBloomTransformationProvider(val.nextUlong, run);
}
private void CharacterMaster_TryCloverVoidUpgrades(ILContext il)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Expected O, but got Unknown
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_0254: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_026d: Unknown result type (might be due to invalid IL or missing references)
//IL_0292: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
int transformableItemsLocalIndex = -1;
ILCursor[] array = default(ILCursor[]);
if (!val.TryFindNext(ref array, new Func<Instruction, bool>[3]
{
(Instruction x) => ILPatternMatchingExt.MatchLdfld<Inventory>(x, "itemAcquisitionOrder"),
(Instruction x) => ILPatternMatchingExt.MatchNewobj<List<ItemIndex>>(x),
(Instruction x) => x.MatchStloc(typeof(List<ItemIndex>), il, out transformableItemsLocalIndex)
}))
{
Log.Error("Failed to find transformable items list local index", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\BenthicBloomSeeding.cs", "CharacterMaster_TryCloverVoidUpgrades", 49);
return;
}
if (!val.TryFindNext(ref array, new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, transformableItemsLocalIndex),
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)typeof(List<ItemIndex>).GetProperty("Item").GetMethod)
}))
{
Log.Error("Failed to find transformable items shuffle patch location", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\BenthicBloomSeeding.cs", "CharacterMaster_TryCloverVoidUpgrades", 57);
return;
}
val.Goto(array[1].Next, (MoveType)2, false);
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Func<ItemIndex, CharacterMaster, ItemIndex>>((Func<ItemIndex, CharacterMaster, ItemIndex>)getNextItemToTransform);
VariableDefinition val2 = il.AddVariable<ItemIndex>();
val.Emit(OpCodes.Dup);
val.Emit(OpCodes.Stloc, val2);
if (!val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)typeof(List<PickupIndex>).GetMethod("Sort", new Type[1] { typeof(Comparison<PickupIndex>) }))
}))
{
Log.Error("Failed to find transform item selection location", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\BenthicBloomSeeding.cs", "CharacterMaster_TryCloverVoidUpgrades", 71);
return;
}
int availableTransformedItemsLocalIndex = -1;
ILCursor[] array2 = default(ILCursor[]);
if (!val.TryFindPrev(ref array2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref availableTransformedItemsLocalIndex) && Extensions.Is((MemberReference)(object)((VariableReference)il.Body.Variables[availableTransformedItemsLocalIndex]).VariableType, (MemberInfo)typeof(List<PickupIndex>))
}))
{
Log.Error("Failed to find available transformed items list local index", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\BenthicBloomSeeding.cs", "CharacterMaster_TryCloverVoidUpgrades", 79);
return;
}
int transformedItemDefLocalIndex = -1;
if (!val.TryFindNext(ref array2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref transformedItemDefLocalIndex) && Extensions.Is((MemberReference)(object)((VariableReference)il.Body.Variables[transformedItemDefLocalIndex]).VariableType, (MemberInfo)typeof(ItemDef))
}))
{
Log.Error("Failed to find transformed item def local index", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\BenthicBloomSeeding.cs", "CharacterMaster_TryCloverVoidUpgrades", 87);
return;
}
ILLabel afterSelectTransformedItemLabel = null;
if (!val.TryGotoPrev((MoveType)1, new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, availableTransformedItemsLocalIndex),
(Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref afterSelectTransformedItemLabel)
}))
{
Log.Error("Failed to find transformed item select patch location", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\BenthicBloomSeeding.cs", "CharacterMaster_TryCloverVoidUpgrades", 96);
return;
}
val.Emit(OpCodes.Ldloc, val2);
val.Emit(OpCodes.Ldarg_0);
val.Emit(OpCodes.Ldloca, transformedItemDefLocalIndex);
val.EmitDelegate<<>F{00000040}<ItemIndex, CharacterMaster, ItemDef, bool>>((<>F{00000040}<ItemIndex, CharacterMaster, ItemDef, bool>)tryOverrideTransformedItem);
val.Emit(OpCodes.Brtrue, (object)afterSelectTransformedItemLabel);
}
private static bool shouldSeed(CharacterMaster master)
{
if (Object.op_Implicit((Object)(object)master) && Object.op_Implicit((Object)(object)master.inventory))
{
return Object.op_Implicit((Object)(object)master.playerCharacterMasterController);
}
return false;
}
private ItemIndex getNextItemToTransform(ItemIndex itemToTransform, CharacterMaster master)
{
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
if (shouldSeed(master) && _bloomTransformationProvider != null)
{
if (!_bloomTransformationProvider.TryGetNextItemToTake(master.inventory.itemAcquisitionOrder, out var nextItemToTake))
{
nextItemToTake = itemToTransform;
foreach (ItemIndex item in master.inventory.itemAcquisitionOrder)
{
if (!_bloomTransformationProvider.IsValidItemToTake(item))
{
nextItemToTake = item;
break;
}
}
}
itemToTransform = nextItemToTake;
}
return itemToTransform;
}
private bool tryOverrideTransformedItem(ItemIndex itemToTransform, CharacterMaster master, ref ItemDef transformedItem)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
if (!shouldSeed(master))
{
return false;
}
if (_bloomTransformationProvider == null)
{
return false;
}
if (!_bloomTransformationProvider.TryGetNextTransformation(itemToTransform, out var transformation))
{
transformation = (ItemIndex)(-1);
}
transformedItem = ItemCatalog.GetItemDef(transformation);
return true;
}
}
public sealed class BenthicBloomTransformationProvider
{
private static ItemIndex[] _availableInputItems = Array.Empty<ItemIndex>();
private readonly Dictionary<ItemTier, OrderedTransformationGenerator<ItemIndex>> _tierTransformationGenerators;
private readonly OrderedTransformationGenerator<ItemIndex> _itemTakeOrderGenerator;
[SystemInitializer(new Type[] { typeof(ItemCatalog) })]
private static void Init()
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
_availableInputItems = (from item in (IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs
where Object.op_Implicit((Object)(object)item) && ((int)item.tier == 0 || (int)item.tier == 1)
select item.itemIndex).ToArray();
}
public BenthicBloomTransformationProvider(ulong seed, Run run)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Expected O, but got Unknown
Xoroshiro128Plus val = new Xoroshiro128Plus(seed);
_itemTakeOrderGenerator = new OrderedTransformationGenerator<ItemIndex>(val.nextUlong, (IEnumerable<ItemIndex>)_availableInputItems);
_tierTransformationGenerators = new Dictionary<ItemTier, OrderedTransformationGenerator<ItemIndex>>
{
{
(ItemTier)0,
new OrderedTransformationGenerator<ItemIndex>(val.nextUlong, dropListToItemIndices(run.availableTier2DropList))
},
{
(ItemTier)1,
new OrderedTransformationGenerator<ItemIndex>(val.nextUlong, dropListToItemIndices(run.availableTier3DropList))
}
};
static IEnumerable<ItemIndex> dropListToItemIndices(IEnumerable<PickupIndex> pickupIndices)
{
return from pickupIndex in pickupIndices
select (ItemIndex)(((??)PickupCatalog.GetPickupDef(pickupIndex)?.itemIndex) ?? (-1)) into i
where (int)i != -1
select i;
}
}
public bool IsValidItemToTake(ItemIndex itemIndex)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return _itemTakeOrderGenerator.Contains(itemIndex);
}
public bool TryGetNextItemToTake(ICollection<ItemIndex> availableItems, out ItemIndex nextItemToTake)
{
if (!availableItems.Any(IsValidItemToTake))
{
nextItemToTake = (ItemIndex)(-1);
return false;
}
return _itemTakeOrderGenerator.TryGetNextTransformation(availableItems.Contains, out nextItemToTake);
}
public bool TryGetNextTransformation(ItemIndex original, out ItemIndex transformation)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
ItemDef originalItemDef = ItemCatalog.GetItemDef(original);
if (!Object.op_Implicit((Object)(object)originalItemDef))
{
transformation = (ItemIndex)(-1);
return false;
}
if (!_tierTransformationGenerators.TryGetValue(originalItemDef.tier, out var value))
{
transformation = (ItemIndex)(-1);
return false;
}
if (!value.TryGetNextTransformation(matchTags, out transformation))
{
return value.TryGetNextTransformation(out transformation);
}
return true;
bool matchTags(ItemIndex itemIndex)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
ItemDef itemDef = ItemCatalog.GetItemDef(itemIndex);
if (!Object.op_Implicit((Object)(object)itemDef))
{
return false;
}
bool num = originalItemDef.ContainsTag((ItemTag)1) && itemDef.ContainsTag((ItemTag)1);
bool flag = originalItemDef.ContainsTag((ItemTag)2) && itemDef.ContainsTag((ItemTag)2);
bool flag2 = originalItemDef.ContainsTag((ItemTag)3) && itemDef.ContainsTag((ItemTag)3);
return num || flag || flag2;
}
}
}
public sealed class ConcedeService
{
private static void ShowConcedeNotAllowed(PauseScreenController pauseScreen)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
SimpleDialogBox obj = SimpleDialogBox.Create((MPEventSystem)null);
obj.headerToken = new TokenParamsPair("No times submitted", Array.Empty<object>());
string text = "You cannot concede as nobody has submitted a time yet";
if (pauseScreen == null)
{
text += " Use info screen button (usually tab/select) to move cursor.";
}
obj.descriptionToken = new TokenParamsPair(text, Array.Empty<object>());
obj.AddCancelButton("Cancel", Array.Empty<object>());
}
private static void ShowConcedeConfirmationDialog(PauseScreenController pauseScreen)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Expected O, but got Unknown
SimpleDialogBox obj = SimpleDialogBox.Create((MPEventSystem)null);
obj.headerToken = new TokenParamsPair("Are you sure?", Array.Empty<object>());
string text = "Are you sure you want to concede this run?";
if (pauseScreen == null)
{
text += " Use info screen button (usually tab/select) to move cursor.";
}
obj.descriptionToken = new TokenParamsPair(text, Array.Empty<object>());
obj.AddActionButton((UnityAction)delegate
{
ActuallyConcedeGame(pauseScreen);
}, "Yes", true, Array.Empty<object>());
obj.AddCancelButton("Cancel", Array.Empty<object>());
}
private static void ActuallyConcedeGame(PauseScreenController pauseScreen)
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)pauseScreen))
{
Object.Destroy((Object)(object)((Component)pauseScreen).gameObject);
}
if (Object.op_Implicit((Object)(object)Run.instance))
{
Main.ConcedeCheck = true;
GameEndingDef val = ScriptableObject.CreateInstance<GameEndingDef>();
val.isWin = false;
val.showCredits = false;
val.lunarCoinReward = 0u;
RunReport.Generate(Run.instance, val);
Run.CCRunEnd(default(ConCommandArgs));
Main.ConcedeCheck = false;
}
}
public void ConcedeGame(PauseScreenController pauseScreen)
{
string lobbyCode = LoadoutHandler.Instance.Race.LobbyCode;
int currentLoadout = Main.CurrentLoadout.Value;
((MonoBehaviour)Main.instance).StartCoroutine(RaceV2Api.Instance.GetRaceData(lobbyCode, delegate(Race race)
{
if (!race.Sanctioned)
{
ShowConcedeConfirmationDialog(pauseScreen);
}
else
{
List<RunSubmission> list = (from s in race.RunSubmissions ?? new List<RunSubmission>()
where s != null
where s.LoadoutId == currentLoadout
select s).ToList();
if (SimpleDialogBox.instancesList.Count <= 0)
{
if (list.Count > 0)
{
Log.Info("Found submission(s) from other player(s); concede is allowed", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\ConcedeService.cs", "ConcedeGame", 90);
ShowConcedeConfirmationDialog(pauseScreen);
}
else
{
Log.Info("Can't concede when no other players have submitted their run", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\ConcedeService.cs", "ConcedeGame", 95);
ShowConcedeNotAllowed(pauseScreen);
}
}
}
}));
}
}
public sealed class ConcedeUI : MonoBehaviour
{
private readonly ConcedeService _concedeService = new ConcedeService();
public void OnEnable()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
PauseScreenController.Awake += new hook_Awake(PauseScreenControllerOnAwake);
}
public void OnDisable()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
PauseScreenController.Awake -= new hook_Awake(PauseScreenControllerOnAwake);
}
private void PauseScreenControllerOnAwake(orig_Awake orig, PauseScreenController self)
{
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Expected O, but got Unknown
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Expected O, but got Unknown
orig.Invoke(self);
ButtonSkinController componentInChildren = ((Component)self).GetComponentInChildren<ButtonSkinController>();
if (!Object.op_Implicit((Object)(object)componentInChildren))
{
Debug.LogWarning((object)"Failed to get button skin controller");
return;
}
GameObject gameObject = ((Component)componentInChildren).gameObject;
GameObject obj = Object.Instantiate<GameObject>(gameObject, gameObject.transform.parent);
((Object)obj).name = "Concede Button";
LanguageTextMeshController val = default(LanguageTextMeshController);
if (obj.TryGetComponent<LanguageTextMeshController>(ref val))
{
val.token = "Concede Run";
}
HGButton val2 = default(HGButton);
if (!obj.TryGetComponent<HGButton>(ref val2))
{
Debug.LogWarning((object)"Failed to setup concede button");
Object.Destroy((Object)(object)gameObject);
return;
}
((Button)val2).onClick = new ButtonClickedEvent();
((UnityEvent)((Button)val2).onClick).AddListener((UnityAction)delegate
{
_concedeService.ConcedeGame(self);
});
}
}
public sealed class ConfigurablePillars : MonoBehaviour
{
[CompilerGenerated]
private static class <>O
{
public static hook_Awake <0>__OnMoonBatteryMissionControllerOnAwake;
}
private void OnEnable()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
object obj = <>O.<0>__OnMoonBatteryMissionControllerOnAwake;
if (obj == null)
{
hook_Awake val = OnMoonBatteryMissionControllerOnAwake;
<>O.<0>__OnMoonBatteryMissionControllerOnAwake = val;
obj = (object)val;
}
MoonBatteryMissionController.Awake += (hook_Awake)obj;
}
private void OnDisable()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
object obj = <>O.<0>__OnMoonBatteryMissionControllerOnAwake;
if (obj == null)
{
hook_Awake val = OnMoonBatteryMissionControllerOnAwake;
<>O.<0>__OnMoonBatteryMissionControllerOnAwake = val;
obj = (object)val;
}
MoonBatteryMissionController.Awake -= (hook_Awake)obj;
}
private static void OnMoonBatteryMissionControllerOnAwake(orig_Awake orig, MoonBatteryMissionController self)
{
orig.Invoke(self);
self._numRequiredBatteries = Main.PillarNum.Value;
}
}
internal static class DebugCommands
{
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void NextLoadout(ConCommandArgs args)
{
if (Main.CurrentLoadout.Value < LoadoutHandler.Instance.GetLoadouts().Count - 1)
{
ConfigEntry<int> currentLoadout = Main.CurrentLoadout;
int value = currentLoadout.Value;
currentLoadout.Value = value + 1;
}
Log.Info("Progressed to loadout " + Main.CurrentLoadout.Value, "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\Configuration\\DebugCommands.cs", "NextLoadout", 15);
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void SetLoadout(ConCommandArgs args)
{
Main.CurrentLoadout.Value = ((ConCommandArgs)(ref args)).GetArgInt(0);
Debug.Log((object)$"Loadout number has been set to : {Main.CurrentLoadout.Value}");
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void SetDifficulty(ConCommandArgs args)
{
string argString = ((ConCommandArgs)(ref args)).GetArgString(0);
string[] obj = new string[12]
{
"Eclipse8", "Eclipse7", "Eclipse6", "Eclipse5", "Eclipse4", "Eclipse3", "Eclipse2", "Eclipse1", "Hard", "Normal",
"Easy", "Any"
};
bool flag = false;
string[] array = obj;
foreach (string text in array)
{
if (argString == text)
{
flag = true;
}
}
if (flag)
{
Main.DifficultySelect.Value = argString;
Log.Info("Set difficulty config to to " + argString, "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\Configuration\\DebugCommands.cs", "SetDifficulty", 45);
}
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void ListNameTokens(ConCommandArgs args)
{
Debug.Log((object)"Available Survivor Tokens");
foreach (SurvivorDef allSurvivorDef in SurvivorCatalog.allSurvivorDefs)
{
Debug.Log((object)allSurvivorDef.displayNameToken);
}
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void SubmitRun(ConCommandArgs args)
{
SubmitRun componentInChildren = ((Component)Main.instance).GetComponentInChildren<SubmitRun>(true);
if (componentInChildren.RunSubmission != null)
{
RaceV2Api.Instance.SubmitRun(componentInChildren.RunSubmission);
}
else
{
Debug.LogWarning((object)"No run submission found");
}
}
}
internal static class SetupCommands
{
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void SignIn(ConCommandArgs args)
{
LogEnv();
RaceV2Api instance = RaceV2Api.Instance;
string text = ((ConCommandArgs)(ref args)).TryGetArgString(0);
if (string.IsNullOrEmpty(text))
{
instance.SignInWeb();
}
else
{
instance.SignIn(text);
}
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void SetEnvironment(ConCommandArgs args)
{
LogEnv();
string text = ((ConCommandArgs)(ref args)).GetArgString(0).ToLower();
Main.EnvironmentName.Value = text;
if (!text.Equals("prd") && !text.Equals("dev") && !text.Equals("dbg"))
{
Debug.LogError((object)"Invalid environment. Use 'prd' or 'dev'");
}
else
{
Debug.Log((object)("Environment set to : " + text));
}
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void SetTeam(ConCommandArgs args)
{
LogEnv();
int argInt = ((ConCommandArgs)(ref args)).GetArgInt(0);
Log.Info($"Team number has been set to : {argInt}", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\Configuration\\SetupCommands.cs", "SetTeam", 48);
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static async void JoinRace(ConCommandArgs args)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
LogEnv();
RaceV2Api instance = RaceV2Api.Instance;
string lobbyCode = ((ConCommandArgs)(ref args)).TryGetArgString(0);
int? team = ((ConCommandArgs)(ref args)).TryGetArgInt(1);
string password = ((ConCommandArgs)(ref args)).TryGetArgString(2);
bool flag = string.IsNullOrEmpty(Main.UserId.Value) || string.IsNullOrEmpty(Main.instance.authorization);
if (string.IsNullOrEmpty(lobbyCode))
{
if (flag)
{
Debug.Log((object)"Can't join active lobby without a user ID; please `sign_in` first");
return;
}
Debug.Log((object)"Joining current race");
instance.JoinCurrentRace(delegate(Race race)
{
LoadoutHandler.Instance.RegisterRace(race);
Console.instance.SubmitCmd((NetworkUser)null, "transition_command \"gamemode ClassicRun; host 0; \"", false);
});
return;
}
if (flag)
{
Debug.Log((object)"No user session: signing in first");
await instance.SignInWeb();
}
((MonoBehaviour)Main.instance).StartCoroutine(instance.JoinLobby(lobbyCode, password, delegate(Race race)
{
LoadoutHandler.Instance.RegisterRace(race);
Console.instance.SubmitCmd((NetworkUser)null, "transition_command \"gamemode ClassicRun; host 0; \"", false);
}, team.GetValueOrDefault(0)));
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void AuditRace(ConCommandArgs args)
{
RaceV2Api instance = RaceV2Api.Instance;
ulong argULong = ((ConCommandArgs)(ref args)).GetArgULong(0);
instance.AuditLobby((long)argULong);
}
[ConCommand(/*Could not decode attribute arguments.*/)]
private static void SignOut(ConCommandArgs args)
{
Main.UserId.Value = "";
}
private static void LogEnv()
{
string value = Main.EnvironmentName.Value;
Debug.Log((object)("Current environment : " + value));
}
}
public sealed class ContainInArenaHandler : MonoBehaviour
{
private sealed class ContainInArena : MonoBehaviour
{
private const float MinHeight = 485f;
private Vector3 _startPosition;
private CharacterMotor _characterMotor;
private void Awake()
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
_characterMotor = ((Component)this).gameObject.GetComponent<CharacterMotor>();
if (!Object.op_Implicit((Object)(object)_characterMotor))
{
Log.Warning("No character motor so character won't TP back to arena", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\ContainInArenaHandler.cs", "Awake", 66);
((Behaviour)this).enabled = false;
return;
}
Scene activeScene = SceneManager.GetActiveScene();
string name = ((Scene)(ref activeScene)).name;
_startPosition = ((Component)this).gameObject.transform.position;
((Behaviour)this).enabled = _startPosition.y > 450f && name == "moon2";
}
public void TeleportBack()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
Vector3 position = ((Component)this).gameObject.transform.position;
((BaseCharacterController)_characterMotor).Motor.SetPosition(new Vector3(position.x, _startPosition.y + 7f, position.z), true);
}
private void FixedUpdate()
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
if (((Component)this).gameObject.transform.position.y < 485f)
{
TeleportBack();
}
}
}
public string key = "RoR2/Base/Brother/BrotherBody.prefab";
private ContainInArena _containInArena;
private AsyncOperationHandle<GameObject> _handle;
private void Start()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
_handle = Addressables.LoadAssetAsync<GameObject>((object)key);
_handle.Completed += OnLoadBody;
}
private void OnDisable()
{
Object.Destroy((Object)(object)_containInArena);
}
private void OnDestroy()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
Addressables.Release<GameObject>(_handle);
}
private void OnEnable()
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Invalid comparison between Unknown and I4
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
if (_handle.IsValid() && (int)_handle.Status == 1)
{
OnLoadBody(_handle);
}
}
private void OnLoadBody(AsyncOperationHandle<GameObject> obj)
{
CharacterBody val = default(CharacterBody);
if (!obj.Result.TryGetComponent<CharacterBody>(ref val))
{
Log.Warning("No Character body", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\ContainInArenaHandler.cs", "OnLoadBody", 43);
}
else if (!((Behaviour)this).isActiveAndEnabled)
{
Log.Warning("ContainInArenaHandler not enabled!", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\ContainInArenaHandler.cs", "OnLoadBody", 48);
}
else
{
_containInArena = ((Component)val).gameObject.AddComponent<ContainInArena>();
}
}
}
public sealed class DLC2 : MonoBehaviour
{
private static Xoroshiro128Plus stage;
private static Xoroshiro128Plus item;
private event Action _onDisable;
private void OnEnable()
{
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Expected O, but got Unknown
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Expected O, but got Unknown
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Expected O, but got Unknown
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Expected O, but got Unknown
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Expected O, but got Unknown
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Expected O, but got Unknown
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Expected O, but got Unknown
AddSceneToGroup("RoR2/Base/SceneGroups/sgStage2.asset", "RoR2/DLC2/lemuriantemple/lemuriantemple.asset");
AddSceneToGroup("RoR2/Base/SceneGroups/sgStage3.asset", "RoR2/DLC2/habitat/habitat.asset");
AddSceneToGroup("RoR2/Base/SceneGroups/loopSgStage3.asset", "RoR2/DLC2/habitatfall/habitatfall.asset");
ChangeDestination("RoR2/DLC2/PortalColossus.prefab");
ReplacePortals("RoR2/DLC2/ShrineHalcyonite.prefab", "RoR2/DLC2/iscColossusPortal.asset");
Run.onRunStartGlobal += MarkFalseSonComplete;
PurchaseInteraction.OnInteractionBegin += new Manipulator(ReplaceItemGenerator);
PurchaseInteraction.OnInteractionBegin += new Manipulator(SeedSaleStarRoll);
Run.GenerateStageRNG += new hook_GenerateStageRNG(OnGenerateStageRng);
ChestBehavior.BaseItemDrop += new hook_BaseItemDrop(FixEdgeCase);
HalcyoniteShrineInteractable.DrainConditionMet += new Manipulator(SkipHalcyonRoll);
PickupPickerController.GenerateOptionsFromDropTablePlusForcedStorm += new Manipulator(GenerateAll);
HalcyoniteShrineInteractable.Start += new hook_Start(OnHalcyoniteShrineInteractableOnStart);
}
private void OnDisable()
{
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Expected O, but got Unknown
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Expected O, but got Unknown
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Expected O, but got Unknown
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Expected O, but got Unknown
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Expected O, but got Unknown
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Expected O, but got Unknown
try
{
this._onDisable?.Invoke();
}
catch (Exception arg)
{
Debug.LogError((object)$"Failed to revert gauntlet changes for DLC2, things may be broken until restart: {arg}");
}
finally
{
this._onDisable = null;
}
Run.onRunStartGlobal -= MarkFalseSonComplete;
PurchaseInteraction.OnInteractionBegin -= new Manipulator(ReplaceItemGenerator);
PurchaseInteraction.OnInteractionBegin -= new Manipulator(SeedSaleStarRoll);
Run.GenerateStageRNG -= new hook_GenerateStageRNG(OnGenerateStageRng);
ChestBehavior.BaseItemDrop -= new hook_BaseItemDrop(FixEdgeCase);
HalcyoniteShrineInteractable.DrainConditionMet -= new Manipulator(SkipHalcyonRoll);
PickupPickerController.GenerateOptionsFromDropTablePlusForcedStorm -= new Manipulator(GenerateAll);
HalcyoniteShrineInteractable.Start -= new hook_Start(OnHalcyoniteShrineInteractableOnStart);
}
private void OnHalcyoniteShrineInteractableOnStart(orig_Start orig, HalcyoniteShrineInteractable self)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
orig.Invoke(self);
if (NetworkServer.active)
{
self.rng = new Xoroshiro128Plus(stage.nextUlong);
}
}
private void OnGenerateStageRng(orig_GenerateStageRNG orig, Run self)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
orig.Invoke(self);
stage = new Xoroshiro128Plus(self.spawnRng.nextUlong);
item = new Xoroshiro128Plus(stage.nextUlong);
}
private void MarkFalseSonComplete(Run instance)
{
instance.SetEventFlag("FalseSonBossComplete");
}
private void ReplaceItemGenerator(ILContext context)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(context);
VariableDefinition val2 = new VariableDefinition(context.Import(typeof(int)));
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction i) => ILPatternMatchingExt.MatchStfld<ChestBehavior>(i, "dropCount")
});
context.Method.Body.Variables.Add(val2);
val.Emit(OpCodes.Stloc, val2);
val.Emit(OpCodes.Dup);
val.EmitDelegate<Action<ChestBehavior>>((Action<ChestBehavior>)delegate(ChestBehavior chest)
{
chest.rng = item;
});
val.Emit(OpCodes.Ldloc, val2);
}
private void SeedSaleStarRoll(ILContext context)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Expected O, but got Unknown
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(context);
VariableDefinition val2 = new VariableDefinition(context.Import(typeof(Xoroshiro128Plus)));
val.GotoNext((MoveType)2, new Func<Instruction, bool>[1]
{
(Instruction i) => ILPatternMatchingExt.MatchLdfld<PurchaseInteraction>(i, "saleStarCompatible")
});
val.Emit(OpCodes.Dup);
val.EmitDelegate<Func<bool, Xoroshiro128Plus>>((Func<bool, Xoroshiro128Plus>)((bool compatible) => compatible ? new Xoroshiro128Plus(stage.nextUlong) : new Xoroshiro128Plus(0uL)));
context.Method.Body.Variables.Add(val2);
val.Emit(OpCodes.Stloc, val2);
MethodInfo method = SymbolExtensions.GetMethodInfo((Expression<Action>)(() => Util.CheckRoll(0f, (CharacterMaster)null)));
while (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction i) => ILPatternMatchingExt.MatchCall(i, (MethodBase)method)
}))
{
val.Remove();
val.Emit(OpCodes.Ldloc, val2);
val.Emit(OpCodes.Call, (MethodBase)((object)this).GetType().GetMethod("CheckRoll"));
}
}
private void FixEdgeCase(orig_BaseItemDrop orig, ChestBehavior self)
{
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
if (self.rng == item)
{
self.rng = new Xoroshiro128Plus(item);
orig.Invoke(self);
for (int i = 1; i < self.dropCount; i++)
{
item.Next();
}
}
else
{
orig.Invoke(self);
}
}
private void SkipHalcyonRoll(ILContext context)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Expected O, but got Unknown
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Expected O, but got Unknown
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(context);
FieldInfo field = typeof(HalcyoniteShrineInteractable).GetField("rng", BindingFlags.Instance | BindingFlags.NonPublic);
while (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction i) => ILPatternMatchingExt.MatchStfld(i, field)
}))
{
val.Emit(OpCodes.Pop);
val.Emit(OpCodes.Ldarg_0);
val.Emit(OpCodes.Ldfld, field);
ILCursor obj = val;
int index = obj.Index + 1;
obj.Index = index;
}
val = new ILCursor(context);
field = typeof(Run).GetField("treasureRng");
while (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction i) => ILPatternMatchingExt.MatchLdfld(i, field)
}))
{
ILCursor obj2 = val;
int index = obj2.Index + 1;
obj2.Index = index;
val.Emit(OpCodes.Pop);
val.EmitDelegate<Func<Xoroshiro128Plus>>((Func<Xoroshiro128Plus>)(() => new Xoroshiro128Plus(0uL)));
}
}
private void GenerateAll(ILContext context)
{
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Expected O, but got Unknown
ParameterDefinition numOptionsParameter = ((IEnumerable<ParameterDefinition>)((MethodReference)context.Method).Parameters).FirstOrDefault((Func<ParameterDefinition, bool>)((ParameterDefinition p) => ((ParameterReference)p).Name == "numOptions"));
if (numOptionsParameter == null)
{
Log.Error("Failed to find numOptions parameter", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\DLC2.cs", "GenerateAll", 186);
return;
}
ILCursor val = new ILCursor(context);
while (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction i) => ILPatternMatchingExt.MatchCallOrCallvirt<PickupDropTable>(i, "GenerateDistinctPickups")
}))
{
ILCursor val2 = val.Clone();
if (val2.TryGotoPrev((MoveType)2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ((ParameterReference)numOptionsParameter).Index)
}))
{
val2.EmitDelegate<Func<int, int>>((Func<int, int>)getNumOptionsToGenerate);
}
val.SearchTarget = (SearchTarget)1;
}
static int getNumOptionsToGenerate(int numOptions)
{
return Math.Max(5, numOptions);
}
}
private async void AddSceneToGroup(string collection, string stage)
{
AsyncOperationHandle<SceneCollection> group = Addressables.LoadAssetAsync<SceneCollection>((object)collection);
AsyncOperationHandle<SceneDef> val = Addressables.LoadAssetAsync<SceneDef>((object)stage);
group.WaitForCompletion();
val.WaitForCompletion();
if (((Behaviour)this).isActiveAndEnabled)
{
SceneEntry[] original = group.Result._sceneEntries;
ref SceneEntry[] sceneEntries = ref group.Result._sceneEntries;
SceneEntry val2 = new SceneEntry
{
sceneDef = val.Result
};
ArrayUtils.ArrayAppend<SceneEntry>(ref sceneEntries, ref val2);
_onDisable += delegate
{
group.Result._sceneEntries = original;
};
}
}
private async void ChangeDestination(string portal)
{
AsyncOperationHandle<GameObject> prefab = Addressables.LoadAssetAsync<GameObject>((object)portal);
await prefab.Task;
if (((Behaviour)this).isActiveAndEnabled)
{
SceneExitController controller = prefab.Result.GetComponent<SceneExitController>();
bool useRunNextStageScene = controller.useRunNextStageScene;
bool isAlternatePath = controller.isAlternatePath;
controller.useRunNextStageScene = true;
controller.isAlternatePath = false;
_onDisable += delegate
{
controller.useRunNextStageScene = useRunNextStageScene;
controller.isAlternatePath = isAlternatePath;
};
}
}
private async void ReplacePortals(string parent, string replacement)
{
AsyncOperationHandle<GameObject> prefab = Addressables.LoadAssetAsync<GameObject>((object)parent);
AsyncOperationHandle<InteractableSpawnCard> card = Addressables.LoadAssetAsync<InteractableSpawnCard>((object)replacement);
await prefab.Task;
await card.Task;
if (!((Behaviour)this).isActiveAndEnabled)
{
return;
}
PortalSpawner[] components = prefab.Result.GetComponents<PortalSpawner>();
foreach (PortalSpawner portal in components)
{
string spawnMessageToken = portal.spawnMessageToken;
portal.spawnMessageToken = "PORTAL_STORM_OPEN";
string spawnPreviewMessageToken = portal.spawnPreviewMessageToken;
portal.spawnPreviewMessageToken = "PORTAL_STORM_WILL_OPEN";
InteractableSpawnCard portalSpawnCard = portal.portalSpawnCard;
portal.portalSpawnCard = card.Result;
string previewChildName = portal.previewChildName;
portal.previewChildName = "StormPortalIndicator";
string[] invalidStages = portal.invalidStages;
portal.invalidStages = Array.Empty<string>();
_onDisable += delegate
{
portal.spawnMessageToken = spawnMessageToken;
portal.spawnPreviewMessageToken = spawnPreviewMessageToken;
portal.portalSpawnCard = portalSpawnCard;
portal.previewChildName = previewChildName;
portal.invalidStages = invalidStages;
};
}
}
public static bool CheckRoll(float percent, CharacterMaster master, Xoroshiro128Plus generator)
{
if (!(percent >= 100f))
{
if (percent <= 0f)
{
return false;
}
return CheckForLuck(percent, master, generator.nextNormalizedFloat * 100f);
}
return true;
}
public static bool CheckForLuck(float percent, CharacterMaster master, float roll)
{
float num = (Object.op_Implicit((Object)(object)master) ? Mathf.Ceil(master.luck) : 0f);
float num2 = percent / 100f;
if (!(num > 0f))
{
if (num < 0f)
{
num2 = Mathf.Pow(num2, 1f - num);
}
}
else
{
num2 = 1f - Mathf.Pow(1f - num2, 1f + num);
}
if (roll < num2 * 100f)
{
if (roll >= percent)
{
GameObject bodyObject = master.GetBodyObject();
CharacterBody val = default(CharacterBody);
if (Object.op_Implicit((Object)(object)bodyObject) && bodyObject.TryGetComponent<CharacterBody>(ref val))
{
val.wasLucky = true;
}
}
return true;
}
return false;
}
}
public sealed class DLC3 : MonoBehaviour
{
private sealed class TeleporterAccessCodesLockController : MonoBehaviour
{
private TeleporterInteraction _teleporterInteraction;
private void Awake()
{
_teleporterInteraction = ((Component)this).GetComponent<TeleporterInteraction>();
}
private void FixedUpdate()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Invalid comparison between Unknown and I4
if (NetworkServer.active)
{
_teleporterInteraction.locked = InstanceTracker.Any<SolusPathPortalTracker>() || ((int)TeleporterInteraction.instance.activationState <= 1 && !TeleporterInteraction.instance.isAccessingCodes);
}
}
}
private sealed class SolusHeartOfferingBodyController : MonoBehaviour
{
private CharacterBody _body;
private void Awake()
{
_body = ((Component)this).GetComponent<CharacterBody>();
}
private void OnEnable()
{
_body.AddBuff(Buffs.Intangible);
}
private void OnDisable()
{
_body.RemoveBuff(Buffs.Intangible);
}
}
private sealed class EyePortalLockController : MonoBehaviour
{
private GenericInteraction _interaction;
[SystemInitializer(new Type[]
{
typeof(CraftableCatalog),
typeof(PickupCatalog)
})]
private static void Init()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
AsyncOperationHandle<GameObject> val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/EyePortal/EyePortal.prefab");
val.Completed += delegate(AsyncOperationHandle<GameObject> handle)
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Invalid comparison between Unknown and I4
if (!handle.IsValid() || (int)handle.Status != 1 || !Object.op_Implicit((Object)(object)handle.Result))
{
Log.Error(string.Format("Failed to load eye portal prefab: {0}", handle.IsValid() ? ((object)handle.OperationException) : ((object)"invalid handle")), "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\DLC3.cs", "Init", 666);
}
else
{
UnityObjectExtensions.EnsureComponent<EyePortalLockController>(handle.Result);
}
};
}
private void Awake()
{
_interaction = ((Component)this).GetComponent<GenericInteraction>();
}
private void OnEnable()
{
Inventory.onInventoryChangedGlobal += onInventoryChangedGlobal;
((UnityEvent<Interactor>)(object)_interaction.onActivation).AddListener((UnityAction<Interactor>)onInteract);
refreshInteractability();
}
private void OnDisable()
{
Inventory.onInventoryChangedGlobal -= onInventoryChangedGlobal;
((UnityEvent<Interactor>)(object)_interaction.onActivation).RemoveListener((UnityAction<Interactor>)onInteract);
}
private void onInventoryChangedGlobal(Inventory inventory)
{
CharacterMaster val = default(CharacterMaster);
if (((Component)inventory).TryGetComponent<CharacterMaster>(ref val) && Object.op_Implicit((Object)(object)val.playerCharacterMasterController))
{
refreshInteractability();
}
}
private void refreshInteractability()
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
if (CraftableCatalog.resultToRecipeSearchTable.TryGetValue(PickupCatalog.FindPickupIndex(Items.MasterCore.itemIndex), out var value))
{
foreach (PlayerCharacterMasterController instance in PlayerCharacterMasterController.instances)
{
if (!instance.isConnected)
{
continue;
}
CharacterMaster master = instance.master;
if (!Object.op_Implicit((Object)(object)master) || !Object.op_Implicit((Object)(object)master.inventory))
{
continue;
}
foreach (RecipeEntry item in value)
{
if (item.ValidateSelection(master.inventory))
{
flag = true;
break;
}
}
if (flag)
{
break;
}
}
}
_interaction.Networkinteractability = (Interactability)((!flag) ? 1 : 2);
}
private void onInteract(Interactor interactor)
{
((Behaviour)this).enabled = false;
}
}
[CompilerGenerated]
private static class <>O
{
public static Func<PickupIndex, bool> <0>__pickupIsValidTempItemFallback;
public static Manipulator <1>__AccessCodesMissionController_OnStartServer;
public static OrderedPickupTransmutationProvider.AllowPickupTransmutationDelegate <2>__allowTransmuteTemporaryItem;
public static Func<Xoroshiro128Plus, Xoroshiro128Plus> <3>__getSalvageRng;
public static Func<Xoroshiro128Plus, Xoroshiro128Plus> <4>__getItemRng;
public static Func<int, int, int, TinkerProjectile, int> <5>__getRandomDebuffIndex;
public static <>F{00000010}<MonoBehaviour, UniquePickup?, bool> <6>__tryGetSeededReroll;
public static Func<PickupIndex, UniquePickup, PickupIndex> <7>__seededReroll;
public static Func<Xoroshiro128Plus, Xoroshiro128Plus> <8>__overrideRng;
}
private static SceneIndex _solusWebSceneIndex = (SceneIndex)(-1);
private static SceneIndex _computationalExchangeSceneIndex = (SceneIndex)(-1);
private static Func<PickupIndex, bool> _pickupIsValidTempItemFunc;
private static DLC3 _instance;
private Xoroshiro128Plus _drifterItemRng;
private Xoroshiro128Plus _drifterProjectileRng;
private Xoroshiro128Plus _drifterTinkerRngGenerator;
private Xoroshiro128Plus _junkDroneRng;
private Xoroshiro128Plus _solusHeartBossRngGenerator;
private OrderedPickupTransmutationProvider _temporaryItemRollTransmutationProvider;
private ulong _tinkerInteractableBaseRerollSeed;
private readonly Dictionary<int, OrderedDropTableTransmutationProvider> _interactableTinkerRerollProviders = new Dictionary<int, OrderedDropTableTransmutationProvider>();
private OrderedPickupTransmutationProvider _pickupPickerTinkerRerollProvider;
private SolusHeartOfferingBodyController _solusHeartOfferingBodyPrefabController;
public static bool UseDLC3Path => Main.UseDLC3Path.Value;
public static DLC3 Instance => _instance;
[SystemInitializer(new Type[] { typeof(SceneCatalog) })]
private static void Init()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Invalid comparison between Unknown and I4
_solusWebSceneIndex = SceneCatalog.FindSceneIndex("solusweb");
if ((int)_solusWebSceneIndex == -1)
{
Log.Error("Failed to find solus web scene index", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\DLC3.cs", "Init", 39);
}
_computationalExchangeSceneIndex = SceneCatalog.FindSceneIndex("computationalexchange");
if ((int)_computationalExchangeSceneIndex == -1)
{
Log.Error("Failed to find computational exchange scene index", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\DLC3.cs", "Init", 45);
}
MethodInfo methodInfo = typeof(Util).GetMethods(BindingFlags.Static | BindingFlags.NonPublic).FirstOrDefault((MethodInfo m) => m.Name.StartsWith("<RollTemporaryItemFromItemIndex>g__PickupIsNonBlacklistedItem|") && m.ReturnType == typeof(bool) && m.GetParameters().Length == 1 && m.GetParameters()[0].ParameterType == typeof(PickupIndex));
if (methodInfo != null)
{
try
{
_pickupIsValidTempItemFunc = Extensions.CreateDelegate<Func<PickupIndex, bool>>((MethodBase)methodInfo);
}
catch (Exception data)
{
Log.Error_NoCallerPrefix(data);
}
}
else
{
Log.Error("Failed to find PickupIsNonBlacklistedItem local function", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\DLC3.cs", "Init", 62);
}
if (_pickupIsValidTempItemFunc == null)
{
Log.Warning("Failed to get temporary pickup validator method, using fallback", "C:\\Users\\Erin\\Desktop\\Modding\\GauntletMod\\Gauntlet\\src\\DLC3.cs", "Init", 67);
_pickupIsValidTempItemFunc = pickupIsValidTempItemFallback;
}
static bool pickupIsValidTempItemFallback(PickupIndex pickupIndex)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
PickupDef pickupDef = PickupCatalog.GetPickupDef(pickupIndex);
if (pickupDef == null)
{
return false;
}
ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
if (!Object.op_Implicit((Object)(object)itemDef))
{
return false;
}
if (itemDef.DoesNotContainTag((ItemTag)33) && itemDef.DoesNotContainTag((ItemTag)10) && itemDef.DoesNotContainTag((ItemTag)9))
{
return itemDef.ContainsTag((ItemTag)31);
}
return false;
}
}
private void OnEnable()
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Expected O, but got Unknown
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Expected O, but got Unknown
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Expected O, but got Unknown
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Expected O, but got Unknown
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Expected O, but got Unknown
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Expected O, but got Unknown
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Expected O, but got Unknown
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Expected O, but got Unknown
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Expected O, but got Unknown
SingletonHelper.Assign<DLC3>(ref _instance, this);
RunHooks.OnRunPostStartGlobal += onRunPostStartGlobal;
Stage.onStageStartGlobal += onStageStartGlobal;
Salvage.OnEnter += new Manipulator(Salvage_OnEnter);
DrifterCleanupController.InitRng += new hook_InitRng(DrifterCleanupController_InitRng);
Surprise.DropTempItemServer += new Manipulator(Surprise_DropTempItemServer);
TinkerProjectile.ManageMonster += new Manipulator(TinkerProjectile_ManageMonster);
BossGroup.Awake += new hook_Awake(BossGroup_Awake);
Util.RollTemporaryItemFromItemIndex += new hook_RollTemporaryItemFromItemIndex(Util_RollTemporaryItemFromItemIndex);
ShopTerminalBehavior.RerollPickup += new Manipulator(SeededTinkerRerollInteractablePatch);
PickupDistributorBehavior.RerollPickup += new Manipulator(SeededTinkerRerollInteractablePatch);
PickupPickerController.RerollCurrentOptions += new Manipulator(PickupPickerController_RerollCurrentOptions);
CraftingController.CanTakePickupAfterUseByIngredientSlots += new hook_CanTakePickupAfterUseByIngredientSlots(CraftingController_CanTakePickupAfterUseByIngredientSlots);
object obj = <>O.<1>__AccessCodesMissionController_OnStartServer;
if (obj == null)
{
Manipulator val = AccessCodesMissionController_OnStartServer;
<>O.<1>__AccessCodesMissionController_OnStartServer = val;
obj = (object)val;
}
AccessCodesMissionController.OnStartServer += (Manipulator)obj;
GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/SolusHeart/SolusHeartBody_Offering.prefab").WaitForCompletion();
if (Object.op_Implicit((Object)(object)val2))
{
_solusHeartOfferingBodyPrefabController = UnityObjectExtensions.EnsureComponent<SolusHeartOfferingBodyController>(val2);
}
}
private void OnDisable()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Expected O, but got Unknown
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Expected O, but got Unknown
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Expected O, but got Unknown
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Expected O, but got Unknown
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Expected O, but got Unknown
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Expected O, but got Unknown
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Expected O, but got Unknown
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Expected O, but got Unknown
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Expected O, but got Unknown
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Expected O, but got Unknown
RunHooks.OnRunPostStartGlobal -= onRunPostStartGlobal;
Stage.onStageStartGlobal -= onStageStartGlobal;
Salvage.OnEnter -= new Manipulator(Salvage_OnEnter);
DrifterCleanupController.InitRng -= new hook_InitRng(DrifterCleanupController_InitRng);
Surprise.DropTempItemServer -= new Manipulator(Surprise_DropTempItemServer);
TinkerProjectile.ManageMonster -= new Manipulator(TinkerProjectile_ManageMonster);
BossGroup.Awake -= new hook_Awake(BossGroup_Awake);
Util.RollTemporaryItemFromItemIndex -= new hook_RollTemporaryItemFromItemIndex(Util_RollTemporaryItemFromItemIndex);
ShopTerminalBehavior.RerollPickup -= new Manipulator(SeededTinkerRerollInteractablePatch);
PickupDistributorBehavior.RerollPickup -= new Manipulator(SeededTinkerRerollInteractablePatch);
PickupPickerController.RerollCurrentOptions -= new Manipulator(PickupPickerController_RerollCurrentOptions);
CraftingController.CanTakePickupAfterUseByIngredientSlots -= new hook_CanTakePickupAfterUseByIngredientSlots(CraftingController_CanTakePickupAfterUseByIngredientSlots);
object obj = <>O.<1>__AccessCodesMissionController_OnStartServer;
if (obj == null)
{
Manipulator val = AccessCodesMissionController_OnStartServer;
<>O.<1>__AccessCodesMissionController_OnStartServer = val;
obj = (object)val;
}
AccessCodesMissionController.OnStartServer -= (Manipulator)obj;
if (Object.op_Implicit((Object)(object)_solusHeartOfferingBodyPrefabController))
{
Object.Destroy((Object)(object)_solusHeartOfferingBodyPrefabController);
_solusHeartOfferingBodyPrefabController = null;
}
SingletonHelper.Unassign<DLC3>(ref _instance, this);
}
public Xoroshiro128Plus GetNextTinkerProjectileRng()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
if (_drifterTinkerRngGenerator == null)
{
return null;
}
return new Xoroshiro128Plus(_drifterTinkerRngGenerator.nextUlong);
}
private void onRunPostStartGlobal(Run run)
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Expect