ItemStore.cs 5.9 KB

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