ソースを参照

饰品穿戴上限

zhaoyang 2 年 前
コミット
d02a95fca3

+ 1 - 1
FGUIProject/assets/DressUp/DressUpFightUI.xml

@@ -24,7 +24,7 @@
       <relation target="n1_qsvd" sidePair="left-left,top-top"/>
     </component>
     <image id="n50_f2bf" name="n50" src="f2bfey" fileName="images/dz_cdxzcdxz.png" xy="837,60" group="n51_f2bf"/>
-    <text id="n49_f2bf" name="txtDressLimit" xy="855,63" size="223,36" group="n51_f2bf" fontSize="26" color="#7a5e38" text="饰品穿戴限制:0/5"/>
+    <text id="n49_f2bf" name="txtDressLimit" xy="857,63" size="216,35" group="n51_f2bf" fontSize="25" color="#7a5e38" text="饰品穿戴限制:0/5"/>
     <group id="n51_f2bf" name="n51" xy="837,60" size="243,44" group="n38_8lqj"/>
     <image id="n16_8xpg" name="n16" src="j48o3z" fileName="images/dz_hz_fsk_1.png" xy="24,230" group="n33_j48o"/>
     <loader id="n24_d4iw" name="scoreType" xy="23,232" size="50,50" group="n33_j48o" url="ui://eg2y0ldp842s6h" fill="scale"/>

+ 11 - 0
GameClient/Assets/Game/HotUpdate/DressUp/DressUpObj.cs

@@ -87,6 +87,17 @@ namespace GFGGame
             _dressUpData = null;
         }
 
+        //传入一个服装部件Id,判断是否有与此部件同类型服装已穿着
+        public bool CheckSameTypeIsOn(int itemId)
+        {
+            int subType = ItemUtilCS.GetItemSubType(itemId);
+            for (int i = 0; i < _dressUpData.itemList.Count; i++)
+            {
+                int _subType = ItemUtilCS.GetItemSubType(_dressUpData.itemList[i]);
+                if (subType == _subType) return true;
+            }
+            return false;
+        }
         /// <summary>
         /// 仅判断换装部件是否已穿着
         /// </summary>

+ 136 - 112
GameClient/Assets/Game/HotUpdate/DressUp/MyDressUpHelper.cs

@@ -84,117 +84,120 @@ namespace GFGGame
             int count = 0;
             for (int i = 0; i < dressUpObj.itemList.Count; i++)
             {
-                if (DressUpMenuItemCfg1Array.Instance.CheckIsOrnamentsType(dressUpObj.itemList[i])) count++;
+                if (DressUpMenuItemCfg1Array.Instance.CheckIsOrnamentsType(dressUpObj.itemList[i]))
+                {
+                    count++;
+                }
             }
             return count;
         }
 
-        public static void PutOnRecommendItems()
-        {
-            List<int> recommendList = DressUpMenuItemDataManager.GetRecommendItemList();
-            StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId);
-            StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID);
-            int liangyiqunIndex = -1;
-            int shangyiIndex = -1;
-            int xiazhuangIndex = -1;
-            int neidaIndex = -1;
-            for (int i = 0; i < recommendList.Count; i++)
-            {
-                int subType = ItemUtilCS.GetItemSubType(recommendList[i]);
-                if (subType == ConstDressUpItemType.LIAN_YI_QUN)
-                {
-                    liangyiqunIndex = i;
-                    continue;
-                }
-                if (subType == ConstDressUpItemType.SHANG_YI)
-                {
-                    shangyiIndex = i;
-                    continue;
-                }
-                if (subType == ConstDressUpItemType.XIA_ZHUANG)
-                {
-                    xiazhuangIndex = i;
-                    continue;
-                }
-                if (subType == ConstDressUpItemType.NEI_DA)
-                {
-                    neidaIndex = i;
-                    continue;
+        // public static void PutOnRecommendItems()
+        // {
+        //     List<int> recommendList = DressUpMenuItemDataManager.GetRecommendItemList();
+        //     StoryLevelCfg levelCfg = StoryLevelCfgArray.Instance.GetCfg(InstanceZonesDataManager.currentLevelCfgId);
+        //     StoryFightCfg fightCfg = StoryFightCfgArray.Instance.GetCfg(levelCfg.fightID);
+        //     int liangyiqunIndex = -1;
+        //     int shangyiIndex = -1;
+        //     int xiazhuangIndex = -1;
+        //     int neidaIndex = -1;
+        //     for (int i = 0; i < recommendList.Count; i++)
+        //     {
+        //         int subType = ItemUtilCS.GetItemSubType(recommendList[i]);
+        //         if (subType == ConstDressUpItemType.LIAN_YI_QUN)
+        //         {
+        //             liangyiqunIndex = i;
+        //             continue;
+        //         }
+        //         if (subType == ConstDressUpItemType.SHANG_YI)
+        //         {
+        //             shangyiIndex = i;
+        //             continue;
+        //         }
+        //         if (subType == ConstDressUpItemType.XIA_ZHUANG)
+        //         {
+        //             xiazhuangIndex = i;
+        //             continue;
+        //         }
+        //         if (subType == ConstDressUpItemType.NEI_DA)
+        //         {
+        //             neidaIndex = i;
+        //             continue;
 
-                }
-            }
+        //         }
+        //     }
 
-            if (liangyiqunIndex >= 0 && (shangyiIndex >= 0 || xiazhuangIndex >= 0))
-            {
-                if (shangyiIndex < 0 && xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);//上衣下装只有一件,则保留连衣裙
-                if (xiazhuangIndex < 0 && shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
+        //     if (liangyiqunIndex >= 0 && (shangyiIndex >= 0 || xiazhuangIndex >= 0))
+        //     {
+        //         if (shangyiIndex < 0 && xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);//上衣下装只有一件,则保留连衣裙
+        //         if (xiazhuangIndex < 0 && shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
 
-                if (shangyiIndex >= 0 && xiazhuangIndex >= 0)//同时拥有上衣、下装、连衣裙
-                {
-                    int lianyiqunScore = ItemDataManager.GetItemAdditionScore(recommendList[liangyiqunIndex], InstanceZonesDataManager.currentScoreType);
-                    int shangyiScore = ItemDataManager.GetItemAdditionScore(recommendList[shangyiIndex], InstanceZonesDataManager.currentScoreType);
-                    int xiazhuangScore = ItemDataManager.GetItemAdditionScore(recommendList[xiazhuangIndex], InstanceZonesDataManager.currentScoreType);
-                    int neidaScore = neidaIndex >= 0 ? ItemDataManager.GetItemAdditionScore(recommendList[neidaIndex], InstanceZonesDataManager.currentScoreType) : 0;
-                    int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId);
-                    if (fightCfg.needItemId > 0 && recommendList.IndexOf(fightCfg.needItemId) >= 0 && (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA || subType == ConstDressUpItemType.LIAN_YI_QUN))//推荐列表里有必需品且,必需品类型为上衣或下装或连衣裙,有先穿戴必须品,其次穿戴高分服装
-                    {
-                        if (subType == ConstDressUpItemType.LIAN_YI_QUN)
-                        {
-                            shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList);
-                            if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
-                            xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList);
-                            if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);
-                            neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList);
-                            if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex);
-                        }
-                        else if (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA)
-                        {
-                            liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList);
-                            if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex);
-                        }
-                    }
-                    else
-                    {
-                        if (lianyiqunScore > shangyiScore + xiazhuangScore + neidaScore)
-                        {
-                            shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList);
-                            if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
-                            xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList);
-                            if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);
-                            neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList);
-                            if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex);
-                        }
-                        else
-                        {
-                            liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList);
-                            if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex);
-                        }
-                    }
-                }
-            }
-            //推荐搭配自动穿必穿品
-            if (fightCfg.needItemId > 0 && DressUpMenuItemDataManager.CheckHasItem(fightCfg.needItemId) && recommendList.IndexOf(fightCfg.needItemId) < 0)
-            {
-                int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId);
-                for (int i = 0; i < recommendList.Count; i++)
-                {
-                    int recommendSubType = ItemUtilCS.GetItemSubType(recommendList[i]);
-                    if (recommendSubType == subType)
-                    {
-                        recommendList.RemoveAt(i);
-                        break;
-                    }
-                }
-                recommendList.Add(fightCfg.needItemId);
-            }
-            else if (fightCfg.needSuitId > 0 && DressUpMenuSuitDataManager.CheckHaveSuit(fightCfg.needSuitId))
-            {
-                recommendList.Clear();
-                SuitCfg cfg = SuitCfgArray.Instance.GetCfg(fightCfg.needSuitId);
-                recommendList.AddRange(cfg.partsArr);
-            }
-            dressUpObj.PutOnItemList(recommendList);
-        }
+        //         if (shangyiIndex >= 0 && xiazhuangIndex >= 0)//同时拥有上衣、下装、连衣裙
+        //         {
+        //             int lianyiqunScore = ItemDataManager.GetItemAdditionScore(recommendList[liangyiqunIndex], InstanceZonesDataManager.currentScoreType);
+        //             int shangyiScore = ItemDataManager.GetItemAdditionScore(recommendList[shangyiIndex], InstanceZonesDataManager.currentScoreType);
+        //             int xiazhuangScore = ItemDataManager.GetItemAdditionScore(recommendList[xiazhuangIndex], InstanceZonesDataManager.currentScoreType);
+        //             int neidaScore = neidaIndex >= 0 ? ItemDataManager.GetItemAdditionScore(recommendList[neidaIndex], InstanceZonesDataManager.currentScoreType) : 0;
+        //             int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId);
+        //             if (fightCfg.needItemId > 0 && recommendList.IndexOf(fightCfg.needItemId) >= 0 && (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA || subType == ConstDressUpItemType.LIAN_YI_QUN))//推荐列表里有必需品且,必需品类型为上衣或下装或连衣裙,有先穿戴必须品,其次穿戴高分服装
+        //             {
+        //                 if (subType == ConstDressUpItemType.LIAN_YI_QUN)
+        //                 {
+        //                     shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList);
+        //                     if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
+        //                     xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList);
+        //                     if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);
+        //                     neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList);
+        //                     if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex);
+        //                 }
+        //                 else if (subType == ConstDressUpItemType.SHANG_YI || subType == ConstDressUpItemType.XIA_ZHUANG || subType == ConstDressUpItemType.NEI_DA)
+        //                 {
+        //                     liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList);
+        //                     if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex);
+        //                 }
+        //             }
+        //             else
+        //             {
+        //                 if (lianyiqunScore > shangyiScore + xiazhuangScore + neidaScore)
+        //                 {
+        //                     shangyiIndex = CheckIndex(ConstDressUpItemType.SHANG_YI, recommendList);
+        //                     if (shangyiIndex >= 0) recommendList.RemoveAt(shangyiIndex);
+        //                     xiazhuangIndex = CheckIndex(ConstDressUpItemType.XIA_ZHUANG, recommendList);
+        //                     if (xiazhuangIndex >= 0) recommendList.RemoveAt(xiazhuangIndex);
+        //                     neidaIndex = CheckIndex(ConstDressUpItemType.NEI_DA, recommendList);
+        //                     if (neidaIndex >= 0) recommendList.RemoveAt(neidaIndex);
+        //                 }
+        //                 else
+        //                 {
+        //                     liangyiqunIndex = CheckIndex(ConstDressUpItemType.LIAN_YI_QUN, recommendList);
+        //                     if (liangyiqunIndex >= 0) recommendList.RemoveAt(liangyiqunIndex);
+        //                 }
+        //             }
+        //         }
+        //     }
+        //     //推荐搭配自动穿必穿品
+        //     if (fightCfg.needItemId > 0 && DressUpMenuItemDataManager.CheckHasItem(fightCfg.needItemId) && recommendList.IndexOf(fightCfg.needItemId) < 0)
+        //     {
+        //         int subType = ItemUtilCS.GetItemSubType(fightCfg.needItemId);
+        //         for (int i = 0; i < recommendList.Count; i++)
+        //         {
+        //             int recommendSubType = ItemUtilCS.GetItemSubType(recommendList[i]);
+        //             if (recommendSubType == subType)
+        //             {
+        //                 recommendList.RemoveAt(i);
+        //                 break;
+        //             }
+        //         }
+        //         recommendList.Add(fightCfg.needItemId);
+        //     }
+        //     else if (fightCfg.needSuitId > 0 && DressUpMenuSuitDataManager.CheckHaveSuit(fightCfg.needSuitId))
+        //     {
+        //         recommendList.Clear();
+        //         SuitCfg cfg = SuitCfgArray.Instance.GetCfg(fightCfg.needSuitId);
+        //         recommendList.AddRange(cfg.partsArr);
+        //     }
+        //     dressUpObj.PutOnItemList(recommendList);
+        // }
 
         public static void PutOnRecommendItems2()
         {
@@ -298,15 +301,14 @@ namespace GFGGame
                             }
                         }
                     }
+                    DressUpMenuItemDataManager.SortItemListByHighScore(needOrnament);
+                    needOrnament = needOrnament.GetRange(0, Math.Min(needOrnament.Count, GlobalCfgArray.globalCfg.dressLimitCount));
                     recommendItems.AddRange(needOrnament);
 
-                    if (recommendItems.Count < GlobalCfgArray.globalCfg.dressLimitCount)
-                    {
-                        DressUpMenuItemDataManager.SortItemListByHighScore(recommecdOrnament);
-                        int count = Math.Min(recommecdOrnament.Count, GlobalCfgArray.globalCfg.dressLimitCount - recommendItems.Count);
-                        recommecdOrnament = recommecdOrnament.GetRange(0, count);
-                        recommendItems.AddRange(recommecdOrnament);
-                    }
+                    DressUpMenuItemDataManager.SortItemListByHighScore(recommecdOrnament);
+                    recommecdOrnament = recommecdOrnament.GetRange(0, Math.Min(recommecdOrnament.Count, GlobalCfgArray.globalCfg.dressLimitCount - needOrnament.Count));
+                    recommendItems.AddRange(recommecdOrnament);
+
                 }
             }
             return itemsDic;
@@ -371,7 +373,29 @@ namespace GFGGame
                 DressUpMenuItemDataManager.SortItemListByHighScore(recommendListBySubType[subType]);
             }
         }
-
+        //获取一套套装战斗时可用部件(剔除超过5件的饰品)
+        public static List<int> GetSuitFightItems(int suitId)
+        {
+            List<int> items = new List<int>();
+            List<int> ornamentItems = new List<int>();
+            int[] suitParts = SuitCfgArray.Instance.GetCfg(suitId).partsArr;
+            for (int i = 0; i < suitParts.Length; i++)
+            {
+                if (DressUpMenuItemCfg1Array.Instance.CheckIsOrnamentsType(suitParts[i]))
+                {
+                    ornamentItems.Add(suitParts[i]);
+                }
+                else
+                {
+                    items.Add(suitParts[i]);
+                }
+            }
+            DressUpMenuItemDataManager.SortItemListByHighScore(ornamentItems);
+            int count = Math.Min(ornamentItems.Count, GlobalCfgArray.globalCfg.dressLimitCount);
+            ornamentItems = ornamentItems.GetRange(0, count);
+            items.AddRange(ornamentItems);
+            return items;
+        }
         private static int CheckIndex(int _subType, List<int> recommendList)
         {
             for (int i = 0; i < recommendList.Count; i++)

+ 27 - 4
GameClient/Assets/Game/HotUpdate/Views/DressUp/DressUpFightView.cs

@@ -125,7 +125,6 @@ namespace GFGGame
             _ui.m_loaGuide.visible = true;
             InstanceZonesDataManager.usedRecommend = false;
             // _ui.m_comboBox.title = "我的套装";
-            // _ui.m_txtDressLimit.text = string.Format("饰品穿戴限制:{0}/{1}", MyDressUpHelper.GetCurrentOrnamentCount(), GlobalCfgArray.globalCfg.dressLimitCount);
             _ui.m_txtRecommendCount.SetVar("v1", "" + GameGlobal.myNumericComponent.GetAsInt(ET.NumericType.RecommendCount)).FlushVars();
             _ui.m_txtRecommendCount.SetVar("v2", GlobalCfgArray.globalCfg.recommendCount.ToString()).FlushVars();
 
@@ -188,6 +187,8 @@ namespace GFGGame
                 MyDressUpHelper.dressUpObj.setSceneObj(_sceneObject, false, false);
                 MyDressUpHelper.dressUpObj.PutOnDefaultDressUpData();
             }
+            _ui.m_txtDressLimit.text = string.Format("饰品穿戴限制:{0}/{1}", MyDressUpHelper.GetCurrentOrnamentCount(), GlobalCfgArray.globalCfg.dressLimitCount);
+
             UpdateScore();
             SendLog();
             Timers.inst.AddUpdate(CheckGuide);
@@ -322,14 +323,24 @@ namespace GFGGame
             {
                 this.showListParts2(id);
                 this.hideListParts();
-                MyDressUpHelper.dressUpObj.PutOnSuitCfg(id, false);
+                MyDressUpHelper.dressUpObj.PutOnItemList(MyDressUpHelper.GetSuitFightItems(id));
+                // MyDressUpHelper.dressUpObj.PutOnSuitCfg(id, false);
             }
             else
             {
+                bool isOrnament = DressUpMenuItemCfg1Array.Instance.CheckIsOrnamentsType(id);
+                bool isDress = MyDressUpHelper.dressUpObj.CheckDressUpItemIsOn(id);
+                bool isHasSame = MyDressUpHelper.dressUpObj.CheckSameTypeIsOn(id);
+                bool isMaxCount = MyDressUpHelper.GetCurrentOrnamentCount() >= GlobalCfgArray.globalCfg.dressLimitCount;
+                if (isOrnament && !isDress && !isHasSame && isMaxCount)
+                {
+                    PromptController.Instance.ShowFloatTextPrompt("饰品穿戴数量已达上限");
+                    return;
+                }
                 MyDressUpHelper.dressUpObj.CheckCancelActionWhenPutOn(id);
                 MyDressUpHelper.dressUpObj.AddOrRemove(id, true);
-
             }
+            _ui.m_txtDressLimit.text = string.Format("饰品穿戴限制:{0}/{1}", MyDressUpHelper.GetCurrentOrnamentCount(), GlobalCfgArray.globalCfg.dressLimitCount);
             UpdateListPartsSelected();
             UpdateListSuitPartsSelected();
         }
@@ -342,9 +353,19 @@ namespace GFGGame
             GObject listItem = (GObject)context.data as GObject;
             int id = (int)listItem.data;
 
+            bool isOrnament = DressUpMenuItemCfg1Array.Instance.CheckIsOrnamentsType(id);
+            bool isDress = MyDressUpHelper.dressUpObj.CheckDressUpItemIsOn(id);
+            bool isHasSame = MyDressUpHelper.dressUpObj.CheckSameTypeIsOn(id);
+            bool isMaxCount = MyDressUpHelper.GetCurrentOrnamentCount() >= GlobalCfgArray.globalCfg.dressLimitCount;
+            if (isOrnament && !isDress && !isHasSame && isMaxCount)
+            {
+                PromptController.Instance.ShowFloatTextPrompt("饰品穿戴数量已达上限");
+                return;
+            }
+
             MyDressUpHelper.dressUpObj.CheckCancelActionWhenPutOn(id);
             MyDressUpHelper.dressUpObj.AddOrRemove(id, true);
-
+            _ui.m_txtDressLimit.text = string.Format("饰品穿戴限制:{0}/{1}", MyDressUpHelper.GetCurrentOrnamentCount(), GlobalCfgArray.globalCfg.dressLimitCount);
             UpdateListSuitPartsSelected();
         }
         private void OnLongPress(EventContext context)
@@ -390,6 +411,7 @@ namespace GFGGame
             MyDressUpHelper.dressUpObj.TakeOffAll();
             _ui.m_partsList.m_list.numItems = _currentList3.Count;
             _ui.m_partsList2.m_list.numItems = _currentList4.Count;
+            _ui.m_txtDressLimit.text = string.Format("饰品穿戴限制:{0}/{1}", MyDressUpHelper.GetCurrentOrnamentCount(), GlobalCfgArray.globalCfg.dressLimitCount);
 
         }
 
@@ -506,6 +528,7 @@ namespace GFGGame
             InstanceZonesDataManager.usedRecommend = true;
             // MyDressUpHelper.PutOnRecommendItems();
             MyDressUpHelper.PutOnRecommendItems2();
+            _ui.m_txtDressLimit.text = string.Format("饰品穿戴限制:{0}/{1}", MyDressUpHelper.GetCurrentOrnamentCount(), GlobalCfgArray.globalCfg.dressLimitCount);
 
             UpdateListPartsSelected();
             UpdateListSuitPartsSelected();

BIN
GameClient/Assets/ResIn/UI/DressUp/DressUp_fui.bytes