using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using Aetherium.Interactables;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using BulwarksHaunt;
using BulwarksHaunt.Items;
using FRCSharp;
using HG;
using HarmonyLib;
using IL.RoR2;
using IL.RoR2.CharacterSpeech;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using ProperLoop;
using R2API;
using RoR2;
using RoR2.CharacterSpeech;
using RoR2.EntityLogic;
using RoR2.Navigation;
using ShrineOfRepair.Modules;
using ShrineOfRepair.Modules.Interactables;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("ConsistentStageFeatures")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ConsistentStageFeatures")]
[assembly: AssemblyTitle("ConsistentStageFeatures")]
[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 ConsistentStageFeatures
{
[BepInPlugin("prodzpod.ConsistentStageFeatures", "ConsistentStageFeatures", "1.2.3")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class Main : BaseUnityPlugin
{
[HarmonyPatch(typeof(BatteryContainerInteraction), "OnInteractionBegin")]
public class PatchBatteryInteraction
{
public static void Postfix(BatteryContainerInteraction __instance)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
NetworkServer.Spawn(Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/ChestScanner"), ((Component)__instance).gameObject.transform.position, Quaternion.identity));
}
}
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_Awake <>9__65_0;
public static hook_SetSwitch <>9__65_2;
public static Action<Stage> <>9__65_3;
public static Action<Stage> <>9__65_13;
public static Action<Stage> <>9__65_14;
public static Action<Stage> <>9__65_15;
public static Func<Instruction, bool> <>9__65_23;
public static Func<CharacterBody, bool> <>9__65_25;
public static Func<CharacterBody, bool> <>9__65_26;
public static Func<Instruction, bool> <>9__65_27;
public static Func<CharacterBody, bool> <>9__65_29;
public static Func<CharacterBody, bool> <>9__65_30;
public static Action<Stage> <>9__65_20;
public static Func<CharacterBody, bool> <>9__65_31;
public static hook_BeginEncounter <>9__65_21;
public static Func<Instruction, bool> <>9__65_32;
public static Func<uint, uint> <>9__65_33;
public static Manipulator <>9__65_22;
public static Action<TeleporterInteraction> <>9__65_8;
public static Func<GameObject, bool> <>9__65_35;
public static Action<Stage> <>9__65_9;
public static Action<SceneDirector> <>9__65_12;
public static Converter<string, string> <>9__66_0;
public static Converter<string, string> <>9__66_2;
public static Converter<string, string> <>9__66_3;
public static Action<Stage> <>9__67_0;
public static Action<DamageReport> <>9__67_1;
public static Action<Stage> <>9__68_0;
public static Func<ItemIndex, ItemDef> <>9__68_2;
public static Func<EquipmentIndex, EquipmentDef> <>9__68_4;
public static hook_GrantUnlock <>9__70_0;
internal void <Awake>b__65_0(orig_Awake orig, SceneObjectToggleGroup self)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
if (self.toggleGroups.Length != 0)
{
GameObjectToggleGroup val = self.toggleGroups[self.toggleGroups.Length - 1];
if (SceneCatalog.mostRecentSceneDef.cachedName == "frozenwall")
{
ref GameObject[] objects = ref val.objects;
GameObject gameObject = ((Component)GameObject.Find("HOLDER: Preplaced Objects").transform.Find("NewtStatue, Guaranteed")).gameObject;
ArrayUtils.ArrayAppend<GameObject>(ref objects, ref gameObject);
}
if (SceneCatalog.mostRecentSceneDef.cachedName == "blackbeach")
{
val.minEnabled = 1;
}
if (SceneCatalog.mostRecentSceneDef.cachedName == "goolake")
{
val.maxEnabled = AqueductButtonMax.Value;
val.minEnabled = AqueductButtonMax.Value;
}
self.toggleGroups[self.toggleGroups.Length - 1] = val;
}
orig.Invoke(self);
}
internal void <Awake>b__65_2(orig_SetSwitch orig, PressurePlateController self, bool input)
{
if (input)
{
orig.Invoke(self, input);
}
}
internal void <Awake>b__65_3(Stage stage)
{
if (stage.sceneDef.cachedName == "goolake")
{
((Component)GameObject.Find("HOLDER: Secret Ring Area Content").transform.Find("Entrance").Find("GLRuinGate")).GetComponent<Counter>().threshold = AqueductButtonMax.Value;
}
}
internal void <Awake>b__65_13(Stage stage)
{
if (stage.sceneDef.cachedName == "slumberingsatellite")
{
((Component)GameObject.Find("World").transform.Find("Gated Areas").Find("GateGround0")).gameObject.SetActive(true);
}
}
internal void <Awake>b__65_14(Stage stage)
{
if (stage.sceneDef.cachedName == "slumberingsatellite")
{
((Component)GameObject.Find("World").transform.Find("Gated Areas").Find("GateGround4")).gameObject.SetActive(true);
((Component)GameObject.Find("World").transform.Find("Gated Areas").Find("GateGround5")).gameObject.SetActive(true);
}
}
internal void <Awake>b__65_15(Stage stage)
{
if (!(stage.sceneDef.cachedName == "moon2"))
{
return;
}
foreach (NetworkUser instances in NetworkUser.instancesList)
{
if (instances.master.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || instances.master.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0)
{
((Component)GameObject.Find("HOLDER: Gameplay Space").transform.Find("HOLDER: STATIC MESH").Find("Quadrant 5: Blood Arena").Find("Arena Weapons")
.Find("mdlBrotherSword (3)")).gameObject.SetActive(false);
}
}
}
internal bool <Awake>b__65_23(Instruction x)
{
return ILPatternMatchingExt.MatchCallOrCallvirt<BrotherSpeechDriver>(x, "SendReponseFromPool");
}
internal bool <Awake>b__65_25(CharacterBody x)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return x.bodyIndex == BrotherSpeechDriver.hereticBodyIndex;
}
internal bool <Awake>b__65_26(CharacterBody x)
{
return x.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || x.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0;
}
internal bool <Awake>b__65_27(Instruction x)
{
return ILPatternMatchingExt.MatchCallOrCallvirt<BrotherSpeechDriver>(x, "SendReponseFromPool");
}
internal bool <Awake>b__65_29(CharacterBody x)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return x.bodyIndex == BrotherSpeechDriver.hereticBodyIndex;
}
internal bool <Awake>b__65_30(CharacterBody x)
{
return x.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || x.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0;
}
internal void <Awake>b__65_20(Stage _)
{
pissed = false;
}
internal void <Awake>b__65_21(orig_BeginEncounter orig, ScriptedCombatEncounter self)
{
orig.Invoke(self);
if (!SceneCatalog.mostRecentSceneDef.cachedName.StartsWith("moon"))
{
return;
}
bool flag = CharacterBody.readOnlyInstancesList.Any((CharacterBody x) => x.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || x.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0);
pissed |= flag;
if (!pissed)
{
return;
}
foreach (CharacterMaster members in self.combatSquad.membersList)
{
CharacterBody body = members.GetBody();
body.baseMaxHealth *= 1f + SwordHealth.Value;
body.levelMaxHealth *= 1f + SwordHealth.Value;
body.baseDamage *= 1f + SwordDamage.Value;
body.levelDamage *= 1f + SwordDamage.Value;
body.baseMoveSpeed *= 1f + SwordSpeed.Value;
body.levelMoveSpeed *= 1f + SwordSpeed.Value;
body.baseArmor *= 1f + SwordArmor.Value;
body.levelArmor *= 1f + SwordArmor.Value;
body.baseAttackSpeed *= 1f + SwordAttackSpeed.Value;
body.levelAttackSpeed *= 1f + SwordAttackSpeed.Value;
}
}
internal bool <Awake>b__65_31(CharacterBody x)
{
return x.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || x.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0;
}
internal void <Awake>b__65_22(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<NetworkUser>(x, "AwardLunarCoins")
});
val.EmitDelegate<Func<uint, uint>>((Func<uint, uint>)((uint orig) => (uint)(orig + (pissed ? SwordExtraLunar.Value : 0))));
}
internal bool <Awake>b__65_32(Instruction x)
{
return ILPatternMatchingExt.MatchCallOrCallvirt<NetworkUser>(x, "AwardLunarCoins");
}
internal uint <Awake>b__65_33(uint orig)
{
return (uint)(orig + (pissed ? SwordExtraLunar.Value : 0));
}
internal void <Awake>b__65_8(TeleporterInteraction tp)
{
//IL_009d: 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)
//IL_00ad: 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_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Expected O, but got Unknown
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Expected O, but got Unknown
<>c__DisplayClass65_2 CS$<>8__locals0 = new <>c__DisplayClass65_2
{
isc = LegacyResourcesAPI.Load<SpawnCard>("SpawnCards/InteractableSpawnCard/iscVoidPortal")
};
if (StageCheck(10, loop: true) && !(tp.portalSpawners?.ToList()?.First((PortalSpawner x) => (Object)(object)x.portalSpawnCard == (Object)(object)CS$<>8__locals0.isc)?.willSpawn ?? true))
{
DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(CS$<>8__locals0.isc, new DirectorPlacementRule
{
minDistance = 1f,
maxDistance = 25f,
placementMode = (PlacementMode)1,
position = ((Component)tp).transform.position,
spawnOnTarget = ((Component)tp).transform
}, Run.instance.stageRng));
}
}
internal void <Awake>b__65_9(Stage stage)
{
<>c__DisplayClass65_3 <>c__DisplayClass65_ = new <>c__DisplayClass65_3();
if (stage.sceneDef.cachedName != "goldshores")
{
return;
}
GameObject val = GameObject.Find("HOLDER: Preplaced Goodies");
if ((Object)(object)val == (Object)null)
{
return;
}
<>c__DisplayClass65_.chests = new List<GameObject>
{
((Component)val.transform.Find("Chest1 - 1")).gameObject,
((Component)val.transform.Find("Chest1 - 2")).gameObject,
((Component)val.transform.Find("Chest1 - 3")).gameObject,
((Component)val.transform.Find("Chest1 - 4")).gameObject
};
List<GameObject> list = (from x in Object.FindObjectsOfType<GameObject>()
where ((Object)x).name == "mdlChest1"
select x).ToList();
for (int num = 4; num > GoldenCoastChests.Value; num--)
{
<>c__DisplayClass65_4 CS$<>8__locals0 = new <>c__DisplayClass65_4();
CS$<>8__locals0.CS$<>8__locals1 = <>c__DisplayClass65_;
CS$<>8__locals0.toRemove = Run.instance.runRNG.RangeInt(0, CS$<>8__locals0.CS$<>8__locals1.chests.Count);
CS$<>8__locals0.CS$<>8__locals1.chests[CS$<>8__locals0.toRemove].SetActive(false);
GameObject? obj = list.Find(delegate(GameObject x)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: 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)
Vector3 position = x.transform.position;
return ((Vector3)(ref position)).Equals(CS$<>8__locals0.CS$<>8__locals1.chests[CS$<>8__locals0.toRemove].transform.position);
});
if (obj != null)
{
obj.SetActive(false);
}
CS$<>8__locals0.CS$<>8__locals1.chests.RemoveAt(CS$<>8__locals0.toRemove);
}
}
internal bool <Awake>b__65_35(GameObject x)
{
return ((Object)x).name == "mdlChest1";
}
internal void <Awake>b__65_12(SceneDirector dir)
{
if (SceneCatalog.mostRecentSceneDef.cachedName == "arena")
{
dir.interactableCredit = 0;
}
}
internal string <PatchStageChances>b__66_0(string x)
{
return x.Trim();
}
internal string <PatchStageChances>b__66_2(string x)
{
return x.Trim();
}
internal string <PatchStageChances>b__66_3(string x)
{
return x.Trim();
}
internal void <HackSkeletonForceSpawn>b__67_0(Stage stage)
{
GameObject obj = GameObject.Find("HOLDER: Hidden Altar Stuff");
object obj2;
if (obj == null)
{
obj2 = null;
}
else
{
Transform transform = obj.transform;
if (transform == null)
{
obj2 = null;
}
else
{
Transform obj3 = transform.Find("AltarCenter");
if (obj3 == null)
{
obj2 = null;
}
else
{
Transform obj4 = obj3.Find("AltarSkeletonBody");
obj2 = ((obj4 != null) ? ((Component)obj4).gameObject : null);
}
}
}
GameObject val = (GameObject)obj2;
if ((Object)(object)val != (Object)null)
{
GameObjectUnlockableFilter component = val.GetComponent<GameObjectUnlockableFilter>();
component.forbiddenUnlockable = "";
component.forbiddenUnlockableDef = null;
component.Networkactive = true;
component.active = true;
val.SetActive(true);
Log.LogDebug((object)"*Bad to the Bone Riff*");
}
}
internal void <HackSkeletonForceSpawn>b__67_1(DamageReport report)
{
//IL_003b: 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_005a: Unknown result type (might be due to invalid IL or missing references)
object obj;
if (report == null)
{
obj = null;
}
else
{
CharacterBody victimBody = report.victimBody;
obj = ((victimBody != null) ? ((Object)victimBody).name : null);
}
if ((string?)obj == "AltarSkeletonBody")
{
PickupDropletController.CreatePickupDroplet(Run.instance.treasureRng.NextElementUniform<PickupIndex>(Run.instance.availableVoidTier2DropList), report.victimBody.corePosition, new Vector3(-15f, 13f, -20f));
}
}
internal void <HandleHank>b__68_0(Stage _)
{
hanked = false;
}
internal ItemDef <HandleHank>b__68_2(ItemIndex x)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
return ItemCatalog.GetItemDef(x);
}
internal EquipmentDef <HandleHank>b__68_4(EquipmentIndex x)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
return EquipmentCatalog.GetEquipmentDef(x);
}
internal void <FHRadarScannerPatch>b__70_0(orig_GrantUnlock orig, RadiotowerTerminal self, Interactor interactor)
{
//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)
orig.Invoke(self, interactor);
if (SceneCatalog.mostRecentSceneDef.cachedName == "forgottenhaven")
{
NetworkServer.Spawn(Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/ChestScanner"), ((Component)self).gameObject.transform.position, Quaternion.identity));
}
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass65_2
{
public SpawnCard isc;
internal bool <Awake>b__34(PortalSpawner x)
{
return (Object)(object)x.portalSpawnCard == (Object)(object)isc;
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass65_3
{
public List<GameObject> chests;
}
[CompilerGenerated]
private sealed class <>c__DisplayClass65_4
{
public int toRemove;
public <>c__DisplayClass65_3 CS$<>8__locals1;
internal bool <Awake>b__36(GameObject x)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: 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)
Vector3 position = x.transform.position;
return ((Vector3)(ref position)).Equals(CS$<>8__locals1.chests[toRemove].transform.position);
}
}
public const string PluginGUID = "prodzpod.ConsistentStageFeatures";
public const string PluginAuthor = "prodzpod";
public const string PluginName = "ConsistentStageFeatures";
public const string PluginVersion = "1.2.3";
public const string softdepAetherium = "com.KomradeSpectre.Aetherium";
public const string softdepBulwarksHaunt = "com.themysticsword.bulwarkshaunt";
public const string softdepFogboundLagoon = "JaceDaDorito.FBLStage";
public const string softdepForgottenRelics = "PlasmaCore.ForgottenRelics";
public const string softdepShrineOfRepair = "com.Viliger.ShrineOfRepair";
public const string softdepProperLoop = "prodzpod.ProperLoop";
public static ManualLogSource Log;
public static Harmony Harmony;
public static PluginInfo pluginInfo;
public static ConfigFile Config;
public static ConfigEntry<string> TimescaleOverwrite;
public static ConfigEntry<string> StageChances;
public static ConfigEntry<int> MaxVoidSeeds;
public static ConfigEntry<bool> GuaranteedNewt;
public static ConfigEntry<bool> BuffBrazierOnStage1;
public static ConfigEntry<int> BuffBrazierCost;
public static ConfigEntry<bool> RemoveRandomBuffBrazier;
public static ConfigEntry<bool> RedPrinterOnSiphoned;
public static ConfigEntry<bool> GreenPrinterOnPlains;
public static ConfigEntry<bool> YellowPrinterOnRoost;
public static ConfigEntry<bool> LunarBudOnStage2;
public static ConfigEntry<bool> RemoveRandomLunarBud;
public static ConfigEntry<bool> AqueductButtonNoRelease;
public static ConfigEntry<int> AqueductButtonMax;
public static ConfigEntry<bool> NKuhanaVoidGreen;
public static ConfigEntry<bool> GoldShrineOnStage3;
public static ConfigEntry<bool> RemoveRandomGoldShrine;
public static ConfigEntry<bool> SpecialChestOnPools;
public static ConfigEntry<bool> HankOffersDrink;
public static ConfigEntry<bool> SpicyHank;
public static ConfigEntry<bool> IllegalHank;
public static ConfigEntry<bool> REXOnStage4;
public static ConfigEntry<bool> ShrineRepairOnStage5;
public static ConfigEntry<bool> ScrapperOnStage5;
public static ConfigEntry<bool> RemoveRandomShrineRepair;
public static ConfigEntry<bool> SageShrineOnMeadow;
public static ConfigEntry<bool> SageShrineOnSatellite;
public static ConfigEntry<bool> RemoveRandomSageShrine;
public static ConfigEntry<bool> BulwarkSwordOnSatellite;
public static ConfigEntry<bool> ScrapperOnMoon;
public static ConfigEntry<bool> RemoveRandomScrapper;
public static ConfigEntry<bool> ObeliskOnMoon1;
public static ConfigEntry<int> SwordExtraLunar;
public static ConfigEntry<float> SwordHealth;
public static ConfigEntry<float> SwordDamage;
public static ConfigEntry<float> SwordSpeed;
public static ConfigEntry<float> SwordArmor;
public static ConfigEntry<float> SwordAttackSpeed;
public static ConfigEntry<bool> FHTeleporterOnStage6;
public static ConfigEntry<bool> RemoveRandomFHTeleporter;
public static ConfigEntry<bool> VieldsOnStage7;
public static ConfigEntry<bool> LocusOnStage10;
public static ConfigEntry<int> GoldShrineCost;
public static ConfigEntry<int> GoldenCoastChests;
public static ConfigEntry<bool> GoldenCoastCombatShrine;
public static ConfigEntry<bool> FHRadarScannerEffect;
public static ConfigEntry<bool> HauntedWoodShrine;
public static ConfigEntry<bool> VieldsNoLoot;
public static bool hanked;
public static bool pissed;
private ConfigEntry<bool> MountainShrinesInSirens;
public void Awake()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected O, but got Unknown
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
//IL_067e: Unknown result type (might be due to invalid IL or missing references)
//IL_0683: Unknown result type (might be due to invalid IL or missing references)
//IL_06bc: Unknown result type (might be due to invalid IL or missing references)
//IL_06c1: Unknown result type (might be due to invalid IL or missing references)
//IL_06c7: Expected O, but got Unknown
//IL_0716: Unknown result type (might be due to invalid IL or missing references)
//IL_072a: Unknown result type (might be due to invalid IL or missing references)
//IL_075f: Unknown result type (might be due to invalid IL or missing references)
//IL_0773: Unknown result type (might be due to invalid IL or missing references)
//IL_0797: Unknown result type (might be due to invalid IL or missing references)
//IL_07ab: Unknown result type (might be due to invalid IL or missing references)
//IL_07e1: Unknown result type (might be due to invalid IL or missing references)
//IL_07f5: Unknown result type (might be due to invalid IL or missing references)
//IL_0819: Unknown result type (might be due to invalid IL or missing references)
//IL_082d: Unknown result type (might be due to invalid IL or missing references)
//IL_0866: Unknown result type (might be due to invalid IL or missing references)
//IL_086d: Unknown result type (might be due to invalid IL or missing references)
//IL_0873: Unknown result type (might be due to invalid IL or missing references)
//IL_0894: Unknown result type (might be due to invalid IL or missing references)
//IL_089b: Unknown result type (might be due to invalid IL or missing references)
//IL_08a1: Unknown result type (might be due to invalid IL or missing references)
//IL_08c2: Unknown result type (might be due to invalid IL or missing references)
//IL_08c9: Unknown result type (might be due to invalid IL or missing references)
//IL_08cf: Unknown result type (might be due to invalid IL or missing references)
//IL_0909: Unknown result type (might be due to invalid IL or missing references)
//IL_0910: Unknown result type (might be due to invalid IL or missing references)
//IL_0916: Unknown result type (might be due to invalid IL or missing references)
//IL_0963: Unknown result type (might be due to invalid IL or missing references)
//IL_0968: Unknown result type (might be due to invalid IL or missing references)
//IL_096e: Expected O, but got Unknown
//IL_0a41: Unknown result type (might be due to invalid IL or missing references)
//IL_0a55: Unknown result type (might be due to invalid IL or missing references)
//IL_0a79: Unknown result type (might be due to invalid IL or missing references)
//IL_0a8d: Unknown result type (might be due to invalid IL or missing references)
//IL_0ab1: Unknown result type (might be due to invalid IL or missing references)
//IL_0ac5: Unknown result type (might be due to invalid IL or missing references)
//IL_0b23: Unknown result type (might be due to invalid IL or missing references)
//IL_0b37: Unknown result type (might be due to invalid IL or missing references)
//IL_0b58: Unknown result type (might be due to invalid IL or missing references)
//IL_0b6c: Unknown result type (might be due to invalid IL or missing references)
//IL_0ba3: Unknown result type (might be due to invalid IL or missing references)
//IL_0bb7: Unknown result type (might be due to invalid IL or missing references)
//IL_0bdb: Unknown result type (might be due to invalid IL or missing references)
//IL_0bef: Unknown result type (might be due to invalid IL or missing references)
//IL_0cab: Unknown result type (might be due to invalid IL or missing references)
//IL_0cbf: Unknown result type (might be due to invalid IL or missing references)
//IL_0ce3: Unknown result type (might be due to invalid IL or missing references)
//IL_0cf7: Unknown result type (might be due to invalid IL or missing references)
//IL_0d7c: Unknown result type (might be due to invalid IL or missing references)
//IL_0d81: Unknown result type (might be due to invalid IL or missing references)
//IL_0d92: Unknown result type (might be due to invalid IL or missing references)
//IL_0d97: Unknown result type (might be due to invalid IL or missing references)
//IL_0da8: Unknown result type (might be due to invalid IL or missing references)
//IL_0dad: Unknown result type (might be due to invalid IL or missing references)
//IL_0dbe: Unknown result type (might be due to invalid IL or missing references)
//IL_0dc3: Unknown result type (might be due to invalid IL or missing references)
//IL_0dd4: Unknown result type (might be due to invalid IL or missing references)
//IL_0dd9: Unknown result type (might be due to invalid IL or missing references)
//IL_0df7: Unknown result type (might be due to invalid IL or missing references)
//IL_0dfc: Unknown result type (might be due to invalid IL or missing references)
//IL_0e0d: Unknown result type (might be due to invalid IL or missing references)
//IL_0e12: Unknown result type (might be due to invalid IL or missing references)
//IL_0e23: Unknown result type (might be due to invalid IL or missing references)
//IL_0e28: Unknown result type (might be due to invalid IL or missing references)
//IL_0e46: Unknown result type (might be due to invalid IL or missing references)
//IL_0e4b: Unknown result type (might be due to invalid IL or missing references)
//IL_0e5c: Unknown result type (might be due to invalid IL or missing references)
//IL_0e61: Unknown result type (might be due to invalid IL or missing references)
//IL_0e72: Unknown result type (might be due to invalid IL or missing references)
//IL_0e77: Unknown result type (might be due to invalid IL or missing references)
//IL_0e88: Unknown result type (might be due to invalid IL or missing references)
//IL_0e8d: Unknown result type (might be due to invalid IL or missing references)
//IL_0e9e: Unknown result type (might be due to invalid IL or missing references)
//IL_0ea3: Unknown result type (might be due to invalid IL or missing references)
//IL_0ec1: Unknown result type (might be due to invalid IL or missing references)
//IL_0ec6: Unknown result type (might be due to invalid IL or missing references)
//IL_0ed7: Unknown result type (might be due to invalid IL or missing references)
//IL_0edc: Unknown result type (might be due to invalid IL or missing references)
//IL_0eed: Unknown result type (might be due to invalid IL or missing references)
//IL_0ef2: Unknown result type (might be due to invalid IL or missing references)
//IL_0f03: Unknown result type (might be due to invalid IL or missing references)
//IL_0f08: Unknown result type (might be due to invalid IL or missing references)
//IL_0f1c: Unknown result type (might be due to invalid IL or missing references)
//IL_0f26: Expected O, but got Unknown
//IL_0f2f: Unknown result type (might be due to invalid IL or missing references)
//IL_0f39: Expected O, but got Unknown
//IL_103d: Unknown result type (might be due to invalid IL or missing references)
//IL_1049: Unknown result type (might be due to invalid IL or missing references)
//IL_1055: Unknown result type (might be due to invalid IL or missing references)
//IL_1061: Unknown result type (might be due to invalid IL or missing references)
//IL_0f73: Unknown result type (might be due to invalid IL or missing references)
//IL_0f78: Unknown result type (might be due to invalid IL or missing references)
//IL_0f7e: Expected O, but got Unknown
//IL_0f98: Unknown result type (might be due to invalid IL or missing references)
//IL_0f9d: Unknown result type (might be due to invalid IL or missing references)
//IL_0fa3: Expected O, but got Unknown
//IL_1192: Unknown result type (might be due to invalid IL or missing references)
//IL_11a6: Unknown result type (might be due to invalid IL or missing references)
//IL_11ca: Unknown result type (might be due to invalid IL or missing references)
//IL_11de: Unknown result type (might be due to invalid IL or missing references)
//IL_1202: Unknown result type (might be due to invalid IL or missing references)
//IL_1216: Unknown result type (might be due to invalid IL or missing references)
//IL_123a: Unknown result type (might be due to invalid IL or missing references)
//IL_1241: Unknown result type (might be due to invalid IL or missing references)
//IL_1247: Unknown result type (might be due to invalid IL or missing references)
pluginInfo = ((BaseUnityPlugin)this).Info;
Harmony = new Harmony("prodzpod.ConsistentStageFeatures");
Log = ((BaseUnityPlugin)this).Logger;
Config = new ConfigFile(Path.Combine(Paths.ConfigPath, "prodzpod.ConsistentStageFeatures.cfg"), true);
TimescaleOverwrite = Config.Bind<string>("General", "Timescale Unlocks", "forgottenhaven", "List of scenes and run time, separated by commas. By default, disables time stop for FH.");
StageChances = Config.Bind<string>("General", "Stage Chances", "skymeadow - 3", "List of scenes and chance weight, separated by commas. by default makes sky meadow 3 times as likely so artifact grinding isnt godawful");
MaxVoidSeeds = Config.Bind<int>("General", "Max Void Seeds", 1, "Number of Void Seeds that can be spawned at a single stage. Default is 3.");
GuaranteedNewt = Config.Bind<bool>("General", "Guaranteed Newt Altar", true, "Guarantees 1 Newt shrine every stage.");
BuffBrazierOnStage1 = Config.Bind<bool>("Stage 1", "Buff Brazier on Stage 1", true, "Guaranteed Buff Brazier on stage 1.");
BuffBrazierCost = Config.Bind<int>("Stage 1", "Buff Brazier Cost", 50, "Buff brazier cost, scales with time.");
RemoveRandomBuffBrazier = Config.Bind<bool>("Stage 1", "Remove Random Buff Brazier Spawns", true, "only the fixed spawn exists");
RedPrinterOnSiphoned = Config.Bind<bool>("Stage 1", "Red Printer on Siphoned Forest", false, "make sure to balance printer before this");
GreenPrinterOnPlains = Config.Bind<bool>("Stage 1", "Green Printer on Golem Plains", false, "make sure to balance printer before this");
YellowPrinterOnRoost = Config.Bind<bool>("Stage 1", "Yellow Printer on Distant Roost", false, "make sure to balance printer before this");
LunarBudOnStage2 = Config.Bind<bool>("Stage 2", "Lunar bud on Stage 2", true, "Guaranteed Lunar bud on stage 2.");
RemoveRandomLunarBud = Config.Bind<bool>("Stage 2", "Remove Random Lunar Bud Spawns", false, "only the fixed spawn exists");
AqueductButtonNoRelease = Config.Bind<bool>("Stage 2", "Abandoned Aqueduct Pressure Plate Stays Pressed", false, "set to true when you're using difficulty mods, for solo players");
AqueductButtonMax = Config.Bind<int>("Stage 2", "Abandoned Aqueduct Pressure Plate Max Buttons", 2, "max: 8");
NKuhanaVoidGreen = Config.Bind<bool>("Stage 2", "N`kuhana Skeleton Drops Void Green", true, "i think you deserve it for going through Wetland Aspect");
GoldShrineOnStage3 = Config.Bind<bool>("Stage 3", "Altar of Gold on Stage 3", true, "Guaranteed Altar of Gold on stage 3.");
RemoveRandomGoldShrine = Config.Bind<bool>("Stage 3", "Remove Random Altar of Gold Spawns", false, "only the fixed spawn exists");
SpecialChestOnPools = Config.Bind<bool>("Stage 3", "Special Chests on Sulfur Pools", true, "Spawns 3 Cloaked Chests and 3 Lockboxes (1 of which will be encrusted if player has void, encrusted nerf kinda)");
HankOffersDrink = Config.Bind<bool>("Stage 3", "Hank Offers Drink", true, "Talking to Hank will result in a random drink.");
SpicyHank = Config.Bind<bool>("Stage 3", "GALSONE", false, "Hank offers GALSONE (per multiple requests)");
IllegalHank = Config.Bind<bool>("Stage 3", "Hank doesnt care for laws", false, "Hank will bypass ContentDisabler and the likes");
REXOnStage4 = Config.Bind<bool>("Stage 4", "REX on Stage 4", true, "Guaranteed Fuel Array usage");
MountainShrinesInSirens = Config.Bind<bool>("Stage 4", "Mountain Shrines on Siren`s Call", true, "lol");
ShrineRepairOnStage5 = Config.Bind<bool>("Stage 5", "Shrine of Repair on Stage 5", true, "Guaranteed Shrine of Repair on stage 5.");
ScrapperOnStage5 = Config.Bind<bool>("Stage 5", "Scrapper on Stage 5", false, "Guaranteed Scrapper on stage 5.");
RemoveRandomShrineRepair = Config.Bind<bool>("Stage 5", "Remove Random Shrine of Repair Spawns", false, "only the fixed spawn exists");
SageShrineOnMeadow = Config.Bind<bool>("Stage 5", "Sage`s Shrine on Sky Meadow", false, "shmrez is weird fr fr");
SageShrineOnSatellite = Config.Bind<bool>("Stage 5", "Sage`s Shrine on Slumbering Satellite", true, "makes it fixed");
RemoveRandomSageShrine = Config.Bind<bool>("Stage 5", "Remove Random Sage`s Shrine Spawns", true, "only the fixed spawn exists");
BulwarkSwordOnSatellite = Config.Bind<bool>("Stage 5", "Bulwark Sword on Slumbering Satellite", true, "haunted is no longer rng");
ScrapperOnMoon = Config.Bind<bool>("Commencement", "Scrapper on Moon", false, "Scrapper on the Moon. Use it if you have scrappers rebalanced.");
RemoveRandomScrapper = Config.Bind<bool>("Commencement", "Remove Random Scrapper Spawns", false, "only the fixed spawn exists");
SwordExtraLunar = Config.Bind<int>("Commencement", "Extra Lunar Coin with Crystalline Blade", 10, "Extra lunar coin reward for winning with the Crystalline Blade.");
SwordHealth = Config.Bind<float>("Commencement", "Mithrix Health Multiplier with Crystalline Blade", 0f, "Stat buffs for Mithrix with Crystalline Blade. Multiplicative.");
SwordDamage = Config.Bind<float>("Commencement", "Mithrix Damage Multiplier with Crystalline Blade", 0f, "Stat buffs for Mithrix with Crystalline Blade. Multiplicative.");
SwordSpeed = Config.Bind<float>("Commencement", "Mithrix Speed Bonus with Crystalline Blade", 0.2f, "Stat buffs for Mithrix with Crystalline Blade. Multiplicative.");
SwordArmor = Config.Bind<float>("Commencement", "Mithrix Armor Bonus with Crystalline Blade", 0f, "Stat buffs for Mithrix with Crystalline Blade. Multiplicative.");
SwordAttackSpeed = Config.Bind<float>("Commencement", "Mithrix Attack Speed Multiplier with Crystalline Blade", 0.2f, "Stat buffs for Mithrix with Crystalline Blade. Multiplicative.");
FHTeleporterOnStage6 = Config.Bind<bool>("Looping", "Shattered Teleporter on Stage 6", true, "Guaranteed Shattered Teleporters on stage 6.");
RemoveRandomFHTeleporter = Config.Bind<bool>("Looping", "Remove Random Shattered Teleporter Spawns", false, "only the fixed spawn exists");
VieldsOnStage7 = Config.Bind<bool>("Looping", "Null Portal on Stage 7", false, "Guaranteed Null Portal on stage 7.");
LocusOnStage10 = Config.Bind<bool>("Looping", "Void Portal on Stage 10", true, "Guaranteed Void Portal on stage 10.");
GoldShrineCost = Config.Bind<int>("Hidden Realm", "Altar of Gold Cost", 100, "Scales with time, vanilla is 200 (8 chests)");
GoldenCoastChests = Config.Bind<int>("Hidden Realm", "Altar of Gold Chests", 2, "Max: 4");
GoldenCoastCombatShrine = Config.Bind<bool>("Hidden Realm", "Guaranteed Combat Shrines in Golden Coast", true, "money printer");
FHRadarScannerEffect = Config.Bind<bool>("Hidden Realm", "Forgotten Haven Log and Cell Radar Scanner effect", true, "The purchasable logbook entry & putting in cells in the central portal triggers a Radar Scanner effect around it.");
HauntedWoodShrine = Config.Bind<bool>("Hidden Realm", "Shrine of the Woods on Bulwark`s Haunt", true, "No regen?");
VieldsNoLoot = Config.Bind<bool>("Hidden Realm", "Void Fields No Chests", true, "It already gives 9 items including a red bruh");
RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, new Action(PatchStageChances));
if (MaxVoidSeeds.Value != 3)
{
Addressables.LoadAssetAsync<InteractableSpawnCard>((object)"RoR2/DLC1/VoidCamp/iscVoidCamp.asset").WaitForCompletion().maxSpawnsPerStage = MaxVoidSeeds.Value;
}
if (GuaranteedNewt.Value)
{
object obj = <>c.<>9__65_0;
if (obj == null)
{
hook_Awake val = delegate(orig_Awake orig, SceneObjectToggleGroup self)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
if (self.toggleGroups.Length != 0)
{
GameObjectToggleGroup val9 = self.toggleGroups[self.toggleGroups.Length - 1];
if (SceneCatalog.mostRecentSceneDef.cachedName == "frozenwall")
{
ref GameObject[] objects = ref val9.objects;
GameObject gameObject = ((Component)GameObject.Find("HOLDER: Preplaced Objects").transform.Find("NewtStatue, Guaranteed")).gameObject;
ArrayUtils.ArrayAppend<GameObject>(ref objects, ref gameObject);
}
if (SceneCatalog.mostRecentSceneDef.cachedName == "blackbeach")
{
val9.minEnabled = 1;
}
if (SceneCatalog.mostRecentSceneDef.cachedName == "goolake")
{
val9.maxEnabled = AqueductButtonMax.Value;
val9.minEnabled = AqueductButtonMax.Value;
}
self.toggleGroups[self.toggleGroups.Length - 1] = val9;
}
orig.Invoke(self);
};
<>c.<>9__65_0 = val;
obj = (object)val;
}
SceneObjectToggleGroup.Awake += (hook_Awake)obj;
}
if (Mods("com.KomradeSpectre.Aetherium"))
{
checkBuffBrazier();
}
if (RedPrinterOnSiphoned.Value)
{
SpawnGuaranteed("snowyforest", "SpawnCards/InteractableSpawnCard/iscDuplicatorMilitary", new Vector3(-65.7508f, 80.6369f, -186.9797f), new Vector3(5.6833f, 33.3465f, 2.9875f));
}
if (GreenPrinterOnPlains.Value)
{
SpawnGuaranteed("golemplains", "SpawnCards/InteractableSpawnCard/iscDuplicatorLarge", new Vector3(-196.3943f, -138.4122f, 39.6045f), new Vector3(17.3021f, 93.9709f, 347.3439f));
SpawnGuaranteed("golemplains2", "SpawnCards/InteractableSpawnCard/iscDuplicatorLarge", new Vector3(-217.0215f, 40.3993f, -29.7606f), new Vector3(25.4828f, 230.3522f, 347.7884f));
}
if (YellowPrinterOnRoost.Value)
{
SpawnGuaranteed("blackbeach", "SpawnCards/InteractableSpawnCard/iscDuplicatorWild", new Vector3(203.9892f, -122.2774f, -105.9803f), new Vector3(45.3964f, 71.6722f, 7.0832f));
SpawnGuaranteed("blackbeach2", "SpawnCards/InteractableSpawnCard/iscDuplicatorWild", new Vector3(-137.3705f, 46.7941f, -97.3107f), new Vector3(15.839f, 115.0119f, 10.6805f));
}
if (LunarBudOnStage2.Value)
{
SpawnGuaranteed("goolake", "SpawnCards/InteractableSpawnCard/iscLunarChest", new Vector3(285.1561f, -62.09442f, -193.2947f));
SpawnGuaranteed("ancientloft", "SpawnCards/InteractableSpawnCard/iscLunarChest", new Vector3(-70.1913f, 80.87519f, 221.0971f));
SpawnGuaranteed("foggyswamp", "SpawnCards/InteractableSpawnCard/iscLunarChest", new Vector3(-121.8996f, -126.0044f, -235.4447f));
if (Mods("PlasmaCore.ForgottenRelics"))
{
SpawnGuaranteed("drybasin", "SpawnCards/InteractableSpawnCard/iscLunarChest", new Vector3(-228.2513f, 75.6862f, -86.5036f));
}
}
if (RemoveRandomLunarBud.Value)
{
LegacyResourcesAPI.Load<InteractableSpawnCard>("SpawnCards/InteractableSpawnCard/iscLunarChest").maxSpawnsPerStage = 0;
}
if (AqueductButtonNoRelease.Value)
{
object obj2 = <>c.<>9__65_2;
if (obj2 == null)
{
hook_SetSwitch val2 = delegate(orig_SetSwitch orig, PressurePlateController self, bool input)
{
if (input)
{
orig.Invoke(self, input);
}
};
<>c.<>9__65_2 = val2;
obj2 = (object)val2;
}
PressurePlateController.SetSwitch += (hook_SetSwitch)obj2;
}
if (AqueductButtonMax.Value != 2)
{
Stage.onStageStartGlobal += delegate(Stage stage)
{
if (stage.sceneDef.cachedName == "goolake")
{
((Component)GameObject.Find("HOLDER: Secret Ring Area Content").transform.Find("Entrance").Find("GLRuinGate")).GetComponent<Counter>().threshold = AqueductButtonMax.Value;
}
};
}
if (NKuhanaVoidGreen.Value)
{
HackSkeletonForceSpawn();
}
if (GoldShrineOnStage3.Value)
{
LegacyResourcesAPI.Load<InteractableSpawnCard>("SpawnCards/InteractableSpawnCard/iscShrineGoldshoresAccess").maxSpawnsPerStage = 1;
SpawnRandomly(3, "SpawnCards/InteractableSpawnCard/iscShrineGoldshoresAccess", loop: true);
}
if (RemoveRandomGoldShrine.Value)
{
LegacyResourcesAPI.Load<InteractableSpawnCard>("SpawnCards/InteractableSpawnCard/iscShrineGoldshoresAccess").maxSpawnsPerStage = 0;
}
if (SpecialChestOnPools.Value)
{
SpawnGuaranteed("sulfurpools", "SpawnCards/InteractableSpawnCard/iscChest1Stealthed", new Vector3(-0.1489f, -11.2628f, -58.985f), new Vector3(332.4133f, 147.7081f, 333.2504f));
SpawnGuaranteed("sulfurpools", "SpawnCards/InteractableSpawnCard/iscLockbox", new Vector3(22.7433f, -5.3875f, -236.629f), new Vector3(20.4497f, 16.1306f, 5.5421f));
SpawnGuaranteed("sulfurpools", "SpawnCards/InteractableSpawnCard/iscLockbox", new Vector3(-160.0294f, 7.244f, 122.3465f), new Vector3(27.0561f, 87.8281f, 352.8062f));
}
if (Mods("JaceDaDorito.FBLStage"))
{
HandleHank();
}
if (REXOnStage4.Value)
{
GameObject obj3 = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/TreebotUnlockInteractable");
SpawnGuaranteed("rootjungle", obj3, new Vector3(-134.6807f, 76.389f, -240.2231f), new Vector3(19.8134f, 35.7062f, 2.9408f));
SpawnGuaranteed("shipgraveyard", obj3, new Vector3(188.8096f, 95.1875f, -93.8135f), new Vector3(349.2507f, 204.2245f, 8.077f));
}
if (MountainShrinesInSirens.Value)
{
SpawnGuaranteed("shipgraveyard", "SpawnCards/InteractableSpawnCard/iscShrineBoss", new Vector3(-112.4888f, -28.4255f, -24.0116f), new Vector3(4.9546f, 195.4476f, 5.7509f));
SpawnGuaranteed("shipgraveyard", "SpawnCards/InteractableSpawnCard/iscShrineBoss", new Vector3(-90.4575f, -30.8145f, -52.1998f), new Vector3(353.2658f, 286.8359f, 352.891f));
}
if (Mods("com.Viliger.ShrineOfRepair"))
{
HandleShrineOfRepair();
}
if (ScrapperOnStage5.Value)
{
SpawnRandomly(5, "SpawnCards/InteractableSpawnCard/iscScrapper", loop: true);
}
if (Mods("PlasmaCore.ForgottenRelics"))
{
checkSageShrine();
}
if (Mods("PlasmaCore.ForgottenRelics", "com.themysticsword.bulwarkshaunt"))
{
checkBulwark();
}
if (ScrapperOnMoon.Value)
{
SpawnGuaranteed("moon", "SpawnCards/InteractableSpawnCard/iscScrapper", new Vector3(804.2821f, 287.1601f, 214.5148f), new Vector3(351.5653f, 249.8895f, 10.3f));
SpawnGuaranteed("moon2", "SpawnCards/InteractableSpawnCard/iscScrapper", new Vector3(17.2254f, -190.6997f, -307.0245f), new Vector3(1.2947f, 87.988f, 16.1012f));
}
if (RemoveRandomScrapper.Value)
{
LegacyResourcesAPI.Load<InteractableSpawnCard>("SpawnCards/InteractableSpawnCard/iscScrapper").maxSpawnsPerStage = 0;
}
if (Chainloader.PluginInfos.ContainsKey("com.themysticsword.bulwarkshaunt"))
{
Stage.onStageStartGlobal += delegate(Stage stage)
{
if (stage.sceneDef.cachedName == "moon2")
{
foreach (NetworkUser instances in NetworkUser.instancesList)
{
if (instances.master.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || instances.master.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0)
{
((Component)GameObject.Find("HOLDER: Gameplay Space").transform.Find("HOLDER: STATIC MESH").Find("Quadrant 5: Blood Arena").Find("Arena Weapons")
.Find("mdlBrotherSword (3)")).gameObject.SetActive(false);
}
}
}
};
SpeechInfo[] seeSword = (SpeechInfo[])(object)new SpeechInfo[5]
{
see("sword_1", "The blade..."),
see("sword_2", "Brother...?"),
see("sword_3", "You ask for death."),
see("sword_4", "That was your last mistake."),
see("sword_5", "You are not him.")
};
SpeechInfo[] seeSwordHeretic = (SpeechInfo[])(object)new SpeechInfo[3]
{
see("sword_heretic_1", "You survived."),
see("sword_heretic_2", "The job will be finished."),
see("sword_heretic_3", "Nowhere to run, Heretic.")
};
SpeechInfo[] killSword = (SpeechInfo[])(object)new SpeechInfo[5]
{
kill("sword_1", "You are unworthy."),
kill("sword_2", "You are not him."),
kill("sword_3", "Arrogant vermin."),
kill("sword_4", "Nothing but forgery."),
kill("sword_5", "Your tantrum ends here.")
};
SpeechInfo[] killSwordHurt = (SpeechInfo[])(object)new SpeechInfo[4]
{
kill("sword_hurt_1", "THIS IS HOW YOU WIELD."),
kill("sword_hurt_2", "INFERIOR."),
kill("sword_hurt_3", "THIS IS NOT YOURS."),
kill("sword_hurt_4", "NEVER DARE AGAIN.")
};
BrotherSpeechDriver.DoInitialSightResponse += (Manipulator)delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
ILCursor val8 = new ILCursor(il);
val8.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<BrotherSpeechDriver>(x, "SendReponseFromPool")
});
val8.Emit(OpCodes.Ldarg_0);
val8.EmitDelegate<Func<SpeechInfo[], BrotherSpeechDriver, SpeechInfo[]>>((Func<SpeechInfo[], BrotherSpeechDriver, SpeechInfo[]>)delegate(SpeechInfo[] orig, BrotherSpeechDriver self)
{
bool flag4 = CharacterBody.readOnlyInstancesList.Any((CharacterBody x) => x.bodyIndex == BrotherSpeechDriver.hereticBodyIndex);
return (CharacterBody.readOnlyInstancesList.Any((CharacterBody x) => x.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || x.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0) && !((Object)self).name.StartsWith("BrotherHurt")) ? (flag4 ? seeSwordHeretic : seeSword) : orig;
});
};
BrotherSpeechDriver.OnBodyKill += (Manipulator)delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
ILCursor val7 = new ILCursor(il);
val7.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<BrotherSpeechDriver>(x, "SendReponseFromPool")
});
val7.Emit(OpCodes.Ldarg_0);
val7.EmitDelegate<Func<SpeechInfo[], BrotherSpeechDriver, SpeechInfo[]>>((Func<SpeechInfo[], BrotherSpeechDriver, SpeechInfo[]>)delegate(SpeechInfo[] orig, BrotherSpeechDriver self)
{
bool flag2 = CharacterBody.readOnlyInstancesList.Any((CharacterBody x) => x.bodyIndex == BrotherSpeechDriver.hereticBodyIndex);
bool flag3 = CharacterBody.readOnlyInstancesList.Any((CharacterBody x) => x.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || x.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0);
if (flag2)
{
return orig;
}
return flag3 ? (((Object)self).name.StartsWith("BrotherHurt") ? killSwordHurt : killSword) : orig;
});
};
Stage.onStageStartGlobal += delegate
{
pissed = false;
};
object obj4 = <>c.<>9__65_21;
if (obj4 == null)
{
hook_BeginEncounter val3 = delegate(orig_BeginEncounter orig, ScriptedCombatEncounter self)
{
orig.Invoke(self);
if (SceneCatalog.mostRecentSceneDef.cachedName.StartsWith("moon"))
{
bool flag = CharacterBody.readOnlyInstancesList.Any((CharacterBody x) => x.inventory.GetItemCount(Items.BulwarksHaunt_Sword) > 0 || x.inventory.GetItemCount(Items.BulwarksHaunt_SwordUnleashed) > 0);
pissed |= flag;
if (pissed)
{
foreach (CharacterMaster members in self.combatSquad.membersList)
{
CharacterBody body = members.GetBody();
body.baseMaxHealth *= 1f + SwordHealth.Value;
body.levelMaxHealth *= 1f + SwordHealth.Value;
body.baseDamage *= 1f + SwordDamage.Value;
body.levelDamage *= 1f + SwordDamage.Value;
body.baseMoveSpeed *= 1f + SwordSpeed.Value;
body.levelMoveSpeed *= 1f + SwordSpeed.Value;
body.baseArmor *= 1f + SwordArmor.Value;
body.levelArmor *= 1f + SwordArmor.Value;
body.baseAttackSpeed *= 1f + SwordAttackSpeed.Value;
body.levelAttackSpeed *= 1f + SwordAttackSpeed.Value;
}
}
}
};
<>c.<>9__65_21 = val3;
obj4 = (object)val3;
}
ScriptedCombatEncounter.BeginEncounter += (hook_BeginEncounter)obj4;
object obj5 = <>c.<>9__65_22;
if (obj5 == null)
{
Manipulator val4 = delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
ILCursor val6 = new ILCursor(il);
val6.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<NetworkUser>(x, "AwardLunarCoins")
});
val6.EmitDelegate<Func<uint, uint>>((Func<uint, uint>)((uint orig) => (uint)(orig + (pissed ? SwordExtraLunar.Value : 0))));
};
<>c.<>9__65_22 = val4;
obj5 = (object)val4;
}
Run.BeginGameOver += (Manipulator)obj5;
}
if (Mods("PlasmaCore.ForgottenRelics"))
{
checkTeleporter();
}
if (Mods("PlasmaCore.ForgottenRelics"))
{
Harmony.PatchAll(typeof(PatchFRInteractables));
}
InteractableSpawnCard iscNullPortal = ScriptableObject.CreateInstance<InteractableSpawnCard>();
((Object)iscNullPortal).name = "iscSpecialVoidFieldPortal";
((SpawnCard)iscNullPortal).prefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/PortalArena");
((SpawnCard)iscNullPortal).sendOverNetwork = true;
((SpawnCard)iscNullPortal).hullSize = (HullClassification)1;
((SpawnCard)iscNullPortal).nodeGraphType = (GraphType)0;
((SpawnCard)iscNullPortal).requiredFlags = (NodeFlags)0;
((SpawnCard)iscNullPortal).forbiddenFlags = (NodeFlags)0;
((SpawnCard)iscNullPortal).directorCreditCost = 999999;
((SpawnCard)iscNullPortal).occupyPosition = true;
iscNullPortal.orientToFloor = false;
iscNullPortal.skipSpawnWhenSacrificeArtifactEnabled = false;
iscNullPortal.maxSpawnsPerStage = 0;
if (VieldsOnStage7.Value)
{
TeleporterInteraction.onTeleporterChargedGlobal += delegate(TeleporterInteraction tp)
{
//IL_0017: 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_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: 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)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Expected O, but got Unknown
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Expected O, but got Unknown
if (StageCheck(7, loop: true))
{
DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest((SpawnCard)(object)iscNullPortal, new DirectorPlacementRule
{
minDistance = 1f,
maxDistance = 25f,
placementMode = (PlacementMode)1,
position = ((Component)tp).transform.position,
spawnOnTarget = ((Component)tp).transform
}, Run.instance.stageRng));
}
};
}
if (LocusOnStage10.Value)
{
TeleporterInteraction.onTeleporterChargedGlobal += delegate(TeleporterInteraction tp)
{
//IL_009d: 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)
//IL_00ad: 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_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Expected O, but got Unknown
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Expected O, but got Unknown
SpawnCard isc = LegacyResourcesAPI.Load<SpawnCard>("SpawnCards/InteractableSpawnCard/iscVoidPortal");
if (StageCheck(10, loop: true) && !(tp.portalSpawners?.ToList()?.First((PortalSpawner x) => (Object)(object)x.portalSpawnCard == (Object)(object)isc)?.willSpawn ?? true))
{
DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(isc, new DirectorPlacementRule
{
minDistance = 1f,
maxDistance = 25f,
placementMode = (PlacementMode)1,
position = ((Component)tp).transform.position,
spawnOnTarget = ((Component)tp).transform
}, Run.instance.stageRng));
}
};
}
if (GoldShrineCost.Value != 200)
{
LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/Shrines/ShrineGoldshoresAccess").GetComponent<PurchaseInteraction>().cost = 100;
}
if (GoldenCoastChests.Value < 4)
{
Stage.onStageStartGlobal += delegate(Stage stage)
{
if (!(stage.sceneDef.cachedName != "goldshores"))
{
GameObject val5 = GameObject.Find("HOLDER: Preplaced Goodies");
if (!((Object)(object)val5 == (Object)null))
{
List<GameObject> chests = new List<GameObject>
{
((Component)val5.transform.Find("Chest1 - 1")).gameObject,
((Component)val5.transform.Find("Chest1 - 2")).gameObject,
((Component)val5.transform.Find("Chest1 - 3")).gameObject,
((Component)val5.transform.Find("Chest1 - 4")).gameObject
};
List<GameObject> list = (from x in Object.FindObjectsOfType<GameObject>()
where ((Object)x).name == "mdlChest1"
select x).ToList();
for (int num = 4; num > GoldenCoastChests.Value; num--)
{
int toRemove = Run.instance.runRNG.RangeInt(0, chests.Count);
chests[toRemove].SetActive(false);
GameObject? obj6 = list.Find(delegate(GameObject x)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: 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)
Vector3 position = x.transform.position;
return ((Vector3)(ref position)).Equals(chests[toRemove].transform.position);
});
if (obj6 != null)
{
obj6.SetActive(false);
}
chests.RemoveAt(toRemove);
}
}
}
};
}
if (GoldenCoastCombatShrine.Value)
{
SpawnGuaranteed("goldshores", "SpawnCards/InteractableSpawnCard/iscShrineCombat", new Vector3(-73.98104f, -6.325237f, 82.57056f), new Vector3(0f, 200.0384f, 0f));
SpawnGuaranteed("goldshores", "SpawnCards/InteractableSpawnCard/iscShrineCombat", new Vector3(75.62061f, -8.77954f, 116.1982f), new Vector3(0f, 281.339f, 0f));
SpawnGuaranteed("goldshores", "SpawnCards/InteractableSpawnCard/iscShrineCombat", new Vector3(-5.5166f, -9.3453f, -60.1567f), new Vector3(0f, 338.058f, 0f));
SpawnGuaranteed("goldshores", "SpawnCards/InteractableSpawnCard/iscShrineBlood", new Vector3(-9.266755f, 69.01228f, -66.08608f));
}
if (Mods("PlasmaCore.ForgottenRelics"))
{
checkRadar();
}
if (Mods("com.themysticsword.bulwarkshaunt"))
{
checkWoods();
}
if (!VieldsNoLoot.Value)
{
return;
}
SceneDirector.onPrePopulateSceneServer += delegate(SceneDirector dir)
{
if (SceneCatalog.mostRecentSceneDef.cachedName == "arena")
{
dir.interactableCredit = 0;
}
};
static void checkBuffBrazier()
{
if (!((Object)(object)BuffBrazier.InteractableSpawnCard == (Object)null))
{
if (BuffBrazierCost.Value != 25)
{
BuffBrazier.InteractableBodyModelPrefab.GetComponent<PurchaseInteraction>().cost = BuffBrazierCost.Value;
}
if (BuffBrazierOnStage1.Value)
{
SpawnRandomly(1, (SpawnCard)(object)BuffBrazier.InteractableSpawnCard);
}
if (RemoveRandomBuffBrazier.Value)
{
BuffBrazier.InteractableSpawnCard.maxSpawnsPerStage = 0;
}
}
}
static void checkBulwark()
{
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
if (!VF2ConfigManager.disableSlumberingSatellite.Value)
{
if (BulwarkSwordOnSatellite.Value)
{
SpawnGuaranteed("slumberingsatellite", Sword.swordObjPrefab, new Vector3(-157.3885f, 69.9324f, 154.4549f), new Vector3(344.073f, 60.7323f, 1.596f));
}
Stage.onStageStartGlobal += delegate(Stage stage)
{
if (stage.sceneDef.cachedName == "slumberingsatellite")
{
((Component)GameObject.Find("World").transform.Find("Gated Areas").Find("GateGround4")).gameObject.SetActive(true);
((Component)GameObject.Find("World").transform.Find("Gated Areas").Find("GateGround5")).gameObject.SetActive(true);
}
};
}
}
static void checkRadar()
{
if (!VF2ConfigManager.disableForgottenHaven.Value && FHRadarScannerEffect.Value)
{
FHRadarScannerPatch();
}
}
static void checkSageShrine()
{
//IL_003b: 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_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
if (!VF2ConfigManager.disableSagesShrine.Value)
{
if (SageShrineOnMeadow.Value)
{
SpawnGuaranteed("skymeadow", (SpawnCard)(object)VF2ContentPackProvider.iscSagesShrine, new Vector3(-146.0359f, 144.0454f, 181.8587f), new Vector3(322.3633f, 139.1794f, 21.4546f));
}
if (SageShrineOnSatellite.Value)
{
SpawnGuaranteed("slumberingsatellite", (SpawnCard)(object)VF2ContentPackProvider.iscSagesShrine, new Vector3(70.5048f, 108.5265f, -323.2408f), new Vector3(11.9998f, 144.8941f, 337.7272f));
}
Stage.onStageStartGlobal += delegate(Stage stage)
{
if (stage.sceneDef.cachedName == "slumberingsatellite")
{
((Component)GameObject.Find("World").transform.Find("Gated Areas").Find("GateGround0")).gameObject.SetActive(true);
}
};
}
}
static void checkTeleporter()
{
if (!VF2ConfigManager.disableForgottenHaven.Value && FHTeleporterOnStage6.Value)
{
SpawnRandomly(6, (SpawnCard)(object)VF2ContentPackProvider.iscLooseRelic, loop: true);
SpawnRandomly(6, (SpawnCard)(object)VF2ContentPackProvider.iscShatteredTeleporter, loop: true);
}
}
static void checkWoods()
{
//IL_0028: 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)
if (HauntedWoodShrine.Value)
{
SpawnGuaranteed("BulwarksHaunt_GhostWave", "SpawnCards/InteractableSpawnCard/iscShrineHealing", new Vector3(31.1182f, 62.9546f, -29.4124f), new Vector3(350.209f, 1.7844f, 350.0595f));
}
}
static SpeechInfo kill(string id, string txt)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
LanguageAPI.Add("BROTHER_KILL_" + id.ToUpper(), txt);
SpeechInfo result = default(SpeechInfo);
result.token = "BROTHER_KILL_" + id.ToUpper();
result.duration = 1f;
result.maxWait = 0.1f;
result.mustPlay = true;
result.priority = 10f;
return result;
}
static SpeechInfo see(string id, string txt)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
LanguageAPI.Add("BROTHER_SEE_" + id.ToUpper(), txt);
SpeechInfo result2 = default(SpeechInfo);
result2.token = "BROTHER_SEE_" + id.ToUpper();
result2.duration = 2f;
result2.maxWait = 0.5f;
result2.mustPlay = true;
result2.priority = 10000f;
return result2;
}
}
public static void PatchStageChances()
{
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01c0: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Unknown result type (might be due to invalid IL or missing references)
//IL_01ed: Unknown result type (might be due to invalid IL or missing references)
//IL_020b: Unknown result type (might be due to invalid IL or missing references)
List<string> timescales = TimescaleOverwrite.Value.Split(new char[1] { ',' }).ToList().ConvertAll((string x) => x.Trim());
Run.ShouldUpdateRunStopwatch += (hook_ShouldUpdateRunStopwatch)delegate(orig_ShouldUpdateRunStopwatch orig, Run self)
{
if (self.livingPlayerCount <= 0)
{
return orig.Invoke(self);
}
bool flag = orig.Invoke(self);
return timescales.Contains(SceneCatalog.mostRecentSceneDef.cachedName) ? (!flag) : flag;
};
Dictionary<string, float> dictionary = new Dictionary<string, float>();
foreach (string item in StageChances.Value.Split(new char[1] { ',' }).ToList().ConvertAll((string x) => x.Trim()))
{
List<string> list = item.Split(new char[1] { '-' }).ToList().ConvertAll((string x) => x.Trim());
if (list.Count == 2)
{
dictionary.Add(list[0], float.Parse(list[1]));
}
}
string[] array = new string[5] { "sgStage1", "sgStage2", "sgStage3", "sgStage4", "sgStage5" };
foreach (string text in array)
{
SceneCollection val = Addressables.LoadAssetAsync<SceneCollection>((object)("RoR2/Base/SceneGroups/" + text + ".asset")).WaitForCompletion();
List<SceneEntry> list2 = new List<SceneEntry>(val._sceneEntries);
for (int j = 0; j < list2.Count; j++)
{
if (dictionary.ContainsKey(list2[j].sceneDef.cachedName))
{
SceneEntry value = list2[j];
((SceneEntry)(ref value)).weight = dictionary[list2[j].sceneDef.cachedName];
list2[j] = value;
}
}
val._sceneEntries = list2.ToArray();
}
}
public static void HackSkeletonForceSpawn()
{
Stage.onStageStartGlobal += delegate
{
GameObject obj2 = GameObject.Find("HOLDER: Hidden Altar Stuff");
object obj3;
if (obj2 == null)
{
obj3 = null;
}
else
{
Transform transform = obj2.transform;
if (transform == null)
{
obj3 = null;
}
else
{
Transform obj4 = transform.Find("AltarCenter");
if (obj4 == null)
{
obj3 = null;
}
else
{
Transform obj5 = obj4.Find("AltarSkeletonBody");
obj3 = ((obj5 != null) ? ((Component)obj5).gameObject : null);
}
}
}
GameObject val = (GameObject)obj3;
if ((Object)(object)val != (Object)null)
{
GameObjectUnlockableFilter component = val.GetComponent<GameObjectUnlockableFilter>();
component.forbiddenUnlockable = "";
component.forbiddenUnlockableDef = null;
component.Networkactive = true;
component.active = true;
val.SetActive(true);
Log.LogDebug((object)"*Bad to the Bone Riff*");
}
};
GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport report)
{
//IL_003b: 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_005a: Unknown result type (might be due to invalid IL or missing references)
object obj;
if (report == null)
{
obj = null;
}
else
{
CharacterBody victimBody = report.victimBody;
obj = ((victimBody != null) ? ((Object)victimBody).name : null);
}
if ((string?)obj == "AltarSkeletonBody")
{
PickupDropletController.CreatePickupDroplet(Run.instance.treasureRng.NextElementUniform<PickupIndex>(Run.instance.availableVoidTier2DropList), report.victimBody.corePosition, new Vector3(-15f, 13f, -20f));
}
};
}
public static void HandleHank()
{
//IL_0198: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Expected O, but got Unknown
string[] items = new string[27]
{
"AttackSpeedAndMoveSpeed", "MysteriousVial", "Infusion", "HealingPotion", "SprintBonus", "MysticsItems_CoffeeBoostOnItemPickup", "ITEM_GOTCE_gd2", "ITEM_GOTCE_TubOfBart", "ItemDefSubmergingCistern", "ItemDefSeepingOcean",
"SiphonOnLowHealth", "DropOfNecrosis", "SpatteredCollection", "Tonic", "Ketchup", "RandomEquipmentTrigger", "VV_ITEM_EHANCE_VIALS_ITEM", "MysticsItems_GateChalice", "EQUIPMENT_JAR_OF_RESHAPING", "VendingMachine",
"ITEM_GOTCE_BottledCommand", "ITEM_GOTCE_BottledEnigma", "ITEM_GOTCE_BottledMetamorphosis", "ITEM_GOTCE_TubOfLard", "ITEM_GOTCE_DilutedFlask", "ITEM_GOTCE_FortifiedFlask", "ITEM_GOTCE_PaleAle"
};
string[] array = new string[7] { "PressurizedCanister", "IgniteOnKill", "ExplodeOnDeath", "EquipmentMagazineVoid", "EquipmentMagazine", "StrengthenBurn", "Molotov" };
if (SpicyHank.Value)
{
items = CollectionExtensions.AddRangeToArray<string>(items, array);
}
if (!HankOffersDrink.Value)
{
return;
}
Stage.onStageStartGlobal += delegate
{
hanked = false;
};
PurchaseInteraction.OnInteractionBegin += (hook_OnInteractionBegin)delegate(orig_OnInteractionBegin orig, PurchaseInteraction self, Interactor activator)
{
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Expected I4, but got Unknown
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
//IL_0206: Unknown result type (might be due to invalid IL or missing references)
//IL_020b: Unknown result type (might be due to invalid IL or missing references)
//IL_0210: Unknown result type (might be due to invalid IL or missing references)
//IL_026f: Unknown result type (might be due to invalid IL or missing references)
//IL_0289: Unknown result type (might be due to invalid IL or missing references)
//IL_023c: Unknown result type (might be due to invalid IL or missing references)
//IL_0230: Unknown result type (might be due to invalid IL or missing references)
//IL_02a3: Unknown result type (might be due to invalid IL or missing references)
//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
//IL_030e: Unknown result type (might be due to invalid IL or missing references)
//IL_0329: Unknown result type (might be due to invalid IL or missing references)
//IL_0344: Unknown result type (might be due to invalid IL or missing references)
//IL_035f: Unknown result type (might be due to invalid IL or missing references)
//IL_039a: Unknown result type (might be due to invalid IL or missing references)
//IL_039f: Unknown result type (might be due to invalid IL or missing references)
//IL_03a1: Unknown result type (might be due to invalid IL or missing references)
//IL_03ae: Unknown result type (might be due to invalid IL or missing references)
//IL_03b3: Unknown result type (might be due to invalid IL or missing references)
//IL_03bd: Unknown result type (might be due to invalid IL or missing references)
//IL_03c2: Unknown result type (might be due to invalid IL or missing references)
//IL_03c7: Unknown result type (might be due to invalid IL or missing references)
//IL_03d1: Unknown result type (might be due to invalid IL or missing references)
//IL_03e1: Unknown result type (might be due to invalid IL or missing references)
//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, activator);
if (((Object)((Component)self).gameObject).name == "BadToTheBone" && !hanked)
{
hanked = true;
WeightedSelection<List<PickupIndex>> val = new WeightedSelection<List<PickupIndex>>(8);
List<PickupIndex> list = new List<PickupIndex>();
List<PickupIndex> list2 = new List<PickupIndex>();
List<PickupIndex> list3 = new List<PickupIndex>();
List<PickupIndex> list4 = new List<PickupIndex>();
List<PickupIndex> list5 = new List<PickupIndex>();
IEnumerable<ItemDef> source;
if (!IllegalHank.Value)
{
source = from x in ((IEnumerable<ItemIndex>)Run.instance.availableItems).ToArray()
select ItemCatalog.GetItemDef(x);
}
else
{
IEnumerable<ItemDef> enumerable = (IEnumerable<ItemDef>)(object)ItemCatalog.allItemDefs;
source = enumerable;
}
foreach (ItemDef item3 in source.Where((ItemDef x) => items.Contains(((Object)x).name)))
{
PickupIndex item = PickupCatalog.FindPickupIndex(item3.itemIndex);
ItemTier tier = item3.tier;
ItemTier val2 = tier;
switch ((int)val2)
{
case 0:
case 6:
list.Add(item);
break;
case 1:
case 7:
list2.Add(item);
break;
case 2:
case 8:
list3.Add(item);
break;
default:
list4.Add(item);
break;
}
}
IEnumerable<EquipmentDef> source2;
if (!IllegalHank.Value)
{
source2 = from x in ((IEnumerable<EquipmentIndex>)Run.instance.availableEquipment).ToArray()
select EquipmentCatalog.GetEquipmentDef(x);
}
else
{
IEnumerable<EquipmentDef> equipmentDefs = EquipmentCatalog.equipmentDefs;
source2 = equipmentDefs;
}
foreach (EquipmentDef item4 in source2.Where((EquipmentDef x) => items.Contains(((Object)x).name)))
{
PickupIndex item2 = PickupCatalog.FindPickupIndex(item4.equipmentIndex);
if (!item4.isBoss && !item4.isLunar)
{
list5.Add(item2);
}
else
{
list4.Add(item2);
}
}
if (list.Count > 0)
{
val.AddChoice(new ChoiceInfo<List<PickupIndex>>
{
value = list,
weight = 1f
});
}
if (list2.Count > 0)
{
val.AddChoice(new ChoiceInfo<List<PickupIndex>>
{
value = list2,
weight = 0.5f
});
}
if (list3.Count > 0)
{
val.AddChoice(new ChoiceInfo<List<PickupIndex>>
{
value = list3,
weight = 0.1f
});
}
if (list4.Count > 0)
{
val.AddChoice(new ChoiceInfo<List<PickupIndex>>
{
value = list4,
weight = 0.3f
});
}
if (list5.Count > 0)
{
val.AddChoice(new ChoiceInfo<List<PickupIndex>>
{
value = list5,
weight = 0.5f
});
}
if (val.Count != 0)
{
PickupIndex val3 = Run.instance.treasureRng.NextElementUniform<PickupIndex>(val.Evaluate(Run.instance.treasureRng.nextNormalizedFloat));
PickupDropletController.CreatePickupDroplet(val3, ((Component)self).gameObject.transform.position + Vector3.up * 1.5f, Vector3.up * 5f + ((Component)self).gameObject.transform.forward * 20f);
}
}
};
}
public static void HandleShrineOfRepair()
{
InteractableSpawnCard val = (ShrineOfRepairConfigManager.UsePickupPickerPanel.Value ? ShrineOfRepairBase<ShrineOfRepairPicker>.shrineSpawnCard : ShrineOfRepairBase<ShrineOfRepairPurchase>.shrineSpawnCard);
if (ShrineRepairOnStage5.Value)
{
SpawnRandomly(5, (SpawnCard)(object)val, loop: true);
}
if (RemoveRandomShrineRepair.Value)
{
val.maxSpawnsPerStage = 0;
}
}
public static void FHRadarScannerPatch()
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__70_0;
if (obj == null)
{
hook_GrantUnlock val = delegate(orig_GrantUnlock orig, RadiotowerTerminal self, Interactor interactor)
{
//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)
orig.Invoke(self, interactor);
if (SceneCatalog.mostRecentSceneDef.cachedName == "forgottenhaven")
{
NetworkServer.Spawn(Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/ChestScanner"), ((Component)self).gameObject.transform.position, Quaternion.identity));
}
};
<>c.<>9__70_0 = val;
obj = (object)val;
}
RadiotowerTerminal.GrantUnlock += (hook_GrantUnlock)obj;
Harmony.PatchAll(typeof(PatchBatteryInteraction));
}
public static void SpawnGuaranteed(string scene, string dir, Vector3 pos, Vector3 rot = default(Vector3))
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
SpawnGuaranteed(scene, LegacyResourcesAPI.Load<SpawnCard>(dir), pos, rot);
}
public static void SpawnGuaranteed(string scene, SpawnCard spawnCard, Vector3 pos, Vector3 rot = default(Vector3))
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
Stage.onStageStartGlobal += delegate(Stage self)
{
//IL_0020: 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_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
//IL_0034: 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_003f: 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_005f: Expected O, but got Unknown
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Invalid comparison between Unknown and I4
if (!(self.sceneDef.cachedName != scene))
{
DirectorPlacementRule val = new DirectorPlacementRule
{
placementMode = (PlacementMode)0
};
GameObject spawnedInstance = spawnCard.DoSpawn(pos, Quaternion.Euler(rot), new DirectorSpawnRequest(spawnCard, val, Run.instance.runRNG)).spawnedInstance;
spawnedInstance.transform.eulerAngles = rot;
if (Object.op_Implicit((Object)(object)spawnedInstance))
{
PurchaseInteraction component = spawnedInstance.GetComponent<PurchaseInteraction>();
if (Object.op_Implicit((Object)(object)component) && (int)component.costType == 1)
{
component.Networkcost = Run.instance.GetDifficultyScaledCost(component.cost);
}
}
NetworkServer.Spawn(spawnedInstance);
}
};
Log.LogDebug((object)("Added a Guaranteed Spawn of " + ((Object)spawnCard.prefab).name + " at " + scene));
}
public static void SpawnGuaranteed(string scene, GameObject obj, Vector3 pos, Vector3 rot = default(Vector3))
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_001d: Unknown result type (might be due to invalid IL or missing references)
Stage.onStageStartGlobal += delegate(Stage self)
{
//IL_0020: 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_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Expected O, but got Unknown
//IL_0034: 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_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Invalid comparison between Unknown and I4
if (!(self.sceneDef.cachedName != scene))
{
DirectorPlacementRule val = new DirectorPlacementRule
{
placementMode = (PlacementMode)0
};
GameObject val2 = Object.Instantiate<GameObject>(obj, pos, Quaternion.Euler(rot));
val2.transform.eulerAngles = rot;
if (Object.op_Implicit((Object)(object)val2))
{
PurchaseInteraction component = val2.GetComponent<PurchaseInteraction>();
if (Object.op_Implicit((Object)(object)component) && (int)component.costType == 1)
{
component.Networkcost = Run.instance.GetDifficultyScaledCost(component.cost);
}
}
NetworkServer.Spawn(val2);
}
};
Log.LogDebug((object)("Added a Guaranteed Spawn of " + ((Object)obj).name + " at " + scene));
}
public static void SpawnRandomly(string scene, string dir)
{
SpawnRandomly(scene, LegacyResourcesAPI.Load<SpawnCard>(dir));
}
public static void SpawnRandomly(string scene, SpawnCard spawnCard)
{
SceneDirector.onPrePopulateSceneServer += delegate
{
if (!(SceneCatalog.mostRecentSceneDef.cachedName != scene))
{
SpawnRandomlyInternal(spawnCard);
}
};
Log.LogDebug((object)("Added a Random Spawn of " + ((Object)spawnCard).name + " at " + scene));
}
public static void SpawnRandomly(int stage, string dir, bool loop = false)
{
SpawnRandomly(stage, LegacyResourcesAPI.Load<SpawnCard>(dir), loop);
}
public static void SpawnRandomly(int stage, SpawnCard spawnCard, bool loop = false)
{
SceneDirector.onPostPopulateSceneServer += delegate
{
if (StageCheck(stage, loop) && !((Object)(object)TeleporterInteraction.instance == (Object)null))
{
SpawnRandomlyInternal(spawnCard);
}
};
Log.LogDebug((object)$"Added a Random Spawn of {((Object)spawnCard).name} at Stage {stage}");
}
private static void SpawnRandomlyInternal(SpawnCard spawnCard)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Expected O, but got Unknown
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Invalid comparison between Unknown and I4
DirectorPlacementRule val = new DirectorPlacementRule
{
placementMode = (PlacementMode)4
};
GameObject val2 = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(spawnCard, val, Run.instance.runRNG));
if (Object.op_Implicit((Object)(object)val2))
{
PurchaseInteraction component = val2.GetComponent<PurchaseInteraction>();
if (Object.op_Implicit((Object)(object)component) && (int)component.costType == 1)
{
component.Networkcost = Run.instance.GetDifficultyScaledCost(component.cost);
}
}
}
public static bool Mods(params string[] arr)
{
for (int i = 0; i < arr.Length; i++)
{
if (!Chainloader.PluginInfos.ContainsKey(arr[i]))
{
return false;
}
}
return true;
}
public static bool StageCheck(int level, bool loop = false)
{
if (!loop)
{
return Run.instance.stageClearCount == level - 1;
}
int loops = (level - 1) / 5;
int stage = (level - 1) % 5;
if (Mods("prodzpod.ProperLoop"))
{
return checkProperLoop();
}
return Run.instance.loopClearCount >= loops && Run.instance.stageClearCount % 5 == stage;
bool checkProperLoop()
{
return Main.loops >= loops && Main.stage == stage;
}
}
}
[HarmonyPatch(typeof(FRHooks), "SceneDirector_onPostPopulateSceneServer")]
public class PatchFRInteractables
{
public static void ILManipulator(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (Main.RemoveRandomFHTeleporter.Value && val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld<VF2ContentPackProvider>(x, "iscShatteredTeleporter"),
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Object>(x, "op_Implicit")
}))
{
val.Emit(OpCodes.Pop);
val.Emit(OpCodes.Ldc_I4_0);
Main.Log.LogDebug((object)"Removed Shattered Teleporters");
}
if (Main.RemoveRandomSageShrine.Value && val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld<VF2ContentPackProvider>(x, "iscSagesShrine"),
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Object>(x, "op_Implicit")
}))
{
val.Emit(OpCodes.Pop);
val.Emit(OpCodes.Ldc_I4_0);
Main.Log.LogDebug((object)"Removed Sage's Shrines");
}
}
}
}