ItemDataManager.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Reflection;
  4. using ET;
  5. using FairyGUI;
  6. using UnityEngine;
  7. using static UnityEditor.Progress;
  8. namespace GFGGame
  9. {
  10. public class ItemDataManager
  11. {
  12. private static Dictionary<int, ItemData> _dataDic = new Dictionary<int, ItemData>();
  13. private static Dictionary<int, int> _itemExchangeDic = new Dictionary<int, int>();
  14. delegate object MemberGetDelegate(ItemCfg p);
  15. public static void Add(int itemID, int itemNum)
  16. {
  17. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
  18. if (itemCfg == null)
  19. {
  20. Debug.LogError($"添加了一个不存在的物品 {itemID}");
  21. return;
  22. }
  23. ItemData itemData = null;
  24. if (_dataDic.ContainsKey(itemID))
  25. {
  26. itemData = _dataDic[itemID];
  27. if (itemCfg.itemType == ConstItemType.CARD)
  28. {
  29. return;//每张卡牌只有一张
  30. }
  31. }
  32. else
  33. {
  34. itemData = ItemDataPool.GetItemData(itemID);
  35. _dataDic.Add(itemID, itemData);
  36. }
  37. itemData.num += itemNum;
  38. if (ItemUtilCS.IsDressUpItem(itemID) && itemID % GameConst.MAX_COUNT_EVERY_TYPE_ITEM > 0)
  39. {
  40. DressUpMenuItemDataManager.Add(itemID);
  41. if (!DressUpMenuItemDataManager.CheckIsSceneType(itemID))
  42. {
  43. DecomposeDataManager.Instance.Add(itemID);
  44. }
  45. }
  46. // if (itemCfg.itemType == ConstItemType.DRESS_UP && !DressUpMenuItemDataManager.CheckIsSceneType(itemID))
  47. // {
  48. // DecomposeDataManager.Instance.Add(itemID);
  49. // }
  50. PhotographDataManager.Instance.Add(itemID);
  51. EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);
  52. }
  53. public static void Remove(int itemID, int itemNum)
  54. {
  55. if (_dataDic.ContainsKey(itemID))
  56. {
  57. ItemData itemData = _dataDic[itemID];
  58. itemData.num -= itemNum;
  59. if (itemData.num <= 0)
  60. {
  61. itemData.num = 0;
  62. _dataDic.Remove(itemID);
  63. if (ItemUtilCS.IsDressUpItem(itemID))
  64. {
  65. DressUpMenuItemDataManager.Remove(itemID);
  66. }
  67. }
  68. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID);
  69. if (itemCfg.itemType == ConstItemType.DRESS_UP && !DressUpMenuItemDataManager.CheckIsSceneType(itemID))
  70. {
  71. DecomposeDataManager.Instance.Remove(itemID);
  72. }
  73. EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID);
  74. }
  75. }
  76. public static int GetItemNum(int itemId)
  77. {
  78. int numericType = NumericUtil.GetNumericTypeByItemId(itemId);
  79. if (numericType != 0)
  80. {
  81. return GameGlobal.myNumericComponent.GetAsInt(numericType);
  82. }
  83. if (_dataDic.TryGetValue(itemId, out var itemData))
  84. {
  85. return itemData.num;
  86. }
  87. return 0;
  88. }
  89. public static void InitServerData(List<ItemInfoProto> items)
  90. {
  91. _dataDic.Clear();
  92. foreach (ItemInfoProto roleItem in items)
  93. {
  94. Add(roleItem.ConfigId, roleItem.Count);
  95. }
  96. }
  97. public static void InitServerDataItemAttribute(List<ItemAttributeProto> infos)
  98. {
  99. foreach (var info in infos)
  100. {
  101. if (_dataDic.TryGetValue(info.ConfigId, out var itemData))
  102. {
  103. itemData.SetAttributes(info.Ks, info.Vs);
  104. }
  105. }
  106. }
  107. public static void InitItemExchange(int itemId, int exchangTimes)
  108. {
  109. if (_itemExchangeDic.ContainsKey(itemId))
  110. {
  111. _itemExchangeDic[itemId] = exchangTimes;
  112. }
  113. else
  114. {
  115. _itemExchangeDic.Add(itemId, exchangTimes);
  116. }
  117. }
  118. //获取物品已兑换次数
  119. public static int GetItemExchangeTimes(int itemId)
  120. {
  121. if (_itemExchangeDic.ContainsKey(itemId) == false)
  122. {
  123. InitItemExchange(itemId, 0);
  124. }
  125. return _itemExchangeDic[itemId];
  126. }
  127. public static void SetAttribute(int itemId, int key, int value)
  128. {
  129. if (_dataDic.TryGetValue(itemId, out var itemData))
  130. {
  131. itemData.SetAttribute(key, value);
  132. }
  133. }
  134. public static void GetMainScore(int itemId, out int mainScore, out int mainScoreValue)
  135. {
  136. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  137. //五个属性中最大的为主属性
  138. mainScore = 1;
  139. mainScoreValue = 0;
  140. if (itemCfg.score1 > mainScoreValue)
  141. {
  142. mainScoreValue = itemCfg.score1;
  143. mainScore = 1;
  144. }
  145. if (itemCfg.score2 > mainScoreValue)
  146. {
  147. mainScoreValue = itemCfg.score2;
  148. mainScore = 2;
  149. }
  150. if (itemCfg.score3 > mainScoreValue)
  151. {
  152. mainScoreValue = itemCfg.score3;
  153. mainScore = 3;
  154. }
  155. if (itemCfg.score4 > mainScoreValue)
  156. {
  157. mainScoreValue = itemCfg.score4;
  158. mainScore = 4;
  159. }
  160. }
  161. public static int GetItemScoreValue(int itemId, int scoreType)
  162. {
  163. ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
  164. if (scoreType == 1)
  165. {
  166. return itemCfg.score1;
  167. }
  168. else if (scoreType == 2)
  169. {
  170. return itemCfg.score2;
  171. }
  172. else if (scoreType == 3)
  173. {
  174. return itemCfg.score3;
  175. }
  176. else if (scoreType == 4)
  177. {
  178. return itemCfg.score4;
  179. }
  180. return 0;
  181. }
  182. public static int GetScore(int itemId, int scoreType)
  183. {
  184. if (_dataDic.TryGetValue(itemId, out var itemData))
  185. {
  186. return itemData.GetScore(scoreType);
  187. }
  188. return 0;
  189. }
  190. }
  191. }