Decompiled source of CrusherMod v1.0.4

ModConcasseur.dll

Decompiled 5 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using Jotunn.Configs;
using Jotunn.Entities;
using Jotunn.Managers;
using Jotunn.Utils;
using UnityEngine;
using UnityEngine.UI;
using mod_data;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("JotunnModStub")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("JotunnModStub")]
[assembly: AssemblyCopyright("Copyright ©  2021")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")]
[assembly: AssemblyFileVersion("0.0.1.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.1.0")]
public class piece_recycler : MonoBehaviour, Hoverable, Interactable
{
	protected Inventory m_inventory;

	protected Animator m_animator;

	protected ZSyncAnimation m_zsync_animation;

	public float ratio = 0.5f;

	public List<ItemData> m_itemsdata => m_inventory.GetAllItems();

	public static piece_recycler SET_Prefab(string prefabname)
	{
		GameObject prefab = PrefabManager.Instance.GetPrefab(prefabname);
		prefab.AddComponent<piece_recycler>();
		return prefab.GetComponent<piece_recycler>();
	}

	public void Awake()
	{
		m_inventory = ((Component)((Component)this).transform.root.Find("Container")).GetComponent<Container>().GetInventory();
		m_animator = ((Component)((Component)this).transform.root).GetComponent<Animator>();
		m_zsync_animation = ((Component)((Component)this).transform.root).GetComponent<ZSyncAnimation>();
	}

	public string GetHoverName()
	{
		return "$piece_recycler";
	}

	public string GetHoverText()
	{
		if (m_itemsdata == null || m_itemsdata.Count == 0)
		{
			return "Rien à concasser";
		}
		return "[<color=yellow><b>E</b></color>] Concasser";
	}

	public bool Interact(Humanoid user, bool hold, bool alt)
	{
		//IL_00af: Unknown result type (might be due to invalid IL or missing references)
		if (m_itemsdata == null || m_itemsdata.Count == 0)
		{
			MessageHud.instance.ShowMessage((MessageType)2, "Concasseur vide...", 0, (Sprite)null);
			return false;
		}
		if (((Object)((AnimatorClipInfo)(ref m_animator.GetCurrentAnimatorClipInfo(0)[0])).clip).name != "Idle")
		{
			return false;
		}
		Debug.Log((object)("Interaction at" + Time.time));
		m_zsync_animation.SetTrigger("start_anim");
		((MonoBehaviour)this).Invoke("OnPress", 2.15f);
		FX.Play(FX.RefSFX.sfx_concasseur_crank, ((Component)this).transform.position);
		return true;
	}

	public bool UseItem(Humanoid user, ItemData item)
	{
		return false;
	}

	public List<(string item_name, float quantity)> GetCostList(Inventory inventory)
	{
		List<(string, float)> list = new List<(string, float)>();
		List<Recipe> recipes = ObjectDB.instance.m_recipes;
		foreach (ItemData allItem in inventory.GetAllItems())
		{
			float num = allItem.m_stack;
			float num2 = allItem.m_quality;
			string name = allItem.m_shared.m_name;
			Recipe val = allItem.m_shared.EX_GetRecipe();
			if (!((Object)(object)val != (Object)null))
			{
				continue;
			}
			float num3 = val.m_amount;
			foreach (Requirement item4 in val.m_resources.ToList())
			{
				string res_name = ((Object)item4.m_resItem).name;
				float num4 = (float)item4.m_amount * (num / num3);
				if (num2 > 1f)
				{
					num4 += (float)(int)Math.Floor(0.5f * num2 * (num2 - 1f) * (float)item4.m_amountPerLevel);
				}
				int num5 = list.FindIndex(((string item_name, float number) x) => x.item_name == res_name);
				if (num5 >= 0)
				{
					float item = list[num5].Item2;
					list[num5] = (res_name, item + num4);
				}
				else
				{
					list.Add((res_name, num4));
				}
			}
		}
		foreach (var item5 in list)
		{
			string item2 = item5.Item1;
			float item3 = item5.Item2;
			Debug.LogError((object)(item2 + " " + item3));
		}
		return list;
	}

	public void OnPress()
	{
		//IL_0025: Unknown result type (might be due to invalid IL or missing references)
		//IL_003d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0058: Unknown result type (might be due to invalid IL or missing references)
		//IL_006c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0071: Unknown result type (might be due to invalid IL or missing references)
		//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_00f4: 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)
		Debug.Log((object)("OnPress at :" + Time.time));
		FX.Play(FX.RefSFX.sfx_destruction_01, ((Component)this).transform.position);
		FX.Play(FX.RefSFX.sfx_small_explosion_02, ((Component)this).transform.position);
		FX.Play("vfx_Place_forge", ((Component)this).transform.position + new Vector3(0f, 0.5f, 0f));
		List<(string, float)> costList = GetCostList(m_inventory);
		foreach (ItemData allItem in m_inventory.GetAllItems())
		{
			if ((Object)(object)allItem.m_shared.EX_GetRecipe() == (Object)null)
			{
				_MAIN.Imanip.spawnItemMaxStack(((Object)allItem.m_dropPrefab).name, allItem.m_stack, -1, ((Component)this).transform.root.position + new Vector3(-2f, 2f, 0f));
			}
		}
		m_inventory.RemoveAll();
		foreach (var item2 in costList)
		{
			int num = (int)Math.Floor(item2.Item2 * ratio);
			string item = item2.Item1;
			GameObject prefab = PrefabManager.Instance.GetPrefab(item);
			int maxStackSize = prefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_maxStackSize;
			for (int i = 0; i < num / maxStackSize; i++)
			{
				m_inventory.AddItem(prefab, maxStackSize);
			}
			m_inventory.AddItem(prefab, num % maxStackSize);
		}
	}
}
internal class _log
{
	public static void warning(string title, string msg)
	{
		Debug.LogWarning((object)(title + ":" + msg));
	}

	public static void error(string msg, string class_name)
	{
		Debug.LogError((object)("ERROR: " + msg));
		Debug.LogError((object)("POSITION: " + class_name));
	}

	public static void message(string msg, string class_name = "")
	{
		Debug.LogWarning((object)("MESSAGE: " + msg));
		if (class_name != "")
		{
			Debug.LogWarning((object)("POSITION: " + class_name));
		}
	}

	public static void local_chat_message(string msg)
	{
		((Terminal)Chat.instance).AddString("", Localization.instance.Localize(msg), (Type)1, false);
		Traverse.Create((object)Chat.instance).Field("m_hideTimer").SetValue((object)0);
	}
}
internal class FX
{
	public enum RefSFX
	{
		sfx_rune_drop,
		sfx_transaction_complete,
		sfx_coin_transfer,
		wav_button_click01,
		sfx_event_complete,
		sfx_destruction_01,
		sfx_magical_poof_01,
		sfx_quest_complete,
		sfx_zhonya_in,
		sfx_zhonya_out,
		sfx_concasseur_crank,
		sfx_small_explosion_02,
		NULL
	}

	public enum RefVFX
	{
		vfx_interact_lifmunk,
		vfx_interact_fireworks01,
		vfx_strike_01,
		vfx_zhonya,
		vfx_piece_chest_reward01_destruction
	}

	public static string[] namedmusiclist = new string[2] { "bg1_sewers", "kaldeim" };

	public static GameObject Play(RefSFX REF, Vector3? pos = null)
	{
		return Play(REF.ToString(), pos);
	}

	public static GameObject Play(RefVFX REF, Vector3? pos = null)
	{
		return Play(REF.ToString(), pos);
	}

	public static GameObject Play(string sfx_name, Vector3? pos = null)
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0041: 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)
		if (!pos.HasValue)
		{
			pos = ((Component)Player.m_localPlayer).transform.position;
		}
		GameObject prefab = PrefabManager.Instance.GetPrefab(sfx_name);
		if (Object.op_Implicit((Object)(object)prefab))
		{
			return Object.Instantiate<GameObject>(prefab, pos.Value, Quaternion.identity);
		}
		_log.error("FX: '" + sfx_name + "' was not found.", "FX");
		return null;
	}

	private static EffectData GetFXData(string fx_name)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		EffectData val = new EffectData();
		val.m_prefab = PrefabManager.Instance.GetPrefab(fx_name);
		val.m_enabled = true;
		return val;
	}

	public static EffectList GetFXList(params string[] fx_names)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		EffectList val = new EffectList();
		val.m_effectPrefabs = (EffectData[])(object)new EffectData[fx_names.Length];
		for (int i = 0; i < fx_names.Length; i++)
		{
			val.m_effectPrefabs[i] = GetFXData(fx_names[i]);
		}
		return val;
	}

	public static StepEffect GetFootFXList(string name, MotionType type_motion, GroundMaterial ground_mat, params string[] fx_names)
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_000f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0010: Unknown result type (might be due to invalid IL or missing references)
		//IL_0016: 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)
		StepEffect val = new StepEffect();
		val.m_name = name;
		val.m_motionType = type_motion;
		val.m_material = ground_mat;
		val.m_effectPrefabs = (GameObject[])(object)new GameObject[fx_names.Length];
		for (int i = 0; i < fx_names.Length; i++)
		{
			val.m_effectPrefabs[i] = PrefabManager.Instance.GetPrefab(fx_names[i]);
		}
		return val;
	}

	public static void AddFXList(EffectList an_effect_list, params string[] names)
	{
		if (an_effect_list.m_effectPrefabs == null)
		{
			an_effect_list.m_effectPrefabs = (EffectData[])(object)new EffectData[0];
		}
		List<EffectData> list = an_effect_list.m_effectPrefabs.ToList();
		foreach (string fx_name in names)
		{
			list.Add(GetFXData(fx_name));
		}
		an_effect_list.m_effectPrefabs = list.ToArray();
	}
}
public static class ItemSharedData
{
	public static Recipe EX_GetRecipe(this SharedData shared_data)
	{
		List<Recipe> list = (from x in ObjectDB.instance.m_recipes
			where (Object)(object)x != (Object)null && (Object)(object)x.m_item != (Object)null
			where x.m_item.m_itemData.m_shared.m_name == shared_data.m_name
			select x).ToList();
		if (list != null && list.Count != 0)
		{
			return list[0];
		}
		return null;
	}
}
public static class PrefabManagerExtension
{
	public static T GetComp<T>(this PrefabManager man, string item_name) where T : Component
	{
		GameObject prefab = man.GetPrefab(item_name);
		if ((Object)(object)prefab == (Object)null)
		{
			return default(T);
		}
		return prefab.GetComponent<T>();
	}
}
[BepInPlugin("com.jotunn.sifmod", "Mod Concasseur", "1.0")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
internal class _MAIN : BaseUnityPlugin
{
	public class Imanip
	{
		public static List<GameObject> spawnItemMaxStack(string name, int quantity, int quality = -1, Vector3 position = default(Vector3))
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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)
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: 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_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_008f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0094: 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_0099: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_00be: 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_0117: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			List<GameObject> list = new List<GameObject>();
			int num = 1;
			Vector3 val = Random.insideUnitSphere * ((num == 1) ? 0f : 0.5f);
			GameObject prefab = PrefabManager.Instance.GetPrefab(name);
			ItemDrop component = prefab.GetComponent<ItemDrop>();
			int maxStackSize = component.m_itemData.m_shared.m_maxStackSize;
			int num2 = quantity / maxStackSize;
			int num3 = quantity % maxStackSize;
			Vector3 val2 = ((Component)Player.m_localPlayer).transform.position + ((Component)Player.m_localPlayer).transform.forward * 2f + Vector3.up + val;
			if (position != default(Vector3))
			{
				val2 = position;
			}
			if (num3 > 0)
			{
				GameObject val3 = Object.Instantiate<GameObject>(prefab, val2, Quaternion.identity);
				val3.GetComponent<ItemDrop>().SetStack(num3);
				val3.GetComponent<ItemDrop>().m_itemData.m_quality = quality;
				val3.GetComponent<ItemDrop>().m_autoPickup = true;
				list.Add(val3);
			}
			if (num2 > 0)
			{
				for (int i = 0; i < num2; i++)
				{
					GameObject val4 = Object.Instantiate<GameObject>(prefab, val2, Quaternion.identity);
					val4.GetComponent<ItemDrop>().SetStack(maxStackSize);
					val4.GetComponent<ItemDrop>().m_itemData.m_quality = quality;
					val4.GetComponent<ItemDrop>().m_autoPickup = true;
					list.Add(val4);
				}
			}
			return list;
		}
	}

	public static _MAIN Instance;

	public static string dir_root = Application.dataPath + "/";

	public const string PluginGUID = "com.jotunn.sifmod";

	public const string PluginName = "Mod Concasseur";

	public const string PluginVersion = "1.0";

	private readonly Harmony harmony = new Harmony("com.jotunn.sifmod");

	public static NumberFormatInfo floatinfo = new CultureInfo("en-US").NumberFormat;

	public static CustomLocalization Localizations = LocalizationManager.Instance.GetLocalization();

	public bool DEBUG_NOTMYSELF = false;

	public bool IS_ADMIN = false;

	private void Awake()
	{
		_log.warning("AWAKE", "Start of Awake function.");
		Instance = this;
		U.awake();
		PrefabManager.OnVanillaPrefabsAvailable += load_assets;
		ItemManager.OnItemsRegistered += OnItemsRegistered;
		Assembly executingAssembly = Assembly.GetExecutingAssembly();
		harmony.PatchAll(executingAssembly);
		_log.warning("AWAKE", "End of Awake function.");
	}

	private void load_assets()
	{
		//IL_0065: Unknown result type (might be due to invalid IL or missing references)
		_log.warning("ASSETS", "Start of load_assets function.");
		Data.load_assets();
		PrefabManager.OnVanillaPrefabsAvailable -= load_assets;
		((Graphic)((Component)((Component)FejdStartup.instance).transform.Find("Menu").Find("Logo").Find("LOGO")).GetComponent<Image>()).color = new Color(1f, 0f, 1f);
		_log.warning("ASSETS", "End of load_assets function.");
	}

	private void OnItemsRegistered()
	{
		Data.RecipeModification("Iron", "BlackMetal", "HelmetPadded", "ArmorPaddedCuirass", "ArmorPaddedGreaves");
	}
}
namespace mod_data;

public class U
{
	public static void awake()
	{
		Data.data_awake();
	}
}
internal class Data
{
	private static string[] bundle_names = new string[2] { "bundle_fx", "bundle_pa" };

	public static AssetBundle bundle_fx;

	public static AssetBundle bundle_pa;

	public static void data_awake()
	{
		string[] array = bundle_names;
		foreach (string bundlename in array)
		{
			load_bundle(bundlename);
		}
		load_language_pack();
	}

	public static void load_bundle(string bundlename)
	{
		typeof(Data).GetField(bundlename).SetValue(null, AssetUtils.LoadAssetBundle("LFVA-CrusherMod/" + bundlename));
		object? value = typeof(Data).GetField(bundlename).GetValue(null);
		AssetBundle val = (AssetBundle)((value is AssetBundle) ? value : null);
	}

	public static void load_language_pack()
	{
		DirectoryInfo directoryInfo = new DirectoryInfo(Paths.PluginPath + "/LFVA-CrusherMod/");
		FileInfo[] files = directoryInfo.GetFiles("*.json");
		FileInfo[] array = files;
		foreach (FileInfo fileInfo in array)
		{
			if (fileInfo.Name.Contains("DICT"))
			{
				string text = File.ReadAllText(fileInfo.FullName);
				LocalizationManager.Instance.AddJson("French", text);
			}
		}
	}

	public static void load_assets()
	{
		_log.warning("ASSETS", "Loading FX...");
		load_FX_prefabs();
		_log.warning("ASSETS", "Loading Music...");
		load_Extra_Music();
		_log.warning("ASSETS", "Loading x_common...");
		load_x_common();
	}

	public static void load_Extra_Music()
	{
		//IL_0020: Unknown result type (might be due to invalid IL or missing references)
		//IL_0027: Expected O, but got Unknown
		string[] namedmusiclist = FX.namedmusiclist;
		string[] array = namedmusiclist;
		foreach (string text in array)
		{
			AudioClip val = bundle_fx.LoadAsset<AudioClip>(text);
			NamedMusic val2 = new NamedMusic();
			val2.m_name = text;
			val2.m_clips = (AudioClip[])(object)new AudioClip[1] { val };
			val2.m_alwaysFadeout = true;
			val2.m_loop = true;
			val2.m_ambientMusic = true;
			MusicMan.instance.m_music.Add(val2);
		}
	}

	public static void load_FX_prefabs()
	{
		GameObject[] array = bundle_fx.LoadAllAssets<GameObject>();
		GameObject[] array2 = array;
		foreach (GameObject val in array2)
		{
			PrefabManager.Instance.AddPrefab(val);
		}
	}

	public static void load_x_common()
	{
		//IL_0001: Unknown result type (might be due to invalid IL or missing references)
		//IL_0007: Expected O, but got Unknown
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0069: Expected O, but got Unknown
		//IL_0074: Unknown result type (might be due to invalid IL or missing references)
		//IL_007e: Expected O, but got Unknown
		//IL_0089: Unknown result type (might be due to invalid IL or missing references)
		//IL_0093: Expected O, but got Unknown
		//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b5: Expected O, but got Unknown
		PieceConfig val = new PieceConfig();
		string text = "recycler";
		val.Name = "$piece_" + text;
		val.Description = "$piece_description_" + text;
		val.PieceTable = PieceTables.Hammer;
		val.CraftingStation = CraftingStations.None;
		val.Category = PieceCategories.Misc;
		val.AddRequirement(new RequirementConfig("Stone", 50, 0, true));
		val.AddRequirement(new RequirementConfig("Flint", 10, 0, true));
		val.AddRequirement(new RequirementConfig("Copper", 10, 0, true));
		PieceManager.Instance.AddPiece(new CustomPiece(bundle_pa, "piece_" + text, false, val));
		FIX_Piece("piece_" + text);
		Debug.Log((object)"est");
		Debug.Log((object)((Object)(object)PrefabManager.Instance.GetPrefab("piece_recycler") == (Object)null));
		Debug.Log((object)((Object)null == (Object)(object)PrefabManager.Instance.GetPrefab("piece_recycler").transform.Find("Visual")));
		Debug.Log((object)((Object)(object)PrefabManager.Instance.GetPrefab("piece_recycler").transform.Find("Visual").Find("Wheels") == (Object)null));
		((Component)PrefabManager.Instance.GetPrefab("piece_recycler").transform.Find("Visual").Find("Wheels")).gameObject.AddComponent<piece_recycler>();
	}

	public static Piece FIX_Piece(string prefabname)
	{
		//IL_003b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0040: Unknown result type (might be due to invalid IL or missing references)
		//IL_0042: 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_0046: Unknown result type (might be due to invalid IL or missing references)
		//IL_0059: Expected I4, but got Unknown
		//IL_012d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0134: Expected O, but got Unknown
		//IL_017a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0181: Expected O, but got Unknown
		Piece component = PrefabManager.Instance.GetPrefab(prefabname).GetComponent<Piece>();
		WearNTear component2 = ((Component)((Component)component).transform).GetComponent<WearNTear>();
		if ((Object)(object)component2 != (Object)null)
		{
			List<string> list = new List<string>();
			List<string> list2 = new List<string>();
			MaterialType materialType = component2.m_materialType;
			MaterialType val = materialType;
			switch ((int)val)
			{
			case 0:
				list.Add("sfx_build_hammer_wood");
				list.Add("vfx_Place_wood_wall");
				list2.Add("sfx_wood_destroyed");
				list2.Add("vfx_SawDust");
				break;
			case 1:
				list.Add("sfx_build_hammer_stone");
				list.Add("vfx_Place_wood_wall");
				list2.Add("sfx_rock_destroyed");
				list2.Add("vfx_RockDestroyed");
				break;
			case 2:
				list.Add("sfx_build_hammer_metal");
				list.Add("vfx_Place_wood_wall");
				list2.Add("sfx_metal_blocked");
				list2.Add("vfx_HitSparks");
				break;
			}
			component.m_placeEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[list.Count];
			component2.m_destroyedEffect.m_effectPrefabs = (EffectData[])(object)new EffectData[list2.Count];
			for (int i = 0; i < list.Count; i++)
			{
				EffectData val2 = new EffectData();
				val2.m_prefab = PrefabManager.Instance.GetPrefab(list[i]);
				component.m_placeEffect.m_effectPrefabs[i] = val2;
			}
			for (int j = 0; j < list2.Count; j++)
			{
				EffectData val3 = new EffectData();
				val3.m_prefab = PrefabManager.Instance.GetPrefab(list[j]);
				component2.m_destroyedEffect.m_effectPrefabs[j] = val3;
			}
		}
		return component;
	}

	public static void RecipeModification(string previous_ressource_name_big, string new_ressource_name, params string[] collection_to_modify)
	{
		string name = PrefabManager.Instance.GetComp<ItemDrop>(previous_ressource_name_big).m_itemData.m_shared.m_name;
		foreach (string item_name in collection_to_modify)
		{
			Recipe recipe = ObjectDB.instance.GetRecipe(PrefabManager.Instance.GetComp<ItemDrop>(item_name).m_itemData);
			Requirement[] resources = recipe.m_resources;
			foreach (Requirement val in resources)
			{
				if (val.m_resItem.m_itemData.m_shared.m_name == name)
				{
					val.m_resItem = ObjectDB.instance.GetItemPrefab(new_ressource_name).GetComponent<ItemDrop>();
				}
			}
		}
	}
}