using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using MenuLib;
using MenuLib.MonoBehaviors;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Larsielol")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("RepoSeeded")]
[assembly: AssemblyTitle("RepoSeeded")]
[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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[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 RepoSeeded
{
[HarmonyPatch(typeof(EnemyDirector))]
internal static class EnemyRNGPatch
{
[HarmonyPrefix]
[HarmonyPatch("PickEnemies")]
private static bool EnemyTypeRNGSeeder(List<EnemySetup> _enemiesList)
{
Random.InitState(RepoSeeded.EnemyTypeRandom.Next());
int num = DataDirector.instance.SettingValueFetch((Setting)31);
ListExtension.Shuffle<EnemySetup>((IList<EnemySetup>)_enemiesList);
EnemySetup item = null;
float num2 = -1f;
foreach (EnemySetup _enemies in _enemiesList)
{
if (_enemies.levelsCompletedCondition && (RunManager.instance.levelsCompleted < _enemies.levelsCompletedMin || RunManager.instance.levelsCompleted > _enemies.levelsCompletedMax))
{
continue;
}
int num3 = 0;
foreach (EnemySetup item2 in RunManager.instance.enemiesSpawned)
{
if ((Object)(object)item2 == (Object)(object)_enemies)
{
num3++;
}
}
float num4 = 100f;
if (Object.op_Implicit((Object)(object)_enemies.rarityPreset))
{
num4 = _enemies.rarityPreset.chance;
}
float num5 = Mathf.Max(0f, num4 - 30f * (float)num3);
float num6 = Random.Range(0f, num5);
if (num6 > num2)
{
item = _enemies;
num2 = num6;
}
}
EnemyDirector.instance.enemyList.Add(item);
RepoSeeded.EnemyOrbRandoms.Clear();
return false;
}
[HarmonyPrefix]
[HarmonyPatch("Start")]
private static bool EnemyIdleRNGGSeeder()
{
Random.InitState(RepoSeeded.LevelRandom.Next());
return true;
}
[HarmonyPostfix]
[HarmonyPatch("Start")]
private static void EnemyIdleRNGGChecker()
{
Debug.LogError((object)("Current idle timer: " + EnemyDirector.instance.spawnIdlePauseTimer));
}
}
[HarmonyPatch(typeof(RunManager))]
internal static class LevelAreaRNGPatch
{
[HarmonyPrefix]
[HarmonyPatch("SetRunLevel")]
private static void LevelAreaRNGSeeder(ref Level ___previousRunLevel, ref Level ___levelCurrent, int ___levelsCompleted)
{
Debug.LogWarning((object)"LevelAreaRngpatch");
if (___levelsCompleted == 0)
{
___previousRunLevel = null;
___levelCurrent = null;
}
if (!RepoSeeded.JustHijackedTheSave)
{
RepoSeeded.saveRandoms();
Debug.LogError((object)"Didnt just hijack");
}
else
{
RepoSeeded.JustHijackedTheSave = false;
}
Debug.LogWarning((object)"Randoms right now:");
Debug.LogWarning((object)RepoSeeded.ValuableTypeSeed);
Debug.LogWarning((object)RepoSeeded.LevelSeed);
Debug.LogWarning((object)RepoSeeded.ShopSeed);
Debug.LogWarning((object)RepoSeeded.EnemyTypeSeed);
Debug.LogWarning((object)RepoSeeded.EnemyOrbSeed);
Random.InitState(RepoSeeded.LevelRandom.Next());
}
}
[HarmonyPatch(typeof(LevelGenerator))]
internal static class LevelLayoutRNGPatch
{
[HarmonyPrefix]
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
private static void LevelGenerationRNGSeederTiles()
{
_ = RepoSeeded.JustHijackedTheSave;
Random.InitState(RepoSeeded.LevelRandom.Next());
RepoSeeded.TruckTextRandom = new Random(RepoSeeded.LevelRandom.Next());
}
[HarmonyPrefix]
[HarmonyPatch(/*Could not decode attribute arguments.*/)]
private static void LevelGenerationRNGSeederModules()
{
Random.InitState(RepoSeeded.LevelRandom.Next());
}
}
[HarmonyPatch(typeof(EnemyParent))]
internal static class OrbValueRNGPatch
{
[HarmonyPrefix]
[HarmonyPatch("Despawn")]
private static bool RemoveValueRNG(EnemyParent __instance)
{
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Unknown result type (might be due to invalid IL or missing references)
//IL_018a: Invalid comparison between Unknown and I4
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_01a0: Invalid comparison between Unknown and I4
//IL_01fa: Unknown result type (might be due to invalid IL or missing references)
//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
//IL_01db: Unknown result type (might be due to invalid IL or missing references)
Debug.LogError((object)"RemoveValueRNG");
Random.InitState(RepoSeeded.EnemyOrbRandom.Next());
Debug.LogWarning((object)("Set the orb of a thing called " + ((Object)((Component)__instance).gameObject).name));
if (GameManager.Multiplayer() && !PhotonNetwork.IsMasterClient)
{
return false;
}
__instance.Enemy.CurrentState = (EnemyState)11;
__instance.DespawnedTimer = Random.Range(__instance.DespawnedTimeMin, __instance.DespawnedTimeMax) * EnemyDirector.instance.despawnedDecreaseMultiplier * EnemyDirector.instance.despawnedTimeMultiplier;
__instance.DespawnedTimer = Mathf.Max(__instance.DespawnedTimer, 1f);
if (__instance.Enemy.HasRigidbody)
{
__instance.Enemy.Rigidbody.grabbed = false;
__instance.Enemy.Rigidbody.grabStrengthTimer = 0f;
__instance.Enemy.Rigidbody.GrabRelease(true, 0.1f);
}
if (GameManager.Multiplayer())
{
((MonoBehaviourPun)__instance).photonView.RPC("DespawnRPC", (RpcTarget)0, Array.Empty<object>());
}
else
{
__instance.DespawnRPC(default(PhotonMessageInfo));
}
if (!__instance.Enemy.HasHealth || __instance.Enemy.Health.healthCurrent > 0)
{
return false;
}
if (__instance.Enemy.Health.spawnValuable && __instance.valuableSpawnTimer > 0f && __instance.Enemy.Health.spawnValuableCurrent < __instance.Enemy.Health.spawnValuableMax)
{
GameObject val = AssetManager.instance.enemyValuableSmall;
if ((int)__instance.difficulty == 1)
{
val = AssetManager.instance.enemyValuableMedium;
}
else if ((int)__instance.difficulty == 2)
{
val = AssetManager.instance.enemyValuableBig;
}
Transform val2 = __instance.Enemy.CustomValuableSpawnTransform;
if (!Object.op_Implicit((Object)(object)val2))
{
val2 = __instance.Enemy.CenterTransform;
}
GameObject val3 = (SemiFunc.IsMultiplayer() ? PhotonNetwork.InstantiateRoomObject("Valuables/" + ((Object)val).name, val2.position, Quaternion.identity, (byte)0, (object[])null) : Object.Instantiate<GameObject>(val, val2.position, Quaternion.identity));
EnemyHealth health = __instance.Enemy.Health;
health.spawnValuableCurrent++;
ValuableObject component = val3.GetComponent<ValuableObject>();
Random.InitState(RepoSeeded.EnemyOrbRandoms[__instance].Next());
component.DollarValueSetLogic();
Debug.LogError((object)("Set value of orb to $" + component.dollarValueCurrent + "\nEnding at random " + RepoSeeded.EnemyOrbRandoms[__instance].Next()));
}
__instance.DespawnedTimer *= 3f;
return false;
}
}
[HarmonyPatch(typeof(LevelGenerator))]
internal static class AddEnemiesToOrbRNG
{
[HarmonyPrefix]
[HarmonyPatch("EnemySpawn")]
private static bool getAllEnemiesIntoList(ref EnemySetup enemySetup, ref Vector3 position)
{
//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_002d: 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_008e: Unknown result type (might be due to invalid IL or missing references)
foreach (PrefabRef spawnObject in enemySetup.spawnObjects)
{
GameObject val = ((GameManager.instance.gameMode != 0) ? PhotonNetwork.InstantiateRoomObject(spawnObject.ResourcePath, position, Quaternion.identity, (byte)0, (object[])null) : Object.Instantiate<GameObject>(spawnObject.Prefab, position, Quaternion.identity));
EnemyParent component = val.GetComponent<EnemyParent>();
if (Object.op_Implicit((Object)(object)component))
{
RepoSeeded.EnemyOrbRandoms.Add(component, new Random(RepoSeeded.EnemyOrbRandom.Next()));
component.SetupDone = true;
val.GetComponentInChildren<Enemy>().EnemyTeleported(position);
LevelGenerator instance = LevelGenerator.Instance;
instance.EnemiesSpawnTarget++;
EnemyDirector.instance.FirstSpawnPointAdd(component);
}
}
return false;
}
}
[BepInPlugin("Larsielol.RepoSeeded", "RepoSeeded", "2.3.0")]
public class RepoSeeded : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Action<string> <>9__31_3;
public static ScrollViewBuilderDelegate <>9__31_2;
public static Action <>9__31_1;
public static BuilderDelegate <>9__31_0;
internal void <Awake>b__31_0(Transform parent)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
REPOButton val = MenuAPI.CreateREPOButton("Input Seed", (Action)delegate
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
REPOPopupPage val3 = MenuAPI.CreateREPOPopupPage("Seed Menu", (PresetSide)0, false, true, 1.5f);
object obj = <>9__31_2;
if (obj == null)
{
ScrollViewBuilderDelegate val4 = delegate(Transform scrollView)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
Action<string> obj2 = delegate(string newSeed)
{
setSeed(newSeed);
};
string currentSeed = RepoSeeded.currentSeed;
REPOInputField val5 = MenuAPI.CreateREPOInputField("Seed", obj2, scrollView, default(Vector2), false, "", currentSeed);
return ((REPOElement)val5).rectTransform;
};
<>9__31_2 = val4;
obj = (object)val4;
}
val3.AddElementToScrollView((ScrollViewBuilderDelegate)obj, 0f, 0f);
val3.OpenPage(false);
}, parent, new Vector2(50f, 95f));
Transform val2 = parent.Find("Menu Button - Tutorial");
((Component)val2).gameObject.SetActive(false);
}
internal void <Awake>b__31_1()
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
REPOPopupPage val = MenuAPI.CreateREPOPopupPage("Seed Menu", (PresetSide)0, false, true, 1.5f);
object obj = <>9__31_2;
if (obj == null)
{
ScrollViewBuilderDelegate val2 = delegate(Transform scrollView)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
Action<string> obj2 = delegate(string newSeed)
{
setSeed(newSeed);
};
string currentSeed = RepoSeeded.currentSeed;
REPOInputField val3 = MenuAPI.CreateREPOInputField("Seed", obj2, scrollView, default(Vector2), false, "", currentSeed);
return ((REPOElement)val3).rectTransform;
};
<>9__31_2 = val2;
obj = (object)val2;
}
val.AddElementToScrollView((ScrollViewBuilderDelegate)obj, 0f, 0f);
val.OpenPage(false);
}
internal RectTransform <Awake>b__31_2(Transform scrollView)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
Action<string> obj = delegate(string newSeed)
{
setSeed(newSeed);
};
string currentSeed = RepoSeeded.currentSeed;
REPOInputField val = MenuAPI.CreateREPOInputField("Seed", obj, scrollView, default(Vector2), false, "", currentSeed);
return ((REPOElement)val).rectTransform;
}
internal void <Awake>b__31_3(string newSeed)
{
setSeed(newSeed);
}
}
internal static bool JustHijackedTheSave = true;
internal static Random ValuableTypeRandom = new Random(1);
internal static Random ValuableCostRandom = new Random(1);
internal static Random LevelRandom = new Random(1);
internal static Random ShopRandom = new Random(1);
internal static Random EnemyTypeRandom = new Random(1);
internal static Random EnemyOrbRandom = new Random(1);
internal static Random TruckTextRandom = new Random(1);
internal static Dictionary<EnemyParent, Random> EnemyOrbRandoms = new Dictionary<EnemyParent, Random>();
internal static int ValuableTypeSeed = 1;
internal static int ValuableCostSeed = 1;
internal static int LevelSeed = 1;
internal static int ShopSeed = 1;
internal static int EnemyTypeSeed = 1;
internal static int EnemyOrbSeed = 1;
internal static int TruckTextSeed = 1;
public static string currentSeed = "1";
internal static RepoSeeded Instance { get; private set; } = null;
internal static ManualLogSource Logger => Instance._logger;
private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;
internal Harmony? Harmony { get; set; }
public static void setSeed(string seed)
{
SHA256 sHA = SHA256.Create();
seed = seed.Replace(" ", "");
int num = 1;
try
{
num = int.Parse(seed);
}
catch (FormatException)
{
byte[] array = sHA.ComputeHash(Encoding.UTF8.GetBytes(seed));
num = BitConverter.ToInt32(array);
}
ValuableTypeRandom = new Random(num);
ValuableCostRandom = new Random(num + 1);
LevelRandom = new Random(num + 2);
ShopRandom = new Random(num + 3);
EnemyTypeRandom = new Random(num + 4);
EnemyOrbRandom = new Random(num + 5);
TruckTextRandom = new Random(num + 6);
if (Object.op_Implicit((Object)(object)RunManager.instance))
{
RunManager.instance.enemiesSpawned = new List<EnemySetup>();
}
currentSeed = seed;
Debug.LogError((object)("Set the new seed to: " + seed + "\n"));
}
public static void saveRandoms()
{
ValuableTypeSeed = ValuableTypeRandom.Next();
ValuableTypeRandom = new Random(ValuableTypeSeed);
ValuableCostSeed = ValuableCostRandom.Next();
ValuableCostRandom = new Random(ValuableCostSeed);
LevelSeed = LevelRandom.Next();
LevelRandom = new Random(LevelSeed);
ShopSeed = ShopRandom.Next();
ShopRandom = new Random(ShopSeed);
EnemyTypeSeed = EnemyTypeRandom.Next();
EnemyTypeRandom = new Random(EnemyTypeSeed);
EnemyOrbSeed = EnemyOrbRandom.Next();
EnemyOrbRandom = new Random(EnemyOrbSeed);
}
private void Awake()
{
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Expected O, but got Unknown
Instance = this;
setSeed(currentSeed);
((Component)this).gameObject.transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
Patch();
object obj = <>c.<>9__31_0;
if (obj == null)
{
BuilderDelegate val = delegate(Transform parent)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
REPOButton val2 = MenuAPI.CreateREPOButton("Input Seed", (Action)delegate
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
REPOPopupPage val4 = MenuAPI.CreateREPOPopupPage("Seed Menu", (PresetSide)0, false, true, 1.5f);
object obj2 = <>c.<>9__31_2;
if (obj2 == null)
{
ScrollViewBuilderDelegate val5 = delegate(Transform scrollView)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
Action<string> obj3 = delegate(string newSeed)
{
setSeed(newSeed);
};
string text = currentSeed;
REPOInputField val6 = MenuAPI.CreateREPOInputField("Seed", obj3, scrollView, default(Vector2), false, "", text);
return ((REPOElement)val6).rectTransform;
};
<>c.<>9__31_2 = val5;
obj2 = (object)val5;
}
val4.AddElementToScrollView((ScrollViewBuilderDelegate)obj2, 0f, 0f);
val4.OpenPage(false);
}, parent, new Vector2(50f, 95f));
Transform val3 = parent.Find("Menu Button - Tutorial");
((Component)val3).gameObject.SetActive(false);
};
<>c.<>9__31_0 = val;
obj = (object)val;
}
MenuAPI.AddElementToMainMenu((BuilderDelegate)obj);
Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!");
}
internal void Patch()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
//IL_0025: Expected O, but got Unknown
if (Harmony == null)
{
Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
Harmony val2 = val;
Harmony = val;
}
Harmony.PatchAll();
}
internal void Unpatch()
{
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
private void Update()
{
}
}
[HarmonyPatch(typeof(MenuPageSaves))]
internal static class RNGSetterOnGameStart
{
[HarmonyPrefix]
[HarmonyPatch("OnNewGame")]
private static void setSeedOnNewGame()
{
RepoSeeded.setSeed(RepoSeeded.currentSeed);
}
}
[HarmonyPatch(typeof(StatsManager))]
internal static class SaveHijack
{
private const string saveName = "R.E.P.O. SEEDED";
private static StatsManager sm = StatsManager.instance;
[HarmonyPostfix]
[HarmonyPatch("SaveGame")]
private static void InjectOwnRNGSaveData(ref string fileName)
{
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Expected O, but got Unknown
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
if (string.IsNullOrEmpty(fileName) || !SemiFunc.IsMasterClientOrSingleplayer())
{
return;
}
sm.dateAndTime = DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
string text = Application.persistentDataPath + "/saves";
if (!Directory.Exists(text))
{
Directory.CreateDirectory(text);
}
string text2 = text + "/" + fileName;
if (!Directory.Exists(text2))
{
Directory.CreateDirectory(text2);
}
string text3 = text2 + "/" + fileName + ".es3";
if (File.Exists(text3))
{
StatsManager obj = sm;
obj.backupIndex++;
string destFileName = text2 + "/" + fileName + "_BACKUP" + sm.backupIndex + ".es3";
File.Move(text3, destFileName);
}
ES3Settings val = new ES3Settings(new Enum[1] { (Enum)(object)(Location)4 });
val.encryptionType = (EncryptionType)1;
val.encryptionPassword = sm.totallyNormalString;
val.path = text3;
ES3.Save<string>("teamName", "R.E.P.O. SEEDED", val);
ES3.Save<string>("dateAndTime", "Seed: " + RepoSeeded.currentSeed, val);
ES3.Save<float>("timePlayed", sm.timePlayed, val);
ES3.Save<Dictionary<string, string>>("playerNames", sm.playerNames, val);
Debug.LogWarning((object)"Saving:");
Debug.LogWarning((object)RepoSeeded.ValuableTypeSeed);
Debug.LogWarning((object)RepoSeeded.LevelSeed);
Debug.LogWarning((object)RepoSeeded.ShopSeed);
Debug.LogWarning((object)RepoSeeded.EnemyTypeSeed);
Debug.LogWarning((object)RepoSeeded.EnemyOrbSeed);
ES3.Save<int>("ValuableTypeRandom", RepoSeeded.ValuableTypeSeed, val);
ES3.Save<int>("ValuableCostRandom", RepoSeeded.ValuableCostSeed, val);
ES3.Save<int>("LevelRandom", RepoSeeded.LevelSeed, val);
ES3.Save<int>("ShopRandom", RepoSeeded.ShopSeed, val);
ES3.Save<int>("EnemyTypeRandom", RepoSeeded.EnemyTypeSeed, val);
ES3.Save<int>("EnemyOrbRandom", RepoSeeded.EnemyOrbSeed, val);
ES3.Save<int>("TruckTextRandom", RepoSeeded.TruckTextSeed, val);
Dictionary<string, Dictionary<string, int>> dictionary = new Dictionary<string, Dictionary<string, int>>();
foreach (KeyValuePair<string, Dictionary<string, int>> dictionaryOfDictionary in sm.dictionaryOfDictionaries)
{
if (sm.doNotSaveTheseDictionaries.Contains(dictionaryOfDictionary.Key))
{
continue;
}
if (sm.stripTheseDictionaries.Contains(dictionaryOfDictionary.Key))
{
dictionary[dictionaryOfDictionary.Key] = dictionaryOfDictionary.Value.Where<KeyValuePair<string, int>>((KeyValuePair<string, int> x) => x.Value != 0).ToDictionary<KeyValuePair<string, int>, string, int>((KeyValuePair<string, int> x) => x.Key, (KeyValuePair<string, int> x) => x.Value);
}
else
{
dictionary[dictionaryOfDictionary.Key] = dictionaryOfDictionary.Value;
}
}
ES3.Save<Dictionary<string, Dictionary<string, int>>>("dictionaryOfDictionaries", dictionary, val);
ES3.StoreCachedFile(val);
sm.PlayersAddAll();
sm.saveFileReady = true;
}
[HarmonyPostfix]
[HarmonyPatch("LoadGame")]
public static void GetInjectedSaveData(string fileName, ref List<string> backupList)
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Expected O, but got Unknown
if (!SemiFunc.IsMasterClientOrSingleplayer())
{
return;
}
string text = Application.persistentDataPath + "/saves/" + fileName + "/" + fileName + ".es3";
if (File.Exists(text))
{
sm.saveFileCurrent = fileName;
ES3Settings val = new ES3Settings(text, (EncryptionType)1, sm.totallyNormalString, (ES3Settings)null);
sm.teamName = ES3.Load<string>("teamName", (string)null, "R.E.P.O.", val);
sm.dateAndTime = ES3.Load<string>("dateAndTime", (string)null, DateTime.Now.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture), val);
sm.timePlayed = ES3.Load<float>("timePlayed", (string)null, 0f, val);
sm.playerNames = ES3.Load<Dictionary<string, string>>("playerNames", (string)null, new Dictionary<string, string>(), val);
if (sm.teamName == "R.E.P.O. SEEDED")
{
RepoSeeded.currentSeed = sm.dateAndTime.Substring(6);
RepoSeeded.ValuableTypeSeed = ES3.Load<int>("ValuableTypeRandom", (string)null, -1, val);
RepoSeeded.ValuableTypeRandom = new Random(RepoSeeded.ValuableTypeSeed);
RepoSeeded.ValuableCostSeed = ES3.Load<int>("ValuableCostRandom", (string)null, -1, val);
RepoSeeded.ValuableCostRandom = new Random(RepoSeeded.ValuableCostSeed);
RepoSeeded.LevelSeed = ES3.Load<int>("LevelRandom", (string)null, -1, val);
RepoSeeded.LevelRandom = new Random(RepoSeeded.LevelSeed);
RepoSeeded.ShopSeed = ES3.Load<int>("ShopRandom", (string)null, -1, val);
RepoSeeded.ShopRandom = new Random(RepoSeeded.ShopSeed);
RepoSeeded.EnemyTypeSeed = ES3.Load<int>("EnemyTypeRandom", (string)null, -1, val);
RepoSeeded.TruckTextSeed = ES3.Load<int>("TruckTextRandom", (string)null, -1, val);
RepoSeeded.TruckTextRandom = new Random(RepoSeeded.TruckTextSeed);
if (RepoSeeded.EnemyTypeSeed == -1)
{
Debug.LogError((object)"ITS NEGATIVE ONE!! ENEMYTYPE SEED IS -1");
}
RepoSeeded.EnemyTypeRandom = new Random(RepoSeeded.EnemyTypeSeed);
RepoSeeded.EnemyOrbSeed = ES3.Load<int>("EnemyOrbRandom", (string)null, -1, val);
RepoSeeded.EnemyOrbRandom = new Random(RepoSeeded.EnemyOrbSeed);
RunManager.instance.enemiesSpawned = new List<EnemySetup>();
RepoSeeded.JustHijackedTheSave = true;
Debug.LogWarning((object)"Loaded:");
Debug.LogWarning((object)RepoSeeded.ValuableTypeSeed);
Debug.LogWarning((object)RepoSeeded.LevelSeed);
Debug.LogWarning((object)RepoSeeded.ShopSeed);
Debug.LogWarning((object)RepoSeeded.EnemyTypeSeed);
Debug.LogWarning((object)RepoSeeded.EnemyOrbSeed);
Debug.LogWarning((object)RepoSeeded.TruckTextSeed);
}
foreach (KeyValuePair<string, Dictionary<string, int>> item in ES3.Load<Dictionary<string, Dictionary<string, int>>>("dictionaryOfDictionaries", (string)null, new Dictionary<string, Dictionary<string, int>>(), val))
{
if (sm.dictionaryOfDictionaries.TryGetValue(item.Key, out var value))
{
foreach (KeyValuePair<string, int> item2 in item.Value)
{
value[item2.Key] = item2.Value;
}
}
else
{
sm.dictionaryOfDictionaries.Add(item.Key, new Dictionary<string, int>(item.Value));
}
}
}
else
{
Debug.LogWarning((object)("Save file not found in " + text));
}
RunManager.instance.levelsCompleted = sm.GetRunStatLevel();
RunManager.instance.runLives = sm.GetRunStatLives();
RunManager.instance.loadLevel = sm.GetRunStatSaveLevel();
sm.PlayersAddAll();
if (backupList == null)
{
backupList = sm.SaveFileGetBackups(fileName, Application.persistentDataPath + "/saves");
}
if (backupList.Count > 0)
{
Match match = Regex.Match(backupList[0], "_BACKUP(\\d+)$");
sm.backupIndex = (match.Success ? int.Parse(match.Groups[1].Value) : 0);
}
else
{
sm.backupIndex = 0;
}
sm.saveFileReady = true;
}
}
[HarmonyPatch(typeof(RunManager))]
internal static class SetNewSeedToPreviousSeed
{
[HarmonyPostfix]
[HarmonyPatch("ResetProgress")]
private static void setSeedOnNewAutoRun()
{
RepoSeeded.setSeed(RepoSeeded.currentSeed);
RepoSeeded.JustHijackedTheSave = true;
}
[HarmonyPostfix]
[HarmonyPatch("LeaveToMainMenu")]
private static void setSeedWhenBackToMenu()
{
RepoSeeded.setSeed(RepoSeeded.currentSeed);
RepoSeeded.JustHijackedTheSave = true;
}
}
[HarmonyPatch(typeof(ShopManager))]
internal static class ShopRNGPatch
{
private const string placeholderName = "REPOSEEDED PLACEHOLDER";
private static ShopManager sm = ShopManager.instance;
[HarmonyPatch("GetAllItemsFromStatsManager")]
[HarmonyPrefix]
private static bool GetAlllItemsPrefix()
{
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Invalid comparison between Unknown and I4
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Invalid comparison between Unknown and I4
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Invalid comparison between Unknown and I4
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Invalid comparison between Unknown and I4
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Invalid comparison between Unknown and I4
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Invalid comparison between Unknown and I4
//IL_0207: Unknown result type (might be due to invalid IL or missing references)
//IL_022b: Unknown result type (might be due to invalid IL or missing references)
//IL_025c: Unknown result type (might be due to invalid IL or missing references)
//IL_0242: Unknown result type (might be due to invalid IL or missing references)
Debug.LogError((object)"ShouPGet");
Random.InitState(RepoSeeded.ShopRandom.Next());
if (SemiFunc.IsNotMasterClient())
{
return false;
}
sm.potentialItems.Clear();
sm.potentialItemConsumables.Clear();
sm.potentialItemUpgrades.Clear();
sm.potentialItemHealthPacks.Clear();
sm.potentialSecretItems.Clear();
sm.itemConsumablesAmount = Random.Range(4, 6);
Item[] array = sortItemsOnName(StatsManager.instance.itemDictionary.Values);
foreach (Item val in array)
{
Item val2 = val;
int num = SemiFunc.StatGetItemsPurchased(((Object)val2).name);
float num2 = val2.value.valueMax / 1000f * sm.itemValueMultiplier;
if ((int)val2.itemType == 3)
{
num2 = sm.UpgradeValueGet(num2, val2);
}
else if ((int)val2.itemType == 8)
{
num2 = sm.HealthPackValueGet(num2);
}
else if ((int)val2.itemType == 5)
{
num2 = sm.CrystalValueGet(num2);
}
float num3 = Mathf.Clamp(num2, 1f, num2);
bool flag = (int)val2.itemType == 5;
bool flag2 = (int)val2.itemType == 3;
bool flag3 = (int)val2.itemType == 8;
int maxAmountInShop = val2.maxAmountInShop;
if (num >= maxAmountInShop || (val2.maxPurchase && StatsManager.instance.GetItemsUpgradesPurchasedTotal(((Object)val2).name) >= val2.maxPurchaseAmount))
{
RepoSeeded.Logger.LogInfo((object)val2.itemName);
val2 = null;
}
for (int j = 0; j < maxAmountInShop; j++)
{
if ((Object)(object)val2 != (Object)null && j >= maxAmountInShop - num)
{
RepoSeeded.Logger.LogInfo((object)"PLACEHOLDERED item: ");
RepoSeeded.Logger.LogInfo((object)val2.itemName);
val2 = null;
}
if (flag2)
{
sm.potentialItemUpgrades.Add(val2);
continue;
}
if (flag3)
{
sm.potentialItemHealthPacks.Add(val2);
continue;
}
if (flag)
{
sm.potentialItemConsumables.Add(val2);
continue;
}
if ((int)val.itemSecretShopType == 0)
{
sm.potentialItems.Add(val2);
continue;
}
if (!sm.potentialSecretItems.ContainsKey(val.itemSecretShopType))
{
sm.potentialSecretItems.Add(val.itemSecretShopType, new List<Item>());
}
sm.potentialSecretItems[val.itemSecretShopType].Add(val2);
}
}
ListExtension.Shuffle<Item>((IList<Item>)sm.potentialItems);
for (int num4 = sm.potentialItems.Count - 1; num4 >= 0; num4--)
{
if ((Object)(object)sm.potentialItems[num4] == (Object)null)
{
RepoSeeded.Logger.LogInfo((object)"Removed item");
sm.potentialItems.RemoveAt(num4);
}
}
ListExtension.Shuffle<Item>((IList<Item>)sm.potentialItemConsumables);
for (int num5 = sm.potentialItemConsumables.Count - 1; num5 >= 0; num5--)
{
if ((Object)(object)sm.potentialItemConsumables[num5] == (Object)null)
{
RepoSeeded.Logger.LogInfo((object)"Removed item");
sm.potentialItemConsumables.RemoveAt(num5);
}
}
ListExtension.Shuffle<Item>((IList<Item>)sm.potentialItemUpgrades);
for (int num6 = sm.potentialItemUpgrades.Count - 1; num6 >= 0; num6--)
{
if ((Object)(object)sm.potentialItemUpgrades[num6] == (Object)null)
{
RepoSeeded.Logger.LogInfo((object)"Removed item");
sm.potentialItemUpgrades.RemoveAt(num6);
}
}
ListExtension.Shuffle<Item>((IList<Item>)sm.potentialItemHealthPacks);
for (int num7 = sm.potentialItemHealthPacks.Count - 1; num7 >= 0; num7--)
{
if ((Object)(object)sm.potentialItemHealthPacks[num7] == (Object)null)
{
RepoSeeded.Logger.LogInfo((object)"Removed item");
sm.potentialItemHealthPacks.RemoveAt(num7);
}
}
foreach (List<Item> value in sm.potentialSecretItems.Values)
{
ListExtension.Shuffle<Item>((IList<Item>)value);
for (int num8 = value.Count - 1; num8 >= 0; num8--)
{
if ((Object)(object)value[num8] == (Object)null)
{
RepoSeeded.Logger.LogInfo((object)"Removed item");
value.RemoveAt(num8);
}
}
}
RepoSeeded.Logger.LogInfo((object)("Items in queue: " + sm.potentialItems.Count));
return false;
}
[HarmonyPatch("GetAllItemVolumesInScene")]
[HarmonyPrefix]
private static bool GetAllVolumesPrefix()
{
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: 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_0093: Unknown result type (might be due to invalid IL or missing references)
Debug.LogError((object)"ShoupGetVols");
Random.InitState(RepoSeeded.ShopRandom.Next());
if (SemiFunc.IsNotMasterClient())
{
return false;
}
sm.itemVolumes.Clear();
sm.secretItemVolumes.Clear();
ItemVolume[] array = Object.FindObjectsByType<ItemVolume>((FindObjectsSortMode)0);
sortVolumesOnLocation(array);
ItemVolume[] array2 = array;
foreach (ItemVolume val in array2)
{
if ((int)val.itemSecretShopType == 0)
{
sm.itemVolumes.Add(val);
continue;
}
if (!sm.secretItemVolumes.ContainsKey(val.itemSecretShopType))
{
sm.secretItemVolumes.Add(val.itemSecretShopType, new List<ItemVolume>());
}
sm.secretItemVolumes[val.itemSecretShopType].Add(val);
}
foreach (List<ItemVolume> value in sm.secretItemVolumes.Values)
{
ListExtension.Shuffle<ItemVolume>((IList<ItemVolume>)value);
}
ListExtension.Shuffle<ItemVolume>((IList<ItemVolume>)sm.itemVolumes);
return false;
}
public static void sortVolumesOnLocation(ItemVolume[] volumes)
{
Array.Sort(volumes, delegate(ItemVolume a, ItemVolume b)
{
//IL_000f: 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_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = new Vector3(0f, 0f, 0f) - ((Component)a).transform.position;
float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
val = new Vector3(0f, 0f, 0f) - ((Component)b).transform.position;
return sqrMagnitude.CompareTo(((Vector3)(ref val)).sqrMagnitude);
});
}
public static Item[] sortItemsOnName(IEnumerable<Item> items)
{
Item[] array = items.ToArray();
if (array.Any((Item item) => (Object)(object)item == (Object)null))
{
RepoSeeded.Logger.LogError((object)"fuck");
}
Array.Sort(array, (Item a, Item b) => a.itemName.CompareTo(b.itemName));
return array;
}
}
[HarmonyPatch(typeof(TruckScreenText))]
internal static class TruckTextRNGPatch
{
[HarmonyPrefix]
[HarmonyPatch("NextLine")]
private static bool RemoveTruckTextRNG(TruckScreenText __instance, ref int _currentLineIndex)
{
Random.InitState(RepoSeeded.TruckTextRandom.Next());
return true;
}
}
internal static class ValuableCostsRNGPatch
{
[HarmonyPatch("DollarValueSetLogic")]
[HarmonyPrefix]
private static bool RemoveValueRNG(ref Rigidbody ___rb)
{
return true;
}
}
[HarmonyPatch(typeof(ValuableDirector))]
internal static class ValuableTypesRNGPatch
{
[CompilerGenerated]
private sealed class <newSetupHost>d__1 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
private ValuableDirector <vd>5__2;
private string[] <_names>5__3;
private int[] <_maxAmount>5__4;
private List<ValuableVolume>[] <_volumes>5__5;
private string[] <_path>5__6;
private int[] <_chance>5__7;
private List<PrefabRef>[] <_valuables>5__8;
private int[] <_volumeIndex>5__9;
private int <_i>5__10;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <newSetupHost>d__1(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<vd>5__2 = null;
<_names>5__3 = null;
<_maxAmount>5__4 = null;
<_volumes>5__5 = null;
<_path>5__6 = null;
<_chance>5__7 = null;
<_valuables>5__8 = null;
<_volumeIndex>5__9 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0b64: Unknown result type (might be due to invalid IL or missing references)
//IL_0b6e: Expected O, but got Unknown
//IL_0bb5: Unknown result type (might be due to invalid IL or missing references)
//IL_0bbf: Expected O, but got Unknown
//IL_05e5: Unknown result type (might be due to invalid IL or missing references)
//IL_05eb: Invalid comparison between Unknown and I4
//IL_06d4: Unknown result type (might be due to invalid IL or missing references)
//IL_06da: Invalid comparison between Unknown and I4
ValuableDirector obj9;
switch (<>1__state)
{
default:
return false;
case 0:
{
<>1__state = -1;
<vd>5__2 = ValuableDirector.instance;
if (SemiFunc.RunGetDifficultyMultiplier2() > 0f && !SemiFunc.RunIsArena())
{
float num = SemiFunc.RunGetDifficultyMultiplier2();
<vd>5__2.totalMaxValue = Mathf.RoundToInt(<vd>5__2.totalMaxValueCurve2.Evaluate(num));
<vd>5__2.tinyMaxAmount = Mathf.RoundToInt(<vd>5__2.tinyMaxAmountCurve2.Evaluate(num));
<vd>5__2.smallMaxAmount = Mathf.RoundToInt(<vd>5__2.smallMaxAmountCurve2.Evaluate(num));
<vd>5__2.mediumMaxAmount = Mathf.RoundToInt(<vd>5__2.mediumMaxAmountCurve2.Evaluate(num));
<vd>5__2.bigMaxAmount = Mathf.RoundToInt(<vd>5__2.bigMaxAmountCurve2.Evaluate(num));
<vd>5__2.wideMaxAmount = Mathf.RoundToInt(<vd>5__2.wideMaxAmountCurve2.Evaluate(num));
<vd>5__2.tallMaxAmount = Mathf.RoundToInt(<vd>5__2.tallMaxAmountCurve2.Evaluate(num));
<vd>5__2.veryTallMaxAmount = Mathf.RoundToInt(<vd>5__2.veryTallMaxAmountCurve2.Evaluate(num));
}
else
{
float num2 = SemiFunc.RunGetDifficultyMultiplier1();
if (SemiFunc.RunIsArena())
{
num2 = 0.75f;
}
<vd>5__2.totalMaxValue = Mathf.RoundToInt(<vd>5__2.totalMaxValueCurve1.Evaluate(num2));
<vd>5__2.tinyMaxAmount = Mathf.RoundToInt(<vd>5__2.tinyMaxAmountCurve1.Evaluate(num2));
<vd>5__2.smallMaxAmount = Mathf.RoundToInt(<vd>5__2.smallMaxAmountCurve1.Evaluate(num2));
<vd>5__2.mediumMaxAmount = Mathf.RoundToInt(<vd>5__2.mediumMaxAmountCurve1.Evaluate(num2));
<vd>5__2.bigMaxAmount = Mathf.RoundToInt(<vd>5__2.bigMaxAmountCurve1.Evaluate(num2));
<vd>5__2.wideMaxAmount = Mathf.RoundToInt(<vd>5__2.wideMaxAmountCurve1.Evaluate(num2));
<vd>5__2.tallMaxAmount = Mathf.RoundToInt(<vd>5__2.tallMaxAmountCurve1.Evaluate(num2));
<vd>5__2.veryTallMaxAmount = Mathf.RoundToInt(<vd>5__2.veryTallMaxAmountCurve1.Evaluate(num2));
}
if (SemiFunc.RunIsArena())
{
ValuableDirector obj = <vd>5__2;
obj.totalMaxAmount /= 2;
ValuableDirector obj2 = <vd>5__2;
obj2.tinyMaxAmount /= 3;
ValuableDirector obj3 = <vd>5__2;
obj3.smallMaxAmount /= 3;
ValuableDirector obj4 = <vd>5__2;
obj4.mediumMaxAmount /= 3;
ValuableDirector obj5 = <vd>5__2;
obj5.bigMaxAmount /= 3;
ValuableDirector obj6 = <vd>5__2;
obj6.wideMaxAmount /= 2;
ValuableDirector obj7 = <vd>5__2;
obj7.tallMaxAmount /= 2;
ValuableDirector obj8 = <vd>5__2;
obj8.veryTallMaxAmount /= 2;
}
foreach (LevelValuables valuablePreset in LevelGenerator.Instance.Level.ValuablePresets)
{
<vd>5__2.tinyValuables.AddRange(valuablePreset.tiny);
<vd>5__2.smallValuables.AddRange(valuablePreset.small);
<vd>5__2.mediumValuables.AddRange(valuablePreset.medium);
<vd>5__2.bigValuables.AddRange(valuablePreset.big);
<vd>5__2.wideValuables.AddRange(valuablePreset.wide);
<vd>5__2.tallValuables.AddRange(valuablePreset.tall);
<vd>5__2.veryTallValuables.AddRange(valuablePreset.veryTall);
}
List<ValuableVolume> list = Object.FindObjectsByType<ValuableVolume>((FindObjectsInactive)0, (FindObjectsSortMode)0).ToList();
sortVolumesOnLocation(list);
Random.InitState(RepoSeeded.ValuableTypeRandom.Next());
<vd>5__2.tinyVolumes = list.FindAll((ValuableVolume x) => (int)x.VolumeType == 0);
ListExtension.Shuffle<ValuableVolume>((IList<ValuableVolume>)<vd>5__2.tinyVolumes);
<vd>5__2.smallVolumes = list.FindAll((ValuableVolume x) => (int)x.VolumeType == 1);
ListExtension.Shuffle<ValuableVolume>((IList<ValuableVolume>)<vd>5__2.smallVolumes);
<vd>5__2.mediumVolumes = list.FindAll((ValuableVolume x) => (int)x.VolumeType == 2);
ListExtension.Shuffle<ValuableVolume>((IList<ValuableVolume>)<vd>5__2.mediumVolumes);
<vd>5__2.bigVolumes = list.FindAll((ValuableVolume x) => (int)x.VolumeType == 3);
ListExtension.Shuffle<ValuableVolume>((IList<ValuableVolume>)<vd>5__2.bigVolumes);
<vd>5__2.wideVolumes = list.FindAll((ValuableVolume x) => (int)x.VolumeType == 4);
ListExtension.Shuffle<ValuableVolume>((IList<ValuableVolume>)<vd>5__2.wideVolumes);
<vd>5__2.tallVolumes = list.FindAll((ValuableVolume x) => (int)x.VolumeType == 5);
ListExtension.Shuffle<ValuableVolume>((IList<ValuableVolume>)<vd>5__2.tallVolumes);
<vd>5__2.veryTallVolumes = list.FindAll((ValuableVolume x) => (int)x.VolumeType == 6);
ListExtension.Shuffle<ValuableVolume>((IList<ValuableVolume>)<vd>5__2.veryTallVolumes);
if ((int)<vd>5__2.valuableDebug == 1)
{
<vd>5__2.totalMaxAmount = list.Count;
<vd>5__2.totalMaxValue = 99999f;
<vd>5__2.tinyMaxAmount = <vd>5__2.tinyVolumes.Count;
<vd>5__2.smallMaxAmount = <vd>5__2.smallVolumes.Count;
<vd>5__2.mediumMaxAmount = <vd>5__2.mediumVolumes.Count;
<vd>5__2.bigMaxAmount = <vd>5__2.bigVolumes.Count;
<vd>5__2.wideMaxAmount = <vd>5__2.wideVolumes.Count;
<vd>5__2.tallMaxAmount = <vd>5__2.tallVolumes.Count;
<vd>5__2.veryTallMaxAmount = <vd>5__2.veryTallVolumes.Count;
}
if ((int)<vd>5__2.valuableDebug == 2 || LevelGenerator.Instance.Level.ValuablePresets.Count <= 0)
{
<vd>5__2.totalMaxAmount = 0;
<vd>5__2.tinyMaxAmount = 0;
<vd>5__2.smallMaxAmount = 0;
<vd>5__2.mediumMaxAmount = 0;
<vd>5__2.bigMaxAmount = 0;
<vd>5__2.wideMaxAmount = 0;
<vd>5__2.tallMaxAmount = 0;
<vd>5__2.veryTallMaxAmount = 0;
}
<vd>5__2.valuableTargetAmount = 0;
<_names>5__3 = new string[7] { "Tiny", "Small", "Medium", "Big", "Wide", "Tall", "Very Tall" };
<_maxAmount>5__4 = new int[7] { <vd>5__2.tinyMaxAmount, <vd>5__2.smallMaxAmount, <vd>5__2.mediumMaxAmount, <vd>5__2.bigMaxAmount, <vd>5__2.wideMaxAmount, <vd>5__2.tallMaxAmount, <vd>5__2.veryTallMaxAmount };
<_volumes>5__5 = new List<ValuableVolume>[7] { <vd>5__2.tinyVolumes, <vd>5__2.smallVolumes, <vd>5__2.mediumVolumes, <vd>5__2.bigVolumes, <vd>5__2.wideVolumes, <vd>5__2.tallVolumes, <vd>5__2.veryTallVolumes };
<_path>5__6 = new string[7] { <vd>5__2.tinyPath, <vd>5__2.smallPath, <vd>5__2.mediumPath, <vd>5__2.bigPath, <vd>5__2.widePath, <vd>5__2.tallPath, <vd>5__2.veryTallPath };
<_chance>5__7 = new int[7] { <vd>5__2.tinyChance, <vd>5__2.smallChance, <vd>5__2.mediumChance, <vd>5__2.bigChance, <vd>5__2.wideChance, <vd>5__2.tallChance, <vd>5__2.veryTallChance };
<_valuables>5__8 = new List<PrefabRef>[7] { <vd>5__2.tinyValuables, <vd>5__2.smallValuables, <vd>5__2.mediumValuables, <vd>5__2.bigValuables, <vd>5__2.wideValuables, <vd>5__2.tallValuables, <vd>5__2.veryTallValuables };
<_volumeIndex>5__9 = new int[7];
<_i>5__10 = 0;
goto IL_0af7;
}
case 1:
<>1__state = -1;
<_i>5__10++;
goto IL_0af7;
case 2:
<>1__state = -1;
goto IL_0b7e;
case 3:
{
<>1__state = -1;
break;
}
IL_0af7:
if (<_i>5__10 < <vd>5__2.totalMaxAmount)
{
Random.InitState(RepoSeeded.ValuableTypeRandom.Next());
float num3 = -1f;
int num4 = -1;
for (int i = 0; i < <_names>5__3.Length; i++)
{
if (<_volumeIndex>5__9[i] < <_maxAmount>5__4[i] && <_volumeIndex>5__9[i] < <_volumes>5__5[i].Count)
{
int num5 = Random.Range(0, <_chance>5__7[i]);
if ((float)num5 > num3)
{
num3 = num5;
num4 = i;
}
}
}
if (num4 != -1)
{
ValuableVolume val = <_volumes>5__5[num4][<_volumeIndex>5__9[num4]];
PrefabRef val2 = <_valuables>5__8[num4][Random.Range(0, <_valuables>5__8[num4].Count)];
<vd>5__2.Spawn(val2, val, <_path>5__6[num4]);
<_volumeIndex>5__9[num4]++;
<>2__current = null;
<>1__state = 1;
return true;
}
}
if (GameManager.instance.gameMode == 1)
{
<vd>5__2.PhotonView.RPC("ValuablesTargetSetRPC", (RpcTarget)0, new object[1] { <vd>5__2.valuableTargetAmount });
}
obj9 = <vd>5__2;
obj9.valuableSpawnPlayerReady++;
goto IL_0b7e;
IL_0b7e:
if (GameManager.instance.gameMode == 1 && <vd>5__2.valuableSpawnPlayerReady < PhotonNetwork.CurrentRoom.PlayerCount)
{
<>2__current = (object)new WaitForSeconds(0.1f);
<>1__state = 2;
return true;
}
<vd>5__2.VolumesAndSwitchSetup();
break;
}
if (GameManager.instance.gameMode == 1 && <vd>5__2.switchSetupPlayerReady < PhotonNetwork.CurrentRoom.PlayerCount)
{
<>2__current = (object)new WaitForSeconds(0.1f);
<>1__state = 3;
return true;
}
<vd>5__2.setupComplete = true;
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[HarmonyPrefix]
[HarmonyPatch("SetupHost")]
private static bool ValuablesRNGSeeder(ref IEnumerator __result)
{
__result = newSetupHost();
return false;
}
[IteratorStateMachine(typeof(<newSetupHost>d__1))]
private static IEnumerator newSetupHost()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <newSetupHost>d__1(0);
}
[HarmonyPatch("Spawn")]
[HarmonyPrefix]
private static bool RemoveStartRandomizing(ref PrefabRef _valuable, ref ValuableVolume _volume, ref string _path)
{
//IL_0049: 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_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)
ValuableDirector instance = ValuableDirector.instance;
GameObject prefab = _valuable.Prefab;
GameObject val = ((GameManager.instance.gameMode != 0) ? PhotonNetwork.InstantiateRoomObject(_valuable.resourcePath, ((Component)_volume).transform.position, ((Component)_volume).transform.rotation, (byte)0, (object[])null) : Object.Instantiate<GameObject>(prefab, ((Component)_volume).transform.position, ((Component)_volume).transform.rotation));
ValuableObject component = val.GetComponent<ValuableObject>();
Random.InitState(RepoSeeded.ValuableCostRandom.Next());
component.DollarValueSetLogic();
instance.valuableTargetAmount++;
instance.totalCurrentValue += component.dollarValueCurrent * 0.001f;
if (instance.totalCurrentValue > instance.totalMaxValue)
{
instance.totalMaxAmount = instance.valuableTargetAmount;
}
return false;
}
public static void sortVolumesOnLocation(List<ValuableVolume> volumes)
{
volumes.Sort(delegate(ValuableVolume a, ValuableVolume b)
{
//IL_000f: 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_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: 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)
Vector3 val = new Vector3(0f, 0f, 0f) - ((Component)a).transform.position;
float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
val = new Vector3(0f, 0f, 0f) - ((Component)b).transform.position;
return sqrMagnitude.CompareTo(((Vector3)(ref val)).sqrMagnitude);
});
}
}
}