Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of CodeRebirthLib v0.9.8
BepInEx/plugins/CodeRebirthLib/com.github.xuuxiaolan.coderebirthlib.dll
Decompiled 10 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; 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.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CodeRebirth.src.MiscScripts; using CodeRebirthLib.AssetManagement; using CodeRebirthLib.ConfigManagement; using CodeRebirthLib.ConfigManagement.Converters; using CodeRebirthLib.ContentManagement; using CodeRebirthLib.ContentManagement.Achievements; using CodeRebirthLib.ContentManagement.Enemies; using CodeRebirthLib.ContentManagement.Items; using CodeRebirthLib.ContentManagement.MapObjects; using CodeRebirthLib.ContentManagement.Unlockables; using CodeRebirthLib.ContentManagement.Unlockables.Progressive; using CodeRebirthLib.ContentManagement.Weathers; using CodeRebirthLib.Data; using CodeRebirthLib.Exceptions; using CodeRebirthLib.Extensions; using CodeRebirthLib.MiscScriptManagement; using CodeRebirthLib.ModCompats; using CodeRebirthLib.Patches; using CodeRebirthLib.Util; using CodeRebirthLib.Util.Attributes; using CodeRebirthLib.Util.INetworkSerializables; using CodeRebirthLib.Util.Pathfinding; using GameNetcodeStuff; using GoodItemScan; using LethalConfig.ConfigItems; using LethalLevelLoader; using LethalLib.Extras; using LethalLib.Modules; using LethalQuantities.Objects; using Microsoft.CodeAnalysis; using MrovLib.Events; using On; using On.BepInEx.Configuration; using On.LethalConfig.AutoConfig; using On.LethalQuantities.Patches; using PathfindingLib.API.SmartPathfinding; using TMPro; using Unity.Netcode; using Unity.Netcode.Components; using UnityEngine; using UnityEngine.AI; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.Serialization; using UnityEngine.UI; using UnityEngine.Video; using WeatherRegistry; using WeatherRegistry.Modules; using com.github.xuuxiaolan.coderebirthlib.NetcodePatcher; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("com.github.xuuxiaolan.coderebirthlib.editor")] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("GoodItemScan")] [assembly: IgnoresAccessChecksTo("LethalConfig")] [assembly: IgnoresAccessChecksTo("LethalLib")] [assembly: IgnoresAccessChecksTo("LethalQuantities")] [assembly: IgnoresAccessChecksTo("MrovLib")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("WeatherRegistry")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("XuXiaolan,loaforc")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("A library to simplify making large LethalCompany mods.")] [assembly: AssemblyFileVersion("0.9.8.0")] [assembly: AssemblyInformationalVersion("0.9.8+2f98dabbef1d1e837348edd8a54cab8d0fd64737")] [assembly: AssemblyProduct("CodeRebirthLib")] [assembly: AssemblyTitle("com.github.xuuxiaolan.coderebirthlib")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.9.8.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedINetworkSerializable<NetworkTransformState>(); NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedValueEquals<NetworkTransformState>(); } } 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 CodeRebirth.src.MiscScripts { [Serializable] public class MaterialsWithRenderer { public Material[] materials = Array.Empty<Material>(); public Renderer renderer; } [Serializable] public class MaterialRendererVariantWithWeight : IWeighted { public MaterialsWithRenderer materialsWithRenderer = new MaterialsWithRenderer(); [field: SerializeField] public int Weight { get; set; } = 1; } public class ApplyRendererVariants : NetworkBehaviour { [SerializeField] private MaterialRendererVariantWithWeight[] _materialsWithRendererWithWeight = Array.Empty<MaterialRendererVariantWithWeight>(); [SerializeField] private bool _applyOnSpawn = true; private NetworkVariable<int> _currentVariant = new NetworkVariable<int>(0, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)1); public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); if (((NetworkBehaviour)this).IsServer) { Random random = new Random(); _currentVariant.Value = Array.IndexOf(_materialsWithRendererWithWeight, random.NextWeighted(_materialsWithRendererWithWeight)); } if (_applyOnSpawn) { ApplyMaterialVariantsToRenderers(); } } public void ApplyMaterialVariantsToRenderers() { _materialsWithRendererWithWeight[_currentVariant.Value].materialsWithRenderer.renderer.sharedMaterials = _materialsWithRendererWithWeight[_currentVariant.Value].materialsWithRenderer.materials; } protected override void __initializeVariables() { if (_currentVariant == null) { throw new Exception("ApplyRendererVariants._currentVariant cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)_currentVariant).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)_currentVariant, "_currentVariant"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)_currentVariant); ((NetworkBehaviour)this).__initializeVariables(); } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "ApplyRendererVariants"; } } } namespace CodeRebirthLib { internal static class CodeRebirthLibConfig { public static CompatibilityBool LethalConfigCompatibility; public static bool ExtendedLogging; internal static void Bind(ConfigManager manager) { using (ConfigContext configContext = manager.CreateConfigSection("Compatibility")) { LethalConfigCompatibility = configContext.Bind("Extend LethalConfig Support", "Patches LethalConfig to enable raw editing of strings for unknown types.\nCurrent Targeted Version: 1.4.6", CompatibilityBool.IfVersionMatches).Value; } using ConfigContext configContext2 = manager.CreateConfigSection("Debugging"); ExtendedLogging = configContext2.Bind("Extended Logging", "Enable debug logs", defaultValue: false).Value; } } [BepInPlugin("com.github.xuuxiaolan.coderebirthlib", "CodeRebirthLib", "0.9.8")] [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.*/)] internal class CodeRebirthLibPlugin : BaseUnityPlugin { internal class MainAssets : AssetBundleLoader<MainAssets> { [LoadFromBundle("CodeRebirthLibNetworker.prefab")] public GameObject NetworkerPrefab { get; private set; } public MainAssets(AssetBundle bundle) : base(bundle) { } } internal static ManualLogSource Logger { get; private set; } internal static ConfigManager ConfigManager { get; private set; } internal static MainAssets Main { get; private set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; ConfigManager = new ConfigManager(((BaseUnityPlugin)this).Config); CodeRebirthLibConfig.Bind(ConfigManager); NetcodePatcher(); RoundManagerPatch.Patch(); GameNetworkManagerPatch.Init(); EnemyAIPatch.Init(); StartOfRoundPatch.Init(); TerminalPatch.Init(); DeleteFileButtonPatch.Init(); MenuManagerPatch.Init(); if (LethalConfigCompatibility.Enabled) { LethalConfigCompatibility.Init(); } if (WeatherRegistryCompatibility.Enabled) { WeatherRegistryCompatibility.Init(); } if (LethalQuantitiesCompatibility.Enabled) { LethalQuantitiesCompatibility.Init(); } ExtendedTOML.Init(); Main = new MainAssets(CRLib.LoadBundle(Assembly.GetExecutingAssembly(), "coderebirthlibmain")); string[] files = Directory.GetFiles(Paths.PluginPath, "*.crmod", SearchOption.AllDirectories); foreach (string text in files) { AssetBundle val = AssetBundle.LoadFromFile(text); ExtendedLogging("[AssetBundle Loading] " + ((Object)val).name + " contains these objects: " + string.Join(",", val.GetAllAssetNames())); CRModInformation[] array = val.LoadAllAssets<CRModInformation>(); if (array.Length == 0) { Logger.LogError((object)(".crmod bundle: '" + Path.GetFileName(text) + "' does not have a 'Mod Information' file!")); continue; } if (array.Length > 1) { Logger.LogError((object)(".crmod bundle: '" + Path.GetFileName(text) + "' has multiple 'Mod Information' files! Only the first one will be used.")); } Logger.LogInfo((object)("AuthorName: " + array[0].AuthorName + ", ModName: " + array[0].ModName + ", Version: " + array[0].Version)); CRLib.RegisterNoCodeMod(array[0].CreatePluginMetadata(), val, Path.GetDirectoryName(text)); } Logger.LogInfo((object)"com.github.xuuxiaolan.coderebirthlib v0.9.8 has loaded!"); } private void NetcodePatcher() { Type[] array = new Type[7] { typeof(UnlockShipUnlockable), typeof(SmartAgentNavigator), typeof(CodeRebirthLibNetworker), typeof(ClientNetworkTransform), typeof(OwnerNetworkAnimator), typeof(ChanceScript), typeof(ApplyRendererVariants) }; Type[] array2 = array; foreach (Type type in array2) { try { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array3 = methods; foreach (MethodInfo methodInfo in array3) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } catch (Exception arg) { Logger.LogWarning((object)$"supressed an error from netcode patcher, probably fine but should still log that something happened: {arg}."); } } } internal static void ExtendedLogging(object text) { if (CodeRebirthLibConfig.ExtendedLogging) { Logger.LogInfo(text); } } } public static class CRLib { public static AssetBundle LoadBundle(Assembly assembly, string filePath) { string text = Path.Combine(Path.GetDirectoryName(assembly.Location), "Assets", filePath); if (!File.Exists(text)) { string path = Path.Combine(Path.GetDirectoryName(assembly.Location), filePath); bool flag = File.Exists(path); string text2 = "The assetbundle at plugins/" + Path.GetRelativePath(Paths.PluginPath, text) + " does not exist!"; if (flag) { text2 = text2 + " The bundle was found at the incorrect spot: plugins/" + Path.GetRelativePath(Paths.PluginPath, path) + ". It should be within the Assets/ subfolder"; } throw new FileNotFoundException(text2); } return AssetBundle.LoadFromFile(text); } public static CRMod RegisterMod(BaseUnityPlugin plugin, AssetBundle mainBundle) { ConfigManager configManager = new ConfigManager(plugin.Config); return new CRMod(((object)plugin).GetType().Assembly, plugin, mainBundle, Path.GetDirectoryName(((object)plugin).GetType().Assembly.Location), configManager); } public static void BroadcastTip(HUDDisplayTip displayTip) { NetworkSingleton<CodeRebirthLibNetworker>.Instance?.BroadcastDisplayTipServerRPC(displayTip); } internal static CRMod RegisterNoCodeMod(BepInPlugin plugin, AssetBundle mainBundle, string basePath) { CodeRebirthLibPlugin.ExtendedLogging("Registering no-code mod!"); ConfigManager configManager = new ConfigManager(GenerateConfigFile(plugin)); CRMod cRMod = new CRMod(plugin, mainBundle, basePath, configManager); cRMod.Logger = Logger.CreateLogSource(plugin.GUID); foreach (AssetBundleData assetBundle in cRMod.Content.assetBundles) { new DefaultContentHandler(cRMod); } return cRMod; } internal static ConfigFile GenerateConfigFile(BepInPlugin plugin) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown return new ConfigFile(Utility.CombinePaths(new string[2] { Paths.ConfigPath, plugin.GUID + ".cfg" }), false, plugin); } } public class CRMod { private static readonly List<CRMod> _allMods = new List<CRMod>(); private readonly string _basePath; private readonly Dictionary<string, CRRegistry> _registries = new Dictionary<string, CRRegistry>(); public static IReadOnlyList<CRMod> AllMods => _allMods.AsReadOnly(); public ConfigManager ConfigManager { get; } public ContentContainer Content { get; } public Assembly? Assembly { get; } public ManualLogSource? Logger { get; set; } public BepInPlugin Plugin { get; } internal CRMod(Assembly assembly, BaseUnityPlugin plugin, AssetBundle mainBundle, string basePath, ConfigManager configManager) : this(MetadataHelper.GetMetadata(((object)plugin).GetType()), mainBundle, basePath, configManager) { Assembly = assembly; } internal CRMod(BepInPlugin plugin, AssetBundle mainBundle, string basePath, ConfigManager configManager) { ConfigManager = configManager; _basePath = basePath; Plugin = plugin; ContentContainer[] array = mainBundle.LoadAllAssets<ContentContainer>(); if (array.Length == 0) { throw new NoContentDefinitionInBundle(mainBundle); } if (array.Length >= 2) { throw new MultipleContentDefinitionsInBundle(mainBundle); } Content = array[0]; AddDefaultRegistries(); if (WeatherRegistryCompatibility.Enabled) { AddWeatherRegistry(); } _allMods.Add(this); } public string GetRelativePath(params string[] path) { return Path.Combine(_basePath, Path.Combine(path)); } public bool TryGetRelativeFile(out string fullPath, params string[] path) { fullPath = GetRelativePath(path); return File.Exists(fullPath); } public void CreateRegistry<T>(string name, CRRegistry<T> registry) where T : CRContentDefinition { _registries[name] = registry; CodeRebirthLibPlugin.ExtendedLogging("Created Registry: " + name); } public CRRegistry<T> GetRegistryByName<T>(string name) where T : CRContentDefinition { return (CRRegistry<T>)_registries[name]; } public CRRegistry<CREnemyDefinition> EnemyRegistry() { return GetRegistryByName<CREnemyDefinition>("enemies"); } public static IEnumerable<CREnemyDefinition> AllEnemies() { return AllMods.SelectMany((CRMod mod) => mod.EnemyRegistry()); } public CRRegistry<CRItemDefinition> ItemRegistry() { return GetRegistryByName<CRItemDefinition>("items"); } public static IEnumerable<CRItemDefinition> AllItems() { return AllMods.SelectMany((CRMod mod) => mod.ItemRegistry()); } public CRRegistry<CRMapObjectDefinition> MapObjectRegistry() { return GetRegistryByName<CRMapObjectDefinition>("map_objects"); } public static IEnumerable<CRMapObjectDefinition> AllMapObjects() { return AllMods.SelectMany((CRMod mod) => mod.MapObjectRegistry()); } public CRRegistry<CRUnlockableDefinition> UnlockableRegistry() { return GetRegistryByName<CRUnlockableDefinition>("unlockables"); } public static IEnumerable<CRUnlockableDefinition> AllUnlockables() { return AllMods.SelectMany((CRMod mod) => mod.UnlockableRegistry()); } public CRRegistry<CRAchievementBaseDefinition> AchievementRegistry() { return GetRegistryByName<CRAchievementBaseDefinition>("achievements"); } public static IEnumerable<CRAchievementBaseDefinition> AllAchievements() { return AllMods.SelectMany((CRMod mod) => mod.AchievementRegistry()); } public bool TryGetBundleDataFromName(string bundleName, [NotNullWhen(true)] out AssetBundleData? data) { string bundleName2 = bundleName; data = Content.assetBundles.FirstOrDefault((AssetBundleData it) => it.assetBundleName == bundleName2); return data != null; } private void AddDefaultRegistries() { CREnemyDefinition.RegisterTo(this); CRMapObjectDefinition.RegisterTo(this); CRItemDefinition.RegisterTo(this); CRUnlockableDefinition.RegisterTo(this); CRAchievementBaseDefinition.RegisterTo(this); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private void AddWeatherRegistry() { CRWeatherDefinition.RegisterTo(this); } public void RegisterContentHandlers() { if (Assembly == null) { CodeRebirthLibPlugin.Logger.LogWarning((object)("Tried to Register Content Handlers for " + Plugin.Name + " but it is a no-code CRMod!")); return; } IEnumerable<Type> enumerable = from x in Assembly.GetLoadableTypes() where !x.IsNested && x.BaseType != null && x.BaseType.IsGenericType && x.BaseType.GetGenericTypeDefinition() == typeof(ContentHandler<>) select x; foreach (Type item in enumerable) { item.GetConstructor(new Type[1] { typeof(CRMod) }).Invoke(new object[1] { this }); } } } [CreateAssetMenu(fileName = "Mod Information", menuName = "CodeRebirthLib/Mod Information", order = -11)] public class CRModInformation : ScriptableObject { [field: SerializeField] public string AuthorName { get; private set; } [field: SerializeField] public string ModName { get; private set; } [field: SerializeField] public string Version { get; private set; } [field: SerializeField] public TextAsset READMEFile { get; private set; } [field: SerializeField] public TextAsset ChangelogFile { get; private set; } [field: SerializeField] public string ModDescription { get; private set; } [Tooltip("Comma separated list of dependencies that this mod depends on apart from the default CRLib, BepInEx and potentially WeatherRegistry, grab from the thunderstore page.")] [field: SerializeField] public List<string> ExtraDependencies { get; private set; } = new List<string>(); [field: SerializeField] public string WebsiteUrl { get; private set; } [field: SerializeField] public Texture2D ModIcon { get; private set; } public BepInPlugin CreatePluginMetadata() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Expected O, but got Unknown return new BepInPlugin(AuthorName + "." + ModName, ModName, Version); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "com.github.xuuxiaolan.coderebirthlib"; public const string PLUGIN_NAME = "CodeRebirthLib"; public const string PLUGIN_VERSION = "0.9.8"; } } namespace CodeRebirthLib.Util { public class CodeRebirthLibNetworker : NetworkSingleton<CodeRebirthLibNetworker> { internal static EntranceTeleport[] _entrancePoints = Array.Empty<EntranceTeleport>(); internal Random CRLibRandom = new Random(); internal ES3Settings SaveSettings; public static IReadOnlyList<EntranceTeleport> EntrancePoints => _entrancePoints; private void Awake() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown if (!((Object)(object)StartOfRound.Instance == (Object)null)) { CRLibRandom = new Random(StartOfRound.Instance.randomMapSeed + 6969); ((UnityEvent)StartOfRound.Instance.StartNewRoundEvent).AddListener(new UnityAction(OnNewRoundStart)); SaveSettings = new ES3Settings("CRLib" + GameNetworkManager.Instance.currentSaveFileName, new Enum[1] { (Enum)(object)(EncryptionType)0 }); } } public IEnumerator Start() { yield return (object)new WaitUntil((Func<bool>)(() => ((NetworkBehaviour)this).NetworkObject.IsSpawned)); yield return (object)new WaitUntil((Func<bool>)(() => (Object)(object)GameNetworkManager.Instance.localPlayerController != (Object)null)); if (((NetworkBehaviour)this).IsHost || ((NetworkBehaviour)this).IsServer) { ProgressiveUnlockableHandler.LoadAll(SaveSettings); yield break; } RequestProgressiveUnlockableStatesServerRpc(GameNetworkManager.Instance.localPlayerController, (from it in CRMod.AllUnlockables() where it.ProgressiveData != null select it.ProgressiveData.NetworkID).ToArray()); } [ServerRpc(RequireOwnership = false)] private void RequestProgressiveUnlockableStatesServerRpc(PlayerControllerReference requester, uint[] expectedOrder) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2427953758u, val, (RpcDelivery)0); bool flag = requester != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe<PlayerControllerReference>(ref requester, default(ForNetworkSerializable)); } bool flag2 = expectedOrder != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives)); if (flag2) { ((FastBufferWriter)(ref val2)).WriteValueSafe<uint>(expectedOrder, default(ForPrimitives)); } ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2427953758u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost)) { return; } PlayerControllerB val3 = requester; CodeRebirthLibPlugin.Logger.LogDebug((object)("Sending states of progressive unlockables for player: '" + val3.playerUsername + "'")); bool[] array = new bool[expectedOrder.Length]; for (int i = 0; i < expectedOrder.Length; i++) { uint unlockableNetworkId = expectedOrder[i]; CRUnlockableDefinition cRUnlockableDefinition = CRMod.AllUnlockables().FirstOrDefault((CRUnlockableDefinition it) => it.ProgressiveData != null && it.ProgressiveData.NetworkID == unlockableNetworkId); if (Object.op_Implicit((Object)(object)cRUnlockableDefinition)) { array[i] = cRUnlockableDefinition.ProgressiveData.IsUnlocked; CodeRebirthLibPlugin.ExtendedLogging($"set values[{i}] = {array[i]}"); } else { CodeRebirthLibPlugin.Logger.LogError((object)$"client requested progressive data status of a non-existing unlockable!!! (index: {i}, networkID: {unlockableNetworkId})"); array[i] = false; } } ProgressiveUnlockableStateResponseClientRpc(array, new ClientRpcParams { Send = { TargetClientIds = new <>z__ReadOnlyArray<ulong>(new ulong[1] { ((NetworkBehaviour)val3).OwnerClientId }) } }); } [ClientRpc] private void ProgressiveUnlockableStateResponseClientRpc(bool[] states, ClientRpcParams rpcParams = default(ClientRpcParams)) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(1599363290u, rpcParams, (RpcDelivery)0); bool flag = states != null; ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(states, default(ForPrimitives)); } ((NetworkBehaviour)this).__endSendClientRpc(ref val, 1599363290u, rpcParams, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { CRUnlockableDefinition[] array = (from it in CRMod.AllUnlockables() where it.ProgressiveData != null select it).ToArray(); for (int i = 0; i < array.Length; i++) { CRUnlockableDefinition cRUnlockableDefinition = array[i]; CodeRebirthLibPlugin.ExtendedLogging($"setting state of {cRUnlockableDefinition.UnlockableItemDef.unlockable.unlockableName} to {states[i]}. (index: {i}, networkID: {cRUnlockableDefinition.ProgressiveData.NetworkID})"); cRUnlockableDefinition.ProgressiveData.SetFromServer(states[i]); } } } internal void SaveCodeRebirthLibData() { CRAchievementHandler.SaveAll(); if (NetworkManager.Singleton.IsHost) { CodeRebirthLibPlugin.ExtendedLogging("Running SaveAll"); ProgressiveUnlockableHandler.SaveAll(SaveSettings); } } internal static void ResetCodeRebirthLibData(ES3Settings saveSettings) { ES3.DeleteFile(saveSettings); } private void OnNewRoundStart() { _entrancePoints = Object.FindObjectsByType<EntranceTeleport>((FindObjectsSortMode)1); EntranceTeleport[] entrancePoints = _entrancePoints; foreach (EntranceTeleport val in entrancePoints) { if (!val.FindExitPoint()) { CodeRebirthLibPlugin.Logger.LogError((object)"Something went wrong in the generation of the fire exits! (ignorable if EntranceTeleportOptimisation is installed)"); } } } [ServerRpc(RequireOwnership = false)] public void BroadcastDisplayTipServerRPC(HUDDisplayTip displayTip) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(829470014u, val, (RpcDelivery)0); bool flag = displayTip != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe<HUDDisplayTip>(ref displayTip, default(ForNetworkSerializable)); } ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 829470014u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { BroadcastDisplayTipClientRPC(displayTip); } } [ClientRpc] private void BroadcastDisplayTipClientRPC(HUDDisplayTip displayTip) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1273870504u, val, (RpcDelivery)0); bool flag = displayTip != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe<HUDDisplayTip>(ref displayTip, default(ForNetworkSerializable)); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1273870504u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { HUDManager.Instance.DisplayTip(displayTip); } } protected override void __initializeVariables() { base.__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_CodeRebirthLibNetworker() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(2427953758u, new RpcReceiveHandler(__rpc_handler_2427953758)); NetworkManager.__rpc_func_table.Add(1599363290u, new RpcReceiveHandler(__rpc_handler_1599363290)); NetworkManager.__rpc_func_table.Add(829470014u, new RpcReceiveHandler(__rpc_handler_829470014)); NetworkManager.__rpc_func_table.Add(1273870504u, new RpcReceiveHandler(__rpc_handler_1273870504)); } private static void __rpc_handler_2427953758(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); PlayerControllerReference requester = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe<PlayerControllerReference>(ref requester, default(ForNetworkSerializable)); } bool flag2 = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives)); uint[] expectedOrder = null; if (flag2) { ((FastBufferReader)(ref reader)).ReadValueSafe<uint>(ref expectedOrder, default(ForPrimitives)); } target.__rpc_exec_stage = (__RpcExecStage)1; ((CodeRebirthLibNetworker)(object)target).RequestProgressiveUnlockableStatesServerRpc(requester, expectedOrder); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1599363290(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); bool[] states = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref states, default(ForPrimitives)); } ClientRpcParams client = rpcParams.Client; target.__rpc_exec_stage = (__RpcExecStage)2; ((CodeRebirthLibNetworker)(object)target).ProgressiveUnlockableStateResponseClientRpc(states, client); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_829470014(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); HUDDisplayTip displayTip = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe<HUDDisplayTip>(ref displayTip, default(ForNetworkSerializable)); } target.__rpc_exec_stage = (__RpcExecStage)1; ((CodeRebirthLibNetworker)(object)target).BroadcastDisplayTipServerRPC(displayTip); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1273870504(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); HUDDisplayTip displayTip = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe<HUDDisplayTip>(ref displayTip, default(ForNetworkSerializable)); } target.__rpc_exec_stage = (__RpcExecStage)2; ((CodeRebirthLibNetworker)(object)target).BroadcastDisplayTipClientRPC(displayTip); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "CodeRebirthLibNetworker"; } } public static class MoreLayerMasks { public static int CollidersAndRoomAndDefaultAndInteractableAndRailingAndEnemiesAndTerrainAndHazardAndVehicleMask { get; private set; } public static int CollidersAndRoomAndInteractableAndRailingAndEnemiesAndTerrainAndHazardAndVehicleMask { get; private set; } public static int CollidersAndRoomAndInteractableAndRailingAndTerrainAndHazardAndVehicleMask { get; private set; } public static int CollidersAndRoomAndPlayersAndEnemiesAndTerrainAndVehicleAndDefaultMask { get; private set; } public static int CollidersAndRoomAndRailingAndTerrainAndHazardAndVehicleAndDefaultMask { get; private set; } public static int CollidersAndRoomAndPlayersAndEnemiesAndTerrainAndVehicleMask { get; private set; } public static int CollidersAndRoomAndRailingAndInteractableMask { get; private set; } public static int CollidersAndRoomAndPlayersAndInteractableMask { get; private set; } public static int PlayersAndInteractableAndEnemiesAndPropsHazardMask { get; private set; } public static int CollidersAndRoomMaskAndDefaultAndEnemies { get; private set; } public static int PlayersAndEnemiesAndHazardMask { get; private set; } public static int PlayersAndRagdollMask { get; private set; } public static int PropsAndHazardMask { get; private set; } public static int TerrainAndFoliageMask { get; private set; } public static int PlayersAndEnemiesMask { get; private set; } public static int DefaultMask { get; private set; } public static int PropsMask { get; private set; } public static int HazardMask { get; private set; } public static int EnemiesMask { get; private set; } public static int InteractableMask { get; private set; } public static int RailingMask { get; private set; } public static int TerrainMask { get; private set; } public static int VehicleMask { get; private set; } public static void Init() { DefaultMask = LayerMask.GetMask(new string[1] { "Default" }); PropsMask = LayerMask.GetMask(new string[1] { "Props" }); HazardMask = LayerMask.GetMask(new string[1] { "MapHazards" }); EnemiesMask = LayerMask.GetMask(new string[1] { "Enemies" }); InteractableMask = LayerMask.GetMask(new string[1] { "InteractableObject" }); RailingMask = LayerMask.GetMask(new string[1] { "Railing" }); TerrainMask = LayerMask.GetMask(new string[1] { "Terrain" }); VehicleMask = LayerMask.GetMask(new string[1] { "Vehicle" }); PlayersAndRagdollMask = StartOfRound.Instance.playersMask | LayerMask.GetMask(new string[1] { "PlayerRagdoll" }); PropsAndHazardMask = PropsMask | HazardMask; TerrainAndFoliageMask = TerrainMask | LayerMask.GetMask(new string[1] { "Foliage" }); PlayersAndEnemiesMask = StartOfRound.Instance.playersMask | EnemiesMask; PlayersAndEnemiesAndHazardMask = PlayersAndEnemiesMask | HazardMask; CollidersAndRoomMaskAndDefaultAndEnemies = StartOfRound.Instance.collidersAndRoomMaskAndDefault | EnemiesMask; CollidersAndRoomAndRailingAndInteractableMask = StartOfRound.Instance.collidersAndRoomMask | InteractableMask | RailingMask; CollidersAndRoomAndPlayersAndInteractableMask = StartOfRound.Instance.collidersAndRoomMaskAndPlayers | InteractableMask; PlayersAndInteractableAndEnemiesAndPropsHazardMask = PlayersAndEnemiesAndHazardMask | InteractableMask | PropsMask; CollidersAndRoomAndRailingAndTerrainAndHazardAndVehicleAndDefaultMask = StartOfRound.Instance.collidersAndRoomMask | HazardMask | RailingMask | TerrainMask | VehicleMask | DefaultMask; CollidersAndRoomAndPlayersAndEnemiesAndTerrainAndVehicleMask = StartOfRound.Instance.collidersAndRoomMaskAndPlayers | EnemiesMask | TerrainMask | VehicleMask; CollidersAndRoomAndPlayersAndEnemiesAndTerrainAndVehicleAndDefaultMask = CollidersAndRoomAndPlayersAndEnemiesAndTerrainAndVehicleMask | DefaultMask; CollidersAndRoomAndInteractableAndRailingAndTerrainAndHazardAndVehicleMask = CollidersAndRoomAndRailingAndInteractableMask | HazardMask | TerrainMask | VehicleMask; CollidersAndRoomAndInteractableAndRailingAndEnemiesAndTerrainAndHazardAndVehicleMask = CollidersAndRoomAndInteractableAndRailingAndTerrainAndHazardAndVehicleMask | EnemiesMask; CollidersAndRoomAndDefaultAndInteractableAndRailingAndEnemiesAndTerrainAndHazardAndVehicleMask = CollidersAndRoomAndInteractableAndRailingAndEnemiesAndTerrainAndHazardAndVehicleMask | DefaultMask; } } public abstract class NetworkSingleton<T> : NetworkBehaviour where T : NetworkSingleton<T> { public static T? Instance { get; private set; } protected void OnDisable() { if ((Object)(object)Instance == (Object)(object)(T)this) { Instance = null; } } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); Instance = (T)this; } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string? __getTypeName() { return "NetworkSingleton`1"; } } } namespace CodeRebirthLib.Util.Pathfinding { public struct GenericPath<T> { public T Generic; public float PathLength; public GenericPath(T generic, float pathLength) { Generic = generic; PathLength = pathLength; } } [RequireComponent(typeof(NavMeshAgent))] public class SmartAgentNavigator : NetworkBehaviour { public enum AgentState { NotSet, Inside, Outside } public enum GoToDestinationResult { Success, InProgress, Failure } [HideInInspector] public bool cantMove; [HideInInspector] public UnityEvent<bool> OnUseEntranceTeleport = new UnityEvent<bool>(); [HideInInspector] public UnityEvent<bool> OnEnableOrDisableAgent = new UnityEvent<bool>(); [HideInInspector] public UnityEvent<bool> OnEnterOrExitElevator = new UnityEvent<bool>(); [HideInInspector] public EntranceTeleport? lastUsedEntranceTeleport; private Vector3 pointToGo = Vector3.zero; private Coroutine? searchRoutine; private SmartPathTask? pathingTask; private SmartPathTask? checkPathsTask; private SmartPathTask? roamingTask; private AgentState _agentState; [HideInInspector] public NavMeshAgent agent; [HideInInspector] public Coroutine? checkPathsRoutine; [Header("Search Algorithm")] [SerializeField] private float _nodeRemovalPrecision = 5f; [SerializeField] private SmartPathfindingLinkFlags _allowedLinks = (SmartPathfindingLinkFlags)15; private Coroutine? _searchRoutine; private float _searchRadius = 50f; private readonly List<Vector3> _positionsToSearch = new List<Vector3>(); private readonly List<Vector3> _roamingPointsVectorList = new List<Vector3>(); public void Awake() { agent = ((Component)this).gameObject.GetComponent<NavMeshAgent>(); SmartPathfinding.RegisterSmartAgent(agent); } public bool IsAgentOutside() { if (_agentState == AgentState.NotSet) { CodeRebirthLibPlugin.Logger.LogError((object)(((Object)this).name + " is not initialized yet! Please call `SetAllValues` first.")); return false; } return _agentState == AgentState.Outside; } public void SetAllValues(bool isOutside) { _agentState = ((!isOutside) ? AgentState.Inside : AgentState.Outside); } private SmartPathfindingLinkFlags GetAllowedPathLinks() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return _allowedLinks; } private void UseTeleport(EntranceTeleport teleport) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)teleport.exitPoint == (Object)null) && teleport.FindExitPoint()) { agent.Warp(teleport.exitPoint.position); SetThingOutsideServerRpc(new NetworkBehaviourReference((NetworkBehaviour)(object)teleport)); } } public bool DoPathingToDestination(Vector3 destination) { //IL_002e: 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) if (searchRoutine != null) { StopSearchRoutine(); } if (cantMove) { return false; } if (!((Behaviour)agent).enabled) { HandleDisabledAgentPathing(); return false; } GoToDestinationResult goToDestinationResult = GoToDestination(destination); if (goToDestinationResult == GoToDestinationResult.Failure && DetermineIfNeedToDisableAgent(destination)) { return false; } if (goToDestinationResult != 0) { return goToDestinationResult == GoToDestinationResult.InProgress; } return true; } private GoToDestinationResult GoToDestination(Vector3 targetPosition) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected O, but got Unknown //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) GoToDestinationResult result = GoToDestinationResult.InProgress; if (pathingTask == null) { pathingTask = new SmartPathTask(); pathingTask.StartPathTask(agent, ((Component)this).transform.position, targetPosition, GetAllowedPathLinks()); } if (!pathingTask.IsResultReady(0)) { return result; } SmartPathDestination? result2 = pathingTask.GetResult(0); if (result2.HasValue) { SmartPathDestination destination = result2.GetValueOrDefault(); result = ((!GoToSmartPathDestination(in destination)) ? GoToDestinationResult.Failure : GoToDestinationResult.Success); } else { result = GoToDestinationResult.Failure; } pathingTask.StartPathTask(agent, ((Component)this).transform.position, targetPosition, GetAllowedPathLinks()); return result; } public void DisposeOfTasks() { SmartPathTask? obj = pathingTask; if (obj != null) { obj.Dispose(); } SmartPathTask? obj2 = checkPathsTask; if (obj2 != null) { obj2.Dispose(); } SmartPathTask? obj3 = roamingTask; if (obj3 != null) { obj3.Dispose(); } } private bool GoToSmartPathDestination(in SmartPathDestination destination) { //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_0007: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected I4, but got Unknown //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) SmartDestinationType type = ((SmartPathDestination)(ref destination)).Type; switch ((int)type) { case 0: HandleDirectDestination(destination); break; case 1: HandleInternalTeleportDestination(destination); break; case 2: HandleEntranceTeleportDestination(destination); break; case 3: HandleElevatorDestination(destination); break; default: return false; } return true; } private void HandleDirectDestination(SmartPathDestination destination) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) agent.SetDestination(((SmartPathDestination)(ref destination)).Position); } private void HandleInternalTeleportDestination(SmartPathDestination destination) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) agent.SetDestination(((SmartPathDestination)(ref destination)).Position); if (!(Vector3.Distance(((Component)this).transform.position, ((SmartPathDestination)(ref destination)).Position) >= 1f + agent.stoppingDistance)) { agent.Warp(((SmartPathDestination)(ref destination)).InternalTeleport.Destination.position); } } private void HandleElevatorDestination(SmartPathDestination destination) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) agent.SetDestination(((SmartPathDestination)(ref destination)).Position); if (!(Vector3.Distance(((Component)this).transform.position, ((SmartPathDestination)(ref destination)).Position) >= 1f + agent.stoppingDistance)) { ((SmartPathDestination)(ref destination)).ElevatorFloor.CallElevator(); } } private void HandleEntranceTeleportDestination(SmartPathDestination destination) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) agent.SetDestination(((SmartPathDestination)(ref destination)).Position); if (!(Vector3.Distance(((Component)this).transform.position, ((SmartPathDestination)(ref destination)).Position) >= 1f + agent.stoppingDistance)) { UseTeleport(((SmartPathDestination)(ref destination)).EntranceTeleport); } } public bool CheckPathsOngoing() { return checkPathsRoutine != null; } public void CheckPaths<T>(IEnumerable<(T, Vector3)> points, Action<List<GenericPath<T>>> action) { if (checkPathsRoutine != null) { ((MonoBehaviour)this).StopCoroutine(checkPathsRoutine); } checkPathsRoutine = ((MonoBehaviour)this).StartCoroutine(CheckPathsCoroutine(points, action)); } private IEnumerator CheckPathsCoroutine<T>(IEnumerable<(T, Vector3)> points, Action<List<GenericPath<T>>> action) { List<GenericPath<T>> TList = new List<GenericPath<T>>(); if (checkPathsTask == null) { checkPathsTask = new SmartPathTask(); } List<Vector3> list = points.Select<(T, Vector3), Vector3>(((T, Vector3) x) => x.Item2).ToList(); List<T> pointsTList = points.Select<(T, Vector3), T>(((T, Vector3) x) => x.Item1).ToList(); checkPathsTask.StartPathTask(agent, ((Component)this).transform.position, list, GetAllowedPathLinks()); int listSize = list.Count; CodeRebirthLibPlugin.ExtendedLogging($"Checking paths for {listSize} objects"); yield return (object)new WaitUntil((Func<bool>)(() => checkPathsTask.IsComplete)); for (int i = 0; i < listSize; i++) { if (!checkPathsTask.IsResultReady(i)) { CodeRebirthLibPlugin.Logger.LogError((object)$"Result for task index: {i} on {((Object)((Component)this).gameObject).name} is not ready"); continue; } CodeRebirthLibPlugin.ExtendedLogging($"Checking result for task index: {i}, is result ready: {checkPathsTask.IsResultReady(i)}, result: {checkPathsTask.GetResult(i)}"); SmartPathDestination? result = checkPathsTask.GetResult(i); if (result.HasValue) { result.GetValueOrDefault(); TList.Add(new GenericPath<T>(pointsTList[i], checkPathsTask.GetPathLength(i))); } } action(TList); checkPathsRoutine = null; } public void StopAgent() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) if (((Behaviour)agent).enabled && agent.isOnNavMesh) { agent.ResetPath(); } agent.velocity = Vector3.zero; } private void HandleDisabledAgentPathing() { //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_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown //IL_00a8: 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_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) Vector3 val = pointToGo; float num = 10f; float num2 = Vector3.Distance(((Component)this).transform.position, val); if (Vector3.Distance(((Component)this).transform.position, val) <= 1f) { OnEnableOrDisableAgent.Invoke(true); ((Behaviour)agent).enabled = true; agent.Warp(val); if (pathingTask != null) { pathingTask.StartPathTask(agent, ((Component)this).transform.position, val, GetAllowedPathLinks()); return; } pathingTask = new SmartPathTask(); pathingTask.StartPathTask(agent, ((Component)this).transform.position, val, GetAllowedPathLinks()); } else { float num3 = Mathf.Clamp01(Vector3.Distance(((Component)this).transform.position, val) / num2); Vector3 val2 = Vector3.MoveTowards(((Component)this).transform.position, val, Time.deltaTime * 10f); val2.y += Mathf.Sin(num3 * MathF.PI) * num; ((Component)this).transform.SetPositionAndRotation(val2, Quaternion.LookRotation(val - ((Component)this).transform.position)); } } private bool DetermineIfNeedToDisableAgent(Vector3 destination) { //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_0028: 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_0051: 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_0068: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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) float num = Vector3.Distance(((Component)this).transform.position, destination); if (num <= agent.stoppingDistance + 5f) { return false; } NavMeshHit val = default(NavMeshHit); if (!NavMesh.SamplePosition(destination, ref val, 3f, agent.areaMask)) { return false; } Vector3 val2 = FindClosestValidPoint(); agent.SetDestination(val2); if (Vector3.Distance(((Component)agent).transform.position, val2) <= agent.stoppingDistance) { pointToGo = ((NavMeshHit)(ref val)).position; OnEnableOrDisableAgent.Invoke(false); ((Behaviour)agent).enabled = false; CodeRebirthLibPlugin.ExtendedLogging($"Pathing to initial destination {destination} failed, going to fallback position {((NavMeshHit)(ref val)).position} instead."); return true; } return false; } public float CanPathToPoint(Vector3 startPos, Vector3 endPos) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_004c: Unknown result type (might be due to invalid IL or missing references) NavMeshPath val = new NavMeshPath(); if (!NavMesh.CalculatePath(startPos, endPos, -1, val) || (int)val.status != 0) { return -1f; } float num = 0f; if (val.corners.Length > 1) { for (int i = 1; i < val.corners.Length; i++) { num += Vector3.Distance(val.corners[i - 1], val.corners[i]); } } return num; } [ServerRpc(RequireOwnership = false)] public void SetThingOutsideServerRpc(NetworkBehaviourReference entranceTeleportReference) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(4258763819u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref entranceTeleportReference, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4258763819u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { SetThingOutsideClientRpc(entranceTeleportReference); } } } [ClientRpc] public void SetThingOutsideClientRpc(NetworkBehaviourReference entranceTeleportReference) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Expected O, but got Unknown NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1493229376u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkBehaviourReference>(ref entranceTeleportReference, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1493229376u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { lastUsedEntranceTeleport = (EntranceTeleport)NetworkBehaviourReference.op_Implicit(entranceTeleportReference); _agentState = (lastUsedEntranceTeleport.isEntranceToBuilding ? AgentState.Inside : AgentState.Outside); OnUseEntranceTeleport.Invoke(!lastUsedEntranceTeleport.isEntranceToBuilding); } } } private Vector3 FindClosestValidPoint() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) return agent.pathEndPosition; } public void AdjustSpeedBasedOnDistance(float minDistance, float maxDistance, float minSpeed, float maxSpeed, float multiplierBoost) { float num = Mathf.Clamp(agent.remainingDistance, minDistance, maxDistance); float num2 = (num - minDistance) / (maxDistance - minDistance); agent.speed = Mathf.Lerp(minSpeed, maxSpeed, num2) * multiplierBoost; } public bool CurrentPathIsValid() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Invalid comparison between Unknown and I4 if ((int)agent.path.status == 1 || (int)agent.path.status == 2) { return false; } return true; } public void StartSearchRoutine(float radius) { if (((Behaviour)agent).enabled) { _searchRadius = radius; StopSearchRoutine(); _searchRoutine = ((MonoBehaviour)this).StartCoroutine(SearchAlgorithm(radius)); } } public void StopSearchRoutine() { if (_searchRoutine != null) { ((MonoBehaviour)this).StopCoroutine(_searchRoutine); } StopAgent(); _searchRoutine = null; } private IEnumerator SearchAlgorithm(float radius) { yield return (object)new WaitForSeconds(Random.Range(0f, 3f)); CodeRebirthLibPlugin.ExtendedLogging($"Starting search routine for {((Object)((Component)this).gameObject).name} at {((Component)this).transform.position} with radius {radius}"); _positionsToSearch.Clear(); yield return ((MonoBehaviour)this).StartCoroutine(GetSetOfAcceptableNodesForRoaming(radius)); while (true) { Vector3 positionToTravel = _positionsToSearch.FirstOrDefault(); if (_positionsToSearch.Count == 0 || positionToTravel == Vector3.zero) { break; } _positionsToSearch.RemoveAt(0); yield return ((MonoBehaviour)this).StartCoroutine(ClearProximityNodes(_positionsToSearch, positionToTravel, _nodeRemovalPrecision)); bool reachedDestination = false; while (!reachedDestination) { CodeRebirthLibPlugin.ExtendedLogging($"{((Object)((Component)this).gameObject).name} Search: {positionToTravel}"); GoToDestination(positionToTravel); yield return (object)new WaitForSeconds(0.5f); if (!((Behaviour)agent).enabled || Vector3.Distance(((Component)this).transform.position, positionToTravel) <= 3f + agent.stoppingDistance) { reachedDestination = true; } } } StartSearchRoutine(radius); } private IEnumerator GetSetOfAcceptableNodesForRoaming(float radius) { _roamingPointsVectorList.Clear(); if (((Enum)_allowedLinks).HasFlag((Enum)(object)(SmartPathfindingLinkFlags)8) || ((Enum)_allowedLinks).HasFlag((Enum)(object)(SmartPathfindingLinkFlags)4)) { if (RoundManager.Instance.insideAINodes != null) { _roamingPointsVectorList.AddRange(from x in RoundManager.Instance.insideAINodes where (Object)(object)x != (Object)null select x.transform.position); } if (RoundManager.Instance.outsideAINodes != null) { _roamingPointsVectorList.AddRange(from x in RoundManager.Instance.outsideAINodes where (Object)(object)x != (Object)null select x.transform.position); } } else if (IsAgentOutside()) { if (RoundManager.Instance.outsideAINodes != null) { _roamingPointsVectorList.AddRange(from x in RoundManager.Instance.outsideAINodes where (Object)(object)x != (Object)null select x.transform.position); } } else if (RoundManager.Instance.insideAINodes != null) { _roamingPointsVectorList.AddRange(from x in RoundManager.Instance.insideAINodes where (Object)(object)x != (Object)null select x.transform.position); } if (_roamingPointsVectorList.Count == 0) { for (int i = 0; i < 20; i++) { _roamingPointsVectorList.Add(RoundManager.Instance.GetRandomNavMeshPositionInRadius(((Component)this).transform.position, radius, default(NavMeshHit))); } } if (roamingTask == null) { roamingTask = new SmartPathTask(); } roamingTask.StartPathTask(agent, ((Component)this).transform.position, _roamingPointsVectorList, GetAllowedPathLinks()); int listSize = _roamingPointsVectorList.Count; CodeRebirthLibPlugin.ExtendedLogging($"Checking paths for {listSize} objects"); yield return (object)new WaitUntil((Func<bool>)(() => roamingTask.IsComplete)); for (int j = 0; j < listSize; j++) { if (!roamingTask.IsResultReady(j)) { CodeRebirthLibPlugin.Logger.LogError((object)$"Roaming task {j} is not ready"); continue; } SmartPathDestination? result = roamingTask.GetResult(j); if (result.HasValue) { result.GetValueOrDefault(); if (!(roamingTask.GetPathLength(j) > radius)) { _positionsToSearch.Add(_roamingPointsVectorList[j]); } } } _positionsToSearch.Shuffle(); } private IEnumerator ClearProximityNodes(List<Vector3> positionsToSearch, Vector3 positionToTravel, float radius) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) int count = positionsToSearch.Count; if (count == 0) { yield break; } for (int i = count - 1; i >= 0; i--) { if (Vector3.Distance(positionsToSearch[i], positionToTravel) <= radius) { positionsToSearch.RemoveAt(i); } yield return null; } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_SmartAgentNavigator() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(4258763819u, new RpcReceiveHandler(__rpc_handler_4258763819)); NetworkManager.__rpc_func_table.Add(1493229376u, new RpcReceiveHandler(__rpc_handler_1493229376)); } private static void __rpc_handler_4258763819(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkBehaviourReference thingOutsideServerRpc = default(NetworkBehaviourReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref thingOutsideServerRpc, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)1; ((SmartAgentNavigator)(object)target).SetThingOutsideServerRpc(thingOutsideServerRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1493229376(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkBehaviourReference thingOutsideClientRpc = default(NetworkBehaviourReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkBehaviourReference>(ref thingOutsideClientRpc, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)2; ((SmartAgentNavigator)(object)target).SetThingOutsideClientRpc(thingOutsideClientRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "SmartAgentNavigator"; } } } namespace CodeRebirthLib.Util.INetworkSerializables { public class HUDDisplayTip : INetworkSerializable { public enum AlertType { Hint, Warning } private AlertType _alertType; private string _header; private string _body; public string Header => _header; public string Body => _body; public AlertType Type => _alertType; public HUDDisplayTip(string header, string body, AlertType type = AlertType.Hint) { _header = header; _body = body; _alertType = type; } public unsafe void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) serializer.SerializeValue(ref _header, false); serializer.SerializeValue(ref _body, false); ((BufferSerializer<AlertType>*)(&serializer))->SerializeValue<AlertType>(ref _alertType, default(ForEnums)); } } public class PlayerControllerReference : INetworkSerializable { private int _playerID; public unsafe void NetworkSerialize<T>(BufferSerializer<T> serializer) where T : IReaderWriter { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) ((BufferSerializer<int>*)(&serializer))->SerializeValue<int>(ref _playerID, default(ForPrimitives)); } public static implicit operator PlayerControllerB(PlayerControllerReference reference) { return StartOfRound.Instance.allPlayerScripts[reference._playerID]; } public static implicit operator PlayerControllerReference(PlayerControllerB player) { return new PlayerControllerReference { _playerID = Array.IndexOf(StartOfRound.Instance.allPlayerScripts, player) }; } public override bool Equals(object? obj) { if (obj is PlayerControllerReference playerControllerReference) { return playerControllerReference._playerID == _playerID; } PlayerControllerB val = (PlayerControllerB)((obj is PlayerControllerB) ? obj : null); if (val != null) { return Array.IndexOf(StartOfRound.Instance.allPlayerScripts, val) == _playerID; } return false; } public override int GetHashCode() { return _playerID; } } } namespace CodeRebirthLib.Util.Attributes { [Serializable] public class AttributeStack<T> { [SerializeField] private T _baseValue; private bool _isDirty = true; private T _lastCalculated; private List<Func<T, T>> _stack = new List<Func<T, T>>(); public T BaseValue => _baseValue; public AttributeStack() { } public AttributeStack(T baseValue) { _baseValue = baseValue; } public Func<T, T> Add(Func<T, T> transformer) { _stack.Add(transformer); _isDirty = true; return transformer; } public void Remove(Func<T, T> transformer) { _stack.Remove(transformer); } public void MarkDirty() { _isDirty = true; } public T Calculate(bool forceRecalculate = false) { if (!_isDirty && !forceRecalculate) { return _lastCalculated; } T val = _baseValue; foreach (Func<T, T> item in _stack) { val = item(val); } _lastCalculated = val; _isDirty = false; return val; } } } namespace CodeRebirthLib.Patches { public static class DeleteFileButtonPatch { [CompilerGenerated] private static class <>O { public static hook_DeleteFile <0>__DeleteFileButton_DeleteFile; } public static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__DeleteFileButton_DeleteFile; if (obj == null) { hook_DeleteFile val = DeleteFileButton_DeleteFile; <>O.<0>__DeleteFileButton_DeleteFile = val; obj = (object)val; } DeleteFileButton.DeleteFile += (hook_DeleteFile)obj; } private static void DeleteFileButton_DeleteFile(orig_DeleteFile orig, DeleteFileButton self) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown orig.Invoke(self); ES3Settings saveSettings = (ES3Settings)((!((Object)(object)NetworkSingleton<CodeRebirthLibNetworker>.Instance != (Object)null)) ? ((object)new ES3Settings($"CRLibLCSaveFile{self.fileToDelete + 1}", new Enum[1] { (Enum)(object)(EncryptionType)0 })) : ((object)NetworkSingleton<CodeRebirthLibNetworker>.Instance.SaveSettings)); CodeRebirthLibNetworker.ResetCodeRebirthLibData(saveSettings); } } internal static class EnemyAIPatch { [CompilerGenerated] private static class <>O { public static hook_Start <0>__EnemyAI_Start; public static hook_HitEnemy <1>__EnemyAI_HitEnemy; } public static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown object obj = <>O.<0>__EnemyAI_Start; if (obj == null) { hook_Start val = EnemyAI_Start; <>O.<0>__EnemyAI_Start = val; obj = (object)val; } EnemyAI.Start += (hook_Start)obj; object obj2 = <>O.<1>__EnemyAI_HitEnemy; if (obj2 == null) { hook_HitEnemy val2 = EnemyAI_HitEnemy; <>O.<1>__EnemyAI_HitEnemy = val2; obj2 = (object)val2; } EnemyAI.HitEnemy += (hook_HitEnemy)obj2; } private static void EnemyAI_Start(orig_Start orig, EnemyAI self) { orig.Invoke(self); CREnemyAdditionalData.CreateOrGet(self); } private static void EnemyAI_HitEnemy(orig_HitEnemy orig, EnemyAI self, int force, PlayerControllerB? playerWhoHit, bool playHitSFX, int hitID) { CREnemyAdditionalData cREnemyAdditionalData = CREnemyAdditionalData.CreateOrGet(self); if (Object.op_Implicit((Object)(object)playerWhoHit)) { cREnemyAdditionalData.PlayerThatLastHit = playerWhoHit; } if (!self.isEnemyDead && self.enemyHP - force <= 0 && (Object)(object)playerWhoHit != (Object)null) { cREnemyAdditionalData.KilledByPlayer = true; } orig.Invoke(self, force, playerWhoHit, playHitSFX, hitID); } } internal static class GameNetworkManagerPatch { [CompilerGenerated] private static class <>O { public static hook_Start <0>__GameNetworkManagerOnStart; public static hook_SaveItemsInShip <1>__GameNetworkManager_SaveItemsInShip; public static hook_ResetSavedGameValues <2>__GameNetworkManager_ResetSavedGameValues; } internal static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown //IL_0050: 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_005b: Expected O, but got Unknown object obj = <>O.<0>__GameNetworkManagerOnStart; if (obj == null) { hook_Start val = GameNetworkManagerOnStart; <>O.<0>__GameNetworkManagerOnStart = val; obj = (object)val; } GameNetworkManager.Start += (hook_Start)obj; object obj2 = <>O.<1>__GameNetworkManager_SaveItemsInShip; if (obj2 == null) { hook_SaveItemsInShip val2 = GameNetworkManager_SaveItemsInShip; <>O.<1>__GameNetworkManager_SaveItemsInShip = val2; obj2 = (object)val2; } GameNetworkManager.SaveItemsInShip += (hook_SaveItemsInShip)obj2; object obj3 = <>O.<2>__GameNetworkManager_ResetSavedGameValues; if (obj3 == null) { hook_ResetSavedGameValues val3 = GameNetworkManager_ResetSavedGameValues; <>O.<2>__GameNetworkManager_ResetSavedGameValues = val3; obj3 = (object)val3; } GameNetworkManager.ResetSavedGameValues += (hook_ResetSavedGameValues)obj3; } private static void GameNetworkManagerOnStart(orig_Start orig, GameNetworkManager self) { orig.Invoke(self); VanillaEnemies.Init(); } private static void GameNetworkManager_SaveItemsInShip(orig_SaveItemsInShip orig, GameNetworkManager self) { orig.Invoke(self); CodeRebirthLibPlugin.ExtendedLogging("Saving CodeRebirthLibData"); NetworkSingleton<CodeRebirthLibNetworker>.Instance?.SaveCodeRebirthLibData(); } private static void GameNetworkManager_ResetSavedGameValues(orig_ResetSavedGameValues orig, GameNetworkManager self) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown orig.Invoke(self); ES3Settings saveSettings = (ES3Settings)((!((Object)(object)NetworkSingleton<CodeRebirthLibNetworker>.Instance != (Object)null)) ? ((object)new ES3Settings("CRLib" + GameNetworkManager.Instance.currentSaveFileName, new Enum[1] { (Enum)(object)(EncryptionType)0 })) : ((object)NetworkSingleton<CodeRebirthLibNetworker>.Instance.SaveSettings)); CodeRebirthLibNetworker.ResetCodeRebirthLibData(saveSettings); } } internal static class MenuManagerPatch { [CompilerGenerated] private static class <>O { public static hook_Start <0>__MenuManager_Start; } internal static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__MenuManager_Start; if (obj == null) { hook_Start val = MenuManager_Start; <>O.<0>__MenuManager_Start = val; obj = (object)val; } MenuManager.Start += (hook_Start)obj; } private static void MenuManager_Start(orig_Start orig, MenuManager self) { orig.Invoke(self); CRAchievementHandler.LoadAll(); } } internal static class RoundManagerPatch { [CompilerGenerated] private static class <>O { public static hook_SpawnOutsideHazards <0>__SpawnOutsideMapObjects; } internal static List<RegisteredCRMapObject> registeredMapObjects = new List<RegisteredCRMapObject>(); internal static void Patch() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__SpawnOutsideMapObjects; if (obj == null) { hook_SpawnOutsideHazards val = SpawnOutsideMapObjects; <>O.<0>__SpawnOutsideMapObjects = val; obj = (object)val; } RoundManager.SpawnOutsideHazards += (hook_SpawnOutsideHazards)obj; } private static void SpawnOutsideMapObjects(orig_SpawnOutsideHazards orig, RoundManager self) { orig.Invoke(self); Random random = new Random(StartOfRound.Instance.randomMapSeed + 69); foreach (RegisteredCRMapObject registeredMapObject in registeredMapObjects) { HandleSpawningOutsideMapObjects(registeredMapObject, random); } } private static void HandleSpawningOutsideMapObjects(RegisteredCRMapObject mapObjDef, Random random) { //IL_001d: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown //IL_01af: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_013d: 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_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017f: 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_0189: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) SelectableLevel currentLevel = RoundManager.Instance.currentLevel; AnimationCurve val = new AnimationCurve((Keyframe[])(object)new Keyframe[2] { new Keyframe(0f, 0f), new Keyframe(1f, 0f) }); GameObject prefabToSpawn = ((RegisteredMapObject)mapObjDef).outsideObject.spawnableObject.prefabToSpawn; val = ((RegisteredMapObject)mapObjDef).spawnRateFunction(currentLevel); int num2; if (mapObjDef.hasNetworkObject) { if (!NetworkManager.Singleton.IsServer) { return; } float num = val.Evaluate(Random.Range(0f, 1f)) + 0.5f; CodeRebirthLibPlugin.ExtendedLogging($"number generated for host only: {num}"); num2 = Mathf.FloorToInt(num); } else { float num3 = val.Evaluate(random.NextFloat(0f, 1f)) + 0.5f; CodeRebirthLibPlugin.ExtendedLogging("number generated for everyone: " + num3); num2 = Mathf.FloorToInt(num3); } CodeRebirthLibPlugin.ExtendedLogging($"Spawning {num2} of {((Object)prefabToSpawn).name} for level {currentLevel}"); RaycastHit val2 = default(RaycastHit); for (int i = 0; i < num2; i++) { Vector3 position; if (mapObjDef.hasNetworkObject) { position = RoundManager.Instance.outsideAINodes[Random.Range(0, RoundManager.Instance.outsideAINodes.Length)].transform.position; position = RoundManager.Instance.GetRandomNavMeshPositionInBoxPredictable(position, 10f, default(NavMeshHit), new Random(Random.Range(0, 10000)), -1, 1f) + Vector3.up * 2f; } else { position = RoundManager.Instance.outsideAINodes[random.Next(RoundManager.Instance.outsideAINodes.Length)].transform.position; position = RoundManager.Instance.GetRandomNavMeshPositionInBoxPredictable(position, 10f, default(NavMeshHit), random, -1, 1f) + Vector3.up * 2f; } if (Physics.Raycast(position, Vector3.down, ref val2, 100f, StartOfRound.Instance.collidersAndRoomMaskAndDefault, (QueryTriggerInteraction)1) && Object.op_Implicit((Object)(object)((RaycastHit)(ref val2)).collider)) { GameObject val3 = Object.Instantiate<GameObject>(prefabToSpawn, ((RaycastHit)(ref val2)).point, Quaternion.identity, RoundManager.Instance.mapPropsContainer.transform); CodeRebirthLibPlugin.ExtendedLogging($"Spawning {((Object)val3).name} at {((RaycastHit)(ref val2)).point}"); if (mapObjDef.alignWithTerrain) { val3.transform.up = ((RaycastHit)(ref val2)).normal; } if (mapObjDef.hasNetworkObject) { val3.GetComponent<NetworkObject>().Spawn(true); } } } } } internal static class StartOfRoundPatch { [CompilerGenerated] private static class <>O { public static hook_Start <0>__StartOfRoundOnStart; public static hook_SetPlanetsWeather <1>__RefreshEnemyWeights; public static hook_AutoSaveShipData <2>__StartOfRound_AutoSaveShipData; } internal static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Expected O, but got Unknown //IL_0050: 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_005b: Expected O, but got Unknown object obj = <>O.<0>__StartOfRoundOnStart; if (obj == null) { hook_Start val = StartOfRoundOnStart; <>O.<0>__StartOfRoundOnStart = val; obj = (object)val; } StartOfRound.Start += (hook_Start)obj; object obj2 = <>O.<1>__RefreshEnemyWeights; if (obj2 == null) { hook_SetPlanetsWeather val2 = RefreshEnemyWeights; <>O.<1>__RefreshEnemyWeights = val2; obj2 = (object)val2; } StartOfRound.SetPlanetsWeather += (hook_SetPlanetsWeather)obj2; object obj3 = <>O.<2>__StartOfRound_AutoSaveShipData; if (obj3 == null) { hook_AutoSaveShipData val3 = StartOfRound_AutoSaveShipData; <>O.<2>__StartOfRound_AutoSaveShipData = val3; obj3 = (object)val3; } StartOfRound.AutoSaveShipData += (hook_AutoSaveShipData)obj3; } private static void StartOfRound_AutoSaveShipData(orig_AutoSaveShipData orig, StartOfRound self) { orig.Invoke(self); NetworkSingleton<CodeRebirthLibNetworker>.Instance?.SaveCodeRebirthLibData(); } private static void RefreshEnemyWeights(orig_SetPlanetsWeather orig, StartOfRound self, int connectedplayersonserver) { orig.Invoke(self, connectedplayersonserver); CREnemyDefinition.UpdateAllWeights(); } private static void StartOfRoundOnStart(orig_Start orig, StartOfRound self) { StartOfRound self2 = self; CREnemyDefinition.CreateMoonAttributeStacks(); orig.Invoke(self2); MoreLayerMasks.Init(); ((NetworkBehaviour)self2).NetworkObject.OnSpawn(delegate { //IL_0042: Unknown result type (might be due to invalid IL or missing references) if ((((NetworkBehaviour)self2).IsServer || ((NetworkBehaviour)self2).IsHost) && !Object.op_Implicit((Object)(object)NetworkSingleton<CodeRebirthLibNetworker>.Instance)) { GameObject val = Object.Instantiate<GameObject>(CodeRebirthLibPlugin.Main.NetworkerPrefab); SceneManager.MoveGameObjectToScene(val, ((Component)self2).gameObject.scene); val.GetComponent<NetworkObject>().Spawn(false); } }); } } internal static class TerminalPatch { [CompilerGenerated] private static class <>O { public static hook_LoadNewNodeIfAffordable <0>__TerminalOnLoadNewNodeIfAffordable; } internal static void Init() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown object obj = <>O.<0>__TerminalOnLoadNewNodeIfAffordable; if (obj == null) { hook_LoadNewNodeIfAffordable val = TerminalOnLoadNewNodeIfAffordable; <>O.<0>__TerminalOnLoadNewNodeIfAffordable = val; obj = (object)val; } Terminal.LoadNewNodeIfAffordable += (hook_LoadNewNodeIfAffordable)obj; } private static void TerminalOnLoadNewNodeIfAffordable(orig_LoadNewNodeIfAffordable orig, Terminal self, TerminalNode node) { if (node.shipUnlockableID != -1) { UnlockableItem unlockableItem = StartOfRound.Instance.unlockablesList.unlockables[node.shipUnlockableID]; ProgressiveUnlockData progressiveUnlockData = ProgressiveUnlockableHandler.AllProgressiveUnlockables.FirstOrDefault((ProgressiveUnlockData it) => it.Definition.UnlockableItemDef.unlockable == unlockableItem); if (progressiveUnlockData != null && !progressiveUnlockData.IsUnlocked) { orig.Invoke(self, progressiveUnlockData.Definition.ProgressiveDenyNode); return; } } orig.Invoke(self, node); } } } namespace CodeRebirthLib.ModCompats { internal static class GoodItemScanCompatibility { private static bool? _enabled; public static bool Enabled { get { bool valueOrDefault = _enabled.GetValueOrDefault(); if (!_enabled.HasValue) { valueOrDefault = Chainloader.PluginInfos.ContainsKey("TestAccount666.GoodItemScan"); _enabled = valueOrDefault; } return _enabled.Value; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool TryGetRectTransform(ScanNodeProperties scanNodeProperties, [NotNullWhen(true)] out RectTransform? rectTransform) { rect