using GadgetCore.API; using System; using System.Linq; using System.Reflection; using UnityEngine; namespace VanitySlots { public class ItemStore { public ItemStore(int size) { m_Items = new Item[size]; m_Slots = new GameObject[size]; Clear(); } private Item[] m_Items; public Item[] Items { get { return m_Items; } set { m_Items = value; } } public void Save() { if (!Environment.GetCommandLineArgs().Any((string x) => x == "-batchmode")) for (int i = 0; i < m_Items.Length; i++) { PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "id", m_Items[i].id); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "q", m_Items[i].q); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "exp", m_Items[i].exp); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "tier", m_Items[i].tier); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "corrupted", m_Items[i].corrupted); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "a0", m_Items[i].aspect[0]); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "a1", m_Items[i].aspect[1]); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "a2", m_Items[i].aspect[2]); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL0", m_Items[i].aspectLvl[0]); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL1", m_Items[i].aspectLvl[1]); PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL2", m_Items[i].aspectLvl[2]); } } public bool CanUse(Item holdingItem, int slot) { if (holdingItem.id <= 0) return true; var holdingItemType = ItemRegistry.GetItem(holdingItem.id).Type; if (slot == 0 && ((holdingItemType & ItemType.EQUIP_MASK) == (ItemType.OFFHAND & ItemType.EQUIP_MASK))) return true; if (slot == 1 && ((holdingItemType & ItemType.EQUIP_MASK) == (ItemType.HELMET & ItemType.EQUIP_MASK))) return true; if (slot == 2 && ((holdingItemType & ItemType.EQUIP_MASK) == (ItemType.ARMOR & ItemType.EQUIP_MASK))) return true; return false; } public void Load() { if (!Environment.GetCommandLineArgs().Any((string x) => x == "-batchmode")) for (int i = 0; i < m_Items.Length; i++) { m_Items[i].id = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "id"); m_Items[i].q = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "q"); m_Items[i].exp = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "exp"); m_Items[i].tier = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "tier"); m_Items[i].corrupted = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "corrupted"); m_Items[i].aspect[0] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "a0"); m_Items[i].aspect[1] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "a1"); m_Items[i].aspect[2] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "a2"); m_Items[i].aspectLvl[0] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL0"); m_Items[i].aspectLvl[1] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL1"); m_Items[i].aspectLvl[2] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL2"); } Core.itemStore.UpdateUI(); } public void Clear() { for (int i = 0; i < m_Items.Length; i++) m_Items[i] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]); } public void SetSlotGameObject(int i, GameObject gameObject) { m_Slots[i] = gameObject; } public static readonly FieldInfo inventoryField = typeof(GameScript).GetField("inventory", BindingFlags.NonPublic | BindingFlags.Instance); private GameObject[] m_Slots; public void UpdateUI() { if (!Environment.GetCommandLineArgs().Any((string x) => x == "-batchmode")) try { for (int i = 0; i < m_Items.Length; i++) { var obj = m_Slots[i]; if (obj != null) { obj.GetComponent().material = (Material)Resources.Load("i/i" + (m_Items[i]?.id ?? 0)); var objBack = obj.transform.GetChild(1).gameObject; AnimIcon animIcon = objBack.GetComponent(); if ((m_Items[i]?.id ?? 0) > 0 && ((m_Items[i].id >= 300 && m_Items[i].id < 2000) || (ItemRegistry.GetTypeByID(m_Items[i].id) & ItemType.LEVELING) == ItemType.LEVELING)) { objBack.GetComponent().material = (Material)Resources.Load("iBack" + m_Items[i].tier); if (m_Items[i].tier == 3) animIcon.anim = 1; else animIcon.anim = 0; objBack.SetActive(true); } else { animIcon.anim = 0; objBack.SetActive(false); } TextMesh txtQ = obj.transform.GetChild(0).GetComponent(); if (m_Items[i]?.q > 1 && (m_Items[i]?.id ?? 0) > 0) { txtQ.text = "" + m_Items[i].q; } else { txtQ.text = ""; } } } if (MenuScript.playerAppearance != null) { var inventory = (Item[])inventoryField.GetValue(InstanceTracker.GameScript); GameScript.equippedIDs[1] = inventory[37].id; GameScript.equippedIDs[2] = inventory[38].id; GameScript.equippedIDs[3] = inventory[39].id; Network.RemoveRPCs(MenuScript.playerAppearance.GetComponent().viewID); MenuScript.playerAppearance.GetComponent().RPC("UA", RPCMode.AllBuffered, new object[] { GameScript.equippedIDs, 0, GameScript.dead }); } } catch (Exception e) { Core.logger.LogConsole(e.Message); } } } }