ItemStore.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. using GadgetCore.API;
  2. using System;
  3. using System.Linq;
  4. using System.Reflection;
  5. using UnityEngine;
  6. namespace VanitySlots
  7. {
  8. public class ItemStore
  9. {
  10. public ItemStore(int size)
  11. {
  12. m_Items = new Item[size];
  13. m_Slots = new GameObject[size];
  14. Clear();
  15. }
  16. private Item[] m_Items;
  17. public Item[] Items
  18. {
  19. get { return m_Items; }
  20. set { m_Items = value; }
  21. }
  22. public void Save()
  23. {
  24. if (!Environment.GetCommandLineArgs().Any((string x) => x == "-batchmode"))
  25. for (int i = 0; i < m_Items.Length; i++)
  26. {
  27. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "id", m_Items[i].id);
  28. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "q", m_Items[i].q);
  29. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "exp", m_Items[i].exp);
  30. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "tier", m_Items[i].tier);
  31. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "corrupted", m_Items[i].corrupted);
  32. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "a0", m_Items[i].aspect[0]);
  33. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "a1", m_Items[i].aspect[1]);
  34. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "a2", m_Items[i].aspect[2]);
  35. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL0", m_Items[i].aspectLvl[0]);
  36. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL1", m_Items[i].aspectLvl[1]);
  37. PreviewLabs.PlayerPrefs.SetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL2", m_Items[i].aspectLvl[2]);
  38. }
  39. }
  40. public bool CanUse(Item holdingItem, int slot)
  41. {
  42. if (holdingItem.id <= 0)
  43. return true;
  44. var holdingItemType = ItemRegistry.GetItem(holdingItem.id).Type;
  45. if (slot == 0 && ((holdingItemType & ItemType.EQUIP_MASK) == (ItemType.OFFHAND & ItemType.EQUIP_MASK)))
  46. return true;
  47. if (slot == 1 && ((holdingItemType & ItemType.EQUIP_MASK) == (ItemType.HELMET & ItemType.EQUIP_MASK)))
  48. return true;
  49. if (slot == 2 && ((holdingItemType & ItemType.EQUIP_MASK) == (ItemType.ARMOR & ItemType.EQUIP_MASK)))
  50. return true;
  51. return false;
  52. }
  53. public void Load()
  54. {
  55. if (!Environment.GetCommandLineArgs().Any((string x) => x == "-batchmode"))
  56. for (int i = 0; i < m_Items.Length; i++)
  57. {
  58. m_Items[i].id = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "id");
  59. m_Items[i].q = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "q");
  60. m_Items[i].exp = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "exp");
  61. m_Items[i].tier = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "tier");
  62. m_Items[i].corrupted = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "corrupted");
  63. m_Items[i].aspect[0] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "a0");
  64. m_Items[i].aspect[1] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "a1");
  65. m_Items[i].aspect[2] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "a2");
  66. m_Items[i].aspectLvl[0] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL0");
  67. m_Items[i].aspectLvl[1] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL1");
  68. m_Items[i].aspectLvl[2] = PreviewLabs.PlayerPrefs.GetInt("c" + Menuu.curChar + "vanitySlot" + i + "aL2");
  69. }
  70. Core.itemStore.UpdateUI();
  71. }
  72. public void Clear()
  73. {
  74. for (int i = 0; i < m_Items.Length; i++)
  75. m_Items[i] = new Item(0, 0, 0, 0, 0, new int[3], new int[3]);
  76. }
  77. public void SetSlotGameObject(int i, GameObject gameObject)
  78. {
  79. m_Slots[i] = gameObject;
  80. }
  81. public static readonly FieldInfo inventoryField = typeof(GameScript).GetField("inventory", BindingFlags.NonPublic | BindingFlags.Instance);
  82. private GameObject[] m_Slots;
  83. public void UpdateUI()
  84. {
  85. if (!Environment.GetCommandLineArgs().Any((string x) => x == "-batchmode"))
  86. try
  87. {
  88. for (int i = 0; i < m_Items.Length; i++)
  89. {
  90. var obj = m_Slots[i];
  91. if (obj != null)
  92. {
  93. obj.GetComponent<Renderer>().material = (Material)Resources.Load("i/i" + (m_Items[i]?.id ?? 0));
  94. var objBack = obj.transform.GetChild(1).gameObject;
  95. AnimIcon animIcon = objBack.GetComponent<AnimIcon>();
  96. 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))
  97. {
  98. objBack.GetComponent<Renderer>().material = (Material)Resources.Load("iBack" + m_Items[i].tier);
  99. if (m_Items[i].tier == 3)
  100. animIcon.anim = 1;
  101. else
  102. animIcon.anim = 0;
  103. objBack.SetActive(true);
  104. }
  105. else
  106. {
  107. animIcon.anim = 0;
  108. objBack.SetActive(false);
  109. }
  110. TextMesh txtQ = obj.transform.GetChild(0).GetComponent<TextMesh>();
  111. if (m_Items[i]?.q > 1 && (m_Items[i]?.id ?? 0) > 0)
  112. {
  113. txtQ.text = "" + m_Items[i].q;
  114. }
  115. else
  116. {
  117. txtQ.text = "";
  118. }
  119. }
  120. }
  121. if (MenuScript.playerAppearance != null)
  122. {
  123. var inventory = (Item[])inventoryField.GetValue(InstanceTracker.GameScript);
  124. GameScript.equippedIDs[1] = inventory[37].id;
  125. GameScript.equippedIDs[2] = inventory[38].id;
  126. GameScript.equippedIDs[3] = inventory[39].id;
  127. Network.RemoveRPCs(MenuScript.playerAppearance.GetComponent<NetworkView>().viewID);
  128. MenuScript.playerAppearance.GetComponent<NetworkView>().RPC("UA", RPCMode.AllBuffered, new object[]
  129. { GameScript.equippedIDs, 0, GameScript.dead });
  130. }
  131. }
  132. catch (Exception e)
  133. {
  134. Core.logger.LogConsole(e.Message);
  135. }
  136. }
  137. }
  138. }