Browse Source

Merge remote-tracking branch 'remotes/origin/master' into xiaojie

hexiaojie 2 years ago
parent
commit
6f85fbdb7f

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

@@ -4,7 +4,8 @@ namespace GFGGame
 {
 {
     public class DecomposeDataManager : SingletonBase<DecomposeDataManager>
     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>
         Dictionary<int, List<int>> _suitSyntheticMaterials = new Dictionary<int, List<int>>();//materiasId,Lsit<suitId>
         List<int> _rewardList = new List<int>();
         List<int> _rewardList = new List<int>();
 
 
@@ -12,6 +13,7 @@ namespace GFGGame
         public void Clear()
         public void Clear()
         {
         {
             _decomposeData.Clear();
             _decomposeData.Clear();
+            _decomposeMaterialData.Clear();
             _suitSyntheticMaterials.Clear();
             _suitSyntheticMaterials.Clear();
         }
         }
         public void Add(int itemId)
         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)
         public void Remove(int itemId)
         {
         {
             int rarity = ItemCfgArray.Instance.GetCfg(itemId).rarity;
             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)
         public int DeductSynthesisNeedNum(int itemId)
         {
         {
@@ -90,6 +117,7 @@ namespace GFGGame
             return _decomposeData[rarity];
             return _decomposeData[rarity];
         }
         }
 
 
+
         public List<int> GetRewardList()
         public List<int> GetRewardList()
         {
         {
             if (_rewardList.Count == 0)
             if (_rewardList.Count == 0)
@@ -108,6 +136,19 @@ namespace GFGGame
             }
             }
             return _rewardList;
             return _rewardList;
         }
         }
+
+        //物品可分解的数量
+        public long CanDecomposeCount(int decomposeType, int itemId)
+        {
+            if (decomposeType == 0) {
+                return ItemCanDecomposeCount(itemId);
+            }
+            else
+            {
+                return ItemCanDecomposeMaterialCount(itemId);
+            }
+        }
+
         //物品可分解的数量
         //物品可分解的数量
         public long ItemCanDecomposeCount(int itemId)
         public long ItemCanDecomposeCount(int itemId)
         {
         {
@@ -115,6 +156,60 @@ namespace GFGGame
             int synthesisNum = DeductSynthesisNeedNum(itemId);
             int synthesisNum = DeductSynthesisNeedNum(itemId);
             return ItemDataManager.GetItemNum(itemId) - 1 - synthesisNum;
             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()
         public void InitSuitSyntheticMaterias()
         {
         {
             List<SuitCfg> suitCfgs = new List<SuitCfg>();
             List<SuitCfg> suitCfgs = new List<SuitCfg>();

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

@@ -61,6 +61,11 @@ namespace GFGGame
                 itemData.num > 0)
                 itemData.num > 0)
             {
             {
                 BagDataManager.Instance.Add(itemData);
                 BagDataManager.Instance.Add(itemData);
+
+                if (itemInfoProto.Type == ConstItemType.ITEM && itemInfoProto.SubType == ConstItemSubType.MATERIAL_SKILL_BOOK)
+                {
+                    DecomposeDataManager.Instance.AddMaterial(itemID);
+                }
             }
             }
 
 
             if (itemInfoProto.Type == ConstItemType.HEAD)
             if (itemInfoProto.Type == ConstItemType.HEAD)
@@ -99,6 +104,9 @@ namespace GFGGame
                     if (itemCfg.itemType == ConstItemType.ITEM)
                     if (itemCfg.itemType == ConstItemType.ITEM)
                     {
                     {
                         BagDataManager.Instance.Remove(itemID);
                         BagDataManager.Instance.Remove(itemID);
+
+                        if(itemCfg.subType == ConstItemSubType.MATERIAL_SKILL_BOOK)
+                            DecomposeDataManager.Instance.RemoveMaterial(itemID);
                     }
                     }
                     if (itemCfg.itemType == ConstItemType.USEABLE)
                     if (itemCfg.itemType == ConstItemType.USEABLE)
                     {
                     {
@@ -183,6 +191,17 @@ namespace GFGGame
             return itemCfg.rarity;
             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)
         public static void InitServerData(List<ItemInfoProto> items)
         {
         {
             _dataDic.Clear();
             _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, Dictionary<int, int>> CardSkillData = new Dictionary<int, Dictionary<int, int>>();
         public Dictionary<int, List<int>> LeagueSkillDatas = new Dictionary<int, List<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, Dictionary<int, int>> LeagueSkillScoreDatas = new Dictionary<int, Dictionary<int, int>>();//雅集技能增加属性
+        public Dictionary<int, int> LeagueSkillLvDatas = new Dictionary<int, int>();//雅集技能等级存储
 
 
         public void Clear()
         public void Clear()
         {
         {
@@ -31,6 +32,12 @@ namespace GFGGame
         public void UpdateCardSkill(int cardId, int skillId, int skillLv)
         public void UpdateCardSkill(int cardId, int skillId, int skillLv)
         {
         {
             this.CardSkillData[cardId][skillId] = 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)
         public int GetCardSkillLv(int cardId, int skillId)

+ 5 - 5
GameClient/Assets/Game/HotUpdate/Data/TaskDataManager.cs

@@ -40,11 +40,11 @@ namespace GFGGame
             if (taskInfo == null)
             if (taskInfo == null)
             {
             {
                 TaskInfosDic.Add(taskId, info);
                 TaskInfosDic.Add(taskId, info);
-                TaskType2TaskIdListDic.TryGetValue(cfg.taskType, out var taskIds);
+                TaskType2TaskIdListDic.TryGetValue(cfg.funcType, out var taskIds);
                 if (taskIds == null)
                 if (taskIds == null)
                 {
                 {
                     taskIds = new List<int>();
                     taskIds = new List<int>();
-                    TaskType2TaskIdListDic.Add(cfg.taskType, taskIds);
+                    TaskType2TaskIdListDic.Add(cfg.funcType, taskIds);
                 }
                 }
                 taskIds.Add(taskId);
                 taskIds.Add(taskId);
             }
             }
@@ -65,11 +65,11 @@ namespace GFGGame
                 Log.Error($"出现了没有配置的任务id{taskId}");
                 Log.Error($"出现了没有配置的任务id{taskId}");
                 return;
                 return;
             }
             }
-            var taskType = cfg.taskType;
-            TaskType2TaskIdListDic.TryGetValue(taskType, out var taskIds);
+            var funcType = cfg.funcType;
+            TaskType2TaskIdListDic.TryGetValue(funcType, out var taskIds);
             if (taskIds == null) return;
             if (taskIds == null) return;
             taskIds.Remove(taskId);
             taskIds.Remove(taskId);
-            if (taskIds.Count == 0) TaskType2TaskIdListDic.Remove(taskType);
+            if (taskIds.Count == 0) TaskType2TaskIdListDic.Remove(funcType);
         }
         }
 
 
         public void UpdateTaskState(int taskId, int state)
         public void UpdateTaskState(int taskId, int state)

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

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

+ 3 - 0
GameClient/Assets/Game/HotUpdate/FairyGUI/GenCode/Card/UI_CardFosterUI.cs

@@ -18,6 +18,7 @@ namespace UI.Card
         public GLoader m_loaGuide;
         public GLoader m_loaGuide;
         public Transition m_t0;
         public Transition m_t0;
         public Transition m_t1;
         public Transition m_t1;
+        public Transition m_open;
         public const string URL = "ui://7l6lvkayojlzj";
         public const string URL = "ui://7l6lvkayojlzj";
         public const string PACKAGE_NAME = "Card";
         public const string PACKAGE_NAME = "Card";
         public const string RES_NAME = "CardFosterUI";
         public const string RES_NAME = "CardFosterUI";
@@ -76,6 +77,7 @@ namespace UI.Card
             m_loaGuide = (GLoader)comp.GetChild("loaGuide");
             m_loaGuide = (GLoader)comp.GetChild("loaGuide");
             m_t0 = comp.GetTransition("t0");
             m_t0 = comp.GetTransition("t0");
             m_t1 = comp.GetTransition("t1");
             m_t1 = comp.GetTransition("t1");
+            m_open = comp.GetTransition("open");
         }
         }
         public void Dispose(bool disposeTarget = false)
         public void Dispose(bool disposeTarget = false)
         {
         {
@@ -94,6 +96,7 @@ namespace UI.Card
             m_loaGuide = null;
             m_loaGuide = null;
             m_t0 = null;
             m_t0 = null;
             m_t1 = null;
             m_t1 = null;
+            m_open = null;
             if(disposeTarget && target != null)
             if(disposeTarget && target != null)
             {
             {
                 target.RemoveFromParent();
                 target.RemoveFromParent();

+ 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_c1;
         public Controller m_TouchSelect;
         public Controller m_TouchSelect;
         public GLoader m_bg;
         public GLoader m_bg;
+        public UI_Button6 m_btnClothing;
+        public UI_Button6 m_btnSkillBook;
         public GComponent m_valueBar;
         public GComponent m_valueBar;
         public GButton m_btnBack;
         public GButton m_btnBack;
         public GButton m_btnRule;
         public GButton m_btnRule;
@@ -72,6 +74,8 @@ namespace UI.ClothingDecompose
             m_c1 = comp.GetController("c1");
             m_c1 = comp.GetController("c1");
             m_TouchSelect = comp.GetController("TouchSelect");
             m_TouchSelect = comp.GetController("TouchSelect");
             m_bg = (GLoader)comp.GetChild("bg");
             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_valueBar = (GComponent)comp.GetChild("valueBar");
             m_btnBack = (GButton)comp.GetChild("btnBack");
             m_btnBack = (GButton)comp.GetChild("btnBack");
             m_btnRule = (GButton)comp.GetChild("btnRule");
             m_btnRule = (GButton)comp.GetChild("btnRule");
@@ -90,6 +94,10 @@ namespace UI.ClothingDecompose
             m_c1 = null;
             m_c1 = null;
             m_TouchSelect = null;
             m_TouchSelect = null;
             m_bg = null;
             m_bg = null;
+            m_btnClothing.Dispose();
+            m_btnClothing = null;
+            m_btnSkillBook.Dispose();
+            m_btnSkillBook = null;
             m_valueBar = null;
             m_valueBar = null;
             m_btnBack = null;
             m_btnBack = null;
             m_btnRule = null;
             m_btnRule = null;

+ 2 - 2
GameClient/Assets/Game/HotUpdate/Views/ActivityDay7/ActivityDay7View.cs

@@ -82,7 +82,7 @@ namespace GFGGame
         {
         {
             var taskIds = (List<int>)context.data;
             var taskIds = (List<int>)context.data;
             foreach (var _ in taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId))
             foreach (var _ in taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId))
-                         .Where(taskCfg => taskCfg is { taskType: TaskType.Day7 }))
+                         .Where(taskCfg => taskCfg is { funcType: TaskType.Day7 }))
             {
             {
                 TaskChange();
                 TaskChange();
             }
             }
@@ -92,7 +92,7 @@ namespace GFGGame
         {
         {
             var taskId = (int)context.data;
             var taskId = (int)context.data;
             var taskCfg = TaskCfgArray.Instance.GetCfg(taskId);
             var taskCfg = TaskCfgArray.Instance.GetCfg(taskId);
-            if (!(taskCfg is { taskType: TaskType.Day7 })) return;
+            if (!(taskCfg is { funcType: TaskType.Day7 })) return;
             TaskChange();
             TaskChange();
         }
         }
 
 

+ 8 - 7
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_listLvConsume.itemRenderer = RenderListLvConsumeItem;
             _ui.m_ComFosterBottom.m_listStarConsume.itemRenderer = RenderListStarConsumeItem;
             _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;
             _ui.m_ComFosterBottom.m_listShowCard.itemRenderer = RenderListShowCardItem;
@@ -286,12 +286,14 @@ namespace GFGGame
 
 
             _showLv = isPreview == true ? lv : _cardData.lv;
             _showLv = isPreview == true ? lv : _cardData.lv;
             _showExp = isPreview == true ? exp : _cardData.exp;
             _showExp = isPreview == true ? exp : _cardData.exp;
+
             CardLvlCfg cardLvCfg = CardLvlCfgArray.Instance.GetCfgByrarityAndcardLvl(_cardData.itemCfg.rarity, _showLv);
             CardLvlCfg cardLvCfg = CardLvlCfgArray.Instance.GetCfgByrarityAndcardLvl(_cardData.itemCfg.rarity, _showLv);
             if (cardLvCfg == null)
             if (cardLvCfg == null)
             {
             {
                 ET.Log.Error("卡牌" + _cardData.id + " 没有  " + _showLv + "   级等级配置");
                 ET.Log.Error("卡牌" + _cardData.id + " 没有  " + _showLv + "   级等级配置");
                 return;
                 return;
             }
             }
+
             _comFosterBottom.m_barLv.max = cardLvCfg.needExp;
             _comFosterBottom.m_barLv.max = cardLvCfg.needExp;
             _comFosterBottom.m_barLv.value = _showExp;
             _comFosterBottom.m_barLv.value = _showExp;
             EffectUIPool.Recycle(_effectUI6);
             EffectUIPool.Recycle(_effectUI6);
@@ -581,8 +583,8 @@ namespace GFGGame
             int maxLv = CardRarityCfgArray.Instance.GetCfg(_cardData.itemCfg.rarity).maxCardLvl;
             int maxLv = CardRarityCfgArray.Instance.GetCfg(_cardData.itemCfg.rarity).maxCardLvl;
             lvLimit = Mathf.Min(lvLimit, maxLv);
             lvLimit = Mathf.Min(lvLimit, maxLv);
             int needExp = CardLvlCfgArray.Instance.GetCfgByrarityAndcardLvl(_cardData.itemCfg.rarity, lvLimit).needExp;
             int needExp = CardLvlCfgArray.Instance.GetCfgByrarityAndcardLvl(_cardData.itemCfg.rarity, lvLimit).needExp;
-
-            if (_showLv > lvLimit || _showLv == lvLimit && _comFosterBottom.m_barLv.value + itemCfg.cardUpLvExp > needExp)
+            
+            if (_showLv >= lvLimit && _comFosterBottom.m_barLv.value + itemCfg.cardUpLvExp > needExp)
             {
             {
                 if (!showTips) return true;
                 if (!showTips) return true;
 
 
@@ -597,7 +599,8 @@ namespace GFGGame
                     }
                     }
                 }
                 }
 
 
-                PromptController.Instance.ShowFloatTextPrompt(string.Format("角色等级达到{0}级可继续升级词牌", roleLv));
+                if(_showLv < maxLv)
+                    PromptController.Instance.ShowFloatTextPrompt(string.Format("角色等级达到{0}级可继续升级词牌", roleLv));
 
 
                 return true;
                 return true;
             }
             }
@@ -777,12 +780,10 @@ namespace GFGGame
             _comFosterBottom.m_ctrlSkillCount.selectedIndex = _comFosterBottom.m_listSkill.numItems;
             _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);
             UI_ListSkillItem item = UI_ListSkillItem.Proxy(obj);
-
             PassivitySkillCfg skillCfg = PassivitySkillCfgArray.Instance.GetCfgsBycardId(_cardData.id)[index];
             PassivitySkillCfg skillCfg = PassivitySkillCfgArray.Instance.GetCfgsBycardId(_cardData.id)[index];
-
             int skillLv = SkillDataManager.Instance.GetCardSkillLv(_cardData.id, skillCfg.skillId);
             int skillLv = SkillDataManager.Instance.GetCardSkillLv(_cardData.id, skillCfg.skillId);
             CardData data = CardDataManager.GetCardDataById(InstanceZonesDataManager.currentCardId);
             CardData data = CardDataManager.GetCardDataById(InstanceZonesDataManager.currentCardId);
             item.m_loaSkill.url = ResPathUtil.GetCardSkillPath(skillCfg.res);
             item.m_loaSkill.url = ResPathUtil.GetCardSkillPath(skillCfg.res);

+ 65 - 17
GameClient/Assets/Game/HotUpdate/Views/ClothingDecompose/ClothingDecomposeView.cs

@@ -55,7 +55,8 @@ namespace GFGGame
             });
             });
 
 
             _ui.m_btnSelect.onClick.Add(OnClickBtnSelect);
             _ui.m_btnSelect.onClick.Add(OnClickBtnSelect);
-            _ui.m_btnRule.onClick.Add(OnClickBtnRule);
+            _ui.m_btnRule.onClick.Add(RuleController.ShowRuleView);
+            _ui.m_btnRule.data = 300019;
             _ui.m_btnDecompose.onClick.Add(OnClickBtnDecompose);
             _ui.m_btnDecompose.onClick.Add(OnClickBtnDecompose);
 
 
             _ui.m_list.itemRenderer = ListItemRander;
             _ui.m_list.itemRenderer = ListItemRander;
@@ -64,9 +65,22 @@ namespace GFGGame
             _ui.m_listReward.itemRenderer = ListRewardItemRander;
             _ui.m_listReward.itemRenderer = ListRewardItemRander;
             _ui.m_listReward.onClickItem.Add(OnClickListRewardItem);
             _ui.m_listReward.onClickItem.Add(OnClickListRewardItem);
 
 
+            _ui.m_c1.onChanged.Add(OnClickDecomposeType);
+
             // DecomposeDataManager.Instance.InitSuitSyntheticMaterias();
             // DecomposeDataManager.Instance.InitSuitSyntheticMaterias();
         }
         }
 
 
+        private void OnClickDecomposeType()
+        {
+            _ui.m_listTab.selectedIndex = _curRarity - 1;
+            OnClickBtnRarity(_curRarity);
+
+            if (_ui.m_c1.selectedIndex == 0)
+                _ui.m_btnRule.data = 300019;
+            else
+                _ui.m_btnRule.data = 300020;
+        }
+
         protected override void OnShown()
         protected override void OnShown()
         {
         {
             base.OnShown();
             base.OnShown();
@@ -94,7 +108,11 @@ namespace GFGGame
         private void OnClickBtnRarity(int rarity)
         private void OnClickBtnRarity(int rarity)
         {
         {
             _curRarity = 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_list.visible = _clothingDatas != null && _clothingDatas.Count > 0;
             _ui.m_txtNone.visible = _clothingDatas == null || _clothingDatas.Count == 0;
             _ui.m_txtNone.visible = _clothingDatas == null || _clothingDatas.Count == 0;
             _ui.m_listReward.visible = _clothingDatas != null && _clothingDatas.Count > 0;
             _ui.m_listReward.visible = _clothingDatas != null && _clothingDatas.Count > 0;
@@ -112,7 +130,7 @@ namespace GFGGame
             item.m_ViewType.selectedIndex = 1;
             item.m_ViewType.selectedIndex = 1;
             item.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfg.res, ext);
             item.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfg.res, ext);
             item.m_txtName.text = itemCfg.name;
             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;
             long itemCount = _decomposeData.ContainsKey(_clothingDatas[index]) ? _decomposeData[_clothingDatas[index]] : 0;
             item.m_txtDecomHasCount.text ="/" + itemHasCount;
             item.m_txtDecomHasCount.text ="/" + itemHasCount;
             item.m_QualityType.selectedIndex = itemCfg.rarity - 1;
             item.m_QualityType.selectedIndex = itemCfg.rarity - 1;
@@ -147,7 +165,7 @@ namespace GFGGame
             GComponent com = _ui.m_list.GetChildAt(childIndex).asCom;
             GComponent com = _ui.m_list.GetChildAt(childIndex).asCom;
             int itemId = (com.data as ItemCfg).id;
             int itemId = (com.data as ItemCfg).id;
             if (!_decomposeData.ContainsKey(itemId)) _decomposeData[itemId] = 0;
             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)
             if (_decomposeCount == DecomposeDataManager.MaxCount)
             {
             {
                 PromptController.Instance.ShowFloatTextPrompt("已达到单次可分解上限,请分批操作");
                 PromptController.Instance.ShowFloatTextPrompt("已达到单次可分解上限,请分批操作");
@@ -218,7 +236,7 @@ namespace GFGGame
                 // {
                 // {
                 //     continue;
                 //     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 itemLastCount = _decomposeData.ContainsKey(itemId) ? itemHasCount - _decomposeData[itemId] : itemHasCount;
 
 
                 long count = Math.Min(lastCount, itemLastCount);
                 long count = Math.Min(lastCount, itemLastCount);
@@ -241,25 +259,53 @@ namespace GFGGame
 
 
         private void UpdateConsume()
         private void UpdateConsume()
         {
         {
+            int consumeId;
+            int[][] itemsArr;
+            int consumeCount;
             DecomposeCfg cfg = DecomposeCfgArray.Instance.GetCfg(_curRarity);
             DecomposeCfg cfg = DecomposeCfgArray.Instance.GetCfg(_curRarity);
-            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(cfg.consumeId);
-            _ui.m_listReward.numItems = _decomposeCount > 0 ? cfg.itemsArr.Length : 0;
+            if (_ui.m_c1.selectedIndex == 0)
+            {
+                DecomposeCfg decomposeCfg = DecomposeCfgArray.Instance.GetCfg(_curRarity);
+                consumeId = decomposeCfg.consumeId;
+                itemsArr = decomposeCfg.itemsArr;
+                consumeCount = decomposeCfg.consumeCount;
+            }
+            else
+            {
+                DecomposeSkillCfg decomposeSkillCfg = DecomposeSkillCfgArray.Instance.GetCfg(_curRarity);
+                consumeId = decomposeSkillCfg.consumeId;
+                itemsArr = decomposeSkillCfg.itemsArr;
+                consumeCount = decomposeSkillCfg.consumeCount;
+            }
+
+            ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(consumeId);
+            _ui.m_listReward.numItems = _decomposeCount > 0 ? itemsArr.Length : 0;
             _ui.m_txtShow.text = string.Format("*  分解{0}件{1}可获得  *", StringUtil.GetColorText(_decomposeCount.ToString(), "#DA826E"), ConstDressRarity.DressRarityList()[_curRarity]);
             _ui.m_txtShow.text = string.Format("*  分解{0}件{1}可获得  *", StringUtil.GetColorText(_decomposeCount.ToString(), "#DA826E"), ConstDressRarity.DressRarityList()[_curRarity]);
-            ET.Log.Debug("分解消耗:  " + cfg.consumeId + "   找不到物品配置");
+            ET.Log.Debug("分解消耗:  " + consumeId + "   找不到物品配置");
             if (itemCfg == null)
             if (itemCfg == null)
             {
             {
                 _ui.m_txtConsume.visible = false;
                 _ui.m_txtConsume.visible = false;
                 return;
                 return;
             }
             }
             _ui.m_txtConsume.visible = true;
             _ui.m_txtConsume.visible = true;
-            _ui.m_txtConsume.text = string.Format("消耗{0}X{1}", itemCfg.name, (_decomposeCount * cfg.consumeCount));
+            _ui.m_txtConsume.text = string.Format("消耗{0}X{1}", itemCfg.name, (_decomposeCount * consumeCount));
         }
         }
         private void ListRewardItemRander(int index, GObject obj)
         private void ListRewardItemRander(int index, GObject obj)
         {
         {
             UI_ListRewardItem item = UI_ListRewardItem.Proxy(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
+            {
+                DecomposeSkillCfg 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);
             string ext = ItemUtil.GetItemResExt(itemCfg.itemType, itemCfg.subType, true);
             item.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfg.res, ext);
             item.m_loaIcon.url = ResPathUtil.GetIconPath(itemCfg.res, ext);
             item.target.data = itemCfg;
             item.target.data = itemCfg;
@@ -289,7 +335,13 @@ namespace GFGGame
             ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(cfg.consumeId);
             ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(cfg.consumeId);
             if (_decomposeCount <= 0)
             if (_decomposeCount <= 0)
             {
             {
-                PromptController.Instance.ShowFloatTextPrompt("未选择分解服装");
+                String str = "";
+                if (_ui.m_c1.selectedIndex == 0)
+                    str = "未选择分解服装";
+                else
+                    str = "未选择分解技能书";
+
+                PromptController.Instance.ShowFloatTextPrompt(str);
                 return;
                 return;
             }
             }
             long consumeCount = cfg.consumeCount * _decomposeCount;
             long consumeCount = cfg.consumeCount * _decomposeCount;
@@ -308,10 +360,6 @@ namespace GFGGame
                 LogServerHelper.SendPlayParticipationLog((int)PlayParticipationEnum.FU_ZHUANG_FEN_JIE, 2);
                 LogServerHelper.SendPlayParticipationLog((int)PlayParticipationEnum.FU_ZHUANG_FEN_JIE, 2);
             }
             }
         }
         }
-        private void OnClickBtnRule()
-        {
-            ViewManager.Show<ClothingDecomposeRuleView>();
-        }
 
 
         private void OnClickBtnBack()
         private void OnClickBtnBack()
         {
         {

+ 2 - 2
GameClient/Assets/Game/HotUpdate/Views/LuckyBox/LuckyBoxView.cs

@@ -440,8 +440,8 @@ namespace GFGGame
         {
         {
             if (!ViewManager.CheckIsTopView(this.viewCom)) return;
             if (!ViewManager.CheckIsTopView(this.viewCom)) return;
             GObject gObject = _ui.m_listBg.GetChildAt(_curIndex);
             GObject gObject = _ui.m_listBg.GetChildAt(_curIndex);
-            if (gObject == null) return;
-            GButton btnBuyTen = gObject.asCom.GetChild("btnBuyTen").asButton;
+            if (gObject == null) return; 
+           GButton btnBuyTen = gObject.asCom.GetChild("comLuckBoxBtn").asCom.GetChild("btnBuyTen").asButton;
 
 
             GuideController.TryGuide(null, ConstGuideId.LUCKY_BOX, 1, "“摘星”里可以通过星辰的力量获得服饰。", -1, true, _ui.target.height - 600);
             GuideController.TryGuide(null, ConstGuideId.LUCKY_BOX, 1, "“摘星”里可以通过星辰的力量获得服饰。", -1, true, _ui.target.height - 600);
             GuideController.TryGuide(btnBuyTen, ConstGuideId.LUCKY_BOX, 2, "点击摘取十次。");
             GuideController.TryGuide(btnBuyTen, ConstGuideId.LUCKY_BOX, 2, "点击摘取十次。");

+ 10 - 10
GameClient/Assets/Game/HotUpdate/Views/Task/CombTaskView.cs

@@ -11,7 +11,7 @@ namespace GFGGame
     {
     {
         private UI_CombTaskUI _ui;
         private UI_CombTaskUI _ui;
         private List<TaskCfg> _cfgs;
         private List<TaskCfg> _cfgs;
-        private int taskType = TaskType.Daily;
+        private int funcType = TaskType.Daily;
 
 
         public override void Dispose()
         public override void Dispose()
         {
         {
@@ -75,7 +75,7 @@ namespace GFGGame
         {
         {
             var taskIds = (List<int>)eventContext.data;
             var taskIds = (List<int>)eventContext.data;
             if (taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId)).Where(taskCfg => taskCfg != null)
             if (taskIds.Select(taskId => TaskCfgArray.Instance.GetCfg(taskId)).Where(taskCfg => taskCfg != null)
-                .Any(taskCfg => taskCfg.taskType == taskType))
+                .Any(taskCfg => taskCfg.funcType == funcType))
             {
             {
                 UpdateTask();
                 UpdateTask();
             }
             }
@@ -86,14 +86,14 @@ namespace GFGGame
             var taskId = (int)eventContext.data;
             var taskId = (int)eventContext.data;
             var taskCfg = TaskCfgArray.Instance.GetCfg(taskId);
             var taskCfg = TaskCfgArray.Instance.GetCfg(taskId);
             if (taskCfg == null) return;
             if (taskCfg == null) return;
-            if (taskCfg.taskType != taskType) return;
+            if (taskCfg.funcType != funcType) return;
             UpdateTask();
             UpdateTask();
         }
         }
 
 
         //切换任务类型
         //切换任务类型
         private void OnCtrlChange()
         private void OnCtrlChange()
         {
         {
-            taskType = _ui.m_c1.selectedIndex switch
+            funcType = _ui.m_c1.selectedIndex switch
             {
             {
                 0 =>
                 0 =>
                     //每日任务
                     //每日任务
@@ -101,7 +101,7 @@ namespace GFGGame
                 1 =>
                 1 =>
                     //织造任务
                     //织造任务
                     TaskType.BattlePass,
                     TaskType.BattlePass,
-                _ => taskType
+                _ => funcType
             };
             };
             //更新任务列表
             //更新任务列表
             UpdateTask();
             UpdateTask();
@@ -149,7 +149,7 @@ namespace GFGGame
         //更新任务列表
         //更新任务列表
         private void UpdateTask()
         private void UpdateTask()
         {
         {
-            _cfgs = TaskDataManager.Instance.GetTaskCfgs(taskType);
+            _cfgs = TaskDataManager.Instance.GetTaskCfgs(funcType);
             _ui.m_TaskList.numItems = _cfgs.Count;
             _ui.m_TaskList.numItems = _cfgs.Count;
             RedDotController.Instance.SetComRedDot(_ui.m_btnDailyTask,
             RedDotController.Instance.SetComRedDot(_ui.m_btnDailyTask,
                 TaskDataManager.Instance.CheckTaskRewardCanGet(TaskType.Daily));
                 TaskDataManager.Instance.CheckTaskRewardCanGet(TaskType.Daily));
@@ -184,7 +184,7 @@ namespace GFGGame
             item.m_listTaskReward.data = reward;
             item.m_listTaskReward.data = reward;
             item.m_listTaskReward.numItems = reward.Length;
             item.m_listTaskReward.numItems = reward.Length;
             var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy();
             var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy();
-            bool canGet = item.m_c1.selectedIndex == 1 && (taskType != TaskType.BattlePass || taskType == TaskType.BattlePass && isBuy);
+            bool canGet = item.m_c1.selectedIndex == 1 && (funcType != TaskType.BattlePass || funcType == TaskType.BattlePass && isBuy);
             RedDotController.Instance.SetComRedDot(item.m_GetRewardBt, canGet);
             RedDotController.Instance.SetComRedDot(item.m_GetRewardBt, canGet);
             UI_TaskListItem.ProxyEnd();
             UI_TaskListItem.ProxyEnd();
         }
         }
@@ -203,7 +203,7 @@ namespace GFGGame
         private async void OnBtnGetClick(EventContext context)
         private async void OnBtnGetClick(EventContext context)
         {
         {
             if (!(context.sender is GObject btnGet)) return;
             if (!(context.sender is GObject btnGet)) return;
-            if (taskType == TaskType.BattlePass)
+            if (funcType == TaskType.BattlePass)
             {
             {
                 //检查通行证是否开启
                 //检查通行证是否开启
                 var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy();
                 var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy();
@@ -237,7 +237,7 @@ namespace GFGGame
         private async void OnBtnGetAllClick()
         private async void OnBtnGetAllClick()
         {
         {
             //通用任务一键领奖
             //通用任务一键领奖
-            if (taskType == TaskType.BattlePass)
+            if (funcType == TaskType.BattlePass)
             {
             {
                 //检查通行证是否开启
                 //检查通行证是否开启
                 var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy();
                 var isBuy = BattlePassTaskDataManager.Instance.GetIsBuy();
@@ -247,7 +247,7 @@ namespace GFGGame
                     return;
                     return;
                 }
                 }
             }
             }
-            var result = await TaskSProxy.GetAllTaskBonus(taskType);
+            var result = await TaskSProxy.GetAllTaskBonus(funcType);
             if (!result) return;
             if (!result) return;
             UpdateLivenessProcess();
             UpdateLivenessProcess();
             UpdateTask();
             UpdateTask();

BIN
GameClient/Assets/ResIn/UI/Card/Card_fui.bytes


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


BIN
GameClient/Assets/ResIn/UI/EnduringGiftBox/EnduringGiftBox_fui.bytes


BIN
GameClient/Assets/ResIn/UI/Main/Main_fui.bytes