using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading.Tasks; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Dawn; using GameNetcodeStuff; using HarmonyLib; using InjectionLibrary.Attributes; using LethalLevelLoader; using MelanieMeliciousCraft.NetcodePatcher; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RequiresInjections] [assembly: AssemblyTitle("MelanieMeliciousCraft")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("MelanieMelicious")] [assembly: AssemblyProduct("Melanie Crafting Progression Core")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] 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; } } } internal static class MelanieCraftCfg { internal static ConfigEntry workbench0Cost; internal static ConfigEntry crucible0Cost; internal static ConfigEntry craftMin; internal static ConfigEntry craftMax; internal static ConfigEntry refineMin; internal static ConfigEntry refineMax; internal static ConfigEntry hammerList; internal static ConfigEntry sawList; internal static ConfigEntry axeList; internal static ConfigEntry logList; internal static ConfigEntry plankList; internal static ConfigEntry metalSheetList; internal static ConfigEntry metalBarList; internal static ConfigEntry goldMeltList; internal static ConfigEntry ironMeltList; internal static ConfigEntry aluminiumMeltList; internal static ConfigEntry brassMeltList; internal static ConfigEntry copperMeltList; internal static ConfigEntry rakeEnable; internal static ConfigEntry rakeDamage; internal static ConfigEntry rakeSpawn0; internal static ConfigEntry rakeSpawn1; internal static ConfigEntry rakeSpawn2; internal static ConfigEntry hammer0Spawn; internal static ConfigEntry saw0Spawn; internal static ConfigEntry axe0Spawn; internal static ConfigEntry hammer0Cost; internal static ConfigEntry saw0Cost; internal static ConfigEntry axe0Cost; internal static void SetupConfig(ConfigFile config) { workbench0Cost = config.Bind("Prices", "Workbench", 120, "Modify the price for the workbench."); crucible0Cost = config.Bind("Prices", "Crucible", 150, "Modify the price for the crucible."); craftMin = config.Bind("Item Value", "Crafting Value Minimum", 10f, "Directly change the first random range value (usually minimum) for how much value is added when crafting."); craftMax = config.Bind("Item Value", "Crafting Value Maximum MULTIPLIER", 0.25f, "Change the multiplier applied to the second random range value (usually maximum) applied to a copy of total craft value."); refineMin = config.Bind("Item Value", "Refine Value Minimum", 0, "Change the minimum value added when refining."); refineMax = config.Bind("Item Value", "Refine Value Maximum", 20, "Change the maximum value added when refining."); hammerList = config.Bind("Custom Tools", "Works as Hammer", string.Empty, "This is hammer."); sawList = config.Bind("Custom Tools", "Works as Saw", string.Empty, "This is saw."); axeList = config.Bind("Custom Tools", "Works as Axe", string.Empty, "This item can chop down trees. (Not 100% drop rate!)"); logList = config.Bind("Custom Ingredients", "Craft as Log", string.Empty, "This is log."); plankList = config.Bind("Custom Ingredients", "Craft as Plank", string.Empty, "This is plank."); metalSheetList = config.Bind("Custom Ingredients", "Craft as Metal Sheet", string.Empty, "This is metal sheet."); metalBarList = config.Bind("Custom Ingredients", "Craft as Metal Bar", string.Empty, "This is metal bar."); goldMeltList = config.Bind("Custom Ingredients", "Craft as Meltable Gold", string.Empty, "This is meltable as gold."); ironMeltList = config.Bind("Custom Ingredients", "Craft as Meltable Iron", string.Empty, "This is meltable as iron."); aluminiumMeltList = config.Bind("Custom Ingredients", "Craft as Meltable Aluminium", string.Empty, "This is meltable as aluminium."); brassMeltList = config.Bind("Custom Ingredients", "Craft as Meltable Brass", string.Empty, "This is meltable as brass."); copperMeltList = config.Bind("Custom Ingredients", "Craft as Meltable Copper", string.Empty, "This is meltable as copper."); rakeEnable = config.Bind("Hazard Spawn", "Rake Traps Enabled", true, "Modify if rake traps spawn."); rakeDamage = config.Bind("Hazard Spawn", "Rake Trap Damage", 40, "Modify the damage for rake traps."); rakeSpawn0 = config.Bind("Hazard Spawn", "Rake Trap Global", 8, "Modify the weights for rake traps spawning on any moon."); rakeSpawn1 = config.Bind("Hazard Spawn", "Rake Trap By Tag", "canyon:4,marsh:10", "Modify the weights for rake traps spawning on moons with certain tags."); rakeSpawn2 = config.Bind("Hazard Spawn", "Rake Trap By Key", "Experimentation:5", "Modify the weights for rake traps spawning on moons by certain keys."); hammer0Spawn = config.Bind("Scrap Spawn", "Hammer Global Spawns", 40, "Modify the weights for hammers to spawn as scrap."); saw0Spawn = config.Bind("Scrap Spawn", "Saw Global Spawns", 30, "Modify the weights for saw to spawn as scrap."); axe0Spawn = config.Bind("Scrap Spawn", "Axe Global Spawns", 30, "Modify the weights for axe to spawn as scrap."); hammer0Cost = config.Bind("Store Setup", "Hammer Price", -1, "Modify the price for hammers in the store. Set -1 to not register into the store."); saw0Cost = config.Bind("Store Setup", "Saw Price", -1, "Modify the price for saws in the store. Set -1 to not register into the store."); axe0Cost = config.Bind("Store Setup", "Axe Price", -1, "Modify the price for axes in the store. Set -1 to not register into the store."); } } namespace MelMelCraft { public class Crafter : NetworkBehaviour { public List tools = new List(); public Transform spawnPos; public Recipe[] recipeList; public float craftMin = 0f; public float craftMax = 0f; [SerializeField] private Animator anim; private int craftAnim = Animator.StringToHash("Craft"); public void Craft() { Craft(0); } public async void Craft(int delay) { List delete = new List(); List ingredients = new List(); int dishValue = 0; short iteration = 0; Ingredient ingredient = default(Ingredient); GrabbableObject item = default(GrabbableObject); foreach (Transform item2 in ((Component)this).transform) { Transform child2 = item2; if (((Component)child2).TryGetComponent(ref ingredient) && ((Component)child2).TryGetComponent(ref item)) { foreach (short type in ingredient.ingredient) { bool added2 = false; foreach (short[] heldType in ingredients) { if (heldType[0] == type) { heldType[1]++; added2 = true; break; } } if (!added2) { ingredients.Add(new short[2] { type, 1 }); } } if (ingredient.consumable) { delete.Add(((Component)child2).GetComponent()); dishValue += item.scrapValue; } iteration++; } ingredient = null; item = null; } if (iteration == 0) { return; } Recipe[] array = recipeList; foreach (Recipe recipe in array) { if (iteration < recipe.min || iteration > recipe.max) { continue; } bool added2 = true; short[] array2 = recipe.tools; foreach (short tool in array2) { if (!tools.Contains(tool)) { added2 = false; break; } } if (!added2) { continue; } short[][] ingredients2 = recipe.ingredients; foreach (short[] required in ingredients2) { added2 = false; foreach (short[] held in ingredients) { if (held[0] == required[0] && held[1] >= required[1]) { added2 = true; break; } } if (!added2) { break; } } if (!added2) { continue; } foreach (NetworkObject child in delete) { if ((Object)(object)child != (Object)null) { DeleteItemServerRpc(NetworkObjectReference.op_Implicit(child)); } } if ((Object)(object)anim != (Object)null && anim.HasState(0, craftAnim)) { AnimServerRpc(); } await Task.Delay(delay, ((MonoBehaviour)this).destroyCancellationToken); for (int i = 0; i < recipe.quantity; i++) { SpawnItemServerRpc(Array.IndexOf(recipeList, recipe), (int)((float)dishValue + Random.Range(craftMin, (float)dishValue * craftMax)) / recipe.quantity); } break; } } [ServerRpc(RequireOwnership = false)] internal void DeleteItemServerRpc(NetworkObjectReference netObj) { //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_00dc: 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)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1677710912u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref netObj, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1677710912u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; NetworkObject val3 = default(NetworkObject); if (((NetworkObjectReference)(ref netObj)).TryGet(ref val3, (NetworkManager)null)) { val3.Despawn(true); } } } [ServerRpc(RequireOwnership = false)] public void SpawnItemServerRpc(int itemList, int dishValue) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_0071: 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_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0129: 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(2569922090u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, itemList); BytePacker.WriteValueBitPacked(val2, dishValue); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2569922090u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; GameObject val3 = Object.Instantiate(recipeList[itemList].product.spawnPrefab, spawnPos.position, spawnPos.rotation, spawnPos); val3.GetComponent().Spawn(false); SpawnItemClientRpc(NetworkObjectReference.op_Implicit(val3.GetComponent()), dishValue); } } } [ClientRpc] private void SpawnItemClientRpc(NetworkObjectReference netObjRef, int value) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(531173574u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref netObjRef, default(ForNetworkSerializable)); BytePacker.WriteValueBitPacked(val2, value); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 531173574u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; NetworkObject val3 = default(NetworkObject); if (((NetworkObjectReference)(ref netObjRef)).TryGet(ref val3, (NetworkManager)null)) { ((Component)val3).GetComponent().SetScrapValue(value); } } } [ServerRpc(RequireOwnership = false)] private void AnimServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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(3912903399u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3912903399u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; AnimClientRpc(); } } } [ClientRpc] private void AnimClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1155555877u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1155555877u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; anim.Play(craftAnim, -1, 0f); } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1677710912u, new RpcReceiveHandler(__rpc_handler_1677710912), "DeleteItemServerRpc"); ((NetworkBehaviour)this).__registerRpc(2569922090u, new RpcReceiveHandler(__rpc_handler_2569922090), "SpawnItemServerRpc"); ((NetworkBehaviour)this).__registerRpc(531173574u, new RpcReceiveHandler(__rpc_handler_531173574), "SpawnItemClientRpc"); ((NetworkBehaviour)this).__registerRpc(3912903399u, new RpcReceiveHandler(__rpc_handler_3912903399), "AnimServerRpc"); ((NetworkBehaviour)this).__registerRpc(1155555877u, new RpcReceiveHandler(__rpc_handler_1155555877), "AnimClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_1677710912(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) { NetworkObjectReference netObj = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe(ref netObj, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)1; ((Crafter)(object)target).DeleteItemServerRpc(netObj); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2569922090(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //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) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int itemList = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref itemList); int dishValue = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref dishValue); target.__rpc_exec_stage = (__RpcExecStage)1; ((Crafter)(object)target).SpawnItemServerRpc(itemList, dishValue); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_531173574(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_003e: 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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference netObjRef = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe(ref netObjRef, default(ForNetworkSerializable)); int value = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref value); target.__rpc_exec_stage = (__RpcExecStage)1; ((Crafter)(object)target).SpawnItemClientRpc(netObjRef, value); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3912903399(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((Crafter)(object)target).AnimServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1155555877(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((Crafter)(object)target).AnimClientRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "Crafter"; } } public class Crucible : Crafter { public override void OnNetworkSpawn() { recipeList = Plugin.crucible.ToArray(); HarmonyPatches.crucible = this; } protected override void __initializeVariables() { base.__initializeVariables(); } protected override void __initializeRpcs() { base.__initializeRpcs(); } protected internal override string __getTypeName() { return "Crucible"; } } public class GlobalSpawner : NetworkBehaviour { public static GlobalSpawner Instance { get; private set; } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); if ((Object)(object)Instance != (Object)null) { Object.Destroy((Object)(object)((Component)Instance).gameObject); } Instance = this; } [ServerRpc(RequireOwnership = false)] public void SpawnItemServerRpc(int itemList, float posX, float posY, float posZ) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_008a: 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_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: 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_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_0169: 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(4034897490u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, itemList); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref posX, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref posY, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref posZ, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 4034897490u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; Item val3 = Plugin.itemList[itemList]; GameObject val4 = Object.Instantiate(val3.spawnPrefab, new Vector3(posX, posY, posZ), Quaternion.identity, RoundManager.Instance.spawnedScrapContainer); val4.GetComponent().Spawn(false); SpawnItemClientRpc(NetworkObjectReference.op_Implicit(val4.GetComponent()), Random.Range(val3.minValue, val3.maxValue)); } } } [ClientRpc] private void SpawnItemClientRpc(NetworkObjectReference netObjRef, int value) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(978084037u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref netObjRef, default(ForNetworkSerializable)); BytePacker.WriteValueBitPacked(val2, value); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 978084037u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; NetworkObject val3 = default(NetworkObject); if (((NetworkObjectReference)(ref netObjRef)).TryGet(ref val3, (NetworkManager)null)) { ((Component)val3).GetComponent().SetScrapValue(value); } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(4034897490u, new RpcReceiveHandler(__rpc_handler_4034897490), "SpawnItemServerRpc"); ((NetworkBehaviour)this).__registerRpc(978084037u, new RpcReceiveHandler(__rpc_handler_978084037), "SpawnItemClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_4034897490(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_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_00ad: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int itemList = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref itemList); float posX = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe(ref posX, default(ForPrimitives)); float posY = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe(ref posY, default(ForPrimitives)); float posZ = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe(ref posZ, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((GlobalSpawner)(object)target).SpawnItemServerRpc(itemList, posX, posY, posZ); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_978084037(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_003e: 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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference netObjRef = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe(ref netObjRef, default(ForNetworkSerializable)); int value = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref value); target.__rpc_exec_stage = (__RpcExecStage)1; ((GlobalSpawner)(object)target).SpawnItemClientRpc(netObjRef, value); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "GlobalSpawner"; } } public class HarmonyPatches { internal static Workbench workbench; internal static Crucible crucible; private static bool loadedIngredient; private static bool loadedHazard; [HarmonyPostfix] [HarmonyPatch(typeof(Terminal), "Awake")] private static void PostText(Terminal __instance) { try { TerminalNode specialKeywordResult = __instance.terminalNodes.allKeywords[7].specialKeywordResult; if (!specialKeywordResult.displayText.Contains("SHIP UPGRADES:") || specialKeywordResult.displayText.Contains("Workbench")) { return; } string text = string.Empty; foreach (ExtendedUnlockableItem extendedUnlockableItem in Plugin.extMod.ExtendedUnlockableItems) { text += $"\n* {extendedUnlockableItem.UnlockableItem.unlockableName} // Price: ${extendedUnlockableItem.ItemCost}"; } specialKeywordResult.displayText = specialKeywordResult.displayText.Insert(specialKeywordResult.displayText.IndexOf(":") + 1, text); } catch { Plugin.mls.LogError((object)"Could not find vanilla store terminal node!"); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "Start")] private static void PostStart(StartOfRound __instance) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) if (GameNetworkManager.Instance.isHostingGame) { GameObject val = Object.Instantiate(Plugin.bundle.LoadAsset("Assets/MelanieCrafting/Prefab/MMCraftSpawn.prefab"), Vector3.zero, Quaternion.identity); val.GetComponent().Spawn(false); } if (!loadedIngredient) { string[] array = MelanieCraftCfg.hammerList.Value.Split(','); string[] array2 = MelanieCraftCfg.sawList.Value.Split(','); string[] array3 = MelanieCraftCfg.axeList.Value.Split(','); string[] array4 = MelanieCraftCfg.logList.Value.Split(','); string[] array5 = MelanieCraftCfg.plankList.Value.Split(','); string[] array6 = MelanieCraftCfg.metalSheetList.Value.Split(','); int num = 0; string[] array7 = new string[1 + array6.Length]; ReadOnlySpan readOnlySpan = new ReadOnlySpan(array6); readOnlySpan.CopyTo(new Span(array7).Slice(num, readOnlySpan.Length)); num += readOnlySpan.Length; array7[num] = "Metal sheet"; string[] array8 = array7; string[] array9 = MelanieCraftCfg.metalBarList.Value.Split(','); array7 = MelanieCraftCfg.goldMeltList.Value.Split(','); num = 0; array6 = new string[2 + array7.Length]; readOnlySpan = new ReadOnlySpan(array7); readOnlySpan.CopyTo(new Span(array6).Slice(num, readOnlySpan.Length)); num += readOnlySpan.Length; array6[num] = "Golden cup"; num++; array6[num] = "Ring"; string[] array10 = array6; array6 = MelanieCraftCfg.ironMeltList.Value.Split(','); num = 0; array7 = new string[4 + array6.Length]; readOnlySpan = new ReadOnlySpan(array6); readOnlySpan.CopyTo(new Span(array7).Slice(num, readOnlySpan.Length)); num += readOnlySpan.Length; array7[num] = "Big bolt"; num++; array7[num] = "Large axle"; num++; array7[num] = "V-type engine"; num++; array7[num] = "Garbage lid"; string[] array11 = array7; array7 = MelanieCraftCfg.aluminiumMeltList.Value.Split(','); num = 0; array6 = new string[4 + array7.Length]; readOnlySpan = new ReadOnlySpan(array7); readOnlySpan.CopyTo(new Span(array6).Slice(num, readOnlySpan.Length)); num += readOnlySpan.Length; array6[num] = "Cookie pan"; num++; array6[num] = "Red soda"; num++; array6[num] = "Stop sign"; num++; array6[num] = "Yield sign"; string[] array12 = array6; array6 = MelanieCraftCfg.brassMeltList.Value.Split(','); num = 0; array7 = new string[2 + array6.Length]; readOnlySpan = new ReadOnlySpan(array6); readOnlySpan.CopyTo(new Span(array7).Slice(num, readOnlySpan.Length)); num += readOnlySpan.Length; array7[num] = "Bell"; num++; array7[num] = "Cash register"; string[] array13 = array7; string[] array14 = MelanieCraftCfg.copperMeltList.Value.Split(','); foreach (Item items in __instance.allItemsList.itemsList) { string[] array15 = array; foreach (string text in array15) { if (items.itemName == text) { AddTool(items, 0); } } string[] array16 = array2; foreach (string text2 in array16) { if (items.itemName == text2) { AddTool(items, 1); } } string[] array17 = array3; foreach (string text3 in array17) { if (items.itemName == text3) { AddTool(items, 2); } } if (items.itemName == "Zap gun") { AddIngredient(items, 49); } else if (items.itemName == "Radar-booster") { AddIngredient(items, 50); } string[] array18 = array4; foreach (string text4 in array18) { if (items.itemName == text4) { AddIngredient(items, 19); } } string[] array19 = array5; foreach (string text5 in array19) { if (items.itemName == text5) { AddIngredient(items, 20); } } string[] array20 = array8; foreach (string text6 in array20) { if (items.itemName == text6) { AddIngredient(items, 27); } } string[] array21 = array9; foreach (string text7 in array21) { if (items.itemName == text7) { AddIngredient(items, 30); } } string[] array22 = array10; foreach (string text8 in array22) { if (items.itemName == text8) { AddIngredient(items, 41); } } string[] array23 = array11; foreach (string text9 in array23) { if (items.itemName == text9) { AddIngredient(items, 31); } } string[] array24 = array12; foreach (string text10 in array24) { if (items.itemName == text10) { AddIngredient(items, 33); } } string[] array25 = array13; foreach (string text11 in array25) { if (items.itemName == text11) { AddIngredient(items, 35); } } string[] array26 = array14; foreach (string text12 in array26) { if (items.itemName == text12) { AddIngredient(items, 37); } } } Item val2 = null; foreach (Item items2 in __instance.allItemsList.itemsList) { if (items2.itemName == "Gold bar") { val2 = items2; break; } } Item val3 = null; foreach (Item items3 in __instance.allItemsList.itemsList) { if (items3.itemName == "Key") { val3 = items3; break; } } if ((Object)(object)val2 != (Object)null) { Plugin.RegisterRecipe(Plugin.crucible, val2, new short[1][] { new short[2] { 41, 1 } }, Array.Empty(), 1, 1, 1, 5); Plugin.RegisterRecipe(Plugin.crucible, val2, new short[1][] { new short[2] { 41, 2 } }, Array.Empty(), 2, 2, 2, 5); Plugin.RegisterRecipe(Plugin.crucible, val2, new short[1][] { new short[2] { 41, 3 } }, Array.Empty(), 3, 3, 3, 5); Plugin.RegisterRecipe(Plugin.crucible, val2, new short[1][] { new short[2] { 41, 4 } }, Array.Empty(), 4, 4, 4, 5); } if ((Object)(object)val3 != (Object)null) { Plugin.RegisterRecipe(Plugin.workbench, val3, new short[1][] { new short[2] { 36, 1 } }, Array.Empty(), 1, 1, 6, 5); } loadedIngredient = true; } if ((Object)(object)workbench != (Object)null) { workbench.recipeList = Plugin.workbench.ToArray(); } if ((Object)(object)crucible != (Object)null) { crucible.recipeList = Plugin.crucible.ToArray(); } GrabbableObject[] array27 = (GrabbableObject[])(object)Object.FindObjectsOfType(typeof(GrabbableObject)); GrabbableObject[] array28 = array27; Ingredient ingredient = default(Ingredient); foreach (GrabbableObject val4 in array28) { if ((Object)(object)val4.itemProperties != (Object)null && (Object)(object)val4.itemProperties.spawnPrefab != (Object)null && val4.itemProperties.spawnPrefab.TryGetComponent(ref ingredient)) { Ingredient ingredient2 = ((Component)val4).gameObject.AddComponent(); ingredient2.ingredient = ingredient.ingredient; } } } [HarmonyPrefix] [HarmonyPatch(typeof(StartOfRound), "Start")] private static void PreStart() { //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Expected O, but got Unknown //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Expected O, but got Unknown //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Expected O, but got Unknown if (loadedHazard) { return; } if (MelanieCraftCfg.rakeEnable.Value) { SpawnableOutsideObject val = Plugin.bundle.LoadAsset("Assets/MelanieCrafting/Asset/Hazard/RakeTrap0.asset"); int value = MelanieCraftCfg.rakeSpawn0.Value; List list = new List(); foreach (ExtendedLevel extendedLevel in PatchedContent.ExtendedLevels) { if (value != 0) { list.Clear(); list.AddRange(CollectionExtensions.AddItem((IEnumerable)extendedLevel.SelectableLevel.spawnableOutsideObjects, new SpawnableOutsideObjectWithRarity(val, AnimationCurve.Constant(0f, 1f, (float)value)))); extendedLevel.SelectableLevel.spawnableOutsideObjects = list.ToArray(); } foreach (ContentTag contentTag in ((ExtendedContent)extendedLevel).ContentTags) { string[] array = MelanieCraftCfg.rakeSpawn1.Value.Split(','); foreach (string text in array) { if (text == string.Empty) { continue; } try { string[] array2 = text.Split(':'); if (array2.Length == 3) { array2 = new string[2] { array2[1], array2[2] }; } if (contentTag.contentTagName.ToLower() == array2[0].ToLower()) { list.Clear(); list.AddRange(CollectionExtensions.AddItem((IEnumerable)extendedLevel.SelectableLevel.spawnableOutsideObjects, new SpawnableOutsideObjectWithRarity(val, AnimationCurve.Constant(0f, 1f, (float)short.Parse(array2[1]))))); extendedLevel.SelectableLevel.spawnableOutsideObjects = list.ToArray(); break; } } catch { Plugin.mls.LogError((object)"Invalid config input for rake trap by tag. Skipping this iteration"); } } } string[] array3 = MelanieCraftCfg.rakeSpawn2.Value.Split(','); foreach (string text2 in array3) { if (text2 == string.Empty) { continue; } try { string[] array4 = text2.Split(':'); if (array4.Length == 3) { array4 = new string[2] { array4[1], array4[2] }; } if (extendedLevel.NumberlessPlanetName.ToLower() == array4[0].ToLower()) { list.Clear(); list.AddRange(CollectionExtensions.AddItem((IEnumerable)extendedLevel.SelectableLevel.spawnableOutsideObjects, new SpawnableOutsideObjectWithRarity(val, AnimationCurve.Constant(0f, 1f, (float)short.Parse(array4[1]))))); extendedLevel.SelectableLevel.spawnableOutsideObjects = list.ToArray(); break; } } catch { Plugin.mls.LogError((object)"Invalid config input for rake trap by tag. Skipping this iteration"); } } } } if (GameNetworkManager.Instance.isHostingGame) { workbench = null; } } [HarmonyPostfix] [HarmonyPatch(typeof(TerrainObstacleTrigger), "Awake")] private static void TreeAwake(TerrainObstacleTrigger __instance) { ((Component)__instance).gameObject.layer = 21; ((Component)__instance).gameObject.AddComponent(); } [HarmonyPostfix] [HarmonyPatch(typeof(SandSpiderWebTrap), "Hit")] private static void WebBreak(SandSpiderWebTrap __instance) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) GlobalSpawner.Instance.SpawnItemServerRpc(0, ((Component)__instance).transform.position.x, ((Component)__instance).transform.position.y + 1f, ((Component)__instance).transform.position.z); } [HarmonyPostfix] [HarmonyPatch(typeof(LungProp), "Start")] private static void PostLungProp(LungProp __instance) { ((Component)__instance).gameObject.AddComponent().ingredient.Add(48); } private static void AddIngredient(Item item, short ID) { Ingredient ingredient = default(Ingredient); if (item.spawnPrefab.TryGetComponent(ref ingredient)) { ingredient.ingredient.Add(ID); } else { item.spawnPrefab.AddComponent().ingredient.Add(ID); } } private static void AddTool(Item item, short ID) { Ingredient ingredient = default(Ingredient); if (!item.spawnPrefab.TryGetComponent(ref ingredient)) { ingredient = item.spawnPrefab.AddComponent(); } ingredient.tool = ID; } } [InjectInterface(typeof(TerrainObstacleTrigger))] public interface IAwake { void Awake(); } public class Ingredient : MonoBehaviour { public List ingredient = new List(); public bool consumable = true; public short tool = -1; } public class InteractItem : GrabbableObject { [CompilerGenerated] private sealed class d__9 : IEnumerator, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public int time; public InteractItem <>4__this; object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public d__9(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForSeconds(2f * Time.deltaTime); <>1__state = 1; return true; case 1: { <>1__state = -1; PlayerControllerB playerHeldBy4 = ((GrabbableObject)<>4__this).playerHeldBy; playerHeldBy4.drunkness += 1f; PlayerControllerB playerHeldBy5 = ((GrabbableObject)<>4__this).playerHeldBy; playerHeldBy5.drunknessInertia += 1f; PlayerControllerB playerHeldBy6 = ((GrabbableObject)<>4__this).playerHeldBy; playerHeldBy6.drunknessSpeed += 1f; <>2__current = (object)new WaitForSeconds((float)time * Time.deltaTime); <>1__state = 2; return true; } case 2: { <>1__state = -1; PlayerControllerB playerHeldBy = ((GrabbableObject)<>4__this).playerHeldBy; playerHeldBy.drunkness -= 1f; PlayerControllerB playerHeldBy2 = ((GrabbableObject)<>4__this).playerHeldBy; playerHeldBy2.drunknessInertia -= 1f; PlayerControllerB playerHeldBy3 = ((GrabbableObject)<>4__this).playerHeldBy; playerHeldBy3.drunknessSpeed -= 1f; return false; } } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public UnityEvent onGrab; public UnityEvent onGrounded; public UnityEvent onUse; public override void GrabItem() { onGrab.Invoke(); } public override void OnHitGround() { onGrounded.Invoke(); } public override void ItemActivate(bool used, bool buttonDown = true) { onUse.Invoke(); } public void Damage(int damage) { PlayerControllerB playerHeldBy = base.playerHeldBy; playerHeldBy.health -= damage; } public void Despawn() { if ((Object)(object)base.playerHeldBy != (Object)null && base.playerHeldBy.isHoldingObject) { base.playerHeldBy.DespawnHeldObject(); } } public void Drunk(int time) { ((MonoBehaviour)base.playerHeldBy).StartCoroutine(DrunkTime(time)); } [IteratorStateMachine(typeof(d__9))] private IEnumerator DrunkTime(int time) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new d__9(0) { <>4__this = this, time = time }; } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { ((GrabbableObject)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "InteractItem"; } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("MelanieMelicious.CraftCore", "MelanieMelicious - Crafting Progression Core", "1.1.0")] public class Plugin : BaseUnityPlugin { private const string GUID = "MelanieMelicious.CraftCore"; private const string NAME = "MelanieMelicious - Crafting Progression Core"; private const string VERSION = "1.1.0"; public const string NAMESPACE = "melaniecrafting"; private readonly Harmony harmony = new Harmony("MelanieMelicious.CraftCore"); internal static ManualLogSource mls; public static AssetBundle bundle; public UnlockableItem[] unlockList; public static List itemList; public static Plugin instance; public static List workbench = new List(); public static List crucible = new List(); internal static int rakeDamage; internal static ExtendedMod extMod; private bool alt = false; private void Awake() { instance = this; MelanieCraftCfg.SetupConfig(((BaseUnityPlugin)this).Config); mls = Logger.CreateLogSource("MelanieMelicious - Crafting Progression Core"); mls = ((BaseUnityPlugin)this).Logger; string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); bundle = AssetBundle.LoadFromFile(Path.Combine(directoryName, "melaniecrafting")); unlockList = bundle.LoadAsset("Assets/MelanieCrafting/Asset/Unlockable.asset").unlockables.ToArray(); itemList = bundle.LoadAsset("Assets/MelanieCrafting/Asset/Item.asset").itemsList; rakeDamage = MelanieCraftCfg.rakeDamage.Value; if (Chainloader.PluginInfos.ContainsKey("com.github.teamxiaolan.dawnlib")) { alt = true; } harmony.PatchAll(typeof(HarmonyPatches)); harmony.PatchAll(typeof(SavePatches)); extMod = bundle.LoadAsset("Assets/MelanieCrafting/MelanieCrafting.asset"); Unlockable(unlockList[0], MelanieCraftCfg.workbench0Cost.Value); Unlockable(unlockList[1], MelanieCraftCfg.crucible0Cost.Value); Item(itemList[0]); Item(itemList[1], MelanieCraftCfg.hammer0Spawn.Value, MelanieCraftCfg.hammer0Cost.Value); Item(itemList[2], MelanieCraftCfg.saw0Spawn.Value, MelanieCraftCfg.saw0Cost.Value); Item(itemList[3]); Item(itemList[4]); Item(itemList[5]); Item(itemList[6]); Item(itemList[7], MelanieCraftCfg.axe0Spawn.Value, MelanieCraftCfg.axe0Cost.Value); Item(itemList[8]); Item(itemList[9]); Item(itemList[10]); Item(itemList[11]); Item(itemList[12]); Item(itemList[13]); Item(itemList[14]); Item(itemList[15]); RegisterRecipe(workbench, itemList[4], new short[1][] { new short[2] { 19, 1 } }, new short[1] { 1 }, 1, 1, 1, 5); RegisterRecipe(workbench, itemList[5], new short[1][] { new short[2] { 20, 1 } }, new short[1] { 1 }, 1, 1, 2, 5); RegisterRecipe(workbench, itemList[2], new short[1][] { new short[2] { 27, 2 } }, Array.Empty(), 2, 2, 1, 5); RegisterRecipe(workbench, itemList[7], new short[2][] { new short[2] { 27, 2 }, new short[2] { 25, 1 } }, Array.Empty(), 3, 3, 1, 5); RegisterRecipe(workbench, itemList[1], new short[2][] { new short[2] { 30, 1 }, new short[2] { 25, 1 } }, Array.Empty(), 2, 2, 1, 5); RegisterRecipe(workbench, itemList[13], new short[1][] { new short[2] { 32, 5 } }, new short[1], 5, 5, 1, 5); RegisterRecipe(workbench, itemList[14], new short[1][] { new short[2] { 32, 1 } }, new short[2] { 0, 2 }, 1, 1, 1, 5); RegisterRecipe(workbench, itemList[15], new short[1][] { new short[2] { 34, 1 } }, new short[2] { 0, 2 }, 1, 1, 1, 5); RegisterRecipe(crucible, itemList[9], new short[1][] { new short[2] { 31, 1 } }, Array.Empty(), 1, 1, 1, 5); RegisterRecipe(crucible, itemList[9], new short[1][] { new short[2] { 31, 2 } }, Array.Empty(), 2, 2, 2, 5); RegisterRecipe(crucible, itemList[9], new short[1][] { new short[2] { 31, 3 } }, Array.Empty(), 3, 3, 3, 5); RegisterRecipe(crucible, itemList[9], new short[1][] { new short[2] { 31, 4 } }, Array.Empty(), 4, 4, 4, 5); RegisterRecipe(crucible, itemList[10], new short[1][] { new short[2] { 33, 1 } }, Array.Empty(), 1, 1, 1, 5); RegisterRecipe(crucible, itemList[10], new short[1][] { new short[2] { 33, 2 } }, Array.Empty(), 2, 2, 2, 5); RegisterRecipe(crucible, itemList[10], new short[1][] { new short[2] { 33, 3 } }, Array.Empty(), 3, 3, 3, 5); RegisterRecipe(crucible, itemList[10], new short[1][] { new short[2] { 33, 4 } }, Array.Empty(), 4, 4, 4, 5); RegisterRecipe(crucible, itemList[11], new short[1][] { new short[2] { 35, 1 } }, Array.Empty(), 1, 1, 1, 5); RegisterRecipe(crucible, itemList[11], new short[1][] { new short[2] { 35, 2 } }, Array.Empty(), 2, 2, 2, 5); RegisterRecipe(crucible, itemList[11], new short[1][] { new short[2] { 35, 3 } }, Array.Empty(), 3, 3, 3, 5); RegisterRecipe(crucible, itemList[11], new short[1][] { new short[2] { 35, 4 } }, Array.Empty(), 4, 4, 4, 5); RegisterRecipe(crucible, itemList[12], new short[1][] { new short[2] { 37, 1 } }, Array.Empty(), 1, 1, 1, 5); RegisterRecipe(crucible, itemList[12], new short[1][] { new short[2] { 37, 2 } }, Array.Empty(), 2, 2, 2, 5); RegisterRecipe(crucible, itemList[12], new short[1][] { new short[2] { 37, 3 } }, Array.Empty(), 3, 3, 3, 5); RegisterRecipe(crucible, itemList[12], new short[1][] { new short[2] { 37, 4 } }, Array.Empty(), 4, 4, 4, 5); LethalLevelLoaderNetworkManager.RegisterNetworkPrefab(bundle.LoadAsset("Assets/MelanieCrafting/Prefab/MMCraftSpawn.prefab")); LethalLevelLoaderNetworkManager.RegisterNetworkPrefab(bundle.LoadAsset("Assets/MelanieCrafting/Prefab/Hazard/RakeTrap0.prefab")); if (!alt) { PatchedContent.RegisterExtendedMod(extMod); } } public static void RegisterRecipe(List addToCookerRecipes, Item product, short[][] ingredientsAndCount, short[] tools, short min = 3, short max = 3, short productQuantity = 1, short priority = 0) { addToCookerRecipes.Add(new Recipe { ingredients = ingredientsAndCount, min = min, max = max, product = product, quantity = productQuantity, priority = priority, tools = tools }); } private void Item(Item item, int weight = 0, int cost = -1) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_0063: Expected O, but got Unknown if (!alt) { ExtendedItem val = new ExtendedItem { Item = item }; if (weight != 0) { val.LevelMatchingProperties = new LevelMatchingProperties { levelTags = new List(2) { new StringWithRarity("Vanilla", weight), new StringWithRarity("Custom", weight) } }; } if (cost != -1) { item.creditsWorth = cost; val.IsBuyableItem = true; } extMod.ExtendedItems.Add(val); } else { ItemAlt(item, weight, cost); } } private void ItemAlt(Item item, int weight = 0, int cost = -1) { NamespacedKey val = NamespacedKey.From("melaniecrafting", ((Object)item).name); DawnLib.RegisterNetworkPrefab(item.spawnPrefab); DawnLib.DefineItem(val, item, (Action)delegate(ItemInfoBuilder itemInfo) { if (weight != 0) { itemInfo.DefineScrap((Action)delegate(ScrapBuilder scrap) { scrap.SetWeights((Action>)delegate(WeightTableBuilder setWeight) { setWeight.SetGlobalWeight(weight); }); }); } if (cost != -1) { itemInfo.DefineShop((Action)delegate(ShopBuilder shop) { shop.OverrideCost(cost); }); } }); } private void Unlockable(UnlockableItem unlock, int cost) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Expected O, but got Unknown if (!alt) { extMod.ExtendedUnlockableItems.Add(new ExtendedUnlockableItem { UnlockableItem = unlock, ItemCost = cost }); } else { UnlockableAlt(unlock, cost); } } private void UnlockableAlt(UnlockableItem unlock, int cost) { DawnLib.RegisterNetworkPrefab(unlock.prefabObject); DawnLib.DefineUnlockable(NamespacedKey.From("melaniecrafting", unlock.unlockableName), unlock, (Action)delegate(UnlockableInfoBuilder info) { info.SetCost(cost); }); } } public class RakeTrap : NetworkBehaviour { [SerializeField] private Animator animator; private const string play = "play"; public void Hit(PlayerControllerB player) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) HitServerRpc(state: true); player.DamagePlayer(Plugin.rakeDamage, true, true, (CauseOfDeath)0, 0, false, default(Vector3)); } public void Hit2() { HitServerRpc(state: false); } [ServerRpc(RequireOwnership = false)] private void HitServerRpc(bool state) { //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_00dc: 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(2237943435u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref state, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2237943435u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; HitClientRpc(state); } } } [ClientRpc] private void HitClientRpc(bool state) { //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_00dc: 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.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3834622412u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref state, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3834622412u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; animator.SetBool("play", state); } } } public void Dismantle() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) GlobalSpawner.Instance.SpawnItemServerRpc(Random.Range(5, 8), ((Component)this).transform.position.x, ((Component)this).transform.position.y + 1f, ((Component)this).transform.position.z); DismantleServerRpc(); } [ServerRpc(RequireOwnership = false)] private void DismantleServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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(3820099073u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3820099073u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; ((Component)this).GetComponent().Despawn(true); } } } private void Start() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0086: 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_00ac: Unknown result type (might be due to invalid IL or missing references) if (!GameNetworkManager.Instance.isHostingGame) { if (!((NetworkBehaviour)this).IsSpawned) { Object.Destroy((Object)(object)((Component)this).gameObject); } return; } RaycastHit val = default(RaycastHit); if (Physics.Raycast(((Component)this).transform.position + Vector3.up * 2f, Vector3.down, ref val, 3f, 1107298561)) { ((Component)this).transform.position = ((RaycastHit)(ref val)).point; ((Component)this).transform.up = ((RaycastHit)(ref val)).normal; ((Component)this).transform.Rotate(Vector3.up * (float)Random.Range(-180, 180), (Space)1); } ((Component)this).GetComponent().Spawn(true); } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(2237943435u, new RpcReceiveHandler(__rpc_handler_2237943435), "HitServerRpc"); ((NetworkBehaviour)this).__registerRpc(3834622412u, new RpcReceiveHandler(__rpc_handler_3834622412), "HitClientRpc"); ((NetworkBehaviour)this).__registerRpc(3820099073u, new RpcReceiveHandler(__rpc_handler_3820099073), "DismantleServerRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_2237943435(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_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool state = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref state, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((RakeTrap)(object)target).HitServerRpc(state); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3834622412(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_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool state = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref state, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((RakeTrap)(object)target).HitClientRpc(state); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3820099073(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((RakeTrap)(object)target).DismantleServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "RakeTrap"; } } public class Recipe { internal short[][] ingredients; internal short[] tools = new short[0]; internal short min; internal short max; internal short quantity; internal short priority; internal Item product; } public class Refine : NetworkBehaviour { public Transform spawnPos; public Recipe[] recipeList; public float refineMin; public float refineMax; public void Craft(PlayerControllerB playerWhoTriggered) { if (!playerWhoTriggered.isHoldingObject) { return; } GrabbableObject currentlyHeldObjectServer = playerWhoTriggered.currentlyHeldObjectServer; Ingredient ingredient = default(Ingredient); if (!((Component)currentlyHeldObjectServer).TryGetComponent(ref ingredient)) { return; } Recipe[] array = recipeList; foreach (Recipe recipe in array) { if (ingredient.ingredient.Contains(recipe.ingredients[0][0])) { for (int j = 0; j < recipe.quantity; j++) { SpawnItemServerRpc(Array.IndexOf(recipeList, recipe), (int)((float)currentlyHeldObjectServer.scrapValue + Random.Range(refineMin, refineMax)) / recipe.quantity); } playerWhoTriggered.DespawnHeldObject(); break; } } } [ServerRpc(RequireOwnership = false)] public void SpawnItemServerRpc(int itemList, int dishValue) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: 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_0071: 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_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0129: 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(891307308u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, itemList); BytePacker.WriteValueBitPacked(val2, dishValue); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 891307308u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; GameObject val3 = Object.Instantiate(recipeList[itemList].product.spawnPrefab, spawnPos.position, spawnPos.rotation, spawnPos); val3.GetComponent().Spawn(false); SpawnItemClientRpc(NetworkObjectReference.op_Implicit(val3.GetComponent()), dishValue); } } } [ClientRpc] private void SpawnItemClientRpc(NetworkObjectReference netObjRef, int value) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: 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)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1707190453u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref netObjRef, default(ForNetworkSerializable)); BytePacker.WriteValueBitPacked(val2, value); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1707190453u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; NetworkObject val3 = default(NetworkObject); if (((NetworkObjectReference)(ref netObjRef)).TryGet(ref val3, (NetworkManager)null)) { ((Component)val3).GetComponent().SetScrapValue(value); } } } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); refineMin = MelanieCraftCfg.refineMin.Value; refineMax = MelanieCraftCfg.refineMax.Value; } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(891307308u, new RpcReceiveHandler(__rpc_handler_891307308), "SpawnItemServerRpc"); ((NetworkBehaviour)this).__registerRpc(1707190453u, new RpcReceiveHandler(__rpc_handler_1707190453), "SpawnItemClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_891307308(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //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) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int itemList = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref itemList); int dishValue = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref dishValue); target.__rpc_exec_stage = (__RpcExecStage)1; ((Refine)(object)target).SpawnItemServerRpc(itemList, dishValue); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1707190453(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_003e: 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_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference netObjRef = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe(ref netObjRef, default(ForNetworkSerializable)); int value = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref value); target.__rpc_exec_stage = (__RpcExecStage)1; ((Refine)(object)target).SpawnItemClientRpc(netObjRef, value); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "Refine"; } } public class SaveCrafter : Crafter { public List upgrades = new List(); public List canAddTools = new List(); private bool synced = false; public void AddTool(PlayerControllerB player) { Ingredient ingredient = default(Ingredient); if (player.isHoldingObject && ((Component)player.currentlyHeldObjectServer).TryGetComponent(ref ingredient) && ingredient.tool != -1 && canAddTools.Contains(ingredient.tool) && !tools.Contains(ingredient.tool)) { AddToolServerRpc(ingredient.tool); player.DespawnHeldObject(); } } [ServerRpc(RequireOwnership = false)] private void AddToolServerRpc(short tool) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3300359901u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, tool); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3300359901u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; AddToolClientRpc(tool); } } } [ClientRpc] private void AddToolClientRpc(short tool) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2782130414u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, tool); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2782130414u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; tools.Add(tool); upgrades[canAddTools.IndexOf(tool)].SetActive(true); } } } [ServerRpc(RequireOwnership = false)] private void SyncToolServerRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3574493460u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3574493460u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; SyncToolClientRpc(tools.ToArray()); } } } [ClientRpc] private void SyncToolClientRpc(short[] addedTools) { //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_010c: 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.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2960638172u, val, (RpcDelivery)0); bool flag = addedTools != null; ((FastBufferWriter)(ref val2)).WriteValueSafe(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(addedTools, default(ForPrimitives)); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2960638172u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (!synced) { foreach (short item in addedTools) { tools.Add(item); upgrades[canAddTools.IndexOf(item)].SetActive(true); } synced = true; } } public void LoadTools() { foreach (short tool in tools) { upgrades[canAddTools.IndexOf(tool)].SetActive(true); } } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); if (!((NetworkBehaviour)this).IsHost) { SyncToolServerRpc(); } } protected override void __initializeVariables() { base.__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(3300359901u, new RpcReceiveHandler(__rpc_handler_3300359901), "AddToolServerRpc"); ((NetworkBehaviour)this).__registerRpc(2782130414u, new RpcReceiveHandler(__rpc_handler_2782130414), "AddToolClientRpc"); ((NetworkBehaviour)this).__registerRpc(3574493460u, new RpcReceiveHandler(__rpc_handler_3574493460), "SyncToolServerRpc"); ((NetworkBehaviour)this).__registerRpc(2960638172u, new RpcReceiveHandler(__rpc_handler_2960638172), "SyncToolClientRpc"); base.__initializeRpcs(); } private static void __rpc_handler_3300359901(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { short tool = default(short); ByteUnpacker.ReadValueBitPacked(reader, ref tool); target.__rpc_exec_stage = (__RpcExecStage)1; ((SaveCrafter)(object)target).AddToolServerRpc(tool); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2782130414(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0036: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { short tool = default(short); ByteUnpacker.ReadValueBitPacked(reader, ref tool); target.__rpc_exec_stage = (__RpcExecStage)1; ((SaveCrafter)(object)target).AddToolClientRpc(tool); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3574493460(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((SaveCrafter)(object)target).SyncToolServerRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2960638172(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(ref flag, default(ForPrimitives)); short[] addedTools = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref addedTools, default(ForPrimitives)); } target.__rpc_exec_stage = (__RpcExecStage)1; ((SaveCrafter)(object)target).SyncToolClientRpc(addedTools); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "SaveCrafter"; } } public class SavePatches { private const string versionSaveKey = "MelanieMeliciousCraftVersion"; private const string workbenchSaveKey = "MelanieMeliciousCraftWorkbench"; [HarmonyPrefix] [HarmonyPatch(typeof(GameNetworkManager), "SaveGameValues")] private static void SaveCrafters() { //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Expected O, but got Unknown if (!((NetworkBehaviour)StartOfRound.Instance).IsServer) { return; } try { string currentSaveFileName = GameNetworkManager.Instance.currentSaveFileName; ES3.Save("MelanieMeliciousCraftVersion", (short)0, currentSaveFileName); if ((Object)(object)HarmonyPatches.workbench == (Object)null) { ES3.DeleteKey("MelanieMeliciousCraftWorkbench", currentSaveFileName); return; } ES3.Save("MelanieMeliciousCraftWorkbench", JsonConvert.SerializeObject((object)HarmonyPatches.workbench.tools.ToArray()), currentSaveFileName, new ES3Settings(new Enum[1] { (Enum)(object)(ReferenceMode)0 })); } catch { Plugin.mls.LogError((object)"Issue while saving Melanie Crafting Progression Core custom info. Aborting to prevent save break."); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "LoadAttachedVehicle")] private static void LoadCrafters(StartOfRound __instance) { if (!((NetworkBehaviour)__instance).IsServer) { return; } try { string currentSaveFileName = GameNetworkManager.Instance.currentSaveFileName; if (ES3.KeyExists("MelanieMeliciousCraftWorkbench", currentSaveFileName) && (Object)(object)HarmonyPatches.workbench != (Object)null) { Workbench workbench = HarmonyPatches.workbench; workbench.tools.AddRange(JsonConvert.DeserializeObject(ES3.Load("MelanieMeliciousCraftWorkbench", currentSaveFileName)).ToArray()); workbench.LoadTools(); } } catch { Plugin.mls.LogError((object)"Issue while loading Melanie Crafting Progression Core custom info. Aborting to prevent save break."); } } } public class TreeHit : MonoBehaviour, IHittable { bool IHittable.Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID = -1) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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_007f: Unknown result type (might be due to invalid IL or missing references) Ingredient ingredient = default(Ingredient); if (playerWhoHit.isHoldingObject && ((Component)playerWhoHit.currentlyHeldObjectServer).TryGetComponent(ref ingredient) && ingredient.tool == 2) { RoundManager.Instance.DestroyTreeOnLocalClient(((Component)this).transform.position); if (Random.Range(0, 2) == 0) { GlobalSpawner.Instance.SpawnItemServerRpc(3, ((Component)this).transform.position.x, ((Component)this).transform.position.y + 3f, ((Component)this).transform.position.z); } return true; } return false; } } public class Workbench : SaveCrafter { public override void OnNetworkSpawn() { base.OnNetworkSpawn(); recipeList = Plugin.workbench.ToArray(); HarmonyPatches.workbench = this; craftMin = MelanieCraftCfg.craftMin.Value; craftMax = MelanieCraftCfg.craftMax.Value; } protected override void __initializeVariables() { base.__initializeVariables(); } protected override void __initializeRpcs() { base.__initializeRpcs(); } protected internal override string __getTypeName() { return "Workbench"; } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { } } } namespace MelanieMeliciousCraft.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }