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 BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using BuildToolOpt;
using CommonAPI;
using CommonAPI.Systems;
using CommonAPI.Systems.ModLocalization;
using HarmonyLib;
using RebindBuildBar;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;
using xiaoye97;
using xiaoye97.Patches;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("BuildMenuTool")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("微软中国")]
[assembly: AssemblyProduct("BuildMenuTool")]
[assembly: AssemblyCopyright("Copyright © 微软中国 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("e96ebd1f-e9ee-4d2b-ae96-e464734bac73")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace BuildBarTool;
internal class BBTProtos
{
public static void AddLocalizationProtos()
{
LocalizationModule.RegisterTranslation("gmLockedItemText", "Locked ", "锁定", "Locked ");
LocalizationModule.RegisterTranslation("切换快捷键", "CapsLock\n↑ Hotkey Row ↓", "CapsLock\n↑快捷键切换↓", "CapsLock\n↑ Hotkey Row ↓");
}
}
public static class BuildBarTool
{
public static bool SetBuildBar(int category, int index, int itemId, bool isTopRow)
{
if (category >= 1 && category <= 12)
{
if (index >= 1 && index <= 10)
{
if (!isTopRow)
{
LDBTool.SetBuildBar(category, index, itemId);
}
else
{
if (!isTopRow)
{
BuildBarToolPlugin.logger.LogWarning((object)"Bind Build Bar Fail. tier must be 1 or 2.");
return false;
}
if (BuildBarToolPlugin.protoIds[category, index] > 0)
{
BuildBarToolPlugin.logger.LogWarning((object)$"Bind Build Bar Fail (item ID:{itemId}). Build bar [{category}, tier2, {index}] is already bound with another item ID:{BuildBarToolPlugin.protoIds[category, index]}.");
return false;
}
BuildBarToolPlugin.protoIds[category, index] = itemId;
}
return true;
}
BuildBarToolPlugin.logger.LogWarning((object)"Bind Build Bar Fail. index must be between 1 and 10.");
return false;
}
BuildBarToolPlugin.logger.LogWarning((object)"Bind Build Bar Fail. category must be between 1 and 12.");
return false;
}
public static void SetBuildBar(this ItemProto proto, int buildIndex, bool isTopRow)
{
SetBuildBar(buildIndex / 100, buildIndex % 100, ((Proto)proto).ID, isTopRow);
if (isTopRow)
{
proto.BuildIndex = 0;
}
}
public static void SetBuildBar(this ItemProto proto, int category, int index, bool isTopRow)
{
SetBuildBar(category, index, ((Proto)proto).ID, isTopRow);
if (isTopRow)
{
proto.BuildIndex = 0;
}
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[CommonAPISubmoduleDependency(new string[] { "ProtoRegistry", "TabSystem", "LocalizationModule" })]
[BepInPlugin("Gnimaerd.DSP.plugin.BuildBarTool", "BuildBarTool", "1.0.1")]
public class BuildBarToolPlugin : BaseUnityPlugin
{
public const string GUID = "Gnimaerd.DSP.plugin.BuildBarTool";
public const string NAME = "BuildBarTool";
public const string VERSION = "1.0.1";
internal static bool developerMode = true;
public static ConfigFile customBarBind = new ConfigFile(Paths.ConfigPath + "/RebindBuildBar/CustomBarBindTier2.cfg", true);
internal static ManualLogSource logger;
public static List<GameObject> childButtonObjs = new List<GameObject>();
public static List<UIButton> childButtons = new List<UIButton>();
public static List<Image> childIcons = new List<Image>();
public static List<Text> childNumTexts = new List<Text>();
public static List<Text> childTips = new List<Text>();
public static int[,] protoIds = new int[16, 13];
public static ItemProto[,] protos = new ItemProto[16, 13];
public static bool[] extendedCategories = new bool[16];
public static List<CanvasGroup> childCanvasGroups = new List<CanvasGroup>();
public static List<Text> childHotkeyText = new List<Text>();
public static List<Text> oriChildHotkeyText = new List<Text>();
public static GameObject switchHotkeyRowText;
public static int hotkeyActivateRow = 0;
public static float secondLevelAlpha = 1f;
public static int dblClickIndex = 0;
public static double dblClickTime = 0.0;
public static bool forceShowAllButtons = false;
public static bool GenesisCompatibility = false;
public static bool RebindBuildBarCompatibility = false;
public static Color textColor = new Color(0.3821f, 0.8455f, 1f, 0.7843f);
public static Color lockedTextColor = new Color(0.8f, 0f, 0f, 0.5f);
public static Color normalColor = new Color(0.588f, 0.588f, 0.588f, 0.7f);
public static Color disabledColor = new Color(0.2f, 0.15f, 0.15f, 0.7f);
public static Color disabledColor2 = new Color(0.316f, 0.281f, 0.281f, 0.7f);
public static string lockedText = "";
public void Awake()
{
BBTProtos.AddLocalizationProtos();
logger = ((BaseUnityPlugin)this).Logger;
InitStaticData();
Harmony.CreateAndPatchAll(typeof(BuildBarToolPlugin), (string)null);
}
public void Start()
{
InitAll();
}
public void Update()
{
}
public static void InitAll()
{
InitUI();
}
public static void InitStaticData()
{
for (int i = 0; i < extendedCategories.Length; i++)
{
extendedCategories[i] = false;
}
for (int j = 0; j < 16; j++)
{
for (int k = 0; k < 13; k++)
{
protoIds[j, k] = 0;
}
}
}
public static void InitUI()
{
//IL_0028: 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)
//IL_0050: 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_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Expected O, but got Unknown
//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0364: Unknown result type (might be due to invalid IL or missing references)
//IL_0392: Unknown result type (might be due to invalid IL or missing references)
GameObject val = GameObject.Find("UI Root/Overlay Canvas/In Game/Function Panel/bg-trans");
GameObject val2 = GameObject.Find("UI Root/Overlay Canvas/In Game/Function Panel/bg-trans/sandbox-btn");
GameObject val3 = GameObject.Find("UI Root/Overlay Canvas/In Game/Function Panel/bg-trans/sandbox-btn/title");
float x = val.GetComponent<RectTransform>().sizeDelta.x;
val.GetComponent<RectTransform>().sizeDelta = new Vector2(x, 228f);
float x2 = val2.GetComponent<RectTransform>().sizeDelta.x;
val2.GetComponent<RectTransform>().sizeDelta = new Vector2(x2, 228f);
val3.transform.rotation = Quaternion.AngleAxis(77f, new Vector3(0f, 0f, 1f));
val3.transform.localPosition = new Vector3(81f, -50f, 0f);
GameObject val4 = GameObject.Find("UI Root/Overlay Canvas/In Game/Function Panel/Build Menu/child-group/button-1");
Transform transform = GameObject.Find("UI Root/Overlay Canvas/In Game/Function Panel/Build Menu/child-group").transform;
UIButton component = val4.GetComponent<UIButton>();
float x3 = val4.transform.localPosition.x;
float y = val4.transform.localPosition.y;
for (int i = 0; i < 11; i++)
{
GameObject val5 = Object.Instantiate<GameObject>(val4, transform);
((Object)val5).name = $"button-up-{i}";
val5.transform.localPosition = new Vector3(x3 + (float)(i * 52) - 52f, y + 60f, 0f);
val5.AddComponent<CanvasGroup>();
Object.DestroyImmediate((Object)(object)val5.GetComponent<Button>());
val5.AddComponent<Button>();
string ii = i.ToString();
((UnityEvent)val5.GetComponent<Button>().onClick).AddListener((UnityAction)delegate
{
OnChildButtonClick(Convert.ToInt32(ii));
});
UIButton component2 = val5.GetComponent<UIButton>();
component2.button = val5.GetComponent<Button>();
childButtonObjs.Add(val5);
childButtons.Add(component2);
childIcons.Add(((Component)val5.transform.Find("icon")).GetComponent<Image>());
childNumTexts.Add(((Component)val5.transform.Find("count")).GetComponent<Text>());
childCanvasGroups.Add(val5.GetComponent<CanvasGroup>());
childHotkeyText.Add(((Component)val5.transform.Find("text")).GetComponent<Text>());
}
for (int j = 0; j < 10; j++)
{
oriChildHotkeyText.Add(GameObject.Find($"UI Root/Overlay Canvas/In Game/Function Panel/Build Menu/child-group/button-{j + 1}/text").GetComponent<Text>());
}
GameObject gameObject = ((Component)val4.transform.Find("text")).gameObject;
switchHotkeyRowText = Object.Instantiate<GameObject>(gameObject, transform);
((Object)switchHotkeyRowText).name = "switch-note-text";
switchHotkeyRowText.GetComponent<RectTransform>().sizeDelta = new Vector2(200f, 160f);
switchHotkeyRowText.GetComponent<Text>().text = Localization.Translate("切换快捷键");
switchHotkeyRowText.GetComponent<Text>().fontSize = 14;
int num = 155;
if (RebindBuildBarCompatibility)
{
num = 180;
}
switchHotkeyRowText.transform.localPosition = new Vector3(200f, (float)num, 0f);
if (GenesisCompatibility)
{
switchHotkeyRowText.transform.localPosition = new Vector3(190f, (float)num, 0f);
}
childCanvasGroups.Add(switchHotkeyRowText.AddComponent<CanvasGroup>());
}
[HarmonyPostfix]
[HarmonyPatch(typeof(VFPreload_Patch), "VFPreloadPostPatch")]
public static void PostLoadData()
{
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 13; j++)
{
if (protoIds[i, j] > 0)
{
ItemProto val = ((ProtoSet<ItemProto>)(object)LDB.items).Select(protoIds[i, j]);
if (val != null)
{
protos[i, j] = val;
logger.LogInfo((object)$"Set build bar at {i},{j} (tier 2) ID:{((Proto)val).ID} name:{Localization.Translate(((Proto)val).Name)}");
extendedCategories[i] = true;
}
else
{
logger.LogWarning((object)$"Set Build Bar Fail because item ID:{protoIds[i, j]} is null.");
}
}
}
}
LoadFromBuildIndex();
lockedText = Localization.Translate("gmLockedItemText");
}
[HarmonyPrefix]
[HarmonyPatch(typeof(UIBuildMenu), "StaticLoad")]
public static bool StaticLoadPrefix()
{
if (!UIBuildMenu.staticLoaded)
{
LoadFromBuildIndex();
}
return true;
}
public static void LoadFromBuildIndex()
{
for (int i = 0; i < ((ProtoSet<ItemProto>)(object)LDB.items).dataArray.Length; i++)
{
int buildIndex = ((ProtoSet<ItemProto>)(object)LDB.items).dataArray[i].BuildIndex;
if (buildIndex > 0)
{
int num = buildIndex / 100;
int num2 = buildIndex % 100 - 20;
if (num <= 15 && num2 >= 0 && num2 <= 12)
{
protoIds[num, num2] = ((Proto)((ProtoSet<ItemProto>)(object)LDB.items).dataArray[i]).ID;
protos[num, num2] = ((ProtoSet<ItemProto>)(object)LDB.items).dataArray[i];
extendedCategories[num] = true;
logger.LogInfo((object)$"Set build bar at {num},{num2} (tier 2) from ItemProto.BuildIndex, ID:{((Proto)((ProtoSet<ItemProto>)(object)LDB.items).dataArray[i]).ID} name:{Localization.Translate(((Proto)((ProtoSet<ItemProto>)(object)LDB.items).dataArray[i]).Name)}");
}
}
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(UIFunctionPanel), "_OnUpdate")]
public static void UIBuildMenuOnUpdatePostPatch(ref UIFunctionPanel __instance)
{
//IL_0362: Unknown result type (might be due to invalid IL or missing references)
//IL_0372: Unknown result type (might be due to invalid IL or missing references)
//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
//IL_0224: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Invalid comparison between Unknown and I4
UIFunctionPanel val = __instance;
bool guideComplete = GameMain.data.guideComplete;
float num = 0f;
val.posWanted = -60f;
if (guideComplete)
{
if (((ManualBehaviour)val.buildMenu).active)
{
if (extendedCategories[val.buildMenu.currentCategory] || forceShowAllButtons)
{
bool flag = forceShowAllButtons;
UIRoot instance = UIRoot.instance;
if (instance != null)
{
UIGame uiGame = instance.uiGame;
if (uiGame != null)
{
UIBuildMenu buildMenu = uiGame.buildMenu;
if (buildMenu != null)
{
_ = buildMenu.showButtonsAnyways;
if (true)
{
flag = flag || UIRoot.instance.uiGame.buildMenu.showButtonsAnyways;
}
}
}
}
GameHistoryData history = GameMain.data.history;
int currentCategory = val.buildMenu.currentCategory;
for (int i = 0; i < 12; i++)
{
int num2 = ((Proto)(protos[currentCategory, i]?)).ID ?? 0;
if (num2 > 0 && history.ItemUnlocked(num2))
{
flag = true;
break;
}
}
if (flag)
{
val.posWanted = 0f;
}
else
{
val.posWanted = -135f;
num = -75f;
}
}
else
{
val.posWanted = -135f;
num = -75f;
}
if (val.buildMenu.isDismantleMode)
{
val.posWanted = -75f;
}
if (val.buildMenu.isUpgradeMode)
{
val.posWanted = -75f;
}
}
else if (((ManualBehaviour)val.sandboxMenu).active)
{
if (val.sandboxMenu.childGroup.activeSelf)
{
val.posWanted = -60f;
}
else
{
val.posWanted = -135f;
num = -75f;
}
if (val.sandboxMenu.isRemovalMode)
{
val.posWanted = -75f;
}
}
else if ((int)val.mainPlayer.controller.actionBuild.blueprintMode > 0)
{
val.posWanted = -193f;
num = -133f;
}
else
{
val.posWanted = -195f;
num = -135f;
}
}
else
{
val.posWanted = -195f;
num = -135f;
}
float num3 = num;
float pos = val.pos;
float num4 = 18f;
if (!((double)Mathf.Abs(num3 - pos) < 1E-05))
{
float deltaTime = Time.deltaTime;
float num6;
if (deltaTime > 0.01f)
{
float num5 = 1f - num4 * 0.01f;
num6 = 1f - Mathf.Pow(num5, deltaTime * 100f);
}
else
{
num6 = num4 * deltaTime;
}
val.pos = (val.pos - num6 * num3) / (1f - num6);
}
val.pos = Lerp.Tween(val.pos, val.posWanted, 18f);
val.sandboxTitleObject.SetActive(val.pos > -150f);
val.sandboxIconObject.SetActive(val.pos <= -150f);
val.bgTrans.anchoredPosition = new Vector2(val.bgTrans.anchoredPosition.x, val.pos);
val.sandboxRect.anchoredPosition = new Vector2(Mathf.Clamp((0f - val.pos) * 2f - 320f, -50f, 10f), 0f);
if (val.pos > -10f)
{
float num7 = Mathf.Clamp01(secondLevelAlpha + 0.02f);
if (secondLevelAlpha != num7)
{
secondLevelAlpha = num7;
for (int j = 0; j < childCanvasGroups.Count; j++)
{
childCanvasGroups[j].alpha = secondLevelAlpha;
}
}
}
else
{
secondLevelAlpha = 0f;
for (int k = 0; k < childCanvasGroups.Count; k++)
{
childCanvasGroups[k].alpha = secondLevelAlpha;
}
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(UIBuildMenu), "SetCurrentCategory")]
public static void UIBuildMenuSetCurrentCategoryPostPatch(ref UIBuildMenu __instance, int category)
{
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
//IL_01e2: Unknown result type (might be due to invalid IL or missing references)
//IL_0256: Unknown result type (might be due to invalid IL or missing references)
//IL_02ae: Unknown result type (might be due to invalid IL or missing references)
//IL_02c5: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
UIBuildMenu val = __instance;
if (val.player == null)
{
return;
}
int currentCategory = val.currentCategory;
val.currentCategory = category;
if (currentCategory != val.currentCategory)
{
val.player.controller.actionPick.pickMode = false;
}
GameHistoryData history = GameMain.history;
if (extendedCategories[category] || RebindBuildBarCompatibility)
{
StorageComponent package = val.player.package;
for (int i = 1; i < 11; i++)
{
if (!((Object)(object)childButtons[i] != (Object)null))
{
continue;
}
if (protos[category, i] != null && (protos[category, i].IsEntity || protos[category, i].BuildMode == 4))
{
int iD = ((Proto)protos[category, i]).ID;
if (history.ItemUnlocked(iD) || RebindBuildBarCompatibility)
{
int num = package.GetItemCount(((Proto)protos[category, i]).ID);
if (DeliverySlotsTweaksCompat.enabled)
{
num += val.player.deliveryPackage.GetItemCount(iD);
}
if (((Proto)protos[category, i]).ID == val.player.inhandItemId)
{
num += val.player.inhandItemCount;
}
((Behaviour)childIcons[i]).enabled = true;
childButtons[i].OnEnable();
((Graphic)childIcons[i]).color = normalColor;
childButtons[i].transitions[1].normalColor = normalColor;
childIcons[i].sprite = protos[category, i].iconSprite;
StringBuilderUtility.WriteKMG(val.strb, 5, (long)num, false);
childNumTexts[i].text = ((num > 0) ? val.strb.ToString().Trim() : "");
((Graphic)childNumTexts[i]).color = textColor;
((Selectable)childButtons[i].button).interactable = true;
if (!history.ItemUnlocked(iD))
{
childNumTexts[i].text = lockedText;
((Graphic)childNumTexts[i]).color = lockedTextColor;
((Graphic)childIcons[i]).color = disabledColor2;
childButtons[i].transitions[1].normalColor = disabledColor2;
}
childButtonObjs[i].SetActive(true);
}
else
{
childButtonObjs[i].SetActive(false);
((Behaviour)childIcons[i]).enabled = false;
childIcons[i].sprite = null;
StringBuilderUtility.WriteKMG(val.strb, 5, 0L, false);
childNumTexts[i].text = "";
}
}
else
{
childButtonObjs[i].SetActive(false);
((Behaviour)childIcons[i]).enabled = false;
childIcons[i].sprite = null;
StringBuilderUtility.WriteKMG(val.strb, 5, 0L, false);
childNumTexts[i].text = "";
}
}
}
else
{
for (int j = 1; j < 11; j++)
{
((Component)childButtons[j]).gameObject.SetActive(false);
childIcons[j].sprite = null;
StringBuilderUtility.WriteKMG(val.strb, 5, 0L, false);
childNumTexts[j].text = "";
}
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(UIBuildMenu), "_OnUpdate")]
public static bool UIBuildMenuOnUpdatePrePatch(ref UIBuildMenu __instance)
{
bool inputing = VFInput.inputing;
if (extendedCategories[__instance.currentCategory] && hotkeyActivateRow == 1)
{
VFInput.inputing = true;
}
for (int i = 0; i < 10; i++)
{
if (Input.GetKeyDown((KeyCode)(49 + (i - 1))))
{
VFInput.inputing = inputing;
break;
}
}
if (Input.GetKeyDown((KeyCode)45) || Input.GetKeyDown((KeyCode)117) || Input.GetKeyDown((KeyCode)120))
{
VFInput.inputing = inputing;
}
return true;
}
[HarmonyPostfix]
[HarmonyPatch(typeof(UIBuildMenu), "_OnUpdate")]
public static void UIBuildMenuOnUpdatePostPatch(ref UIBuildMenu __instance)
{
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_046f: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_024d: Unknown result type (might be due to invalid IL or missing references)
//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
//IL_03cb: Unknown result type (might be due to invalid IL or missing references)
//IL_03e9: Unknown result type (might be due to invalid IL or missing references)
//IL_03ee: Unknown result type (might be due to invalid IL or missing references)
UIBuildMenu val = __instance;
int currentCategory = val.currentCategory;
if (extendedCategories[currentCategory] || forceShowAllButtons)
{
GameHistoryData history = GameMain.history;
StorageComponent package = val.player.package;
VFInput.inputing = (Object)(object)EventSystem.current.currentSelectedGameObject != (Object)null && (Object)(object)EventSystem.current.currentSelectedGameObject.GetComponent<InputField>() != (Object)null;
if (val.childGroup.gameObject.activeSelf && hotkeyActivateRow == 1)
{
for (int i = 1; i <= 10; i++)
{
if (Input.GetKeyDown((KeyCode)(282 + (i - 1))) && VFInput.inScreen && VFInput.readyToBuild && !VFInput.inputing)
{
val.isKeyDownCallingAudio = true;
OnChildButtonClick(i);
VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
}
}
}
for (int j = 1; j < 12 && j < childNumTexts.Count; j++)
{
if (protos[currentCategory, j] != null)
{
int iD = ((Proto)protos[currentCategory, j]).ID;
bool flag = history.ItemUnlocked(iD) || val.showButtonsAnyways;
if (flag || (RebindBuildBarCompatibility && forceShowAllButtons))
{
((Behaviour)childIcons[j]).enabled = true;
((Graphic)childIcons[j]).color = normalColor;
childButtons[j].transitions[1].normalColor = normalColor;
childButtons[j].OnEnable();
childButtons[j].tips.itemId = iD;
childButtons[j].tips.itemInc = 0;
childButtons[j].tips.itemCount = 0;
childButtons[j].tips.corner = 8;
childButtons[j].tips.delay = 0.2f;
childButtons[j].tips.type = (ItemTipType)2;
int num = package.GetItemCount(iD);
bool flag2 = val.player.inhandItemId == iD;
if (flag2)
{
num += val.player.inhandItemCount;
}
if (DeliverySlotsTweaksCompat.enabled)
{
num += val.player.deliveryPackage.GetItemCount(iD);
}
StringBuilderUtility.WriteKMG(val.strb, 5, (long)num, false);
childNumTexts[j].text = ((num > 0) ? val.strb.ToString().Trim() : "");
((Graphic)childNumTexts[j]).color = textColor;
((Selectable)childButtons[j].button).interactable = true;
if ((Object)(object)childIcons[j].sprite == (Object)null && protos[currentCategory, j] != null)
{
childIcons[j].sprite = protos[currentCategory, j].iconSprite;
}
childButtons[j].highlighted = flag2;
if (!flag)
{
childNumTexts[j].text = lockedText;
((Graphic)childNumTexts[j]).color = lockedTextColor;
((Graphic)childIcons[j]).color = disabledColor2;
childButtons[j].transitions[1].normalColor = disabledColor2;
}
((Component)childButtons[j].button).gameObject.SetActive(true);
}
else
{
childButtons[j].tips.itemId = 0;
childButtons[j].tips.itemInc = 0;
childButtons[j].tips.itemCount = 0;
childButtons[j].tips.type = (ItemTipType)2;
((Selectable)childButtons[j].button).interactable = false;
childButtonObjs[j].SetActive(false);
}
}
else if (forceShowAllButtons)
{
((Behaviour)childIcons[j]).enabled = false;
((Selectable)childButtons[j].button).interactable = true;
childButtons[j].tips.itemId = 0;
((Component)childButtons[j].button).gameObject.SetActive(true);
}
else
{
((Component)childButtons[j].button).gameObject.SetActive(false);
}
}
if (Input.GetKeyDown((KeyCode)301))
{
hotkeyActivateRow = (hotkeyActivateRow + 1) % 2;
}
RefreshHotKeyRow();
}
else
{
RefreshHotKeyRow(force0: true);
}
}
public static void OnChildButtonClick(int index)
{
//IL_02b4: Unknown result type (might be due to invalid IL or missing references)
UIBuildMenu buildMenu = UIRoot.instance.uiGame.buildMenu;
int currentCategory = buildMenu.currentCategory;
if (currentCategory < 0 || currentCategory > protos.Length)
{
return;
}
bool flag = false;
if (buildMenu.player == null || protos[currentCategory, index] == null)
{
return;
}
int iD = ((Proto)protos[currentCategory, index]).ID;
if (!buildMenu.showButtonsAnyways && !GameMain.history.ItemUnlocked(iD))
{
return;
}
if (index == dblClickIndex && GameMain.gameTime - dblClickTime < 0.33000001311302185)
{
UIRoot.instance.uiGame.FocusOnReplicate(iD);
dblClickTime = 0.0;
dblClickIndex = 0;
flag = true;
}
dblClickIndex = index;
dblClickTime = GameMain.gameTime;
for (int i = 0; i < buildMenu.randRemindTips.Length; i++)
{
if ((Object)(object)buildMenu.randRemindTips[i] != (Object)null && ((ManualBehaviour)buildMenu.randRemindTips[i]).active)
{
int featureId = buildMenu.randRemindTips[i].featureId;
int num = featureId / 100;
int num2 = featureId % 100;
if (currentCategory == num && index == num2)
{
((ManualBehaviour)buildMenu.randRemindTips[i])._Close();
}
}
}
int num3 = buildMenu.player.package.GetItemCount(iD);
if (DeliverySlotsTweaksCompat.enabled)
{
num3 += buildMenu.player.deliveryPackage.GetItemCount(iD);
}
if (num3 <= 0 && BuildToolOptCompat.enabled && BuildToolOptCompat.hologramEnabled)
{
num3 = 999;
}
if (num3 <= 0 && (currentCategory != 9 || index != 1))
{
if (!flag)
{
GameMain.data.warningSystem.Broadcast((EBroadcastVocal)22, -1, 0, 0);
UIRealtimeTip.Popup(Localization.Translate("双击打开合成器"), true, 2);
}
return;
}
if (buildMenu.player.inhandItemId == iD)
{
buildMenu.player.SetHandItems(0, 0, 0);
}
else if (num3 > 0 || (currentCategory == 9 && index == 1))
{
buildMenu.player.SetHandItems(iD, 0, 0);
}
else
{
buildMenu.player.SetHandItems(0, 0, 0);
}
if (buildMenu.isKeyDownCallingAudio)
{
VFAudio.Create("build-menu-child", (Transform)null, Vector3.zero, false, 0, -1, -1L).Play();
buildMenu.isKeyDownCallingAudio = false;
}
}
public static void RefreshHotKeyRow(bool force0 = false)
{
bool flag = hotkeyActivateRow == 0;
bool flag2 = hotkeyActivateRow == 1;
if (force0)
{
flag = true;
flag2 = false;
}
for (int i = 0; i < 10; i++)
{
oriChildHotkeyText[i].text = (flag ? $"F{i + 1}" : "");
}
for (int j = 0; j < 11; j++)
{
childHotkeyText[j].text = (flag2 ? $"F{j}" : "");
}
}
public static void RefreshCategoryIfExtended(int category)
{
if (category < 0 || category > extendedCategories.Length)
{
return;
}
extendedCategories[category] = false;
for (int i = 0; i < 13; i++)
{
if (protos[category, i] != null)
{
extendedCategories[category] = true;
break;
}
}
}
}
public static class BuildToolOptCompat
{
public const string MODGUID = "starfi5h.plugin.BuildToolOpt";
internal static bool enabled;
internal static bool hologramEnabled;
public static void Compatible()
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
enabled = Chainloader.PluginInfos.TryGetValue("starfi5h.plugin.BuildToolOpt", out var _);
hologramEnabled = false;
if (enabled)
{
Harmony val = new Harmony("Gnimaerd.DSP.plugin.BuildBarTool.Compatibility.BuildToolOpt");
val.PatchAll(typeof(BuildToolOptCompat));
}
}
public static void Start()
{
hologramEnabled = Plugin.EnableHologram;
}
}
[BepInPlugin("Gnimaerd.DSP.plugin.BuildBarTool.CheckPlugins", "BuildBarTool.CheckPlugins", "1.0.1")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class CompatCheck : BaseUnityPlugin
{
public const string GUID = "Gnimaerd.DSP.plugin.BuildBarTool.CheckPlugins";
public const string NAME = "BuildBarTool.CheckPlugins";
public const string VERSION = "1.0.1";
public static ManualLogSource Log;
public void Awake()
{
DeliverySlotsTweaksCompat.Compatible();
BuildToolOptCompat.Compatible();
}
public void Start()
{
Log = ((BaseUnityPlugin)this).Logger;
try
{
if (BuildToolOptCompat.enabled)
{
BuildToolOptCompat.Start();
}
}
catch (Exception ex)
{
Log.LogWarning((object)"Error in BuildBarTool.CompatCheck Start()");
Log.LogWarning((object)ex);
}
}
}
public static class DeliverySlotsTweaksCompat
{
public const string MODGUID = "starfi5h.plugin.DeliverySlotsTweaks";
internal static bool enabled;
public static void Compatible()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
enabled = Chainloader.PluginInfos.TryGetValue("starfi5h.plugin.DeliverySlotsTweaks", out var _);
if (enabled)
{
Harmony val = new Harmony("Gnimaerd.DSP.plugin.BuildBarTool.Compatibility.DeliverySlotsTweaksCompat");
val.PatchAll(typeof(DeliverySlotsTweaksCompat));
}
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Gnimaerd.DSP.plugin.BuildBarTool_RebindBuildBarCompat", "BuildBarTool_RebindBuildBarCompat", "0.1.0")]
internal class RebindBuildBarCompat : BaseUnityPlugin
{
public const string GUID = "Gnimaerd.DSP.plugin.BuildBarTool_RebindBuildBarCompat";
public const string NAME = "BuildBarTool_RebindBuildBarCompat";
public const string VERSION = "0.1.0";
internal static ManualLogSource logger;
public static Vector2 pickerPos = new Vector2(-300f, 238f);
public void Awake()
{
logger = ((BaseUnityPlugin)this).Logger;
Harmony.CreateAndPatchAll(typeof(RebindBuildBarCompat), (string)null);
BuildBarToolPlugin.RebindBuildBarCompatibility = true;
}
public void Start()
{
}
public void Update()
{
//IL_010b: Unknown result type (might be due to invalid IL or missing references)
UIBuildMenu buildMenu = Patches.buildMenu;
if ((Object)(object)buildMenu == (Object)null || !buildMenu.childGroup.gameObject.activeSelf || buildMenu.currentCategory < 1 || buildMenu.currentCategory >= 9)
{
return;
}
if (CustomKeyBindSystem.GetKeyBind("ReassignBuildBar").keyValue)
{
BuildBarToolPlugin.forceShowAllButtons = true;
}
else
{
BuildBarToolPlugin.forceShowAllButtons = false;
}
if (!CustomKeyBindSystem.GetKeyBind("ClearBuildBar").keyValue)
{
return;
}
for (int i = 1; i <= 10; i++)
{
if (BuildBarToolPlugin.childButtons[i].isPointerEnter)
{
int num = buildMenu.currentCategory * 100 + i;
ConfigEntry<int> val = BuildBarToolPlugin.customBarBind.Bind<int>("BuildBarBinds", num.ToString(), 0, "Cleared by player");
val.Value = 0;
BuildBarToolPlugin.protos[buildMenu.currentCategory, i] = null;
buildMenu.SetCurrentCategory(buildMenu.currentCategory);
VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
BuildBarToolPlugin.RefreshCategoryIfExtended(buildMenu.currentCategory);
break;
}
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(BuildBarToolPlugin), "PostLoadData")]
public static void LoadConfigFile()
{
for (int i = 0; i < 16; i++)
{
for (int j = 1; j < 11; j++)
{
int num = i * 100 + j;
ItemProto val = BuildBarToolPlugin.protos[i, j];
if (val != null && ((Proto)val).ID != 0)
{
ConfigEntry<int> val2 = BuildBarToolPlugin.customBarBind.Bind<int>("BuildBarBinds", num.ToString(), ((Proto)val).ID, "Item: " + Localization.Translate(((Proto)val).Name));
if (val2.Value == 0)
{
BuildBarToolPlugin.protos[i, j] = null;
}
else if (val2.Value > 0 && ((ProtoSet<ItemProto>)(object)LDB.items).Exist(val2.Value) && val2.Value != ((Proto)val).ID)
{
BuildBarToolPlugin.protos[i, j] = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val2.Value);
}
else if (val2.Value < 0)
{
val2.Value = ((Proto)val).ID;
}
}
else
{
ConfigEntry<int> val3 = BuildBarToolPlugin.customBarBind.Bind<int>("BuildBarBinds", num.ToString(), -1, "Unused");
if (val3.Value > 0 && ((ProtoSet<ItemProto>)(object)LDB.items).Exist(val3.Value))
{
BuildBarToolPlugin.protos[i, j] = ((ProtoSet<ItemProto>)(object)LDB.items).Select(val3.Value);
BuildBarToolPlugin.extendedCategories[i] = true;
}
}
}
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(Patches), "ResetBuildBarItems")]
public static void ReloadOneCategoryPostfix(bool heldCtrl)
{
if (heldCtrl)
{
for (int i = 1; i < 16; i++)
{
BuildBarToolPlugin.extendedCategories[i] = false;
for (int j = 1; j < 13; j++)
{
if (BuildBarToolPlugin.protoIds[i, j] > 0)
{
ItemProto val = ((ProtoSet<ItemProto>)(object)LDB.items).Select(BuildBarToolPlugin.protoIds[i, j]);
if (val != null)
{
BuildBarToolPlugin.protos[i, j] = val;
BuildBarToolPlugin.extendedCategories[i] = true;
}
else
{
BuildBarToolPlugin.protos[i, j] = null;
}
}
else
{
BuildBarToolPlugin.protos[i, j] = null;
}
}
}
}
else
{
int currentCategory = Patches.buildMenu.currentCategory;
BuildBarToolPlugin.extendedCategories[currentCategory] = false;
for (int k = 1; k < 13; k++)
{
if (BuildBarToolPlugin.protoIds[currentCategory, k] > 0)
{
ItemProto val2 = ((ProtoSet<ItemProto>)(object)LDB.items).Select(BuildBarToolPlugin.protoIds[currentCategory, k]);
if (val2 != null)
{
BuildBarToolPlugin.protos[currentCategory, k] = val2;
BuildBarToolPlugin.extendedCategories[currentCategory] = true;
}
else
{
BuildBarToolPlugin.protos[currentCategory, k] = null;
}
}
else
{
BuildBarToolPlugin.protos[currentCategory, k] = null;
}
}
}
SetConfigFile();
BuildBarToolPlugin.customBarBind.Save();
}
public static void SetConfigFile()
{
for (int i = 0; i < BuildBarToolPlugin.extendedCategories.Length; i++)
{
BuildBarToolPlugin.extendedCategories[i] = false;
}
for (int j = 0; j < 16; j++)
{
if (j != Patches.buildMenu.currentCategory && !CustomKeyBindSystem.GetKeyBind("ReassignBuildBar").keyValue)
{
continue;
}
for (int k = 1; k < 13; k++)
{
int num = j * 100 + k;
if (BuildBarToolPlugin.protos[j, k] != null)
{
ItemProto val = BuildBarToolPlugin.protos[j, k];
ConfigEntry<int> val2 = BuildBarToolPlugin.customBarBind.Bind<int>("BuildBarBinds", num.ToString(), ((Proto)val).ID, "Item: " + Localization.Translate(((Proto)val).Name));
val2.Value = ((Proto)val).ID;
BuildBarToolPlugin.extendedCategories[j] = true;
}
else
{
ConfigEntry<int> val3 = BuildBarToolPlugin.customBarBind.Bind<int>("BuildBarBinds", num.ToString(), -1, "Unused");
val3.Value = -1;
}
}
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(Patches), "Update")]
public static bool RebindBuildBarPatchesUpdatePrefix()
{
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
UIBuildMenu buildMenu = Patches.buildMenu;
if ((Object)(object)buildMenu == (Object)null || !buildMenu.childGroup.gameObject.activeSelf)
{
return false;
}
if (buildMenu.currentCategory < 1 || buildMenu.currentCategory >= 9)
{
return false;
}
if (CustomKeyBindSystem.GetKeyBind("ReassignBuildBar").keyValue && BuildBarToolPlugin.hotkeyActivateRow == 1)
{
for (int i = 1; i <= 10; i++)
{
if (!Input.GetKeyDown((KeyCode)(282 + (i - 1))) || !VFInput.inScreen || VFInput.inputing)
{
continue;
}
int buildIndex = buildMenu.currentCategory * 100 + i;
UIItemPickerExtension.Popup(pickerPos, (Action<ItemProto>)delegate(ItemProto proto)
{
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
if (proto != null && ((Proto)proto).ID != 0)
{
ConfigEntry<int> val = BuildBarToolPlugin.customBarBind.Bind<int>("BuildBarBinds", buildIndex.ToString(), ((Proto)proto).ID, "Item: " + Localization.Translate(((Proto)proto).Name));
val.Value = ((Proto)proto).ID;
BuildBarToolPlugin.protos[buildMenu.currentCategory, i] = proto;
BuildBarToolPlugin.extendedCategories[buildMenu.currentCategory] = true;
buildMenu.SetCurrentCategory(buildMenu.currentCategory);
VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
}
}, true, (Func<ItemProto, bool>)((ItemProto proto) => proto.ModelIndex != 0 && proto.CanBuild));
UIRoot.instance.uiGame.itemPicker.OnTypeButtonClick(2);
return false;
}
return false;
}
return true;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(BuildBarToolPlugin), "OnChildButtonClick")]
public static bool OnChildButtonClickPrefix(int index)
{
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
UIBuildMenu buildMenu = Patches.buildMenu;
if ((Object)(object)buildMenu == (Object)null || !buildMenu.childGroup.gameObject.activeSelf)
{
return false;
}
if (buildMenu.currentCategory < 1 || buildMenu.currentCategory >= 9)
{
return false;
}
if (CustomKeyBindSystem.GetKeyBind("ReassignBuildBar").keyValue)
{
int buildIndex = buildMenu.currentCategory * 100 + index;
UIItemPickerExtension.Popup(pickerPos, (Action<ItemProto>)delegate(ItemProto proto)
{
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
if (proto != null && ((Proto)proto).ID != 0)
{
ConfigEntry<int> val = BuildBarToolPlugin.customBarBind.Bind<int>("BuildBarBinds", buildIndex.ToString(), ((Proto)proto).ID, "Item: " + Localization.Translate(((Proto)proto).Name));
val.Value = ((Proto)proto).ID;
BuildBarToolPlugin.protos[buildMenu.currentCategory, index] = proto;
BuildBarToolPlugin.extendedCategories[buildMenu.currentCategory] = true;
buildMenu.SetCurrentCategory(buildMenu.currentCategory);
VFAudio.Create("ui-click-0", (Transform)null, Vector3.zero, true, 0, -1, -1L);
}
}, true, (Func<ItemProto, bool>)((ItemProto proto) => proto.ModelIndex != 0 && proto.CanBuild));
UIRoot.instance.uiGame.itemPicker.OnTypeButtonClick(2);
return false;
}
return true;
}
}