Bläddra i källkod

服装技能书分解

huangxiaoyue 2 år sedan
förälder
incheckning
5c6b50bcd0

+ 96 - 1
GameClient/Assets/Game/HotUpdate/Data/DecomposeDataManager.cs

@@ -4,7 +4,8 @@ namespace GFGGame
 {
     public class DecomposeDataManager : SingletonBase<DecomposeDataManager>
     {
-        Dictionary<int, List<int>> _decomposeData = new Dictionary<int, List<int>>();//所有数量大于1的换装部件数据
+        Dictionary<int, List<int>> _decomposeData = new Dictionary<int, List<int>>();//所有可分解的换装部件数据
+        Dictionary<int, List<int>> _decomposeMaterialData = new Dictionary<int, List<int>>();//所有可分解的材料数据
         Dictionary<int, List<int>> _suitSyntheticMaterials = new Dictionary<int, List<int>>();//materiasId,Lsit<suitId>
         List<int> _rewardList = new List<int>();
 
@@ -12,6 +13,7 @@ namespace GFGGame
         public void Clear()
         {
             _decomposeData.Clear();
+            _decomposeMaterialData.Clear();
             _suitSyntheticMaterials.Clear();
         }
         public void Add(int itemId)
@@ -51,6 +53,20 @@ namespace GFGGame
             }
         }
 
+        public void AddMaterial(int itemId)
+        {
+            //初始化时禁止使用物品配置,会造成卡顿!!!
+            int rarity = ItemDataManager.GetItemRarity(itemId);
+            if (!_decomposeMaterialData.ContainsKey(rarity))
+            {
+                _decomposeMaterialData.Add(rarity, new List<int>());
+            }
+            if (_decomposeMaterialData[rarity].IndexOf(itemId) < 0)
+            {
+                _decomposeMaterialData[rarity].Add(itemId);
+            }
+        }
+
         public void Remove(int itemId)
         {
             int rarity = ItemCfgArray.Instance.GetCfg(itemId).rarity;
@@ -62,6 +78,17 @@ namespace GFGGame
             }
         }
 
+        public void RemoveMaterial(int itemId)
+        {
+            int rarity = ItemCfgArray.Instance.GetCfg(itemId).rarity;
+            long count = ItemCanDecomposeMaterialCount(itemId);
+
+            if (_decomposeMaterialData.ContainsKey(rarity) && _decomposeMaterialData[rarity].IndexOf(itemId) >= 0 && count <= 0)
+            {
+                _decomposeMaterialData[rarity].Remove(itemId);
+            }
+        }
+
         //分解需要扣去合成需要的数量
         public int DeductSynthesisNeedNum(int itemId)
         {
@@ -90,6 +117,7 @@ namespace GFGGame
             return _decomposeData[rarity];
         }
 
+
         public List<int> GetRewardList()
         {
             if (_rewardList.Count == 0)
@@ -108,6 +136,19 @@ namespace GFGGame
             }
             return _rewardList;
         }
+
+        //物品可分解的数量
+        public long CanDecomposeCount(int decomposeType, int itemId)
+        {
+            if (decomposeType == 0) {
+                return ItemCanDecomposeCount(itemId);
+            }
+            else
+            {
+                return ItemCanDecomposeMaterialCount(itemId);
+            }
+        }
+
         //物品可分解的数量
         public long ItemCanDecomposeCount(int itemId)
         {
@@ -115,6 +156,60 @@ namespace GFGGame
             int synthesisNum = DeductSynthesisNeedNum(itemId);
             return ItemDataManager.GetItemNum(itemId) - 1 - synthesisNum;
         }
+
+        //材料可分解的数量
+        public long ItemCanDecomposeMaterialCount(int itemId)
+        {
+            //合成需要的数量
+            int synthesisNum = DeductSynthesisMaterialNeedNum(itemId);
+            return ItemDataManager.GetItemNum(itemId) - synthesisNum;
+        }
+
+        public List<int> GetDecomposeMaterialByRarity(int rarity)
+        {
+            if (!_decomposeMaterialData.ContainsKey(rarity)) return null;
+            Dictionary<int, int> LeagueSkillLvDatas = SkillDataManager.Instance.LeagueSkillLvDatas;
+            List<int> materialDataKey = new List<int>();
+            foreach (var key in _decomposeMaterialData.Keys)
+            {
+                materialDataKey.Add(key);
+            }
+
+            for (int i = 0; i < materialDataKey.Count; i++)
+            {
+                for (int k = 0; k < _decomposeMaterialData[materialDataKey[i]].Count; k++)
+                {
+                    int itemId = _decomposeMaterialData[materialDataKey[i]][k];
+                    if (ItemCanDecomposeMaterialCount(itemId) <= 0) {
+                        _decomposeMaterialData[materialDataKey[i]].RemoveAt(k);
+                    }
+                }
+            }
+            return _decomposeMaterialData[rarity];
+        }
+
+        //分解需要扣去合成材料需要的数量
+        public int DeductSynthesisMaterialNeedNum(int itemId)
+        {
+            int sum = 0;
+            int skillId = ItemDataManager.GetItemSkillId(itemId);
+            Dictionary<int, int> leagueSkillLvDatas = SkillDataManager.Instance.GetLeagueSkillLvDatas();
+            if (!leagueSkillLvDatas.ContainsKey(skillId))
+                return 0;
+
+            int skillLv = leagueSkillLvDatas[skillId];
+            PassivitySkillLvlCfg skillLvlCfg = PassivitySkillLvlCfgArray.Instance.GetCfgByskilllvlAndskillId(skillLv, skillId);
+            int skillLvIndex = skillLv;
+
+            while (skillLvlCfg != null && skillLvlCfg.materiarsArr != null && skillLvlCfg.materiarsArr.Length > 0)
+            {
+                sum += skillLvlCfg.materiarsArr[0][1];
+                skillLvIndex += 1;
+                skillLvlCfg = PassivitySkillLvlCfgArray.Instance.GetCfgByskilllvlAndskillId(skillLvIndex, skillId);
+            }
+            return sum;
+        }
+
         public void InitSuitSyntheticMaterias()
         {
             List<SuitCfg> suitCfgs = new List<SuitCfg>();

+ 19 - 0
GameClient/Assets/Game/HotUpdate/Data/ItemDataManager.cs

@@ -61,6 +61,11 @@ namespace GFGGame
                 itemData.num > 0)
             {
                 BagDataManager.Instance.Add(itemData);
+
+                if (itemInfoProto.Type == ConstItemType.ITEM && itemInfoProto.SubType == ConstItemSubType.MATERIAL_SKILL_BOOK)
+                {
+                    DecomposeDataManager.Instance.AddMaterial(itemID);
+                }
             }
 
             if (itemInfoProto.Type == ConstItemType.HEAD)
@@ -99,6 +104,9 @@ namespace GFGGame
                     if (itemCfg.itemType == ConstItemType.ITEM)
                     {
                         BagDataManager.Instance.Remove(itemID);
+
+                        if(itemCfg.subType == ConstItemSubType.MATERIAL_SKILL_BOOK)
+                            DecomposeDataManager.Instance.RemoveMaterial(itemID);
                     }
                     if (itemCfg.itemType == ConstItemType.USEABLE)
                     {
@@ -183,6 +191,17 @@ namespace GFGGame
             return itemCfg.rarity;
         }
 
+        public static int GetItemSkillId(int itemId)
+        {
+            _dataDic.TryGetValue(itemId, out var value);
+            if (value != null && value.param2Arr != null)
+            {
+                return value.param2Arr[0];
+            }
+            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId);
+            return itemCfg.param2Arr[0];
+        }
+
         public static void InitServerData(List<ItemInfoProto> items)
         {
             _dataDic.Clear();

+ 7 - 0
GameClient/Assets/Game/HotUpdate/Data/SkillDataManager.cs

@@ -8,6 +8,7 @@ namespace GFGGame
         public Dictionary<int, Dictionary<int, int>> CardSkillData = new Dictionary<int, Dictionary<int, int>>();
         public Dictionary<int, List<int>> LeagueSkillDatas = new Dictionary<int, List<int>>();//雅集技能
         public Dictionary<int, Dictionary<int, int>> LeagueSkillScoreDatas = new Dictionary<int, Dictionary<int, int>>();//雅集技能增加属性
+        public Dictionary<int, int> LeagueSkillLvDatas = new Dictionary<int, int>();//雅集技能等级存储
 
         public void Clear()
         {
@@ -31,6 +32,12 @@ namespace GFGGame
         public void UpdateCardSkill(int cardId, int skillId, int skillLv)
         {
             this.CardSkillData[cardId][skillId] = skillLv;
+            this.LeagueSkillLvDatas[skillId] = skillLv;
+        }
+
+        public Dictionary<int, int> GetLeagueSkillLvDatas()
+        {
+            return this.LeagueSkillLvDatas;
         }
 
         public int GetCardSkillLv(int cardId, int skillId)

+ 1 - 0
GameClient/Assets/Game/HotUpdate/Data/VO/ItemData.cs

@@ -11,6 +11,7 @@ namespace GFGGame
         public int subType;
         public int rarity;
         public int[][] syntheticMateriarsArr;
+        public int[] param2Arr;
 
         private Dictionary<int, int> AttributesDic = new Dictionary<int, int>();
 

+ 8 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/ClothingDecompose/UI_ClothingDecomposeUI.cs

@@ -10,6 +10,8 @@ namespace UI.ClothingDecompose
         public Controller m_c1;
         public Controller m_TouchSelect;
         public GLoader m_bg;
+        public UI_Button6 m_btnClothing;
+        public UI_Button6 m_btnSkillBook;
         public GComponent m_valueBar;
         public GButton m_btnBack;
         public GButton m_btnRule;
@@ -72,6 +74,8 @@ namespace UI.ClothingDecompose
             m_c1 = comp.GetController("c1");
             m_TouchSelect = comp.GetController("TouchSelect");
             m_bg = (GLoader)comp.GetChild("bg");
+            m_btnClothing = (UI_Button6)UI_Button6.Create(comp.GetChild("btnClothing"));
+            m_btnSkillBook = (UI_Button6)UI_Button6.Create(comp.GetChild("btnSkillBook"));
             m_valueBar = (GComponent)comp.GetChild("valueBar");
             m_btnBack = (GButton)comp.GetChild("btnBack");
             m_btnRule = (GButton)comp.GetChild("btnRule");
@@ -90,6 +94,10 @@ namespace UI.ClothingDecompose
             m_c1 = null;
             m_TouchSelect = null;
             m_bg = null;
+            m_btnClothing.Dispose();
+            m_btnClothing = null;
+            m_btnSkillBook.Dispose();
+            m_btnSkillBook = null;
             m_valueBar = null;
             m_btnBack = null;
             m_btnRule = null;

+ 2 - 4
GameClient/Assets/Game/HotUpdate/Views/Card/CardFosterView.cs

@@ -105,7 +105,7 @@ namespace GFGGame
             //升级升星消耗材料列表
             _ui.m_ComFosterBottom.m_listLvConsume.itemRenderer = RenderListLvConsumeItem;
             _ui.m_ComFosterBottom.m_listStarConsume.itemRenderer = RenderListStarConsumeItem;
-            _ui.m_ComFosterBottom.m_listSkill.itemRenderer = RenderListSkilItem;
+            _ui.m_ComFosterBottom.m_listSkill.itemRenderer = RenderListSkillItem;
 
             //满星级后卡面列表
             _ui.m_ComFosterBottom.m_listShowCard.itemRenderer = RenderListShowCardItem;
@@ -777,12 +777,10 @@ namespace GFGGame
             _comFosterBottom.m_ctrlSkillCount.selectedIndex = _comFosterBottom.m_listSkill.numItems;
         }
 
-        private void RenderListSkilItem(int index, GObject obj)
+        private void RenderListSkillItem(int index, GObject obj)
         {
             UI_ListSkillItem item = UI_ListSkillItem.Proxy(obj);
-
             PassivitySkillCfg skillCfg = PassivitySkillCfgArray.Instance.GetCfgsBycardId(_cardData.id)[index];
-
             int skillLv = SkillDataManager.Instance.GetCardSkillLv(_cardData.id, skillCfg.skillId);
             CardData data = CardDataManager.GetCardDataById(InstanceZonesDataManager.currentCardId);
             item.m_loaSkill.url = ResPathUtil.GetCardSkillPath(skillCfg.res);

+ 29 - 7
GameClient/Assets/Game/HotUpdate/Views/ClothingDecompose/ClothingDecomposeView.cs

@@ -64,9 +64,17 @@ namespace GFGGame
             _ui.m_listReward.itemRenderer = ListRewardItemRander;
             _ui.m_listReward.onClickItem.Add(OnClickListRewardItem);
 
+            _ui.m_c1.onChanged.Add(OnClickDecomposeType);
+
             // DecomposeDataManager.Instance.InitSuitSyntheticMaterias();
         }
 
+        private void OnClickDecomposeType()
+        {
+            _ui.m_listTab.selectedIndex = _curRarity - 1;
+            OnClickBtnRarity(_curRarity);
+        }
+
         protected override void OnShown()
         {
             base.OnShown();
@@ -94,7 +102,11 @@ namespace GFGGame
         private void OnClickBtnRarity(int rarity)
         {
             _curRarity = rarity;
-            _clothingDatas = DecomposeDataManager.Instance.GetDecomposeDataByRarity(rarity);
+            if(_ui.m_c1.selectedIndex == 0)
+                _clothingDatas = DecomposeDataManager.Instance.GetDecomposeDataByRarity(rarity);
+            else if (_ui.m_c1.selectedIndex == 1)
+                _clothingDatas = DecomposeDataManager.Instance.GetDecomposeMaterialByRarity(rarity);
+
             _ui.m_list.visible = _clothingDatas != null && _clothingDatas.Count > 0;
             _ui.m_txtNone.visible = _clothingDatas == null || _clothingDatas.Count == 0;
             _ui.m_listReward.visible = _clothingDatas != null && _clothingDatas.Count > 0;
@@ -112,7 +124,7 @@ namespace GFGGame
             item.m_ViewType.selectedIndex = 1;
             item.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfg.res, ext);
             item.m_txtName.text = itemCfg.name;
-            long itemHasCount = DecomposeDataManager.Instance.ItemCanDecomposeCount(itemCfg.id);
+            long itemHasCount = DecomposeDataManager.Instance.CanDecomposeCount(_ui.m_c1.selectedIndex,itemCfg.id);
             long itemCount = _decomposeData.ContainsKey(_clothingDatas[index]) ? _decomposeData[_clothingDatas[index]] : 0;
             item.m_txtDecomHasCount.text ="/" + itemHasCount;
             item.m_QualityType.selectedIndex = itemCfg.rarity - 1;
@@ -147,7 +159,7 @@ namespace GFGGame
             GComponent com = _ui.m_list.GetChildAt(childIndex).asCom;
             int itemId = (com.data as ItemCfg).id;
             if (!_decomposeData.ContainsKey(itemId)) _decomposeData[itemId] = 0;
-            if (_decomposeData[itemId] == DecomposeDataManager.Instance.ItemCanDecomposeCount(itemId)) return;
+            if (_decomposeData[itemId] == DecomposeDataManager.Instance.CanDecomposeCount(_ui.m_c1.selectedIndex, itemId)) return;
             if (_decomposeCount == DecomposeDataManager.MaxCount)
             {
                 PromptController.Instance.ShowFloatTextPrompt("已达到单次可分解上限,请分批操作");
@@ -218,7 +230,7 @@ namespace GFGGame
                 // {
                 //     continue;
                 // }
-                long itemHasCount = DecomposeDataManager.Instance.ItemCanDecomposeCount(itemId);
+                long itemHasCount = DecomposeDataManager.Instance.CanDecomposeCount(_ui.m_c1.selectedIndex,itemId);
                 long itemLastCount = _decomposeData.ContainsKey(itemId) ? itemHasCount - _decomposeData[itemId] : itemHasCount;
 
                 long count = Math.Min(lastCount, itemLastCount);
@@ -257,9 +269,19 @@ namespace GFGGame
         private void ListRewardItemRander(int index, GObject obj)
         {
             UI_ListRewardItem item = UI_ListRewardItem.Proxy(obj);
-            DecomposeCfg decomposeCfg = DecomposeCfgArray.Instance.GetCfg(_curRarity);
-            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(decomposeCfg.itemsArr[index][0]);
-            item.m_txtCount.text = (decomposeCfg.itemsArr[index][1] * _decomposeCount).ToString();
+            int[][] itemsArr;
+            //if (_ui.m_c1.selectedIndex == 0)
+            //{
+                DecomposeCfg decomposeCfg = DecomposeCfgArray.Instance.GetCfg(_curRarity);
+                itemsArr = decomposeCfg.itemsArr;
+            //}
+            //else
+            //{
+            //    DecomposeSkillCfgArray decomposeSkillCfg = DecomposeSkillCfgArray.Instance.GetCfg(_curRarity);
+            //    itemsArr = decomposeSkillCfg.itemsArr;
+            //}
+            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemsArr[index][0]);
+            item.m_txtCount.text = (itemsArr[index][1] * _decomposeCount).ToString();
             string ext = ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType, true);
             item.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfg.res, ext);
             item.target.data = itemCfg;

BIN
GameClient/Assets/ResIn/UI/ClothingDecompose/ClothingDecompose_fui.bytes