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 Melanie Crafting Core v1.1.0
MelanieMeliciousCraft.dll
Decompiled a week agousing 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<int> workbench0Cost; internal static ConfigEntry<int> crucible0Cost; internal static ConfigEntry<float> craftMin; internal static ConfigEntry<float> craftMax; internal static ConfigEntry<int> refineMin; internal static ConfigEntry<int> refineMax; internal static ConfigEntry<string> hammerList; internal static ConfigEntry<string> sawList; internal static ConfigEntry<string> axeList; internal static ConfigEntry<string> logList; internal static ConfigEntry<string> plankList; internal static ConfigEntry<string> metalSheetList; internal static ConfigEntry<string> metalBarList; internal static ConfigEntry<string> goldMeltList; internal static ConfigEntry<string> ironMeltList; internal static ConfigEntry<string> aluminiumMeltList; internal static ConfigEntry<string> brassMeltList; internal static ConfigEntry<string> copperMeltList; internal static ConfigEntry<bool> rakeEnable; internal static ConfigEntry<int> rakeDamage; internal static ConfigEntry<int> rakeSpawn0; internal static ConfigEntry<string> rakeSpawn1; internal static ConfigEntry<string> rakeSpawn2; internal static ConfigEntry<int> hammer0Spawn; internal static ConfigEntry<int> saw0Spawn; internal static ConfigEntry<int> axe0Spawn; internal static ConfigEntry<int> hammer0Cost; internal static ConfigEntry<int> saw0Cost; internal static ConfigEntry<int> axe0Cost; internal static void SetupConfig(ConfigFile config) { workbench0Cost = config.Bind<int>("Prices", "Workbench", 120, "Modify the price for the workbench."); crucible0Cost = config.Bind<int>("Prices", "Crucible", 150, "Modify the price for the crucible."); craftMin = config.Bind<float>("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<float>("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<int>("Item Value", "Refine Value Minimum", 0, "Change the minimum value added when refining."); refineMax = config.Bind<int>("Item Value", "Refine Value Maximum", 20, "Change the maximum value added when refining."); hammerList = config.Bind<string>("Custom Tools", "Works as Hammer", string.Empty, "This is hammer."); sawList = config.Bind<string>("Custom Tools", "Works as Saw", string.Empty, "This is saw."); axeList = config.Bind<string>("Custom Tools", "Works as Axe", string.Empty, "This item can chop down trees. (Not 100% drop rate!)"); logList = config.Bind<string>("Custom Ingredients", "Craft as Log", string.Empty, "This is log."); plankList = config.Bind<string>("Custom Ingredients", "Craft as Plank", string.Empty, "This is plank."); metalSheetList = config.Bind<string>("Custom Ingredients", "Craft as Metal Sheet", string.Empty, "This is metal sheet."); metalBarList = config.Bind<string>("Custom Ingredients", "Craft as Metal Bar", string.Empty, "This is metal bar."); goldMeltList = config.Bind<string>("Custom Ingredients", "Craft as Meltable Gold", string.Empty, "This is meltable as gold."); ironMeltList = config.Bind<string>("Custom Ingredients", "Craft as Meltable Iron", string.Empty, "This is meltable as iron."); aluminiumMeltList = config.Bind<string>("Custom Ingredients", "Craft as Meltable Aluminium", string.Empty, "This is meltable as aluminium."); brassMeltList = config.Bind<string>("Custom Ingredients", "Craft as Meltable Brass", string.Empty, "This is meltable as brass."); copperMeltList = config.Bind<string>("Custom Ingredients", "Craft as Meltable Copper", string.Empty, "This is meltable as copper."); rakeEnable = config.Bind<bool>("Hazard Spawn", "Rake Traps Enabled", true, "Modify if rake traps spawn."); rakeDamage = config.Bind<int>("Hazard Spawn", "Rake Trap Damage", 40, "Modify the damage for rake traps."); rakeSpawn0 = config.Bind<int>("Hazard Spawn", "Rake Trap Global", 8, "Modify the weights for rake traps spawning on any moon."); rakeSpawn1 = config.Bind<string>("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<string>("Hazard Spawn", "Rake Trap By Key", "Experimentation:5", "Modify the weights for rake traps spawning on moons by certain keys."); hammer0Spawn = config.Bind<int>("Scrap Spawn", "Hammer Global Spawns", 40, "Modify the weights for hammers to spawn as scrap."); saw0Spawn = config.Bind<int>("Scrap Spawn", "Saw Global Spawns", 30, "Modify the weights for saw to spawn as scrap."); axe0Spawn = config.Bind<int>("Scrap Spawn", "Axe Global Spawns", 30, "Modify the weights for axe to spawn as scrap."); hammer0Cost = config.Bind<int>("Store Setup", "Hammer Price", -1, "Modify the price for hammers in the store. Set -1 to not register into the store."); saw0Cost = config.Bind<int>("Store Setup", "Saw Price", -1, "Modify the price for saws in the store. Set -1 to not register into the store."); axe0Cost = config.Bind<int>("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<short> tools = new List<short>(); 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<NetworkObject> delete = new List<NetworkObject>(); List<short[]> ingredients = new List<short[]>(); 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<Ingredient>(ref ingredient) && ((Component)child2).TryGetComponent<GrabbableObject>(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<NetworkObject>()); 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<NetworkObjectReference>(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<GameObject>(recipeList[itemList].product.spawnPrefab, spawnPos.position, spawnPos.rotation, spawnPos); val3.GetComponent<NetworkObject>().Spawn(false); SpawnItemClientRpc(NetworkObjectReference.op_Implicit(val3.GetComponent<NetworkObject>()), 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<NetworkObjectReference>(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<GrabbableObject>().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<NetworkObjectReference>(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<NetworkObjectReference>(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<float>(ref posX, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref posY, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(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<GameObject>(val3.spawnPrefab, new Vector3(posX, posY, posZ), Quaternion.identity, RoundManager.Instance.spawnedScrapContainer); val4.GetComponent<NetworkObject>().Spawn(false); SpawnItemClientRpc(NetworkObjectReference.op_Implicit(val4.GetComponent<NetworkObject>()), 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<NetworkObjectReference>(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<GrabbableObject>().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<float>(ref posX, default(ForPrimitives)); float posY = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref posY, default(ForPrimitives)); float posZ = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(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<NetworkObjectReference>(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<GameObject>(Plugin.bundle.LoadAsset<GameObject>("Assets/MelanieCrafting/Prefab/MMCraftSpawn.prefab"), Vector3.zero, Quaternion.identity); val.GetComponent<NetworkObject>().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<string> readOnlySpan = new ReadOnlySpan<string>(array6); readOnlySpan.CopyTo(new Span<string>(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<string>(array7); readOnlySpan.CopyTo(new Span<string>(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<string>(array6); readOnlySpan.CopyTo(new Span<string>(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<string>(array7); readOnlySpan.CopyTo(new Span<string>(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<string>(array6); readOnlySpan.CopyTo(new Span<string>(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<short>(), 1, 1, 1, 5); Plugin.RegisterRecipe(Plugin.crucible, val2, new short[1][] { new short[2] { 41, 2 } }, Array.Empty<short>(), 2, 2, 2, 5); Plugin.RegisterRecipe(Plugin.crucible, val2, new short[1][] { new short[2] { 41, 3 } }, Array.Empty<short>(), 3, 3, 3, 5); Plugin.RegisterRecipe(Plugin.crucible, val2, new short[1][] { new short[2] { 41, 4 } }, Array.Empty<short>(), 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<short>(), 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<Ingredient>(ref ingredient)) { Ingredient ingredient2 = ((Component)val4).gameObject.AddComponent<Ingredient>(); 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<SpawnableOutsideObject>("Assets/MelanieCrafting/Asset/Hazard/RakeTrap0.asset"); int value = MelanieCraftCfg.rakeSpawn0.Value; List<SpawnableOutsideObjectWithRarity> list = new List<SpawnableOutsideObjectWithRarity>(); foreach (ExtendedLevel extendedLevel in PatchedContent.ExtendedLevels) { if (value != 0) { list.Clear(); list.AddRange(CollectionExtensions.AddItem<SpawnableOutsideObjectWithRarity>((IEnumerable<SpawnableOutsideObjectWithRarity>)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<SpawnableOutsideObjectWithRarity>((IEnumerable<SpawnableOutsideObjectWithRarity>)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<SpawnableOutsideObjectWithRarity>((IEnumerable<SpawnableOutsideObjectWithRarity>)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<TreeHit>(); } [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>().ingredient.Add(48); } private static void AddIngredient(Item item, short ID) { Ingredient ingredient = default(Ingredient); if (item.spawnPrefab.TryGetComponent<Ingredient>(ref ingredient)) { ingredient.ingredient.Add(ID); } else { item.spawnPrefab.AddComponent<Ingredient>().ingredient.Add(ID); } } private static void AddTool(Item item, short ID) { Ingredient ingredient = default(Ingredient); if (!item.spawnPrefab.TryGetComponent<Ingredient>(ref ingredient)) { ingredient = item.spawnPrefab.AddComponent<Ingredient>(); } ingredient.tool = ID; } } [InjectInterface(typeof(TerrainObstacleTrigger))] public interface IAwake { void Awake(); } public class Ingredient : MonoBehaviour { public List<short> ingredient = new List<short>(); public bool consumable = true; public short tool = -1; } public class InteractItem : GrabbableObject { [CompilerGenerated] private sealed class <DrunkTime>d__9 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public int time; public InteractItem <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DrunkTime>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(<DrunkTime>d__9))] private IEnumerator DrunkTime(int time) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DrunkTime>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<Item> itemList; public static Plugin instance; public static List<Recipe> workbench = new List<Recipe>(); public static List<Recipe> crucible = new List<Recipe>(); 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<UnlockablesList>("Assets/MelanieCrafting/Asset/Unlockable.asset").unlockables.ToArray(); itemList = bundle.LoadAsset<AllItemsList>("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<ExtendedMod>("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<short>(), 2, 2, 1, 5); RegisterRecipe(workbench, itemList[7], new short[2][] { new short[2] { 27, 2 }, new short[2] { 25, 1 } }, Array.Empty<short>(), 3, 3, 1, 5); RegisterRecipe(workbench, itemList[1], new short[2][] { new short[2] { 30, 1 }, new short[2] { 25, 1 } }, Array.Empty<short>(), 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<short>(), 1, 1, 1, 5); RegisterRecipe(crucible, itemList[9], new short[1][] { new short[2] { 31, 2 } }, Array.Empty<short>(), 2, 2, 2, 5); RegisterRecipe(crucible, itemList[9], new short[1][] { new short[2] { 31, 3 } }, Array.Empty<short>(), 3, 3, 3, 5); RegisterRecipe(crucible, itemList[9], new short[1][] { new short[2] { 31, 4 } }, Array.Empty<short>(), 4, 4, 4, 5); RegisterRecipe(crucible, itemList[10], new short[1][] { new short[2] { 33, 1 } }, Array.Empty<short>(), 1, 1, 1, 5); RegisterRecipe(crucible, itemList[10], new short[1][] { new short[2] { 33, 2 } }, Array.Empty<short>(), 2, 2, 2, 5); RegisterRecipe(crucible, itemList[10], new short[1][] { new short[2] { 33, 3 } }, Array.Empty<short>(), 3, 3, 3, 5); RegisterRecipe(crucible, itemList[10], new short[1][] { new short[2] { 33, 4 } }, Array.Empty<short>(), 4, 4, 4, 5); RegisterRecipe(crucible, itemList[11], new short[1][] { new short[2] { 35, 1 } }, Array.Empty<short>(), 1, 1, 1, 5); RegisterRecipe(crucible, itemList[11], new short[1][] { new short[2] { 35, 2 } }, Array.Empty<short>(), 2, 2, 2, 5); RegisterRecipe(crucible, itemList[11], new short[1][] { new short[2] { 35, 3 } }, Array.Empty<short>(), 3, 3, 3, 5); RegisterRecipe(crucible, itemList[11], new short[1][] { new short[2] { 35, 4 } }, Array.Empty<short>(), 4, 4, 4, 5); RegisterRecipe(crucible, itemList[12], new short[1][] { new short[2] { 37, 1 } }, Array.Empty<short>(), 1, 1, 1, 5); RegisterRecipe(crucible, itemList[12], new short[1][] { new short[2] { 37, 2 } }, Array.Empty<short>(), 2, 2, 2, 5); RegisterRecipe(crucible, itemList[12], new short[1][] { new short[2] { 37, 3 } }, Array.Empty<short>(), 3, 3, 3, 5); RegisterRecipe(crucible, itemList[12], new short[1][] { new short[2] { 37, 4 } }, Array.Empty<short>(), 4, 4, 4, 5); LethalLevelLoaderNetworkManager.RegisterNetworkPrefab(bundle.LoadAsset<GameObject>("Assets/MelanieCrafting/Prefab/MMCraftSpawn.prefab")); LethalLevelLoaderNetworkManager.RegisterNetworkPrefab(bundle.LoadAsset<GameObject>("Assets/MelanieCrafting/Prefab/Hazard/RakeTrap0.prefab")); if (!alt) { PatchedContent.RegisterExtendedMod(extMod); } } public static void RegisterRecipe(List<Recipe> 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<StringWithRarity>(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<DawnItemInfo> val = NamespacedKey<DawnItemInfo>.From("melaniecrafting", ((Object)item).name); DawnLib.RegisterNetworkPrefab(item.spawnPrefab); DawnLib.DefineItem(val, item, (Action<ItemInfoBuilder>)delegate(ItemInfoBuilder itemInfo) { if (weight != 0) { itemInfo.DefineScrap((Action<ScrapBuilder>)delegate(ScrapBuilder scrap) { scrap.SetWeights((Action<WeightTableBuilder<DawnMoonInfo, SpawnWeightContext>>)delegate(WeightTableBuilder<DawnMoonInfo, SpawnWeightContext> setWeight) { setWeight.SetGlobalWeight(weight); }); }); } if (cost != -1) { itemInfo.DefineShop((Action<ShopBuilder>)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<DawnUnlockableItemInfo>.From("melaniecrafting", unlock.unlockableName), unlock, (Action<UnlockableInfoBuilder>)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<bool>(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<bool>(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<NetworkObject>().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<NetworkObject>().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<bool>(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<bool>(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<Ingredient>(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<GameObject>(recipeList[itemList].product.spawnPrefab, spawnPos.position, spawnPos.rotation, spawnPos); val3.GetComponent<NetworkObject>().Spawn(false); SpawnItemClientRpc(NetworkObjectReference.op_Implicit(val3.GetComponent<NetworkObject>()), 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<NetworkObjectReference>(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<GrabbableObject>().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<NetworkObjectReference>(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<GameObject> upgrades = new List<GameObject>(); public List<short> canAddTools = new List<short>(); private bool synced = false; public void AddTool(PlayerControllerB player) { Ingredient ingredient = default(Ingredient); if (player.isHoldingObject && ((Component)player.currentlyHeldObjectServer).TryGetComponent<Ingredient>(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<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe<short>(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<bool>(ref flag, default(ForPrimitives)); short[] addedTools = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe<short>(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<short>("MelanieMeliciousCraftVersion", (short)0, currentSaveFileName); if ((Object)(object)HarmonyPatches.workbench == (Object)null) { ES3.DeleteKey("MelanieMeliciousCraftWorkbench", currentSaveFileName); return; } ES3.Save<string>("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<short[]>(ES3.Load<string>("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<Ingredient>(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 { } }