Decompiled source of DSPRecipeFinder v0.0.7

DSPRecipeFinder.dll

Decompiled 4 months ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using UnityEngine;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("DSPRecipeFinder")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DSPRecipeFinder")]
[assembly: AssemblyCopyright("Appun")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("BC522B9F-75D9-4E5E-93BD-978B0B3C5E30")]
[assembly: AssemblyFileVersion("0.1.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.1.0.0")]
[module: UnverifiableCode]
namespace DSPRecipeFinder;

[BepInPlugin("Appun.DSP.plugin.RecipeFinder", "DSPRecipeFinder", "0.0.7")]
[BepInProcess("DSPGAME.exe")]
[HarmonyPatch]
public class Main : BaseUnityPlugin
{
	public struct recipeStruct
	{
		public int ResultsCount;

		public int[] Results;

		public int ItemsCount;

		public int[] Items;
	}

	public static GameObject incSepLine2obj;

	public static Dictionary<int, recipeStruct> recipeDictionary = new Dictionary<int, recipeStruct>();

	private static ConfigEntry<bool> ShowAllRecipe;

	public void Start()
	{
		LogManager.Logger = ((BaseUnityPlugin)this).Logger;
		Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null);
		ShowAllRecipe = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ShowAllRecipe", false, "Show all recipes, even those that are not unlocked.");
	}

	[HarmonyPrefix]
	[HarmonyPatch(typeof(UIItemTip), "SetTip")]
	[HarmonyPriority(1)]
	public static bool UIItemTip_SetTip_Prefix(UIItemTip __instance, int itemId, int corner, Vector2 offset, Transform parent, int itemCount, int incCount, ItemTipType type, bool cannothand = false, bool cannotInc = false, bool isRecipe = false, bool isSign = false)
	{
		//IL_0796: Unknown result type (might be due to invalid IL or missing references)
		//IL_07a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0275: Unknown result type (might be due to invalid IL or missing references)
		//IL_027c: Expected O, but got Unknown
		//IL_0821: Unknown result type (might be due to invalid IL or missing references)
		//IL_082b: Unknown result type (might be due to invalid IL or missing references)
		//IL_09f5: Unknown result type (might be due to invalid IL or missing references)
		//IL_09f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_09f8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a00: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a0e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a1c: Unknown result type (might be due to invalid IL or missing references)
		//IL_032e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0333: Unknown result type (might be due to invalid IL or missing references)
		//IL_034a: Unknown result type (might be due to invalid IL or missing references)
		//IL_034f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a96: Unknown result type (might be due to invalid IL or missing references)
		//IL_0aba: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a4e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0a72: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b0a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ba1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bcf: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bf0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c09: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d48: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d4b: Invalid comparison between Unknown and I4
		//IL_10a9: Unknown result type (might be due to invalid IL or missing references)
		//IL_10b4: Unknown result type (might be due to invalid IL or missing references)
		//IL_10b7: Invalid comparison between Unknown and I4
		//IL_0e15: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e55: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e6b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0dea: Unknown result type (might be due to invalid IL or missing references)
		//IL_0df0: Invalid comparison between Unknown and I4
		//IL_0da9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0daf: Invalid comparison between Unknown and I4
		//IL_2097: Unknown result type (might be due to invalid IL or missing references)
		//IL_20e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_10f3: Unknown result type (might be due to invalid IL or missing references)
		//IL_1102: Unknown result type (might be due to invalid IL or missing references)
		//IL_114d: Unknown result type (might be due to invalid IL or missing references)
		//IL_1145: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fc5: Unknown result type (might be due to invalid IL or missing references)
		//IL_0fdb: Unknown result type (might be due to invalid IL or missing references)
		//IL_1fda: Unknown result type (might be due to invalid IL or missing references)
		//IL_1f9d: Unknown result type (might be due to invalid IL or missing references)
		//IL_1a7f: Unknown result type (might be due to invalid IL or missing references)
		//IL_1a95: Unknown result type (might be due to invalid IL or missing references)
		//IL_11c5: Unknown result type (might be due to invalid IL or missing references)
		//IL_11db: Unknown result type (might be due to invalid IL or missing references)
		//IL_21f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_221d: Unknown result type (might be due to invalid IL or missing references)
		//IL_2222: Unknown result type (might be due to invalid IL or missing references)
		//IL_2248: Unknown result type (might be due to invalid IL or missing references)
		//IL_225b: Unknown result type (might be due to invalid IL or missing references)
		//IL_226e: Unknown result type (might be due to invalid IL or missing references)
		//IL_2281: Unknown result type (might be due to invalid IL or missing references)
		//IL_2294: Unknown result type (might be due to invalid IL or missing references)
		//IL_2299: Unknown result type (might be due to invalid IL or missing references)
		//IL_22bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_22c2: Unknown result type (might be due to invalid IL or missing references)
		//IL_2370: Unknown result type (might be due to invalid IL or missing references)
		//IL_2375: Unknown result type (might be due to invalid IL or missing references)
		//IL_2377: Unknown result type (might be due to invalid IL or missing references)
		//IL_238e: Unknown result type (might be due to invalid IL or missing references)
		//IL_23a0: Unknown result type (might be due to invalid IL or missing references)
		//IL_23ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_23cc: Unknown result type (might be due to invalid IL or missing references)
		//IL_1b74: Unknown result type (might be due to invalid IL or missing references)
		//IL_1b8a: Unknown result type (might be due to invalid IL or missing references)
		//IL_1c5a: Unknown result type (might be due to invalid IL or missing references)
		//IL_1c70: Unknown result type (might be due to invalid IL or missing references)
		//IL_1d70: Unknown result type (might be due to invalid IL or missing references)
		//IL_1d86: Unknown result type (might be due to invalid IL or missing references)
		//IL_1e2c: Unknown result type (might be due to invalid IL or missing references)
		//IL_1e42: Unknown result type (might be due to invalid IL or missing references)
		//IL_133d: Unknown result type (might be due to invalid IL or missing references)
		//IL_1353: Unknown result type (might be due to invalid IL or missing references)
		//IL_1505: Unknown result type (might be due to invalid IL or missing references)
		//IL_151b: Unknown result type (might be due to invalid IL or missing references)
		//IL_15fa: Unknown result type (might be due to invalid IL or missing references)
		//IL_1610: Unknown result type (might be due to invalid IL or missing references)
		//IL_16e0: Unknown result type (might be due to invalid IL or missing references)
		//IL_16f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_17f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_180c: Unknown result type (might be due to invalid IL or missing references)
		//IL_18e5: Unknown result type (might be due to invalid IL or missing references)
		//IL_18fb: Unknown result type (might be due to invalid IL or missing references)
		//IL_19b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_19cd: Unknown result type (might be due to invalid IL or missing references)
		__instance.showingItemId = itemId;
		__instance.cannotHandmake = cannothand;
		int num;
		int num2;
		if (itemId > 0)
		{
			num = itemId;
			num2 = 0;
		}
		else if (itemId < 0)
		{
			num = 0;
			num2 = -itemId;
		}
		else
		{
			num = 0;
			num2 = 0;
		}
		((Transform)__instance.trans).SetParent(parent, true);
		int num3 = ((itemCount == 0) ? incCount : (incCount / itemCount));
		ItemProto val = ((ProtoSet<ItemProto>)(object)LDB.items).Select(num);
		RecipeProto val2 = ((ProtoSet<RecipeProto>)(object)LDB.recipes).Select(num2);
		if (val2 != null)
		{
			if (UIItemTip.tmp_recipeList == null)
			{
				UIItemTip.tmp_recipeList = new List<RecipeProto>();
				UIItemTip.tmp_recipeList.Add(null);
			}
			UIItemTip.tmp_recipeList[0] = val2;
		}
		string text = ((val != null) ? ((Proto)val).name : ((val2 == null) ? "Unknown item" : (Localization.Translate("括号公式") + ((Proto)val2).name)));
		string text2 = ((val != null) ? val.typeString : ((val2 == null) ? "Unknown type" : val2.madeFromString));
		string text3 = ((val != null) ? val.description : ((val2 == null) ? "" : val2.description));
		Sprite sprite = ((val != null) ? val.iconSprite : ((val2 == null) ? null : val2.iconSprite));
		List<RecipeProto> list = ((val != null) ? val.recipes : ((val2 == null) ? null : UIItemTip.tmp_recipeList));
		List<RecipeProto> list2 = new List<RecipeProto>();
		if (list != null)
		{
			foreach (RecipeProto item in list)
			{
				list2.Add(item);
			}
		}
		if (recipeDictionary.ContainsKey(itemId))
		{
			recipeStruct recipeStruct = recipeDictionary[itemId];
			List<int> list3 = new List<int>();
			for (int i = 0; i < recipeStruct.ItemsCount; i++)
			{
				RecipeProto val3 = ((ProtoSet<RecipeProto>)(object)LDB.recipes).Select(recipeStruct.Items[i]);
				if (ShowAllRecipe.Value)
				{
					list3.Add(recipeStruct.Items[i]);
				}
				else if (GameMain.history.recipeUnlocked.Contains(((Proto)val3).ID))
				{
					list3.Add(recipeStruct.Items[i]);
				}
			}
			for (int j = 0; j < list3.Count; j++)
			{
				RecipeProto val4 = ((ProtoSet<RecipeProto>)(object)LDB.recipes).Select(list3[j]);
				RecipeProto val5 = new RecipeProto();
				val5.ResultCounts = val4.ResultCounts;
				val5.Results = val4.Results;
				val5.ItemCounts = new int[val4.ItemCounts.Length];
				for (int k = 0; k < val4.ItemCounts.Length; k++)
				{
					val5.ItemCounts[k] = val4.ItemCounts[k];
				}
				val5.Items = new int[val4.Items.Length];
				for (int l = 0; l < val4.Items.Length; l++)
				{
					val5.Items[l] = val4.Items[l];
				}
				val5.Type = val4.Type;
				val5.TimeSpend = val4.TimeSpend;
				val5.Type = val4.Type;
				for (int m = 0; m < val5.Items.Length; m++)
				{
					if (val5.Items[m] == itemId)
					{
						val5.Items[0] = val4.Items[m];
						val5.Items[m] = val4.Items[0];
						val5.ItemCounts[0] = val4.ItemCounts[m];
						val5.ItemCounts[m] = val4.ItemCounts[0];
						break;
					}
				}
				list2.Add(val5);
			}
		}
		int num4 = list2.Count;
		int num5 = 0;
		bool flag = false;
		if (list2.Count > 9)
		{
			num4 = (int)Math.Ceiling((double)list2.Count / 2.0);
			flag = true;
			num5 = list2.Count - num4;
		}
		int num6 = 0;
		int num7 = 0;
		string text4 = "";
		string text5 = "";
		int num8 = 0;
		StringBuilder stringBuilder = new StringBuilder("         ", 12);
		if (val != null)
		{
			if (val.HeatValue > 0)
			{
				text2 += Localization.Translate("顿号燃料");
			}
			bool flag2 = false;
			num7 = val.DescFields.Length;
			for (int n = 0; n < num7; n++)
			{
				if (val.DescFields[n] == 40)
				{
					flag2 = true;
					continue;
				}
				text4 = text4 + val.GetPropName(n) + "\r\n";
				text5 = text5 + val.GetPropValue(n, stringBuilder, num3) + "\r\n";
			}
			if (flag2)
			{
				num7--;
			}
			if (val.maincraft != null && !string.IsNullOrEmpty(val.produceFrom))
			{
				text4 = text4 + Localization.Translate("制造于") + "\r\n";
				text5 = text5 + val.produceFrom + "\r\n";
				num7++;
			}
			if (__instance.cannotHandmake)
			{
				text4 += "\r\n";
				text5 = text5 + Localization.Translate("不能手动制造") + "\r\n";
				num7++;
			}
			else if (val.handcraft != null)
			{
				text4 = text4 + Localization.Translate("手动制造") + "\r\n";
				text5 = text5 + Localization.Translate("合成面板") + "\r\n";
				num7++;
			}
			if (!GameMain.history.ItemUnlocked(num))
			{
				if (val.preTech != null)
				{
					__instance.preTechText.text = Localization.Translate("需要科技") + "\r\n" + ((Proto)val.preTech).name;
					num8 = 2;
				}
				else if (val.missingTech)
				{
					__instance.preTechText.text = Localization.Translate("该版本尚未加入");
					num8 = 1;
				}
			}
			if (num8 == 0)
			{
				__instance.preTechText.text = "";
			}
		}
		else if (val2 != null)
		{
			num7 = 0;
			num8 = 0;
			__instance.preTechText.text = "";
			if (__instance.cannotHandmake)
			{
				text4 += "\r\n";
				text5 = text5 + Localization.Translate("不能手动制造") + "\r\n";
				num7++;
			}
		}
		__instance.nameText.text = text;
		__instance.categoryText.text = text2;
		__instance.descText.text = text3;
		__instance.propsText.text = text4;
		__instance.valuesText.text = text5;
		__instance.iconImage.sprite = sprite;
		int num9 = (int)__instance.preTechText.preferredWidth + 126;
		int num10 = (int)__instance.valuesText.preferredWidth;
		int num11 = Mathf.Max(0, num10 - 166);
		((Graphic)__instance.valuesText).rectTransform.sizeDelta = new Vector2((float)(166 + num11), ((Graphic)__instance.valuesText).rectTransform.sizeDelta.y);
		num10 += 230;
		int num12 = 290;
		if (num12 < num9)
		{
			num12 = num9;
		}
		if (num12 < num10)
		{
			num12 = num10;
		}
		int num13 = num12 - 290;
		if (num13 < 0)
		{
			num13 = 0;
		}
		((Graphic)__instance.preTechText).rectTransform.sizeDelta = new Vector2(__instance.preTechText.preferredWidth + 1f, ((Graphic)__instance.preTechText).rectTransform.sizeDelta.y);
		Vector2 val6 = default(Vector2);
		Vector2 pivot = default(Vector2);
		switch (corner)
		{
		case 1:
			((Vector2)(ref val6))..ctor(0f, 0f);
			((Vector2)(ref pivot))..ctor(1f, 1f);
			break;
		case 2:
			((Vector2)(ref val6))..ctor(0.5f, 0f);
			((Vector2)(ref pivot))..ctor(0.5f, 1f);
			break;
		case 3:
			((Vector2)(ref val6))..ctor(1f, 0f);
			((Vector2)(ref pivot))..ctor(0f, 1f);
			break;
		case 4:
			((Vector2)(ref val6))..ctor(0f, 0.5f);
			((Vector2)(ref pivot))..ctor(1f, 0.5f);
			break;
		case 5:
			((Vector2)(ref val6))..ctor(0.5f, 0.5f);
			((Vector2)(ref pivot))..ctor(0.5f, 0.5f);
			break;
		case 6:
			((Vector2)(ref val6))..ctor(1f, 0.5f);
			((Vector2)(ref pivot))..ctor(0f, 0.5f);
			break;
		case 7:
			((Vector2)(ref val6))..ctor(0f, 1f);
			((Vector2)(ref pivot))..ctor(0f, 1f);
			break;
		case 8:
			((Vector2)(ref val6))..ctor(0.5f, 1f);
			((Vector2)(ref pivot))..ctor(0.5f, 0f);
			break;
		case 9:
			((Vector2)(ref val6))..ctor(1f, 1f);
			((Vector2)(ref pivot))..ctor(0f, 0f);
			break;
		default:
			((Vector2)(ref val6))..ctor(0.5f, 0.5f);
			((Vector2)(ref pivot))..ctor(0.5f, 0.5f);
			break;
		}
		RectTransform trans = __instance.trans;
		Vector2 anchorMax = (__instance.trans.anchorMin = val6);
		trans.anchorMax = anchorMax;
		__instance.trans.pivot = pivot;
		__instance.trans.anchoredPosition = offset;
		bool flag3 = num7 + num8 <= 2;
		if (flag3)
		{
			((Graphic)__instance.descText).rectTransform.anchoredPosition = new Vector2(110f, -47f);
			((Graphic)__instance.descText).rectTransform.sizeDelta = new Vector2((float)(166 + num13), 16f);
		}
		else
		{
			((Graphic)__instance.descText).rectTransform.anchoredPosition = new Vector2(12f, -47f);
			((Graphic)__instance.descText).rectTransform.sizeDelta = new Vector2((float)(268 + num13), 16f);
		}
		int num14 = ((!string.IsNullOrEmpty(text3)) ? ((int)__instance.descText.preferredHeight) : 0);
		int num15 = 61 + num14;
		int num16 = (flag3 ? (-50) : (-num15 + 11));
		((Graphic)__instance.iconImage).rectTransform.anchoredPosition = new Vector2(15f, (float)num16);
		int num17 = num16 - 80;
		int num18 = 17 * num7 + num15;
		int num19 = ((num8 != 0) ? (num8 * 17 + 6) : 0);
		((Component)__instance.preTechText).gameObject.SetActive(num8 > 0);
		bool flag4 = false;
		int num20 = 0;
		int num21 = -(num18 + num19);
		if (num21 > num17 - 8)
		{
			num20 = num21 - (num17 - 8);
			num21 = num17 - 8;
			flag4 = true;
		}
		num20 /= 2;
		((Graphic)__instance.propsText).rectTransform.anchoredPosition = new Vector2(110f, 0f - (float)num15 + 11f - (float)num20);
		((Graphic)__instance.valuesText).rectTransform.anchoredPosition = new Vector2((float)(110 + num13 - num11), 0f - (float)num15 + 11f - (float)num20);
		((Graphic)__instance.preTechText).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.preTechText).rectTransform.anchoredPosition.x, 0f - (float)num18 + 6f - (float)num20);
		int num22 = 0;
		int num23 = 0;
		((Component)__instance.incSepLine).gameObject.SetActive(false);
		((Component)__instance.incPointText).gameObject.SetActive(false);
		((Component)__instance.incNameText1).gameObject.SetActive(false);
		((Component)__instance.incNameText2).gameObject.SetActive(false);
		((Component)__instance.incNameText3).gameObject.SetActive(false);
		for (int num24 = 0; num24 < __instance.incDescText1.Length; num24++)
		{
			((Component)__instance.incDescText1[num24]).gameObject.SetActive(false);
			((Component)__instance.incDescText2[num24]).gameObject.SetActive(false);
			((Component)__instance.incDescText3[num24]).gameObject.SetActive(false);
		}
		for (int num25 = 0; num25 < __instance.incExtraDescText.Length; num25++)
		{
			((Component)__instance.incExtraDescText[num25]).gameObject.SetActive(false);
		}
		((Behaviour)__instance.itemIncs[0]).enabled = false;
		((Behaviour)__instance.itemIncs[1]).enabled = false;
		((Behaviour)__instance.itemIncs[2]).enabled = false;
		if (GameMain.history.TechUnlocked(1151) && !isSign && (int)type != 2)
		{
			if (isRecipe)
			{
				bool flag5 = true;
				bool flag6 = false;
				bool flag7 = false;
				if (val != null)
				{
					for (int num26 = 0; num26 < val.recipes.Count; num26++)
					{
						flag5 &= val.recipes[num26].productive;
						flag6 |= (int)val.recipes[num26].Type == 8;
					}
				}
				else if (val2 != null)
				{
					flag5 = val2.productive;
					flag7 = (int)val2.Type == 8;
				}
				((Component)__instance.incSepLine).gameObject.SetActive(true);
				__instance.incSepLine.anchoredPosition = new Vector2(12f, (float)num21);
				num23 = 0;
				num22 = 40;
				((Component)__instance.incExtraDescText[0]).gameObject.SetActive(true);
				((Graphic)__instance.incExtraDescText[0]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[0]).rectTransform.anchoredPosition.x, (float)(num21 - 10 - num23 * 17));
				__instance.incExtraDescText[0].text = "+\u00a0" + (flag5 ? Localization.Translate("增产公式描述1") : Localization.Translate("增产公式描述2"));
				num23 += Mathf.FloorToInt(__instance.incExtraDescText[0].preferredHeight / 25f);
				num22 += 17 * Mathf.FloorToInt(__instance.incExtraDescText[0].preferredHeight / 25f);
				if (flag7)
				{
					__instance.incExtraDescText[0].text = "+\u00a0" + Localization.Translate("增产公式描述3");
				}
				if (flag6)
				{
					num23 -= Mathf.FloorToInt(__instance.incExtraDescText[0].preferredHeight / 25f);
					num22 -= 17 * Mathf.FloorToInt(__instance.incExtraDescText[0].preferredHeight / 25f);
					num23 += Mathf.CeilToInt(__instance.incExtraDescText[0].preferredHeight / 25f);
					num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[0].preferredHeight / 25f);
					((Component)__instance.incExtraDescText[1]).gameObject.SetActive(true);
					((Graphic)__instance.incExtraDescText[1]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[1]).rectTransform.anchoredPosition.x, (float)(num21 - 10 - num23 * 17));
					__instance.incExtraDescText[1].text = "+\u00a0" + Localization.Translate("增产公式描述3");
					num23 += Mathf.FloorToInt(__instance.incExtraDescText[1].preferredHeight / 25f);
					num22 += 17 * Mathf.FloorToInt(__instance.incExtraDescText[1].preferredHeight / 25f);
				}
			}
			else if (val != null)
			{
				num22 = 40;
				num23 = 1;
				int num27 = 0;
				if (UIItemTip.tmp_incDic == null)
				{
					UIItemTip.tmp_incDic = new Dictionary<int, int>();
				}
				UIItemTip.tmp_incDic.Clear();
				((Component)__instance.incSepLine).gameObject.SetActive(true);
				__instance.incSepLine.anchoredPosition = new Vector2(12f, (float)num21);
				if ((int)type != 3 || incCount > 0)
				{
					((Component)__instance.incPointText).gameObject.SetActive(true);
					((Graphic)__instance.incPointText).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incPointText).rectTransform.anchoredPosition.x, (float)(num21 - 8));
					__instance.incPointText.text = Localization.Translate("增产点数共计") + incCount + Localization.Translate("空格点");
					((Graphic)__instance.incPointText).color = ((incCount > 0) ? __instance.containIncColor : __instance.noIncColor);
				}
				else
				{
					num22 = 23;
					num23 = 0;
				}
				if (incCount > 0)
				{
					num22 += 2;
					((Component)__instance.incNameText1).gameObject.SetActive(true);
					((Component)__instance.incNameText2).gameObject.SetActive(true);
					((Component)__instance.incNameText3).gameObject.SetActive(true);
					((Graphic)__instance.incNameText1).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incNameText1).rectTransform.anchoredPosition.x, (float)(num21 - 10 - num23 * 17));
					num22 += 17;
					num23++;
					int num28 = Cargo.fastIncArrowTable[(num3 > 10) ? 10 : num3];
					((Behaviour)__instance.itemIncs[0]).enabled = num28 == 1;
					((Behaviour)__instance.itemIncs[1]).enabled = num28 == 2;
					((Behaviour)__instance.itemIncs[2]).enabled = num28 == 3;
					int num29 = incCount - num3 * itemCount;
					int num30 = num3 + 1;
					int num31 = itemCount - num29;
					num3 = ((num3 > 10) ? 10 : num3);
					num30 = ((num30 > 10) ? 10 : num30);
					if (num31 > 0)
					{
						UIItemTip.tmp_incDic[num3] = num31;
					}
					if (num29 > 0)
					{
						UIItemTip.tmp_incDic[num30] = num29;
					}
					for (int num32 = 0; num32 < UIItemTip.tmp_incDic.Count; num32++)
					{
						((Component)__instance.incDescText1[num32]).gameObject.SetActive(UIItemTip.tmp_incDic.Count >= num32 + 1);
						((Component)__instance.incDescText2[num32]).gameObject.SetActive(UIItemTip.tmp_incDic.Count >= num32 + 1);
						((Component)__instance.incDescText3[num32]).gameObject.SetActive(UIItemTip.tmp_incDic.Count >= num32 + 1);
						((Graphic)__instance.incDescText1[num32]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incDescText1[num32]).rectTransform.anchoredPosition.x, (float)(num21 - 10 - num23 * 17));
						num23++;
						if (num32 >= 1)
						{
							break;
						}
					}
					int num33 = 0;
					foreach (KeyValuePair<int, int> item2 in UIItemTip.tmp_incDic)
					{
						__instance.incDescText1[num33].text = item2.Value + Localization.Translate("个物品");
						__instance.incDescText2[num33].text = (val.Productive ? "<color=#61D8FFc0>+" : "") + (val.Productive ? (((double)Cargo.incTable[item2.Key] * 0.1).ToString("0.#") + " %</color>") : "— ");
						__instance.incDescText3[num33].text = "<color=#FD965ECC>+" + ((double)Cargo.accTable[item2.Key] * 0.1).ToString("0.#") + " %</color>";
						num33++;
						if (num33 >= 2)
						{
							break;
						}
					}
					num22 += 17 * UIItemTip.tmp_incDic.Count + 2;
					((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
					((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
					__instance.incExtraDescText[num27].text = "+\u00a0" + (val.Productive ? Localization.Translate("增产剂选择描述") : Localization.Translate("增产剂加速描述"));
					num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
					num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
					num27++;
					if (val.HeatValue > 0 && ((Proto)val).ID != 2207)
					{
						((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
						((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
						__instance.incExtraDescText[num27].text = "+\u00a0" + (val.Productive ? Localization.Translate("增产剂燃料描述2") : Localization.Translate("增产剂燃料描述1"));
						num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num27++;
					}
					if (((Proto)val).ID == 1209)
					{
						((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
						((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
						__instance.incExtraDescText[num27].text = "+\u00a0" + Localization.Translate("增产剂透镜描述");
						num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num27++;
					}
					if (((Proto)val).ID == 6001 || ((Proto)val).ID == 6002 || ((Proto)val).ID == 6003 || ((Proto)val).ID == 6004 || ((Proto)val).ID == 6005 || ((Proto)val).ID == 6006)
					{
						((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
						((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
						__instance.incExtraDescText[num27].text = "+\u00a0" + Localization.Translate("增产剂矩阵描述");
						num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num27++;
					}
					if (((Proto)val).ID == 1141 || ((Proto)val).ID == 1142 || ((Proto)val).ID == 1143)
					{
						((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
						((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
						__instance.incExtraDescText[num27].text = "+\u00a0" + Localization.Translate("增产剂套娃描述");
						num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num27++;
					}
					if (((Proto)val).ID == 1131)
					{
						((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
						((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
						__instance.incExtraDescText[num27].text = "+\u00a0" + Localization.Translate("增产剂地基描述");
						num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num27++;
					}
				}
				else
				{
					num22 += 2;
					((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
					((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 10 - num23 * 17));
					__instance.incExtraDescText[num27].text = "+\u00a0" + (val.Productive ? Localization.Translate("无增产点描述1") : Localization.Translate("无增产点描述2"));
					num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
					num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
					num27++;
					if (val.HeatValue > 0 && ((Proto)val).ID != 2207)
					{
						((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
						((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
						__instance.incExtraDescText[num27].text = "+\u00a0" + (val.Productive ? Localization.Translate("增产剂燃料描述2") : Localization.Translate("增产剂燃料描述1"));
						num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num27++;
					}
					if (((Proto)val).ID == 1209)
					{
						((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
						((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
						__instance.incExtraDescText[num27].text = "+\u00a0" + Localization.Translate("增产剂透镜描述");
						num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num27++;
					}
					if (((Proto)val).ID == 6001 || ((Proto)val).ID == 6002 || ((Proto)val).ID == 6003 || ((Proto)val).ID == 6004 || ((Proto)val).ID == 6005 || ((Proto)val).ID == 6006)
					{
						((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
						((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
						__instance.incExtraDescText[num27].text = "+\u00a0" + Localization.Translate("增产剂矩阵描述");
						num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
						num27++;
					}
				}
				((Component)__instance.incExtraDescText[num27]).gameObject.SetActive(true);
				((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition = new Vector2(((Graphic)__instance.incExtraDescText[num27]).rectTransform.anchoredPosition.x, (float)(num21 - 12 - num23 * 17));
				__instance.incExtraDescText[num27].text = Localization.Translate("增产剂通用提示");
				num23 += Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
				num22 += 17 * Mathf.CeilToInt(__instance.incExtraDescText[num27].preferredHeight / 25f);
				num27++;
			}
		}
		int num34 = 0;
		int num35 = 0;
		if (list2 != null && list2.Count > 0)
		{
			if (__instance.recipeEntryArr == null)
			{
				__instance.recipeEntryArr = (UIRecipeEntry[])(object)new UIRecipeEntry[64];
			}
			__instance.recipeEntryArr[0] = __instance.recipeEntry;
			num35 = list2[0].Results.Length + list2[0].Items.Length + 1;
			for (int num36 = 1; num36 < list2.Count; num36++)
			{
				if ((Object)(object)__instance.recipeEntryArr[num36] == (Object)null)
				{
					__instance.recipeEntryArr[num36] = Object.Instantiate<UIRecipeEntry>(__instance.recipeEntry, ((Component)__instance).transform);
				}
				__instance.recipeEntryArr[num36].SetRecipe(list2[num36]);
				if (num36 < num4)
				{
					__instance.recipeEntryArr[num36].rectTrans.anchoredPosition = new Vector2(12f, (float)(num21 - num36 * 40 - 8 - num22));
				}
				else
				{
					__instance.recipeEntryArr[num36].rectTrans.anchoredPosition = new Vector2((float)(num6 * 40 + 30) + 12f, (float)(num21 - (num36 - num4) * 40 - 8 - num22));
				}
				((Component)__instance.recipeEntryArr[num36]).gameObject.SetActive(true);
				int num37 = list2[num36].Results.Length + list2[num36].Items.Length + 1;
				if (num35 < num37)
				{
					num35 = num37;
				}
				if (flag && num36 == num4 - 1)
				{
					num6 = num35;
					num35 = 0;
				}
			}
			__instance.recipeEntry.SetRecipe(list2[0]);
			__instance.recipeEntry.rectTrans.anchoredPosition = new Vector2(12f, (float)(num21 - 8 - num22));
			((Component)__instance.recipeEntry).gameObject.SetActive(true);
			num34 = list2.Count;
			((Component)__instance.sepLine).gameObject.SetActive(true);
			__instance.sepLine.anchoredPosition = new Vector2(12f, (float)(num21 - num22));
		}
		else
		{
			((Component)__instance.sepLine).gameObject.SetActive(false);
		}
		int num38 = 290;
		if (num35 >= 7)
		{
			num38 = num35 * 40 + 30;
		}
		num38 += num6 * 40 + 20;
		if (__instance.recipeEntryArr != null)
		{
			for (int num39 = num34; num39 < __instance.recipeEntryArr.Length; num39++)
			{
				if ((Object)(object)__instance.recipeEntryArr[num39] != (Object)null)
				{
					((Component)__instance.recipeEntryArr[num39]).gameObject.SetActive(false);
				}
			}
		}
		int num40 = -num21 + ((num34 != 0) ? ((num34 - num5) * 40 + 20) : (flag4 ? 4 : 4));
		num40 /= 2;
		num40 *= 2;
		if (num38 < num12)
		{
			num38 = num12;
		}
		num38 /= 2;
		num38 *= 2;
		num22 /= 2;
		num22 *= 2;
		__instance.trans.sizeDelta = new Vector2((float)num38, (float)(num40 + num22));
		((Transform)__instance.trans).SetParent((Transform)(object)UIRoot.instance.itemTipTransform, true);
		Rect rect = UIRoot.instance.itemTipTransform.rect;
		float num41 = Mathf.RoundToInt(((Rect)(ref rect)).width);
		float num42 = Mathf.RoundToInt(((Rect)(ref rect)).height);
		float num43 = __instance.trans.anchorMin.x * num41 + __instance.trans.anchoredPosition.x;
		float num44 = __instance.trans.anchorMin.y * num42 + __instance.trans.anchoredPosition.y;
		Rect rect2 = __instance.trans.rect;
		((Rect)(ref rect2)).x = ((Rect)(ref rect2)).x + num43;
		((Rect)(ref rect2)).y = ((Rect)(ref rect2)).y + num44;
		Vector2 zero = Vector2.zero;
		if (((Rect)(ref rect2)).xMin < 0f)
		{
			zero.x -= ((Rect)(ref rect2)).xMin;
		}
		if (((Rect)(ref rect2)).yMin < 0f)
		{
			zero.y -= ((Rect)(ref rect2)).yMin;
		}
		if (((Rect)(ref rect2)).xMax > num41)
		{
			zero.x -= ((Rect)(ref rect2)).xMax - num41;
		}
		if (((Rect)(ref rect2)).yMax > num42)
		{
			zero.y -= ((Rect)(ref rect2)).yMax - num42;
		}
		__instance.trans.anchoredPosition = __instance.trans.anchoredPosition + zero;
		__instance.trans.anchoredPosition = new Vector2((float)(int)__instance.trans.anchoredPosition.x, (float)(int)__instance.trans.anchoredPosition.y);
		((Transform)__instance.trans).localScale = new Vector3(1f, 1f, 1f);
		return false;
	}

	[HarmonyPostfix]
	[HarmonyPatch(typeof(VFPreload), "InvokeOnLoadWorkEnded")]
	public static void VFPreload_InvokeOnLoadWorkEnded_Patch()
	{
		if (recipeDictionary.Count != 0)
		{
			return;
		}
		for (int i = 0; i < ((ProtoTable)LDB.items).Length; i++)
		{
			ItemProto val = ((ProtoSet<ItemProto>)(object)LDB.items).dataArray[i];
			recipeStruct value = default(recipeStruct);
			value.ResultsCount = 0;
			value.ItemsCount = 0;
			for (int j = 0; j < ((ProtoTable)LDB.recipes).Length; j++)
			{
				RecipeProto val2 = ((ProtoSet<RecipeProto>)(object)LDB.recipes).dataArray[j];
				for (int k = 0; k < val2.Results.Length; k++)
				{
					if (val2.Results[k] == ((Proto)val).ID)
					{
						value.ResultsCount++;
						Array.Resize(ref value.Results, value.ResultsCount);
						value.Results[value.ResultsCount - 1] = ((Proto)val2).ID;
					}
				}
				for (int l = 0; l < val2.Items.Length; l++)
				{
					if (val2.Items[l] == ((Proto)val).ID)
					{
						value.ItemsCount++;
						Array.Resize(ref value.Items, value.ItemsCount);
						value.Items[value.ItemsCount - 1] = ((Proto)val2).ID;
					}
				}
			}
			recipeDictionary.Add(((Proto)val).ID, value);
		}
		LogManager.Logger.LogInfo((object)"Recipe Dictionary created");
	}
}
public class LogManager
{
	public static ManualLogSource Logger;
}