using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HG.Reflection;
using IL.RoR2;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using R2API.Utils;
using RoR2;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("SimulacrumNormalStagesFix")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("SimulacrumNormalStagesFix")]
[assembly: AssemblyTitle("SimulacrumNormalStagesFix")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[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]
[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 SimulacrumNormalStagesFix
{
public class EnumCollection
{
public enum StageEnum
{
None,
TitanicPlains,
DistantRoost,
WetlandAspect,
AbandonedAqueduct,
RallypointDelta,
ScorchedAcres,
AbyssalDepths,
SirensCall,
GildedCoast,
MomentFractured,
Bazaar,
VoidFields,
MomentWhole,
SkyMeadow,
BullwarksAmbry,
Commencement,
SunderedGrove,
VoidLocus,
Planetarium,
AphelianSanctuary,
SimulacrumAbandonedAquaduct,
SimulacrumAbyssalDepths,
SimulacrumAphelianSanctuary,
SimulacrumCommencement,
SimulacrumRallypointDelta,
SimulacrumSkyMeadow,
SimulacrumTitanicPlains,
SiphonedForest,
SulfurPools
}
public static Dictionary<StageEnum, List<string>> SceneNames = new Dictionary<StageEnum, List<string>>
{
{
StageEnum.TitanicPlains,
new List<string> { "golemplains", "golemplains2", "golemplains trailer" }
},
{
StageEnum.DistantRoost,
new List<string> { "blackbeach", "blackbeach2", "blackbeachTest" }
},
{
StageEnum.WetlandAspect,
new List<string> { "foggyswamp" }
},
{
StageEnum.AbandonedAqueduct,
new List<string> { "goolake" }
},
{
StageEnum.RallypointDelta,
new List<string> { "frozenwall" }
},
{
StageEnum.ScorchedAcres,
new List<string> { "wispgraveyard" }
},
{
StageEnum.AbyssalDepths,
new List<string> { "dampcavesimple" }
},
{
StageEnum.SirensCall,
new List<string> { "shipgraveyard" }
},
{
StageEnum.GildedCoast,
new List<string> { "goldshores" }
},
{
StageEnum.MomentFractured,
new List<string> { "mysteryspace" }
},
{
StageEnum.Bazaar,
new List<string> { "bazaar" }
},
{
StageEnum.VoidFields,
new List<string> { "arena" }
},
{
StageEnum.MomentWhole,
new List<string> { "limbo" }
},
{
StageEnum.SkyMeadow,
new List<string> { "skymeadow" }
},
{
StageEnum.BullwarksAmbry,
new List<string> { "artifactworld" }
},
{
StageEnum.Commencement,
new List<string> { "moon", "moon2" }
},
{
StageEnum.SunderedGrove,
new List<string> { "rootjungle" }
},
{
StageEnum.VoidLocus,
new List<string> { "voidstage" }
},
{
StageEnum.Planetarium,
new List<string> { "voidraid" }
},
{
StageEnum.AphelianSanctuary,
new List<string> { "ancientloft" }
},
{
StageEnum.SimulacrumAbandonedAquaduct,
new List<string> { "itgoolake" }
},
{
StageEnum.SimulacrumAbyssalDepths,
new List<string> { "itdampcave" }
},
{
StageEnum.SimulacrumAphelianSanctuary,
new List<string> { "itancientloft" }
},
{
StageEnum.SimulacrumCommencement,
new List<string> { "itmoon" }
},
{
StageEnum.SimulacrumRallypointDelta,
new List<string> { "itfrozenwall" }
},
{
StageEnum.SimulacrumSkyMeadow,
new List<string> { "itskymeadow" }
},
{
StageEnum.SimulacrumTitanicPlains,
new List<string> { "itgolemplains" }
},
{
StageEnum.SiphonedForest,
new List<string> { "snowyforest" }
},
{
StageEnum.SulfurPools,
new List<string> { "sulfurpools" }
}
};
private static SceneEntry createSceneEntry(StageEnum stageEnum, float weight = 1f)
{
//IL_000d: 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)
return createSceneEntry(((IEnumerable<SceneDef>)(object)SceneCatalog.allStageSceneDefs).Where((SceneDef s) => s.cachedName == GetStageName(stageEnum)).First(), weight);
}
private static SceneEntry createSceneEntry(string stageName, float weight = 1f)
{
//IL_000d: 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)
return createSceneEntry(((IEnumerable<SceneDef>)(object)SceneCatalog.allStageSceneDefs).Where((SceneDef s) => s.cachedName == stageName).First(), weight);
}
private static SceneEntry createSceneEntry(SceneDef sceneDef, float weight = 1f)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
SceneEntry result = default(SceneEntry);
result.sceneDef = sceneDef;
((SceneEntry)(ref result)).weight = weight;
return result;
}
public static List<SceneEntry> GetNormalStagesList()
{
//IL_0010: 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)
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: 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_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
return new List<SceneEntry>
{
createSceneEntry("golemplains", 0.5f),
createSceneEntry("golemplains2", 0.5f),
createSceneEntry("blackbeach", 0.5f),
createSceneEntry("blackbeach2", 0.5f),
createSceneEntry(StageEnum.WetlandAspect),
createSceneEntry(StageEnum.AbandonedAqueduct),
createSceneEntry(StageEnum.RallypointDelta),
createSceneEntry(StageEnum.ScorchedAcres),
createSceneEntry(StageEnum.AbyssalDepths),
createSceneEntry(StageEnum.SirensCall),
createSceneEntry(StageEnum.SkyMeadow),
createSceneEntry(StageEnum.SunderedGrove),
createSceneEntry(StageEnum.AphelianSanctuary),
createSceneEntry(StageEnum.SiphonedForest),
createSceneEntry(StageEnum.SulfurPools),
createSceneEntry("moon2")
};
}
public static bool IsSimulacrumStage(string name)
{
if (GetStageName(StageEnum.SimulacrumAbandonedAquaduct) == name)
{
return true;
}
if (GetStageName(StageEnum.SimulacrumAbyssalDepths) == name)
{
return true;
}
if (GetStageName(StageEnum.SimulacrumAphelianSanctuary) == name)
{
return true;
}
if (GetStageName(StageEnum.SimulacrumCommencement) == name)
{
return true;
}
if (GetStageName(StageEnum.SimulacrumRallypointDelta) == name)
{
return true;
}
if (GetStageName(StageEnum.SimulacrumSkyMeadow) == name)
{
return true;
}
if (GetStageName(StageEnum.SimulacrumTitanicPlains) == name)
{
return true;
}
return false;
}
public static string GetStageName(StageEnum stageEnum)
{
return SceneNames[stageEnum].First();
}
}
internal static class Log
{
internal static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void LogDebug(object data)
{
_logSource.LogDebug(data);
}
internal static void LogError(object data)
{
_logSource.LogError(data);
}
internal static void LogFatal(object data)
{
_logSource.LogFatal(data);
}
internal static void LogInfo(object data)
{
_logSource.LogInfo(data);
}
internal static void LogMessage(object data)
{
_logSource.LogMessage(data);
}
internal static void LogWarning(object data)
{
_logSource.LogWarning(data);
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Def.SimulacrumNormalStagesFix", "SimulacrumNormalStagesFix", "1.1.0")]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
public class SimulacrumNormalStagesFix : BaseUnityPlugin
{
public static SimulacrumNormalStagesFix instance;
public const string PluginGUID = "Def.SimulacrumNormalStagesFix";
public const string PluginAuthor = "Def";
public const string PluginName = "SimulacrumNormalStagesFix";
public const string PluginVersion = "1.1.0";
public static PluginInfo PInfo { get; private set; }
public void Awake()
{
PInfo = ((BaseUnityPlugin)this).Info;
instance = this;
Log.Init(((BaseUnityPlugin)this).Logger);
}
private void OnEnable()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
//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
ArenaMissionController.OnStartServer += new Manipulator(ArenaMissionController_OnStartServer);
VoidStageMissionController.OnEnable += new Manipulator(VoidStageMissionController_OnEnable);
VoidStageMissionController.Start += new Manipulator(VoidStageMissionController_Start);
InfiniteTowerRun.OnPrePopulateSceneServer += new Manipulator(InfiniteTowerRun_OnPrePopulateSceneServer);
InfiniteTowerRun.OnPrePopulateSceneServer += new hook_OnPrePopulateSceneServer(InfiniteTowerRun_OnPrePopulateSceneServer);
SceneCatalog.OnActiveSceneChanged += new hook_OnActiveSceneChanged(SceneCatalog_OnActiveSceneChanged);
}
private void OnDisable()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Expected O, but got Unknown
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
//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
ArenaMissionController.OnStartServer -= new Manipulator(ArenaMissionController_OnStartServer);
VoidStageMissionController.OnEnable -= new Manipulator(VoidStageMissionController_OnEnable);
VoidStageMissionController.Start -= new Manipulator(VoidStageMissionController_Start);
InfiniteTowerRun.OnPrePopulateSceneServer -= new Manipulator(InfiniteTowerRun_OnPrePopulateSceneServer);
InfiniteTowerRun.OnPrePopulateSceneServer -= new hook_OnPrePopulateSceneServer(InfiniteTowerRun_OnPrePopulateSceneServer);
SceneCatalog.OnActiveSceneChanged -= new hook_OnActiveSceneChanged(SceneCatalog_OnActiveSceneChanged);
}
private void SceneCatalog_OnActiveSceneChanged(orig_OnActiveSceneChanged orig, Scene oldScene, Scene newScene)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(oldScene, newScene);
if (NetworkServer.active && ((object)Run.instance).GetType() == typeof(InfiniteTowerRun) && (Object)(object)SceneCatalog.mostRecentSceneDef != (Object)null && SceneCatalog.mostRecentSceneDef.baseSceneName == "arena")
{
SceneCatalog.mostRecentSceneDef.sceneType = (SceneType)1;
}
}
private void ReturnImmediately<T>(ILContext il, Func<T, bool> funcWhetherToReturnImmediately)
{
//IL_0008: 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)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: 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_002f: Unknown result type (might be due to invalid IL or missing references)
ILLabel val = il.DefineLabel();
ILCursor val2 = new ILCursor(il);
val2.Emit(OpCodes.Ldarg_0);
val2.EmitDelegate<Func<T, bool>>(funcWhetherToReturnImmediately);
val2.Emit(OpCodes.Brfalse, (object)val);
val2.Emit(OpCodes.Ret);
val2.MarkLabel(val);
}
private void ArenaMissionController_OnStartServer(ILContext il)
{
ReturnImmediately(il, delegate(ArenaMissionController self)
{
if (((object)Run.instance).GetType() == typeof(InfiniteTowerRun))
{
GameObject val = GameObject.Find("PortalArena");
if ((Object)(object)val != (Object)null)
{
Object.Destroy((Object)(object)val);
}
GameObject[] nullWards = self.nullWards;
for (int i = 0; i < nullWards.Length; i++)
{
Object.Destroy((Object)(object)nullWards[i]);
}
self.nullWards = (GameObject[])(object)new GameObject[0];
((Behaviour)self).enabled = false;
return true;
}
return false;
});
}
private void VoidStageMissionController_OnEnable(ILContext il)
{
ReturnImmediately(il, delegate(VoidStageMissionController self)
{
if (((object)Run.instance).GetType() == typeof(InfiniteTowerRun))
{
((Behaviour)self).enabled = false;
return true;
}
return false;
});
}
private void VoidStageMissionController_Start(ILContext il)
{
ReturnImmediately(il, delegate(VoidStageMissionController self)
{
if (((object)Run.instance).GetType() == typeof(InfiniteTowerRun))
{
if (Object.op_Implicit((Object)(object)self.deepVoidPortalObjectiveProvider))
{
((Behaviour)self.deepVoidPortalObjectiveProvider).enabled = false;
}
return true;
}
return false;
});
}
private void InfiniteTowerRun_OnPrePopulateSceneServer(ILContext il)
{
ReturnImmediately(il, delegate(InfiniteTowerRun self)
{
if (((Run)self).nextStageScene.cachedName == EnumCollection.GetStageName(EnumCollection.StageEnum.Bazaar))
{
self.PerformStageCleanUp();
return true;
}
return false;
});
}
private void InfiniteTowerRun_OnPrePopulateSceneServer(orig_OnPrePopulateSceneServer orig, InfiniteTowerRun self, SceneDirector sceneDirector)
{
if (!EnumCollection.IsSimulacrumStage(((Run)self).nextStageScene.cachedName))
{
for (int i = 0; i < SpawnPoint.readOnlyInstancesList.Count; i++)
{
if (!SpawnPoint.readOnlyInstancesList[i].consumed)
{
SpawnPoint.readOnlyInstancesList[i].consumed = true;
}
}
sceneDirector.monsterCredit = 0;
CombatDirector[] array = CombatDirector.instancesList.ToArray();
for (int j = 0; j < array.Length; j++)
{
((Behaviour)array[j]).enabled = false;
}
}
orig.Invoke(self, sceneDirector);
}
}
}